MPI 第三章 需要邊界資料交換的平行程式
outline 何謂『需要邊界資料交換』? MPI_Sendrecv() MPI_Bcast() 邊界資料交換的循序程式T3SEQ 資料不切割的邊界資料交換平行程式 T3CP 資料切割的邊界資料交換平行程式 T3DCP_1
何謂『需要邊界資料交換』? 平行處理的精神在於將計算從一顆處理器分散到多顆處理器上,借以縮短運算時間。其過程會將資料以各種方式交給每一顆處理器。 『需要邊界資料交換』的平行程式是最常見的一種平行處理程式。 a[i]=(b[i-1]+b[i]+b[i+1])*c[i]
MPI_Sendrecv() itag = 110; MPI_Sendrecv((void *)&b[iend], icount, DATA_TYPE,r_nbr,itag,(void*)&b[istartm1], icount,DATA_TYPE,l_nbr,itag,comm,istat); b[iend] 是要送出去的資料起點 icount 是要送出去的資料數量 DATA_TYPE 是要送出去的資料類別 r_nbr 是要送出去的目的地CPUid(右鄰) I tag 是要送出去的資料標籤 b[iend] 是要接收的資料起點 icount 是要接收的資料數量 DATA_TYPE 是要接收的資料類別 r_nbr 是要接收的來源地CPUid(左鄰) I tag 是要接收的資料標籤 Istat 是叫用這個函式執行後的狀況
MPI_Bcast() b 是要送出去的資料起點,簡單變數或陣列名稱 icount 是要送出的資料數量 Iroot = 0; MPI_Bcast((void *)&b,icount,DATA_TYPE,iroot,comm); b 是要送出去的資料起點,簡單變數或陣列名稱 icount 是要送出的資料數量 DATA_TYPE 是要送出去的資料類別 iroot 是要送出去資料的CPUid
… 邊界資料交換的循序程式T3SEQ for(i=1;i<ntotal-1;i++){ a[i]=c[i]*d[i]+(b[i-1]+2.0*b[i]+b[i+1])*0.25; amax=max(amax,a[i]); }
資料不切割的邊界資料交換平行程式 T3CP
資料切割的邊界資料交換平行程式 T3DCP_1