Параллельное программирование с использованием MPI. Антонов (2004) (Параллельное программирование с использованием MPI. Антонов (2004).pdf), страница 6
Описание файла
PDF-файл из архива "Параллельное программирование с использованием MPI. Антонов (2004).pdf", который расположен в категории "". Всё это находится в предмете "суперкомпьютерное моделирование и технологии" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 6 страницы из PDF
Lj_lvbf \ZjbZglhf jZaj_r_gby lmibdh\hc kblmZpbb fh`_l [ulvbkihevah\Zgb_ijhp_^mjuMPI_SENDRECV.MPI_SENDRECV(SBUF, SCOUNT, STYPE, DEST, STAG, RBUF, RCOUNT,RTYPE, SOURCE, RTAG, COMM, STATUS, IERR)<type> SBUF(*), RBUF(*)INTEGER SCOUNT, STYPE, DEST, STAG, RCOUNT, RTYPE, SOURCE,RTAG, COMM, STATUS(MPI_STATUS_SIZE), IERRIjhp_^mjZ \uihegy_l kh\f_s_ggu_ ijb_f b i_j_^Zqm khh[s_gbc k[ehdbjh\dhc Ih \uah\m ^Zgghc ijhp_^mju hkms_kl\ey_lky ihkuedZSCOUNT we_f_glh\ lbiZ STYPE ba fZkkb\Z SBUF k l_]hf STAG ijhp_kkm kghf_jhf DEST \ dhffmgbdZlhj_ COMM b ijb_f \ fZkkb\ RBUF g_ [he__RCOUNTwe_f_glh\lbiZRTYPE kl_]hfRTAGhlijhp_kkZkghf_jhfSOURCE\ dhffmgbdZlhj_ COMM >ey ijbgbfZ_fh]h khh[s_gby aZihegy_lkyiZjZf_lj STATUS IjbgbfZxsbc b hlijZ\eyxsbc ijhp_kku fh]mly\eylvky h^gbf b l_f `_ ijhp_kkhf ;mn_ju i_j_^Zqb b ijb_fZ ^Zgguog_ ^he`gu i_j_k_dZlvky =ZjZglbjm_lky qlh ijb wlhf lmibdh\hckblmZpbb g_ \hagbdZ_l Khh[s_gb_ hlijZ\e_ggh_ hi_jZpb_cMPI_SENDRECV fh`_l [ulv ijbgylh h[uqguf h[jZahf b hi_jZpbyMPI_SENDRECV fh`_l ijbgylv khh[s_gb_ hlijZ\e_ggh_ h[uqghc hi_jZpb_c33MPI_SENDRECV_REPLACE(BUF, COUNT, DATATYPE, DEST, STAG, SOURCE,RTAG, COMM, STATUS, IERR)<type> BUF(*)INTEGER COUNT, DATATYPE, DEST, STAG, SOURCE, RTAG, COMM,STATUS(MPI_STATUS_SIZE), IERRKh\f_s_ggu_ ijb_f b i_j_^ZqZ khh[s_gbc k [ehdbjh\dhc q_j_a h[sbc[mn_jBUFIjbgbfZ_fh_khh[s_gb_g_^he`ghij_\urZlvihjZaf_jmhlijZ\ey_fh_ khh[s_gb_ Z i_j_^Z\Z_fu_ b ijbgbfZ_fu_ ^Zggu_ ^he`gu[ulvh^gh]hlbiZ<ke_^mxs_fijbf_j_hi_jZpbb^\mgZijZ\e_ggh]hh[f_gZkkhk_^gbfbijhp_kkZfb\dhevp_\hclhiheh]bbijhba\h^ylkyijbihfhsb^\mo\uah\h\ijhp_^mjuMPI_SENDRECVIjbwlhf]ZjZglbjh\Zgghg_\hagbdZ_llmibdh\hckblmZpbbprogram example12include 'mpif.h'integer ierr, rank, size, prev, next, buf(2)integer status1(MPI_STATUS_SIZE), status2(MPI_STATUS_SIZE)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_SENDRECV(rank, 1, MPI_INTEGER, prev, 6,&buf(2), 1, MPI_INTEGER, next, 6,&MPI_COMM_WORLD, status2, ierr)call MPI_SENDRECV(rank, 1, MPI_INTEGER, next, 5,&buf(1), 1, MPI_INTEGER, prev, 5,&MPI_COMM_WORLD, status1, ierr)print *, ‘process ’, rank,&‘ prev=’, buf(1), ‘ next=’, buf(2)call MPI_FINALIZE(ierr)endAZ^Zgby• DZdbfbZljb[mlZfbh[eZ^Z_l\MPIdZ`^h_ihkueZ_fh_khh[s_gb_"• Fh`ghebkhh[s_gb_hlijZ\e_ggh_kihfhsvx[ehdbjmxs_chi_jZpbbihkuedbijbgylvg_[ehdbjmxs_chi_jZpb_cijb_fZ"• Qlh]ZjZglbjm_l[ehdbjh\dZijbhlijZ\d_ijb_f_khh[s_gbc"• Fh`gh eb \ dZq_kl\_ l_]h\ ijb ihkued_ jZaebqguo khh[s_gbc \ijh]jZff_\k_]^Zbkihevah\Zlvh^ghblh`_qbkeh"• DZdijbgylvex[h_khh[s_gb_hlex[h]hijhp_kkZ"34• DZd ijbgbfZxsbc ijhp_kk fh`_l hij_^_eblv ^ebgm ihemq_ggh]hkhh[s_gby"• Fh`gh eb ijb ihkued_ khh[s_gby bkihevah\Zlv dhgklZgluMPI_ANY_SOURCEbMPI_ANY_TAG?• Fh`ghebg_ijbgbfZykhh[s_gbyhij_^_eblv_]hZljb[mlu"• ;m^_lebdhjj_dlgZijh]jZffZ\dhlhjhcihkueZxsbcijhp_kkmdZau\Z_l \ dZq_kl\_ ^ebgu [mn_jZ qbkeh 10 Z ijbgbfZxsbc ijhp_kk qbkeh 20" ?keb ^Z lh kdhevdh we_f_glh\ fZkkb\Z [m^_l j_Zevghi_j_keZghf_`^mijhp_kkZfb"• KjZ\gblvwnn_dlb\ghklvj_ZebaZpbbjZaebqguo\b^h\i_j_kuehd^Zgguok[ehdbjh\dhcMPI_SEND, MPI_BSEND, MPI_SSEND, MPI_RSENDf_`^m^\mfy\u^_e_ggufbijhp_kkhjZfb• Qlh hagZqZ_l aZ\_jr_gb_ hi_jZpbb ^ey jZaebqguo \b^h\ i_j_kuedb^Zgguok[ehdbjh\dhc"• Hij_^_eblv fZdkbfZevgh ^himklbfmx ^ebgm ihkueZ_fh]h khh[s_gby\^Zgghcj_ZebaZpbbMPI.• J_Zebah\ZlvkdZeyjgh_ijhba\_^_gb_jZkij_^_e_gguof_`^mijhp_kkhjZfb\_dlhjh\• KjZ\gblv wnn_dlb\ghklv j_ZebaZpbb i_j_kuehd ^Zgguo f_`^m ^\mfy\u^_e_ggufbijhp_kkhjZfbk[ehdbjh\dhcb[_a[ehdbjh\db• Hij_^_eblv \hafh`gh eb \ ^Zgghc j_ZebaZpbb MPI kh\f_s_gb_Zkbgojhgguo i_j_kuehd ^Zgguo b \uiheg_gby Zjbnf_lbq_kdbohi_jZpbc• DZd k ihfhsvx ijhp_^mju MPI_TEST kfh^_ebjh\Zlv nmgdpbhgZevghklvijhp_^mjuMPI_WAIT?• < q_f khklhyl jZaebqby \ bkihevah\Zgbb ijhp_^mj MPI_WAITALL,MPI_WAITANY b MPI_WAITSOME" DZd kfh^_ebjh\Zlv bo nmgdpbhgZevghklvijbihfhsbijhp_^mjuMPI_WAIT?• Qlh ijhbahc^_l ijb hkms_kl\e_gbb h[f_gZ ^Zggufb k ijhp_kkhfMPI_PROC_NULL?• J_Zebah\Zlv ijb ihfhsb ihkuedb khh[s_gbc lbiZ lhqdZ-lhqdZke_^mxsb_ko_fudhffmgbdZpbbijhp_kkh\o i_j_^ZqZ^Zgguoihdhevpm^\Z\ZjbZglZwklZn_lgZyiZehqdZhq_j_^ghc ijhp_kk ^h`b^Z_lky khh[s_gby hl ij_^u^ms_]h bihlhfihkueZ_lke_^mxs_fmbk^\b]h^gh\j_f_ggu_ihkuedZbijb_fkhh[s_gbco master-VODYH \k_ ijhp_kku h[sZxlky k h^gbf \u^_e_ggufijhp_kkhfo i_j_kuedZ^ZgguohldZ`^h]hijhp_kkZdZ`^hfm• Bkke_^h\Zlvwnn_dlb\ghklvdhffmgbdZpbhgguoko_fbaij_^u^ms_]haZ^Zgby \ aZ\bkbfhklb hl qbkeZ bkihevah\Zgguo ijhp_kkh\ b h[t_fZi_j_kueZ_fuo^Zgguobamqblv\hafh`ghklbhilbfbaZpbb35• Hij_^_eblv\ub]jurdhlhjucfh`ghihemqblvijbbkihevah\Zgbbhleh`_gguoaZijhkh\gZ\aZbfh^_ckl\b_• KjZ\gblv wnn_dlb\ghklv j_ZebaZpbb nmgdpbb MPI_SENDRECV kfh^_ebjh\Zgb_f lhc `_ nmgdpbhgZevghklb ijb ihfhsb g_[ehdbjmxsbohi_jZpbcDhee_dlb\gu_\aZbfh^_ckl\byijhp_kkh\< hi_jZpbyo dhee_dlb\gh]h \aZbfh^_ckl\by ijhp_kkh\ mqZkl\mxl \k_ ijhp_kku dhffmgbdZlhjZ Khhl\_lkl\mxsZy ijhp_^mjZ ^he`gZ [ulv \ua\ZgZdZ`^uf ijhp_kkhf [ulv fh`_l kh k\hbf gZ[hjhf iZjZf_ljh\ <ha\jZl baijhp_^mju dhee_dlb\gh]h \aZbfh^_ckl\by fh`_l ijhbahclb \ lhl fhf_gldh]^Z mqZklb_ ijhp_kkZ \ ^Zgghc hi_jZpbb m`_ aZdhgq_gh DZd b ^ey[ehdbjmxsbo ijhp_^mj \ha\jZl hagZqZ_l lh qlh jZaj_r_g k\h[h^guc^hklmid[mn_jmijb_fZbebihkuedb:kbgojhgguodhee_dlb\guohi_jZpbc\MPIg_l<dhee_dlb\guohi_jZpbyofh`ghbkihevah\Zlvl_`_dhffmgbdZlhjuqlhb[ueb bkihevah\Zgu ^ey hi_jZpbc lbiZ lhqdZ-lhqdZ MPI ]ZjZglbjm_l qlhkhh[s_gby \ua\Zggu_ dhee_dlb\gufb hi_jZpbyfb gbdZd g_ ih\ebyxl gZ\uiheg_gb_ ^jm]bo hi_jZpbc b g_ i_j_k_dmlky k khh[s_gbyfb ihy\b\rbfbky\j_amevlZl_bg^b\b^mZevgh]h\aZbfh^_ckl\byijhp_kkh\<hh[s_ ]h\hjy g_evay jZkkqblu\Zlv gZ kbgojhgbaZpbx ijhp_kkh\ k ihfhsvx dhee_dlb\guo hi_jZpbc djhf_ ijhp_^mju MPI_BARRIER ?keb dZdhclhijhp_kkaZ\_jrbek\h_mqZklb_\dhee_dlb\ghchi_jZpbblhwlhg_hagZqZ_lgblh]hqlh^ZggZyhi_jZpbyaZ\_jr_gZ^jm]bfbijhp_kkZfbdhffmgbdZlhjZgb^Z`_lh]hqlhhgZbfbgZqZlZ_kebwlh\hafh`ghihkfukemhi_jZpbb).< dhee_dlb\guo hi_jZpbyo g_ bkihevamxlky b^_glbnbdZlhju khh[s_gbcl_]bLZdbfh[jZahfdhee_dlb\gu_hi_jZpbbkljh]hmihjy^hq_gukh]eZkghboihy\e_gbxl_dkl_ijh]jZffuMPI_BARRIER(COMM, IERR)INTEGER COMM, IERRIjhp_^mjZ bkihevam_lky ^ey [Zjv_jghc kbgojhgbaZpbb ijhp_kkh\ JZ[hlZijhp_kkh\ [ehdbjm_lky ^h l_o ihj ihdZ \k_ hklZ\rb_ky ijhp_kkudhffmgbdZlhjZ COMM g_ \uihegyl wlm ijhp_^mjm Lhevdh ihke_ lh]h dZdihke_^gbc ijhp_kk dhffmgbdZlhjZ \uihegbl ^Zggmx ijhp_^mjm \k_ijhp_kku [m^ml jZa[ehdbjh\Zgu b ijh^he`Zl \uiheg_gb_ ^Zevr_ >ZggZyijhp_^mjZ y\ey_lky dhee_dlb\ghc <k_ ijhp_kku ^he`gu \ua\Zlv36MPI_BARRIER ohly j_Zevgh bkiheg_ggu_ \uah\u jZaebqgufb ijhp_kkZfbdhffmgbdZlhjZfh]ml[ulvjZkiheh`_gu\jZaguof_klZoijh]jZffu< ke_^mxs_f ijbf_j_ nmgdpbhgZevghklv ijhp_^mju MPI_BARRIER fh^_ebjm_lky ijb ihfhsb hleh`_gguo aZijhkh\ gZ \aZbfh^_ckl\b_ >eymkj_^g_gby j_amevlZlh\ ijhba\h^blky NTIMES hi_jZpbc h[f_gZ \ jZfdZodZ`^hcbagbo\k_ijhp_kku^he`guihkeZlvkhh[s_gb_ijhp_kkmkghf_jhf0 ihke_ q_]h ihemqblv hl g_]h hl\_lguc kb]gZe hagZqZxsbc qlh \k_ijhp_kku ^hreb ^h wlhc lhqdb \ ijh]jZff_ Bkihevah\Zgb_ hleh`_gguoaZijhkh\ iha\hey_l bgbpbZebabjh\Zlv ihkuedm ^Zgguo lhevdh h^bg jZa ZaZl_f bkihevah\Zlv gZ dZ`^hc bl_jZpbb pbdeZ >Ze__ \j_fy gZfh^_ebjh\Zgb_ kjZ\gb\Z_lky kh \j_f_g_f gZ kbgojhgbaZpbx ijb ihfhsbkZfhcklZg^Zjlghcijhp_^mjuMPI_BARRIER.program example13include 'mpif.h'integer ierr, rank, size, MAXPROC, NTIMES, i, itparameter (MAXPROC = 128, NTIMES = 10000)integer ibuf(MAXPROC)double precision time_start, time_finishinteger req(2*MAXPROC), statuses(MPI_STATUS_SIZE, 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 .eq.
0) thendo i = 1, size-1call MPI_RECV_INIT(ibuf(i), 0, MPI_INTEGER, i, 5,&MPI_COMM_WORLD, req(i), ierr)call MPI_SEND_INIT(rank, 0, MPI_INTEGER, i, 6,&MPI_COMM_WORLD, req(size+i),&ierr)end dotime_start = MPI_WTIME(ierr)do it = 1, NTIMEScall MPI_STARTALL(size-1, req, ierr)call MPI_WAITALL(size-1, req, statuses, ierr)call MPI_STARTALL(size-1, req(size+1), ierr)call MPI_WAITALL(size-1, req(size+1), statuses,&ierr)end doelsecall MPI_RECV_INIT(ibuf(1), 0, MPI_INTEGER, 0, 6,&MPI_COMM_WORLD, req(1), ierr)call MPI_SEND_INIT(rank, 0, MPI_INTEGER, 0, 5,&MPI_COMM_WORLD, req(2), ierr)time_start = MPI_WTIME(ierr)do it = 1, NTIMEScall MPI_START(req(2), ierr)call MPI_WAIT(req(2), statuses, ierr)call MPI_START(req(1), ierr)37call MPI_WAIT(req(1), statuses, ierr)end doend iftime_finish = MPI_WTIME(ierr)-time_startprint *, 'rank = ', rank, ' all time = ',&(time_finish)/NTIMEStime_start = MPI_WTIME(ierr)do it = 1, NTIMEScall MPI_BARRIER(MPI_COMM_WORLD,ierr)enddotime_finish = MPI_WTIME(ierr)-time_startprint *, 'rank = ', rank, ' barrier time = ',&(time_finish)/NTIMEScall MPI_FINALIZE(ierr)endMPI_BCAST(BUF, COUNT, DATATYPE, ROOT, COMM, IERR)<type> BUF(*)INTEGER COUNT, DATATYPE, ROOT, COMM, IERRJZkkuedZCOUNTwe_f_glh\^ZgguolbiZDATATYPEbafZkkb\ZBUFhlijhp_kkZROOT \k_f ijhp_kkZf ^Zggh]h dhffmgbdZlhjZ COMM, \dexqZy kZfjZkkueZxsbcijhp_kkIjb\ha\jZl_baijhp_^mjukh^_j`bfh_[mn_jZ BUFijhp_kkZ ROOT [m^_l kdhibjh\Zgh \ ehdZevguc [mn_j dZ`^h]h ijhp_kkZdhffmgbdZlhjZ COMM AgZq_gby iZjZf_ljh\ COUNT, DATATYPE, ROOT b COMM^he`gu[ulvh^bgZdh\ufbm\k_oijhp_kkh\Ke_^mxsZy ko_fZ beexkljbjm_l ^_ckl\b_ ijhp_^mju MPI_BCAST A^_kvlZd`_ dZd b \ ^Zevg_crbo ko_fZo ih \_jlbdZeb bah[jZ`Zxlky jZagu_ ijhp_kkumqZkl\mxsb_\dhee_dlb\ghchi_jZpbbZih]hjbahglZeb–jZkiheh`_ggu_gZgbo[ehdb^ZgguoGZijbf_j^eylh]hqlh[ui_j_keZlvhlijhp_kkZ 2\k_fhklZevgufijhp_kkZfijbeh`_gbyfZkkb\ bufba 100p_ehqbke_gguowe_f_glh\gm`ghqlh[u\h\k_oijhp_kkZo\klj_lbekyke_^mxsbc\uah\38call MPI_BCAST(buf, 100, MPI_INTEGER,&2, MPI_COMM_WORLD, ierr)MPI_GATHER(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, ROOT, COMM,IERR)<type> SBUF(*), RBUF(*)INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, ROOT, COMM, IERRK[hjdZ SCOUNTwe_f_glh\^ZgguolbiZ STYPEbafZkkb\h\ SBUFkh\k_oijhp_kkh\dhffmgbdZlhjZ COMM\[mn_j_ RBUFijhp_kkZ ROOTDZ`^ucijhp_kk\dexqZy ROOTihkueZ_lkh^_j`bfh_k\h_]h[mn_jZ SBUF ijhp_kkm ROOTKh[bjZxsbcijhp_kkkhojZgy_l^Zggu_\[mn_j_RBUFjZkiheZ]Zybo\ihjy^d_\hajZklZgbyghf_jh\ijhp_kkh\GZijhp_kk_ ROOTkms_kl\_ggufby\eyxlkyagZq_gby\k_oiZjZf_ljh\ZgZhklZevguo ijhp_kkZo — lhevdh agZq_gby iZjZf_ljh\ SBUF, SCOUNT, STYPE,ROOTb COMMAgZq_gbyiZjZf_ljh\ ROOTbCOMM^he`gu[ulvh^bgZdh\ufbm\k_oijhp_kkh\IZjZf_lj RCOUNTmijhp_kkZ ROOTh[hagZqZ_lqbkehwe_f_glh\ lbiZ RTYPE ijbgbfZ_fuo g_ hl \k_o ijhp_kkh\ \ kmff_ Z hl dZ`^h]hijhp_kkZKe_^mxsZyko_fZbeexkljbjm_l^_ckl\b_ijhp_^mjuMPI_GATHER.GZijbf_j^eylh]hqlh[uijhp_kk2kh[jZe\fZkkb\rbufih10p_ehqbke_gguowe_f_glh\fZkkb\h\bufkh\k_oijhp_kkh\ijbeh`_gbygm`ghqlh[u\h\k_oijhp_kkZo\klj_lbekyke_^mxsbc\uah\call MPI_GATHER(buf, 10, MPI_INTEGER,rbuf, 10, MPI_INTEGER,2, MPI_COMM_WORLD, ierr)&&MPI_GATHERV(SBUF, SCOUNT, STYPE, RBUF, RCOUNTS, DISPLS, RTYPE,ROOT, COMM, IERR)<type> SBUF(*), RBUF(*)39INTEGER SCOUNT, STYPE, RCOUNTS(*), DISPLS(*), RTYPE, ROOT, COMM,IERRK[hjdZjZaebqgh]hdhebq_kl\Z^ZgguobafZkkb\h\ SBUFIhjy^hdjZkiheh`_gby^Zgguo\j_amevlbjmxs_f[mn_j_RBUFaZ^Z_lfZkkb\DISPLS.RCOUNTS –p_ehqbke_ggucfZkkb\kh^_j`Zsbcdhebq_kl\hwe_f_glh\i_j_-^Z\Z_fuohldZ`^h]hijhp_kkZbg^_dkjZ\_gjZg]mihkueZxs_]hijhp_kkZjZaf_jfZkkb\ZjZ\_gqbkemijhp_kkh\\dhffmgbdZlhj_COMM).DISPLS – p_ehqbke_gguc fZkkb\ kh^_j`Zsbc kf_s_gby hlghkbl_evgh gZqZeZ fZkkb\Z RBUF bg^_dk jZ\_g jZg]m ihkueZxs_]h ijhp_kkZ jZaf_jfZkkb\ZjZ\_gqbkemijhp_kkh\\dhffmgbdZlhj_COMM).>Zggu_ihkeZggu_ijhp_kkhf J-1jZaf_sZxlky\ J-hf[ehd_[mn_jZ RBUFgZijhp_kk_ROOTdhlhjucgZqbgZ_lkykhkf_s_gb_f\DISPLS(J)we_f_glh\lbiZRTYPEkgZqZeZ[mn_jZMPI_SCATTER(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, ROOT,COMM, IERR)<type> SBUF(*), RBUF(*)INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, ROOT, COMM, IERRIjhp_^mjZ MPI_SCATTER ih k\h_fm ^_ckl\bx y\ey_lky h[jZlghc dMPI_GATHERHgZhkms_kl\ey_ljZkkuedmih SCOUNTwe_f_glh\^ZgguolbiZSTYPEbafZkkb\ZSBUFijhp_kkZROOT\fZkkb\uRBUF\k_oijhp_kkh\dhffmgbdZlhjZ COMM\dexqZykZfijhp_kk ROOTFh`ghkqblZlvqlhfZkkb\ SBUF^_eblkygZjZ\gu_qZklbihqbkemijhp_kkh\dZ`^ZybadhlhjuokhklhblbaSCOUNT we_f_glh\ lbiZ STYPE ihke_ q_]h I-y qZklv ihkueZ_lky I-1)-fmijhp_kkmGZijhp_kk_ ROOTkms_kl\_ggufby\eyxlkyagZq_gby\k_oiZjZf_ljh\ZgZ\k_o hklZevguo ijhp_kkZo — lhevdh agZq_gby iZjZf_ljh\ RBUF, RCOUNT,RTYPE, SOURCE b COMM AgZq_gby iZjZf_ljh\ SOURCE b COMM ^he`gu [ulvh^bgZdh\ufbm\k_oijhp_kkh\Ke_^mxsZyko_fZbeexkljbjm_l^_ckl\b_ijhp_^mjuMPI_SCATTER.40<ke_^mxs_fijbf_j_ijhp_kk 0hij_^_ey_lfZkkb\ sbufihke_q_]hjZkkueZ_l _]h ih h^ghfm klhe[pm \k_f aZims_gguf ijhp_kkZf ijbeh`_gby J_amevlZlgZdZ`^hfijhp_kk_jZkiheZ]Z_lky\fZkkb\_rbuf.1real sbuf(size, size), rbuf(size)if(rank .eq.