 
        
        mpibook_Antonov
.pdfFhkdh\kdbc ]hkm^Zjkl\_gguc mgb\_jkbl_l bf F < Ehfhghkh\Z
GZmqgh-bkke_^h\Zl_evkdbc \uqbkebl_evguc p_glj
: K :glhgh\
I:J:EE?EVGH? IJH=J:FFBJH<:GB? K BKIHEVAH<:GB?F L?OGHEH=BB
MPI
Ba^Zl_evkl\h
Fhkdh\kdh]h mgb\_jkbl_lZ
2004
M>D 681.3.06 ;;D – 018.2*32.973
:
J_p_ga_glu
aZf ^bj_dlhjZ GB<P F=M qe_g-dhjj_kihg^_gl J:G <e < <h_\h^bg aZf ^bj_dlhjZ GBBYN F=M ^hdlhj nbabdh-fZl_fZlbq_kdbo gZmd < : Bevbg
:glhgh\ : K
: IZjZee_evgh_ ijh]jZffbjh\Zgb_ k bkihevah\Zgb_f l_ogheh]bb MPI: Mq_[gh_ ihkh[b_ – F Ba^-\h F=M – k
ISBN 5-211-04907-1
Ihkh[b_ ij_^gZagZq_gh ^ey hk\h_gby ijZdlbq_kdh]h dmjkZ iZjZee_evgh]h ijh]jZffbjh\Zgby k bkihevah\Zgb_f l_ogheh]bb MPI < gZklhys__ \j_fy l_ogheh]by MPI y\ey_lky hkgh\guf kj_^kl\hf ijh]jZffbjh\Zgby ^ey deZkl_jguo kbkl_f b dhfivxl_jh\ k jZkij_^_e_gghc iZfylvx gh fh`_l ijbf_gylvky lZd`_ b gZ \uqbkebl_evguo kbkl_fZo ^jm]bo lbih\ Dmjk \dexqZ_l \ k_[y hibkZgb_ [hevrbgkl\Z hkgh\guo ijhp_^mj klZg^ZjlZ MPI- k ijbf_jZfb bo ijbf_g_gby b ijZdlbq_kdb_ k\_^_gby dhlhju_ fh]ml ihlj_[h\Zlvky ijb gZibkZgbb j_Zevguo ijh]jZff Hkgh\gh_ hibkZgb_ \_^_lky k bkihevah\Zgb_f \uah\h\ ijhp_^mj MPI ba ijh]jZff gZ yaud_ NhjljZg h^gZdh mdZaZgu lZd`_ hkgh\gu_ hlebqby \ bkihevah\Zgbb \uah\h\ ZgZeh]bqguo nmgdpbc ba ijh]jZff gZ yaud_ Kb Ijb\h^ylky ijbf_ju g_[hevrbo aZdhgq_gguo iZjZee_evguo ijh]jZff l_dklu dhlhjuo fh`gh kdZqZlv \ k_lb Bgl_jg_l kh kljZgbpu http://parallel.ru/tech/tech_dev/MPI/examples/ < dhgp_ jZa^_eh\ ijb\h^ylky dhgljhevgu_ \hijhku b aZ^Zgby dhlhju_ fh`gh bkihevah\Zlv \ ijhp_kk_ h[mq_gby Ihkh[b_ hkgh\Zgh gZ dmjk_ aZgylbc ijh\_^_gguo Z\lhjhf \ bxg_
]h^Z \ dhfiZgbb©Rexf[_j`_ª
>ey klm^_glh\ ZkibjZglh\ b gZmqguo khljm^gbdh\ qvy ^_yl_evghklv k\yaZgZ k iZjZee_evgufb \uqbke_gbyfb
M>D
;;D – 018.2*32.973
ISBN 5-211-04907-1
‹Fhkdh\kdbc ]hkm^Zjkl\_gguc mgb\_jkbl_l
2
| Kh^_j`Zgb_ | 
 | 
| 
 | 
 | 
| Bg^_dk ih nmgdpbyf03,....................................................................................... 4 | |
| Hkgh\gu_ ihgylby................................................................................................... | 5 | 
| H[sb_ ijhp_^mju03,........................................................................................... 8 | |
| AZ^Zgby................................................................................................................ | 11 | 
| I_j_^ZqZ ijb_f khh[s_gbc f_`^m hl^_evgufb ijhp_kkZfb ......................... | 11 | 
| I_j_^ZqZ ijb_f khh[s_gbc k [ehdbjh\dhc ................................................... | 12 | 
| I_j_^ZqZ ijb_f khh[s_gbc [_a [ehdbjh\db.................................................. | 21 | 
| Hleh`_ggu_ aZijhku gZ \aZbfh^_ckl\b_ ....................................................... | 30 | 
| Lmibdh\u_ kblmZpbb deadlock) ....................................................................... | 32 | 
| AZ^Zgby................................................................................................................ | 34 | 
| Dhee_dlb\gu_ \aZbfh^_ckl\by ijhp_kkh\ ......................................................... | 36 | 
| AZ^Zgby................................................................................................................ | 47 | 
| =jmiiu b dhffmgbdZlhju .................................................................................... | 48 | 
| Hi_jZpbb k ]jmiiZfb ijhp_kkh\...................................................................... | 48 | 
| Hi_jZpbb k dhffmgbdZlhjZfb ......................................................................... | 52 | 
| AZ^Zgby................................................................................................................ | 55 | 
| <bjlmZevgu_ lhiheh]bb ....................................................................................... | 55 | 
| >_dZjlh\Z lhiheh]by ......................................................................................... | 56 | 
| Lhiheh]by ]jZnZ ................................................................................................ | 60 | 
| AZ^Zgby................................................................................................................ | 62 | 
| I_j_kuedZ jZaghlbiguo ^Zgguo......................................................................... | 63 | 
| Ijhba\h^gu_ lbiu ^Zgguo............................................................................... | 63 | 
| MiZdh\dZ ^Zgguo ............................................................................................... | 68 | 
| AZ^Zgby................................................................................................................ | 70 | 
| Ebl_jZlmjZ ............................................................................................................. | 71 | 
3
Bg^_dk ih nmgdpbyf03,
| MPI_ADDRESS ................ | 66 | 
| MPI_ALLGATHER .............. | 42 | 
| MPI_ALLGATHERV ............. | 42 | 
| MPI_ALLREDUCE .............. | 45 | 
| MPI_ALLTOALL ............... | 42 | 
| MPI_ALLTOALLV .............. | 43 | 
| MPI_BARRIER ................ | 36 | 
| MPI_BCAST .................. | 38 | 
| MPI_BSEND .................. | 14 | 
| MPI_BSEND_INIT ............. | 30 | 
| MPI_BUFFER_ATTACH .......... | 15 | 
| MPI_BUFFER_DETACH .......... | 15 | 
| MPI_CART_COORDS ............ | 58 | 
| MPI_CART_CREATE ............ | 56 | 
| MPI_CART_GET ............... | 59 | 
| MPI_CART_RANK .............. | 58 | 
| MPI_CART_SHIFT ............. | 59 | 
| MPI_CART_SUB ............... | 58 | 
| MPI_CARTDIM_GET ............ | 58 | 
| MPI_COMM_CREATE ............ | 53 | 
| MPI_COMM_DUP ............... | 53 | 
| MPI_COMM_FREE .............. | 54 | 
| MPI_COMM_GROUP ............. | 49 | 
| MPI_COMM_RANK ............... | 9 | 
| MPI_COMM_SIZE ............... | 9 | 
| MPI_COMM_SPLIT ............. | 54 | 
| MPI_DIMS_CREATE ............ | 57 | 
| MPI_FINALIZE ................ | 8 | 
| MPI_GATHER ................. | 39 | 
| MPI_GATHERV ................ | 40 | 
| MPI_GET_COUNT .............. | 19 | 
| MPI_GET_PROCESSOR_NAME ..... | 10 | 
| MPI_GRAPH_CREATE ........... | 60 | 
| MPI_GRAPH_GET .............. | 61 | 
| MPI_GRAPH_NEIGHBORS ........ | 61 | 
| MPI_GRAPH_NEIGHBORS_COUNT .. 61 | |
| MPI_GRAPHDIMS_GET .......... | 61 | 
| MPI_GROUP_COMPARE .......... | 51 | 
| MPI_GROUP_DIFFERENCE ....... | 50 | 
| MPI_GROUP_EXCL ............. | 49 | 
| MPI_GROUP_FREE ............. | 51 | 
| MPI_GROUP_INCL ............. | 49 | 
| MPI_GROUP_INTERSECTION ..... | 50 | 
| MPI_GROUP_RANK ............. | 50 | 
| MPI_GROUP_SIZE ............. | 50 | 
| MPI_GROUP_TRANSLATE_RANKS .. 51 | |
| MPI_GROUP_UNION ............ | 50 | 
| MPI_IBSEND ................. | 23 | 
| MPI_INIT .................... | 8 | 
| MPI_INITIALIZED ............. | 9 | 
| MPI_IPROBE ................. | 23 | 
| MPI_IRECV .................. | 23 | 
| MPI_IRSEND ................. | 23 | 
| MPI_ISEND .................. | 22 | 
| MPI_ISSEND ................. | 23 | 
| MPI_OP_CREATE .............. | 46 | 
| MPI_OP_FREE ................ | 46 | 
| MPI_PACK ................... | 69 | 
| MPI_PACK_SIZE .............. | 69 | 
| MPI_PROBE .................. | 19 | 
| MPI_RECV ................... | 16 | 
| MPI_RECV_INIT .............. | 30 | 
| MPI_REDUCE ................. | 43 | 
| MPI_REDUCE_SCATTER ......... | 45 | 
| MPI_REQUEST_FREE ........... | 31 | 
| MPI_RSEND .................. | 14 | 
| MPI_RSEND_INIT ............. | 30 | 
| MPI_SCAN ................... | 46 | 
| MPI_SCATTER ................ | 40 | 
| MPI_SCATTERV ............... | 41 | 
| MPI_SEND ................... | 12 | 
| MPI_SEND_INIT .............. | 30 | 
| MPI_SENDRECV ............... | 33 | 
| MPI_SENDRECV_REPLACE ....... | 34 | 
| MPI_SSEND .................. | 14 | 
| MPI_SSEND_INIT ............. | 30 | 
| MPI_START .................. | 31 | 
| MPI_STARTALL ............... | 31 | 
| MPI_TEST ................... | 27 | 
| MPI_TESTALL ................ | 27 | 
| MPI_TESTANY ................ | 27 | 
| MPI_TESTSOME ............... | 28 | 
| MPI_TOPO_TEST .............. | 56 | 
| MPI_TYPE_COMMIT ............ | 66 | 
| MPI_TYPE_CONTIGUOUS ........ | 64 | 
| MPI_TYPE_EXTENT ............ | 67 | 
| MPI_TYPE_FREE .............. | 66 | 
| MPI_TYPE_HINDEXED .......... | 65 | 
| MPI_TYPE_HVECTOR ........... | 65 | 
| MPI_TYPE_INDEXED ........... | 65 | 
| MPI_TYPE_LB ................ | 67 | 
| MPI_TYPE_SIZE .............. | 66 | 
| MPI_TYPE_STRUCT ............ | 65 | 
| MPI_TYPE_UB ................ | 67 | 
| MPI_TYPE_VECTOR ............ | 64 | 
| MPI_UNPACK ................. | 69 | 
| MPI_WAIT ................... | 23 | 
| MPI_WAITALL ................ | 24 | 
| MPI_WAITANY ................ | 25 | 
| MPI_WAITSOME ............... | 25 | 
| MPI_WTICK .................. | 10 | 
| MPI_WTIME .................. | 10 | 
4
Hkgh\gu_ ihgylby
GZb[he__ jZkijhkljZg_gghc l_ogheh]b_c ijh]jZffbjh\Zgby ^ey iZjZee_ev- guo dhfivxl_jh\ k jZkij_^_e_gghc iZfylvx \ gZklhys__ \j_fy y\ey_lky 03, Hkgh\guf kihkh[hf \aZbfh^_ckl\by iZjZee_evguo ijhp_kkh\ \ lZdbo kbkl_fZo y\ey_lky i_j_^ZqZ khh[s_gbc ^jm] ^jm]m Wlh b hljZ`_gh \ gZa\Z- gbb ^Zgghc l_ogheh]bb — 0HVVDJH 3DVVLQJ ,QWHUIDFH bgl_jn_ck i_j_^Zqb khh[s_gbc KlZg^Zjl MPI nbdkbjm_l bgl_jn_ck dhlhjuc ^he`_g kh[ex^Zlvky dZd kbkl_fhc ijh]jZffbjh\Zgby gZ dZ`^hc \uqbkebl_evghc ieZlnhjf_ lZd b ihevah\Zl_e_f ijb kha^Zgbb k\hbo ijh]jZff Kh\j_f_ggu_ j_ZebaZpbb qZs_ \k_]h khhl\_lkl\mxl klZg^Zjlm 03,\_jkbb < —
]h^Zo ihy\beky klZg^Zjl 03,- agZqbl_evgh jZkrbjb\rbc nmgdpbhgZevghklv ij_^u^ms_c \_jkbb H^gZdh ^h kbo ihj wlhl \ZjbZgl MPI g_ ihemqbe rbjhdh]h jZkijhkljZg_gby b \ iheghf h[t_f_ g_ j_Zebah\Zg gb gZ h^ghc kbkl_f_ <_a^_ ^Ze__ _keb bgh]h g_ h]h\hj_gh fu [m^_f bf_lv ^_eh kh klZg^Zjlhf MPI-1.1.
03, ih^^_j`b\Z_l jZ[hlm k yaudZfb NhjljZg b Kb < ^Zgghf ihkh[bb ijbf_ju b hibkZgby \k_o ijhp_^mj [m^ml ^Zgu k bkihevah\Zgb_f yaudZ Nhj- ljZg H^gZdh wlh kh\_jr_ggh g_ y\ey_lky ijbgpbibZevguf ihkdhevdm hk- gh\gu_ b^_b 03, b ijZ\beZ hnhjfe_gby hl^_evguo dhgkljmdpbc ^ey wlbo yaudh\ \h fgh]hf koh`b IhegZy \_jkby bgl_jn_ckZ kh^_j`bl hibkZgb_ [h- e__ ijhp_^mj b nmgdpbc GZrZ aZ^ZqZ — h[tykgblv b^_x l_ogheh]bb b ihfhqv hk\hblv g_h[oh^bfu_ gZ ijZdlbd_ dhfihg_glu >hihegbl_evgmx bgnhjfZpbx h[ bgl_jn_ck_ MPI fh`gh gZclb gZ l_fZlbq_kdhc kljZgbp_ BgnhjfZpbhggh-ZgZeblbq_kdh]h p_gljZ ih iZjZee_evguf \uqbke_gbyf \ k_lb Bgl_jg_l http://parallel.ru/tech/tech_dev/mpi.html.
Bgl_jn_ck MPI ih^^_j`b\Z_l kha^Zgb_ iZjZee_evguo ijh]jZff \ klbe_
MIMD (Multiple Instruction Multiple Data qlh ih^jZamf_\Z_l h[t_^bg_gb_ ijhp_kkh\ k jZaebqgufb bkoh^gufb l_dklZfb H^gZdh ibkZlv b hleZ`b\Zlv lZdb_ ijh]jZffu hq_gv keh`gh ihwlhfm gZ ijZdlbd_ ijh]jZffbklu ]hjZa^h qZs_ bkihevamxl SPMD-fh^_ev Single Program Multiple Data) iZjZee_evgh]h ijh]jZffbjh\Zgby \ jZfdZo dhlhjhc ^ey \k_o iZjZee_evguo ijhp_kkh\ bk- ihevam_lky h^bg b lhl `_ dh^ < gZklhys__ \j_fy \k_ [hevr_ b [hevr_ j_Z- ebaZpbc MPI ih^^_j`b\Zxl jZ[hlm k gblyfb
Ihkdhevdm MPI y\ey_lky [b[ebhl_dhc lh ijb dhfibeypbb ijh]jZffu g_h[- oh^bfh ijbebgdh\Zlv khhl\_lkl\mxsb_ [b[ebhl_qgu_ fh^meb Wlh fh`gh k^_eZlv \ dhfZg^ghc kljhd_ beb \hkihevah\Zlvky ij_^mkfhlj_ggufb \ [hev- rbgkl\_ kbkl_f dhfZg^Zfb beb kdjbilZfb mpicc ^ey ijh]jZff gZ yaud_ Kb mpiCC ^ey ijh]jZff gZ yaud_ Kb b mpif77/mpif90 ^ey ijh]jZff gZ yaudZo NhjljZg Hipby dhfibeylhjZ³-o name´iha\hey_l aZ^Zlv bfy
5
name ^ey ihemqZ_fh]h \uihegbfh]h nZceZ ih mfheqZgbx \uihegbfuc nZce gZau\Z_lky a.out gZijbf_j
mpif77 -o program program.f
Ihke_ ihemq_gby \uihegbfh]h nZceZ g_h[oh^bfh aZimklblv _]h gZ lj_[m_- fhf dhebq_kl\_ ijhp_kkhjh\ >ey wlh]h h[uqgh ij_^hklZ\ey_lky dhfZg^Z aZ- imkdZ MPI-ijbeh`_gbc mpirun gZijbf_j
mpirun -np N ijh]jZffZ k Zj]mf_glZfb!,
]^_ N - qbkeh ijhp_kkh\ dhlhjh_ ^he`gh [ulv g_ [he__ jZaj_r_ggh]h \ ^Zgghc kbkl_f_ qbkeZ ijhp_kkh\ ^ey h^ghc aZ^Zqb Ihke_ aZimkdZ h^gZ b lZ `_ ijh]jZffZ [m^_l \uihegylvky \k_fb aZims_ggufb ijhp_kkZfb j_amevlZl \uiheg_gby \ aZ\bkbfhklb hl kbkl_fu [m^_l \u^Z\Zlvky gZ l_jfbgZe beb aZibku\Zlvky \ nZce k ij_^hij_^_e_gguf bf_g_f
<k_ ^hihegbl_evgu_ h[t_dlu bf_gZ ijhp_^mj dhgklZglu ij_^hij_^_e_g- gu_ lbiu ^Zgguo b l i bkihevam_fu_ \ 03, bf_xl ij_nbdk MPI_ ?keb ihevah\Zl_ev g_ [m^_l bkihevah\Zlv \ ijh]jZff_ bf_g k lZdbf ij_nbdkhf lh dhgnebdlh\ k h[t_dlZfb MPI aZ\_^hfh g_ [m^_l < yaud_ Kb djhf_ lh]h y\- ey_lky kms_kl\_gguf j_]bklj kbf\heh\ \ gZa\Zgbyo nmgdpbc H[uqgh \ gZ- a\Zgbyo nmgdpbc MPI i_j\Zy [md\Z ihke_ ij_nbdkZ MPI_ ibr_lky \ \_jog_f j_]bklj_ ihke_^mxsb_ [md\u – \ gb`g_f j_]bklj_ Z gZa\Zgby dhgklZgl MPI aZibku\Zxlky p_ebdhf \ \_jog_f j_]bklj_ <k_ hibkZgby bgl_jn_ckZ MPI kh[jZgu \ nZce_ mpif.h (mpi.h ihwlhfm \ gZqZe_ 03,-ijh]jZffu ^he`gZ
klhylv ^bj_dlb\Z include ‘mpif.h’ (#include “mpi.h” ^ey ijh]jZff gZ
yaud_ Kb
MPI-ijh]jZffZ — wlh fgh`_kl\h iZjZee_evguo \aZbfh^_ckl\mxsbo ijh- p_kkh\ <k_ ijhp_kku ihjh`^Zxlky h^bg jZa h[jZamy iZjZee_evgmx qZklv ijh]jZffu < oh^_ \uiheg_gby MPI-ijh]jZffu ihjh`^_gb_ ^hihegbl_ev- guo ijhp_kkh\ beb mgbqlh`_gb_ kms_kl\mxsbo g_ ^himkdZ_lky \ MPI-2.0 lZdZy \hafh`ghklv ihy\beZkv DZ`^uc ijhp_kk jZ[hlZ_l \ k\h_f Z^j_kghf ijhkljZgkl\_ gbdZdbo h[sbo i_j_f_gguo beb ^Zgguo \ MPI g_l Hkgh\guf kihkh[hf \aZbfh^_ckl\by f_`^m ijhp_kkZfb y\ey_lky y\gZy ihkuedZ khh[- s_gbc
>ey ehdZebaZpbb \aZbfh^_ckl\by iZjZee_evguo ijhp_kkh\ ijh]jZffu fh`gh kha^Z\Zlv ]jmiiu ijhp_kkh\ ij_^hklZ\eyy bf hl^_evgmx kj_^m ^ey h[s_gby — dhffmgbdZlhj KhklZ\ h[jZam_fuo ]jmii ijhba\he_g =jmiiu fh]ml iheghklvx kh\iZ^Zlv \oh^blv h^gZ \ ^jm]mx g_ i_j_k_dZlvky beb i_j_k_dZlvky qZklbqgh Ijhp_kku fh]ml \aZbfh^_ckl\h\Zlv lhevdh \gmljb g_dhlhjh]h dhffmgbdZlhjZ khh[s_gby hlijZ\e_ggu_ \ jZaguo dhffmgbdZlhjZo g_ i_j_k_dZxlky b g_ f_rZxl ^jm] ^jm]m DhffmgbdZlhju bf_xl \ yaud_ NhjljZg lbi INTEGER \ yaud_ Kb – ij_^hij_^_e_gguc lbi
MPI_Comm).
6
Ijb klZjl_ ijh]jZffu \k_]^Z kqblZ_lky qlh \k_ ihjh`^_ggu_ ijhp_kku jZ- [hlZxl \ jZfdZo \k_h[t_fexs_]h dhffmgbdZlhjZ bf_xs_]h ij_^hij_^_- e_ggh_ bfy MPI_COMM_WORLD Wlhl dhffmgbdZlhj kms_kl\m_l \k_]^Z b kem`bl ^ey \aZbfh^_ckl\by \k_o aZims_gguo ijhp_kkh\ MPI-ijh]jZffu Djhf_ g_]h ijb klZjl_ ijh]jZffu bf__lky dhffmgbdZlhj MPI_COMM_SELF, kh^_j`Zsbc lhevdh h^bg l_dmsbc ijhp_kk Z lZd`_ dhffmgbdZlhj MPI_COMM_NULL g_ kh^_j`Zsbc gb h^gh]h ijhp_kkZ <k_ \aZbfh^_ckl\by ijhp_kkh\ ijhl_dZxl \ jZfdZo hij_^_e_ggh]h dhffmgbdZlhjZ khh[s_gby i_j_^Zggu_ \ jZaguo dhffmgbdZlhjZo gbdZd g_ f_rZxl ^jm] ^jm]m
DZ`^uc ijhp_kk MPI-ijh]jZffu bf__l \ dZ`^hc ]jmii_ \ dhlhjmx hg \oh^bl mgbdZevguc Zljb[ml ghf_j ijhp_kkZ dhlhjuc y\ey_lky p_euf g_hljbpZl_evguf qbkehf K ihfhsvx wlh]h Zljb[mlZ ijhbkoh^bl agZqbl_evgZy qZklv \aZbfh^_ckl\by ijhp_kkh\ f_`^m kh[hc Ykgh qlh \ h^ghf b lhf `_ dhffmgbdZlhj_ \k_ ijhp_kku bf_xl jZaebqgu_ ghf_jZ Gh ihkdhevdm ijhp_kk fh`_l h^gh\j_f_ggh \oh^blv \ jZagu_ dhffmgbdZlhju lh _]h ghf_j \ h^ghf dhffmgbdZlhj_ fh`_l hlebqZlvky hl _]h ghf_jZ \ ^jm- ]hf Hlkx^Z klZgh\ylky ihgylgufb ^\Z hkgh\guo Zljb[mlZ ijhp_kkZ dhffmgbdZlhj b ghf_j \ dhffmgbdZlhj_ ?keb ]jmiiZ kh^_j`bl n ijhp_kkh\ lh ghf_j ex[h]h ijhp_kkZ \ ^Zgghc ]jmii_ e_`bl \ ij_^_eZo hl ^h n – 1.
Hkgh\guf kihkh[hf h[s_gby ijhp_kkh\ f_`^m kh[hc y\ey_lky y\gZy ihkuedZ khh[s_gbc Khh[s_gb_ — wlh gZ[hj ^Zgguo g_dhlhjh]h lbiZ DZ`^h_ khh[s_gb_ bf__l g_kdhevdh Zljb[mlh\ \ qZklghklb ghf_j ijhp_kkZ-hlijZ\bl_ey ghf_j ijhp_kkZ-ihemqZl_ey b^_glbnbdZlhj khh[s_gby b ^jm]b_ H^gbf ba \Z`guo Zljb[mlh\ khh[s_gby y\ey_lky _]h b^_glbnbdZlhj beb lw] Ih b^_glbnbdZlhjm ijhp_kk ijbgbfZxsbc khh[s_gb_ gZijbf_j fh`_l jZaebqblv ^\Z khh[s_gby ijbr_^rb_ d g_fm hl h^gh]h b lh]h `_ ijhp_kkZ KZf b^_glbnbdZlhj khh[s_gby y\ey_lky p_- euf g_hljbpZl_evguf qbkehf e_`Zsbf \ ^bZiZahg_ hl 0 ^h MPI_TAG_UP, ijbq_f ]ZjZglbjm_lky qlh MPI_TAG_UP g_ f_gvr_ 32767 >ey jZ[hlu k Zljb[mlZfb khh[s_gbc \\_^_g fZkkb\ \ yaud_ Kb – kljmdlmjZ we_f_glu dhlhjh]h ^Zxl ^hklmi d bo agZq_gbyf
< ihke_^g_f Zj]mf_gl_ \ yaud_ Kb – \ \ha\jZsZ_fhf agZq_gbb nmgdpbb [hevrbgkl\h ijhp_^mj03,\ha\jZsZxl bgnhjfZpbx h[ mki_rghklb aZ\_j- r_gby < kemqZ_ mki_rgh]h \uiheg_gby \ha\jZsZ_lky agZq_gb_ MPI_SUCCESS bgZq_ – dh^ hrb[db <b^ hrb[db dhlhjZy ijhbahreZ ijb \u- iheg_gbb ijhp_^mju fh`gh [m^_l hij_^_eblv ba __ hibkZgby Ij_^hij_^_e_ggu_ agZq_gby khhl\_lkl\mxsb_ jZaebqguf hrb[hqguf kblmZpbyf i_j_qbke_gu \ nZce_ mpif.h.
7
H[sb_ ijhp_^mju03,
< ^Zgghf jZa^_e_ fu hklZgh\bfky gZ h[sbo ijhp_^mjZo MPI g_ k\yaZgguo k i_j_kuedhc ^Zgguo ;hevrbgkl\h ijhp_^mj wlh]h jZa^_eZ g_h[oh^bfu ijZdlbq_kdb \ dZ`^hc kh^_j`Zl_evghc iZjZee_evghc ijh]jZff_
MPI_INIT(IERR) INTEGER IERR
BgbpbZebaZpby iZjZee_evghc qZklb ijh]jZffu <k_ ^jm]b_ ijhp_^mju03, fh]ml [ulv \ua\Zgu lhevdh ihke_ \uah\Z MPI_INIT BgbpbZebaZpby iZjZe- e_evghc qZklb ^ey dZ`^h]h ijbeh`_gby ^he`gZ \uihegylvky lhevdh h^bg jZa < yaud_ Kb nmgdpbb MPI_Init i_j_^Zxlky mdZaZl_eb gZ Zj]mf_glu dh- fZg^ghc kljhdb ijh]jZffu argc b argv ba dhlhjuo kbkl_fhc fh]ml ba\e_- dZlvky b i_j_^Z\Zlvky \ iZjZee_evgu_ ijhp_kku g_dhlhju_ iZjZf_lju aZ- imkdZ ijh]jZffu
MPI_FINALIZE(IERR) INTEGER IERR
AZ\_jr_gb_ iZjZee_evghc qZklb ijbeh`_gby <k_ ihke_^mxsb_ h[jZs_gby d ex[uf ijhp_^mjZf03,\ lhf qbke_ d MPI_INIT aZij_s_gu D fhf_glm \u- ah\Z MPI_FINALIZE dZ`^uf ijhp_kkhf ijh]jZffu \k_ ^_ckl\by lj_[mxsb_ _]h mqZklby \ h[f_g_ khh[s_gbyfb ^he`gu [ulv aZ\_jr_gu
Ijbf_j ijhkl_cr_c03,-ijh]jZffu gZ yaud_ NhjljZg \u]ey^bl ke_^mxsbf
h[jZahf
program example1 include ‘mpif.h’ integer ierr
print *, ‘Before MPI_INIT’ call MPI_INIT(ierr)
print *, ‘Parallel section’ call MPI_FINALIZE(ierr) print *, ‘After MPI_FINALIZE’ end
< aZ\bkbfhklb hl j_ZebaZpbb MPI kljhqdb ‘Before MPI_INIT’ b ‘After MPI_FINALIZE’ fh`_l i_qZlZlv eb[h h^bg \u^_e_gguc ijhp_kk eb[h \k_ aZ- ims_ggu_ ijhp_kku ijbeh`_gby Kljhqdm ‘Parallel section’ ^he`gu gZ- i_qZlZlv \k_ ijhp_kku Ihjy^hd \u\h^Z kljhd k jZaguo ijhp_kkh\ fh`_l [ulv ijhba\hevguf
H[sZy ko_fZ 03,-ijh]jZffu gZ yaud_ Kb \u]ey^bl ijbf_jgh ke_^mxsbf h[jZahf
8
#include “mpi.h”
main(int argc, char **argv)
{
…
MPI_Init(&argc, &argv);
…
MPI_Finalize();
…
}
>jm]b_ iZjZee_evgu_ ijh]jZffu gZ yaud_ Kb k bkihevah\Zgb_f l_ogheh]bb MPI fh`gh gZclb gZijbf_j \ <uqbkebl_evghf iheb]hg_ http://polygon.parallel.ru.
MPI_INITIALIZED(FLAG, IERR) LOGICAL FLAG
INTEGER IERR
Ijhp_^mjZ \ha\jZsZ_l \ Zj]mf_gl_ FLAG agZq_gb_ .TRUE. _keb \ua\ZgZ ba iZjZee_evghc qZklb ijbeh`_gby b agZq_gb_ .FALSE. - \ ijhlb\ghf kemqZ_ Wlh _^bgkl\_ggZy ijhp_^mjZ 03, dhlhjmx fh`gh \ua\Zlv ^h \uah\Z
MPI_INIT.
MPI_COMM_SIZE(COMM, SIZE, IERR) INTEGER COMM, SIZE, IERR
< Zj]mf_gl_ SIZE ijhp_^mjZ \ha\jZsZ_l qbkeh iZjZee_evguo ijhp_kkh\ \ dhffmgbdZlhj_ COMM.
MPI_COMM_RANK(COMM, RANK, IERR) INTEGER COMM, RANK, IERR
< Zj]mf_gl_ RANK ijhp_^mjZ \ha\jZsZ_l ghf_j ijhp_kkZ \ dhffmgbdZlhj_ COMM ?keb ijhp_^mjZ MPI_COMM_SIZE ^ey lh]h `_ dhffmgbdZlhjZ COMM \_jgmeZ agZq_gb_ SIZE lh agZq_gb_ \ha\jZsZ_fh_ ijhp_^mjhc MPI_COMM_RANK q_j_a i_j_f_ggmx RANK e_`bl \ ^bZiZahg_ hl 0 ^h SIZE-1.
< ke_^mxs_f ijbf_j_ dZ`^uc aZims_gguc ijhp_kk i_qZlZ_l k\hc mgbdZev- guc ghf_j \ dhffmgbdZlhj_ MPI_COMM_WORLD b qbkeh ijhp_kkh\ \ ^Zgghf dhffmgbdZlhj_
program example2 include ‘mpif.h’ integer ierr, size, rank call MPI_INIT(ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) print *, ‘process ’, rank, ‘, size ’, size call MPI_FINALIZE(ierr)
end
9
KljhdZ khhl\_lkl\mxsZy \uah\m ijhp_^mju print [m^_l \u\_^_gZ klhevdh jZa kdhevdh ijhp_kkh\ [ueh ihjh`^_gh ijb aZimkd_ ijh]jZffu Ihjy^hd ihy\e_gby kljhd aZjZg__ g_ hij_^_e_g b fh`_l [ulv \hh[s_ ]h\hjy ex[uf =ZjZglbjm_lky lhevdh lh qlh kh^_j`bfh_ hl^_evguo kljhd g_ [m^_l i_j_f_- rZgh ^jm] k ^jm]hf
DOUBLE PRECISION MPI_WTIME(IERR) INTEGER IERR
WlZ nmgdpby \ha\jZsZ_l gZ \ua\Z\r_f ijhp_kk_ Zkljhghfbq_kdh_ \j_fy \ k_dmg^Zo \_s_kl\_ggh_ qbkeh ^\hcghc lhqghklb ijhr_^r__ k g_dhlhjh]h fhf_glZ \ ijhrehf ?keb g_dhlhjuc mqZklhd ijh]jZffu hdjm`blv \uah\Zfb ^Zgghc nmgdpbb lh jZaghklv \ha\jZsZ_fuo agZq_gbc ihdZ`_l \j_fy jZ[hlu ^Zggh]h mqZkldZ =ZjZglbjm_lky qlh fhf_gl \j_f_gb bkihevam_fuc \ dZq_kl\_ lhqdb hlkq_lZ g_ [m^_l baf_g_g aZ \j_fy kms_kl\h\Zgby ijhp_kkZ AZf_lbf qlh wlZ nmgdpby \ha\jZsZ_l j_amevlZl k\h_c jZ[hlu g_ q_j_a iZjZf_lju Z y\guf h[jZahf LZcf_ju jZaguo ijhp_kkhjh\ fh]ml [ulv g_ kbgojhgbabjh\Zgu b \u^Z\Zlv jZaebqgu_ agZq_gby wlh fh`gh hij_^_eblv ih agZq_gbx iZjZf_ljZ MPI_WTIME_IS_GLOBAL (1 – kbgojhgbabjh\Zgu 0 - g_l
DOUBLE PRECISION MPI_WTICK(IERR) INTEGER IERR
Nmgdpby \ha\jZsZ_l jZaj_r_gb_ lZcf_jZ gZ \ua\Z\r_f ijhp_kk_ \ k_dmg^Zo WlZ nmgdpby lZd`_ \ha\jZsZ_l j_amevlZl k\h_c jZ[hlu g_ q_j_a iZjZf_lju Z y\guf h[jZahf
MPI_GET_PROCESSOR_NAME(NAME, LEN, IERR) CHARACTER*(*) NAME
INTEGER LEN, IERR
Ijhp_^mjZ \ha\jZsZ_l \ kljhd_ NAME bfy maeZ gZ dhlhjhf aZims_g \ua\Z\- rbc ijhp_kk < i_j_f_gghc LEN \ha\jZsZ_lky dhebq_kl\h kbf\heh\ \ bf_gb g_ ij_\urZxs__ agZq_gby dhgklZglu MPI_MAX_PROCESSOR_NAME K ihfhsvx wlhc ijhp_^mju fh`gh hij_^_eblv gZ dZdb_ bf_ggh nbabq_kdb_ ijhp_kkhju [ueb kieZgbjh\Zgu ijhp_kku MPI-ijbeh`_gby
< ke_^mxs_c ijh]jZff_ gZ dZ`^hf ijhp_kk_ hij_^_eyxlky ^\_ oZjZdl_jb- klbdb kbkl_fgh]h lZcf_jZ _]h jZaj_r_gb_ b \j_fy lj_[m_fh_ gZ aZf_j \j_- f_gb ^ey mkj_^g_gby ihemqZ_fh]h agZq_gby \uihegy_lky NTIMES aZf_jh\
LZd`_ \ ^Zgghf ijbf_j_ ihdZaZgh bkihevah\Zgb_ ijhp_^mju
MPI_GET_PROCESSOR_NAME.
10
