OpenMP多線程編程指南_第1頁
OpenMP多線程編程指南_第2頁
OpenMP多線程編程指南_第3頁
OpenMP多線程編程指南_第4頁
OpenMP多線程編程指南_第5頁
全文預覽已結(jié)束

下載本文檔

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

文檔簡介

OpenMP多線程編程指南(一):基礎篇蔡小敏摘要:OpenMP是由OpenMPArchitectureReviewBoard牽頭提出的,并已被廣泛接受的,用于共享內(nèi)存并行系統(tǒng)的多線程程序設計的一套指導性注釋(CompilerDirective)。OpenMP支持的編程語言包括C語言、C++和Fortran;而支持OpenMP的編譯器包括SunCompiler,GNUCompiler和IntelCompiler等。OpenMP提供了對并行算法的高層的抽象描述,程序員通過在源代碼中加入專用的pragma來指明自己的意圖,由此編譯器可以自動將程序進行并行化,并在必要之處加入同步互斥以及通信。當選擇忽略這些pragma,或者編譯器不支持OpenMP時,程序又可退化為通常的程序(一般為串行),代碼仍然可以正常運作,只是不能利用多線程來加速程序執(zhí)行。關(guān)鍵字:模板,富士通南大軟件有限公司,論文,英文Microsoft,日文:7T^^.^>yu-卜1OpenMP簡介OpenMP是由OpenMPArchitectureReviewBo牽頭提出的,并已被廣泛接受的用于共享內(nèi)存并行系統(tǒng)的多線程程序設計的一套指導性注釋mpilerDirective)OpenMI是一種面向共享內(nèi)存以及分布式共享內(nèi)存的多處理器多線程并行編程語言,能被用于顯示指導多線程、共享內(nèi)存并行的應用程序編程接口。其規(guī)范SGI發(fā)起,具有良好的可移植性,支持多種編言,支持多種平臺,包括大多數(shù)的IUNIX以及WindowsNT系統(tǒng)。OpenMPft初是為了共享內(nèi)存多處理的系統(tǒng)結(jié)構(gòu)設計的并行編程方法,與通過消息傳遞進行并行編程的模型有很大的區(qū)別,多個處理器在訪問內(nèi)存的時候使用的是相同的內(nèi)存編址空間MP是一種共享內(nèi)存的體系結(jié)構(gòu),同時分布式共享內(nèi)存的系統(tǒng)也屬于共享內(nèi)存的多處理器結(jié)構(gòu),分布式共享內(nèi)存將多機的內(nèi)存資源通過虛擬化的方式形成一個相同的內(nèi)存空間提供給多個機子上的處理器使OpenMP對這樣的機器也提供了一定的支持。所以)penMI提供了對并行算法的高層的抽象描述,程序員通過在源代碼中加入專用的pragma來指明自己的意圖,由此編譯器可以自動將程序進行并行化,并在必要之處加入同步互斥以及通信。當選擇忽略這些pragma或者編譯器不支抻penMI時,程序又可退化為通常的程(一般為串行,代碼仍然可以正常運作,只是不能利用多線程來加速程序執(zhí)行。OpenMP的編程模型以線程為基礎,通過編譯指導語句來顯示地指導并行化,為編程人員提供了對并行化的完整控制。OpenMP的執(zhí)行模型采用ork-Joi的形式,F(xiàn)ork-Joi執(zhí)行模式在開始執(zhí)行的時候,有一個叫做主線程“的運行線程存在。主線程在運行過程中,當遇到需要進行并行計算的時候,派生出線程來進行并行執(zhí)行,在并行執(zhí)行的時候,主線程和派生線程共同工作,在并行代碼結(jié)束后,派生線程退出或者是掛起,不再工作,控制流程回到單獨的主線程中。OpenMI的功能由兩種形式提供:編譯指導語句和運行時庫函數(shù),并通過環(huán)境變量的方式靈活控編譯指導語句:指的是在編譯器編譯程序的時候,會識別特定的注釋,而這些特定的注釋就OpinMi程序的一些語句。在/。++程序中,OpenMI是以#pragmaom開始,后面跟具體的功能指令。即具有如下的形式:#pragmaomp<directive>[clause[[,]cla…s]其中的directive部分就包含了具體的編譯指導語句,包蝠1總for、parallelfor>sectionsectionssinglematerriticalflush>ordere和atomic這些編譯指導語句或者是用來分配任務,或者是用來同步可選子句clause合出了相應的編譯器指導語句的參數(shù)子句可以影響到編譯指導語句的具體行為每個編譯指導語句都有一系列適合它的子其中有5個編譯指導語句不能跟別的子句:master,criticalflush、ordered,atomic。運行時庫函數(shù):OpenMI運行時庫函數(shù)原本用以設置和獲取執(zhí)行環(huán)境相關(guān)的信息。其也包含一系列用以同步的APIo要使用運行時函數(shù)庫所包含的函數(shù)應該在相應的源文件中包含penMI頭文件即)mphOpenMI的運行時庫函數(shù)的使用類似于相應編程語言內(nèi)部的函數(shù)調(diào)用。由編譯指導語句和運行時庫函數(shù)可見)penMp同時結(jié)合了兩種并行編程的方式,通過編譯指導語句,可以將串行的程序逐步地改造成一個并行程序,達到增量更新程序的目的,從而減少程序編寫人員的一定負擔。同時,這樣的方式也能將串行程序和并行程序保存在同一個源代碼文件當中,減少了維護的負擔OpenMI在運行的時候,需要運行函數(shù)庫的支持,并會獲取一些環(huán)境變量來控制運行的過程。這里提到的環(huán)境變量是動態(tài)函數(shù)庫中用來控制函數(shù)運行的一些參數(shù)。上面講到的兩種形式中,編譯指導語句OgenMffl成中最重要的部分,也是編O|enMP程序的關(guān)鍵。編寫OpenMI呈序從gcc4.2ff始,OpenMI成為其內(nèi)嵌支持的并行編程規(guī)范,可以直接編譯Op&MP吾句的C/C++/Fortran9的源代碼。gcc4.2之前如果想在C/C++/Fortra中嵌入OpenMI吾句的話,需要額外安裝庫和預處理器才能識別和正確處理這些語句。以下是OpenMP的支持情況:gcc4.2.開始支持OpenMPv2.5gcc4.4.開始支持OpenMPv2.及v3.0/*OpenMp呈序結(jié)構(gòu)*/#include<omp.h>main()(intvar1,var2,var3;/*Serialcode*/.../*Beginingofparallelsection.Forkateamofthreads*//*Spectifyvariablescoping*/#pragmaompparallelprivate(var1,var2)shared(var3){/*Parallelsectionexecutedbyallthreads*/.../*Allthreadsjoinmasterthreadanddisband*/}}編寫OpenMI^l序的必要步驟:安裝支持OpenMP的gcc;編寫代碼,加入頭文件nclude“omph”;?編寫源程序;?配置環(huán)境變量,確定線程的數(shù)目;編譯程序,編譯時需加入'openmp選項?執(zhí)行程序例子在/*HelloWorld程序*/#include<stdio.h>#include<stdlib.h>#include<omp.h>intmain()(intnthreads,tid;/*Forkateamofthreads*/#pragmaompparallelprivate(nthreads,tid)(/*Obtainandprintthreadid*/tid=omp_get_thread_num();printf("Hello,worldfromOpenMPthread洲¥id);/*Onlymasterthreaddoesthis*/if(tid==0)(

nthreads=omp_get_num_threads();printf("Numberofthreads%d¥nthreads);}}}執(zhí)行結(jié)果%gccompc(由單線程來執(zhí)彳于%。/a。outHello,world%。/a。Hello,Hello,Hello,Hello,%gcc-fopenmpompc(由多線程來執(zhí)彳于out%。/a。Hello,Hello,Hello,Hello,i=jOpenMP可以使用環(huán)境變量OMP_NUM_THREADS以控制執(zhí)行線程的數(shù)量例子III%gcc-fopenmpompcI:%setenvOMP_NUM_THREADS2由2個線程來執(zhí)行I——%。/a。out:Hello,worldIHello,worldI2使用上的注意點5結(jié)束語本文介紹了什么OpenMP以及OpenMI的工作原理。參考文獻[1]OpenM]官方網(wǎng)站,.

⑵日本信賴性學會論文投稿規(guī)定HYPERLINK"http://reaj.i-juse.co.jp/pap

溫馨提示

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

評論

0/150

提交評論