Главная » Просмотр файлов » А.С. Антонов - Параллельное программирование с использованием технологии MPI

А.С. Антонов - Параллельное программирование с использованием технологии MPI (1162620), страница 7

Файл №1162620 А.С. Антонов - Параллельное программирование с использованием технологии MPI (А.С. Антонов - Параллельное программирование с использованием технологии MPI) 7 страницаА.С. Антонов - Параллельное программирование с использованием технологии MPI (1162620) страница 72019-09-20СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

0) thendo 1 i = 1, sizedo 1 j = 1, sizesbuf(i, j)=...end ifif (numtasks .eq. size) thencall MPI_SCATTER(sbuf, size, MPI_REAL,&rbuf, size, MPI_REAL,&0, MPI_COMM_WORLD, ierr)end ifMPI_SCATTERV(SBUF, SCOUNTS, DISPLS, STYPE, RBUF, RCOUNT, RTYPE,ROOT, COMM, IERR)<type> SBUF(*), RBUF(*)INTEGER SCOUNTS(*), DISPLS(*), STYPE, RCOUNT, RTYPE, ROOT, COMM,IERRJZkkuedZ jZaebqgh]h dhebq_kl\Z ^Zgguo ba fZkkb\Z SBUF GZqZeh ihjpbcjZkkueZ_fuo^ZgguoaZ^Z_lfZkkb\DISPLS.SCOUNTS –p_ehqbke_ggucfZkkb\kh^_j`Zsbcdhebq_kl\hwe_f_glh\i_j_-^Z\Z_fuo dZ`^hfm ijhp_kkm bg^_dk jZ\_g jZg]m Z^j_kZlZ ^ebgZ jZ\gZqbkemijhp_kkh\\dhffmgbdZlhj_COMM).DISPLS – p_ehqbke_gguc fZkkb\ kh^_j`Zsbc kf_s_gby hlghkbl_evgh gZqZeZfZkkb\Z SBUFbg^_dkjZ\_gjZg]mZ^j_kZlZ^ebgZjZ\gZqbkemijhp_kkh\\dhffmgbdZlhj_COMM).>Zggu_ihkueZ_fu_ijhp_kkhfROOTijhp_kkmJ-1jZaf_s_gu\J-hf[ehd_[mn_jZSBUFdhlhjucgZqbgZ_lkykhkf_s_gb_f\DISPLS(J)we_f_glh\lbiZSTYPEkgZqZeZ[mn_jZSBUF.41MPI_ALLGATHER(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, COMM,IERR)<type> SBUF(*), RBUF(*)INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, COMM, IERRK[hjdZ ^Zgguo ba fZkkb\h\ SBUF kh \k_o ijhp_kkh\ dhffmgbdZlhjZ COMM \[mn_j_ RBUFdZ`^h]hijhp_kkZ>Zggu_khojZgyxlky\ihjy^d_\hajZklZgbyghf_jh\ijhp_kkh\;ehd^ZgguoihkeZggucijhp_kkhf J-1jZaf_sZ_lky\J-hf[ehd_[mn_jZRBUFijbgbfZxs_]hijhp_kkZHi_jZpbxfh`ghjZkkfZljb\ZlvdZd MPI_GATHERijbdhlhjhcj_amevlZlihemqZ_lkygZ\k_oijhp_kkZodhffmgbdZlhjZCOMM.Ke_^mxsZyko_fZbeexkljbjm_l^_ckl\b_ijhp_^mjuMPI_ALLGATHER.MPI_ALLGATHERV(SBUF, SCOUNT, STYPE, RBUF, RCOUNTS, DISPLS,RTYPE, COMM, IERR)<type> SBUF(*), RBUF(*)INTEGER SCOUNT, STYPE, RCOUNTS(*), DISPLS(*), RTYPE, COMM, IERRK[hjdZ gZ \k_o ijhp_kkZo dhffmgbdZlhjZ COMM jZaebqgh]h dhebq_kl\Z ^ZgguobafZkkb\h\ SBUFIhjy^hdjZkiheh`_gby^Zgguo\fZkkb\_RBUFaZ^Z_lfZkkb\DISPLS.MPI_ALLTOALL(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, COMM,IERR)<type> SBUF(*), RBUF(*)INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, COMM, IERRJZkkuedZdZ`^ufijhp_kkhfdhffmgbdZlhjZCOMMjZaebqguoihjpbc^Zgguo\k_f^jm]bfijhp_kkZf J-c[ehd^Zgguo[mn_jZ SBUF (I-1)-]hijhp_kkZihiZ^Z_l\I-c[ehd^Zgguo[mn_jZRBUF (J-1)-]hijhp_kkZKe_^mxsZyko_fZbeexkljbjm_l^_ckl\b_ijhp_^mjuMPI_ALLTOALL.42MPI_ALLTOALLV(SBUF, SCOUNTS, SDISPLS, STYPE, RBUF, RCOUNTS,RDISPLS, RTYPE, COMM, IERR)<type> SBUF(*), RBUF(*)INTEGER SCOUNTS(*), SDISPLS(*), STYPE, RCOUNTS(*), RDISPLS(*),RTYPE, COMM, IERRJZkkuedZ kh \k_o ijhp_kkh\ dhffmgbdZlhjZ COMM jZaebqgh]h dhebq_kl\Z^Zgguo \k_f ijhp_kkZf ^Zggh]h dhffmgbdZlhjZ JZaf_s_gb_ ^Zgguo \ [mn_j_ SBUFhlkueZxs_]hijhp_kkZhij_^_ey_lkyfZkkb\hf SDISPLSZjZaf_s_gb_ ^Zgguo \ [mn_j_ RBUF ijbgbfZxs_]h ijhp_kkZ hij_^_ey_lky fZkkb\hfRDISPLS.MPI_REDUCE(SBUF, RBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERR)<type> SBUF(*), RBUF(*)INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERR<uiheg_gb_ COUNT g_aZ\bkbfuo ]eh[Zevguo hi_jZpbc OP gZ^ khhl\_lkl\mxsbfbwe_f_glZfbfZkkb\h\SBUFJ_amevlZl\uiheg_gbyhi_jZpbbOPgZ^I-fbwe_f_glZfbfZkkb\h\SBUF\k_oijhp_kkh\dhffmgbdZlhjZCOMMihemqZ_lky\I-hfwe_f_gl_fZkkb\ZRBUFijhp_kkZROOT.<MPIij_^mkfhlj_gjy^ij_^hij_^_e_gguo]eh[Zevguohi_jZpbchgbaZ^Zxlkyke_^mxsbfbdhgklZglZfb• MPI_MAX, MPI_MIN – hij_^_e_gb_ fZdkbfZevgh]h b fbgbfZevgh]hagZq_gby• MPI_MINLOC, MPI_MAXLOC– hij_^_e_gb_ fZdkbfZevgh]h b fbgbfZevgh]hagZq_gbybbof_klhiheh`_gby• MPI_SUM, MPI_PROD – \uqbke_gb_ ]eh[Zevghc kmffu b ]eh[Zevgh]hijhba\_^_gby• MPI_LAND, MPI_LOR, MPI_LXOR –eh]bq_kdb_³B´³BEB´bkdexqZxs__³BEB´• MPI_BAND, MPI_BOR, MPI_BXOR –ih[blh\u_³B´³BEB´bkdexqZxs__³BEB´43Djhf_lh]hijh]jZffbklfh`_laZ^Zlvk\hxnmgdpbx^ey\uiheg_gby]eh[Zevghchi_jZpbbijbihfhsbijhp_^mjuMPI_OP_CREATE.< ke_^mxs_f ijbf_j_ hi_jZpby ]eh[Zevgh]h kmffbjh\Zgby fh^_ebjm_lkyijb ihfhsb ko_fu k^\Zb\Zgby k bkihevah\Zgb_f i_j_kuehd ^Zgguo lbiZlhqdZ-lhqdZWnn_dlb\ghklvlZdh]hfh^_ebjh\ZgbykjZ\gb\Z_lkykbkihevah\Zgb_fdhee_dlb\ghchi_jZpbbMPI_REDUCE.program example14include 'mpif.h'integer ierr, rank, i, size, n, nprocparameter (n = 1 000 000)double precision time_start, time_finishdouble precision a(n), b(n), c(n)integer status(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)nproc = sizedo i = 1, na(i) = 1.d0/sizeend docall MPI_BARRIER(MPI_COMM_WORLD, ierr)time_start = MPI_WTIME(ierr)do i = 1, nc(i) = a(i)end dodo while (nproc .gt.

1)if(rank .lt. nproc/2) thencall MPI_RECV(b, n, MPI_DOUBLE_PRECISION,&nproc-rank-1, 1, MPI_COMM_WORLD,&status, ierr)do i = 1, nc(i) = c(i) + b(i)end doelse if(rank .lt. nproc) thencall MPI_SEND(c, n, MPI_DOUBLE_PRECISION,&nproc-rank-1, 1, MPI_COMM_WORLD, ierr)end ifnproc = nproc/2end dodo i = 1, nb(i) = c(i)end dotime_finish = MPI_WTIME(ierr)-time_startif(rank .eq. 0) print *, 'model b(1)=', b(1)print *, 'rank=', rank, ' model time =', time_finishdo i = 1, na(i) = 1.d0/sizeend docall MPI_BARRIER(MPI_COMM_WORLD, ierr)44time_start = MPI_WTIME(ierr)call MPI_REDUCE(a, b, n, MPI_DOUBLE_PRECISION, MPI_SUM, 0,&MPI_COMM_WORLD, ierr)time_finish = MPI_WTIME(ierr)-time_startif(rank .eq.

0) print *, 'reduce b(1)=', b(1)print *, 'rank=', rank, ' reduce time =', time_finishcall MPI_FINALIZE(ierr)endMPI_ALLREDUCE(SBUF, RBUF, COUNT, DATATYPE, OP, COMM, IERR)<type> SBUF(*), RBUF(*)INTEGER COUNT, DATATYPE, OP, COMM, IERR<uiheg_gb_ COUNT g_aZ\bkbfuo ]eh[Zevguo hi_jZpbc OP gZ^ khhl\_lkl\mxsbfb we_f_glZfb fZkkb\h\ SBUF Hlebqb_ hl ijhp_^mju MPI_REDUCE \lhfqlhj_amevlZlihemqZ_lky\fZkkb\_RBUFdZ`^h]hijhp_kkZ< ke_^mxs_f ijbf_j_ dZ`^uc ijhp_kk \uqbkey_l ihkljhqgu_ kmffu we_f_glh\ehdZevgh]hfZkkb\Z aihke_q_]hihemq_ggu_kmffukh\k_oijhp_kkh\kdeZ^u\Zxlkyijbihfhsbijhp_^mjuMPI_ALLREDUCEbj_amevlZlihemqZ_lky\fZkkb\_rgZ\k_oijhp_kkZoijbeh`_gbydo i = 1, ns(i) = 0.0end dodo i = 1, ndo j = 1, ms(i) = s(i)+a(i, j)end doend docall MPI_ALLREDUCE(s, r, n, MPI_REAL, MPI_SUM,&MPI_COMM_WORLD, IERR)MPI_REDUCE_SCATTER(SBUF, RBUF, RCOUNTS, DATATYPE, OP, COMM,IERR)<type> SBUF(*), RBUF(*)INTEGER RCOUNTS(*), DATATYPE, OP, COMM, IERR<uiheg_gb_™I RCOUNTS(I)g_aZ\bkbfuo]eh[Zevguohi_jZpbc OPgZ^khhl\_lkl\mxsbfbwe_f_glZfbfZkkb\h\SBUFNmgdpbhgZevghwlhwd\b\Ze_glghlhfm qlh kgZqZeZ \uihegyxlky ]eh[Zevgu_ hi_jZpbb aZl_f j_amevlZl jZkkueZ_lky ih ijhp_kkZf I-uc ijhp_kk ihemqZ_l (I+1)-mx ihjpbx j_amevlZlh\ba RCOUNTS(I+1)we_f_glh\bihf_sZ_l\fZkkb\ RBUFFZkkb\ RCOUNTS^he`_g[ulvh^bgZdh\ufgZ\k_oijhp_kkZodhffmgbdZlhjZCOMM.45MPI_SCAN(SBUF, RBUF, COUNT, DATATYPE, OP, COMM, IERR)<type> SBUF(*), RBUF(*)INTEGER COUNT, DATATYPE, OP, COMM, IERR<uiheg_gb_ COUNTg_aZ\bkbfuoqZklbqguo]eh[Zevguohi_jZpbc OPgZ^khhl\_lkl\mxsbfbwe_f_glZfbfZkkb\h\ SBUF.

I-ucijhp_kk\uihegy_l COUNT]eh[Zevguohi_jZpbcgZ^khhl\_lkl\mxsbfbwe_f_glZfbfZkkb\Z SBUFijhp_kkh\kghf_jZfbhl 0^h I\dexqbl_evghbihf_sZ_lihemq_ggucj_amevlZl\fZkkb\RBUFIhegucj_amevlZl]eh[Zevghchi_jZpbbihemqZ_lky\fZkkb\_RBUFihke_^g_]hijhp_kkZMPI_OP_CREATE(FUNC, COMMUTE, OP, IERR)EXTERNAL FUNCLOGICAL COMMUTEINTEGER OP, IERRKha^Zgb_ ihevah\Zl_evkdhc ]eh[Zevghc hi_jZpbb OP dhlhjZy [m^_l \uqbkeylvkynmgdpb_c FUNCKha^Z\Z_fZyhi_jZpby^he`gZ[ulvZkkhpbZlb\ghcZ_kebiZjZf_lj COMMUTEjZ\_g .TRUE.lhhgZ^he`gZ[ulvlZd`_bdhffmlZlb\ghc ?keb iZjZf_lj COMMUTE jZ\_g .FALSE.

lh ihjy^hd \uiheg_gby]eh[Zevghc hi_jZpbb kljh]h nbdkbjm_lky kh]eZkgh m\_ebq_gbx ghf_jh\ijhp_kkh\gZqbgZykijhp_kkZkghf_jhf0.FUNCTION FUNC(INVEC(*), INOUTVEC(*), LEN, TYPE)<type> INVEC(LEN), INOUTVEC(LEN)INTEGER LEN, TYPELZdbfh[jZahfaZ^Z_lkybgl_jn_ckihevah\Zl_evkdhcnmgdpbb^eykha^Zgby]eh[Zevghc hi_jZpbb I_j\uc Zj]mf_gl hi_jZpbb [_j_lky ba iZjZf_ljZINVEC\lhjhcZj]mf_gl–baiZjZf_ljZINOUTVECZj_amevlZl\ha\jZsZ_lky\iZjZf_lj_ INOUTVECIZjZf_lj LENaZ^Z_ldhebq_kl\hwe_f_glh\\oh^gh]hb\uoh^gh]hfZkkb\h\ZiZjZf_lj TYPE –lbi\oh^guob\uoh^guo^Zgguo<ihevah\Zl_evkdhc nmgdpbb g_ ^he`gu ijhba\h^blvky gbdZdb_ h[f_gu^Zggufbkbkihevah\Zgb_f\uah\h\ijhp_^mjMPI.MPI_OP_FREE(OP, IERR)INTEGER OP, IERRMgbqlh`_gb_ ihevah\Zl_evkdhc ]eh[Zevghc hi_jZpbb Ih \uiheg_gbb ijhp_^mjui_j_f_gghcOPijbk\Zb\Z_lkyagZq_gb_MPI_OP_NULL.Ke_^mxsbc ijbf_j ^_fhgkljbjm_l aZ^Zgb_ ihevah\Zl_evkdhc nmgdpbb ^eybkihevah\Zgby \ dZq_kl\_ ]eh[Zevghc hi_jZpbb AZ^Z_lky nmgdpby smod5,\uqbkeyxsZy ihwe_f_glgmx kmffm ih fh^mex 5 \_dlhjh\ p_ehqbke_gguoZj]mf_glh\>ZggZynmgdpbyh[ty\ey_lky\dZq_kl\_]eh[Zevghchi_jZpbbop\ \uah\_ ijhp_^mju MPI_OP_CREATE aZl_f bkihevam_lky \ ijhp_^mj_MPI_REDUCE ihke_ q_]h m^Zey_lky k ihfhsvx \uah\Z ijhp_^mjuMPI_OP_FREE.program example1546include 'mpif.h'integer ierr, rank, i, nparameter (n = 1 000)integer a(n), b(n)integer opexternal smod5call MPI_INIT(ierr)call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)do i = 1, na(i) = i + rankend doprint *, 'process ', rank, ' a(1) =', a(1)call MPI_OP_CREATE(smod5, .TRUE., op, ierr)call MPI_REDUCE(a, b, n, MPI_INTEGER, op, 0,&MPI_COMM_WORLD, ierr)call MPI_OP_FREE(op, ierr)if(rank .eq.

0) print *, ' b(1) =', b(1)call MPI_FINALIZE(ierr)endinteger function smod5(in, inout, l, type)integer l, typeinteger in(l), inout(l), ido i = 1, linout(i) = mod(in(i)+inout(i), 5)end doreturnendAZ^Zgby• Q_f dhee_dlb\gu_ hi_jZpbb hlebqZxlky hl \aZbfh^_ckl\bc lbiZlhqdZ-lhqdZ"• <_jgh eb qlh \ dhee_dlb\guo \aZbfh^_ckl\byo mqZkl\mxl \k_ ijhp_kkuijbeh`_gby?• Fh]mleb\hagbdZlvdhgnebdluf_`^mh[uqgufbkhh[s_gbyfbihkueZ_fufbijhp_kkZfb^jm]^jm]mbkhh[s_gbyfbdhee_dlb\guohi_jZpbc"?keb^ZdZdhgbjZaj_rZxlky"• Fh`gh eb ijb ihfhsb ijhp_^mju MPI_RECV ijbgylv khh[s_gb_ ihkeZggh_ijhp_^mjhcMPI_BCAST?• Kfh^_ebjh\Zlv [Zjv_jgmx kbgojhgbaZpbx ijb ihfhsb i_j_kuehdlhqdZ-lhqdZbkjZ\gblvwnn_dlb\ghklvlZdhcj_ZebaZpbbbklZg^Zjlghcijhp_^mjuMPI_BARRIER.• < q_f jZaebqb_ \ nmgdpbhgZevghklb ijhp_^mj MPI_BCAST bMPI_SCATTER?• Kfh^_ebjh\Zlv]eh[Zevgh_kmffbjh\Zgb_f_lh^hfk^\Zb\ZgbybkjZ\gblv wnn_dlb\ghklv lZdhc j_ZebaZpbb k bkihevah\Zgb_f klZg^Zjlghcijhp_^mjuMPI_REDUCE.47• Kfh^_ebjh\Zlv ijhp_^mjm MPI_ALLREDUCE ijb ihfhsb ijhp_^mjMPI_REDUCEbMPI_BCAST.• GZibrbl_k\hc\ZjbZglijhp_^mjuMPI_GATHERbkihevamynmgdpbbihkuedbkhh[s_gbclbiZlhqdZ-lhqdZ• Ih^mfZcl_ dZd hj]Zgbah\Zlv dhee_dlb\guc Zkbgojhgguc h[f_g ^ZggufbZgZeh]bqgucnmgdpbbZMPI_REDUCE[MPI_ALLTOALL.• Bkke_^h\Zlv fZkrlZ[bjm_fhklv aZ\bkbfhklv \j_f_gb \uiheg_gby hlqbkeZ ijhp_kkh\ jZaebqguo dhee_dlb\guo hi_jZpbc gZ dhgdj_lghckbkl_f_=jmiiubdhffmgbdZlhju< MPI kms_kl\mxl rbjhdb_ \hafh`ghklb ^ey hi_jZpbc gZ^ ]jmiiZfb ijhp_kkh\bdhffmgbdZlhjZfbWlh[u\Z_lg_h[oh^bfh\h-i_j\uoqlh[u^Zlv\hafh`ghklv g_dhlhjhc ]jmii_ ijhp_kkh\ jZ[hlZlv gZ^ k\h_c g_aZ\bkbfhcih^aZ^Zq_c<h-\lhjuo_kebhkh[_gghklvZe]hjblfZlZdh\ZqlhlhevdhqZklvijhp_kkh\ ^he`gZ h[f_gb\Zlvky ^Zggufb [u\Z_l m^h[gh aZ\_klb ^ey bo\aZbfh^_ckl\by hl^_evguc dhffmgbdZlhj <-lj_lvbo ijb kha^Zgbb[b[ebhl_d ih^ijh]jZff gm`gh ]ZjZglbjh\Zlv qlh i_j_kuedb ^Zgguo \[b[ebhl_qguofh^meyog_i_j_k_dmlkyki_j_kuedZfb\hkgh\ghcijh]jZff_J_r_gb_wlboaZ^Zqfh`ghh[_ki_qblv\iheghfh[t_f_lhevdhijbihfhsbkha^Zgbygh\h]hg_aZ\bkbfh]hdhffmgbdZlhjZHi_jZpbbk]jmiiZfbijhp_kkh\=jmiiZ – wlh mihjy^hq_ggh_ fgh`_kl\h ijhp_kkh\ DZ`^hfm ijhp_kkm \]jmii_ khihklZ\e_gh p_eh_ qbkeh – jZg] beb ghf_j.

