第5A章OpenMP并行程序設計-2010_第1頁
第5A章OpenMP并行程序設計-2010_第2頁
第5A章OpenMP并行程序設計-2010_第3頁
第5A章OpenMP并行程序設計-2010_第4頁
第5A章OpenMP并行程序設計-2010_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、多媒體技術 2010 西安交通大學 新型計算機研究所1n5.1 多核技術n5.2 并行編程模型n5.3 OpenMP并行程序設計多媒體技術 2010 西安交通大學 新型計算機研究所n處理器的頻率u以前是處理器性能的唯一標尺u在摩爾定律指引下保持高速發(fā)展CPU速度每18個月提高一倍而價格下降為原來的二分之一n主頻提高遭遇瓶頸u由于晶體管數(shù)量倍增,會導致硅芯片所需要的電能、耗費功率大幅提升,甚至成幾何級數(shù)的增加 n3GHz成為了無法逾越的一道坎uIntel發(fā)布3.8GHz的產品,宣布停止4GHz的產品計劃uAMD頻率超過2GHz以后無法大幅度提升CPU可以煎蛋?CPU功耗增長多媒體技術 2010

2、西安交通大學 新型計算機研究所n高端的RISC處理器中u在上個世紀末,HP和IBM已經提出雙核處理器的可行性設計,成功推出了擁有雙內核的HP PA8800和IBM Power4處理器uSun在2003年10月微處理器論壇中,發(fā)表雙核心UltraSPARC處理器n x86平臺 uAMD和Intel在2004年公布了各自的雙核計劃uAMD率先在服務器和工作站領域引入雙核架構uIntel率先在臺式機領域引入雙核技術! 多媒體技術 2010 西安交通大學 新型計算機研究所多媒體技術 2010 西安交通大學 新型計算機研究所n多核u片上多處理器CMP(Chip Multiprocessor)u在一塊硅晶

3、片上,集成多個計算核心u每個計算核心都是一個完整而獨立的計算單體u核之間通過特定的硅晶片內通信方式互連例如總線、共享緩存u考慮多個處理核之間的功能分工、通信方式、存儲層次和制造工藝等約束nCMP最早出現(xiàn)在1991年的Datawave結構中u設計可并行的處理器來解決視頻處理中的大量數(shù)據計算n根據處理器中各個核類型的不同,多核芯片可以分為u同構多核體系(Homogeneous CMP)u異構多核體系(Heterogeneous CMP)多媒體技術 2010 西安交通大學 新型計算機研究所n前端總線(FSB)u總線頻率,CPU與內存直接數(shù)據交換速度u數(shù)據傳輸最大帶寬取決于所有同時傳輸?shù)臄?shù)據的寬度和傳

4、輸頻率u前端總線的速度指的是數(shù)據傳輸?shù)乃俣萵CPU的位和字長u字長CPU在單位時間內(同一時間)能一次處理的二進制數(shù)的位數(shù)目前主流是32位,也有64、128位u字節(jié)和字長的區(qū)別8位稱為一個字節(jié)字長的長度是不固定的對于不同的CPU、字長的長度也不一樣多媒體技術 2010 西安交通大學 新型計算機研究所n內存是非常慢的期間,需要緩存(cache)加速nL1 Cache(一級緩存)uCPU第一層高速緩存u可分為數(shù)據緩存和指令緩存nL2 Cache(二級緩存)nL3 Cache(三級緩存)u一般用于服務器多媒體技術 2010 西安交通大學 新型計算機研究所多媒體技術 2010 西安交通大學 新型計算機

5、研究所n左圖:每二核共享二級緩存n右圖:四核共享二級緩存多媒體技術 2010 西安交通大學 新型計算機研究所n雙核甚至多核處理器需要多線程化n大多數(shù)應用用C或C+編寫的n根據單線程設計n多線程優(yōu)化u需要耗費大量勞動力的改寫過程u重頭再來n多核迫使軟件開發(fā)朝并行化方向發(fā)展nRISC架構的多核系統(tǒng)上已經形成了比較成熟的多線程系統(tǒng)并行處理能力n在x86架構下,應用程序的開發(fā)者還停留在單線程的開發(fā)模式下。多媒體技術 2010 西安交通大學 新型計算機研究所n程序是否具備擴展性n程序能否更精確n產品是否易于編程和維護n并行開發(fā)模式u打破串行的編程過程“一步一步”的模式u首先要進行分析和拆解u然后才能進行

