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

C++ Coder

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

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

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

并行區(qū)域的編譯指導(dǎo)語(yǔ)句一般格式

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

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

    時(shí)刻記住,主線程就是0號(hào)線程,這個(gè)與for不同,另外private、firstprivate、lastprivate是for并行的東西最好不要拿來(lái)比較,盡管我在本文里比較了,但是我還是感覺(jué)有些頭痛啊。

例子實(shí)例

例1 不帶指導(dǎo)子句的并行程序

      #pragma omp parallel指示它下面的一對(duì)大括號(hào)內(nèi)的程序復(fù)制執(zhí)行threads個(gè)數(shù)次。默默人情況下,所有并行區(qū)域中的變量是共享的,所以一定要謹(jǐn)防數(shù)據(jù)競(jìng)爭(zhēng)的發(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é)果可以看出四個(gè)線程分別執(zhí)行了一遍#pragma omp parallel下面的語(yǔ)句,想想一下如果使用#pragma omp parallel for會(huì)是什么樣的結(jié)果。

例2 使用threadprivate子句

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

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

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

 

#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這個(gè)變量屬于每個(gè)線程,每個(gè)線程都有自己的sum變量,各個(gè)線程結(jié)束后他們的sum變量并沒(méi)有注銷(xiāo),在此啊執(zhí)行時(shí),他們各自的sum值還保持原值。

例3 使用copyin

指定主線程的值拷貝到各線程中去,下面的例子中,sum是每個(gè)線程獨(dú)有的,并且初始值都是0,main中第一行代碼將0號(hào)線程的sum值賦為100,其它線程的sum值并沒(méi)有變。

 

#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é)果

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

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

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

2、private,可以限制變量為每個(gè)線程私有,但是他的生命周期是一次啟動(dòng)并行計(jì)算。

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

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

大家實(shí)驗(yàn)把。。。

