版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Parallel Programming Principle and PracticeLab GuideSchool of Computer Science and TechnologyHuazhong University of Science and Technology2 Labso 如何將向量加法運(yùn)算并行化?基本的向量加法程序:for(int i = 0; i n; +i)Ai = Bi + Ci;o 使用最簡(jiǎn)單的任務(wù)劃分方法:每個(gè)線程(進(jìn)程)完成循環(huán)體中一次循環(huán)的工作,共有n個(gè)線程同時(shí)計(jì)算。3 Labso 使用pThread完成這項(xiàng)工作基本的API: 創(chuàng)建一個(gè)新的線程 int pth
2、read_create( pthread_t *thread, const pthread_attr_t *attr, void *(*func) (void *), void *arg);thread表示線程ID,與線程中的pid概念類似attr表示設(shè)定線程的屬性,可以暫時(shí)不用考慮func表示新創(chuàng)建的線程會(huì)從這個(gè)函數(shù)指針處開(kāi)始運(yùn)行arg表示這個(gè)函數(shù)的參數(shù)指針?lè)祷刂禐?代表成功,其他值為錯(cuò)誤編號(hào)4 Labs主進(jìn)程等待線程結(jié)束: int pthread_join( pthread_t thread, void *retval );thread表示線程ID,與線程中的pid概念類似retval用于
3、存儲(chǔ)等待線程的返回值頭文件加入pthread.h編譯命令加入 lpthread 庫(kù)5 Labs#include #define THREAD_NUM 8int div;pthread_t tidN;int AN, BN,CN;/創(chuàng)建線程函數(shù)void *func(void *arg)for(int i = *(int *)arg; i i + div & i N; +i) Ci = Ai + Bi;int main(int argc, int *argv)div = N/THREAD_NUM;if(N/THREAD_NUM) div+;for(int i = 0; i N; i += d
4、iv) /創(chuàng)建THREAD_NUM個(gè)線程 if ( pthread_create( &tidi, NULL, func, (void *)&i ) ) puts(Pthread create fail); return; for(int i = 0; i N; i+=div) pthread_join(tidi, NULL);6 Labso 使用OpenMP完成這項(xiàng)工作:不需要使用MPI,使用特殊的編譯引導(dǎo)語(yǔ)句,源程序修改成如下形式:#pragma omp parallel forfor(int i = 0; i n; +i) Ai = Bi + Ci;Openmp會(huì)自動(dòng)將fo
5、r循環(huán)分解為多個(gè)線程并行執(zhí)行頭文件加入omp.h編譯時(shí)加入 openmp 參數(shù)7 Labso 使用MPI完成這個(gè)工作o基本的API: int MPI_Init(int *argc, char *argv)MPI_Init 是MPI程序的第一個(gè)調(diào)用,它完成MPI程序的所有初始化工作,啟動(dòng)MPI環(huán)境,標(biāo)志并行代碼的開(kāi)始。 int MPI_Finalize(void) MPI_Finalize 是MPI程序的最后一個(gè)調(diào)用,它結(jié)束MPI程序的運(yùn)行,標(biāo)志并行代碼的結(jié)束,結(jié)束除主進(jìn)程外其它進(jìn)程。其之后串行代碼仍可在主進(jìn)程(rank = 0)上繼續(xù)運(yùn)行。8 Labs int MPI_Comm_size(MP
6、I_Comm comm, int *size);獲取進(jìn)程個(gè)數(shù)p。 int MPI_Comm_rank(MPI_Comm comm, int *rank); MPI獲取當(dāng)前進(jìn)程的RANK,rank值取址范圍是0p-1,RANK值唯一的表示了進(jìn)程的ID,其中Rank=0的為主進(jìn)程9 Labs o進(jìn)程間的相互通信int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm);發(fā)送函數(shù):當(dāng)前進(jìn)程將以buf為初始地址,長(zhǎng)度為count且元素類型為datatype的信息發(fā)動(dòng)給rank值為
7、dest的進(jìn)程,這條消息的標(biāo)識(shí)符為tag。其中datatype有MPI_INT, MPI_FLOAT等常用類型Tag的作用是用于區(qū)分一對(duì)進(jìn)程之間發(fā)送的不同信息int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status);接受函數(shù):從rank值為source的進(jìn)程接受標(biāo)識(shí)符為tag的信息,存入以buf為初始地址,長(zhǎng)度為count的存儲(chǔ)區(qū)域中,類型為datatype.10 Labso 頭文件加入o 編譯:mpicc o bin cod
8、e.co 運(yùn)行:mpirun np x bin /其中x為設(shè)置的進(jìn)程數(shù)11 Labsint AN,BN,CN;int nProcNums, nTaskID, nProcNums;int main(int argc , int *argv)MPI_Status status;MPI_Init(&argc,&argv);/初始化/獲取任務(wù)IDMPI_Comm_rank(MPI_COMM_WORLD,&nTaskID);/獲取線程數(shù)MPI_Comm_size(MPI_COMM_WORLD,&nProcNums);Init();line = N/ nProcNums;i
9、f (nTaskID = 0) /主進(jìn)程for (int i = 1; i nProcNums; +i) MPI_Send(B+ (i - 1) * line, line, MPI_FLOAT, i, 0, MPI_COMM_WORLD);for (int i = 1; i nProcNums; +i) MPI_Send(A + (i - 1) * line , line , MPI_FLOAT, i, 1, MPI_COMM_WORLD);for (int i = 1; i nProcNums; +i) MPI_Recv(C, line * NN, MPI_FLOAT, i, 3, MPI_
10、COMM_WORLD, &status); for (int i = (nProcNums - 1) * line; i MM; +i) Ci = Ai+Bi;elseMPI_Recv(B, line, MPI_FLOAT, 0, 0, MPI_COMM_WORLD, &status);MPI_Recv(A line , MPI_FLOAT, 0, 1, MPI_COMM_WORLD, &status);for(int i = 0; i line; +i) Ci=Ai+Bi;MPI_Send(C, line , MPI_FLOAT, 0, 3, MPI_COMM_WOR
11、LD);MPI_Finalize();return 0;MPI_Finalize();return 0;12 Labso 使用Cuda:GPU協(xié)處理器的運(yùn)算流程:13 LabsoCUDA在執(zhí)行的時(shí)候是讓host里面的一個(gè)一個(gè)的kernel按照線程網(wǎng)格(Grid)的概念在顯卡硬件(GPU)上執(zhí)行。o每一個(gè)線程網(wǎng)格又可以包含多個(gè)線程塊(block),每一個(gè)線程塊中又可以包含多個(gè)線程(thread)。o將任務(wù)合理的分配到grid和thread中,有助于提升程序的性能14 Labso基本API: cudaError_t cudaMalloc (void *devPtr, size_t size );
12、在設(shè)備端分配size大小的空間,起始地址為devPtr cudaError_t cudaMemcpy (void * dst, const void * src,size_t count,enum cudaMemcpyKind kind); 將以src為地址長(zhǎng)度為count的數(shù)據(jù)賦值到dst為起始地址的內(nèi) 存區(qū)域中,常用的kind有cudaMemcpyHostToDevice, cudaMemcpyDeviceToHost15 Labso基本API: cudaError_t cudaFree (void *devPtr); 在設(shè)備端清理以devPtr為起始地址的內(nèi)存空間16 Labso MapReduce實(shí)現(xiàn)PageRankApache官方的配置、實(shí)現(xiàn)和運(yùn)行教程/docs/r1.0.4/cn/mapred_tutorial.html17 Labso實(shí)驗(yàn)室集群使用方法:o使用ssh登錄: 1. 先登陸到外網(wǎng)代理節(jié)點(diǎn):輸入ssh jumptohpcc06,密碼為hustcloudhpcc。 2. 登錄到跳板機(jī)之后,什么都別做,直接登錄到集群管理節(jié)點(diǎn):輸入ssh pppuser23072 密碼為cgclhpcc2015。 3. 登錄到計(jì)算節(jié)點(diǎn),例如登錄到計(jì)算節(jié)點(diǎn)node230,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新科版選修化學(xué)下冊(cè)階段測(cè)試試卷含答案
- 2025年滬教版八年級(jí)歷史上冊(cè)月考試卷含答案
- 2025年中圖版七年級(jí)歷史下冊(cè)月考試卷含答案
- 2025年外研銜接版八年級(jí)地理下冊(cè)階段測(cè)試試卷含答案
- 2025年度綠色有機(jī)蔬菜直銷基地采購(gòu)配送服務(wù)合同書(shū)4篇
- 2025年度牧草種子繁殖與銷售合同書(shū)4篇
- 2025年度室內(nèi)木作裝飾工程承包合同3篇
- 2025版農(nóng)機(jī)配件電商平臺(tái)數(shù)據(jù)分析與合作合同2篇
- 2025版高新技術(shù)企業(yè)研發(fā)成果轉(zhuǎn)讓合同標(biāo)準(zhǔn)范本4篇
- 買賣雙方2024年合同范本
- 2024年國(guó)家工作人員學(xué)法用法考試題庫(kù)及參考答案
- 國(guó)家公務(wù)員考試(面試)試題及解答參考(2024年)
- 《阻燃材料與技術(shù)》課件 第6講 阻燃纖維及織物
- 同等學(xué)力英語(yǔ)申碩考試詞匯(第六版大綱)電子版
- 人教版五年級(jí)上冊(cè)遞等式計(jì)算100道及答案
- 墓地個(gè)人協(xié)議合同模板
- 2024年部編版初中語(yǔ)文各年級(jí)教師用書(shū)七年級(jí)(上冊(cè))
- 2024年新課標(biāo)全國(guó)Ⅰ卷語(yǔ)文高考真題試卷(含答案)
- 湖南省退休人員節(jié)日慰問(wèn)政策
- QB/T 5998-2024 寵物尿墊(褲)(正式版)
- 4P、4C、4R-營(yíng)銷理論簡(jiǎn)析
評(píng)論
0/150
提交評(píng)論