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

C++ Coder

HCP高性能計算架構,實現,編譯器指令優化,算法優化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

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

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

并行區域的編譯指導語句一般格式

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

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

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

例子實例

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

      #pragma omp parallel指示它下面的一對大括號內的程序復制執行threads個數次。默默人情況下,所有并行區域中的變量是共享的,所以一定要謹防數據競爭的發生。


 

#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的執行結果

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

例2 使用threadprivate子句

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

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

    如果你使用另外#pragma omp threadprivate(var),那么var必須是靜態變量或者全局變量,如過你在并行開始之前并沒有初始化賦值,那么每個線程中默認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的并行都不是純真的聯合主線程的編號。這樣就混不了了。

 

#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執行結果

threadprivate指定了sum這個變量屬于每個線程,每個線程都有自己的sum變量,各個線程結束后他們的sum變量并沒有注銷,在此啊執行時,他們各自的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的執行結果

image

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

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

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

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

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

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

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

大家實驗把。。。

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| 亚洲一二三级电影| 欧美日韩天堂| 午夜精品免费在线| 日韩视频在线观看免费| 亚洲欧洲一区二区三区| 欧美一区二区三区四区夜夜大片| 日韩小视频在线观看专区| 在线观看欧美激情| 狠狠入ady亚洲精品经典电影| 国产精品久久久一本精品| 国产精品久久久久久久久久尿 | 欧美福利视频一区| 久久综合九色九九| 欧美电影免费网站| 欧美精品一区二区精品网| 欧美精品一区二| 国产精品精品视频| 国产亚洲精品久久久久动| 欧美日韩在线一区二区三区| 国产精品久久国产精品99gif| 国产精品蜜臀在线观看| 国产一区二区观看| 亚洲成色www8888| 日韩亚洲在线观看| 午夜久久久久久| 久久精品一区蜜桃臀影院| 免费观看在线综合色| 欧美日韩另类视频| 欧美日本韩国| 久久久久久久一区二区| 麻豆成人精品| 欧美三级中文字幕在线观看| 国产精品九九| 亚洲高清在线观看| 亚洲男人的天堂在线观看| 午夜精品久久久久久久99水蜜桃| 久久国产精品久久w女人spa| 免费高清在线一区| 亚洲精品欧美专区| 午夜宅男久久久| 欧美激情女人20p| 国产精品乱码一区二三区小蝌蚪| 黄色日韩在线| 亚洲欧美日韩国产精品| 欧美成人精品一区二区| 亚洲午夜日本在线观看| 久久综合给合久久狠狠色| 国产精品成人免费视频| 亚洲韩国精品一区| 亚洲一区二区三区乱码aⅴ| 美女视频黄a大片欧美| 亚洲桃色在线一区| 欧美大片91| 国产精品资源| 亚洲国产一区二区三区a毛片| 在线亚洲电影| 亚洲国产免费| 久久久精品动漫| 国产乱码精品一区二区三区忘忧草 | 伊人久久综合97精品| 欧美在线高清| 欧美日韩国产成人精品| 亚洲国产成人精品视频| 久久成人人人人精品欧| 亚洲精品欧美日韩| 久久先锋资源| 国产午夜亚洲精品不卡| 亚洲视频一区二区在线观看| 欧美激情亚洲视频| 久久久精品动漫| 国产伦一区二区三区色一情| 夜夜嗨av一区二区三区| 欧美成人免费播放| 亚洲一区二区三区中文字幕| 欧美精品乱码久久久久久按摩| 国产亚洲电影| 性色一区二区三区| 亚洲欧美精品在线观看| 国产精品一区二区三区四区| 亚洲欧美在线一区| 亚洲一级黄色片| 久久久久久久久久久久久久一区| 国产精品亚洲综合色区韩国| 一本大道久久精品懂色aⅴ| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美一区二粉嫩精品国产一线天| 国产精品美女一区二区在线观看| 亚洲精品三级| 欧美日韩在线播| 一区二区三区高清视频在线观看| 亚洲电影自拍| 欧美理论电影在线观看| 99热免费精品| 亚洲日本电影在线| 欧美三级在线播放| 亚洲一区日韩在线| 亚洲欧美日韩精品久久久久| 国产农村妇女精品一区二区| 久久精品1区| 久久久精品日韩| 亚洲欧洲另类国产综合| 亚洲国产一区二区视频| 国产精品草莓在线免费观看| 午夜视频在线观看一区| 亚洲欧美一区二区激情| 黄色一区二区在线| 久久综合影视| 免费不卡在线观看av| 一区二区三区视频在线观看| 午夜激情综合网| 亚洲第一精品在线| 亚洲第一视频| 欧美国产日韩一区二区| 亚洲片国产一区一级在线观看| 亚洲激情一区二区三区| 国产精品青草综合久久久久99| 久久久xxx| 欧美精品观看| 欧美在线免费观看视频| 欧美专区日韩专区| 99re视频这里只有精品| 亚洲午夜久久久久久久久电影院 | 黑丝一区二区| 欧美激情第9页| 国产精品久久午夜夜伦鲁鲁| 久热精品视频在线| 欧美国产日韩一区| 久久精品亚洲精品| 欧美日韩视频在线观看一区二区三区| 欧美一区2区三区4区公司二百| 可以免费看不卡的av网站| 99v久久综合狠狠综合久久| 午夜在线观看欧美| 亚洲神马久久| 午夜在线a亚洲v天堂网2018| 亚洲黄色一区二区三区| 亚洲一区二区三区在线看| 在线欧美日韩精品| 日韩一区二区久久| 亚洲国产精品成人久久综合一区 | 亚洲茄子视频| 99精品国产在热久久婷婷| 国产精品福利影院| 亚洲一区三区电影在线观看| 久久综合亚州| 久久久91精品| 欧美日韩1区2区3区| 久久免费偷拍视频| 国产精品综合网站| 亚洲午夜激情| 亚洲一级片在线观看| 乱人伦精品视频在线观看| 狂野欧美激情性xxxx欧美| 国产模特精品视频久久久久| 亚洲国产一区二区精品专区| 亚洲第一中文字幕| 亚洲制服少妇| 亚洲欧美日韩精品久久亚洲区 | 国产精品激情偷乱一区二区∴| 欧美激情第4页| 亚洲福利视频专区| 久久综合国产精品| 欧美gay视频| 伊人久久成人| 久久综合久色欧美综合狠狠 | 99re热这里只有精品免费视频| 亚洲三级毛片| 久久亚洲美女| 欧美成人一区二区| 亚洲国产精品久久久久秋霞不卡 | 欧美国产在线电影| 亚洲免费电影在线| 午夜精品网站| 国产婷婷成人久久av免费高清| 午夜精品电影| 麻豆av福利av久久av| 亚洲高清网站| 欧美激情一区在线观看| 日韩视频免费看| 日韩亚洲欧美综合| 国产精品日韩欧美一区二区| 香蕉免费一区二区三区在线观看| 久久久国产一区二区| 在线观看免费视频综合| 欧美成人综合在线| 国产精品99久久久久久宅男 | 亚洲一区二区三区午夜| 久久久亚洲国产美女国产盗摄| 亚洲电影免费观看高清| 欧美日韩的一区二区| 亚洲欧美一区二区原创| 你懂的视频一区二区| 一本久久综合亚洲鲁鲁五月天| 国产精品福利网| 乱码第一页成人| 亚洲欧美区自拍先锋| 亚洲国产欧美在线人成| 欧美一区二区三区成人| 亚洲国产欧美日韩|