posted on 2012-10-21 11:55 jackdong 閱讀(388) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): OPenMP

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美日韩在线高清直播| 欧美激情1区2区3区| 黄色日韩在线| 一本大道av伊人久久综合| 亚洲国产高清在线| 久久免费视频观看| 欧美日韩一区二区免费视频| 欧美成ee人免费视频| 国产精品黄视频| 亚洲国产欧美一区| 伊人久久亚洲热| 久久av一区二区三区亚洲| 一区二区视频免费在线观看| 亚洲在线成人精品| 亚洲天天影视| 欧美日韩一区二区欧美激情| 亚洲区欧美区| 日韩视频中文字幕| 欧美精品一区二区三区蜜桃| 亚洲精品免费观看| 亚洲少妇一区| 性欧美激情精品| 久久九九全国免费精品观看| 国产日本欧美一区二区三区在线| 中日韩在线视频| 亚洲视频欧洲视频| 欧美视频国产精品| 亚洲午夜极品| 精品福利电影| 欧美成人dvd在线视频| 免费人成网站在线观看欧美高清| 黄色日韩网站| 欧美超级免费视 在线| 99成人免费视频| 亚洲一区视频| 国产欧美日韩精品a在线观看| 午夜欧美精品久久久久久久| 久久久久久色| 日韩视频在线观看国产| 亚洲视频一区二区免费在线观看| 欧美亚洲视频| 国产亚洲人成网站在线观看| 久久激情五月丁香伊人| 男女av一区三区二区色多| 极品少妇一区二区三区精品视频 | 国产精品大片| 亚洲欧美国产另类| 欧美亚洲一级片| 黄色在线一区| 欧美精品久久久久a| 亚洲午夜精品福利| 久久夜色精品国产| 国产精品99久久久久久久女警| 国产欧美日韩高清| 欧美国产精品一区| 久久久久久久一区| 日韩视频免费观看高清完整版| 欧美日韩一区二区视频在线| 亚洲一区在线播放| 麻豆精品视频在线观看| 日韩视频精品| 国产一区二区三区在线观看视频| 亚洲另类一区二区| 久久久久九九视频| 亚洲经典在线| 国产精品扒开腿做爽爽爽软件| 久久丁香综合五月国产三级网站| 最新国产成人在线观看| 久久国产精品久久久久久| 99re6热在线精品视频播放速度 | 久久精品99久久香蕉国产色戒 | 国产亚洲视频在线| 久久婷婷国产综合尤物精品 | 欧美在线免费观看视频| 伊人春色精品| 欧美日韩高清在线播放| 久久精品久久99精品久久| 日韩视频一区二区三区在线播放免费观看| 在线精品国精品国产尤物884a| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 国产精品久久久久国产精品日日 | 久久亚洲综合色| 久久男人av资源网站| 在线亚洲一区| 一区二区视频在线观看| 国产精品vvv| 欧美黄污视频| 久久久久久久久久久久久9999| 国产精品99久久久久久人| 亚洲国产高清aⅴ视频| 亚洲精品一级| 在线观看日韩欧美| 欧美性猛交99久久久久99按摩 | 亚洲综合日韩中文字幕v在线| 亚洲激情在线| 亚洲第一区色| 欧美刺激性大交免费视频| 久久久久久综合| 久久久av网站| 久久av资源网| 欧美在线视屏| 久久精品人人做人人爽电影蜜月| 午夜视频久久久| 午夜精品偷拍| 欧美中文字幕在线播放| 校园激情久久| 久久aⅴ乱码一区二区三区| 性做久久久久久免费观看欧美| 亚洲午夜羞羞片| 亚洲午夜在线观看| 亚洲制服少妇| 欧美一区二区三区在线播放| 亚洲永久免费精品| 国产一区av在线| 国模私拍一区二区三区| 国产日韩精品一区二区| 国产精品中文字幕欧美| 国产精品亚洲аv天堂网| 国产伦精品一区二区三区免费| 欧美高清在线视频| 欧美精品在线视频观看| 欧美日韩另类一区| 欧美亚洲一区二区在线观看| 午夜久久黄色| 午夜免费在线观看精品视频| 欧美亚洲在线观看| 久久久久久电影| 久久久久成人精品| 男女激情视频一区| 欧美精品18| 国产精品videossex久久发布| 国产欧美一区二区视频| 精品动漫av| 日韩亚洲国产精品| 中国日韩欧美久久久久久久久| 一区二区日韩| 亚洲欧美日韩国产中文| 欧美怡红院视频| 乱人伦精品视频在线观看| 免费欧美在线视频| 亚洲精品小视频| 亚洲制服av| 久久视频免费观看| 一区二区日韩| 午夜欧美精品| 蜜桃av一区二区| 欧美色另类天堂2015| 国产精品一二三四区| 韩国av一区二区三区| 亚洲精品亚洲人成人网| 久久国产加勒比精品无码| 欧美国产91| 亚洲欧美日韩国产精品| 欧美激情aaaa| 激情久久久久久久| 欧美午夜激情视频| 国产亚洲精品久久久久动| 亚洲国产精品高清久久久| 亚洲综合色丁香婷婷六月图片| 久久综合中文色婷婷| 99视频精品| 久久女同互慰一区二区三区| 欧美另类高清视频在线| 国产综合香蕉五月婷在线| 国产精品美女www爽爽爽视频| 一区二区在线视频播放| 一个色综合av| 久久亚洲高清| 亚洲影院色无极综合| 久久亚洲春色中文字幕| 国产精品久久久久久久久免费桃花| 亚洲成人在线视频播放| 亚洲欧美日韩另类精品一区二区三区 | 久久综合网hezyo| 久久国产婷婷国产香蕉| 欧美片在线观看| 国产亚洲毛片| 国产精品美女久久久浪潮软件| 一区二区三区在线视频观看| 亚洲视频在线一区| 亚洲国产影院| 久久精品一区四区| 国产农村妇女毛片精品久久莱园子| 国产精品久久二区| 99精品免费视频| 欧美88av| 亚洲欧美国产日韩天堂区| 欧美午夜视频网站| 一本大道久久a久久精二百| 老牛影视一区二区三区| 午夜欧美精品| 国产欧美在线看| 欧美在线精品免播放器视频| 亚洲一区美女视频在线观看免费| 欧美网站在线观看| 亚洲一区免费观看| 欧美在线视频免费观看| 中文亚洲免费| 欧美日韩国产三级| 亚洲美女精品久久|