Параллельное программирование с использованием MPI. Антонов (2004) (Параллельное программирование с использованием MPI. Антонов (2004).pdf), страница 4
Описание файла
PDF-файл из архива "Параллельное программирование с использованием MPI. Антонов (2004).pdf", который расположен в категории "". Всё это находится в предмете "суперкомпьютерное моделирование и технологии" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 4 страницы из PDF
0) thenif(n .eq. 0) thenprint *, 'latency = ', time, ' seconds'elseprint *, 8*n, ' bytes, bandwidth =', bandwidth,&' Mb/s'end ifend ifif(n .eq. 0) thenn = 1elsen = 2*nend ifend doif(rank .eq. 0) thenprint *, 'max bandwidth =', max, ' Mb/s , length =',&lmax, ' bytes'end ifcall MPI_FINALIZE(ierr)endI_j_^ZqZijb_fkhh[s_gbc[_a[ehdbjh\db< MPI ij_^mkfhlj_g gZ[hj ijhp_^mj ^ey hkms_kl\e_gby Zkbgojhgghci_j_^Zqb^Zgguo<hlebqb_hl[ehdbjmxsboijhp_^mj\ha\jZlbaijhp_^mj^Zgghc]jmiiuijhbkoh^blkjZamihke_\uah\Z[_adZdhc-eb[hhklZgh\dbjZ[hlu ijhp_kkh\ GZ nhg_ ^Zevg_cr_]h \uiheg_gby ijh]jZffu h^gh\j_f_gghijhbkoh^blbh[jZ[hldZZkbgojhgghaZims_gghchi_jZpbb21< ijbgpbi_ ^ZggZy \hafh`ghklv bkdexqbl_evgh ihe_agZ ^ey kha^Zgby wnn_dlb\guo ijh]jZff < kZfhf ^_e_ ijh]jZffbkl agZ_l qlh \ g_dhlhjucfhf_gl_fmihlj_[m_lkyfZkkb\dhlhjuc\uqbkey_l^jm]hcijhp_kkHgaZjZg__ \uklZ\ey_l \ ijh]jZff_ Zkbgojhgguc aZijhk gZ ihemq_gb_ ^Zggh]hfZkkb\ZZ^hlh]hfhf_glZdh]^ZfZkkb\j_Zevghihlj_[m_lkyhgfh`_l\uihegylv ex[mx ^jm]mx ihe_agmx jZ[hlm Hiylv `_ \h fgh]bo kemqZyo kh\_jr_gghg_h[yaZl_evgh^h`b^ZlvkyhdhgqZgbyihkuedbkhh[s_gby^ey\uiheg_gby ihke_^mxsbo \uqbke_gbc >ey aZ\_jr_gby Zkbgojhggh]h h[f_gZlj_[m_lky \uah\ ^hihegbl_evghc ijhp_^mju dhlhjZy ijh\_jy_l aZ\_jrbeZkvebhi_jZpbybeb^h`b^Z_lky__aZ\_jr_gbyLhevdhihke_wlh]hfh`ghbkihevah\Zlv [mn_j ihkuedb ^ey ^jm]bo p_e_c [_a hiZk_gby aZihjlblv hlijZ\ey_fh_khh[s_gb_?keb _klv \hafh`ghklv hi_jZpbb ijb_fZi_j_^Zqb khh[s_gbc kdjulv gZnhg_\uqbke_gbclhwlbf\jh^_[ugZ^h[_ah]h\hjhqghihevah\ZlvkyH^gZdh gZ ijZdlbd_ g_ \k_ \k_]^Z kh]eZkm_lky k l_hjb_c Fgh]h_ aZ\bkbl hldhgdj_lghcj_ZebaZpbbDkh`Ze_gbx^Ze_dhg_\k_]^ZZkbgojhggu_hi_jZpbb wnn_dlb\gh ih^^_j`b\Zxlky ZiiZjZlmjhc b kbkl_fguf hdjm`_gb_fIhwlhfm g_ klhbl m^b\eylvky _keb wnn_dl hl \uiheg_gby \uqbke_gbc gZnhg_ i_j_kuehd hdZ`_lky gme_\uf beb kh\k_f g_[hevrbf K^_eZggu_aZf_qZgby dZkZxlky lhevdh \hijhkh\ wnn_dlb\ghklb < hlghr_gbbij_^hklZ\ey_fhc nmgdpbhgZevghklb Zkbgojhggu_ hi_jZpbb bkdexqbl_evghihe_agu ihwlhfm hgb ijbkmlkl\mxl ijZdlbq_kdb \ dZ`^hc j_Zevghcijh]jZff_MPI_ISEND(BUF, COUNT, DATATYPE, DEST, MSGTAG, COMM, REQUEST,IERR)<type> BUF(*)INTEGER COUNT, DATATYPE, DEST, MSGTAG, COMM, REQUEST, IERRG_[ehdbjmxsZy ihkuedZ ba [mn_jZ BUF COUNT we_f_glh\ khh[s_gby lbiZDATATYPE k b^_glbnbdZlhjhf MSGTAG ijhp_kkm DEST dhffmgbdZlhjZ COMM.<ha\jZlbaijhp_^mjuijhbkoh^blkjZamihke_bgbpbZebaZpbbijhp_kkZi_j_^Zqb [_a h`b^Zgby h[jZ[hldb \k_]h khh[s_gby gZoh^ys_]hky \ [mn_j_BUFWlhhagZqZ_lqlhg_evayih\lhjghbkihevah\Zlv^Zgguc[mn_j^ey^jm]bop_e_c[_aihemq_gby^hihegbl_evghcbgnhjfZpbbih^l\_j`^Zxs_caZ\_jr_gb_ ^Zgghc ihkuedb Hij_^_eblv lhl fhf_gl \j_f_gb dh]^Z fh`ghih\lhjghbkihevah\Zlv[mn_j BUF[_ahiZk_gbybkihjlblvi_j_^Z\Z_fh_khh[s_gb_ fh`gh k ihfhsvx \ha\jZsZ_fh]h iZjZf_ljZ REQUEST b ijhp_^mjk_f_ckl\ MPI_WAIT b MPI_TEST IZjZf_lj REQUEST bf__l \ yaud_ NhjljZglbi INTEGER\yaud_Kb–ij_^hij_^_e_gguclbi MPI_Requestbbkihevam_lky^eyb^_glbnbdZpbbdhgdj_lghcg_[ehdbjmxs_chi_jZpbb:gZeh]bqgh lj_f fh^bnbdZpbyf ijhp_^mju MPI_SEND ij_^mkfhlj_gu ljb^hihegbl_evguo\ZjbZglZijhp_^mjuMPI_ISEND:22• MPI_IBSEND — g_[ehdbjmxsZyi_j_^ZqZkhh[s_gbyk[mn_jbaZpb_c• MPI_ISSEND — g_[ehdbjmxsZyi_j_^ZqZkhh[s_gbykkbgojhgbaZpb_c• MPI_IRSEND — g_[ehdbjmxsZyi_j_^ZqZkhh[s_gbyih]hlh\ghklbDbaeh`_gghc\ur_k_fZglbd_jZ[hluwlboijhp_^mj^h[Z\ey_lkyhlkmlkl\b_[ehdbjh\dbMPI_IRECV(BUF, COUNT, DATATYPE, SOURCE, MSGTAG, COMM, REQUEST,IERR)<type> BUF(*)INTEGER COUNT, DATATYPE, SOURCE, MSGTAG, COMM, REQUEST, IERRG_[ehdbjmxsbc ijb_f \ [mn_j BUF g_ [he__ COUNT we_f_glh\ khh[s_gbylbiZ DATATYPEkb^_glbnbdZlhjhf MSGTAG hlijhp_kkZkghf_jhf SOURCE\dhffmgbdZlhj_ COMM k aZiheg_gb_f fZkkb\Z STATUS < hlebqb_ hl [ehdb-jmxs_]hijb_fZ\ha\jZlbaijhp_^mjuijhbkoh^blkjZamihke_bgbpbZebaZpbbijhp_kkZijb_fZ[_ah`b^Zgbyihemq_gby\k_]hkhh[s_gbyb_]haZibkb\[mn_j_BUFHdhgqZgb_ijhp_kkZijb_fZfh`ghhij_^_eblvkihfhsvxiZjZf_ljZREQUESTbijhp_^mjk_f_ckl\MPI_WAIT bMPI_TEST.Khh[s_gb_hlijZ\e_ggh_ex[hcbaijhp_^mjMPI_SEND, MPI_ISENDbex[hcbalj_obofh^bnbdZpbcfh`_l[ulvijbgylhex[hcbaijhp_^mj MPI_RECVbMPI_IRECV.H[jZlbf hkh[h_ \gbfZgb_ gZ lh qlh ^h aZ\_jr_gby g_[ehdbjmxs_chi_jZpbbg_ke_^m_laZibku\Zlv\bkihevam_fucfZkkb\^ZgguoMPI_IPROBE(SOURCE, MSGTAG, COMM, FLAG, STATUS, IERR)LOGICAL FLAGINTEGER SOURCE, MSGTAG, COMM, IERR, STATUS(MPI_STATUS_SIZE)Ihemq_gb_ \ fZkkb\_ STATUS bgnhjfZpbb h kljmdlmj_ h`b^Z_fh]h khh[s_gby k b^_glbnbdZlhjhf MSGTAG hl ijhp_kkZ k ghf_jhf SOURCE \dhffmgbdZlhj_ COMM [_a [ehdbjh\db < iZjZf_lj_ FLAG \ha\jZsZ_lkyagZq_gb_ .TRUE.
_keb khh[s_gb_ k ih^oh^ysbfb Zljb[mlZfb m`_ fh`_l[ulv ijbgylh \ wlhf kemqZ_ ^_ckl\b_ ijhp_^mju iheghklvx ZgZeh]bqghMPI_PROBEbagZq_gb_ .FALSE._kebkhh[s_gbykmdZaZggufbZljb[mlZfb_s_g_lMPI_WAIT(REQUEST, STATUS, IERR)INTEGER REQUEST, IERR, STATUS(MPI_STATUS_SIZE)H`b^Zgb_aZ\_jr_gbyZkbgojhgghchi_jZpbbZkkhpbbjh\Zgghckb^_glbnbdZlhjhf REQUEST b aZims_gghc \uah\hf ijhp_^mju MPI_ISEND bebMPI_IRECVIhdZZkbgojhggZyhi_jZpbyg_[m^_laZ\_jr_gZijhp_kk\uihegb\rbc ijhp_^mjm MPI_WAIT [m^_l aZ[ehdbjh\Zg >ey hi_jZpbbg_[ehdbjmxs_]hijb_fZhij_^_ey_lkyiZjZf_lj STATUSIhke_\uiheg_gby23ijhp_^mjub^_glbnbdZlhjg_[ehdbjmxs_cmklZgZ\eb\Z_lky\agZq_gb_MPI_REQUEST_NULL.hi_jZpbbREQUESTMPI_WAITALL(COUNT, REQUESTS, STATUSES, IERR)INTEGER COUNT, REQUESTS(*), STATUSES(MPI_STATUS_SIZE,*), IERRH`b^Zgb_ aZ\_jr_gby COUNT Zkbgojhgguo hi_jZpbc Zkkhpbbjh\Zgguo kb^_glbnbdZlhjZfb fZkkb\Z REQUESTS >ey hi_jZpbc g_[ehdbjmxsboijb_fh\ hij_^_eyxlky khhl\_lkl\mxsb_ iZjZf_lju \ fZkkb\_ STATUSES.?keb\h\j_fyh^ghcbebg_kdhevdbohi_jZpbch[f_gZ\hagbdebhrb[dblhihe_ hrb[db \ we_f_glZo fZkkb\Z STATUSES [m^_l mklZgh\e_gh \khhl\_lkl\mxs__agZq_gb_Ihke_\uiheg_gbyijhp_^mjukhhl\_lkl\mxsb_REQUESTSwe_f_gluiZjZf_ljZmklZgZ\eb\Zxlky\agZq_gb_MPI_REQUEST_NULL.Gb`_ihdZaZgijbf_jnjZ]f_glZijh]jZffu\dhlhjhc\k_ijhp_kkuh[f_gb\Zxlky khh[s_gbyfb k [eb`Zcrbfb khk_^yfb \ khhl\_lkl\bb k lhiheh]b_cdhevpZijbihfhsbg_[ehdbjmxsbohi_jZpbcAZf_lbfqlhbkihevah\Zgb_^eywlbop_e_c[ehdbjmxsbohi_jZpbcfh]ehijb\_klbd\hagbdgh\_gbxlmibdh\hckblmZpbbprogram example9include 'mpif.h'integer ierr, rank, size, prev, next, reqs(4), buf(2)integer stats(MPI_STATUS_SIZE, 4)call MPI_INIT(ierr)call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)prev = rank - 1next = rank + 1if (rank .eq.
0) prev = size - 1if (rank .eq. size - 1) next = 0call MPI_IRECV(buf(1), 1, MPI_INTEGER, prev, 5,&MPI_COMM_WORLD, reqs(1), ierr)call MPI_IRECV(buf(2), 1, MPI_INTEGER, next, 6,&MPI_COMM_WORLD, reqs(2), ierr)call MPI_ISEND(rank, 1, MPI_INTEGER, prev, 6,&MPI_COMM_WORLD, reqs(3), ierr)call MPI_ISEND(rank, 1, MPI_INTEGER, next, 5,&MPI_COMM_WORLD, reqs(4), ierr)call MPI_WAITALL(4, reqs, stats, ierr);print *, ‘process ’, rank,&‘ prev=’, buf(1), ‘ next=’, buf(2)call MPI_FINALIZE(ierr)endMPI_WAITANY(COUNT, REQUESTS, INDEX, STATUS, IERR)INTEGER COUNT, REQUESTS(*), INDEX, STATUS(MPI_STATUS_SIZE), IERRH`b^Zgb_ aZ\_jr_gby h^ghc ba COUNT Zkbgojhgguo hi_jZpbc Zkkhpbbjh\Zgguokb^_glbnbdZlhjZfb REQUESTS?kebdfhf_glm\uah\ZaZ\_jrbebkv24g_kdhevdh ba h`b^Z_fuo hi_jZpbc lh kemqZcguf h[jZahf [m^_l \u[jZgZh^gZbagboIZjZf_lj INDEX kh^_j`blghf_jwe_f_glZ\fZkkb\_ REQUESTS,kh^_j`Zs_]h b^_glbnbdZlhj aZ\_jr_gghc hi_jZpbb >ey g_[ehdbjmxs_]hijb_fZ hij_^_ey_lky iZjZf_lj STATUS Ihke_ \uiheg_gby ijhp_^mju khhl\_lkl\mxsbc we_f_gl iZjZf_ljZ REQUESTS mklZgZ\eb\Z_lky \ agZq_gb_MPI_REQUEST_NULL.MPI_WAITSOME(INCOUNT, REQUESTS, OUTCOUNT, INDEXES, STATUSES,IERR)INTEGER INCOUNT, REQUESTS(*), OUTCOUNT, INDEXES(*), IERR,STATUSES(MPI_STATUS_SIZE,*)H`b^Zgb_aZ\_jr_gbyohly[uh^ghcbaINCOUNTZkbgojhgguohi_jZpbcZkkhpbbjh\Zgguo k b^_glbnbdZlhjZfb REQUESTS IZjZf_lj OUTCOUNT kh^_j`bl qbkeh aZ\_jr_gguo hi_jZpbc Z i_j\u_ OUTCOUNT we_f_glh\ fZkkb\ZINDEXES kh^_j`Zl ghf_jZ we_f_glh\ fZkkb\Z REQUESTS k bo b^_glbnbdZlhjZfb I_j\u_ OUTCOUNT we_f_glh\ fZkkb\Z STATUSES kh^_j`Zl iZjZf_ljuaZ\_jr_gguo hi_jZpbc ^ey g_[ehdbjmxsbo ijb_fh\ Ihke_ \uiheg_gbyijhp_^mju khhl\_lkl\mxsb_ we_f_glu iZjZf_ljZ REQUESTS mklZgZ\eb\Zxlky\agZq_gb_MPI_REQUEST_NULL.< ke_^mxs_f ijbf_j_ ^_fhgkljbjm_lky ko_fZ bkihevah\Zgby ijhp_^mjuMPI_WAITSOME^eyhj]ZgbaZpbbdhffmgbdZpbhgghcko_fu³master-slave´\k_ijhp_kku h[sZxlky k h^gbf \u^_e_gguf ijhp_kkhf <k_ ijhp_kku djhf_ijhp_kkZ 0gZdZ`^hcbl_jZpbbpbdeZhij_^_eyxlkihfhsvx\uah\Zijhp_^mju slavek\hxehdZevgmxqZklvfZkkb\Z aihke_q_]hihkueZxl__]eZ\ghfmijhp_kkmIjhp_kk 0kgZqZeZbgbpbZebabjm_lg_[ehdbjmxsb_ijb_fuhl\k_ohklZevguoijhp_kkh\ihke_q_]h^h`b^Z_lkyijboh^Zohly[uh^gh]hkhh[s_gby>eyijbr_^rbokhh[s_gbcijhp_kk0\uau\Z_lijhp_^mjmh[jZ[hldb masterihke_q_]hkgh\Z\uklZ\ey_lg_[ehdbjmxsb_ijb_fuLZdbfh[jZahf ijhp_kk 0 h[jZ[Zlu\Z_l l_ ihjpbb ^Zgguo dhlhju_ ]hlh\u gZ^Zgguc fhf_gl Ijb wlhf ^ey dhjj_dlghklb jZ[hlu ijh]jZffu gm`ghh[_ki_qblvqlh[uijhp_kk 0mki_\Zeh[jZ[hlZlvijboh^ysb_khh[s_gbylh_klv qlh[u ijhp_^mjZ slave jZ[hlZeZ agZqbl_evgh ^hevr_ ijhp_^mjumaster\ijhlb\ghfkemqZ_bjZkiZjZee_eb\Zgb_g_bf__lhkh[h]hkfukeZDjhf_lh]h\ijbf_j_gZibkZg[_kdhg_qgucpbdeihwlhfm^eydhgdj_lghcijh]jZffugm`ghij_^mkfhlj_lvmkeh\b_aZ\_jr_gby25program example10include 'mpif.h'integer rank, size, ierr, N, MAXPROCparameter(N = 1000, MAXPROC = 128)integer req(MAXPROC), num, indexes(MAXPROC)integer statuses(MPI_STATUS_SIZE, MAXPROC)double precision a(N, MAXPROC)call MPI_INIT(ierr)call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)if(rank .ne.