MPI_GROUP_EMPTY –imklZy ]jmiiZ g_ kh^_j`ZsZy gb h^gh]h ijhp_kkZ MPI_GROUP_NULL –agZq_gb_bkihevam_fh_^eyhrb[hqghc]jmiiuGh\u_]jmiiufh`ghkha^Z\ZlvdZdgZhkgh\_m`_kms_kl\mxsbo]jmiilZdb gZ hkgh\_ dhffmgbdZlhjh\ gh \ hi_jZpbyo h[f_gZ fh]ml bkihevah\ZlvkylhevdhdhffmgbdZlhju;Zah\Zy]jmiiZbadhlhjhckha^Zxlky\k_hklZevgu_]jmiiuijhp_kkh\k\yaZgZkdhffmgbdZlhjhf MPI_COMM_WORLD\g__\oh^yl\k_ ijhp_kku ijbeh`_gby Hi_jZpbb gZ^ ]jmiiZfb ijhp_kkh\ y\eyxlky ehdZevgufb\gbo\h\e_dZ_lkylhevdh\ua\Z\rbcijhp_^mjmijhp_kkZ\uiheg_gb_ g_ lj_[m_l f_`ijhp_kkgh]h h[f_gZ ^Zggufb Ex[hc ijhp_kk fh`_lijhba\h^blv hi_jZpbb gZ^ ex[ufb ]jmiiZfb \ lhf qbke_ gZ^ lZdbfbdhlhju_ g_ kh^_j`Zl ^Zgguc ijhp_kk Ijb hi_jZpbyo gZ^ ]jmiiZfb fh`_lihemqblvkyimklZy]jmiiZMPI_GROUP_EMPTY.48MPI_COMM_GROUP(COMM, GROUP, IERR)INTEGER COMM, GROUP, IERRIhemq_gb_ ]jmiiu GROUP khhl\_lkl\mxs_c dhffmgbdZlhjm COMM < yaud_KbiZjZf_lj GROUPbf__lij_^hij_^_e_gguclbi MPI_GroupIhkdhevdmba-gZqZevghkms_kl\m_l _^bgkl\_gguc g_ljb\bZevguc dhffmgbdZlhjMPI_COMM_WORLD kgZqZeZ gm`gh ihemqblv khhl\_lkl\mxsmx _fm ]jmiimijhp_kkh\Wlhfh`ghk^_eZlvijbihfhsbke_^mxs_]h\uah\Zcall MPI_COMM_GROUP(MPI_COMM_WORLD, group, ierr)MPI_GROUP_INCL(GROUP, N, RANKS, NEWGROUP, IERR)INTEGER GROUP, N, RANKS(*), NEWGROUP, IERRKha^Zgb_]jmiiu NEWGROUPba Nijhp_kkh\ij_`g_c]jmiiu GROUPkjZg]ZfbRANKS(1),…,RANKS(N) ijbq_f jZg]m RANKS(I) \ klZjhc ]jmii_ khhl\_lkl\m_l jZg] I-1 \ gh\hc ]jmii_ Ijb N=0 kha^Z_lky imklZy ]jmiiZMPI_GROUP_EMPTY<hafh`ghbkihevah\Zgb_wlhcijhp_^mju^eyaZ^Zgbygh-\h]hihjy^dZijhp_kkh\\]jmii_MPI_GROUP_EXCL(GROUP, N, RANKS, NEWGROUP, IERR)INTEGER GROUP, N, RANKS(*), NEWGROUP, IERRKha^Zgb_]jmiiu NEWGROUPbaijhp_kkh\]jmiiu GROUPbkdexqZyijhp_kkuk jZg]Zfb RANKS(1),…,RANKS(N) ijbq_f ihjy^hd hklZ\rboky ijhp_kkh\ \gh\hc ]jmii_ khhl\_lkl\m_l ihjy^dm ijhp_kkh\ \ klZjhc ]jmii_ Ijb N=0kha^Z_lky]jmiiZb^_glbqgZyklZjhc]jmii_< ke_^mxs_f ijbf_j_ kha^Z_lky ^\_ g_i_j_k_dZxsboky ]jmiiu ijhp_kkh\group1b group2gZhkgh\_ijhp_kkh\]jmiiu group<dZ`^mxbakha^Z\Z_fuo ]jmii \hc^_l ijbf_jgh iheh\bgZ ijhp_kkh\ ij_`g_c ]jmiiu ijb g_q_lghf qbke_ ijhp_kkh\ \ ]jmiim group2 \hc^_l gZ h^bg ijhp_kk [hevr_Ihjy^hdgmf_jZpbbijhp_kkh\\h\gh\vkha^Z\Z_fuo]jmiiZokhojZgblkysize1 = size/2do i = 1, size1ranks(i) = i-1enddocall MPI_GROUP_INCL(group, size1, ranks, group1, ierr)call MPI_GROUP_EXCL(group, size1, ranks, group2, ierr)Ke_^mxsb_ ljb ijhp_^mju hij_^_eyxl hi_jZpbb gZ^ ]jmiiZfb ijhp_kkh\dZd gZ^fgh`_kl\ZfbBa-aZhkh[_gghkl_cgmf_jZpbbijhp_kkh\gbh[t_^bg_gb_gbi_j_k_q_gb_]jmiig_dhffmlZlb\gughZkkhpbZlb\guMPI_GROUP_INTERSECTION(GROUP1, GROUP2, NEWGROUP, IERR)INTEGER GROUP1, GROUP2, NEWGROUP, IERRKha^Zgb_ ]jmiiu NEWGROUP ba i_j_k_q_gby ]jmii GROUP1 b GROUP2 Ihemq_ggZy ]jmiiZ kh^_j`bl \k_ ijhp_kku ]jmiiu GROUP1 \oh^ysb_ lZd`_ \]jmiimGROUP2bmihjy^hq_ggu_dZd\i_j\hc]jmii_49MPI_GROUP_UNION(GROUP1, GROUP2, NEWGROUP, IERR)INTEGER GROUP1, GROUP2, NEWGROUP, IERRKha^Zgb_ ]jmiiu NEWGROUP ba h[t_^bg_gby ]jmii GROUP1 b GROUP2 Ihemq_ggZy]jmiiZkh^_j`bl\k_ijhp_kku]jmiiu GROUP1\ij_`g_fihjy^d_aZdhlhjufbke_^mxlijhp_kku]jmiiu GROUP2g_\hr_^rb_\]jmiim GROUP1,lZd`_\ij_`g_fihjy^d_MPI_GROUP_DIFFERENCE(GROUP1, GROUP2, NEWGROUP, IERR)INTEGER GROUP1, GROUP2, NEWGROUP, IERRKha^Zgb_]jmiiu NEWGROUPbajZaghklb]jmii GROUP1b GROUP2Ihemq_ggZy]jmiiZkh^_j`bl\k_we_f_glu]jmiiuGROUP1g_\oh^ysb_\]jmiimGROUP2bmihjy^hq_ggu_dZd\i_j\hc]jmii_GZijbf_jimklv\]jmiim gr1\oh^ylijhp_kku 0, 1, 2, 4, 5Z\]jmiim gr2 ijhp_kku 0, 2, 3 gmf_jZpby ijhp_kkh\ aZ^ZgZ \ ]jmii_ khhl\_lkl\mxs_cdhffmgbdZlhjmMPI_COMM_WORLDLh]^Zihke_\uah\h\call MPI_GROUP_INTERSECTION(gr1, gr2, newgr1, ierr)call MPI_GROUP_UNION(gr1, gr2, newgr2, ierr)call MPI_GROUP_DIFFERENCE(gr1, gr2, newgr3, ierr)\]jmiimnewgr1\oh^ylijhp_kku0, 2;\]jmiimnewgr2\oh^ylijhp_kku0, 1, 2, 4, 5, 3;\]jmiimnewgr3\oh^ylijhp_kku1, 4, 5.Ihjy^hdgmf_jZpbbijhp_kkh\\ihemq_gguo]jmiiZokhhl\_lkl\m_lihjy^dmboi_j_qbke_gbyMPI_GROUP_SIZE(GROUP, SIZE, IERR)INTEGER GROUP, SIZE, IERRHij_^_e_gb_dhebq_kl\ZSIZEijhp_kkh\\]jmii_GROUP.MPI_GROUP_RANK(GROUP, RANK, IERR)INTEGER GROUP, RANK, IERRHij_^_e_gb_ghf_jZijhp_kkZRANK\]jmii_GROUP?keb\ua\Z\rbcijhp_kkg_\oh^bl\]jmiimGROUPlh\ha\jZsZ_lkyagZq_gb_MPI_UNDEFINED.MPI_GROUP_TRANSLATE_RANKS(GROUP1, N, RANKS1, GROUP2, RANKS2,IERR)INTEGER GROUP1, N, RANKS1(*), GROUP2, RANKS2(*), IERR<fZkkb\_ RANKS2\ha\jZsZxlkyjZg]b\]jmii_ GROUP2ijhp_kkh\kjZg]ZfbRANKS1 \ ]jmii_ GROUP1 IZjZf_lj N aZ^Z_l qbkeh ijhp_kkh\ ^ey dhlhjuogm`ghhij_^_eblvjZg]bMPI_GROUP_COMPARE(GROUP1, GROUP2, RESULT, IERR)INTEGER GROUP1, GROUP2, RESULT, IERR50KjZ\g_gb_]jmiiGROUP1bGROUP2?keb]jmiiuGROUP1bGROUP2iheghklvxkh\iZ^Zxl lh \ iZjZf_lj_ RESULT \ha\jZsZ_lky agZq_gb_ MPI_IDENT ?keb]jmiiu hlebqZxlky lhevdh jZg]Zfb ijhp_kkh\ lh \ha\jZsZ_lky agZq_gb_MPI_SIMILARBgZq_\ha\jZsZ_lkyagZq_gb_MPI_UNEQUAL.MPI_GROUP_FREE(GROUP, IERR)INTEGER GROUP, IERRMgbqlh`_gb_ ]jmiiu GROUP.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6461
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее