freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

mpi并行程序設(shè)計(jì)ppt課件(編輯修改稿)

2025-05-25 22:07 本頁面
 

【文章內(nèi)容簡介】 g == MPI_ANY_TAG: 匹配任意 tag值的消息 (任意 tag消息 ). ? 在阻塞式消息傳送中不允許 Source==Dest,否則會導(dǎo)致deadlock. ? 消息傳送被限制在同一個(gè) municator. ? 在 send函數(shù)中必須指定唯一的接收者 (Push/pull通訊機(jī)制 ). 2022年 5月 MPI并行程序設(shè)計(jì) 42/217 status參數(shù) ? 當(dāng)使用 MPI_ANY_SOURCE或 /和 MPI_ANY_TAG接收消息時(shí)如何確定消息的來源 source 和 tag值呢 ? – 在 C中 , . – 在 Fortran中 , source=status(MPI_SOURCE), tag=status(MPI_TAG). ? Status還可用于返回實(shí)際接收到消息的長度 – int MPI_Get_count(MPI_Status status, MPI_Datatype datatype,int* count) ? IN status 接收操作的返回值 . ? IN datatype 接收緩沖區(qū)中元素的數(shù)據(jù)類型 . ? OUT count 接收消息中的元素個(gè)數(shù) . 2022年 5月 MPI并行程序設(shè)計(jì) 43/217 分析 greetings include include “ main(int argc, char* argv[]) { int numprocs。 /*進(jìn)程數(shù) ,該變量為各處理器中的同名變量 , 存儲是分布的 */ int myid。 /*我的進(jìn)程 ID,存儲也是分布的 */ MPI_Status status。 /*消息接收狀態(tài)變量 ,存儲也是分布的 */ char message[100]。 /*消息 buffer,存儲也是分布的 */ /*初始化 MPI*/ MPI_Init(amp。argc, amp。argv)。 /*該函數(shù)被各進(jìn)程各調(diào)用一次 ,得到自己的進(jìn)程 rank值 */ MPI_Comm_rank(MPI_COMM_WORLD, amp。myid)。 /*該函數(shù)被各進(jìn)程各調(diào)用一次 ,得到進(jìn)程數(shù) */ MPI_Comm_size(MPI_COMM_WORLD, amp。numprocs)。 2022年 5月 MPI并行程序設(shè)計(jì) 44/217 分析 greetings if (myid != 0) { /*建立消息 */ sprintf(message, Greetings from process %d!,myid)。 /* 發(fā)送長度取 strlen(message)+1,使 \0也一同發(fā)送出去 */ MPI_Send(message,strlen(message)+1, MPI_CHAR, 0,99,MPI_COMM_WORLD)。 } else { /* my_rank == 0 */ for (source = 1。 source numprocs。 source++) { MPI_Recv(message, 100, MPI_CHAR, source, 99, MPI_COMM_WORLD,amp。status)。 printf(“%s\n, message)。 } } /*關(guān)閉 MPI,標(biāo)志并行代碼段的結(jié)束 */ MPI_Finalize()。 } /* End main */ 2022年 5月 MPI并行程序設(shè)計(jì) 45/217 Greetings執(zhí)行過程 假設(shè)進(jìn)程數(shù)為 3 (進(jìn)程 0) (進(jìn)程 1) (進(jìn)程 2) (rank=0) (rank=1) (rank=2) . . Recv()。 . . Recv()。 . . . . . Send()。 . . . . . . Send() . . . 問題 :進(jìn)程 1和 2誰先向根進(jìn)程發(fā)送消息 ? ? % 2022年 5月 MPI并行程序設(shè)計(jì) 46/217 運(yùn)行 greetings ? [dair@node01 ~]$ mpicc –o greeting ? [dair@node01 ~]$ mpirun np 4 greeting Greetings from process 1! Greetings from process 2! Greetings from process 3! ? [dair@node01 ~]$ 計(jì)算機(jī)打印字符 我們輸入的命令 2022年 5月 MPI并行程序設(shè)計(jì) 47/217 現(xiàn)在您已經(jīng)能夠用 MPI進(jìn)行并行編程了 ! 2022年 5月 MPI并行程序設(shè)計(jì) 48/217 避免死鎖 deadlock ? 發(fā)送和接收是成對出現(xiàn)的,忽略這個(gè)原則 很可能會產(chǎn)生死鎖 總會死鎖的通信調(diào)用次序 2022年 5月 MPI并行程序設(shè)計(jì) 49/217 不安全的通信調(diào)用次序 2022年 5月 MPI并行程序設(shè)計(jì) 50/217 安全的通信調(diào)用次序 2022年 5月 MPI并行程序設(shè)計(jì) 51/217 MPI_Sendrecv函數(shù)原型 ? int MPI_Sendrecv( void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm m, MPI_Status *status) ? 數(shù)據(jù)輪換 p0 p1 p2 P(n1) pi 2022年 5月 MPI并行程序設(shè)計(jì) 52/217 MPI_Sendrecv用法示意 … int a,b。 … MPI_Status status。 int dest = (rank+1)%p。 int source = (rank + p 1)%p。 /*p為進(jìn)程個(gè)數(shù) */ MPI_Sendrecv( amp。a, 1, MPI_INT, dest, 99, amp。b 1, MPI_INT, source, 99, MPI_COMM_WORLD, amp。status)。 該函數(shù)被每一進(jìn)程執(zhí)行一次 . 2022年 5月 MPI并行程序設(shè)計(jì) 53/217 空進(jìn)程 ? rank = MPI_PROC_NULL的進(jìn)程稱為空進(jìn)程 – 使用空進(jìn)程的通信不做任何操作 . – 向 MPI_PROC_NULL發(fā)送的操作總是成功并立即返回 . – 從 MPI_PROC_NULL接收的操作總是成功并立即返回,且接收緩沖區(qū)內(nèi)容為隨機(jī)數(shù) . – status ? = MPI_PROC_NULL ? = MPI_ANY_TAG ? MPI_Get_count(amp。status,MPI_Datatype datatype, amp。count) =count = 0 p0 p1 p2 P(n1) pi 空進(jìn)程 2022年 5月 MPI并行程序設(shè)計(jì) 54/217 空進(jìn)程應(yīng)用示意 … MPI_Status status。 int dest = (rank+1)%p。 int source = (rank + p 1)%p。 if(source == p1) source = MPI_PROC_NULL。 if(dest == 0) dest = MPI_PROC_NULL。 MPI_Sendrecv( amp。a, 1, MPI_INT, dest, 99, amp。b 1, MPI_INT, source, 99, MPI_COMM_WORLD, amp。status)。 … 2022年 5月 MPI并行程序設(shè)計(jì) 55/217 阻塞與非阻塞的差別 ? 用戶發(fā)送緩沖區(qū)的重用 : – 非阻塞的發(fā)送:僅當(dāng)調(diào)用了有關(guān)結(jié)束該發(fā)送的語句后才能重用發(fā)送緩沖區(qū),否則將導(dǎo)致錯(cuò)誤;對于接收方,與此相同,僅當(dāng)確認(rèn)該接收請求已完成后才能使用。 所以對于非阻塞操作,要先調(diào)用等待 MPI_Wait()或測試 MPI_Test()函數(shù)來結(jié)束或判斷該請求,然后再向緩沖區(qū)中寫入新內(nèi)容或讀取新內(nèi)容。 ? 阻塞發(fā)送將發(fā)生阻塞 ,直到通訊完成 . ? 非阻塞可將通訊交由后臺處理,通信與計(jì)算可重疊 . ? 發(fā)送語句的前綴由 MPI_改為 MPI_I, I:immediate: – 標(biāo)準(zhǔn)模式 :MPI_Send(…) MPI_Isend(…) – Buffer模式 :MPI_Bsend(…) MPI_Ibsend(…) – … 2022年 5月 MPI并行程序設(shè)計(jì) 56/217 非阻塞發(fā)送與接收 ? int MPI_Isend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm m, MPI_Request *request) – IN buf 發(fā)送緩沖區(qū)的起始地址 – IN count 發(fā)送緩沖區(qū)的大小 (發(fā)送元素個(gè)數(shù) ) – IN datatype 發(fā)送緩沖區(qū)數(shù)據(jù)的數(shù)據(jù)類型 – IN dest 目的進(jìn)程的秩 – IN tag 消息標(biāo)簽 – IN m 通信空間 /通信子 – OUT request 非阻塞通信完成對象 (句柄 ) ? int MPI_Irecv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm m, MPI_Request* request) 2022年 5月 MPI并行程序設(shè)計(jì) 57/217 非阻塞標(biāo)準(zhǔn)發(fā)送和接收 2022年 5月 MPI并行程序設(shè)計(jì) 58/217 通信的完成 (常用于非阻塞通信 ) ? 發(fā)送的完成 : 代表發(fā)送緩沖區(qū)中的數(shù)據(jù)已送出,發(fā)送緩沖區(qū)可以重用。它并不代表數(shù)據(jù)已被接收方接收。數(shù)據(jù)有可能被緩沖 。 ? 接收的完成 :代表數(shù)據(jù)已經(jīng)寫入接收緩沖區(qū)。接收者可訪問接收緩沖區(qū)。 ? 通過 MPI_Wait()和 MPI_Test()來判斷通信是否已經(jīng)完成 。 2022年 5月 MPI并行程序設(shè)計(jì) 59/217 MPI_Wait()及應(yīng)用示例 ? int MPI_Wait(MPI_Request* request, MPI_Status * status)。 當(dāng) request標(biāo)識的通信結(jié)束后, MPI_Wait()才返回 。如果通信是非阻塞的,返回時(shí) request = MPI_REQUEST_NULL。函數(shù)調(diào)用是非本地的 。 MPI_Request request。 MPI_Status status。 int x,y。 if(rank == 0){ MPI_Isend(amp。x,1,MPI_INT,1,99,m,amp。request) … MPI_Wait(amp。request,amp。status)。 }else{ MPI_Irecv(amp。y,1,MPI_INT,0,99,m,amp。request) … MPI_Wait(amp。request,amp。status)。 } 2022年 5月 MPI并行程序設(shè)計(jì) 60/217 MPI_Test()及應(yīng)用示例 //int MPI_Test(MPI_Request *request,int *flag, MPI_Status *status)。 MPI_Request request。 MPI_Status status。 int x,y,flag。 if(rank == 0){ MPI_Isend(amp。x,1,MPI_INT,1,99,m,amp。request) while(!flag) MPI_Test(amp。request,amp。flag,amp。status)。 }else{ MPI_Irecv(amp。y,1,MPI_INT,0,99,m,amp。request) while(!flag) MPI_Test(amp。request,amp。flag,amp。status)。 } 2022年 5月 MPI并行程序設(shè)計(jì) 61/217 消息探測 Probe函數(shù) (適用于阻塞與非阻塞 ) ? MPI_Probe()和 MPI_Iprobe()函數(shù) 探測接收消息的內(nèi)容 。用戶根據(jù)探測到的消息內(nèi)容決定如何接收這些消息,如根據(jù)消息大小分配緩沖區(qū)等。前者為阻塞
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1