6、程序的編寫n程序設計并行規(guī)劃u為雙核,四核、八核、十六核等更多核芯規(guī)模開發(fā)n針對多核的開發(fā)過程與傳統(tǒng)的開發(fā)模式的不同u需要性能優(yōu)化工具多媒體技術 2010 西安交通大學 新型計算機研究所n現(xiàn)狀u科學計算部分程序員可以進行并行編程,大部分程序是MPI程序,OpenMP也有一定比例u服務器服務器程序大部分采用多線程(PThread, Java Thread或Win32 Threads )模型u桌面系統(tǒng)除少數(shù)應用(圖像處理,3D制作)外,大部分程序是串行程序多媒體技術 2010 西安交通大學 新型計算機研究所n多內核處理器所帶來的變化u科學計算MPI程序可以在多內核系統(tǒng)上直接執(zhí)行(優(yōu)化MPI)Ope

7、nMP將更加流行如何同時支持多內核共享內存系統(tǒng)和集群系統(tǒng)?u服務器原有的多線程程序可以直接執(zhí)行u桌面系統(tǒng)OpenMP對于大多數(shù)桌面系統(tǒng)程序員來說過于復雜,對新的高效并行程序設計語言有強烈需求多媒體技術 2010 西安交通大學 新型計算機研究所n廣義的自動并行化,指開發(fā)人員無需考慮并行性,僅設計串行程序,由軟件或硬件系統(tǒng)自動將串行程序轉換為并行程序u編譯器輔助的自動并行化u硬件推測執(zhí)行u并行庫多媒體技術 2010 西安交通大學 新型計算機研究所n編譯器輔助的自動并行化u自動向量化很成功u線程級的自動并行化效果不夠理想4處理器的SMP系統(tǒng)上平均加速比30%u多內核處理器系統(tǒng)的出現(xiàn)降低了對自動并行化

8、技術的期望,4 core 30%可以接受(沒有其它編譯優(yōu)化可以提高30%的性能)n并行庫uINTEL MKL,SCALAPACK,PNL等,將優(yōu)化算法在函數(shù)庫中實現(xiàn)u應用范圍依然有限多媒體技術 2010 西安交通大學 新型計算機研究所n可以在多核平臺上實現(xiàn)真正的并行。n在各個核上可以實現(xiàn)并發(fā)。多媒體技術 2010 西安交通大學 新型計算機研究所nAll processors have access to one global memorynAll processors share the same address space nThe system runs a single copy of

9、the OSnProcessors communicate by reading/writing to the global memorynExamples: multiprocessor PCs (Intel P4), Sun Fire 15K, NEC SX-7, Fujitsu PrimePower, IBM p690, SGI Origin 3000.多媒體技術 2010 西安交通大學 新型計算機研究所OpenMPPthreads多媒體技術 2010 西安交通大學 新型計算機研究所ProcessorMProcessorMProcessorM Interconnect MPI HPF多媒

10、體技術 2010 西安交通大學 新型計算機研究所 MPI hybrid MPI + OpenMP多媒體技術 2010 西安交通大學 新型計算機研究所u顯式線程(Explicit threading)微軟Windows線程API, Pthreads, Java線程類等。u利用編譯器指導(Compiler-directed)自動并行, OpenMP, Intel Threading Building Blocks等u利用并行數(shù)學庫(Parallel math libraries)Intel IPP/MKL, ScaLAPACK, PARDISO, PLAPACKu并行程序語言 有150種以上u消息

