PobedilRomanskogo / Антонов - MPI (2004)
.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