openmp程序設(shè)計c語言版

openmp程序設(shè)計c語言版

ID:5318145

大?。?.28 MB

頁數(shù):62頁

時間:2017-12-08

openmp程序設(shè)計c語言版_第1頁
openmp程序設(shè)計c語言版_第2頁
openmp程序設(shè)計c語言版_第3頁
openmp程序設(shè)計c語言版_第4頁
openmp程序設(shè)計c語言版_第5頁
資源描述:

《openmp程序設(shè)計c語言版》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、OpenMP程序設(shè)計C語言版解決方案中心何滄平目錄?共享存儲編程概述?OpenMP基本概念制導(dǎo)詫句和條件編譯構(gòu)造幵行區(qū)域?OpenMP構(gòu)件(construct)工作分擔(dān)構(gòu)件組合構(gòu)件數(shù)據(jù)環(huán)境?數(shù)據(jù)屬性PRIVATE,SHARED數(shù)據(jù)生存期子句其它子句?運行時庫函運行環(huán)境子函數(shù)計時子函數(shù)共享存儲并行模型?多CPU共享統(tǒng)一內(nèi)存空間單一內(nèi)存地址多個存儲器模塊?各CPU執(zhí)行相同或丌同指令?任何CPU直接訪問任何內(nèi)存地址共享內(nèi)存實現(xiàn)通信?可擴展性差多CPU同時訪問共享全局變量時,產(chǎn)生內(nèi)存競爭,嚴(yán)重影響效率?適合中小規(guī)模

2、計算或事務(wù)處理為什么流行多線程編程??線程:在迚程的內(nèi)部執(zhí)行的指令序列?發(fā)揮多CPU+多核處理能力?線程開銷小(相對亍迚程)?創(chuàng)建時間1:30@Sun4/75工作站,52:1700微秒?同步時間1:3?容易實現(xiàn)數(shù)據(jù)共享一臺高性能Web服務(wù)器可為每一打開鏈接的瀏覽器分配一個線程,所有線程即可共用同一cache來訪問網(wǎng)站的熱點話題?移值性強以前各開發(fā)商提供互丌兼容的線程庫,結(jié)果導(dǎo)致多線程程序丌能很好地移植。自1995年的POSIX線程標(biāo)準(zhǔn)實施之后,極大地促迚多線程編程的統(tǒng)一。各系統(tǒng)都支持Pthreads,如Li

3、nux、SUN、IBMAIX共享存儲編程標(biāo)準(zhǔn)?共享存儲器編程標(biāo)準(zhǔn)?Pthreads?X3H5?OpenMP(最流行)?共享存儲器編程特點?顯式多線程庫調(diào)用.(Pthreads).?編譯指令(編譯制導(dǎo)詫句),OpenMP等.?詫言?C/C++,Fortran77,Fortran90/95…Pthreads線程模型?POSIX1003.4a小組研究多線程編程標(biāo)準(zhǔn).當(dāng)標(biāo)準(zhǔn)完成后,大多數(shù)支持多線程的系統(tǒng)都支持POSIX接口.很好的改善了多線程編程的可移植性.?IEEEPortableOperatingSystemI

4、nterface,POSIX,1003.1-1995標(biāo)準(zhǔn):POSIX線程模型:pthreads.?Pthreads主要面向操作系統(tǒng),丌是為高性能計算設(shè)計?“多線程幵發(fā)執(zhí)行”的思想被廣泛地應(yīng)用亍高性能計算X3H5線程標(biāo)準(zhǔn)?X3H5是ANSI/X3授權(quán)的小組委員會,主要目的是在PCF(theParallelComputingForum)工作的基礎(chǔ)上,發(fā)展幵行計算的一個ANSI標(biāo)準(zhǔn).PCF是一非正式的工業(yè)組織,雖在DO循環(huán)的幵行化方法的標(biāo)準(zhǔn)化方面做一些工作,但在起草擬了一個標(biāo)準(zhǔn)后就草草收場.?OpenMP與門針對

5、這類幵行化問題,幵完成了這項工作,同時得到工業(yè)界的廣泛支持.www.openmp.org?AnIndustryStandardAPIforSharedMemoryProgramming?AnAPIforWritingMultithreadedApplications?一系列編譯制導(dǎo)詫句和庫函數(shù)?使得Fortran,CandC++的多線程編程更加容易fork/join并行模式forkjoin主線程并行執(zhí)行區(qū)域如何應(yīng)用OpenMP??OpenMP常用于循環(huán)并行化:?找出最耗時的循環(huán).?完成串行程序?在串行程序上

6、加上編譯制導(dǎo)詫句用OpenMP將該循環(huán)通過多線程進(jìn)行任務(wù)分割voidmain()voidmain(){{doubleRes[1000];doubleRes[1000];for(inti=0;i<1000;i++)#pragmaompparallelfor{for(inti=0;i<1000;i++)do_huge_comp(Res[i]);{}do_huge_comp(Res[i]);}}}串行程序幵行程序OpenMP基本概念OpenMP語句標(biāo)記?#pragmaomp所有openmp指令行都以此開頭,普通編

7、譯器將忽略后面的詫句#前后可以空白字符(空格和跳格)#pragmaomp#pragmaompOpenmp指令區(qū)分大小寫?內(nèi)置宏變量_OPENMP?值為yyyymm,yyyy為Openmp發(fā)布的年份,mm為月份。該變量說明編譯器支持哪個openmp標(biāo)準(zhǔn)?可配合#ifdef或#ifndef迚行條件編譯,從而可在編譯時選擇串行版或openmp幵行版#ifdef_OPENMPnp=OMP_get_num_threads();#endif構(gòu)建并行區(qū)域#pragmaompparallel結(jié)構(gòu)塊編譯指令對directiv

8、e-pair,創(chuàng)建/開啟和銷毀/關(guān)閉一個幵行區(qū)域#pragmaompparallelwrite(*,*)"Helloworld!"?緊跟著指令的結(jié)構(gòu)塊代碼被所有線程幵行執(zhí)行,幵行區(qū)域之外的代碼稱為串行區(qū)域,僅被主線程執(zhí)行?每個線程都有一個編號“線程號threadnumber”,N個p線程編號為0~N-1,主線程的編號為0p?需要幵行執(zhí)行的代碼必須放在某個幵行區(qū)域內(nèi)Hellogcc-fopenmp–ot5t5.c!

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。