11、傳遞(Message passing)MPI, OpenMP, PVM,等等。多媒體技術 2010 西安交通大學 新型計算機研究所VTune Performance AnalyzerIntel Performance libraries: IPP and MKLOpenMP* (Intel Compiler)Explicit threading (Win32*, Pthreads*)Intel Thread CheckerIntel DebuggerIntel Thread ProfilerVTune Performance AnalyzerParallel ComputingWhat is

12、it?lParallel computing is when a program uses concurrency to either:udecrease the runtime for the solution to a problem.uIncrease the size of the problem that can be solved.Parallel Computing gives you more performance to throw at your problems.Parallel Computing: Writing a parallel application.Orig

13、inal ProblemTasks, shared and local dataDecompose into tasks Code with a parallel Prog. Env.Corresponding source codeProgram SPMD_Emb_Par () TYPE *tmp, *func(); global_array Data(TYPE); global_array Res(TYPE); int N = get_num_procs(); int id = get_proc_id(); if (id=0) setup_problem(N,DATA); for (int

14、 I= 0; IN;I=I+Num) tmp = func(I); Res.accumulate( tmp); Program SPMD_Emb_Par () TYPE *tmp, *func(); global_array Data(TYPE); global_array Res(TYPE); int N = get_num_procs(); int id = get_proc_id(); if (id=0) setup_problem(N,DATA); for (int I= 0; IN;I=I+Num) tmp = func(I); Res.accumulate( tmp); Progr

15、am SPMD_Emb_Par () TYPE *tmp, *func(); global_array Data(TYPE); global_array Res(TYPE); int N = get_num_procs(); int id = get_proc_id(); if (id=0) setup_problem(N,DATA); for (int I= 0; IN;I=I+Num) tmp = func(I); Res.accumulate( tmp); Program SPMD_Emb_Par () TYPE *tmp, *func(); global_array Data(TYPE

16、); global_array Res(TYPE); int Num = get_num_procs(); int id = get_proc_id(); if (id=0) setup_problem(N, Data); for (int I= ID; IN;I=I+Num) tmp = func(I, Data); Res.accumulate( tmp); Group onto execution units.Units of execution + new shared data for extracted dependenciesParallel Computing: Effecti

17、ve Standards for Portable programminglThread LibrariesWin32 APIPOSIX threads.lCompiler DirectivesOpenMP - portable shared memory parallelism.lMessage Passing LibrariesMPI Our focus多媒體技術 2010 西安交通大學 新型計算機研究所n面向共享存儲體系結構。n基于fork-join的多線程執(zhí)行模型,但同樣也可以開發(fā)SPMD類型的程序。n主要采用指導語句的方式。n可以進行增量式并行開發(fā),支持條件編譯核條件并行。OpenM

18、P Overview: Programming ModelFork-Join Parallelism: uMaster thread spawns a team of threads as needed.uParallelism is added incrementally: i.e. the sequential program evolves into a parallel program.Parallel RegionsMaster ThreadOpenMP Overview:How is OpenMP typically used? (in C)lOpenMP is usually u

19、sed to parallelize loops:Find your most time consuming loops.Split them up between threads.void main() double Res1000; for(int i=0;i1000;i+) do_huge_comp(Resi); #include “omp.h”void main() double Res1000;#pragma omp parallel for for(int i=0;i1000;i+) do_huge_comp(Resi); Split-up this loop between mu

20、ltiple threadsParallel ProgramSequential Program多媒體技術 2010 西安交通大學 新型計算機研究所n提供一種快捷簡單的多線程編程方法n形成于1997年,是一種應用程序接口n對編程人員:u無需進行復雜的線程創(chuàng)建、同步、負載平衡和銷毀工作。u只需要認真考慮哪些循環(huán)應該以多線程方式運行uIntel編譯器提供對OpenMP的支持。un多媒體技術 2010 西安交通大學 新型計算機研究所nOpenMP應用編程接口API是在共享存儲體系結構上的一個編程模型n包含編譯制導(Compiler Directive)、運行庫

21、例程(Runtime Library)和環(huán)境變量(Environment Variables) n支持增量并行化(Incremental Parallelization) 多媒體技術 2010 西安交通大學 新型計算機研究所n結合了兩種并行編程的方式u編譯指導語句,在編譯過程并行化代碼u運行時庫函數(shù),在運行時對并行環(huán)境支持nOpenMP應用程序的組成部分 多媒體技術 2010 西安交通大學 新型計算機研究所n什么是OpenMPu應用編程接口API(Application Programming Interface)u由三個基本API部分(編譯指令、運行部分和環(huán)境變量)構成 u是C/C+ 和Fo

22、rtan等的應用編程接口u已經被大多數(shù)計算機硬件和軟件廠家所標準化nOpenMP不包含的性質u不是建立在分布式存儲系統(tǒng)上的 u不是在所有的環(huán)境下都是一樣的 u不是能保證讓多數(shù)共享存儲器均能有效的利用 多媒體技術 2010 西安交通大學 新型計算機研究所n1994年,第一個ANSI X3H5草案提出,被否決 n1997年,OpenMP標準規(guī)范代替原先被否決的ANSI X3H5,被人們認可n1997年10月公布了與Fortran語言捆綁的第一個標準規(guī)范 FORTRAN version 1.0 n1998年11月9日公布了支持C和C+的標準規(guī)范C/C+ version 1.0 n2000年11月推出

23、FORTRAN version 2.0 n2002年3月推出C/C+ version 2.0 n2005年5月OpenMP2.5將原來的Fortran和C/C+ 標準規(guī)范相結合n相關的規(guī)范可在/drupal/node/view/8中下載多媒體技術 2010 西安交通大學 新型計算機研究所n標準性 n簡潔實用 n使用方便 n可移植性 多媒體技術 2010 西安交通大學 新型計算機研究所n基于線程的并行編程模型(Programming Model) nOpenMP使用Fork-Join并行執(zhí)行模型 FORKJOINFORKJOIN主線程并行域并行域多媒體技術

24、 2010 西安交通大學 新型計算機研究所n以線程為基礎,通過編譯指導語句來顯式地指導并行化,為編程人員提供了對并行化的完整的控制。n采用Fork-Join的形式MasterThreadParalllRegionNestedParallelRegion多媒體技術 2010 西安交通大學 新型計算機研究所n在開始執(zhí)行的時候,只有主線程的運行線程存在n主線程在運行過程中,當遇到需要進行并行計算的時候,派生出(ForkFork,創(chuàng)建新線程或者喚醒已有線程)線程來執(zhí)行并行任務n在并行執(zhí)行的時候,主線程和派生線程共同工作n在并行代碼結束執(zhí)行后,派生線程退出或者掛起,不再工作,控制流程回到單獨的主線程中(

25、JoinJoin,即多線程的會和)。 多媒體技術 2010 西安交通大學 新型計算機研究所nOpenMP的#pragma語句的格式為 #pragma omp directive_name 多媒體技術 2010 西安交通大學 新型計算機研究所n在編譯器編譯程序的時候,會識別特定的注釋n這些注釋就包含著OpenMP程序的一些語義#pragma omp clause , clause其中directive部分就包含了具體的編譯指導語句,包括parallel, for, parallel for, section, sections, single, master, critical, flush,

26、ordered和atomic。n在無法識別OpenMP語義的普通編譯器中,這些注釋被忽略n將串行的程序逐步地改造成一個并行程序多媒體技術 2010 西安交通大學 新型計算機研究所n作用域u靜態(tài)擴展文本代碼在一個編譯制導語句之后,被封裝到一個結構塊中 u孤立語句一個OpenMP的編譯制導語句不依賴于其它的語句 u動態(tài)擴展 包括靜態(tài)范圍和孤立語句多媒體技術 2010 西安交通大學 新型計算機研究所動態(tài)范圍靜態(tài)范圍for語句出現(xiàn)在一個封閉的并行域中 孤立語句critical和sections語句出現(xiàn)在封閉的并行域之外 #pragma omp parallel #pragma omp for for(

