Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

mpibook_Antonov

.pdf
Скачиваний:
10
Добавлен:
23.02.2015
Размер:
402.03 Кб
Скачать

MPI_START(REQUEST, IERR) INTEGER REQUEST, IERR

BgbpbZebaZpby hleh`_ggh]h aZijhkZ gZ \uiheg_gb_ hi_jZpbb h[f_gZ khhl- \_lkl\mxs_c agZq_gbx iZjZf_ljZ REQUEST Hi_jZpby aZimkdZ_lky dZd g_- [ehdbjmxsZy

MPI_STARTALL(COUNT, REQUESTS, IERR) INTEGER COUNT, REQUESTS, IERR

BgbpbZebaZpby COUNT hleh`_gguo aZijhkh\ gZ \uiheg_gb_ hi_jZpbc h[- f_gZ khhl\_lkl\mxsbo agZq_gbyf i_j\uo COUNT we_f_glh\ fZkkb\Z REQUESTS Hi_jZpbb aZimkdZxlky dZd g_[ehdbjmxsb_

< hlebqb_ hl g_[ehdbjmxsbo hi_jZpbc ih aZ\_jr_gbb \uiheg_gby hi_jZpbb aZims_gghc ijb ihfhsb hleh`_ggh]h aZijhkZ gZ \aZbfh^_ckl\b_ agZq_gb_ iZjZf_ljZ REQUEST (REQUESTS khojZgy_lky b fh`_l bkihevah\Zlvky \ ^Zevg_cr_f

MPI_REQUEST_FREE(REQUEST, IERR) INTEGER REQUEST, IERR

>ZggZy ijhp_^mjZ m^Zey_l kljmdlmju ^Zgguo k\yaZggu_ k iZjZf_ljhf REQUEST Ihke_ __ \uiheg_gby iZjZf_lj REQUEST mklZgZ\eb\Z_lky \ agZq_gb_ MPI_REQUEST_NULL ?keb hi_jZpby k\yaZggZy k wlbf aZijhkhf m`_ \uihegy_lky lh hgZ [m^_l aZ\_jr_gZ

< ke_^mxs_f ijbf_j_ bgbpbZebabjmxlky hleh`_ggu_ aZijhku gZ hi_jZpbb ^\mgZijZ\e_ggh]h h[f_gZ k khk_^gbfb ijhp_kkZfb \ dhevp_\hc lhiheh]bb KZfb hi_jZpbb aZimkdZxlky gZ dZ`^hc bl_jZpbb ihke_^mxs_]h pbdeZ Ih aZ\_jr_gbb pbdeZ hleh`_ggu_ aZijhku m^Zeyxlky

 

prev = rank - 1

 

next = rank + 1

 

if(rank .eq. 0) prev = size - 1

 

if(rank .eq. size - 1) next = 0

 

call MPI_RECV_INIT(rbuf(1), 1, MPI_REAL, prev, 5,

&

MPI_COMM_WORLD, reqs(1), ierr)

 

call MPI_RECV_INIT(rbuf(2), 1, MPI_REAL, next, 6,

&

MPI_COMM_WORLD, reqs(2), ierr)

 

call MPI_SEND_INIT(sbuf(1), 1, MPI_REAL, prev, 6,

&

MPI_COMM_WORLD, reqs(3), ierr)

 

call MPI_SEND_INIT(sbuf(2), 1, MPI_REAL, next, 5,

&

MPI_COMM_WORLD, reqs(4), ierr)

 

do i=...

 

sbuf(1)=...

 

sbuf(2)=...

 

call MPI_STARTALL(4, reqs, ierr)

 

...

 

call MPI_WAITALL(4, reqs, stats, ierr);

 

...

 

end do

31

call MPI_REQUEST_FREE(reqs(1), ierr) call MPI_REQUEST_FREE(reqs(2), ierr) call MPI_REQUEST_FREE(reqs(3), ierr) call MPI_REQUEST_FREE(reqs(4), ierr)

Lmibdh\u_ kblmZpbb GHDGORFN

Bkihevah\Zgb_ [ehdbjmxsbo ijhp_^mj ijb_fZ b ihkuedb k\yaZgh k \hafh`- guf \hagbdgh\_gb_f lmibdh\hc kblmZpbb Ij_^iheh`bf qlh jZ[hlZxl ^\Z iZjZee_evguo ijhp_kkZ b hgb ^he`gu h[f_gylvky ^Zggufb ;ueh [u \iheg_ _kl_kl\_ggh \ dZ`^hf ijhp_kk_ kgZqZeZ \hkihevah\Zlvky ijhp_^mjhc MPI_SEND Z aZl_f ijhp_^mjhc MPI_RECV. Gh bf_ggh wlh]h b g_ klhbl ^_eZlv >_eh \ lhf qlh fu aZjZg__ g_ agZ_f dZd j_Zebah\ZgZ ijhp_^mjZ MPI_SEND. ?keb jZajZ[hlqbdb ^ey ]ZjZglbb dhjj_dlgh]h ih\lhjgh]h bkihevah\Zgby [mn_jZ ihkuedb aZeh`beb ko_fm ijb dhlhjhc ihkueZxsbc ijhp_kk `^_l gZqZeZ ijb_fZ lh \hagbdg_l deZkkbq_kdbc lmibd I_j\uc ijhp_kk g_ fh`_l \_jgmlvky ba ijhp_^mju ihkuedb ihkdhevdm \lhjhc g_ gZqbgZ_l ijb_f khh[s_gby : \lhjhc ijhp_kk g_ fh`_l gZqZlv ijb_f khh[s_gby ihkdhevdm kZf ih ihoh`_c ijbqbg_ aZkljye gZ ihkued_

?s_ om`_ kblmZpby dh]^Z h[Z ijhp_kkZ kgZqZeZ ihiZ^Zxl gZ [ehdbjmxsmx ijhp_^mjm ijb_fZ MPI_RECV Z ebrv aZl_f gZ ihkuedm ^Zgguo < lZdhf kemqZ_ lmibd \hagbdg_l g_aZ\bkbfh hl kihkh[Z j_ZebaZpbb ijhp_^mj ijb_fZ b ihkuedb ^Zgguo

ijhp_kk 0:

ijhp_kk 1:

 

 

 

 

MPI_RECV hl ijhp_kkZ

MPI_RECV hl ijhp_kkZ

<hagbdZ_l lmibd

MPI_SEND ijhp_kkm

MPI_SEND ijhp_kkm

 

 

 

 

 

 

 

ijhp_kk 0:

ijhp_kk 1:

Fh`_l

 

 

 

MPI_SEND ijhp_kkm

MPI_SEND ijhp_kkm

\hagbdgmlv

MPI_RECV hl ijhp_kkZ

MPI_RECV hl ijhp_kkZ

lmibd

 

 

JZkkfhljbf jZaebqgu_ kihkh[u jZaj_r_gby lmibdh\uo kblmZpbc

1.Ijhkl_crbf \ZjbZglhf jZaj_r_gby lmibdh\hc kblmZpbb [m^_l baf_g_gb_ ihjy^dZ ke_^h\Zgby ijhp_^mj ihkuedb b ijb_fZ khh[s_gby gZ hghf ba ijhp_kkh\ dZd ihdZaZgh gb`_

ijhp_kk 0:

ijhp_kk 1:

Lmibd

 

 

 

MPI_SEND ijhp_kkm

MPI_RECV hl ijhp_kkZ

g_ \hagbdZ_l

MPI_RECV hl ijhp_kkZ

MPI_SEND ijhp_kkm

 

 

 

 

32

2.>jm]bf \ZjbZglhf jZaj_r_gby lmibdh\hc kblmZpbb fh`_l [ulv bkihevah\Zgb_ g_[ehdbjmxsbo hi_jZpbc AZf_gbf \uah\ ijhp_^mju ijb_fZ khh[s_gby k [ehdbjh\dhc gZ \uah\ ijhp_^mju MPI_IRECV JZkih- eh`bf _]h i_j_^ \uah\hf ijhp_^mju MPI_SEND l _ ij_h[jZam_f njZ]- f_gl ke_^mxsbf h[jZahf

Ijhp_kk 0:

ijhp_kk 1:

 

 

 

 

MPI_SEND ijhp_kkm

MPI_IRECV hl ijhp_kkZ

Lmibd

MPI_RECV hl ijhp_kkZ

MPI_SEND ijhp_kkm

g_ \hagbdZ_l

 

MPI_WAIT

 

< lZdhc kblmZpbb lmibd ]ZjZglbjh\Zggh g_ \hagbdg_l ihkdhevdm d fh- f_glm \uah\Z ijhp_^mju MPI_SEND aZijhk gZ ijb_f khh[s_gby m`_ [m^_l \uklZ\e_g Z agZqbl i_j_^ZqZ ^Zgguo fh`_l gZqZlvky Ijb wlhf j_dhf_g^m_lky \uklZ\eylv ijhp_^mjm MPI_IRECV \ ijh]jZff_ dZd fh`gh jZgvr_ qlh[u jZgvr_ ij_^hklZ\blv \hafh`ghklv gZqZeZ i_j_kuedb b fZdkbfZevgh bkihevah\Zlv ij_bfms_kl\Z Zkbgojhgghklb

3.Lj_lvbf \ZjbZglhf jZaj_r_gby lmibdh\hc kblmZpbb fh`_l [ulv bkihevah\Zgb_ ijhp_^mju MPI_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), IERR

Ijhp_^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 ihkuedZ SCOUNT we_f_glh\ lbiZ STYPE ba fZkkb\Z SBUF k l_]hf STAG ijhp_kkm k ghf_jhf DEST \ dhffmgbdZlhj_ COMM b ijb_f \ fZkkb\ RBUF g_ [he__ RCOUNT we_f_glh\ lbiZ RTYPE k l_]hf RTAG hl ijhp_kkZ k ghf_jhf SOURCE \ dhffmgbdZlhj_ COMM >ey ijbgbfZ_fh]h khh[s_gby aZihegy_lky iZjZf_lj STATUS IjbgbfZxsbc b hlijZ\eyxsbc ijhp_kku fh]ml y\eylvky h^gbf b l_f `_ ijhp_kkhf ;mn_ju i_j_^Zqb b ijb_fZ ^Zgguo g_ ^he`gu i_j_k_dZlvky =ZjZglbjm_lky qlh ijb wlhf lmibdh\hc kblmZpbb g_ \hagbdZ_l Khh[s_gb_ hlijZ\e_ggh_ hi_jZpb_c MPI_SENDRECV fh`_l [ulv ijbgylh h[uqguf h[jZahf b hi_jZpby MPI_SENDRECV fh`_l ijbgylv khh[s_gb_ hlijZ\e_ggh_ h[uqghc hi_jZ- pb_c

33

MPI_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), IERR

Kh\f_s_ggu_ ijb_f b i_j_^ZqZ khh[s_gbc k [ehdbjh\dhc q_j_a h[sbc [mn_j BUF IjbgbfZ_fh_ khh[s_gb_ g_ ^he`gh ij_\urZlv ih jZaf_jm hl- ijZ\ey_fh_ khh[s_gb_ Z i_j_^Z\Z_fu_ b ijbgbfZ_fu_ ^Zggu_ ^he`gu [ulv h^gh]h lbiZ

< ke_^mxs_f ijbf_j_ hi_jZpbb ^\mgZijZ\e_ggh]h h[f_gZ k khk_^gbfb ijh- p_kkZfb \ dhevp_\hc lhiheh]bb ijhba\h^ylky ijb ihfhsb ^\mo \uah\h\ ijh- p_^mju MPI_SENDRECV Ijb wlhf ]ZjZglbjh\Zggh g_ \hagbdZ_l lmibdh\hc kb- lmZpbb

 

program example12

 

include '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 - 1

 

next = rank + 1

 

if(rank .eq. 0) prev = size - 1

 

if(rank .eq. size - 1) next = 0

 

call 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)

 

end

AZ^Zgby

DZdbfb Zljb[mlZfb h[eZ^Z_l \ MPI dZ`^h_ ihkueZ_fh_ khh[s_gb_"

Fh`gh eb khh[s_gb_ hlijZ\e_ggh_ k ihfhsvx [ehdbjmxs_c hi_jZ- pbb ihkuedb ijbgylv g_[ehdbjmxs_c hi_jZpb_c ijb_fZ"

Qlh ]ZjZglbjm_l [ehdbjh\dZ ijb hlijZ\d_ ijb_f_ khh[s_gbc"

Fh`gh eb \ dZq_kl\_ l_]h\ ijb ihkued_ jZaebqguo khh[s_gbc \ ijh]jZff_ \k_]^Z bkihevah\Zlv h^gh b lh `_ qbkeh"

DZd ijbgylv ex[h_ khh[s_gb_ hl ex[h]h ijhp_kkZ"

34

DZd ijbgbfZxsbc ijhp_kk fh`_l hij_^_eblv ^ebgm ihemq_ggh]h khh[s_gby"

Fh`gh eb ijb ihkued_ khh[s_gby bkihevah\Zlv dhgklZglu

MPI_ANY_SOURCE b MPI_ANY_TAG?

Fh`gh eb g_ ijbgbfZy khh[s_gby hij_^_eblv _]h Zljb[mlu"

;m^_l eb dhjj_dlgZ ijh]jZffZ \ dhlhjhc ihkueZxsbc ijhp_kk mdZau- \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_Zevgh i_j_keZgh f_`^m ijhp_kkZfb"

KjZ\gblv wnn_dlb\ghklv j_ZebaZpbb jZaebqguo \b^h\ i_j_kuehd ^Zg-

guo k [ehdbjh\dhc MPI_SEND, MPI_BSEND, MPI_SSEND, MPI_RSEND f_-

`^m ^\mfy \u^_e_ggufb ijhp_kkhjZfb

Qlh hagZqZ_l aZ\_jr_gb_ hi_jZpbb ^ey jZaebqguo \b^h\ i_j_kuedb ^Zgguo k [ehdbjh\dhc"

Hij_^_eblv fZdkbfZevgh ^himklbfmx ^ebgm ihkueZ_fh]h khh[s_gby \ ^Zgghc j_ZebaZpbb MPI.

J_Zebah\Zlv kdZeyjgh_ ijhba\_^_gb_ jZkij_^_e_gguo f_`^m ijhp_kkh- jZfb \_dlhjh\

KjZ\gblv wnn_dlb\ghklv j_ZebaZpbb i_j_kuehd ^Zgguo f_`^m ^\mfy \u^_e_ggufb ijhp_kkhjZfb k [ehdbjh\dhc b [_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_kdbo hi_jZpbc

DZd k ihfhsvx ijhp_^mju MPI_TEST kfh^_ebjh\Zlv nmgdpbhgZev- ghklv ijhp_^mju MPI_WAIT?

< q_f khklhyl jZaebqby \ bkihevah\Zgbb ijhp_^mj MPI_WAITALL, MPI_WAITANY b MPI_WAITSOME" DZd kfh^_ebjh\Zlv bo nmgdpbhgZev- ghklv ijb ihfhsb ijhp_^mju MPI_WAIT?

Qlh ijhbahc^_l ijb hkms_kl\e_gbb h[f_gZ ^Zggufb k ijhp_kkhf

MPI_PROC_NULL?

J_Zebah\Zlv ijb ihfhsb ihkuedb khh[s_gbc lbiZ lhqdZ-lhqdZ ke_^mxsb_ ko_fu dhffmgbdZpbb ijhp_kkh\

o i_j_^ZqZ ^Zgguo ih dhevpm ^\Z \ZjbZglZ wklZn_lgZy iZehqdZhq_j_^ghc ijhp_kk ^h`b^Z_lky khh[s_gby hl ij_^u^ms_]h b ihlhf ihkueZ_l ke_^mxs_fm b k^\b] h^gh\j_f_ggu_ ihkuedZ b ijb_f khh[s_gbc

o master-VODYH \k_ ijhp_kku h[sZxlky k h^gbf \u^_e_gguf ijhp_kkhf

o i_j_kuedZ ^Zgguo hl dZ`^h]h ijhp_kkZ dZ`^hfm

Bkke_^h\Zlv wnn_dlb\ghklv dhffmgbdZpbhgguo ko_f ba ij_^u^ms_]h aZ^Zgby \ aZ\bkbfhklb hl qbkeZ bkihevah\Zgguo ijhp_kkh\ b h[t_fZ i_j_kueZ_fuo ^Zgguo bamqblv \hafh`ghklb hilbfbaZpbb

35

Hij_^_eblv \ub]jur dhlhjuc fh`gh ihemqblv ijb bkihevah\Zgbb hl- eh`_gguo aZijhkh\ gZ \aZbfh^_ckl\b_

KjZ\gblv wnn_dlb\ghklv j_ZebaZpbb nmgdpbb MPI_SENDRECV k fh^_ebjh\Zgb_f lhc `_ nmgdpbhgZevghklb ijb ihfhsb g_[ehdbjmx- sbo hi_jZpbc

Dhee_dlb\gu_ \aZbfh^_ckl\by ijhp_kkh\

< hi_jZpbyo dhee_dlb\gh]h \aZbfh^_ckl\by ijhp_kkh\ mqZkl\mxl \k_ ijh- p_kku dhffmgbdZlhjZ Khhl\_lkl\mxsZy ijhp_^mjZ ^he`gZ [ulv \ua\ZgZ dZ`^uf ijhp_kkhf [ulv fh`_l kh k\hbf gZ[hjhf iZjZf_ljh\ <ha\jZl ba ijhp_^mju dhee_dlb\gh]h \aZbfh^_ckl\by fh`_l ijhbahclb \ lhl fhf_gl dh]^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 ^hklmi d [mn_jm ijb_fZ beb ihkuedb :kbgojhgguo dhee_dlb\guo hi_jZpbc \ MPI g_l

< dhee_dlb\guo hi_jZpbyo fh`gh bkihevah\Zlv l_ `_ dhffmgbdZlhju qlh b [ueb bkihevah\Zgu ^ey hi_jZpbc lbiZ lhqdZ-lhqdZ MPI ]ZjZglbjm_l qlh khh[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\rb- fbky \ j_amevlZl_ bg^b\b^mZevgh]h \aZbfh^_ckl\by ijhp_kkh\

<hh[s_ ]h\hjy g_evay jZkkqblu\Zlv gZ kbgojhgbaZpbx ijhp_kkh\ k ihfh- svx dhee_dlb\guo hi_jZpbc djhf_ ijhp_^mju MPI_BARRIER ?keb dZdhc- lh ijhp_kk aZ\_jrbe k\h_ mqZklb_ \ dhee_dlb\ghc hi_jZpbb lh wlh g_ hagZ- qZ_l gb lh]h qlh ^ZggZy hi_jZpby aZ\_jr_gZ ^jm]bfb ijhp_kkZfb dhffmgb- dZlhjZ gb ^Z`_ lh]h qlh hgZ bfb gZqZlZ _keb wlh \hafh`gh ih kfukem hi_- jZpbb).

< dhee_dlb\guo hi_jZpbyo g_ bkihevamxlky b^_glbnbdZlhju khh[s_gbcl_]b LZdbf h[jZahf dhee_dlb\gu_ hi_jZpbb kljh]h mihjy^hq_gu kh]eZkgh bo ihy\e_gbx l_dkl_ ijh]jZffu

MPI_BARRIER(COMM, IERR) INTEGER COMM, IERR

Ijhp_^mjZ bkihevam_lky ^ey [Zjv_jghc kbgojhgbaZpbb ijhp_kkh\ JZ[hlZ ijhp_kkh\ [ehdbjm_lky ^h l_o ihj ihdZ \k_ hklZ\rb_ky ijhp_kku dhffmgbdZlhjZ COMM g_ \uihegyl wlm ijhp_^mjm Lhevdh ihke_ lh]h dZd ihke_^gbc ijhp_kk dhffmgbdZlhjZ \uihegbl ^Zggmx ijhp_^mjm \k_ ijhp_kku [m^ml jZa[ehdbjh\Zgu b ijh^he`Zl \uiheg_gb_ ^Zevr_ >ZggZy ijhp_^mjZ y\ey_lky dhee_dlb\ghc <k_ ijhp_kku ^he`gu \ua\Zlv

36

MPI_BARRIER ohly j_Zevgh bkiheg_ggu_ \uah\u jZaebqgufb ijhp_kkZfb dhffmgbdZlhjZ fh]ml [ulv jZkiheh`_gu \ jZaguo f_klZo ijh]jZffu

< ke_^mxs_f ijbf_j_ nmgdpbhgZevghklv ijhp_^mju MPI_BARRIER fh^_eb- jm_lky ijb ihfhsb hleh`_gguo aZijhkh\ gZ \aZbfh^_ckl\b_ >ey mkj_^g_gby j_amevlZlh\ ijhba\h^blky NTIMES hi_jZpbc h[f_gZ \ jZfdZo dZ`^hc ba gbo \k_ ijhp_kku ^he`gu ihkeZlv khh[s_gb_ ijhp_kkm k ghf_jhf 0 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`_gguo aZijhkh\ iha\hey_l bgbpbZebabjh\Zlv ihkuedm ^Zgguo lhevdh h^bg jZa Z aZl_f bkihevah\Zlv gZ dZ`^hc bl_jZpbb pbdeZ >Ze__ \j_fy gZ fh^_ebjh\Zgb_ kjZ\gb\Z_lky kh \j_f_g_f gZ kbgojhgbaZpbx ijb ihfhsb kZfhc klZg^Zjlghc ijhp_^mju MPI_BARRIER.

 

program example13

 

include 'mpif.h'

 

integer ierr, rank, size, MAXPROC, NTIMES, i, it

 

parameter (MAXPROC = 128, NTIMES = 10000)

 

integer ibuf(MAXPROC)

 

double precision time_start, time_finish

 

integer 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) then

 

do i = 1, size-1

 

call 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 do

 

time_start = MPI_WTIME(ierr)

 

do it = 1, NTIMES

 

call 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 do

 

else

 

call 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, NTIMES

 

call MPI_START(req(2), ierr)

 

call MPI_WAIT(req(2), statuses, ierr)

 

call MPI_START(req(1), ierr)

37

call MPI_WAIT(req(1), statuses, ierr) end do

end if

time_finish = MPI_WTIME(ierr)-time_start print *, 'rank = ', rank, ' all time = ',

&(time_finish)/NTIMES

time_start = MPI_WTIME(ierr) do it = 1, NTIMES

call MPI_BARRIER(MPI_COMM_WORLD,ierr) enddo

time_finish = MPI_WTIME(ierr)-time_start print *, 'rank = ', rank, ' barrier time = ',

& (time_finish)/NTIMES call MPI_FINALIZE(ierr)

end

MPI_BCAST(BUF, COUNT, DATATYPE, ROOT, COMM, IERR) <type> BUF(*)

INTEGER COUNT, DATATYPE, ROOT, COMM, IERR

JZkkuedZ COUNT we_f_glh\ ^Zgguo lbiZ DATATYPE ba fZkkb\Z BUF hl ijhp_kkZ ROOT \k_f ijhp_kkZf ^Zggh]h dhffmgbdZlhjZ COMM, \dexqZy kZf jZkkueZxsbc ijhp_kk Ijb \ha\jZl_ ba ijhp_^mju kh^_j`bfh_ [mn_jZ BUF ijhp_kkZ ROOT [m^_l kdhibjh\Zgh \ ehdZevguc [mn_j dZ`^h]h ijhp_kkZ dhffmgbdZlhjZ COMM AgZq_gby iZjZf_ljh\ COUNT, DATATYPE, ROOT b COMM ^he`gu [ulv h^bgZdh\ufb m \k_o ijhp_kkh\

Ke_^mxsZy ko_fZ beexkljbjm_l ^_ckl\b_ ijhp_^mju MPI_BCAST A^_kv lZd`_ dZd b \ ^Zevg_crbo ko_fZo ih \_jlbdZeb bah[jZ`Zxlky jZagu_ ijh- p_kku mqZkl\mxsb_ \ dhee_dlb\ghc hi_jZpbb Z ih ]hjbahglZeb jZkiheh- `_ggu_ gZ gbo [ehdb ^Zgguo

GZijbf_j ^ey lh]h qlh[u i_j_keZlv hl ijhp_kkZ 2 \k_f hklZevguf ijhp_k- kZf ijbeh`_gby fZkkb\ buf ba 100 p_ehqbke_gguo we_f_glh\ gm`gh qlh[u \h \k_o ijhp_kkZo \klj_lbeky ke_^mxsbc \uah\

38

 

call 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, IERR

K[hjdZ SCOUNT we_f_glh\ ^Zgguo lbiZ STYPE ba fZkkb\h\ SBUF kh \k_o ijh- p_kkh\ dhffmgbdZlhjZ COMM \ [mn_j_ RBUF ijhp_kkZ ROOT DZ`^uc ijhp_kk \dexqZy ROOT ihkueZ_l kh^_j`bfh_ k\h_]h [mn_jZ SBUF ijhp_kkm ROOT Kh- [bjZxsbc ijhp_kk khojZgy_l ^Zggu_ \ [mn_j_ RBUF jZkiheZ]Zy bo \ ihjy^d_ \hajZklZgby ghf_jh\ ijhp_kkh\

GZ ijhp_kk_ ROOT kms_kl\_ggufb y\eyxlky agZq_gby \k_o iZjZf_ljh\ Z gZ hklZevguo ijhp_kkZo lhevdh agZq_gby iZjZf_ljh\ SBUF, SCOUNT, STYPE, ROOT b COMM AgZq_gby iZjZf_ljh\ ROOT b COMM ^he`gu [ulv h^bgZdh\ufb m \k_o ijhp_kkh\ IZjZf_lj RCOUNT m ijhp_kkZ ROOT h[hagZqZ_l qbkeh we_f_g- lh\ lbiZ RTYPE ijbgbfZ_fuo g_ hl \k_o ijhp_kkh\ \ kmff_ Z hl dZ`^h]h ijhp_kkZ

Ke_^mxsZy ko_fZ beexkljbjm_l ^_ckl\b_ ijhp_^mju MPI_GATHER.

GZijbf_j ^ey lh]h qlh[u ijhp_kk 2 kh[jZe \ fZkkb\ rbuf ih 10 p_ehqbke_g- guo we_f_glh\ fZkkb\h\ buf kh \k_o ijhp_kkh\ ijbeh`_gby gm`gh qlh[u \h \k_o ijhp_kkZo \klj_lbeky ke_^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(*)

39

INTEGER SCOUNT, STYPE, RCOUNTS(*), DISPLS(*), RTYPE, ROOT, COMM, IERR

K[hjdZ jZaebqgh]h dhebq_kl\Z ^Zgguo ba fZkkb\h\ SBUF Ihjy^hd jZkiheh- `_gby ^Zgguo \ j_amevlbjmxs_f [mn_j_ RBUF aZ^Z_l fZkkb\ DISPLS.

RCOUNTS p_ehqbke_gguc fZkkb\ kh^_j`Zsbc dhebq_kl\h we_f_glh\ i_j_- ^Z\Z_fuo hl dZ`^h]h ijhp_kkZ bg^_dk jZ\_g jZg]m ihkueZxs_]h ijhp_kkZ jZaf_j fZkkb\Z jZ\_g qbkem ijhp_kkh\ \ dhffmgbdZlhj_ COMM).

DISPLS p_ehqbke_gguc fZkkb\ kh^_j`Zsbc kf_s_gby hlghkbl_evgh gZ- qZeZ fZkkb\Z RBUF bg^_dk jZ\_g jZg]m ihkueZxs_]h ijhp_kkZ jZaf_j fZkkb\Z jZ\_g qbkem ijhp_kkh\ \ dhffmgbdZlhj_ COMM).

>Zggu_ ihkeZggu_ ijhp_kkhf J-1 jZaf_sZxlky \ J-hf [ehd_ [mn_jZ RBUF gZ ijhp_kk_ ROOT dhlhjuc gZqbgZ_lky kh kf_s_gb_f \ DISPLS(J) we_f_glh\ lbiZ RTYPE k gZqZeZ [mn_jZ

MPI_SCATTER(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, ROOT, COMM, IERR)

<type> SBUF(*), RBUF(*)

INTEGER SCOUNT, STYPE, RCOUNT, RTYPE, ROOT, COMM, IERR

Ijhp_^mjZ MPI_SCATTER ih k\h_fm ^_ckl\bx y\ey_lky h[jZlghc d MPI_GATHER HgZ hkms_kl\ey_l jZkkuedm ih SCOUNT we_f_glh\ ^Zgguo lbiZ STYPE ba fZkkb\Z SBUF ijhp_kkZ ROOT \ fZkkb\u RBUF \k_o ijhp_kkh\ dhffm- gbdZlhjZ COMM \dexqZy kZf ijhp_kk ROOT Fh`gh kqblZlv qlh fZkkb\ SBUF ^_eblky gZ jZ\gu_ qZklb ih qbkem ijhp_kkh\ dZ`^Zy ba dhlhjuo khklhbl ba SCOUNT we_f_glh\ lbiZ STYPE ihke_ q_]h I-y qZklv ihkueZ_lky I-1)-fm ijhp_kkm

GZ ijhp_kk_ ROOT kms_kl\_ggufb y\eyxlky agZq_gby \k_o iZjZf_ljh\ Z gZ \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 [ulv h^bgZdh\ufb m \k_o ijhp_kkh\

Ke_^mxsZy ko_fZ beexkljbjm_l ^_ckl\b_ ijhp_^mju MPI_SCATTER.

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]