青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Coder

HCP高性能計算架構(gòu),實現(xiàn),編譯器指令優(yōu)化,算法優(yōu)化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  98 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks
http://blog.csdn.net/bendanban/article/details/6303282

在上一節(jié)中我們講的是一個常用的并行化編程方法(for的并行化),其實它只是并行化編程的一個特例,只是它的地位較高,或者說它比其它并行化更重要。在本節(jié)中我們將討論一般的并行區(qū)域編程。

并行區(qū)域的編譯指導語句一般格式

    一般格式:#pragma omp parallel [clause[clause]…]{…}

    其中{…}中為每個線程都執(zhí)行的部分,在parallel后面可以跟隨一些指導子句,例如:threadprivate、copyin等,本節(jié)中將以一些實例來依次講解這些語句的作用。

    時刻記住,主線程就是0號線程,這個與for不同,另外private、firstprivate、lastprivate是for并行的東西最好不要拿來比較,盡管我在本文里比較了,但是我還是感覺有些頭痛啊。

例子實例

例1 不帶指導子句的并行程序

      #pragma omp parallel指示它下面的一對大括號內(nèi)的程序復制執(zhí)行threads個數(shù)次。默默人情況下,所有并行區(qū)域中的變量是共享的,所以一定要謹防數(shù)據(jù)競爭的發(fā)生。


 

#include 
#include 
"omp.h" 
int main(int argc, char* argv[]) 

    #pragma omp parallel 
    
for (int i = 0; i < 2; i++
    

        printf(
"Hello World! i = %d, Thread Num = %d/n", i, omp_get_thread_num()); 
    }
 
    
return 0
}

 

image

圖1、例1的執(zhí)行結(jié)果

例1的執(zhí)行結(jié)果可以看出四個線程分別執(zhí)行了一遍#pragma omp parallel下面的語句,想想一下如果使用#pragma omp parallel for會是什么樣的結(jié)果。

例2 使用threadprivate子句

     此命令表示所有并行線程使用指定變量為各自私有的,能被定義為各線程私有變量的變量只能是靜態(tài)變量和全局變量。看下面的程序,希望你能發(fā)現(xiàn),其實#pragma omp threadprivate()是可以單獨使用的。

    說明一下:被定義為threadprivate的變量對于每個線程永遠是活的,你在任何時候再次重新啟動各線程時,前面并行時最后得到的變量值仍然保留他的值,如果你用private代替threadprivate,那么你重新啟動各線程時,變量的值仍然為0。如果你不初始化要聲明為private的變量,那么在串行程序中,你就不能再沒有任何賦值的情況下使用它,否則會引起異常的(VS2010)。而且private不能單獨像threadprivate那樣定義某個變量。

    如果你使用另外#pragma omp threadprivate(var),那么var必須是靜態(tài)變量或者全局變量,如過你在并行開始之前并沒有初始化賦值,那么每個線程中默認var的值為0.如果你賦了初值,那么每個線程中var的初值都是你賦的初始值。其中主線程就是0號線程。如果你使用了#pragma omp private(var),那么var并不會賦初值,即使你在并行之前賦了初值。想想原先#pragma omp parallel for 的firstprivate就知道了,呵呵。在#pragma omp parallel中可以使用lastprivate,但是不能使用lastprivate,使用firstprivate(var)后,串行部分的var并不是并行時0號線程的var值,它仍未你原先賦的初值。是不是很繞啊?呵呵,你可以這樣理解,使用firstprivate和private的并行都不是純真的聯(lián)合主線程的編號。這樣就混不了了。

 

#include 
#include 
"omp.h" 
int sum = 0
#pragma omp threadprivate(sum) 
int main(int argc, char* argv[]) 

    #pragma omp parallel 
    

        sum 
+= omp_get_thread_num(); 
        printf(
"parallel sum = %d; thread num = %d/n", sum, omp_get_thread_num()); 
    }
 
    printf(
"/nserial sum = %d; thread num = %d/n/n", sum, omp_get_thread_num()); 
    #pragma omp parallel 
    printf(
"parallel sum = %d; thread num = %d/n", sum, omp_get_thread_num()); 
    
return 0
}



 

image

圖2、例2執(zhí)行結(jié)果

threadprivate指定了sum這個變量屬于每個線程,每個線程都有自己的sum變量,各個線程結(jié)束后他們的sum變量并沒有注銷,在此啊執(zhí)行時,他們各自的sum值還保持原值。

例3 使用copyin

指定主線程的值拷貝到各線程中去,下面的例子中,sum是每個線程獨有的,并且初始值都是0,main中第一行代碼將0號線程的sum值賦為100,其它線程的sum值并沒有變。

 

#include <stdio.h>
#include 
"omp.h" 
int sum; 
#pragma omp threadprivate(sum) 
int main(int argc, char* argv[]) 

    sum 
= 100
    #pragma omp parallel copyin(sum) 
    

        sum 
+= omp_get_thread_num(); 
        printf(
"parallel sum = %d; thread num = %d/n", sum, omp_get_thread_num()); 
    }
 
    printf(
"/nserial sum = %d; thread num = %d/n/n", sum, omp_get_thread_num()); 
    #pragma omp parallel 
    printf(
"parallel sum = %d; thread num = %d/n", sum, omp_get_thread_num()); 
    
return 0
}



 

image

圖3、例3的執(zhí)行結(jié)果

image

圖4、例3中將copyin(sum)刪除后的執(zhí)行結(jié)果

通過以上圖3、4可以看出copyin的用處是初始化各個線程中自己私有的sum變量。實際上定義sum為全局量時的初始值就是原sum值(如果不使用copyin的話)。

我想了想threadprivate和private以及firstprivate的區(qū)別。寫出來大家討論下。

1、threadprivate,限制變量為每個線程私有。被限制的變量必須具有全局特性,他的生命周期是整個程序。

2、private,可以限制變量為每個線程私有,但是他的生命周期是一次啟動并行計算。

3、firstprivate,可以將穿行程序中的初值帶進每個線程,變量為每個線程私有。生命周期與private相同。

4、還有個lastprivate的問題,他并不能在區(qū)域并行中使用。

大家實驗把。。。

posted on 2012-10-21 11:55 jackdong 閱讀(384) 評論(0)  編輯 收藏 引用 所屬分類: OPenMP
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产精品99久久久久久老狼| 一区二区三区国产在线观看| 欧美亚洲在线视频| 久久精品九九| 亚洲免费观看高清完整版在线观看| 久久xxxx| 午夜精品久久久久久久男人的天堂 | 欧美激情国产日韩| 一本久久综合| 亚洲午夜91| 一区二区三区国产在线观看| 激情婷婷亚洲| 国内精品视频在线播放| 国产一区二区精品久久99| 国产精品乱码一区二区三区| 欧美视频在线观看| 国产精品爽爽爽| 国产午夜精品理论片a级大结局| 亚洲一卡久久| 欧美一区二区三区啪啪| 亚洲在线观看免费| 久久久水蜜桃av免费网站| 欧美韩日精品| 国产日韩欧美一区| 在线观看视频日韩| 久久精品一本| 亚洲免费观看在线观看| 噜噜噜久久亚洲精品国产品小说| 欧美性大战久久久久| 影音先锋亚洲电影| 久久av老司机精品网站导航| 亚洲激情国产精品| 亚洲欧美中文日韩在线| 欧美激情精品久久久久久久变态 | 日韩视频专区| 久久夜色精品国产欧美乱| 欧美三级日韩三级国产三级| 日韩亚洲精品视频| 欧美激情 亚洲a∨综合| 美脚丝袜一区二区三区在线观看 | 国产精品国产精品| 亚洲欧美国产一区二区三区| 一区二区三区日韩在线观看| 欧美日韩国产综合新一区| 亚洲精品婷婷| 亚洲在线视频免费观看| 韩日精品中文字幕| 亚洲欧美综合精品久久成人| 亚洲在线播放电影| 国产日韩在线视频| 欧美成人一区二区在线| 欧美日韩精品一区二区三区四区| 日韩视频在线一区| 亚洲自拍偷拍视频| 亚洲第一精品夜夜躁人人躁| 亚洲精品一区二区在线| 国产人成一区二区三区影院| 欧美成人综合| 国产麻豆午夜三级精品| 欧美高清视频| 国产精品一级二级三级| 亚洲成人在线视频播放| 欧美精品成人| 久热精品视频在线观看一区| 欧美日韩在线精品一区二区三区| 久久亚裔精品欧美| 国产精品久久久久一区二区三区 | 欧美在线免费看| 欧美日韩午夜| 亚洲电影免费观看高清完整版| 国产精品另类一区| 亚洲国产精品热久久| 国产一区激情| 亚洲欧美日韩国产综合| 亚洲女同在线| 欧美日韩视频在线一区二区观看视频| 欧美高清视频| 亚洲国产91| 欧美激情精品久久久久| 亚洲人体一区| 欧美日韩精品在线播放| 免费欧美日韩| 亚洲激情成人网| 欧美日本国产精品| 日韩视频永久免费观看| 亚洲欧美区自拍先锋| 欧美视频在线一区| 欧美中文字幕不卡| 欧美与欧洲交xxxx免费观看| 国产日韩一级二级三级| 亚洲免费小视频| 欧美激情在线有限公司| 99在线视频精品| 国产欧美日韩免费| 开心色5月久久精品| 一本色道久久综合狠狠躁篇怎么玩| 在线一区二区日韩| 韩国精品在线观看| 欧美日韩亚洲国产精品| 久久精品国产999大香线蕉| 亚洲电影免费观看高清| 欧美一区二区三区四区夜夜大片| 精品成人在线观看| 国产精品日本一区二区| 欧美a级片网站| 久久精品国产免费看久久精品| 亚洲第一精品在线| 久久精品久久99精品久久| 中文一区二区| 日韩视频精品| 亚洲精品国产精品乱码不99| 欧美日韩成人综合在线一区二区| 欧美亚洲免费| 亚洲欧美国产制服动漫| 亚洲国产91| 欧美搞黄网站| 美女诱惑黄网站一区| 久久精品72免费观看| 午夜精品一区二区三区在线视| 99xxxx成人网| 国产精品电影网站| 玖玖玖免费嫩草在线影院一区| 欧美与欧洲交xxxx免费观看 | 欧美在线视频免费| 日韩视频一区二区三区在线播放免费观看 | 亚洲国产一区二区三区a毛片| 亚洲色图在线视频| 欧美亚洲成人网| 亚洲欧美国产日韩天堂区| 欧美激情一区二区三区成人| 亚洲综合色激情五月| 欧美激情综合五月色丁香小说 | 久久亚洲精品一区二区| 久久精品欧洲| 一区二区亚洲精品国产| 久久嫩草精品久久久精品| 国产主播精品在线| 亚洲视频网站在线观看| 久久久精品动漫| 136国产福利精品导航| 久久精品一区蜜桃臀影院| 亚洲电影一级黄| 亚洲一区日韩| 在线高清一区| 国产精品大片wwwwww| 久久精品视频va| 一区二区三区视频在线| 国产精品欧美一区二区三区奶水| 韩国v欧美v日本v亚洲v| 国产一区二区精品| 欧美亚洲成人网| 欧美精品1区2区| 久久免费午夜影院| 欧美有码在线视频| 亚洲一区尤物| 亚洲一区二区av电影| 亚洲黄网站在线观看| 亚洲欧美日本精品| 亚洲欧美日韩一区二区| 亚洲精品乱码久久久久| 亚洲成色999久久网站| 激情五月婷婷综合| 国产九九精品视频| 国产精品日韩欧美一区| 欧美日韩免费网站| 国产精品高潮呻吟久久| 欧美私人网站| 国产免费亚洲高清| 亚洲国产成人一区| 亚洲人成在线免费观看| 一本久久综合亚洲鲁鲁| 91久久在线播放| 亚洲视频一区二区在线观看| 中日韩高清电影网| 亚洲一区二区成人| 久久精品国产久精国产思思| 久久久久久久久久久久久9999 | 亚洲欧洲一区二区三区| 日韩视频亚洲视频| 亚洲一区二区免费在线| 久久aⅴ国产欧美74aaa| 亚洲激情网站| 亚洲一二三区在线观看| 久久精品人人做人人综合| 国产精品一区二区三区久久| 国产精品国产三级国产专播精品人 | 久久久久久亚洲精品中文字幕| 欧美日本一区二区视频在线观看| 亚洲免费视频在线观看| 欧美一级大片在线观看| 国产精品丝袜91| 欧美激情一区二区三区四区| 久久精品99久久香蕉国产色戒 | 欧美性久久久| 一本久道久久久| 亚洲一区二区三区四区视频| 在线播放中文字幕一区| 欧美国产日韩精品| 久久久久久久成人| 亚洲综合日韩中文字幕v在线|