27、) sub1(); sub2(); void sub1() #pragma omp critical void sub2() #pragma omp sections OpenMP: ContentslOpenMPs constructs fall into 5 categories:uParallel RegionsuWorksharinguData Environment uSynchronizationuRuntime functions/environment variableslOpenMP is basically the same between Fortran and C/C+

28、The OpenMP* APIParallel RegionslYou create threads in OpenMP* with the “omp parallel” pragma.lFor example, To create a 4 thread Parallel region:double A1000;omp_set_num_threads(4);#pragma omp parallelint ID = omp_get_thread_num(); pooh(ID,A);pooh(ID,A)ID03Each thread executes a copy of the the code

29、within the structured blockRuntime function to request a certain number of threadsRuntime function returning a thread ID* Third party trademarks and names are the property of their respective owner.The OpenMP* APIParallel RegionslEach thread executes the same code redundantly.double A1000;omp_set_nu

30、m_threads(4);#pragma omp parallel int ID = omp_get_thread_num(); pooh(ID, A);printf(“all donen”);omp_set_num_threads(4)pooh(1,A)pooh(2,A)pooh(3,A)printf(“all donen”);pooh(0,A)double A1000;A single copy of A is shared between all threads.Threads wait here for all threads to finish before proceeding (

31、I.e. a barrier)* Third party trademarks and names are the property of their respective owner.Exercise 1:A multi-threaded “Hello world” programlWrite a multithreaded program where each thread prints “hello world”.#include “omp.h”void main() int ID = omp_get_thread_num(); printf(“ hello(%d) ”, ID); pr

32、intf(“ world(%d) n”, ID);Exercise 1:A multi-threaded “Hello world” programlWrite a multithreaded program where each thread prints “hello world”.#include “omp.h”void main()#pragma omp parallel int ID = omp_get_thread_num(); printf(“ hello(%d) ”, ID); printf(“ world(%d) n”, ID); Sample Output:hello(1)

33、 hello(0) world(1)world(0)hello (3) hello(2) world(3)world(2)多媒體技術 2010 西安交通大學 新型計算機研究所n并行域中的代碼被所有的線程執(zhí)行n具體格式u#pragma omp parallel clause,clausenewlineuclause=if(scalar-expression)private(list)firstprivate(list)default(shared | none)shared(list)copyin(list)reduction(operator: list)num_threads(integer

34、-expression)OpenMP: ContentslOpenMPs constructs fall into 5 categories:uParallel RegionsuWork-sharinguData Environment uSynchronizationuRuntime functions/environment variables多媒體技術 2010 西安交通大學 新型計算機研究所n共享任務結構將它所包含的代碼劃分給線程組的各成員來執(zhí)行u并行for循環(huán)u并行sectionsu串行執(zhí)行FORKFORKFORKJOINJOINJOIN主線程主線程線程列主線程主線程線程列主線程主線

35、程線程列SECTIONSSINGLEDO/for loop多媒體技術 2010 西安交通大學 新型計算機研究所nfor語句指定緊隨它的循環(huán)語句必須由線程組并行執(zhí)行;n語句格式u#pragma omp for clause,clause newlineuclause=schedule(type ,chunk) orderedprivate (list)firstprivate (list)lastprivate (list)shared (list)reduction (operator: list)nowait OpenMP: Work-Sharing ConstructslThe “for”

36、 Work-Sharing construct splits up loop iterations among the threads in a team#pragma omp parallel#pragma omp for for (I=0;IN;I+)NEAT_STUFF(I);By default, there is a barrier at the end of the “omp for”. Use the “nowait” clause to turn off the barrier.Work Sharing ConstructsA motivating examplefor(i=0

37、;IN;i+) ai = ai + bi;#pragma omp parallelint id, i, Nthrds, istart, iend;id = omp_get_thread_num();Nthrds = omp_get_num_threads();istart = id * N / Nthrds;iend = (id+1) * N / Nthrds;for(i=istart;Iiend;i+) ai = ai + bi;#pragma omp parallel #pragma omp for schedule(static) for(i=0;IN;i+) ai = ai + bi;

