版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所1n5.1 多核技術(shù)n5.2 并行編程模型n5.3 OpenMP并行程序設(shè)計多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n處理器的頻率u以前是處理器性能的唯一標(biāo)尺u在摩爾定律指引下保持高速發(fā)展CPU速度每18個月提高一倍而價格下降為原來的二分之一n主頻提高遭遇瓶頸u由于晶體管數(shù)量倍增,會導(dǎo)致硅芯片所需要的電能、耗費功率大幅提升,甚至成幾何級數(shù)的增加 n3GHz成為了無法逾越的一道坎uIntel發(fā)布3.8GHz的產(chǎn)品,宣布停止4GHz的產(chǎn)品計劃uAMD頻率超過2GHz以后無法大幅度提升CPU可以煎蛋?CPU功耗增長多媒體技術(shù) 2010
2、西安交通大學(xué) 新型計算機(jī)研究所n高端的RISC處理器中u在上個世紀(jì)末,HP和IBM已經(jīng)提出雙核處理器的可行性設(shè)計,成功推出了擁有雙內(nèi)核的HP PA8800和IBM Power4處理器uSun在2003年10月微處理器論壇中,發(fā)表雙核心UltraSPARC處理器n x86平臺 uAMD和Intel在2004年公布了各自的雙核計劃uAMD率先在服務(wù)器和工作站領(lǐng)域引入雙核架構(gòu)uIntel率先在臺式機(jī)領(lǐng)域引入雙核技術(shù)! 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n多核u片上多處理器CMP(Chip Multiprocessor)u在一塊硅晶
3、片上,集成多個計算核心u每個計算核心都是一個完整而獨立的計算單體u核之間通過特定的硅晶片內(nèi)通信方式互連例如總線、共享緩存u考慮多個處理核之間的功能分工、通信方式、存儲層次和制造工藝等約束nCMP最早出現(xiàn)在1991年的Datawave結(jié)構(gòu)中u設(shè)計可并行的處理器來解決視頻處理中的大量數(shù)據(jù)計算n根據(jù)處理器中各個核類型的不同,多核芯片可以分為u同構(gòu)多核體系(Homogeneous CMP)u異構(gòu)多核體系(Heterogeneous CMP)多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n前端總線(FSB)u總線頻率,CPU與內(nèi)存直接數(shù)據(jù)交換速度u數(shù)據(jù)傳輸最大帶寬取決于所有同時傳輸?shù)臄?shù)據(jù)的寬度和傳
4、輸頻率u前端總線的速度指的是數(shù)據(jù)傳輸?shù)乃俣萵CPU的位和字長u字長CPU在單位時間內(nèi)(同一時間)能一次處理的二進(jìn)制數(shù)的位數(shù)目前主流是32位,也有64、128位u字節(jié)和字長的區(qū)別8位稱為一個字節(jié)字長的長度是不固定的對于不同的CPU、字長的長度也不一樣多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n內(nèi)存是非常慢的期間,需要緩存(cache)加速nL1 Cache(一級緩存)uCPU第一層高速緩存u可分為數(shù)據(jù)緩存和指令緩存nL2 Cache(二級緩存)nL3 Cache(三級緩存)u一般用于服務(wù)器多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)
5、研究所n左圖:每二核共享二級緩存n右圖:四核共享二級緩存多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n雙核甚至多核處理器需要多線程化n大多數(shù)應(yīng)用用C或C+編寫的n根據(jù)單線程設(shè)計n多線程優(yōu)化u需要耗費大量勞動力的改寫過程u重頭再來n多核迫使軟件開發(fā)朝并行化方向發(fā)展nRISC架構(gòu)的多核系統(tǒng)上已經(jīng)形成了比較成熟的多線程系統(tǒng)并行處理能力n在x86架構(gòu)下,應(yīng)用程序的開發(fā)者還停留在單線程的開發(fā)模式下。多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n程序是否具備擴(kuò)展性n程序能否更精確n產(chǎn)品是否易于編程和維護(hù)n并行開發(fā)模式u打破串行的編程過程“一步一步”的模式u首先要進(jìn)行分析和拆解u然后才能進(jìn)行
6、程序的編寫n程序設(shè)計并行規(guī)劃u為雙核,四核、八核、十六核等更多核芯規(guī)模開發(fā)n針對多核的開發(fā)過程與傳統(tǒng)的開發(fā)模式的不同u需要性能優(yōu)化工具多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n現(xiàn)狀u科學(xué)計算部分程序員可以進(jìn)行并行編程,大部分程序是MPI程序,OpenMP也有一定比例u服務(wù)器服務(wù)器程序大部分采用多線程(PThread, Java Thread或Win32 Threads )模型u桌面系統(tǒng)除少數(shù)應(yīng)用(圖像處理,3D制作)外,大部分程序是串行程序多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n多內(nèi)核處理器所帶來的變化u科學(xué)計算MPI程序可以在多內(nèi)核系統(tǒng)上直接執(zhí)行(優(yōu)化MPI)Ope
7、nMP將更加流行如何同時支持多內(nèi)核共享內(nèi)存系統(tǒng)和集群系統(tǒng)?u服務(wù)器原有的多線程程序可以直接執(zhí)行u桌面系統(tǒng)OpenMP對于大多數(shù)桌面系統(tǒng)程序員來說過于復(fù)雜,對新的高效并行程序設(shè)計語言有強(qiáng)烈需求多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n廣義的自動并行化,指開發(fā)人員無需考慮并行性,僅設(shè)計串行程序,由軟件或硬件系統(tǒng)自動將串行程序轉(zhuǎn)換為并行程序u編譯器輔助的自動并行化u硬件推測執(zhí)行u并行庫多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n編譯器輔助的自動并行化u自動向量化很成功u線程級的自動并行化效果不夠理想4處理器的SMP系統(tǒng)上平均加速比30%u多內(nèi)核處理器系統(tǒng)的出現(xiàn)降低了對自動并行化
8、技術(shù)的期望,4 core 30%可以接受(沒有其它編譯優(yōu)化可以提高30%的性能)n并行庫uINTEL MKL,SCALAPACK,PNL等,將優(yōu)化算法在函數(shù)庫中實現(xiàn)u應(yīng)用范圍依然有限多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n可以在多核平臺上實現(xiàn)真正的并行。n在各個核上可以實現(xiàn)并發(fā)。多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所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.多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所OpenMPPthreads多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所ProcessorMProcessorMProcessorM Interconnect MPI HPF多媒
10、體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所 MPI hybrid MPI + OpenMP多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所u顯式線程(Explicit threading)微軟Windows線程API, Pthreads, Java線程類等。u利用編譯器指導(dǎo)(Compiler-directed)自動并行, OpenMP, Intel Threading Building Blocks等u利用并行數(shù)學(xué)庫(Parallel math libraries)Intel IPP/MKL, ScaLAPACK, PARDISO, PLAPACKu并行程序語言 有150種以上u消息
11、傳遞(Message passing)MPI, OpenMP, PVM,等等。多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所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多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n面向共享存儲體系結(jié)構(gòu)。n基于fork-join的多線程執(zhí)行模型,但同樣也可以開發(fā)SPMD類型的程序。n主要采用指導(dǎo)語句的方式。n可以進(jì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多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n提供一種快捷簡單的多線程編程方法n形成于1997年,是一種應(yīng)用程序接口n對編程人員:u無需進(jìn)行復(fù)雜的線程創(chuàng)建、同步、負(fù)載平衡和銷毀工作。u只需要認(rèn)真考慮哪些循環(huán)應(yīng)該以多線程方式運行uIntel編譯器提供對OpenMP的支持。un多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nOpenMP應(yīng)用編程接口API是在共享存儲體系結(jié)構(gòu)上的一個編程模型n包含編譯制導(dǎo)(Compiler Directive)、運行庫
21、例程(Runtime Library)和環(huán)境變量(Environment Variables) n支持增量并行化(Incremental Parallelization) 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n結(jié)合了兩種并行編程的方式u編譯指導(dǎo)語句,在編譯過程并行化代碼u運行時庫函數(shù),在運行時對并行環(huán)境支持nOpenMP應(yīng)用程序的組成部分 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n什么是OpenMPu應(yīng)用編程接口API(Application Programming Interface)u由三個基本API部分(編譯指令、運行部分和環(huán)境變量)構(gòu)成 u是C/C+ 和Fo
22、rtan等的應(yīng)用編程接口u已經(jīng)被大多數(shù)計算機(jī)硬件和軟件廠家所標(biāo)準(zhǔn)化nOpenMP不包含的性質(zhì)u不是建立在分布式存儲系統(tǒng)上的 u不是在所有的環(huán)境下都是一樣的 u不是能保證讓多數(shù)共享存儲器均能有效的利用 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n1994年,第一個ANSI X3H5草案提出,被否決 n1997年,OpenMP標(biāo)準(zhǔn)規(guī)范代替原先被否決的ANSI X3H5,被人們認(rèn)可n1997年10月公布了與Fortran語言捆綁的第一個標(biāo)準(zhǔn)規(guī)范 FORTRAN version 1.0 n1998年11月9日公布了支持C和C+的標(biāo)準(zhǔn)規(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+ 標(biāo)準(zhǔn)規(guī)范相結(jié)合n相關(guān)的規(guī)范可在/drupal/node/view/8中下載多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n標(biāo)準(zhǔn)性 n簡潔實用 n使用方便 n可移植性 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n基于線程的并行編程模型(Programming Model) nOpenMP使用Fork-Join并行執(zhí)行模型 FORKJOINFORKJOIN主線程并行域并行域多媒體技術(shù)
24、 2010 西安交通大學(xué) 新型計算機(jī)研究所n以線程為基礎(chǔ),通過編譯指導(dǎo)語句來顯式地指導(dǎo)并行化,為編程人員提供了對并行化的完整的控制。n采用Fork-Join的形式MasterThreadParalllRegionNestedParallelRegion多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n在開始執(zhí)行的時候,只有主線程的運行線程存在n主線程在運行過程中,當(dāng)遇到需要進(jìn)行并行計算的時候,派生出(ForkFork,創(chuàng)建新線程或者喚醒已有線程)線程來執(zhí)行并行任務(wù)n在并行執(zhí)行的時候,主線程和派生線程共同工作n在并行代碼結(jié)束執(zhí)行后,派生線程退出或者掛起,不再工作,控制流程回到單獨的主線程中(
25、JoinJoin,即多線程的會和)。 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nOpenMP的#pragma語句的格式為 #pragma omp directive_name 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n在編譯器編譯程序的時候,會識別特定的注釋n這些注釋就包含著OpenMP程序的一些語義#pragma omp clause , clause其中directive部分就包含了具體的編譯指導(dǎo)語句,包括parallel, for, parallel for, section, sections, single, master, critical, flush,
26、ordered和atomic。n在無法識別OpenMP語義的普通編譯器中,這些注釋被忽略n將串行的程序逐步地改造成一個并行程序多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n作用域u靜態(tài)擴(kuò)展文本代碼在一個編譯制導(dǎo)語句之后,被封裝到一個結(jié)構(gòu)塊中 u孤立語句一個OpenMP的編譯制導(dǎo)語句不依賴于其它的語句 u動態(tài)擴(kuò)展 包括靜態(tài)范圍和孤立語句多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所動態(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)多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所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多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n共享任務(wù)結(jié)構(gòu)將它所包含的代碼劃分給線程組的各成員來執(zhí)行u并行for循環(huán)u并行sectionsu串行執(zhí)行FORKFORKFORKJOINJOINJOIN主線程主線程線程列主線程主線程線程列主線程主線
35、程線程列SECTIONSSINGLEDO/for loop多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所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多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nschedule子句描述如何將循環(huán)的迭代劃分給線程組中的線程n如果沒有指定chunk大小,迭代會盡可能的平均分配給每個線程ntype為static,循環(huán)被分成大小為 chunk的塊,靜態(tài)分配給線程ntype為dynamic,循環(huán)被動態(tài)劃分為大小為chunk的塊,動態(tài)分配給線程多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n循環(huán)并行化的語句必須具有如下的形
39、式for (index = start ; index end ; increment_expr)uindex必須是一個整數(shù)u小于號()也可以被其它的比較操作符替代ustart和end可以是任意的數(shù)值表達(dá)式,但是在循環(huán)的過程中其值不能改變,以保證能夠在循環(huán)之前就計算出循環(huán)的次數(shù)。uincrement_expr形式如下,其中incr是一個在循環(huán)過程中不變的數(shù)值表達(dá)式n循環(huán)語句塊應(yīng)該是單出口與單入口的,在循環(huán)過程中不能使用break、goto和return語句n可以使用continue語句,因為這個語句不影響循環(huán)執(zhí)行的次數(shù)。多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n將兩個向量相加,并將
40、計算的結(jié)果保存到第三個向量中,向量的維數(shù)為n for(int i=0;in;i+)zi=xi+yi;n各個分量之間沒有數(shù)據(jù)相關(guān)性n循環(huán)計算的過程也沒有循環(huán)依賴性 n程序改成#pragma omp parallel forfor(int i=0;in;i+)zi=xi+yi;多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n循環(huán)并行化子句可以包含一個或多個子句來控制循環(huán)并行化的執(zhí)行u有多個類型的子句可以用來控制循環(huán)并行化編譯u最主要的子句是數(shù)據(jù)作用域子句。n由于有多線程同時執(zhí)行循環(huán)語句中的功能指令,這就涉及到數(shù)據(jù)的作用域問題u作用域用來控制某一個變量是否是在各個線程之間共享或者是某一個線程是
41、私有的u數(shù)據(jù)的作用域子句用shared來表示一個變量是各個線程之間共享的u用private來表示一個變量是每一個線程私有的u默認(rèn)的變量作用域是共享的多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n其他編譯制導(dǎo)子句u用來控制線程的調(diào)度(schedule子句)u動態(tài)控制是否并行化(if子句)u進(jìn)行同步的子句(ordered子句)u控制變量在串行部分與并行部分傳遞的子句(copyin子句) 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n循環(huán)并行化編譯指導(dǎo)語句可循環(huán)并行化編譯指導(dǎo)語句可以加在任意一個循環(huán)之前以加在任意一個循環(huán)之前n對應(yīng)的最近的循環(huán)語句被并對應(yīng)的最近的循環(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í)行結(jié)果: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í)行結(jié)果: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多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nsections編譯制導(dǎo)語句指定內(nèi)部的代碼被劃分給線程組中的各線程n不同的section由不同的線程執(zhí)行nSection語句格式:#pragma omp sections clause,clausenewline #pragma omp section newline #pragma omp section newline 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nclause=uprivate (list) ufirstprivate (list)ulastprivate
44、(list)ureduction (operator: list)unowait n在sections語句結(jié)束處有一個隱含的路障,使用了nowait子句除外多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所#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 */ 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所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();程序運行結(jié)果為:section 1 thread=0section 2 thread=1sectino 3 thread=0多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nsingle編譯制導(dǎo)語句指定內(nèi)部代碼只有線程組中的一個線程執(zhí)行。n線程組中沒有執(zhí)行single語句的線程會一直等待代碼塊的結(jié)束,使用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多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n變量作用域范圍n數(shù)據(jù)域?qū)傩宰泳鋟private子句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多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nprivate子句表示它列出的變量對于每個線程是局部的 。n語句格式uprivate(list)nprivate和threadprivate區(qū)別PRIVATETHREADPRIVATE數(shù)據(jù)類型變量變量位置在域的開始或共享任務(wù)單元在塊或整個文件區(qū)域的例程的定義上持久性否是擴(kuò)充性只是詞法的- 除非作為子程序的參數(shù)而傳遞動態(tài)的初始化使用 FIRSTPRIVATE使用 COPYIN多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)
51、研究所nshared子句表示它所列出的變量被線程組中所有的線程共享n所有線程都能對它進(jìn)行讀寫訪問n語句格式ushared (list) 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所ndefault子句讓用戶自行規(guī)定在一個并行域的靜態(tài)范圍中所定義的變量的缺省作用范圍n語句格式udefault (private|shared | none) 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所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多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nlastprivate子句是private子句的超集n將變量從最后的循環(huán)迭代或段復(fù)制給原始的變量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多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所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í)行結(jié)果i=0 val=8i=1 val=8i=0 val=8i=1 val=10000val=10000在每一個線程的內(nèi)部,私有變量val被初始化為主線程原有的同名變量的值,并且在循環(huán)并行化退出的時候,相應(yīng)的變量被原有串行執(zhí)行的最后一次執(zhí)行對應(yīng)的值所賦值 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nthreadprivate語句使一個全
56、局文件作用域的變量在并行域內(nèi)變成每個線程私有n每個線程對該變量復(fù)制一份私有拷貝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.多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所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); 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所ncopyin子句用來為線程組中所有線程的threadprivate變量賦相同的值n主線程該變量的值作為初始值n語句格式ucopyin(list)多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所nreduction子句使用指定的操作對其列表中出現(xiàn)的變量進(jìn)行規(guī)約n初始時,每個線程都保留一份私有拷貝n在結(jié)構(gòu)尾部根據(jù)指定的操作
59、對線程中的相應(yīng)變量進(jìn)行規(guī)約,并更新該變量的全局值n語句格式ureduction (operator: list) 多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所n規(guī)約操作u會反復(fù)將一個二元運算符應(yīng)用在一個變量和另外一個值上,并把結(jié)果保存在原變量中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;多媒體技術(shù) 2010 西安交通大學(xué) 新型計算機(jī)研究所#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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型電動出租車購置合同范本4篇
- 2025年度協(xié)議離婚房產(chǎn)分割合同范本3篇
- 2024起重機(jī)研發(fā)、制造與銷售合作框架合同3篇
- 2024版建筑腳手架施工安全合作合同書版B版
- 2024藥品研發(fā)生產(chǎn)項目廉潔合作合同范本3篇
- 2024智能化倉儲管理系統(tǒng)采購與升級合同2篇
- 2025年度知識產(chǎn)權(quán)出借與咨詢服務(wù)合同4篇
- 2025年度知識產(chǎn)權(quán)評估居間合同上訴狀4篇
- 2024離婚雙方關(guān)于調(diào)解程序的協(xié)議
- 2024版毛竹購銷合同模板
- 春節(jié)行車安全常識普及
- 電機(jī)維護(hù)保養(yǎng)專題培訓(xùn)課件
- 汽車租賃行業(yè)利潤分析
- 春節(jié)拜年的由來習(xí)俗來歷故事
- 2021火災(zāi)高危單位消防安全評估導(dǎo)則
- 佛山市服務(wù)業(yè)發(fā)展五年規(guī)劃(2021-2025年)
- 房屋拆除工程監(jiān)理規(guī)劃
- 醫(yī)院保安服務(wù)方案(技術(shù)方案)
- 高效能人士的七個習(xí)慣:實踐應(yīng)用課程:高級版
- 小數(shù)加減法計算題100道
- 通信電子線路(哈爾濱工程大學(xué))智慧樹知到課后章節(jié)答案2023年下哈爾濱工程大學(xué)
評論
0/150
提交評論