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

正文內(nèi)容

第十四章分布存儲(chǔ)系統(tǒng)并行編程-閱讀頁(yè)

2024-08-20 13:29本頁(yè)面
  

【正文】 p os i t i on 用于跟蹤已經(jīng)有多少個(gè)數(shù)據(jù)項(xiàng)被打包 . p os i t i on 的最后值在接下來(lái)的 M P I_ S e n d 中被用作消息計(jì)數(shù) . double A[100]。BufferSize)。 j = sizeof(MPI_DOUBLE)。 for (i=0。i++) MPI_Pack(A+i*j,1,MPI_DOUBLE,TempBuffer,BufferSize,amp。 MPI_Send(TempBuffer,Position,MPI_PACKED,destination,tag,m)。? 所有的數(shù)據(jù)項(xiàng)具有相同的數(shù)據(jù)類型 .這類消息可以方便地用三元組( a d d r e s s , c o u n t, d a ta ty p e )來(lái)定義 .第 ( 1 ) 個(gè)消息可以用 ( A , 1 0 0 , M P I _ D O U B L E ) 來(lái)定義 .第 ( 2 ) 個(gè)消息可以用 ( A +1 6 , 2 , M P I _ D O U B L E ) 來(lái)定義 .( 3 ) 由數(shù)組 A 的所有偶序數(shù)項(xiàng)組成的消息 .這個(gè)消息由 50 項(xiàng) A [ 0 ] , A [ 2 ] , A [ 4 ] , . . . , A [ 9 8 ] 組成 . 每一項(xiàng)有一個(gè) d o u b l e 數(shù)據(jù)類型 . 第 i 項(xiàng)的起始地址是 A +1 6 ( i 1 ) .( 4 )由數(shù)組 A 的第 3 項(xiàng) , 后跟一個(gè)字符 c , 再跟一個(gè)整型數(shù) k.這個(gè)消息由三個(gè)不同類型的數(shù)據(jù)組成 . 假定它是一個(gè)數(shù)據(jù)結(jié)構(gòu) :s t r u c t{ d o u b l e A [ 1 0 0 ] 。 i n t j, k 。 Ev e nEl e m e nt s) 產(chǎn)生一個(gè)導(dǎo)出數(shù)據(jù)類型 Ev e nEl e m e nt s, 它由 50 個(gè)塊組成 . 每個(gè)塊的組成是一個(gè)雙精度數(shù) , 后跟一個(gè) 8 字節(jié)的間隔 , 接在后面的是下一塊 . st rid e 是兩個(gè)雙精度數(shù)的大小 , 即16 字節(jié) . 8 字節(jié)的間隔用于跳過(guò)數(shù)組 A 的奇序數(shù)元素 . M P I _T y pe_c o m m i t (amp。 MPI_Data_type EvenElements。EvenElements)。EvenElements)。 國(guó)家高性能計(jì)算中心(合肥) 說(shuō)明 : MPI_Type_vector(count, blocklength, stride, oldtype, amp。 send(A,32,Q,tag)。 recv(B,32,P,tag) 國(guó)家高性能計(jì)算中心(合肥) 用戶如何來(lái)定義消息的接收者呢 ? 在下面列出的 MPI發(fā)送例程中 , 消息信封由三項(xiàng)組成 . MPI_Send (address, count, datatype, destination, tag, municator) destination 域是一個(gè)整數(shù) , 標(biāo)識(shí)消息的接收進(jìn)程 . 消息標(biāo)簽 (message tag), 也稱為消息類型 (message type), 是程序員用于標(biāo)識(shí)不同類型消息、限制消息接收者的一個(gè)整數(shù) . 2 MPI中的消息信封 國(guó)家高性能計(jì)算中心(合肥) 為什么要使用消息標(biāo)簽 (Tag)? P r o ce s s P : s en d (A, 3 2 ,Q ) s en d (B ,1 6 ,Q ) P r o ce s s Q : r ec v (X, 3 2 , P) r ec v (Y , 1 6 , P) 未使用標(biāo)簽 P r oce s s P : s e n d ( A,32 ,Q ,tag1) s e n d ( B ,1 6, Q ,tag2) P r oce s s Q : r e c v (X, 32, P , t ag 1) r e c v (Y , 16, P , t ag 2) 使用了標(biāo)簽 為了說(shuō)明為什么要用標(biāo)簽 , 我們先來(lái)看右面一段沒(méi)有使用標(biāo)簽的代碼 : 這段代碼打算傳送 A的前 32個(gè)字節(jié)進(jìn)入 X, 傳送 B的前 16個(gè)字節(jié)進(jìn)入 Y. 但是 , 如果消息 B盡管后發(fā)送但先到達(dá)進(jìn)程 Q,就會(huì)被第一個(gè) r e c v ( ) 接收在 X 中 . 使用標(biāo)簽可以避免這個(gè)錯(cuò)誤 . 2 MPI中的消息信封 國(guó)家高性能計(jì)算中心(合肥) 使用標(biāo)簽的另一個(gè)原因是可以簡(jiǎn)化對(duì)下列情形的處理 . 假定有兩個(gè)客戶進(jìn)程 P和 R, 每個(gè)發(fā)送一個(gè)服務(wù)請(qǐng)求消息給服務(wù)進(jìn)程 Q. 例 6 在消息傳遞中使用標(biāo)簽 P r oc e ss P : se n d ( r e q u e st 1, 32 , Q ) P r oc e ss R : se n d ( r e q u e st 2, 32 , Q ) P r oc e ss Q: w h il e ( t r u e ) { r e c v ( r e c e iv e d _r e q u e st , 32 , A n y _P r oc e ss) 。 } P r oc e ss P : sen d (r e q u e st1, 32, Q, tag1) P r oc e ss R: sen d (r e q u e st2, 32, Q , tag2) P r oc e ss Q : w h i l e (t r u e ){ r e c v (r e c e i v e d _r e q u e st, 32, An y _P r oc e ss , An y _T ag, S tat u s)。 i f ( S tat u s. T ag== tag2) p r oc e ss r e c e i v e d _r e q u e st i n an oth e r w ay 。group_size) MPI_Comm_rank(municator, amp。 parallel_fft(...)。 parallel_fft(...)。 含代碼 含代碼 國(guó)家高性能計(jì)算中心(合肥) 存在問(wèn)題 : 不可能保證 tag1 和 tag2一定取了不同的值 : ? 標(biāo)簽是由用戶定義的整數(shù)值 , 用戶可能會(huì)出錯(cuò) . ? 即使用戶不會(huì)弄錯(cuò) , 也難以或不可能保證 tag1 和 tag2有不同的值 . 函數(shù) parallel_fft( )可能是由其它用戶寫的 , 或者它是一個(gè)庫(kù)例程 . 這樣 , 用戶可能不知道 tag2的值 . ? 即使用戶總能知道 tag2的值 , 仍然可能出錯(cuò) . 因?yàn)?MPI_Recv 例程可能決定使用一個(gè)通配的 (wildcard)標(biāo)簽 MPI_Any_tag. 解決辦法 : 在 parallel_fft( )中的通信使用不同的通信子 , 它可能包含相同的進(jìn)程組 (如 , 進(jìn)程 0和 1), 但每個(gè)通信子有系統(tǒng)指定的不同的上下文 , 與 m1的不同 . 因此 , MPI_Recv 不再有偶然會(huì)從 parallel_fft( )的 MPI_Send中接收 msg2的危險(xiǎn)了 . 2 MPI中的消息信封 國(guó)家高性能計(jì)算中心(合肥) 考慮如下由 10個(gè)進(jìn)程執(zhí)行的代碼 : 例 8 MPI中的新通信子 2 MPI中的消息信封 MPI_Comm MyWorld, SplitWorld。 MPI_Init(amp。argv)。MyWorld)。my_rank)。group_size)。 Key=my_rank/3。SplitWorld)。MyWorld) 將創(chuàng)建一個(gè)新的通信子 MyWorld, 它是包含與原始的 MPI_COMM_WORLD相同的 10個(gè)進(jìn)程的進(jìn)程組 ,但有不同的上下文 . 表 分裂一個(gè)通信子 M y W o r l d R an k i n My W orld 0 1 2 3 4 5 6 7 8 9 C olor 0 1 2 0 1 2 0 1 2 0 Key 0 0 0 1 1 1 2 2 2 3 R an k i n Sp li tW orld (C olor=0 ) 0 1 2 3 R an k i n Sp li tW orld (C olor=1 ) 0 1 2 R an k i n Sp li tW orld (C olor=2 ) 0 1 2 2 MPI中的消息信封 國(guó)家高性能計(jì)算中心(合肥) MPI1被設(shè)計(jì)成使不同通信子中的通信是相互分開的 , 以及任何群集通信是與任何點(diǎn)對(duì)點(diǎn)通信分開的 , 即使它們是在相同的通信子內(nèi) . 通信子概念尤其方便了并行庫(kù)的開發(fā) . MPI1只支持組內(nèi)通信 (intramunication) MPI2支持組間通信 (intermunication) 2 MPI中的消息信封 國(guó)家高性能計(jì)算中心(合肥) MPI消息特性的總結(jié) 發(fā)送者進(jìn)程總結(jié)如下 例子 : MPI_Send(amp。 ?第一個(gè)參數(shù)指明消息緩存的起始地址 , 即存放要發(fā)送的數(shù)據(jù)信息 . ?第二個(gè)參數(shù)指明消息中給定的數(shù)據(jù)類型有多少項(xiàng) , 這個(gè)數(shù)據(jù)類型由第三個(gè)參數(shù)給定 . ?數(shù)據(jù)類型要么是基本數(shù)據(jù)類型 , 要么是導(dǎo)出數(shù)據(jù)類型 , 后者由用戶生成指定一個(gè)可能是由混合數(shù)據(jù)類型組成的非連續(xù)數(shù)據(jù)項(xiàng) . ?第四個(gè)參數(shù)是目的進(jìn)程的標(biāo)識(shí)符 (進(jìn)程編號(hào) ) ?第五個(gè)是消息標(biāo)簽 ?第六個(gè)參數(shù)標(biāo)識(shí)進(jìn)程組和上下文 , 即 , 通信子 . 通常 , 消息只在同組的進(jìn)程間傳送 . 但是 , MPI允許通過(guò) intermunicators在組間通信 . MPI_Send(buffer, count, datatype, destination, tag, municator) 國(guó)家高性能計(jì)算中心(合肥) 發(fā)送者進(jìn)程總結(jié)如下 例 : MPI_Recv(amp。Status) 第一個(gè)參數(shù)指明接收消息緩沖的起始地址 , 即存放接收消息的內(nèi)存地址 第二個(gè)參數(shù)指明給定數(shù)據(jù)類型的最大項(xiàng)數(shù) , 它存放在第三個(gè)參數(shù)內(nèi) , 可以被接收 . 接收到的實(shí)際項(xiàng)數(shù)可能少一些 第四個(gè)參數(shù)是源進(jìn)程標(biāo)識(shí)符 (編號(hào) ) 第五個(gè)是消息標(biāo)簽 第六個(gè)參數(shù)標(biāo)識(shí)一個(gè)通信子 第七個(gè)參數(shù)是一個(gè)指針 , 指向一個(gè)結(jié)構(gòu) MPI_Status Status 存放了各種有關(guān)接收消息的各種信息 . 實(shí)際的源進(jìn)程編號(hào) 實(shí)際的消息標(biāo)簽 實(shí)際接收到的數(shù)據(jù)項(xiàng)數(shù)由 MPI例程 MPI_Get_count(amp。C) 讀出 . 這個(gè)例程使用 Status中的信息來(lái)決定給定數(shù)據(jù)類型 (在這里是MPI_INT)中的實(shí)際項(xiàng)數(shù) , 將這個(gè)數(shù)放在變量 C中 . 這兩個(gè)域可以是 wildcard MPI_Any_source和MPI_Any_tag. } MPI_Recv(address, count, datatype,source, tag, municator, status) 國(guó)家高性能計(jì)算中心(合肥) 當(dāng)一個(gè)接收者能從不同進(jìn)程接收不同大小和標(biāo)簽的信息時(shí) , 狀態(tài)信息就很有用 . 例 9 消息傳遞中的狀態(tài) (Status)字 2 MPI中的消息信封 while (true){ MPI_Recv(received_request,100,MPI_BYTE,MPI_Any_source, MPI_Any_tag,m,amp。 switch () { case tag_0: perform service type0。 case tag_2: perform service type2。 MPI_Isend(PreviousY, ...)。 } 4 點(diǎn)對(duì)點(diǎn)的通信 國(guó)家高性能計(jì)算中心(合肥) 進(jìn)程 Q的代碼 while (Not_Done){ if (X==Xbuf0) {X=Xbuf1。 Xin=Xbuf0。} else {X=Xbuf0。 Xin=Xbuf1。} MPI_Irevc(Xin, ..., recv_handle)。 Y=Q(X)。 MPI_Wait(send_handle,send_status)。 MPI_Issend(amp。 Process Q ... ... if (Y==5)MPI_Irecv(amp。 printf(“Y is %d”, Y)。 /* slice counter */ double sum, /* running sum */ pi, /* approximate value of pi */ mypi, x, /* independent var. */ h。 main(argc,argv) int a
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1