38、Sequential codeOpenMP parallel regionOpenMP parallel region and a work-sharing for-construct多媒體技術 2010 西安交通大學 新型計算機研究所nschedule子句描述如何將循環(huán)的迭代劃分給線程組中的線程n如果沒有指定chunk大小,迭代會盡可能的平均分配給每個線程ntype為static,循環(huán)被分成大小為 chunk的塊,靜態(tài)分配給線程ntype為dynamic,循環(huán)被動態(tài)劃分為大小為chunk的塊,動態(tài)分配給線程多媒體技術 2010 西安交通大學 新型計算機研究所n循環(huán)并行化的語句必須具有如下的形

39、式for (index = start ; index end ; increment_expr)uindex必須是一個整數(shù)u小于號()也可以被其它的比較操作符替代ustart和end可以是任意的數(shù)值表達式,但是在循環(huán)的過程中其值不能改變,以保證能夠在循環(huán)之前就計算出循環(huán)的次數(shù)。uincrement_expr形式如下,其中incr是一個在循環(huán)過程中不變的數(shù)值表達式n循環(huán)語句塊應該是單出口與單入口的,在循環(huán)過程中不能使用break、goto和return語句n可以使用continue語句,因為這個語句不影響循環(huán)執(zhí)行的次數(shù)。多媒體技術 2010 西安交通大學 新型計算機研究所n將兩個向量相加,并將

40、計算的結果保存到第三個向量中,向量的維數(shù)為n for(int i=0;in;i+)zi=xi+yi;n各個分量之間沒有數(shù)據相關性n循環(huán)計算的過程也沒有循環(huán)依賴性 n程序改成#pragma omp parallel forfor(int i=0;in;i+)zi=xi+yi;多媒體技術 2010 西安交通大學 新型計算機研究所n循環(huán)并行化子句可以包含一個或多個子句來控制循環(huán)并行化的執(zhí)行u有多個類型的子句可以用來控制循環(huán)并行化編譯u最主要的子句是數(shù)據作用域子句。n由于有多線程同時執(zhí)行循環(huán)語句中的功能指令,這就涉及到數(shù)據的作用域問題u作用域用來控制某一個變量是否是在各個線程之間共享或者是某一個線程是

41、私有的u數(shù)據的作用域子句用shared來表示一個變量是各個線程之間共享的u用private來表示一個變量是每一個線程私有的u默認的變量作用域是共享的多媒體技術 2010 西安交通大學 新型計算機研究所n其他編譯制導子句u用來控制線程的調度(schedule子句)u動態(tài)控制是否并行化(if子句)u進行同步的子句(ordered子句)u控制變量在串行部分與并行部分傳遞的子句(copyin子句) 多媒體技術 2010 西安交通大學 新型計算機研究所n循環(huán)并行化編譯指導語句可循環(huán)并行化編譯指導語句可以加在任意一個循環(huán)之前以加在任意一個循環(huán)之前n對應的最近的循環(huán)語句被并對應的最近的循環(huán)語句被并行化,其它

42、部分保持不變行化,其它部分保持不變int i;int j#pragma omp parallel for private(j)for(i=0;i2;i+)for(j=6;j10;j+)printf(“i=%d j=%dn”,i,j);執(zhí)行結果:i=0 j=6i=1 j=6i=0 j=7i=1 j=7i=0 j=8i=1 j=8i=1 j=9i=0 j=9int i;int j;for(i=0;i2;i+)#pragma omp parallel forfor(j=6;j10;j+)printf(i=%d j=%dn,i,j);執(zhí)行結果:i=0 j=6i=0 j=8i=0 j=9i=0 j=7i

43、=1 j=6i=1 j=8i=1 j=7i=1 j=9多媒體技術 2010 西安交通大學 新型計算機研究所nsections編譯制導語句指定內部的代碼被劃分給線程組中的各線程n不同的section由不同的線程執(zhí)行nSection語句格式:#pragma omp sections clause,clausenewline #pragma omp section newline #pragma omp section newline 多媒體技術 2010 西安交通大學 新型計算機研究所nclause=uprivate (list) ufirstprivate (list)ulastprivate

44、(list)ureduction (operator: list)unowait n在sections語句結束處有一個隱含的路障,使用了nowait子句除外多媒體技術 2010 西安交通大學 新型計算機研究所#include /eg2#define N 1000int main ()int i;float aN, bN, cN;/* Some initializations */for (i=0; i N; i+) ai = bi = i * 1.0;#pragma omp parallel shared(a,b,c) private(i) #pragma omp sections nowai

45、t #pragma omp section for (i=0; i N/2; i+) ci = ai + bi; #pragma omp section for (i=N/2; i N; i+) ci = ai + bi; /* end of sections */ /* end of parallel section */ 多媒體技術 2010 西安交通大學 新型計算機研究所n工作分區(qū)編碼(sections)#pragma omp parallel sections#pragma omp sectionprintf(section 1 thread=%dn,omp_get_thread_nu

46、m();#pragma omp sectionprintf(section 2 thread=%dn,omp_get_thread_num();#pragma omp sectionprintf(sectino 3 thread=%dn,omp_get_thread_num();程序運行結果為:section 1 thread=0section 2 thread=1sectino 3 thread=0多媒體技術 2010 西安交通大學 新型計算機研究所nsingle編譯制導語句指定內部代碼只有線程組中的一個線程執(zhí)行。n線程組中沒有執(zhí)行single語句的線程會一直等待代碼塊的結束,使用nowai

47、t子句除外n語句格式:u#pragma omp single clause,clause newlineuclause=private(list)firstprivate(list)nowaitlThe single construct denotes a block of code that is executed by only one thread.lA barrier is implied at the end of the single block.#pragma omp parallel private (tmp)do_many_things();#pragma omp singl

48、e exchange_boundaries(); do_many_other_things(); OpenMP: ContentslOpenMPs constructs fall into 5 categories:uParallel RegionsuWorksharinguData Environment uSynchronizationuRuntime functions/environment variables多媒體技術 2010 西安交通大學 新型計算機研究所n變量作用域范圍n數(shù)據域屬性子句uprivate子句ushared子句udefault子句ufirstprivate子句ula

49、stprivate子句ucopyin子句ureduction子句Private Clause program wrong IS = 0C$OMP PARALLEL DO PRIVATE(IS) DO J=1,1000 IS = IS + J END DO print *, ISlprivate(var) creates a local copy of var for each thread. The value is uninitialized Private copy is not storage associated with the originalIS was not initiali

50、zedRegardless of initialization, IS is undefined at this point多媒體技術 2010 西安交通大學 新型計算機研究所nprivate子句表示它列出的變量對于每個線程是局部的 。n語句格式uprivate(list)nprivate和threadprivate區(qū)別PRIVATETHREADPRIVATE數(shù)據類型變量變量位置在域的開始或共享任務單元在塊或整個文件區(qū)域的例程的定義上持久性否是擴充性只是詞法的- 除非作為子程序的參數(shù)而傳遞動態(tài)的初始化使用 FIRSTPRIVATE使用 COPYIN多媒體技術 2010 西安交通大學 新型計算機

51、研究所nshared子句表示它所列出的變量被線程組中所有的線程共享n所有線程都能對它進行讀寫訪問n語句格式ushared (list) 多媒體技術 2010 西安交通大學 新型計算機研究所ndefault子句讓用戶自行規(guī)定在一個并行域的靜態(tài)范圍中所定義的變量的缺省作用范圍n語句格式udefault (private|shared | none) 多媒體技術 2010 西安交通大學 新型計算機研究所nfirstprivate子句是private子句的超集n對變量做原子初始化n語句格式:u firstprivate (list) Firstprivate ClauselFirstprivate i

52、s a special case of private. Initializes each private copy with the corresponding value from the master thread.Regardless of initialization, IS is undefined at this point program almost_right IS = 0C$OMP PARALLEL DO FIRSTPRIVATE(IS) DO J=1,1000 IS = IS + J1000 CONTINUE print *, ISEach thread gets it

53、s own IS with an initial value of 0多媒體技術 2010 西安交通大學 新型計算機研究所nlastprivate子句是private子句的超集n將變量從最后的循環(huán)迭代或段復制給原始的變量n語句格式ulastprivate (list) Lastprivate ClauselLastprivate passes the value of a private from the last iteration to a global variable.IS is defined as its value at the last iteration (I.e. for

54、J=1000) program closer IS = 0C$OMP PARALLEL DO FIRSTPRIVATE(IS) C$OMP+ LASTPRIVATE(IS) DO J=1,1000 IS = IS + J1000 CONTINUE print *, ISEach thread gets its own IS with an initial value of 0多媒體技術 2010 西安交通大學 新型計算機研究所nfirstprivate和lastprivate int val=8;#pragma omp parallel for firstprivate(val) lastpr

55、ivate(val)for(int i=0;i2;i+)printf(i=%d val=%dn,i,val);if(i=1)val=10000;printf(i=%d val=%dn,i,val);printf(val=%dn,val);下面是程序的執(zhí)行結果i=0 val=8i=1 val=8i=0 val=8i=1 val=10000val=10000在每一個線程的內部,私有變量val被初始化為主線程原有的同名變量的值,并且在循環(huán)并行化退出的時候,相應的變量被原有串行執(zhí)行的最后一次執(zhí)行對應的值所賦值 多媒體技術 2010 西安交通大學 新型計算機研究所nthreadprivate語句使一個全

56、局文件作用域的變量在并行域內變成每個線程私有n每個線程對該變量復制一份私有拷貝n語句格式:u#pragma omp threadprivate (list) newlineThreadprivatelMakes global data private to a threaduFortran: COMMON blocksuC: File scope and static variableslDifferent from making them PRIVATEuwith PRIVATE global variables are masked. uTHREADPRIVATE preserves gl

57、obal scope within each threadlThreadprivate variables can be initialized using COPYIN or by using DATA statements.多媒體技術 2010 西安交通大學 新型計算機研究所int alpha10, beta10, i;/eg3#pragma omp threadprivate(alpha) int main () /* First parallel region */#pragma omp parallel private(i,beta) for (i=0; i 10; i+) alph

58、ai = betai = i;/* Second parallel region */#pragma omp parallel printf(alpha3= %d and beta3=%dn,alpha3,beta3); 多媒體技術 2010 西安交通大學 新型計算機研究所ncopyin子句用來為線程組中所有線程的threadprivate變量賦相同的值n主線程該變量的值作為初始值n語句格式ucopyin(list)多媒體技術 2010 西安交通大學 新型計算機研究所nreduction子句使用指定的操作對其列表中出現(xiàn)的變量進行規(guī)約n初始時,每個線程都保留一份私有拷貝n在結構尾部根據指定的操作

59、對線程中的相應變量進行規(guī)約,并更新該變量的全局值n語句格式ureduction (operator: list) 多媒體技術 2010 西安交通大學 新型計算機研究所n規(guī)約操作u會反復將一個二元運算符應用在一個變量和另外一個值上,并把結果保存在原變量中u一個常見的規(guī)約操作就是數(shù)組求和,使用一個變量保存部分和,并把數(shù)組中的每一個值加到這個變量中,就可以得出最后所有數(shù)組的總和 nOpenMP在使用規(guī)約操作時,只需在變量前指明規(guī)約操作的類型以及規(guī)約的變量 # pragma omp parallel for private(arx,ary,n) reduction(+:a,b)for(i=0;in;i+)a=a+arxi;b=b+aryi;多媒體技術 2010 西安交通大學 新型計算機研究所#include /eg4int main () int i, n, chunk;float a100, b100, result;/* Some initializations */n = 100;chunk = 10;result = 0.0;for (i=0; i n; i+) ai = i * 1.0; bi = i * 2.0; #pragma omp parallel for defau

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論