From: "Marc Snir" <[email-masked]>
Date: Sun, 20 Jun 93 17:28:40 EDT

%!PS-Adobe-2.0
%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
%%Title: PT2PT-V5.DVI.*
%%Pages: 37 1
%%BoundingBox: 0 0 612 792
%%EndComments
%%BeginProcSet: texc.pro
/TeXDict 250 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{
statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N
/FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin
/FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array
/BitMaps X /BuildChar{CharBuilder} N /Encoding IE N end dup{/foo setfont}2
array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}
B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont
setfont}B /ch-width{ch-data dup length 5 sub get} B /ch-height{ch-data dup
length 4 sub get} B /ch-xoff{128 ch-data dup length 3 sub get sub} B /ch-yoff{
ch-data dup length 2 sub get 127 sub} B /ch-dx{ch-data dup length 1 sub get} B
/ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0
N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S
dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0
ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]/id ch-image N
/rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N /cp 0 N{rc 0 ne{rc 1 sub
/rc X rw}{G}ifelse}imagemask restore}B /G{{id gp get /gp gp 1 add N dup 18 mod
S 18 idiv pl S get exec}loop}B /adv{cp add /cp X}B /chg{rw cp id gp 4 index
getinterval putinterval dup gp add /gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw
cp 2 copy get dup 0 eq{pop 1}{dup 255 eq{pop 254}{dup dup add 255 and S 1 and
or}ifelse}ifelse put 1 adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255
eq{pop 127}{dup 2 idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2
index string putinterval adv}B /set{rw cp fillstr 0 4 index getinterval
putinterval adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv
1 chg}bind{adv 1 chg nd}bind{1 add chg}bind{1 add chg nd}bind{adv lsh}bind{
adv lsh nd}bind{adv rsh}bind{adv rsh nd}bind{1 add adv}bind{/rc X nd}bind{1
add set}bind{1 add clr}bind{adv 2 chg}bind{adv 2 chg nd}bind{pop nd}bind]N /D{
/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S
ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr
ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI
save N @rigin 0 0 moveto}N /eop{clear SI restore showpage userdict /eop-hook
known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if
/VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1
string dup 0 3 index put cvn put} for}N /p /show load N /RMat[1 0 0 -1 0 0]N
/BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval
(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale
rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex
ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{moveto}B
/delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B
/k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1
w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{
/SS save N}B /eos{clear SS restore}B end
%%EndProcSet
TeXDict begin 1000 300 300 @start /Fa 1 4 df<12041206A2EAC660EAF7E0EA3F80EA1F
00EA3F80EAF7E0EAC660EA0600A212040B0D7E8D11>3 D E /Fb 2 63 df<127012F8A3127005
057D840C>58 D<12E01278121EEA0780EA01E0EA0078131EEB0780EB01E0EB0078141EEC0780A2
EC1E001478EB01E0EB0780011EC7FC1378EA01E0EA0780001EC8FC127812E019187D9520>62
D E /Fc 3 107 df<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E010
107E9115>15 D<12C012F0123C120FEA03C0EA00F0133C130FEB03C0EB00F0143C140FEC0380EC
0F00143C14F0EB03C0010FC7FC133C13F0EA03C0000FC8FC123C12F012C0C9FCA7B61280A21922
7D9920>21 D<12C0B3B3A502297B9E0C>106 D E /Fd 51 122 df<EA01C01203EA0780EA0F00
121E5A123812781270A212F05AA77E1270A212781238123C7E7EEA0780EA03C012010A1D7A9914
>40 D<12E07E12787E7E7E7E13801203A213C01201A712031380A2120713005A121E5A5A5A5A0A
1D7D9914>I<1238127C127EA2123E121EA2127C12F81260070A7A8414>44
D<127012F8A312700505798414>46 D<EA07C0EA0FE0EA1FF0EA3C78EA3838EA701CA2EAE00EA8
EAF01EEA701CA2EA3838EA3C78EA1FF0EA0FE0EA07C00F177E9614>48 D<12035AA25A123FB4FC
12F712471207ACEAFFF0A30C177C9614>I<EA0FC0EA3FF0EA7FF8EA783C131CA21200133C1378
EA07F813F0A2EA003C131C130EA2126012F0131E133CEA7FF8EA3FF0EA0FC00F177E9614>51
D<127012F8A312701200A6127012F8A312700510798F14>58 D<B51280A3C8FCA3B51280A31109
7F8F14>61 D<EA01C0487EA21360A2EA0770A4EA0630EA0E38A5EA1FFCA3EA1C1CEA3C1E38FE3F
80A311177F9614>65 D<EAFFF813FE7FEA1C0FEB0380A4EB0700133FEA1FFEA27FEA1C07EB0380
A41307EB0F00B5FC5B5B1117809614>I<EA03C6EA0FFE121FEA3E3EEA3C1EEA780E127012F0EA
E000A7EAF00E12701278EA3C1EEA3E3CEA1FF8EA0FF0EA03C00F177E9614>I<EAFFE013F87FEA
383E131E7F7FA2EB0380A7130714005B131E133EEAFFFC5B13E011177F9614>I<B51280A3EA1C
03A490C7FC1338A2EA1FF8A3EA1C38A290C7FCEB01C0A4B5FCA31217809614>I<B51280A3EA1C
03A490C7FC1338A2EA1FF8A3EA1C38A290C7FCA5B47EA311177F9614>I<EA03C6EA0FFE121FEA
3E3EEA3C1EEA780E127012F048C7FCA4EB7F80A338F00E001270EA781E123CEA3E3EEA1FFE120F
EA03CE11177F9614>I<EAFFFEA3EA0380B1EAFFFEA30F177E9614>73 D<EAFFC0A3001CC7FCAD
EB0380A4B5FCA311177F9614>76 D<38FE0FE0A3383B1B80A413BBA2EA39B3A313F3EA38E3A213
03A538FE0FE0A31317809614>I<38FE3F80A3383B0E00A4138E1239A213CEA31238A213EE136E
A4EAFE3EA311177F9614>I<EA1FF0EA7FFCA2EA701CEAF01EEAE00EADEAF01EEA783CEA7FFCA2
EA1FF00F177E9614>I<EAFFF813FE7FEA1C0FEB07801303A41307EB0F00EA1FFF5B13F8001CC7
FCA6B47EA31117809614>I<EAFFE07F7FEA383C7F130EA3131E5BEA3FF85B7FEA383C131CA414
80EB1DC0EAFE1F130FEB070012177F9614>82 D<EA0FCCEA3FFC127FEAF87CEAF03CEAE01CA2EA
F000A2127EEA3FE0EA0FF8EA01FCEA003C131E130E12E0A2EAF01EEAF83CEAFFFC13F8EAC7E00F
177E9614>I<B51280A3EAE1C3A43801C000ADEA0FF8A311177F9614>I<38FF8FF8A3381C01C0AE
EA1E03000E1380EA0F073807FF006C5AEA00F81517819614>I<38FE0FE0A338380380A5001813
0013E3EA1DF7A213B7A5EA0DB6A21316EA0F1EA31317809614>87 D<38FE3F80A3383C1E00EA1C
1CEA1E3CEA0E38A26C5AA2EA036013E0A26C5AA7EA07F0A311177F9614>89
D<EAFFFEA3EAE01C133C1378A2EA00F0EA01E0A2EA03C013801207EA0F00A2121EEA3C0EA21278
1270EAFFFEA30F177E9614>I<EAFFE0A3EAE000B3A5EAFFE0A30B1D799914>I<EAFFE0A31200B3
A512FFA30B1D7F9914>93 D<EA1FC0EA7FF07FEA783CEA301CEA00FC120F123FEA7F1C12F012E0
133CEAF07C387FFF80A2EA1F8F11107E8F14>97 D<12FCA3121CA413FCEA1FFE7FEB0780EA1E03
001C13C01301A4EA1E03EB0780EA1F0FEBFF005BEA1CF81217809614>I<EA03F0EA0FFC123FEA
7C3CEA7818EAF0005AA4EAF00E1278EA7E1EEA3FFCEA0FF8EA03E00F107E8F14>I<137EA3130E
A4EA07CEEA1FFE123FEA7C3EEA781EEAF00E12E0A4EAF01EEA703EEA787E383FFFC0EA1FEFEA07
8F12177F9614>I<EA07E0EA1FF8EA3FFCEA7C3CEA781EEAF00EEAFFFEA3EAE000EAF00E1278EA
7E1EEA3FFCEA0FF8EA03E00F107E8F14>I<133C13FE1201EA03DE138C1380A2EAFFFEA3EA0380
AAEA7FFCA30F177F9614>I<EA07CF381FFF805A387C7F00EA783CEA701CA2EA783CEA7C7CEA3F
F8485AEA77C00078C7FCEA3FF813FE487E38F00F80EAE0071303A2EAF00738780F00EA3FFE6C5A
EA07F011197F8F14>I<12FCA3121CA413F8EA1FFE7F130FEA1E07121CA838FF9FE0A313178096
14>I<1203EA0780A2EA0300C7FCA4EAFF80A31203AAEAFFFEA30F187D9714>I<12FCA3121CA438
1DFF80A3381C78005BEA1DE0EA1FC07FA2EA1EF0EA1C7013787F38FF3F80A311177F9614>107
D<EAFF80A31203B1EAFFFEA30F177E9614>I<EAFCF8EAFFFE7FEA1F0FEA1E07121CA838FF9FE0
A31310808F14>110 D<EA07C0EA1FF0EA3FF8EA783CEA701CEAF01EEAE00EA4EAF01EEA701CEA
7C7CEA3FF8EA1FF0EA07C00F107E8F14>I<EAFCFCB47E7F381F0780EA1E03001C13C01301A4EA
1E03EB0780EA1F0FEBFF005BEA1CF890C7FCA5B47EA31218808F14>I<38FF1F80EB7FC013FF38
07E080EBC0005BA290C7FCA6EAFFFCA31210808F14>114 D<EA0FD8EA3FF812FFEAF03812E0EA
F000EA7F80EA3FF0EA07FCEA003EEAE00EA2EAF01EEAFFFC13F8EACFE00F107E8F14>I<1207A5
EAFFFCA3EA0700A6130EA3139E13FCEA03F8EA00E00F157F9414>I<EAFC3FA3EA1C07A95B381F
FFE07EEA07E71310808F14>I<38FF7F80A3381C1C00A36C5AA3EA0630EA0770A36C5AA311107F
8F14>I<38FF3F80A3381C1C00A2120E5BA212071330A2EA0370A26C5AA35BA3EA7B80127F90C7
FC127E123C11187F8F14>121 D E /Fe 7 86 df<EA07F1EA1FFBEA3C0FEA7007130312E01300
A2130312701306EA3C0EEA1FFCEA07F0100E7E8D16>67 D<EAFFF813FEEA380FEB0380EB01C0A6
EB0380EB0F00EAFFFE13F8120E7E8D18>I<12FEA21238AA12FEA2070E7F8D0B>73
D<EA07F0EA1FFCEA3C1EEA700738E00380A5EAF00700701300EA3C1EEA1FFCEA07F0110E7E8D17
>79 D<EA3F40EA7FC012C112C0130012FCEA7F80EA1FC0EA00E0136012C013E0EAFFC0EABF800B
0E7E8D11>83 D<387FFF80A2EA60E138C0E0C0A200001300A7EA07FCA2120E7F8D16>I<38FE0F
C0A238380300A9EA1C06EA0FFCEA03F8120E7E8D18>I E /Ff 14 86 df<1230127812F8127812
7005057D840C>46 D<13181370EA03F0120FEA1C701200A213E0A6EA01C0A6EA0380A61207EAFF
F8A20D1C7C9B15>49 D<14301470A214F0801301A2EB0378A21306147CEB0C3CA21318A21330A2
497EA2EBFFFEA23801801EA23803001F801206120F397FC0FFF012FF1C1D7F9C1F>65
D<903807F030EB1FFC90387C0E603901F003E0EA03C038078001EA0F00000E1300001E14C05AA2
5A1500A25AA5EC0180EC03001270127814066C5B001C131C000F5B3807C0E06CB45AD8007EC7FC
1C1E7C9C1E>67 D<000FB512E0A23800F003EC01C01400A33801E060A31500EBE1E013FF485B13
C113C0A215C0ECC18038078001A2EC0300A25C140E380F003EB512FE5C1B1C7E9B1C>69
D<390FFF9FFE143F3900F003C0A53901E00780A590B5FC481400EBC00FA53807801EA6000F133E
39FFF3FFE015C01F1C7E9B1F>72 D<380FFF80A23800F000A5485AA6485AA6485AA6120FEAFFF8
A2111C7F9B0F>I<D80FFCEB0FFCA20000EC1F80A2153713DE1567D8019EEB6F0015CFA2EC018F
138FEC030FD8030F131E1406A2EB078CA2149800065C14B0A2EB03E0A214C0001E147C3AFFE387
FFC001C31480261C7E9B26>77 D<390FF80FFEA23900FC01E0EC00C0A213DEA239018F0180A214
811387A2EB83C1390303C300EB01E3A3EB00F3A20006137EA2143EA3141E001E131C38FFE00C13
C01F1C7E9B1F>I<EB07F0EB3FFCEBF81E3801E0073903C00380D8070013C0481301001E14E012
1C003C13001238007814F0A348EB01E0A4EC03C0A30070EB0780007814005C6C131E5C6C5B380F
83E03803FF80C648C7FC1C1E7C9C20>I<380FFFFC14FF3900F00F80140315C01401A23801E003
A315801407EC0F003803C03EEBFFF814E001C0C7FCA3485AA6120FEAFFF85B1A1C7E9B1C>I<38
0FFFF814FE3900F00F80140315C01401A23801E003A3EC0780EC0F00143E3803FFF85CEBC07880
A2143E3807803CA51518000F1430EAFFF89038F01FE0C7EA07C01D1D7E9B1F>82
D<001FB512F05A383C07810038EB806012701260A2EB0F0012C0A200001400A3131EA65BA6137C
381FFFE0A21C1C7C9B1E>84 D<39FFF8FFE0A2390F001E00140CA4001E5BA6485BA6485BA30038
5BA2383C0180D81C03C7FCEA0E0EEA07FCEA01F01B1D7A9B1F>I E /Fg
17 122 df<EA03CCEA07FCEA0E7CEA183CEA383812301270A2EAE070A3137113E3A212E1EA63E6
EA7E7CEA3C3810127B9115>97 D<EA01F0EA07F8EA0E18EA1C3CEA3878EA3030EA7000A25AA513
101338EA70F0EA3FC0EA1F000E127B9113>99 D<EB1F80133F13071400A4130EA4EA03DCEA07FC
EA0E7CEA183CEA383812301270A2485AA313715BA212E1EA63E6EA7E7CEA3C38111D7B9C15>I<
EA01E0EA07F8EA0E18121C123812701370EA7FE0EAFF80EAE000A41310EA6038EA70F0EA3FC0EA
1F000D127B9113>I<EB03C0EB07E0EB0CF0EB1DE0EB1CC014005BA53803FF805A38007000A45B
A5485AA5485AA448C7FC126712F612FE5A12781425819C0D>I<EA0FC0121F12035BA448C7FCA4
EA0E78EA0FFC138E130E121E121CA3485AA3EB3840007013C0A2EB7180A238E03F00EA601E121D
7D9C15>104 D<13C0EA01E013C01380C7FCA6120E123FEA33801263EAC700A21207120EA35A13
40EA38C0A3EA3980EA3F00121E0B1C7D9B0D>I<EA1F80123F12071300A4120EA45AA45AA45AA3
127212E6A4127C1238091D7C9C0B>108 D<391E1F07C0393F3F8FE0396761D8703863C1F038C7
81E0A2380701C0A2390E0380E0A3EC81C2391C0701C6A2EC038CA239380E01F839180600F01F12
7D9122>I<EA1E1EEA3F7F3867E380EA63C3EAC78313031207A2380E0700A3EB0E10001C1330A2
EB1C60A238380FC03818078014127D9117>I<EA01E0EA07F8EA0E1C121CEA380CEA300E1270A2
EAE01CA31338A213701360EA71C0EA3F80EA1E000F127B9115>I<EA0787380FDF803819F9C0EA
18E0003113E013C01201A2380381C0A31480EA070314001387138EEA0EFC137090C7FCA25AA4B4
7EA2131A7F9115>I<EA1E3CEA3F7EEA67C3EA6387EAC78F130FEA07061300120EA45AA45A1218
10127D9112>114 D<EA01F0EA07F8EA0E18133CEA1C781330EA1E00EA1FC0EA0FE0EA07F01200
EA2078EA707012F0A2EAE0E0EA7FC0EA1F000E127D9111>I<13C01201A3EA0380A4EAFFE0A2EA
0700A2120EA45AA31320EA3860A213C0A2EA1F80EA0F000B1A7D990E>I<EA0F03EA1F871233EA
6383A212C3EA0703A2EA0E06A31304130C121CEA0E181330EA07E0EA03C010127D9113>118
D<380F0180EA1F8312331263EB870012C3EA0707A2EA0E0EA4EA0C1C121C120CEA0E3CEA0FF812
03EA0038A2EA3070EA786013E0EA71C0EA3F80001EC7FC111A7D9114>121
D E /Fh 42 124 df<903807F83F017FB512C03A01FC0FE3E03903F01FC7EA07E0D80FC01387ED
83C0ED8000A6B612FCA2390FC01F80B2397FF8FFF8A223237FA221>11 D<1238127C12FEA3127C
123807077C8610>46 D<13181378EA01F812FFA21201B3A7387FFFE0A213207C9F1C>49
D<EA03FCEA0FFF383C1FC0387007E0007C13F0EAFE0314F8A21301127CEA3803120014F0A2EB07
E014C0EB0F80EB1F00133E13385BEBE018EA01C0EA0380EA0700000E1338380FFFF05A5A5AB5FC
A215207D9F1C>I<EA01FE3807FFC0380F07E0381E03F0123FEB01F813811301EA1F03000C13F0
120014E0EB07C0EB1F803801FE007F380007C0EB01F014F8EB00FCA214FE127CA212FEA214FCEA
7C01007813F8383C07F0380FFFC03803FE0017207E9F1C>I<14E013011303A21307130F131FA2
1337137713E7EA01C71387EA03071207120E120C12181238127012E0B512FEA2380007E0A7EBFF
FEA217207E9F1C>I<00101320381E01E0381FFFC0148014005B13F8EA1BC00018C7FCA4EA19FC
EA1FFF381E0FC0381807E01303000013F0A214F8A21238127C12FCA214F012F8386007E0003013
C0381C1F80380FFF00EA03F815207D9F1C>I<13FE3803FFC0380703E0380E00F05A1478123C12
3E123F1380EBE0F0381FF9E0EBFFC06C13806C13C06C13E04813F0381E7FF8383C1FFCEA7807EB
01FEEAF000143E141EA2141C7E007813387E381F01F0380FFFC00001130017207E9F1C>56
D<1470A214F8A3497EA2497EA3EB06FF80010E7FEB0C3FA201187F141F01387FEB300FA201607F
140701E07F90B5FCA239018001FCA200038090C7FCA20006147FA23AFFE00FFFF8A225227EA12A
>65 D<B67E15E03907F001F86E7E157EA2157FA5157E15FE5DEC03F890B55AA29038F001FCEC00
7E811680151F16C0A6ED3F80A2ED7F00EC01FEB612F815C022227EA128>I<D903FE138090381F
FF819038FF01E33901F8003FD803E0131F4848130F48481307121F48C71203A2481401127EA200
FE91C7FCA8127EED0180127F7E15036C6C1400120F6C6C1306D803F05B6C6C13386CB413F09038
1FFFC0D903FEC7FC21227DA128>I<B67E15F03907F003FCEC007E81ED1F80ED0FC0ED07E0A216
F01503A316F8A916F0A3ED07E0A2ED0FC0ED1F80ED3F00157EEC03FCB612F0158025227EA12B>
I<B612FCA23807F000153C151C150C150EA215061418A3150014381478EBFFF8A2EBF078143814
18A21503A214001506A3150EA2151E153EEC01FCB6FCA220227EA125>I<B53883FFFEA23A07F0
001FC0AD90B6FCA29038F0001FAFB53883FFFEA227227EA12C>72 D<D8FFF0EC0FFF6D5C000716
E0D806FC1437A3017E1467A26D14C7A290391F800187A290390FC00307A3903807E006A2903803
F00CA2903801F818A3903800FC30A2EC7E60A2EC3FC0A2EC1F80A3EC0F00D8FFF091B5FC140630
227EA135>77 D<D8FFF8EB1FFE7F0007EC00C07FEA06FF6D7E6D7E6D7E130F806D7E6D7E6D7E13
0080EC7F80EC3FC0EC1FE0EC0FF0140715F8EC03FCEC01FEEC00FF157FA2153F151F150F150715
03A2D8FFF01301150027227EA12C>I<EB07FC90383FFF809038FC07E03903F001F848486C7E48
48137E48487FA248C7EA1F80A24815C0007E140FA200FE15E0A9007E15C0007F141FA26C15806D
133F001F15006C6C137E6C6C5B6C6C485A3900FC07E090383FFF80D907FCC7FC23227DA12A>I<
3801FC043807FF8C381F03FC383C007C007C133C0078131CA200F8130CA27E1400B4FC13E06CB4
FC14C06C13F06C13F86C13FC000313FEEA003FEB03FFEB007F143FA200C0131FA36C131EA26C13
3C12FCB413F838C7FFE00080138018227DA11F>83 D<007FB61280A2397E03F80F007814070070
14030060140100E015C0A200C01400A400001500B3A20003B512F8A222227EA127>I<EA07FC38
1FFF80383F0FC0EB07E0130314F0121E1200A213FF1207EA1FC3EA3F03127E12FCA4EA7E07EB1D
F8381FF8FF3807E07F18167E951B>97 D<B47EA2121FABEB8FE0EBBFF8EBF07CEBC01EEB801FEC
0F80A215C0A81580141F1500EBC03EEB607C381E3FF8381C0FC01A237EA21F>I<EBFF80000713
E0380F83F0EA1F03123E127E387C01E090C7FC12FCA6127C127EA2003E13306C1360380FC0E038
07FF803800FE0014167E9519>I<EB03FEA2EB007EABEA01FCEA07FF380F81FEEA1F00003E137E
127E127C12FCA8127CA27E001E13FEEA0F833907FF7FC0EA01FC1A237EA21F>I<13FE3807FF80
380F87C0381E01E0003E13F0EA7C0014F812FCA2B5FCA200FCC7FCA3127CA2127E003E13186C13
30380FC0703803FFC0C6130015167E951A>I<EB3F80EBFFC03801F3E0EA03E7EA07C7120FEBC3
C0EBC000A6EAFFFCA2EA0FC0B2EA7FFCA213237FA211>I<3801FE1F0007B51280380F87E7EA1F
03391E01E000003E7FA5001E5BEA1F03380F87C0EBFF80D819FEC7FC0018C8FC121CA2381FFFE0
14F86C13FE80123F397C003F8048131F140FA3007CEB1F00007E5B381F80FC6CB45A000113C019
217F951C>I<B47EA2121FABEB87E0EB9FF8EBB8FCEBE07CEBC07EA21380AE39FFF1FFC0A21A23
7EA21F>I<120E121FEA3F80A3EA1F00120EC7FCA7EAFF80A2121FB2EAFFF0A20C247FA30F>I<13
1C133E137FA3133E131C1300A7EA03FFA2EA003FB3A5127812FC133E137EEA78FCEA7FF0EA1FC0
102E83A311>I<EAFF80A2121FB3ADEAFFF0A20C237FA20F>108 D<3AFF87F00FE090399FFC3FF8
3A1FB87E70FC9039E03EC07C9039C03F807EA201801300AE3BFFF1FFE3FFC0A22A167E952F>I<
38FF87E0EB9FF8381FB8FCEBE07CEBC07EA21380AE39FFF1FFC0A21A167E951F>I<13FE3807FF
C0380F83E0381E00F0003E13F848137CA300FC137EA7007C137CA26C13F8381F01F0380F83E038
07FFC03800FE0017167E951C>I<38FF8FE0EBBFF8381FF07CEBC03E497E1580A2EC0FC0A8EC1F
80A2EC3F00EBC03EEBE0FCEBBFF8EB8FC00180C7FCA8EAFFF0A21A207E951F>I<EAFF1FEB3FC0
381F67E013C7A3EB83C0EB8000ADEAFFF8A213167E9517>114 D<EA07F3EA1FFFEA780FEA7007
EAF003A26CC7FCB4FC13F0EA7FFC6C7E6C7E120738003F80EAC00F130712E0A200F01300EAFC1E
EAEFFCEAC7F011167E9516>I<13C0A41201A212031207120F121FB5FCA2EA0FC0ABEBC180A512
07EBE300EA03FEC65A11207F9F16>I<38FF83FEA2381F807EAF14FEA2EA0F833907FF7FC0EA01
FC1A167E951F>I<39FFF01FE0A2390FC00600A2EBE00E0007130CEBF01C0003131813F800015B
A26C6C5AA2EB7EC0A2137F6D5AA26DC7FCA2130EA21B167F951E>I<39FFF07FC0A2390FC01C00
6C6C5A6D5A6C6C5A00015B3800FD80017FC7FCA27F6D7E497E80EB67F013E33801C1F8380381FC
48C67E000E137E39FF81FFE0A21B167F951E>120 D<39FFF01FE0A2390FC00600A2EBE00E0007
130CEBF01C0003131813F800015BA26C6C5AA2EB7EC0A2137F6D5AA26DC7FCA2130EA2130CA25B
1278EAFC3813305BEA69C0EA7F80001FC8FC1B207F951E>I<B612E0A21B02808E1C>123
D E /Fi 64 124 df<EB7C3C3801FEFE38038FCF38070F8F000E1306EB0700A5B512F0A2380E07
00AC387F0FF0A2181A809916>11 D<137CEA01FEEA0387485A120E130690C7FCA4B5FCA2EA0E07
AC387F0FE0A2131A809915>I<137F485AEA038FEA070FEA0E07A6B5FCA2EA0E07AC387F9FE0A2
131A809915>I<90383E0F803901FF7FC0390383F0E0380707C1000E138190380380C01500A4B6
12E0A2380E0380AC397F8FE3FCA21E1A809920>I<EA60C0EAF1E0EAF9F01278EA1830A3EA3060
EA70E0EAE1C0EA40800C0B7F9913>34 D<126012F012F812781218A31230127012E01240050B7D
990B>39 D<13C0EA0180EA03001206120E120C5A1238A212301270A21260A212E0AA1260A21270
A212301238A212187E120E12067EEA0180EA00C00A267E9B0F>I<12C012607E7E121C120C7E12
07A27E1380A21201A213C0AA1380A21203A213005AA212065A121C12185A5A5A0A267E9B0F>I<
126012F0A212701230A31260A212C01240040B7D830B>44 D<EAFFC0A30A0380880D>I<126012
F0A2126004047D830B>I<130CA2131C1318A213381330A213701360A213E013C0A212011380A2
120313005A1206A2120E120CA2121C1218A212381230A212701260A212E05AA20E257E9B13>I<
EA0780EA1FE0EA3870EA3030EA7038EA6018A2EAE01CACEA6018A2EA7038EA3030EA3870EA1FE0
EA07800E1A7E9813>I<1260EA7FFEA213FCEA600CEAC0181330A2EA006013C0A21201A2EA0380
A41207A8EA03000F1A7E9813>55 D<EA0780EA1FE0EA3870EA3030EA6038EAE018A2131CA5EA60
3C1270EA307CEA3FDCEA1F9CEA0018A21338EA3030EA78701360EA71C0EA3F80EA1F000E1A7E98
13>57 D<126012F0A212601200A8126012F0A2126004107D8F0B>I<126012F0A212601200A812
6012F0A212701230A31260A212C0124004177D8F0B>I<EA1F80EA3FE0EA7070EAE03812F0A212
60EA007013E0EA01C0EA03801300A21206A5C7FCA41206120FA212060D1A7E9912>63
D<130C131EA3133FA3497E1367A3EBC3C0A3380181E0A348B47EA2130000061378A3487F121E39
FF81FFC0A21A1B7F9A1D>65 D<B5128014E0380F00F01478143CA5147814F0EBFFE0A2EB01F0EB
0078143C141EA5143CA214F8B512F014C0171A7F991B>I<EB3F023801FFC63803E0EE3807003E
000E131E5A003C130E123800781306127012F01400A61406127012781238003C130C121C6C1318
6C13303803E0E03801FFC038003F00171C7E9A1C>I<B57E14E0380F00F014388080A2140F8015
80A81500A25C140E5C143C14F8B512E01480191A7F991D>I<B512F8A2380F007814381418141C
140C1303A214005B13FFA213077FA214061300140CA3141CA21478B512F8A2171A7F991A>I<B5
12F0A2EA0F001470143014381418A213061400A2130E13FEA2130E1306A390C7FCA6EAFFF8A215
1A7F9919>I<EB3F023801FFC63803E0EE3807003E000E131E5A003C130E123800781306127012
F091C7FCA5903803FFC0A23970001E0012781238123C121C7E3807803E3803E0763801FFE2D800
3FC7FC1A1C7E9A1E>I<39FFF3FFC0A2390F003C00A9EBFFFCA2EB003CAB39FFF3FFC0A21A1A7F
991D>I<EAFFF0A2EA0F00B3A4EAFFF0A20C1A7F990E>I<EA0FFFA2EA0078B1127012F8A3EAF0F0
EA70E0EA3FC0EA0F80101B7F9914>I<39FF8001FF6D5A000F14F0A2380DE006A3380CF00CA3EB
7818A3EB3C30A3EB1E60A3EB0FC0A3EB0780121E39FFC78FFFEBC30F201A7F9923>77
D<B4EBFFC07F000FEB1E00EBC00CEA0DE0A2EA0CF013F81378133C133E131E130FA2EB078CEB03
CCA2EB01ECEB00FCA2147CA2143C001E131CEAFFC0140C1A1A7F991D>I<137F3801FFC03807C1
F0380F0078001E7F001C131C487F0078130FA200707F00F01480A80078EB0F00A36C131E001C13
1C001E133C6C5B3807C1F03801FFC06C6CC7FC191C7E9A1E>I<B5128014E0380F00F014781438
143CA51438147814F0EBFFE0148090C7FCA9EAFFF0A2161A7F991A>I<EAFFFEEBFFC0380F01E0
6D7E14701478A4147014F0495AEBFFC05CEB03C06D7E6D7EA615C0A238FFF078EC3F80C7EA0F00
1A1B7F991C>82 D<EA07C2EA1FF6EA383EEA701EEA600E12E01306A3EAF0001278EA7F80EA3FF0
EA1FF8EA0FFCEA01FEEA001E130F130712C0A312E01306EAF00EEAFC1CEACFF8EA83E0101C7E9A
15>I<007FB5FCA238781E0F00601303A200E0148000C01301A3000090C7FCAF3803FFF0A2191A
7F991C>I<3AFFC7FF1FF0A23A1E00F803C091387801806CEC0300A214FC5DD807801306EB819E
A2D803C15B13C3140F01E3131C000114189038E60798A2D800F613B001FE13F0EBFC03017C5BA2
EB7801A201385BEB3000241B7F9927>87 D<EA1020EA3870EA70E0EA60C0EAC180A3EAF1E0EAF9
F01278EA30600C0B7B9913>92 D<EA3F80EAFFC0EAF0E0137012601200EA0FF0123FEA787012E0
A21373A2EA70F3EA7FFEEA3E3C10107E8F13>97 D<12FCA2121CA813F8EA1FFE130F381C0380A2
EB01C0A6EB0380A2381F0F00EA1BFEEA18F8121A7F9915>I<EA07F0EA0FFCEA3C3C1230EA7018
EAE000A61270EA380CEA3C18EA0FF8EA07E00E107F8F11>I<137EA2130EA8EA07CEEA1FFEEA3C
1EEA700EA212E0A61270131EEA3C3E381FFFC0EA07CF121A7F9915>I<EA07C0EA1FF0EA3838EA
7018131CEAFFFCA2EAE000A41270EA300CEA3C18EA0FF0EA07E00E107F8F11>I<13F8EA01FCEA
03BCEA073CEA0E181300A5EAFFC0A2EA0E00ACEA7FE0A20E1A80990C>I<130EEA079FEA1FF7EA
3877EA7038A5EA3870EA3FE0EA7780EA7000A2EA3FF013FC13FEEA700FEAE007A3EA700EEA781E
EA1FF8EA07E010197F9013>I<12FCA2121CA813F8EA1FFC131EEA1E0E121CAA38FF9FC0A2121A
7F9915>I<1218123CA21218C7FCA612FCA2121CACEAFF80A2091A80990A>I<13C0EA01E0A2EA00
C01300A6EA07E0A21200B0126012F0EAF1C0EA7F80EA3E000B2183990C>I<12FCA2121CA8EB7F
80A2EB3C0013305B5B121DEA1FE0121EEA1C70137813387F131E38FF3FC0A2121A7F9914>I<12
FCA2121CB3A4EAFF80A2091A80990A>I<38FCFC3F39FDFE7F80391F0FC3C0381E0781001C1301
AA39FF9FE7F8A21D107F8F20>I<EAFCF8B47EEA1F1EEA1E0E121CAA38FF9FC0A212107F8F15>I<
EA07E0EA1FF8EA381CEA700EEA6006EAE007A6EA700EA2EA3C3CEA1FF8EA07E010107F8F13>I<
EAFCF8EAFFFEEA1F0F381C07801303EB01C0A6EB03801307381F0F0013FEEA1CF890C7FCA5B47E
A212177F8F15>I<EA07C6EA1FF6EA3C3EEA781EEA700E12E0A61270EA781EEA3C3EEA1FEEEA07
CEEA000EA5EB7FC0A212177F8F14>I<EAFDE0EAFFF0EA1F70EA1E20EA1C00AAEAFFC0A20C107F
8F0F>I<EA1F20EA7FE01270EAE060A2EAF000127FEA3FC0EA1FE0EA01F0EAC070A212E0EAF0E0
EAFFC0EA8F800C107F8F0F>I<120CA4121CA2123CEAFFC0A2EA1C00A71360A5EA0FC0EA07800B
177F960F>I<EAFC7EA2EA1C0EAA131E133E380FFFC0EA07CF12107F8F15>I<38FF3F80A2381C0E
00130CA26C5AA21338EA0730A213F06C5AA26C5AA311107F8F14>I<39FF3F9F80A239381E0E00
381C3E0C13361337000E5B13631498000713B013C114F0A2380380E0A319107F8F1C>I<387F1F
C0A2380E1E00EA071CEA03B813B0EA01E012007F1201EA03B8EA071C1206EA0E0E38FF1FE0A213
10808F14>I<38FF3F80A2381C0E00130CA26C5AA21338EA0730A213F06C5AA26C5AA35BA21261
00F3C7FC12C712FE127811177F8F14>I<EA7FF8A2EA7070EA60E0126113C0EA63801207EA0F18
120E121CEA3C38EA3830EA7070EAFFF0A20D107F8F11>I<B512C0A21202808A13>I
E /Fj 18 118 df<127812FCA412781200A5127812FCA4127806117D900C>58
D<EA0FF0EA3FFCEA703EEAF81FA3EA703EEA007E13F8EA01E013C0EA03801300A4C7FCA4EA0780
EA0FC0A4EA0780101A7E9915>63 D<B512F014FC380FC03FEC0F80EC07C0EC03E0A2EC01F0A215
F8A815F0A2140315E0EC07C0EC0F80EC3F00B512FE14F01D1A7E9922>68
D<EAFFFCA2EA0FC0B3A4EAFFFCA20E1A7F9911>73 D<D8FFC0EB1FF86D133F000F1580A2D80DF0
136FA2D80CF813CFA290387C018FA390383E030FA2EB1F06A2EB0F8CA3EB07D8A2EB03F0A2EB01
E0A2D8FFC1EBFFF8EBC0C0251A7E992A>77 D<EA0FF0EA1FFCEA3E3E131E131F121C1200EA07FF
121FEA7E1F127C12F8A3EA7C3F383FEFE0EA0F8713117F9015>97 D<EA03FCEA0FFEEA1E1F123C
127CEA780E00F8C7FCA51278127C383C0180381F0300EA0FFEEA03F811117F9014>99
D<EA03F0EA0FFCEA1E1E487E487E148012F8B5FCA200F8C7FCA21278127C383C0180381F0300EA
0FFEEA03F811117F9014>101 D<3807E3C0381FFFE0EA3C3C38381CC038781E00A4EA381CEA3C
3CEA3FF8EA37E00070C7FCA2EA3FFEEBFF806C13C0127F38F003E01301A3387C07C0383FFF8038
07FC0013197F9016>103 D<121E123FA4121EC7FCA4127FA2121FADEAFFC0A20A1B809A0C>105
D<B4FCA2121FB3A4EAFFE0A20B1A80990C>108 D<39FF1F81F890387FE7FE391FE3EE3E903881
F81FA2EB01F0AA3AFFE7FE7FE0A223117F9026>I<EAFF1FEB7FC0EA1FC3EB83E0A21303AA38FF
E7FCA216117F9019>I<EA03F8EA0FFE383E0F80EA3C07387803C0A200F813E0A6007813C0EA7C
07383E0F80380FFE00EA03F813117F9016>I<EAFF3FEBFFC0381FC3F0130014F8147CA6147814
F814F0EBC3E0EBFFC0EB3F0090C7FCA5EAFFE0A216187F9019>I<EA1FB0EA3FF0EA7070EAE030
A2EAF800EAFFC0EA7FF0EA3FF8EA1FFC1201EAC03C131C12E0EAF038EAFFF0EACFC00E117F9011
>115 D<1203A35AA25A123FEAFFF0A2EA1F00A81318A5EA0FF0EA03E00D187F9711>I<38FF1FE0
A2EA1F03AB1307130F380FFFFCEA03F316117F9019>I E /Fk 52 122 df<90381FE1F890B512
FC3903F03F3E3807C07EEB807C000F141C1500A5B612C0A2390F807C00AE397FE1FFC0A21F1D80
9C1C>11 D<EB1FFC13FF3803F07CEA07C01380120FA6B512FCA2380F807CAE397FF3FF80A2191D
809C1B>13 D<13301360EA01C0EA038013005A120E121E121C123CA212381278A312F85AA97E12
78A31238123CA2121C121E120E7E7E1380EA01C0EA006013300C297D9E13>40
D<12C0126012387E120C120E7E1380120313C0A2120113E0A313F01200A9120113E0A313C01203
A2138012071300120E120C121C5A12605A0C297D9E13>I<1238127C12FE12FFA2127F123B1203
12071206A2120C121812301220080F7D860D>44 D<EAFFE0A40B047F8A10>I<EA0FF0EA3FFCEA
703EEAF03F12F8A3EA203EEA007C13F813F0EA01C0A21380A5C7FCA4EA0380EA07C0EA0FE0A3EA
07C0EA0380101D7D9C17>63 D<EB0380A2497EA3497EA2497E131BA2EB31F8A2EB61FC1360EBE0
FEEBC07EA248487E90B5FC481480EB001FA20006EB0FC0A2000E14E0000C130739FFC07FFEA21F
1C7E9B24>65 D<B512F814FF390FC01F80EC0FC0A215E0A515C0EC1F8090B512005C9038C03F80
EC0FC0EC07E0A215F0A515E0140FEC1FC0B61280ECFC001C1C7E9B22>I<90381FE0209038FFF8
E03803F80F3807E007380FC001EA1F8048C7FCA2007E1460A212FE1500A7007E1460A27E15C06C
7E390FC001803907E003003803F80E3800FFFCEB1FE01B1C7D9B22>I<B512F814FF390FC01FC0
EC07E0EC03F0EC01F8A2EC00FCA315FEA815FCA3EC01F8A2EC03F0EC07E0EC1FC0B6120014F81F
1C7E9B25>I<B6FCA2380FC01F1407801580A2EBC181A3EC800013C313FFA213C313C1A21560A2
9038C000E015C0A21401A21403EC0F80B6FCA21B1C7E9B1F>I<B6FCA2380FC01F1407801580A2
1401EBC181A2EC8000A213C313FFA213C313C1A401C0C7FCA6B5FCA2191C7E9B1E>I<90380FF0
0890387FFE383901FC07783907E001F8380FC0004848137848C71238A2481418127E12FE1500A5
EC7FFFA2007EEB01F8127F7EA2EA1F80EA0FC0EA07F03801FC0739007FFE7890380FF818201C7D
9B26>I<39FFFC3FFFA2390FC003F0AA90B5FCA2EBC003AC39FFFC3FFFA2201C7E9B25>I<B5FCA2
EA07E0B3A6B5FCA2101C7F9B12>I<B5FCA2EA0FC0AF1403A31407A21406140E141E147EB512FE
A2181C7E9B1D>76 D<D8FFC0EB03FF6D5B000F15F0D80DF0130DA3D80CF81319A2017C1331A26D
1361A26D13C1A390380F8181A2903807C301A2EB03E6A2EB01FCA3EB00F8A23AFFC0701FFFA228
1C7E9B2D>I<39FFE003FFA2390FF000307FEA0DFCEA0CFE137E7FEB1F8014C0EB0FE0EB07F013
03EB01F814FCEB00FE147F143FEC1FB015F0140F1407140314011400A2D8FFC013701530201C7E
9B25>I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0EB00074814E04814F0007E1303A2
00FE14F8A8007E14F0A2007F13076C14E0EB800F001F14C0390FC01F803903F07E006CB45A3800
3FE01D1C7D9B24>I<B512F814FE390FC03F80141FEC0FC015E0A615C0EC1F80143F9038FFFE00
14F801C0C7FCAAEAFFFCA21B1C7E9B21>I<B512F014FE380FC03F6E7E6E7E81A55D4A5A4AC7FC
EBFFFE14F0EBC0F8147C80143FA381A3EDC180EC1FE33AFFFC0FFF00EC03FE211C7E9B24>82
D<3807F860381FFEE0EA3C07EA7801EA700012F01460A26C130012FEEAFFE0EA7FFE6C7E148000
0F13C06C13E0EA007FEB03F01301130012C0A214E07E38F001C0EAFC0338EFFF00EAC3FC141C7D
9B1B>I<007FB512E0A238781F81007013800060146000E0147000C01430A400001400B03807FF
FEA21C1C7E9B21>I<39FFFC03FFA2390FC00030B3120715606C6C13E03901F001C03900FC0780
90387FFE00EB0FF8201C7E9B25>I<3AFFFC01FF80A23A0FC00018006C6C5BA26D137000031460
6D13E000015C7F0000495AA2D97E03C7FCA2EB7F07EB3F06148EEB1F8C14CCEB0FD8A2EB07F0A3
6D5AA26D5AA2211C7F9B24>I<3BFFFC7FFE0FFCA23B0FC007E000C081D9E003130100071680EC
07F8D803F0EC0300A29039F80CFC0700011506EC1CFE9039FC187E0E0000150CEC387F90397E30
3F18A290397F601FB8013F14B002E013F0ECC00F011F5CA26D486C5AA2EC00036D5CA22E1C7F9B
31>I<397FFE1FFEA23907F001803803F8036C6C48C7FC000013066D5AEB7F1C6D5A14B0EB1FE0
130FA26D7E6D7E1307497EEB0CFEEB187EEB387F496C7EEB601F01C07F00016D7E496C7EEA0300
3AFFF03FFF80A2211C7F9B24>I<3AFFFC01FF80A23A0FE00038006C6C13306C6C137015606C6C
5B3800FE015DD97F03C7FCEB3F871486EB1FCEEB0FFC5C13076D5AAAEB3FFFA2211C7F9B24>I<
EA0FF8EA1FFE383E1F80130714C0121C1200EA03FF121FEA3F87EA7E0712FCA3130FEA7E1F383F
FBF8EA0FE115127F9117>97 D<B4FCA2121FA9EB1FC0EBFFE0EBC1F81300147CA2147EA6147CA2
EB80F8EBC1F0381C7FE038181F80171D7F9C1B>I<EA03FCEA0FFEEA1F1F123E127C130E00FCC7
FCA6127C387E0180EA3E03381F0700EA0FFEEA03F811127E9115>I<EB0FF0A21301A9EA03F1EA
0FFFEA1F07EA3E01127CA212FCA6127CA2EA3E03EA1F0F380FFDFEEA03F1171D7E9C1B>I<EA01
FCEA0FFF381F0F80383E07C0EA7C0314E012FCB5FCA200FCC7FCA3127C007E1360003E13C0EA1F
81380FFF00EA01FC13127F9116>I<133F3801FF803803E7C0EA07C7EA0F87EB8380EB8000A5EA
FFF8A2EA0F80AEEA7FF8A2121D809C0F>I<3803F0F0380FFFF8383E1F38383C0F30007C1380A4
003C1300EA3E1FEA1FFCEA33F00030C7FC12707EEA3FFF14C06C13E04813F0387801F838F00078
A3007813F0383E03E0381FFFC03803FE00151B7F9118>I<B4FCA2121FA9EB1FC0EB7FE0EBE1F0
EB80F8A21300AB38FFE7FFA2181D7F9C1B>I<121E123FA25A7EA2121EC7FCA5B4FCA2121FAEEA
FFE0A20B1E7F9D0E>I<B4FCA2121FA9EB0FF8A2EB0380EB0700130C5B137013F87F13BC133E7F
7F1480EB07C0EB03E038FFC7FCA2161D7F9C19>107 D<B4FCA2121FB3A7EAFFE0A20B1D7F9C0E>
I<39FF1FC0FE90387FE3FF3A1FE1F70F80903980FC07C0A2EB00F8AB3AFFE7FF3FF8A225127F91
28>I<38FF1FC0EB7FE0381FE1F0EB80F8A21300AB38FFE7FFA218127F911B>I<EA01FC380FFF80
381F07C0383E03E0387C01F0A200FC13F8A6007C13F0A2383E03E0381F07C0380FFF803801FC00
15127F9118>I<38FF1FC0EBFFE0381FC1F8130014FC147C147EA6147C14FCEB80F8EBC1F0EB7F
E0EB1F8090C7FCA6EAFFE0A2171A7F911B>I<EAFE3E137F381ECF80EA1F8FA2EB070090C7FCAA
EAFFF0A211127F9114>114 D<EA1FD8EA3FF8EA7038EAE018A2EAF000EAFF80EA7FE013F0EA1F
F8EA07FCEA007CEAC01CA212E0EAF038EAFFF0EACFC00E127E9113>I<1203A35AA25AA2123FEA
FFFCA2EA1F00A9130CA4EA0F98EA07F0EA03E00E1A7F9913>I<38FF07F8A2EA1F00AC1301EA0F
03EBFEFFEA03F818127F911B>I<38FFC1FCA2381F0060EB80E0000F13C013C03807C180A23803
E300A2EA01F6A213FE6C5AA21378A2133016127F9119>I<39FF8FF8FEA2391F03E030A2018313
70000FEBF0601386D807C613C0EBCEF8EBEC790003EB7D80EBF83D0001EB3F00A2497E0000131E
EBE00EA21F127F9122>I<38FFC7FCA2381F8180EA0F833807C700EA03EEEA01FC5B1200137C13
FEEA01DFEA039F38070F80380607C0380C03E038FF07FCA216127F9119>I<38FFC1FCA2381F00
60EB80E0000F13C013C03807C180A23803E300A2EA01F6A213FE6C5AA21378A21330A25B1270EA
F8E0EAC0C0EAE380007FC7FC123E161A7F9119>I E /Fl 80 126 df<126012F0AF12601200A4
126012F0A212600419779816>33 D<13C01201A3EA07F0EA1FFC48B4FCEA7DCF38F1C78012E1A3
38F1C300EA79C0127FEA1FF0EA07FCEA01FE13CFEBC780EAF1C3A3EAE1C712F13879DF00EA3FFE
6C5AEA07E0EA01C0A2120011207E9C16>36 D<EA03C0487E120FEA1EF0EA1C70A3EBF7E013E712
1D381FC7006C5A130E121FEA3F1EEA7F9CEAF3BCEAE3F812E1EBF1C012E0EAF1F9EA7FFF383F9F
80381F0F0013197F9816>38 D<13E01201EA07C013005A121E5A123812781270A312F05AA77E12
70A312781238123C7E7E7E13C0EA01E012000B217A9C16>40 D<12E07E127C121C121E7EEA0780
120313C01201A313E01200A7120113C0A3120313801207EA0F00121E121C127C12F05A0B217C9C
16>I<EA01C0A4EA71C738F9CF80387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38F9CF803871C700
EA01C0A411127E9516>I<EA01C0A8B51280A33801C000A811137E9516>I<1238127C127EA2123E
120E121E123C127C12F81260070B798416>I<B51280A311037E8D16>I<127012F8A31270050578
8416>I<EB01801303130714005B130E131E131C133C13381378137013F05B12015BA212035B12
0790C7FC5A120E121E121C123C12381278127012F05AA211207E9C16>I<EA03E0EA0FF8487EEA
1E3CEA380EEA780FEA7007A238E00380A8EAF00700701300A2EA780FEA3C1E6C5AEA1FFC6C5AEA
03E011197E9816>I<EA018012031207A2121F127F12FF12731203AEEA7FF813FC13F80E197C98
16>I<EA07E0EA1FF8EA7FFEEA783FEAF00FEB07801303A21200A2130714005B131E5B5B5BEA03
E0EA078048C7FC381E0380123CEA7FFFB5FC7E11197E9816>I<EA07E0EA1FFCEA7FFEEA781F7F
7F12005BA2133EEA07FC5B7FEA001E130714801303A212F013071400EAF81FEA7FFE6C5AEA07E0
11197E9816>I<137C13FC13DC1201EA039CA2EA071C120F120E121E123C1238127812F0B512E0
A338001C00A53801FFC0A313197F9816>I<EA3FFEA30038C7FCA7EA3FF013FC7FEA3C0FEA3007
000013801303126012F01307EB0F006C5AEA7FFEEA1FF8EA07E011197E9816>I<13F8EA03FEEA
0FFFEA1F0F123E123CEA78060070C7FC12F0EAF7F8EAFFFEA2EAF80F38F00780A2EAE00312F0A2
1270EA7807EB0F006C5AEA1FFEEA0FF8EA03E011197E9816>I<12E0B51280A338E00F00131EC6
5A13381378137013F05B12015B12035BA3120790C7FCA7111A7E9916>I<EA07F0EA1FFC487EEA
7C1F38F00780EAE003A338700700EA7C1FEA1FFCEA07F0EA1FFCEA3C1EEA700700F01380EAE003
A3EAF00700701300EA7C1FEA3FFE6C5AEA07F011197E9816>I<EA03E0EA0FF8EA3FFCEA7C1EEA
780F487E12E01480A21303EAF007A2EA780FEA3FFFA2EA0FF3EA00071400EA300FEA780E131E13
7CEA7FF8EA3FE0EA0F8011197E9816>I<127012F8A312701200A8127012F8A312700512789116>
I<1238127CA312381200A81238127CA3123C121C123C123812F812F012600618799116>I<EB03
801307131FEB3E0013FCEA03F0485AEA1F80003EC7FC12FC12F012FC123E6C7EEA07E06C7EEA00
FC133EEB1F801307130311157E9616>I<EA7FFFB51280A2C8FCA5B51280A26C1300110B7E9116>
I<12E07E12FC123E6C7EEA07E06C7EEA00FC133EEB1F801307131FEB3E0013FCEA03F0485AEA1F
80003EC7FC12FC12F05A11157E9616>I<13E0487EA213B0A2EA03B8A31318EA071CA5EA0E0EA2
EA0FFEA2487EEA1C07A3387F1FC000FF13E0007F13C013197F9816>65 D<EA7FF8EAFFFE6C7EEA
1C0FEB07801303A313071400EA1FFF5BA2EA1C1FEB038014C01301A41303EB0780EA7FFFB51200
EA7FFC12197F9816>I<3801F180EA07FF5AEA1F0FEA3C0712781303127000F0C7FC5AA77E3870
03801278A2EA3C07381F0F00EA0FFE6C5AEA01F011197E9816>I<EA7FF8EAFFFE6C7EEA1C0FEB
0780EB03C01301A214E01300A8EB01C0A21303EB0780130F387FFF00485AEA7FF81319809816>
I<387FFFC0B5FC7EEA1C01A490C7FCA2131CA2EA1FFCA3EA1C1CA290C7FC14E0A5EA7FFFB5FC7E
13197F9816>I<B512E0A3EA1C00A41400A2131CA2EA1FFCA3EA1C1CA290C7FCA6B47E7F5B1319
7F9816>I<EA03E348B4FC121FEA3E1FEA3C0F12787F127000F0C7FC5AA4EB3F80EB7FC0EB3F80
38F007001270EA780FA2123CEA3E1F6CB4FC1207EA03E712197E9816>I<387F1FC038FFBFE038
7F1FC0381C0700A7EA1FFFA3EA1C07A9387F1FC038FFBFE0387F1FC013197F9816>I<EAFFFEA3
EA0380B3EAFFFEA30F197D9816>I<EA07FE13FF13FEEA0038B0126012F01378EAFFF0EA7FE0EA
1FC010197D9816>I<EAFFC0A3001CC7FCAE144014E0A4B5FCA313197F9816>76
D<38FC07E0EAFE0FA2383A0B80EA3B1BA413BBA2EA39B3A413F3EA38E3A21303A538FE0FE0A313
197F9816>I<387E1FC038FF3FE0387F1FC0381D07001387A313C7A2121CA213E7A31367A21377
A21337A31317EA7F1FEAFF9FEA7F0F13197F9816>I<EA1FFC487E487EEA780F38F00780EAE003
AEEAF007A238780F00EA7FFF6C5A6C5A11197E9816>I<EA7FF8EAFFFE6C7E381C0F80130314C0
1301A313031480130F381FFF005B13F8001CC7FCA7127F487E6CC7FC12197F9816>I<EA7FE0EA
FFF86C7EEA1C1E7F7FA45B131EEA1FFC5B7FEA1C3E130EA414201470A2387F0FF038FF87E0387F
03C014197F9816>82 D<EA07E3EA1FFF127FEA781F487E487EA290C7FC7E1278EA7F80EA1FF0EA
07FCC67E130FEB07801303A212E0A2EAF00738F80F00EAFFFE5BEAC7F011197E9816>I<387FFF
E0B5FCA2EAE0E0A400001300AFEA07FC487E6C5A13197F9816>I<387F07F038FF8FF8387F07F0
381C01C0B0EA1E03000E1380EA0F8F3807FF006C5AEA00F81519809816>I<38FE0FE0EAFF1FEA
FE0F38380380381C0700A4EA0E0EA4EA060CEA071CA4EA031813B8A3EA01B013F0A26C5A13197F
9816>I<38FC07E0EAFE0FEAFC07387001C0A300301380EA3803A313E3EA39F3A213B300191300
A61313EA1B1BEA0F1EA2EA0E0E13197F9816>I<387F1F80133F131F380E1E00131CEA073C1338
EA03B813F012015B120012017F120313B81207131CA2EA0E0EA2487E387F1FC000FF13E0007F13
C013197F9816>I<38FE0FE0EAFF1FEAFE0F381C0700A2EA0E0EA26C5AA3EA03B8A2EA01F0A26C
5AA8EA03F8487E6C5A13197F9816>I<387FFF80B5FCA238E007005B131E131CEA003C5B137013
F0485A5B1203485A90C7FC5A381E0380121C123C12781270B5FCA311197E9816>I<EAFFF0A3EA
E000B3A8EAFFF0A30C20789C16>I<EAFFF0A3EA0070B3A8EAFFF0A30C207F9C16>93
D<B51280A311037E7E16>95 D<EA1FE0EA7FF87FEA783CEA301EEA000E133EEA07FE123FEA7FCE
EAF80E12E0A2EAF01EEAF83E387FFFE0EA3FF7EA0FC313127E9116>97 D<127E12FE127E120EA4
133EEBFF80000F13C0EB83E01301EB00F0120E1470A4000F13F014E01381EB83C013FF000E1300
EA067C1419809816>I<EA03F8EA0FFE121FEA3C1EEA780CEA700012F05AA47EEA70071278EA3E
0FEA1FFEEA0FFCEA03F010127D9116>I<133F5B7F1307A4EA03E7EA0FFF123FEA3C1F487E1270
EAF00712E0A46C5AA2EA781FEA7C3F383FFFE0381FF7F03807C7E014197F9816>I<EA07E0EA0F
F8EA1FFCEA3C3EEA780EEA700FEAF007B5FCA3EAE0007EEA70071278EA3E1FEA1FFEEA0FFCEA03
F010127D9116>I<131FEB7F8013FFEA01E7EBC30013C0A2EA7FFFB5FCA2EA01C0ACEA3FFE487E
6C5A11197F9816>I<3803E3C0380FFFE05A381E3CC0383C1E00EA380EA3EA3C1E6C5AEA1FFC48
5AEA3BE00038C7FC123CEA1FFC48B4FC4813C0EA780338F001E0EAE000A3EAF001387C07C0383F
FF80380FFE00EA03F8131C7F9116>I<127E12FE127E120EA4137CEA0FFF148013871303A2120E
A9387FC7F038FFE7F8387FC7F01519809816>I<EA0180EA03C0A2EA0180C7FCA4EA7FC0A31201
ACEA7FFFB5FC7E101A7D9916>I<127E12FE127E120EA4EB7FE0A3EB0F00131E5B5B5BEA0FF8A2
13BC131EEA0E0E130FEB0780387F87F0EAFFCFEA7F871419809816>107
D<EAFFC0A31201B3B51280A311197E9816>I<38FBC78038FFEFC0EBFFE0EA3E7CEA3C78EA3870
AA38FE7CF8A31512809116>I<EA7E7CB5FC6C1380EA0F871303A2120EA9387FC7F038FFE7F838
7FC7F01512809116>I<EA03E0EA0FF8487EEA3C1E487EEA700738E00380A5EAF00700701300EA
780FEA3C1EEA1FFC6C5AEA03E011127E9116>I<EA7E3E38FEFF80007F13C0380F83E01301EB00
F0120E1470A4000F13F014E01381EB83C013FF000E1300137C90C7FCA6EA7FC0487E6C5A141B80
9116>I<EA07C7EA1FF748B4FCEA7C3FEA781F487EA2487EA46C5AA2EA781FEA7C3FEA3FFFEA1F
F7EA07C7EA0007A6EB3FE0EB7FF0EB3FE0141B7E9116>I<38FF0F80EB3FE013FFEA07F1EBE0C0
EBC0005BA290C7FCA7EAFFFCA313127F9116>I<EA0FECEA3FFC127FEAF03CEAE01CA2EAF000EA
7F80EA1FF0EA07FCEA003EEAE00EA212F0EAF81EEAFFFC13F8EAC7E00F127D9116>I<12035AA4
EA7FFFB5FCA20007C7FCA75BEB0380A2130713873803FF005BEA00F811177F9616>I<387E1F80
EAFE3FEA7E1FEA0E03AA1307EA0F0FEBFFF06C13F83803F3F01512809116>I<387F1FC000FF13
E0007F13C0381C0700EA1E0FEA0E0EA36C5AA4EA03B8A3EA01F0A26C5A13127F9116>I<38FF1F
E013BF131F38380380A413E33819F300A213B3EA1DB7A4EA0F1EA313127F9116>I<387F1FC013
3F131F380F1C00EA073CEA03B813F012016C5A12017FEA03B8EA073C131CEA0E0E387F1FC038FF
3FE0387F1FC013127F9116>I<387F1FC038FF9FE0387F1FC0381C0700120E130EA212075BA2EA
039CA21398EA01B8A2EA00F0A35BA3485A1279127BEA7F806CC7FC123C131B7F9116>I<EB1F80
137FEA01FFEBE0005BA91203EA7F8048C7FCA26C7EEA03C01201A97FEBFF80EA007F131F11207E
9C16>123 D<12E0B3AE0320779C16>I<12FCB4FC13C012031201A97F6CB4FCEB7F80A2EBFF00EA
01E05BA9120312FF90C7FC12FC11207E9C16>I E /Fm 43 122 df<903901FF81FF011F01EF13
C0903A7F80FF87E0D9FE01EB0FF03903FC03FE13F8D807F013FCA2EE07E0020190C7FCA6B712F8
A32707F001FCC7FCB3A33A7FFF1FFFE0A32C2A7FA928>11 D<B51280A611067F9017>45
D<121C127FEAFF80A5EA7F00121C09097B8813>I<EB3F803801FFF03807E0FC380FC07E48487E
A2393F001F80A24814C0A44814E0AF6C14C0A46C1480A2391F803F00A2380FC07E6C6C5A3801FF
F038003F801B277DA622>48 D<13075B137FEA07FFB5FCA212F8C6FCB3AB007F13FEA317277BA6
22>I<EBFF80000713F0001F13FC383F03FFD87C001380007FEB7FC0EAFF80EC3FE0A3141FEA7F
00001C133FC7FC15C0A2EC7F80A2ECFF00495A5CEB03F0495A495A495A90383E00E05B13789038
F001C0EA01C0EA038048B5FC5A5A5A481480B6FCA31B277DA622>I<EB7F803801FFF0000713FC
380F81FE381F80FF487E9038E07F80A5381FC0FFD807001300C7FC495AEB03F8495AEBFFC014F0
EB01FC6DB4FCEC7F8015C0143F15E0121EEA7F80A2EAFFC0A315C0147FD87F801380387E00FF6C
481300380FFFFC000313F0C613801B277DA622>I<14075C5C5C5C5CA25B5B497E130F130E131C
1338137013F013E0EA01C0EA0380EA07005A120E5A5A5A5AB612F8A3C71300A7017F13F8A31D27
7EA622>I<000C1303380F803FEBFFFEA25C5C14E05C49C7FC000EC8FCA6EB7FC0380FFFF8EB80
FC380E007F000C1480C7123F15C0A215E0A2123E127FEAFF80A315C01300007E137F007814806C
EBFF00381F01FE380FFFF8000313E0C690C7FC1B277DA622>I<EB07F0EB3FFCEBFFFE3801FC0F
3807F01F390FE03F80EBC07F121FEA3F80A2007FEB3F00EB001E91C7FCA25AEB0FC0EB3FF8EB70
FEEBE03F01C013809038801FC0A3010013E0A47EA4D83F8013C0A2001FEB3F80EA0FC03907E0FF
003803FFFCC613F0EB3FC01B277DA622>I<1238123E003FB512F0A315E04814C01580A2150038
70001E5C5C48137014F0495AC6485A13075C130F91C7FC5B5BA3137EA213FEA41201A86C5A1378
1C297CA822>I<EB3FC03801FFF04813FC380FC07EEB003F001E7F1580003E130FA2123F1380EB
E01F01F81300EBFE3F381FFF7E14F86C5B6C13FC6C7F6C7F00071480D81F9F13C0EA3F07D87E03
13E0EA7C0000FC133F48131F1407A21403A26C14C0007C1307007E14806C130F391FC03F00380F
FFFC000313F038007FC01B277DA622>I<EB7F803801FFF000077F380FE0FE381FC07E48487ED8
7F001380A248EB1FC0A415E0A46C133FA3383F807F001F13FF380FE1DF3803FF9F38007E1F1300
15C0A2120F381F803FD83FC01380A2EC7F00A2EB80FE381F01FC495A380FFFE06C1380D801FEC7
FC1B277DA622>I<B612FCEDFF8016E03A03FC001FF0ED07F8821503A2821501A315035EA24B5A
4B5A4B5AED7FC090B6C7FC16E09039FC0007F0ED03FC6F7EA26F7EA21780A617005D4B5A15074B
5AB712F016C04BC7FC29297DA831>66 D<91393FF00180903903FFFE07010FEBFF8F90393FF007
FF9038FF80014848C7127FD807FC143F49141F4848140F485A003F15075B007F1503A3484891C7
FCAB6C7EEE0380A2123F7F001F15076C6C15006C6C5C6D141ED801FE5C6C6C6C13F890393FF007
F0010FB512C0010391C7FC9038003FF829297CA832>I<B612F8EDFF8016E03A03FE001FF8ED07
FCED01FE6F7EEE7F80EE3FC0161F17E0A2EE0FF0A417F8AA17F0A3EE1FE0A217C0163FEE7F8017
00ED01FE4B5AED1FF8B712E0168003FCC7FC2D297DA835>I<B512FEA300011300B3B1B512FEA3
17297FA81A>73 D<B592383FFFC0A26E5C0003EFF000A2D9BFC014EFA2D99FE0EB01CFA2D98FF0
EB038FA3D987F8EB070FA2D983FC130EA2D981FE131CA3D980FF1338A291387F8070A291383FC0
E0A391381FE1C0A291380FF380A2913807FF00A36E5AA26E5AA26E5AD8FFFE0203B512C0A21570
3A297DA841>77 D<B5ECFFFE80A200036DEB03808080EBBFF8EB9FFC138FEB87FE800183138001
8113C01380EC7FE015F0EC3FF8EC1FFCEC0FFE1407EC03FF16836E13C36E13E3157FED3FF3ED1F
FB16FF81818181A281167F163F161F160FEAFFFE160716032F297DA836>I<ECFFE0010713FC90
393FC07F8090397F001FC0D801FCEB07F048486D7E48486D7E000F8148486D7EA24848EC7F80A2
007F16C049143FA300FF16E0AA007F16C06D147FA2003F1680A26C6CECFF00A26C6C495A00075D
6C6C495A6C6C495A6CB4EB1FE090393FC07F8090260FFFFEC7FC010013E02B297CA834>I<B612
F815FF16C03A03FE003FE0ED0FF0ED07F816FC150316FEA716FC150716F8ED0FF0ED3FE090B612
80EDFE0049C8FCB0B512F8A327297DA82F>I<B612E015FE6F7E3A03FE007FE0ED0FF06F7E8215
0382A65E4B5AA2ED1FE0ED7FC090B500FEC7FC5D9038FE01FF9138007FC082153F82151FA81707
A2ED0FF8170FB539F807FE1E923801FFFC9238003FF030297DA834>82 D<007FB712C0A3903980
7FC03FD87C00140700781503A20070150100F016E0A2481500A5C71500B3A490B612E0A32B287E
A730>84 D<48B47E000F13F0381F81FC486C7E147FA2EC3F80A2EA0F00C7FCA2EB0FFF90B5FC38
07FC3FEA1FE0EA3F80127F130012FEA3147F7E6CEBFFC0393F83DFFC380FFF0F3801FC031E1B7E
9A21>97 D<EAFFE0A3120FACEBE1FE9038E7FF809038FE07E09038F803F8496C7E496C7EA2157F
A21680A916005D5D7F4A5A6D485A90389E07E090380FFF80260E01FCC7FC212A7EA926>I<EB1F
F0EBFFFE3803F03F390FE07F80EA1FC0EA3F80A2127F9038001E004890C7FCA97E7F003FEB01C0
13C0001F1303390FE007803903F01F003800FFFCEB1FE01A1B7E9A1F>I<EC3FF8A31403ACEB1F
E3EBFFFB3803F03F380FE00F381FC007383F8003A2127F13005AA97EA2EA3F801407381FC00F38
0FE01F3A03F03FFF803800FFF3EB3FC3212A7EA926>I<EB3FE03801FFF83803F07E380FE03F39
1FC01F80393F800FC0A2EA7F00EC07E05AA390B5FCA290C8FCA47E7F003F14E01401D81FC013C0
380FE0033903F81F803900FFFE00EB1FF01B1B7E9A20>I<9038FF81F00003EBE7FC390FC1FE7C
391F80FCFC003FEBFE7C9038007E3848EB7F00A66C137EEB80FE001F5B380FC1F8381FFFE00018
13800038C8FC123CA2123E383FFFF814FF6C14C06C14E06C14F0121F397E0007F8007C13015A14
00A36C1301007EEB03F06CEB07E0390FC01F803903FFFE0038007FF01E287E9A22>103
D<1207EA1FC013E0123FA3121F13C0EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7DAA14>
105 D<EB0380EB0FE0EB1FF0A5EB0FE0EB038090C7FCA7EBFFF0A31307B3A9127E12FFA2EB0FE0
A2EB1FC0387E3F80383FFE00EA07F0143785AA15>I<EAFFE0A3120FACEC1FFCA3EC07C0EC0F80
EC1E00147C5CEBE1F0EBE3E0EBE7C0EBEFE0EBFFF0A280EBF3FCEBE1FE13C080EC7F80143F15C0
EC1FE0EC0FF039FFFC3FFEA31F2A7EA924>I<EAFFE0A3120FB3B2EAFFFEA30F2A7DA914>I<3BFF
C07F800FF0903AC1FFE03FFC903AC783F0F07E3B0FCE03F9C07F903ADC01FB803F01F8D9FF0013
8001F05BA301E05BAF3CFFFE1FFFC3FFF8A3351B7D9A3A>I<38FFC07F9038C1FFC09038C787E0
390FCE07F09038DC03F813F813F0A313E0AF3AFFFE3FFF80A3211B7D9A26>I<EB3FE03801FFFC
3803F07E390FC01F80391F800FC0003F14E0EB00074814F0A34814F8A86C14F0A2393F800FE0A2
001F14C0390FC01F803907F07F003801FFFC38003FE01D1B7E9A22>I<38FFE1FE9038E7FF8090
38FE07E0390FF803F8496C7E01E07F140081A2ED7F80A9EDFF00A25DEBF0014A5A01F85B9038FE
0FE09038EFFF80D9E1FCC7FC01E0C8FCA9EAFFFEA321277E9A26>I<38FFC3F0EBCFFCEBDC7E38
0FD8FF13F85BA3EBE03C1400AFB5FCA3181B7E9A1C>114 D<3803FE30380FFFF0EA3E03EA7800
127000F01370A27E6C1300EAFFE013FE387FFFC06C13E06C13F0000713F8C613FC1303130000E0
137C143C7EA26C13787E38FF01F038F7FFC000C11300161B7E9A1B>I<1370A413F0A312011203
A21207381FFFF0B5FCA23807F000AD1438A73803F870000113F03800FFE0EB1F8015267FA51B>
I<39FFE03FF8A3000F1303B11407A2140F0007131F3A03F03BFF803801FFF338003FC3211B7D9A
26>I<3AFFFE03FF80A33A07F0007000A26D13F000035CEBFC0100015CA26C6C485AA2D97F07C7
FCA2148FEB3F8E14DEEB1FDCA2EB0FF8A36D5AA26D5AA26D5A211B7F9A24>I<3AFFFE03FF80A3
3A07F0007000A26D13F000035CEBFC0100015CA26C6C485AA2D97F07C7FCA2148FEB3F8E14DEEB
1FDCA2EB0FF8A36D5AA26D5AA26D5AA2495AA2EA3807007C90C8FCEAFE0F130E131E5BEA7C78EA
3FE0EA0FC021277F9A24>121 D E /Fn 75 124 df<EB3F0F9038FFBF803903C3F3C0380703E3
ECC180390E01C000A6B512FCA2380E01C0AE387F87FCA21A1D809C18>11
D<133FEBFF803803C1C0EA0703A2380E018090C7FCA5B512C0A2EA0E01AE387F87F8A2151D809C
17>I<EB3FC013FFEA03C3EA07031301120EA6B5FCA2EA0E01AE387FCFF8A2151D809C17>I<9038
3F03F09038FFCFF83903C0FC1C390701F03CA2390E00E01892C7FCA5B612FCA2390E00E01CAE3A
7FC7FCFF80A2211D809C23>I<127012F8A71270AC12201200A4127012F8A31270051E7D9D0C>
33 D<EA7070EAF8F8EAFCFCA2EA7C7CEA0C0CA3EA1818A2EA3030EA6060EA40400E0D7F9C15>I<
127012F812FCA2127C120CA31218A2123012601240060D7D9C0C>39 D<13C0EA0180EA03001206
120E120C121C121812381230A21270A21260A212E0AC1260A21270A21230A212381218121C120C
120E12067EEA0180EA00C00A2A7D9E10>I<12C012607E7E121C120C120E120612077EA21380A2
1201A213C0AC1380A21203A21300A25A1206120E120C121C12185A5A5A0A2A7E9E10>I<127012
F012F8A212781218A31230A2127012601240050D7D840C>44 D<EAFFE0A30B0380890E>I<1270
12F8A3127005057D840C>I<1303A213071306A2130E130C131C1318A213381330A213701360A2
13E013C0A21201138012031300A25A1206A2120E120CA2121C1218A21238123012701260A212E0
5AA210297E9E15>I<EA03C0EA0FF0EA1C38EA381CA2EA700EA3EAF00FADEA700EA3EA381CA2EA
1C38EA0FF0EA07E0101D7E9B15>I<12035A123FB4FC12C71207B3A3EAFFF8A20D1C7C9B15>I<EA
07C0EA1FF0EA3878EA603C131E12F0EAF80FA312701200130E131E131C133C1378137013E0EA01
C0EA0380EA0700EA0E03120C1218EA3006EA7FFE12FFA2101C7E9B15>I<EA07E0EA1FF0EA3838
EA301CEA781EA312381200133C13381370EA07E0A2EA0038131C131E130E130FA2127012F8A213
0EEAF01EEA601CEA3838EA1FF0EA07C0101D7E9B15>I<131CA2133C137CA213DC1201139C1203
EA071C1206120E120C121812381230126012E0B512C0A238001C00A63801FFC0A2121C7F9B15>
I<EA300CEA3FFC13F813E0EA3000A6EA33E0EA37F0EA3C38EA381CEA301E130EEA000FA4127012
F0A2EAE00EEA601E131CEA3878EA1FF0EA07C0101D7E9B15>I<13F0EA03FCEA070CEA0E0EEA1C
1E1238130CEA78001270A2EAF3F0EAF7F8EAFC1CEAF81E130E12F0130FA51270A2130E1238131C
EA1C38EA0FF0EA03E0101D7E9B15>I<1260387FFF80A21400EA6003EAC0065BA2C65A5BA25BA2
5BA21201A2485AA41207A76CC7FC111D7E9B15>I<EA03E0EA0FF0EA1C38EA381CEA300E1270A3
1278131C123EEA3FB8EA1FE0EA07F0EA0FF8EA1CFCEA387EEA701E130F12E01307A4EA700E130C
EA3C3CEA1FF0EA07E0101D7E9B15>I<EA03C0EA0FF0EA1C38EA381C1278EA700E12F0A2130FA5
1270131F1278EA383FEA1FEFEA0FCFEA000EA3EA301C12781338EA7030EA30F0EA3FC0EA0F8010
1D7E9B15>I<127012F8A312701200A8127012F8A3127005127D910C>I<127012F8A312701200A8
127012F012F8A212781218A31230A2127012601240051A7D910C>I<007FB512C0B612E0C9FCA8
B612E06C14C01B0C7E8F20>61 D<EA0FE0EA3FF8EA703CEA601CEAF01EA31200133C137813E0EA
01C0138012031300A51202C7FCA41207EA0F80A3EA07000F1D7E9C14>63
D<1306130FA3497EA4EB33C0A3EB61E0A3EBC0F0A338018078A2EBFFF8487FEB003CA200067FA3
001F131F39FFC0FFF0A21C1D7F9C1F>65 D<B512C014F0380F00F8143C141C141EA4141C143C14
78EBFFF014E0EB00F8143C141EA2140FA5141E143E147CB512F814C0181C7E9B1D>I<90381F80
80EBFFE13803F0333807801B380F000F001E1307001C1303123C5A1401127012F091C7FCA70070
EB01801278A27E001CEB0300121E6C13066C6C5A3803F0383800FFF0EB1F80191E7E9C1E>I<B5
12C014F0380F007C141E8080EC038015C0A2140115E0A815C0A2140315801407EC0F00141E147C
B512F014C01B1C7E9B20>I<B512FCA2380F007C141C140C140E14061303A314005B13FFA21307
7FA21403A213001406A3140E141E147CB512FCA2181C7E9B1C>I<B512F8A2380F007814381418
141C140CA21303A21400A25B13FFA213077FA490C7FCA6EAFFF8A2161C7E9B1B>I<90381F8080
EBFFE13803F0333807801B380F000F001E1307001C1303123C5A1401127012F091C7FCA5ECFFF0
A20070EB07801278A27E121C121E7E3807800F3803F0393800FFF090381FC0001C1E7E9C21>I<
39FFF3FFC0A2390F003C00AAEBFFFCA2EB003CAC39FFF3FFC0A21A1C7E9B1F>I<EAFFF0A2EA0F
00B3A6EAFFF0A20C1C7F9B0F>I<EAFFF8A2000FC7FCAF1418A414381430147014F01301B5FCA2
151C7E9B1A>76 D<B46CEBFF806D5A000FECF800A2390DE00378A3380CF006A3EB780CA3EB3C18
A3EB1E30A3EB0F60A3EB07C0A3381E03803AFFC387FF80A2211C7E9B26>I<B4EBFFC07F000FEB
1E00EBC00CA2EA0DE0EA0CF0A21378A2133C131EA2130FA2EB078C14CC1303EB01ECA2EB00FCA2
147C143CA2001E131CEAFFC0140C1A1C7E9B1F>I<EB3F80EBFFE03803E0F83807803C380E000E
001E130F48EB078000381303007814C0A20070130100F014E0A80078EB03C0A36CEB0780A26CEB
0F006C131E6C6C5A3803E0F83800FFE0EB3F801B1E7E9C20>I<B5128014E0380F00F01438143C
141EA6143C143814F0EBFFE0148090C7FCAAEAFFF0A2171C7E9B1C>I<B5FC14E0380F00F01438
143C80A55C143814F0EBFFE05CEB01E06D7E1478A71530143839FFF03C60EC1FE0C7EA07C01C1D
7E9B1F>82 D<3807E080EA1FF9EA3C1FEA7007130312E01301A36CC7FCA2127CEA7FC0EA3FF8EA
1FFEEA07FFC61380130FEB03C0A2130112C0A300E01380130300F01300EAFC0EEACFFCEA83F812
1E7E9C17>I<007FB512C0A238780F03007013010060130000E014E000C01460A400001400B038
03FFFCA21B1C7F9B1E>I<39FFF0FFC0A2390F001E00140CB36C5B138000035BEA01C03800E0E0
EB7FC0011FC7FC1A1D7E9B1F>I<3AFFE0FFE1FFA23A1F001E007C6C1530143FA2018014700007
9038678060A32603C0E713C0ECC3C0A2D801E0EBC1809038E181E1A3D800F3EBF3001400A2017B
13F6017E137EA3013C133CA3011C133801181318281D7F9B2B>87 D<397FF0FFC0A23907C03E00
00031338EBE03000011370EBF06000005B1379EB7D80013FC7FC7FA27F80131FEB3BC0EB33E013
71EB61F0EBC0F800011378EB807C3803003C487F380F801F39FFE0FFF0A21C1C7F9B1F>I<EA08
08EA1818EA3030EA6060A2EAC0C0A3EAF8F8EAFCFCA2EA7C7CEA38380E0D7B9C15>92
D<EA0FE0EA1FF8EA3C3C7FEA180E1200131EEA07FE121FEA3E0E127812F01460A2131EEA783E38
3FFFC0381F878013127F9115>97 D<12FCA2121CA9137EEA1DFF381F8780381E01C0001C13E013
0014F0A614E01301001E13C0381F07803819FF00EA187C141D7F9C17>I<EA03F0EA0FF8EA1E3C
1238EA7818EA700012F0A612781306123CEA1E0CEA0FF8EA03E00F127F9112>I<EB1F80A21303
A9EA03E3EA0FFBEA1E0FEA3807EA7803127012F0A612701278EA3807EA1E1F380FFBF0EA07E314
1D7F9C17>I<EA03E0EA0FF0EA1C38EA381CEA781EEA700EEAFFFEA2EAF000A41270EA7806123C
EA1E0CEA0FF8EA03E00F127F9112>I<1378EA01FCEA039EEA071EEA0E0C1300A6EAFFE0A2EA0E
00AEEA7FE0A20F1D809C0D>I<EB03803807E7C0EA0FFDEA3C3D38381C00EA781EA4EA381CEA3C
3CEA3FF0EA37E00070C7FCA21230EA3FFC6CB4FC481380EA700738E001C0A438700380383C0F00
EA1FFEEA07F8121C7F9215>I<12FCA2121CA9137CEA1DFFEA1F07381E0380A2121CAB38FF9FF0
A2141D7F9C17>I<1218123C127C123C1218C7FCA612FCA2121CAEEAFF80A2091D7F9C0C>I<EA01
C0EA03E0A3EA01C0C7FCA6EA0FE0A21200B31260EAF1C0A2EA7F80EA3E000B25839C0D>I<12FC
A2121CA9EB7FC0A2EB3E0013185B5B5BEA1DE0121FEA1E70EA1C781338133C131C7F130F38FF9F
E0A2131D7F9C16>I<12FCA2121CB3A7EAFF80A2091D7F9C0C>I<39FC7E07E039FDFF9FF8391F83
B838391E01E01CA2001C13C0AB3AFF8FF8FF80A221127F9124>I<EAFC7CEAFDFFEA1F07381E03
80A2121CAB38FF9FF0A214127F9117>I<EA03F0EA0FFCEA1E1EEA380700781380EA700300F013
C0A600701380EA780700381300EA1E1EEA0FFCEA03F012127F9115>I<EAFC7EEAFDFF381F8780
381E03C0381C01E0A2EB00F0A6EB01E0A2381E03C0381F0780381DFF00EA1C7C90C7FCA6B47EA2
141A7F9117>I<3803E180EA0FF9EA1E1FEA3C071278130312F0A612781307123CEA1E1FEA0FFB
EA07E3EA0003A6EB1FF0A2141A7F9116>I<EAFDE0EAFFF0EA1F78121E1330EA1C00ABEAFFC0A2
0D127F9110>I<EA1F90EA3FF0EA7070EAE030A3EAF800EA7F80EA3FE0EA0FF0EA00F8EAC038A2
12E0A2EAF070EADFE0EA8FC00D127F9110>I<120CA5121CA2123CEAFFE0A2EA1C00A81330A5EA
1E60EA0FC0EA07800C1A7F9910>I<38FC1F80A2EA1C03AC1307EA0C0F380FFBF0EA03E314127F
9117>I<38FF0FE0A2381C0780EB0300EA0E06A36C5AA2131CEA0398A213F86C5AA26C5AA31312
7F9116>I<39FF3FCFE0A2391C0F0780EC0300131F380E1B061486A2EB318E000713CCA2136038
03E0F8A33801C070A31B127F911E>I<387F8FF0A2380F078038070600EA038EEA01DC13D8EA00
F01370137813F8EA01DCEA038E130EEA0607380F038038FF8FF8A21512809116>I<38FF0FE0A2
381C0780EB0300EA0E06A36C5AA2131CEA0398A213F86C5AA26C5AA35BA3EAF180A200C7C7FC12
7E123C131A7F9116>I<EA7FFCA2EA7838EA7070EA60F013E0EA61C01263EA0380EA070C120F12
0EEA1C1CEA3C181238EA7078EAFFF8A20E127F9112>I<B512F0A21402808B15>I
E /Fo 10 118 df<DC7FFE140E030FB500E0133E92B600F8137E020303FE13FE021FEDFF81027F
D9F80113E391B53980003FF7010301FCC7EA07FF4901F08049491400490180157F4990C9123F49
48161F4948160F485B4818074A1603485B481801A2485B1900A2485B1A7E5AA391CCFCA2B5FCAD
7EA2801A3EA27EA26C7FA21A7E6C6D177CA26C19FC6C6D17F86E16016CF003F06C7F6D6CEE07E0
6D6CEE0FC06D6DED1F806D01E0ED7F006D6D15FE6D01FCEC03FC0100D9FF80EB0FF86E01F8EBFF
F0021F90B612C0020393C7FC020015FC030F14E09226007FFEC8FC474979C756>67
D<B97E18FC18FF19C019F0D8001F902680000F13FC05017F716C7E7213807213C0841AE0A27213
F0A31AF8A81AF0A34E13E0A21AC04E1380604E13004D485A050F13F892B75A19C04EC7FC18F003
C0CAFCB3A9B712F8A545477CC651>80 D<903807FFFE017FEBFFE048B612F84815FE489039001F
FF8003077F48D980017F6F7FA2707EA2707E6C90C7FC6C5A6C5AC9FCA40207B5FC91B6FC130F01
3FEBF03F3901FFFE004813F04813C04890C7FC485A485A485AA212FF5BA3167FA26D14FF6C6CEB
01EF003F140301FF90380FCFFF6C9026C07F8F13F8000790B5000713FC6CECFC03C66CEBF00101
07903980007FF8362E7DAD3A>97 D<91381FFFC049B512FC010714FF011F158090267FFC0113C0
EBFFF048D9C00313E04813804813005A485AA248486D13C06F1380007FED7F0093C7FC5BA212FF
AA127F7FA3123F6D15F8121F16016C6C15F06C6D13036C6DEB07E06C6DEB0FC06C01F8EB3F8090
3A7FFE01FF00011FB55A010714F8010114E0D9001F90C7FC2D2E7CAD35>99
D<13FCEA03FF4813804813C014E05AA67E14C06C13806C1300EA00FC90C7FCABEB7FC0B5FCA512
037EB3B0B6FCA518497CC820>105 D<90287FC001FFC0ECFFE0B5010F01F8010713FC033F01FE
011F13FF92B6017F809126C1FE07902680FF037F9126C3F0039026C1F8017F00039026C7C00190
26E3E0007F6CD9CF00ECE78002DE03EFC7FC02DC6D01FE6E7E14FC4A5DA24A5DA24A5DB3A8B6D8
C07F9026FFE03FB512F0A55C2E7CAD63>109 D<903A7FC001FFC0B5010F13F8033F13FE92B6FC
9126C1FE077F9126C3F0037F00039026C7C0017F6CEBCF0014DE02DC6D7F14FC5CA25CA25CB3A8
B6D8C07FEBFFE0A53B2E7CAD42>I<EC0FFF91B512F0010714FE011F6E7E90263FFC037F903AFF
E0007FF0480180EB1FF84890C76C7E48486E7E000F824980001F1780003F17C04980A2007F17E0
A300FF17F0AA007F17E0A46C6C4A13C0A2001F17806D5C000F17006C6C4A5A6C6D495A6C6D495A
6C6D495A903A7FFC03FFE0011FB6128001074AC7FC010014F0020F90C8FC342E7DAD3B>I<EB01
F0A61303A31307A3130FA2131F133FA2137FEA01FF5A000F90B512C0B7FCA4C601F0C7FCB3A5ED
01F0A91503D97FF813E01507D93FFC13C090391FFE1F806DB5FC6D1400010113FC9038003FF024
427EC12E>116 D<D97FE0EC3FF0B5EC7FFFA5000315016C81B3A85EA35E5E6CED0F7F6E131F01
7F023E7F90273FFE01FCEBFFE06DB512F86D14F0010314C09039003FFE003B2E7CAD42>I
E /Fp 8 117 df<140F5C147FEB03FF131FB6FCA313E7EA0007B3B3A7007FB612E0A4233879B7
32>49 D<DB1FFE14E00203B5EAC001021FECF803027FECFE07903B01FFFC00FF0F010701C0EB1F
DF4990C7EA07FFD93FFC804948804948804849157F4849153F4849151FA24890C9120FA2484816
07A2485AA2007F1703A34993C7FC12FFAD127F7FF001E0A2123FA26C7E18036C6C17C018076C7F
F00F806C7F6C6DED1F006C6D153E6D6C5D6D6C5DD90FFFEC03F06D01E0EB0FE0010101FCEB7FC0
6D6CB6C7FC021F14FC020314E09126001FFEC8FC3B3D7ABB48>67 D<EB1FFF48B512F0000714FC
390FF807FF001F01017F6D6C7F6F7EA282153F6C5A6C5AEA01C0C8FCA2EC07FF0103B5FC131F90
B5123F000313C0000F1300EA1FFC485A485A5B12FF5BA3157FA26C6C13FF6D5A6C6C4813FC3B1F
FC0FDFFFF00007B5120F0001EBFC0739003FF0012C267DA530>97 D<903801FFC0011F13F8017F
13FE9038FFC1FF00039038007F80D807FCEB1FC0484814E0ED0FF0485A003FEC07F8A2485AED03
FCA212FFA290B6FCA301E0C8FCA5127FA27F003F153CA26C6C147C000F15786C6C14F86C6CEB01
F06C6CEB07E06C9038E03FC0013FB51200010F13FC010013E026267DA52D>101
D<13FFB5FCA412077EB0ED7FC0913803FFF8020F13FE91381F03FFEC3C01027814804A7E4A14C0
5CA25CA291C7FCB3A4B5D8FC3F13FFA4303C7CBB37>104 D<9039FF01FF80B5000F13F0023F13
FC9138FE03FFDAF00113C000039039E0007FE0028014F0EE3FF891C7121F17FC160F17FEA3EE07
FFAAEE0FFEA3EE1FFCA217F86EEB3FF06E137F6EEBFFE06E481380DAFC07130091383FFFFC020F
13F0020190C7FC91C9FCADB512FCA430377DA537>112 D<9038FE03F000FFEB0FFE91383FFF80
91387C7FC014F00007ECFFE06C6C5A5CA25CED7FC0ED3F80ED0E0091C8FCB3A3B512FEA423267D
A529>114 D<EB0780A5130FA4131FA2133FA2137F13FF5A1207001FEBFFF8B6FCA30001EB8000
B3153CA86C147814C0017F13F8ECE1F090381FFFE0010713C0010113001E377EB627>116
D E /Fq 29 120 df<127012F812FCA2127C120CA41218A21230A212601240060F7C840E>44
D<EA01F0EA07FCEA0E0E487E38380380A2007813C0EA7001A300F013E0AE007013C0A3EA780300
381380A2381C0700EA0E0EEA07FCEA01F013227EA018>48 D<EA01801203120F12FF12F31203B3
A8EAFFFEA20F217CA018>I<EA03F0EA0FFCEA1C1F38300F80EA6007EB03C012C000F013E0EAF8
01A3EA2003120014C0A2EB0780A2EB0F00131E131C5B5B5B485A485A38070060120E120C4813E0
4813C0EA7FFFB5FCA213217EA018>I<EA03F0EA0FFCEA1C1F383007801270007813C0A21303EA
380712001480A2EB0F00130E133CEA03F8A2EA001E7FEB078014C0130314E01220127012F8A200
F013C01260EB07801230381C1F00EA0FFCEA03F013227EA018>I<EA01F0EA07FCEA0E0E487E38
3803801278127038F001C0A314E0A5127013031278EA3807EA1C0DEA0FF9EA07F1380081C01301
13031480A2383007001278130EEA701C6C5AEA1FF0EA0FC013227EA018>57
D<B612C0A23807800F14031401140015E0A215601460A3150014E0138113FFA2138113801460A2
1518A214001530A4157015F01401EC07E0B6FCA21D227EA121>69 D<903807F00890383FFC1890
38FC0E383801E0033903C001F83807800048C71278121E15385AA2007C14181278A212F81500A6
EC1FFF1278007CEB0078A2123CA27EA27E6C7E6C6C13F83801F0013900FC079890383FFE089038
07F80020247DA226>71 D<3803FFF0A238000F00B3A6127012F8A3EAF01EEA601CEA3878EA1FF0
EA07C014237EA119>74 D<EAFFFEA2EA0780B3EC0180A41403A215005CA25C143FB6FCA219227E
A11E>76 D<D8FFC0EB03FF6D5B000715E0A2D806F0130DA301781319A36D1331A36D1361A36D13
C1A29038078181A3903803C301A3EB01E6A3EB00FCA31478EA1F80D8FFF0EB3FFF143028227EA1
2D>I<3803F020380FFC60381C0EE0EA3803EA7001A2EAE000A21460A36C1300A21278127FEA3F
F0EA1FFE6C7E0003138038003FC0EB07E01301EB00F0A2147012C0A46C136014E06C13C0EAF801
38EF038038C7FF00EA81FC14247DA21B>83 D<3BFFF03FFC07FEA23B0F0007C001F00203EB00E0
1760D807806D13C0A33B03C007F001801406A216032701E00C781300A33A00F0183C06A3903978
383E0CEC301EA2161C90393C600F18A390391EC007B0A3010F14E0EC8003A36D486C5AA32F237F
A132>87 D<EA0FE0EA1FF8EA3C1C7FEA18071200A25BEA03FF120FEA3F07127C127812F01418A2
130F1278387C3FB8383FF3F0380FC3C015157E9418>97 D<EA01FEEA07FF380F0780121C383803
000078C7FC127012F0A7127814C07E381E0180380F0300EA07FEEA01F812157E9416>99
D<14E0130FA213011300AAEA03F0EA07FEEA1F07EA3C01EA38001278127012F0A712701278EA38
01EA3C03381E0EF0380FFCFEEA03F017237EA21B>I<EA01FCEA07FF380F0780381C03C0EA3801
007813E0EA7000B5FCA200F0C7FCA5127814607E6C13C0380F83803807FF00EA00FC13157F9416
>I<14F03801F1F83807FFB8380F1F38381E0F00EA1C07003C1380A5001C1300EA1E0FEA0F1EEA
1FFCEA19F00018C7FCA2121CEA1FFF6C13C04813E0383801F038700070481338A4007013700078
13F0381E03C0380FFF803801FC0015217F9518>103 D<121C121E123E121E121CC7FCA8120E12
FEA2121E120EAFEAFFC0A20A227FA10E>105 D<120E12FEA2121E120EAAEB0FFCA2EB07E0EB03
80EB0700130E13185B137813F8EA0F9C131EEA0E0E7F1480EB03C0130114E014F038FFE3FEA217
237FA21A>107 D<120E12FEA2121E120EB3ABEAFFE0A20B237FA20E>I<390E1FC07F3AFE7FE1FF
809039C0F303C03A1F807E01E0390F003C00000E1338AE3AFFE3FF8FFEA227157F942A>I<380E
1F8038FE7FC038FFC1E0381F80F0380F0070120EAE38FFE7FFA218157F941B>I<EA01FCEA07FF
380F0780381C01C0383800E0007813F00070137000F01378A700701370007813F0003813E0381C
01C0380F07803807FF00EA01FC15157F9418>I<380E1F8038FE7FE038FFC1F0380F0078120E14
3CA2141EA7143CA2000F1378EB8070EBC1F0380E7FC0EB1F0090C7FCA8EAFFE0A2171F7F941B>
I<EA0E3CEAFEFEEAFFCFEA1F8FEA0F061300120EADEAFFF0A210157F9413>114
D<EA0F88EA3FF8EA7078EAE0381318A3EAF000127FEA3FE0EA1FF0EA01F8EA003CEAC01CA212E0
A2EAF018EAF878EADFF0EA8FC00E157E9413>I<000E137038FE07F0A2EA1E00000E1370AC14F0
1301380703783803FE7FEA01F818157F941B>117 D<39FF8FF9FFA2391E01C07CD81C03133800
0EEBE030A2EB06600007EB7060A2130E39038C30C01438139C3901D81980141DA2EBF00F000014
00A2497EEB600620157F9423>119 D E /Fr 22 118 df<B51280A311037F9016>45
D<B612E015FC3907E0007F0003EC0F806F7EED01E06F7E1678167C82A282A2EE0F80A217C0A216
07A217E0AB17C0A3160F1780A3EE1F00A2163E5E167816F84B5AED07E0ED0F800007027FC7FCB6
12FC15E02B317CB033>68 D<B51280A23807F0006C5AB3B3A7487EB51280A211317DB017>73
D<D8FFF0ED7FF86D15FF0007170000035E017CEC01BEA36DEC033EA36D1406A36D6C130CA36D6C
1318A36D6C1330A36D6C1360A216C06D7EA291387C0180A391383E0300A3EC1F06A3EC0F8CA3EC
07D8A3EC03F0A3486C6C5AD80FC0157FD8FFFC91380FFFF8EC00C035317CB03D>77
D<B612C015F83907E000FE0003141FED0F80ED07C0ED03E016F01501A216F8A616F0A2150316E0
ED07C0ED0F80ED1F0015FE90B512F815C001E0C8FCB3A2487EB57EA225317CB02D>80
D<90387F80203901FFE0603807C0F8390F001CE0001E130F481307003813030078130112701400
12F0A21560A37E1500127C127E7E13C0EA1FF86CB47E6C13F86C7FC613FF010F1380010013C0EC
1FE01407EC03F01401140015F8A200C01478A57E15706C14F015E07E6CEB01C06CEB038039E780
070038C1F01E38C07FFC38800FF01D337CB125>83 D<EA01FE380FFFC0381C03E0383C00F0003E
137880141C0008131EC7FCA4EB01FE133F3801FF1EEA07F0EA0F80EA1F00123E5AA248140CA314
3EA2007C137E6CEBDF1C391F038FB8390FFF07F03903F803C01E1F7D9E21>97
D<EB3FC0EBFFF83803E01C3807801E380F003E121EA2481308007C1300A2127812F8A9127CA36C
1303121E001F1306380F800E3807C01C3803F0383800FFE0EB3F80181F7D9E1D>99
D<EC01E0143FA214031401AFEB3F81EBFFE13803E0793807800D380F0007001E130314015A127C
A2127812F8A91278127CA2123C003E1303001E13076C130F3807801D3903E071F03901FFE1FF38
003F0120327DB125>I<EB3F80EBFFE03803E0F83807803C48487E121E805A127C158000781307
12F8B6FCA200F8C8FCA61278127C123CEC01807E6CEB0300EB80063807C00E3801F03C3800FFF0
EB1FC0191F7E9E1D>I<EB03E0EB1FF8EB3C38EB707C13F0EA01E014383803C000ACB512C0A238
03C000B3A8487EEA7FFFA216327FB114>I<15F090387F03F83901FFCF1C3803C1FC390780F818
390F00780048137C001E133C003E133EA7001E133C001F137C6C13786C6C5A380FC1E0380DFFC0
D81C7FC7FC0018C8FCA2121CA2121E380FFFF814FF6C14804814C0391E0007E00038EB01F048EB
00701578481438A500701470007814F06CEB01E06CEB03C03907C01F003801FFFC38003FE01E2F
7E9F21>I<EA078012FFA2120F1207AFEB81FE903887FF8090388E07C090389803E0EBB0019038
E000F05BA35BB3486C487E3AFFFC1FFF80A221327EB125>I<1207EA0F80121FA2120FEA0700C7
FCABEA078012FFA2120F1207B3A6EA0FC0EAFFF8A20D307EAF12>I<260781FEEB3FC03BFF87FF
80FFF0903A8E07C1C0F83B0F9803E3007C2707B001E6133C9026E000FC7F495BA3495BB3486C48
6C133F3CFFFC1FFF83FFF0A2341F7E9E38>109 D<380781FE39FF87FF8090388E07C0390F9803
E03807B0019038E000F05BA35BB3486C487E3AFFFC1FFF80A2211F7E9E25>I<EB1FC0EBFFF838
01E03C3807800F390F000780001EEB03C0A248EB01E0A248EB00F0A300F814F8A8007814F0007C
1301003C14E0A26CEB03C0A26CEB07803907C01F003801F07C6CB45AEB1FC01D1F7E9E21>I<38
0780FC39FF87FF8090389E07C0390FB803E03907E000F04913F8157C5B153EA3151FA9153EA315
7C6D137815F89038E001F09038B803E090389E0FC0903887FF00EB81FC0180C7FCAB487EEAFFFC
A2202D7E9E25>I<380783E038FF8FF8EB9C7CEA0FB0EA07F0EBE038EBC000A35BB3487EEAFFFE
A2161F7E9E19>114 D<3801FC10380FFF30381E03F0EA38004813705A1430A37E6C1300127EEA
3FF06CB4FC6C1380000313E038003FF0EB03F8EB007800C0133CA2141C7EA27E14186C13386C13
7038EF01E038C3FFC03880FE00161F7E9E1A>I<13C0A51201A31203A21207120F121FB512E0A2
3803C000B01430A83801E060A23800F0C0EB7F80EB1F00142C7FAB19>I<D8078013F000FF131F
A2000F130100071300B31401A2140300031307EBC00E3901F03CF83A00FFF0FF80EB3FC0211F7E
9E25>I E /Fs 5 85 df<1630167016F0A21501A21503A21507150FA2151B821531A2156115E1
15C1EC0181A2EC0301A21406A2140C141C14181430A202607FA2ECC000A249B5FC5B91C7FC1306
A25BA25BA25B1370136013E01201000381D80FF01301D8FFFE90383FFFF0A22C337CB235>65
D<010FB6FC17C0903A003F8007F0EE01F892C7127C177E4A143E83147E188002FE140FA24A15C0
A21301A25CA21303171F5CA2130718804A143FA2130F18004A5CA2011F157E17FE4A5CA2013F4A
5A5F91C712034C5A495D160F017E4A5A4CC7FC01FE147E16F849495AED07E00001EC3F80B600FE
C8FC15F032317CB036>68 D<010FB612FEA29039003F8000173E92C7121EA24A140CA2147EA214
FEA25CA20101151CEEC0184A1400A201031301A202F05B15030107130F91B5FC93C7FCECE00F01
0F7FA2ECC006A2011F130EA2EC800C92C8FC133FA291C9FCA25BA2137EA213FEA25BA21201B512
FCA22F317CB02F>70 D<010FB512F816FF903A003F801FC0EE07E092380003F0EE01F84AEB00FC
A2147EA214FE16015CA2010115F816034A14F0EE07E01303EE0F804AEB3F00167E0107EB03F891
B512E016809138E007C0010FEB03F015014A6C7EA2011F80A25CA2013F1301A21400A249495AA2
137E170601FE150E170C5B171C000102011338B539F000FC70EE7FE0C9EA1F802F327CB034>82
D<0007B712F8A23A0FE007F00101801400D80E00491370121E001C130F121800385CA20030011F
1460127000605CA2023F14E000E016C0C790C8FCA25CA2147EA214FEA25CA21301A25CA21303A2
5CA21307A25CA2130FA25CA2131FA25C133F497E007FB512C0A22D3174B033>84
D E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300
TeXDict begin
%%EndSetup
%%Page: 0 1
bop 795 966 a Fs(D)26 b(R)g(A)f(F)h(T)225 1057 y Fr(Do)r(cumen)n(t)20
b(for)i(a)f(Standard)g(Message-P)n(assing)f(In)n(terface)652
1148 y(P)n(oin)n(t)i(to)g(P)n(oin)n(t)g(c)n(hapter)511 1331
y Fq(Marc)16 b(Snir,)g(William)d(Gropp)18 b(and)e(Ewing)h(Lusk)828
1452 y(June)g(20,)f(1993)p eop
%%Page: 1 2
bop 75 356 a Fp(Chapter)32 b(1)75 564 y Fo(P)m(oin)m(t)41 b(to)f(P)m(oin)m(t)
h(Comm)m(unication)884 780 y Fn(Marc)15 b(Snir)684 830 y(William)10
b(Gropp)j(and)h(Ewing)f(Lusk)75 967 y Fm(1.1)70 b(In)n(tro)r(duction)75
1058 y Fn(This)15 b(c)o(hapter)h(is)f(a)f(draft)h(of)g(the)g(curren)o(t)i
(prop)q(osal)d(for)h(p)q(oin)o(t-to-p)q(oin)o(t)f(comm)o(uni)o(cation.)k(The)
e(MPI)f(pro)q(ce-)75 1108 y(dures)i(are)f(sp)q(eci\014ed)i(using)d(a)h
(language)f(indep)q(enden)o(t)i(notation.)24 b(The)16 b(parameters)g(of)f
(pro)q(cedure)j(calls)e(are)75 1157 y(mark)o(ed)11 b(as)h Fl(IN)f
Fn(or)h Fl(OUT)p Fn(.)f(The)i(call)e(do)q(es)i(not)f(up)q(date)g(a)g
(parameter)g(mark)o(ed)e Fl(IN)i Fn(and)g(ma)o(y)e(up)q(date)j(a)e(parameter)
75 1207 y(mark)o(ed)18 b Fl(OUT)p Fn(.)g(If)g(a)h(parameter)f(is)h(a)g
(handle)f(to)h(an)g(opaque)g(ob)r(ject,)h(and)f(the)h(ob)r(ject)f(is)g(up)q
(dated)h(b)o(y)e(the)75 1257 y(pro)q(cedure)e(call,)d(then)i(the)g(parameter)
f(is)g(mark)o(ed)f Fl(OUT)p Fn(.)g(The)h(F)m(ortran)g(77)g(and)g(C)g
(bindings)g(are)g(describ)q(ed)i(in)75 1307 y(Chapter)f Fk(??)p
Fn(.)158 1357 y(Discussions)f(that)g(are)h(not)e(part)i(of)e(the)h(standard)h
(are)f(indicated)g(b)o(y)f(small)f(t)o(yp)q(e.)158 1485 y Fj(Discussion:)38
b Fi(The)13 b(follo)o(wing)j(sections)f(of)f(the)g(in)o(tro)q(duction)i(con)o
(tain)f(general)g(information)h(on)e(the)g(design)h(of)75 1531
y(MPI)h(pro)q(cedures.)27 b(The)16 b(material)i(should)g(b)q(e)e(mo)o(v)o(ed)
g(to)g(a)g(general)h(in)o(tro)q(duction)i(for)d(the)g(en)o(tire)h(do)q(cumen)
o(t.)27 b(The)75 1576 y(actual)14 b(binding)i(of)d(these)g(ob)r(jects)g(in)h
(F)m(ortran)g(and)f(C)g(is)g(describ)q(ed)i(in)f(Chapter)f
Fj(??)p Fi(.)75 1796 y Fm(1.2)70 b(Data)23 b(T)n(yp)r(es)75
1896 y Fh(1.2.1)55 b(Handle)75 1972 y Fn(MPI)17 b(pro)q(cedures)j(use)e(at)f
(v)n(arious)g(places)h Fg(hand)r(les)p Fn(.)28 b(Handles)18
b(are)g(used)g(to)f(access)i(opaque)e(ob)r(jects.)30 b(Suc)o(h)75
2022 y(ob)r(ject)11 b(can)g(b)q(e)g(created,)h(up)q(dated)f(and)g(destro)o(y)
o(ed)g(only)f(b)o(y)g(calling)f(suitable)h(MPI)h(pro)q(cedures,)i(and)d(pro)o
(viding)75 2072 y(the)k(handle)g(as)g(parameter.)k(A)c(handle)g(to)f(an)h
(opaque)g(ob)r(ject)g(is)g(signi\014can)o(t)f(only)g(at)h(the)h(pro)q(cess)g
(where)g(the)75 2122 y(ob)r(ject)g(w)o(as)e(created,)i(and)f(cannot)g(b)q(e)h
(transferred)g(to)f(another)g(pro)q(cess)i(\(ob)r(jects)f(are)g(lo)q(cal\).)
158 2171 y(Opaque)j(ob)r(jects)g(hide)f(from)f(the)h(user)h(the)g(in)o
(ternal)f(represen)o(tation)i(used)f(for)e(v)n(arious)h(MPI)g(ob)r(jects,)75
2221 y(th)o(us)c(allo)o(wing)e(to)h(ha)o(v)o(e)h(similar)d(calls)i(in)h(C)f
(and)h(F)m(ortran,)f(allo)o(wing)f(to)h(o)o(v)o(ercome)g(problems)g(with)g
(the)i(t)o(yping)75 2271 y(rules)f(in)f(these)i(languages,)d(and)h(allo)o
(wing)f(for)h(future)g(extension)i(of)d(their)i(functionalit)o(y)m(.)i(The)e
(mec)o(hanism)d(for)75 2321 y(opaque)k(ob)r(jects)h(used)g(here)g(lo)q(osely)
e(follo)o(ws)f(the)j(POSIX)f(F)m(ortran)g(binding)f(standard.)158
2371 y(An)i(opaque)h(ob)r(ject)g(can)f(b)q(e)h Fg(p)n(ersistent)f
Fn(or)g Fg(ephemer)n(al)p Fn(.)22 b(A)15 b(p)q(ersisten)o(t)i(ob)r(ject)f(p)q
(ersists)h(un)o(til)e(destro)o(y)o(ed)75 2421 y(b)o(y)g(an)h(explicit)f(op)q
(eration.)23 b(An)16 b(ephemeral)f(ob)r(ject)i(is)e(go)q(o)q(d)h(for)f(a)g
(single)h(use;)g(th)o(us,)h(an)e(ephemeral)g(ob)r(ject)75 2470
y(asso)q(ciated)j(with)g(a)f(comm)o(unicatio)o(n)e(op)q(eration)i(disapp)q
(ears)i(once)f(this)g(op)q(eration)f(is)h(completed)f(\(or)g(once)75
2520 y(this)d(ob)r(ject)h(is)e(not)h(needed)i(an)o(ymore)c(for)i(the)g
(completion)e(of)h(the)i(op)q(eration\).)158 2570 y(Opaque)i(ob)r(ject)g(are)
g(created)h(b)o(y)e(calls)g(that)g(are)h(sp)q(eci\014c)g(to)g(eac)o(h)f(ob)r
(ject)i(t)o(yp)q(e.)25 b(They)17 b(are)g(destro)o(y)o(ed)75
2620 y(b)o(y)d(a)f(call)h(to)f Fl(MPI)p 363 2620 14 2 v 15
w(FREE)p Fn(.)g(Additional)f(MPI)j(functions)f(are)g(a)o(v)n(ailable)e(to)h
(access)j(and)e(up)q(date)h(sp)q(eci\014c)g(opaque)75 2670
y(ob)r(jects.)965 2828 y(1)p eop
%%Page: 2 3
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)733 b Fn(2)158 45 y Fk(MPI)p 257 45 15 2 v 17 w(FREE\(handle\))75
161 y(IN)16 b(handle)j Fn(handle)14 b(to)g(ob)r(ject)158 241
y(Mark)c(the)i(ob)r(ject)f(asso)q(ciated)g(with)f(the)i(handle)e(for)g
(destruction.)18 b(The)11 b(ob)r(ject)h(can)e(b)q(e)i(destro)o(y)o(ed)f(as)g
(so)q(on)75 290 y(as)j(there)h(there)g(is)e(no)h(p)q(ending)g(op)q(eration)f
(that)h(is)g(using)f(this)h(ob)r(ject,)g(and)f(the)i(handle)e(b)q(ecomes)h
(unde\014ned.)75 340 y(F)m(or)19 b(example,)g(if)f(a)h(comm)o(unication)d(ob)
r(ject)k(is)g(freed,)h(after)e(the)h(comm)o(unication)c(started)21
b(but)e(b)q(efore)h(it)75 390 y(completed,)14 b(then)h(the)g(p)q(ending)g(op)
q(eration)f(is)g(not)h(a\013ected;)h(one)e(can)h(use)h(the)f(handle)f(in)g
(calls)g(to)h Fl(MPI)p 1776 390 14 2 v 15 w(WAIT)75 440 y Fn(or)f
Fl(MPI)p 195 440 V 15 w(STATUS)f Fn({)i(one,)f(in)g(fact,)g(m)o(ust)f
(complete)h(the)h(comm)o(unicatio)o(n)d(with)i(a)g(successful)i(call)e(to)g
Fl(MPI)p 1776 440 V 15 w(WAIT)75 490 y Fn(or)f Fl(MPI)p 194
490 V 15 w(STATUS)p Fn(.)f(Ho)o(w)o(ev)o(er,)i(once)g(the)g(op)q(eration)f
(completes,)g(it)g(is)g(erroneous)i(to)e(reuse)i(the)f(freed)g(handle)f(for)
75 539 y(a)h(new)g(comm)o(unicatio)o(n.)158 672 y Fj(Implemen)o(tation)k
(note:)54 b Fi(Some)18 b(ob)r(jects,)h(suc)o(h)f(as)g(bu\013er)h(descriptor)g
(ob)r(jects,)g(can)f(b)q(e)g(used)h(b)o(y)f(sev)o(eral)75 722
y(distinct)h(concurren)o(t)f(comm)o(unication)h(op)q(erations.)31
b(Th)o(us,)18 b(to)f(\014nd)g(out)g(whether)h(suc)o(h)f(ob)r(ject)g(can)h(b)q
(e)f(freed,)g(one)75 772 y(needs)d(a)f(reference)g(coun)o(t)h(of)e(p)q
(ending)k(op)q(erations.)1931 861 y Fe(TO)11 b(DISCUSS)158
987 y Fj(Discussion:)33 b Fi(W)m(e)12 b(do)g(not)f(ha)o(v)o(e)h(y)o(et)f(a)h
(mec)o(hanism)h(to)e(con)o(trol)h(what)g(storage)g(is)g(allo)q(cated)h(for)e
(opaque)i(ob)r(jects.)75 1037 y(Some)g(b)q(eliev)o(e)i(it)f(is)f(desirable)j
(to)d(allo)o(w)h(the)f(user)g(to)g(con)o(trol)h(this)g(allo)q(cation.)158
1204 y Fk(MPI)p 257 1204 15 2 v 17 w(ASSOCIA)l(TED\(handle,)g(t)o(yp)q(e\))75
1320 y(IN)i(handle)j Fn(handle)14 b(to)g(ob)r(ject)75 1401
y Fk(OUT)i(t)o(yp)q(e)k Fn(state)158 1481 y(Returns)c(the)f(t)o(yp)q(e)g(of)f
(the)i(ob)r(ject)f(the)h(handle)e(is)h(curren)o(tly)h(asso)q(ciated)f(with,)f
(if)g(suc)o(h)i(exists.)21 b(Returns)75 1531 y(the)14 b(sp)q(ecial)h(t)o(yp)q
(e)f Fl(MPI)p 444 1531 14 2 v 15 w(NULL)f Fn(if)g(the)i(handle)e(is)h(not)g
(curren)o(tly)h(asso)q(ciated)f(with)g(an)o(y)f(ob)r(ject.)158
1581 y(MPI)18 b(ma)o(y)e(pro)o(vide)h(prede\014ned)j(opaque)d(ob)r(jects)i
(and)f(prede\014ned,)i(static)e(handles)g(to)f(these)i(ob)r(jects.)75
1631 y(Suc)o(h)14 b(ob)r(jects)h(ma)o(y)d(not)i(b)q(e)h(destro)o(y)o(ed.)75
1746 y Fh(1.2.2)55 b(Arra)n(y)19 b(of)g(handles)75 1823 y Fn(An)d(MPI)g(call)
e(ma)o(y)g(need)j(a)e(parameter)g(that)h(is)f(an)g Fg(arr)n(ay)h(of)h(hand)r
(les)p Fn(.)23 b(The)17 b(arra)o(y-of-handles)d(is)i(a)f(regular)75
1873 y(arra)o(y)e(with)g(en)o(tries)h(of)f(t)o(yp)q(e)h Fl(handle)e
Fn(in)h(consecutiv)o(e)i(initial)c(lo)q(cations)i(in)g(the)h(arra)o(y)m(.)j
(Whenev)o(er)d(suc)o(h)g(arra)o(y)75 1923 y(is)g(used,)g(an)g(additional)e
Fl(len)h Fn(parameter)g(is)h(required)h(to)e(indicate)h(the)h(n)o(um)o(b)q
(er)e(of)g(v)n(alid)f(en)o(tries)j(\(unless)g(this)75 1972
y(n)o(um)o(b)q(er)e(can)h(b)q(e)h(deriv)o(ed)f(otherwise\).)158
2101 y Fj(Discussion:)158 2146 y Fi(The)d(reason)g(for)g(not)g(ha)o(ving)h
(self-delimiti)q(ng)i(arra)o(ys)d(is)h(that)f(records)g(are)g(not)g
(\014rst-class)h(citizens)g(in)g(F)m(ortran)f(and)75 2192 y(that)h(ha)o(ving)
i(an)f(arra)o(y)f(where)h(one)f(en)o(try)h(enco)q(des)g(length,)g(whereas)g
(the)f(other)h(en)o(tries)g(enco)q(de)g(handles)h(w)o(as)e(deemed)75
2238 y(to)k(b)q(e)g(to)q(o)g(error-prone.)27 b(This)17 b(line)g(of)f(argumen)
o(tation)i(really)g(implies)g(that)e(w)o(e)g(do)g(not)g(view)h(arra)o
(y-of-handles)h(as)75 2283 y(an)f(opaque)g(ob)r(ject,)h(and)f(that)f(w)o(e)g
(exp)q(ect)h(the)g(user)g(to)f(build)j(these)e(ob)r(jects)f(explicitl)q(y)m
(,)k(not)c(via)i(MPI)e(calls.)29 b(The)75 2329 y(alternativ)o(e)15
b(is)f(for)e(arra)o(y-of-handles)k(to)c(b)q(e)i(an)f(opaque)h(ob)r(ject,)f
(manipulated)j(via)e(MPI)f(calls.)75 2527 y Fh(1.2.3)55 b(State)75
2604 y Fn(MPI)14 b(pro)q(cedures)i(use)e(at)f(v)n(arious)g(places)h(argumen)o
(ts)f(with)g Fg(state)g Fn(t)o(yp)q(es.)19 b(The)14 b(v)n(alues)f(of)g(suc)o
(h)h(data)g(t)o(yp)q(e)g(are)75 2654 y(all)f(iden)o(ti\014ed)h(b)o(y)g
(names,)e(and)i(no)g(op)q(eration)g(is)f(de\014ned)i(on)f(them.)k(F)m(or)13
b(example,)f(the)j Fl(MPI)p 1589 2654 V 15 w(APPEND)e Fn(routine)75
2704 y(has)h(a)g(state)g(t)o(yp)q(e)h(parameter)e(with)h(v)n(alues)f
Fl(MPI)p 864 2704 V 16 w(INTEGER)p Fn(,)e Fl(MPI)p 1123 2704
V 16 w(REAL,)h Fn(etc.)p eop
%%Page: 3 4
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)733 b Fn(3)75 45 y Fh(1.2.4)55 b(Named)18 b(constan)n(ts)75
122 y Fn(MPI)e(pro)q(cedures)j(sometimes)14 b(assign)i(a)g(sp)q(ecial)g
(meaning)e(to)i(a)g(sp)q(ecial)g(v)n(alue)g(of)f(a)h(basic)g(t)o(yp)q(e)h
(parameter;)75 172 y(e.g.)i Fl(tag)14 b Fn(is)g(an)g(in)o(teger)g(v)n(alued)g
(parameter)g(of)g(p)q(oin)o(t-to-p)q(oin)o(t)f(comm)o(unicatio)o(n)f(op)q
(erations,)i(with)g(a)g(sp)q(ecial)75 221 y(wildcard)e(v)n(alue,)g
Fl(MPI)p 429 221 14 2 v 16 w(ANY)p 511 221 V 15 w(TAG)p Fn(.)f(Suc)o(h)j
(parameters)f(will)e(ha)o(v)o(e)i(a)f(range)h(of)g(regular)g(v)n(alues,)f
(whic)o(h)h(is)f(a)h(prop)q(er)75 271 y(subrange)f(of)f(the)h(range)g(of)e(v)
n(alues)i(of)e(the)i(corresp)q(onding)h(basic)e(t)o(yp)q(e;)i(sp)q(ecial)e(v)
n(alues)h(\(suc)o(h)g(as)f Fl(MPI)p 1700 271 V 15 w(ANY)p 1781
271 V 15 w(TAG)p Fn(\))75 321 y(will)j(b)q(e)j(outside)f(the)g(regular)g
(range.)24 b(The)16 b(range)g(of)g(regular)f(v)n(alues)h(can)g(b)q(e)g
(queried,)h(and)e(sometimes)g(set,)75 371 y(using)f(en)o(vironmen)o(t)e
(inquiry)i(or)f(en)o(vironmen)o(t)g(setting)h(functions)g(\(Chapter)h
Fk(??)p Fn(\).)158 499 y Fj(Discussion:)158 545 y Fi(Implemen)o(ters)i
(should)g(detect,)f(whenev)o(er)g(p)q(ossible,)i(illegal)g(uses)e(of)f(\\sp)q
(ecial)j(v)n(alues".)25 b(Th)o(us,)16 b(the)g(use)g(of)f(the)75
590 y Fd(MPI)p 137 590 12 2 v 13 w(ANY)p 210 590 V 13 w(TAG)d
Fi(v)n(alue)i(to)f(tag)g(a)g(message)g(sen)o(t)h(will)g(b)q(e)g(\015agged)g
(as)f(an)g(error.)75 789 y Fh(1.2.5)55 b(Choice)75 866 y Fn(MPI)15
b(functions)h(sometimes)d(use)j(parameters)f(with)g(a)f Fg(choic)n(e)i
Fn(\(or)f(union\))g(data)f(t)o(yp)q(e.)23 b(I.e.,)14 b(distinct)h(calls)g(to)
75 916 y(the)i(same)f(routine)h(ma)o(y)e(pass)i(b)o(y)f(reference)j(actual)d
(parameters)h(of)f(di\013eren)o(t)i(t)o(yp)q(es.)27 b(The)17
b(mec)o(hanism)d(for)75 966 y(pro)o(viding)f(suc)o(h)h(parameters)g(will)f
(di\013er)h(from)e(language)h(to)h(language.)158 1094 y Fj(Discussion:)158
1140 y Fi(The)i(F)m(ortran)g(77)g(standard)h(sp)q(eci\014es)h(that)e(the)g(t)
o(yp)q(e)g(of)g(actual)h(argumen)o(ts)g(need)f(to)g(agree)g(with)h(the)f(t)o
(yp)q(e)g(of)75 1185 y(dumm)o(y)g(argumen)o(ts;)i(no)f(construct)f(equiv)n
(alen)o(t)i(to)e(C)g(p)q(oin)o(ters)h(is)f(a)o(v)n(ailable.)29
b(Th)o(us,)16 b(it)g(w)o(ould)h(seem)f(that)g(there)g(is)75
1231 y(no)f(standard)h(conforming)g(mec)o(hanism)g(to)e(supp)q(ort)i(c)o
(hoice)g(parameters.)22 b(Ho)o(w)o(ev)o(er,)14 b(most)h(F)m(ortran)g
(compiler)h(either)75 1277 y(don't)g(c)o(hec)o(k)g(t)o(yp)q(e)g(consistency)i
(of)e(calls)h(to)f(external)h(routines,)g(or)f(supp)q(ort)h(a)f(sp)q(ecial)h
(mec)o(hanism)h(to)d(link)j(foreign)75 1322 y(\(e.g.,)c(C\))g(routines.)23
b(W)m(e)15 b(accept)g(this)h(nonconformit)o(y)g(with)f(F)m(ortran)g(77)g
(standard.)23 b(I.e.,)14 b(w)o(e)g(accept)h(that)g(the)g(same)75
1368 y(routine)f(ma)o(y)g(b)q(e)f(passed)h(an)f(actual)h(parameter)g(of)f(a)g
(di\013eren)o(t)h(t)o(yp)q(e)g(at)f(distinct)i(calls.)158 1414
y(Generic)h(routines)g(can)f(b)q(e)g(used)g(in)g(F)m(ortran)g(90)g(to)g(pro)o
(vide)h(a)e(standard)i(conforming)g(solution.)24 b(This)16
b(solution)75 1459 y(will)f(b)q(e)e(consisten)o(t)h(with)g(our)f(nonstandard)
i(conforming)g(F)m(ortran)e(77)g(solution.)75 1679 y Fm(1.3)70
b(Pro)r(cesses)75 1853 y Fj(Discussion:)18 b Fi(This)c(material)g(b)q(elongs)
h(to)e(an)g(in)o(tro)q(duction)j(or)d(en)o(vironmen)o(t)i(section)158
1985 y Fn(An)k(MPI)g(program)e(is)i(executed)h(b)o(y)f(sev)o(eral)g
(autonomous)e(pro)q(cesses)22 b(that)c(eac)o(h)i(execute)g(their)f(o)o(wn)75
2035 y(co)q(de,)d(in)f(a)h(MIMD)f(st)o(yle.)23 b(The)16 b(co)q(des)h
(executed)g(b)o(y)f(eac)o(h)g(pro)q(cess)h(need)f(not)g(b)q(e)g(iden)o
(tical.)22 b(The)16 b(pro)q(cesses)75 2085 y(comm)o(unicate)d(via)h(calls)h
(to)g(MPI)g(comm)o(unication)d(primitiv)o(es.)19 b(T)o(ypically)m(,)13
b(eac)o(h)j(pro)q(cessor)h(executes)g(in)e(its)75 2135 y(o)o(wn)f(address)i
(space,)f(although)f(shared-memory)f(implem)o(en)o(tations)f(of)i(MPI)h(are)g
(p)q(ossible.)20 b(This)14 b(do)q(cumen)o(t)75 2185 y(sp)q(eci\014es)i(the)f
(b)q(eha)o(vior)f(of)g(a)g(parallel)g(program)e(assuming)h(that)i(only)e(MPI)
i(calls)f(are)h(used)g(for)f(comm)o(unica-)75 2234 y(tion.)j(The)d(in)o
(teraction)f(of)g(an)g(MPI)h(program)e(with)h(other)h(p)q(ossible)f(means)g
(of)g(comm)o(unicatio)o(n)e(\(e.g.,)h(shared)75 2284 y(memory\))g(is)h(not)h
(sp)q(eci\014ed.)158 2334 y(MPI)f(do)q(es)g(not)f(sp)q(ecify)h(the)g
(execution)g(mo)q(del)e(for)h(eac)o(h)h(pro)q(cess.)20 b(A)12
b(pro)q(cess)i(can)f(b)q(e)g(sequen)o(tial,)f(or)h(can)75 2384
y(b)q(e)h(m)o(ultithreaded,)f(with)g(threads)i(p)q(ossibly)e(executing)i
(concurren)o(tly)m(.)j(Care)c(has)g(b)q(een)h(tak)o(en)f(to)f(mak)o(e)g(MPI)
75 2434 y(\\thread-safe",)h(b)o(y)f(a)o(v)o(oiding)f(the)j(use)f(of)g
(implicit)d(global)h(states.)158 2483 y(MPI)h(do)q(es)g(not)f(sp)q(ecify)i
(either)f(the)g(in)o(teraction)f(of)g(pro)q(cesses)k(with)c(signals,)f(in)h
(a)h(Unix)f(en)o(vironmen)o(t,)f(or)75 2533 y(other)h(ev)o(en)o(ts)h(that)f
(do)g(not)g(relate)g(to)g(MPI)g(comm)o(unicatio)o(n.)j(I.e.,)c(signals)g(are)
h(not)g(signi\014can)o(t)g(from)e(the)i(view)75 2583 y(p)q(oin)o(t)h(of)g
(MPI,)g(and)h(implemen)o(ters)e(should)h(attempt)g(to)g(implemen)o(t)e(MPI)j
(so)g(that)f(signals)g(are)h(transparen)o(t:)75 2633 y(an)g(MPI)g(call)f
(susp)q(ended)j(b)o(y)d(a)h(signal)f(should)h(resume)g(and)f(complete)h
(after)g(the)g(signal)f(is)h(handled.)p eop
%%Page: 4 5
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)733 b Fn(4)158 45 y(MPI)21 b(do)q(es)g(not)f(pro)o(vide)g(mec)o
(hanisms)f(to)h(sp)q(ecify)h(the)g(initial)d(allo)q(cation)h(of)g(pro)q
(cesses)k(to)e(an)f(MPI)75 95 y(computation)e(and)i(their)g(binding)f(to)h
(ph)o(ysical)f(pro)q(cessors.)38 b(It)20 b(is)f(exp)q(ected)j(that)e(v)o
(endors)h(will)d(pro)o(vide)75 145 y(mec)o(hanisms)9 b(to)j(do)f(so)g(either)
h(at)g(load)e(time)g(or)i(at)f(run)h(time.)j(Suc)o(h)d(mec)o(hanisms)e(will)g
(allo)o(w)f(the)j(sp)q(eci\014cation)75 195 y(of)h(the)h(initial)e(n)o(um)o
(b)q(er)h(of)g(required)i(pro)q(cesses,)h(the)e(co)q(de)h(to)e(b)q(e)i
(executed)g(b)o(y)f(eac)o(h)g(initial)e(pro)q(cess,)j(and)e(the)75
244 y(allo)q(cation)19 b(of)g(pro)q(cesses)k(to)d(pro)q(cessors.)40
b(Also,)21 b(the)g(curren)o(t)h(prop)q(osal)d(do)q(es)i(not)g(pro)o(vide)f
(for)g(dynamic)75 294 y(creation)14 b(or)g(deletion)g(of)g(pro)q(cesses)i
(during)e(program)f(execution)h(\(the)h(total)f(n)o(um)o(b)q(er)f(of)g(pro)q
(cesses)k(is)d(\014xed\),)75 344 y(although)f(it)g(is)h(in)o(tended)h(to)e(b)
q(e)i(consisten)o(t)g(with)e(suc)o(h)i(extension.)k(Finally)m(,)11
b(the)k(curren)o(t)g(prop)q(osal)e(do)q(es)i(not)75 394 y(sp)q(ecify)g(a)g
(naming)e(sc)o(heme)i(for)f(pro)q(cesses.)24 b(W)m(e)15 b(prop)q(ose)h(to)e
(alw)o(a)o(ys)g(iden)o(tify)g(pro)q(cesses)k(according)d(to)g(their)75
444 y(relativ)o(e)f(rank)g(in)f(a)h(group,)f(so)h(that,)f(e\013ectiv)o(ely)m
(,)h(pro)q(cesses)j(are)d(iden)o(ti\014ed)g(b)o(y)g(consecutiv)o(e)h(in)o
(tegers.)75 560 y Fh(1.3.1)55 b(Error)18 b(Handling)75 719
y Fj(Discussion:)35 b Fi(This)14 b(section)g(should)h(b)q(e)e(mo)o(v)o(ed)h
(to)e(a)h(general)i(in)o(tro)q(duction.)158 852 y Fn(MPI)h(pro)o(vides)h(the)
f(user)h(with)f(reliable)g(message)g(transmission:)21 b(A)16
b(message)g(sen)o(t)h(is)f(alw)o(a)o(ys)f(receiv)o(ed)75 901
y(correctly)m(,)20 b(and)f(the)g(user)h(do)q(es)f(not)g(need)g(to)g(c)o(hec)o
(k)g(for)g(transmission)e(errors,)k(time-outs,)d(or)h(other)g(error)75
951 y(conditions.)f(In)c(other)g(w)o(ords,)g(MPI)g(do)q(es)h(not)f(pro)o
(vide)g(mec)o(hanisms)e(for)h(dealing)g(with)h(failures)f(in)h(the)g(com-)75
1001 y(m)o(unication)9 b(system.)17 b(Where)12 b(the)g(MPI)f(implemen)o
(tation)d(is)j(built)f(on)h(an)g(unreliable)g(underlying)g(mec)o(hanism,)75
1051 y(then)16 b(it)f(is)g(the)h(job)f(of)g(the)h(implem)o(en)o(ter)e(of)h
(the)h(MPI)f(subsystem)h(to)f(insulate)g(the)h(user)h(from)c(this)j(unrelia-)
75 1101 y(bilit)o(y)m(,)11 b(or)j(to)f(re\015ect)j(unreco)o(v)o(erable)f
(errors)g(as)e(global)f(program)g(failures.)18 b(Similarly)10
b(MPI)k(itself)f(pro)o(vides)h(no)75 1150 y(mec)o(hanisms)e(for)h(handling)g
(no)q(de)h(failures.)158 1200 y(Of)c(course,)i(MPI)e(programs)f(ma)o(y)f
(still)i(b)q(e)h(erroneous.)18 b(A)10 b Fk(program)g(error)f
Fn(can)h(o)q(ccur)i(when)e(an)g(MPI)h(call)75 1250 y(is)i(called)g(with)g(an)
g(incorrect)h(parameter)f(\(non-existing)g(destination)g(in)f(a)h(send)h(op)q
(eration,)f(bu\013er)h(to)q(o)f(small)75 1300 y(in)k(a)f(receiv)o(e)j(op)q
(eration,)e(etc.\))29 b(This)17 b(t)o(yp)q(e)g(of)g(error)h(w)o(ould)e(o)q
(ccur)i(in)f(an)o(y)f(implemen)o(tation.)24 b(In)18 b(addition,)75
1350 y(a)f Fk(resource)i(error)e Fn(ma)o(y)f(o)q(ccur)i(when)h(a)e(program)f
(exceeds)k(the)e(amoun)o(t)e(of)i(a)o(v)n(ailable)d(system)j(resources)75
1400 y(\(n)o(um)o(b)q(er)12 b(of)f(p)q(ending)i(messages,)f(system)g
(bu\013ers,)i(etc.\).)k(The)12 b(o)q(ccurrence)k(of)11 b(this)i(t)o(yp)q(e)f
(of)g(error)h(dep)q(ends)h(on)75 1449 y(the)j(amoun)o(t)d(of)i(a)o(v)n
(ailable)d(resources)19 b(in)d(the)g(system)g(and)g(the)h(resource)h(allo)q
(cation)c(mec)o(hanism)g(used;)k(this)75 1499 y(ma)o(y)13 b(di\013er)j(from)d
(system)i(to)h(system.)21 b(The)16 b(recommended)e(implemen)o(tation)e(will)i
(pro)o(vide)h(generous)h(limits)75 1549 y(on)h(some)f(of)h(the)g(resources)j
(so)d(as)g(to)g(alleviate)f(the)i(p)q(ortabilit)o(y)e(problem)g(this)h
(represen)o(ts.)30 b(One)18 b(can)g(also)75 1599 y(write)c
Fk(safe)g Fn(programs,)e(that)i(are)g(not)g(sub)r(ject)h(to)f(resource)i
(errors.)158 1649 y(All)e(MPI)h(calls)f(return)i(an)e(error)i(parameter)e
(that)h(indicates)g(successful)h(completion)d(of)h(the)i(op)q(eration,)75
1698 y(or)g(the)g(error)h(condition)e(that)g(o)q(ccurred,)j(otherwise.)24
b(Ho)o(w)o(ev)o(er,)17 b(MPI)f(do)q(es)g(not)g(require)g(the)h(user)f(to)g(c)
o(hec)o(k)75 1748 y(error)h(parameters.)23 b(It)16 b(is)g(recommended)e(to)i
(pro)o(vide)f(an)h(implemen)o(tatio)o(n)d(where)k(the)f(en)o(vironmen)o(t)f
(for)g(an)75 1798 y(MPI)f(execution)g(can)g(b)q(e)g(set)h(so)e(that)h(an)o(y)
f(error)h(encoun)o(tered)i(in)d(an)h(MPI)f(call)g(will)f(cause)j(a)e(program)
f(to)h(fail)75 1848 y(with)h(a)h(suitable)f(error)i(message)e(returned)j(to)d
(the)i(user.)21 b(The)15 b(en)o(vironmen)o(t)f(for)g(an)h(MPI)g(execution)g
(can)g(b)q(e)75 1898 y(also)d(set)j(so)e(that)g(\(nonfatal\))f(errors)i(do)f
(not)g(cause)h(a)f(program)f(to)h(fail,)e(and)i(the)h(user)g(can)f(pro)o
(vide)g(his)g(or)g(her)75 1947 y(o)o(wn)g(error)i(reco)o(v)o(ery)g(co)q(de.)
158 1997 y(MPI)g(calls)g(ma)o(y)e(initiate)h(op)q(erations)h(that)g(con)o
(tin)o(ue)g(async)o(hronously)g(after)g(the)h(call)e(returned.)23
b(Th)o(us,)75 2047 y(the)d(op)q(eration)e(ma)o(y)f(return)k(with)d(a)h(co)q
(de)h(indicating)d(successful)k(completion,)d(y)o(et)h(later)g(cause)h(an)f
(error)75 2097 y(exception)d(to)f(b)q(e)g(raised.)22 b(If)15
b(there)h(is)f(a)g(subsequen)o(t)i(call)d(that)h(relates)h(to)f(the)h(same)e
(op)q(eration)h(\(e.g.,)f(a)h(call)75 2147 y(that)i(v)o(eri\014es)i(that)e
(an)g(async)o(hronous)i(op)q(eration)e(has)h(completed\))f(then)h(the)g
(error)g(parameter)f(asso)q(ciated)75 2197 y(with)e(this)g(call)g(will)f(b)q
(e)i(used)g(to)f(indicate)h(the)g(nature)g(of)e(the)i(error.)24
b(In)15 b(a)g(few)h(cases,)g(the)g(error)g(ma)o(y)e(o)q(ccur)75
2246 y(after)h(all)f(calls)h(that)g(relate)h(to)e(the)i(op)q(eration)f(ha)o
(v)o(e)g(completed,)f(so)h(that)h(no)e(error)i(parameter)f(can)g(b)q(e)h
(used)75 2296 y(to)e(indicate)h(the)g(nature)g(of)f(the)h(error)g(\(e.g.,)f
(an)g(error)h(in)f(a)g(send)i(with)e(the)h(ready)g(mo)q(de\).)k(Suc)o(h)c
(error)g(m)o(ust)75 2346 y(b)q(e)g(treated)g(as)f(fatal,)e(since)j
(information)10 b(cannot)15 b(b)q(e)f(returned)i(for)d(the)i(user)g(to)e
(reco)o(v)o(er)i(from)e(it.)158 2478 y Fj(Discussion:)38 b
Fi(A)13 b(p)q(ossible)j(mec)o(hanism)f(is)g(to)e(ha)o(v)o(e)i(MPI)e(calls)i
(generate)g(a)f(signal)h(that)f(can)g(b)q(e)g(ignored)i(when)75
2528 y(an)e(error)f(is)h(encoun)o(tered.)20 b(A)13 b(more)g(mo)q(dular)i(mec)
o(hanism)g(that)f(allo)o(ws)g(to)g(handle)h(an)e(exception)j(within)e(its)g
(con)o(text)75 2578 y(is)g(preferred.)p eop
%%Page: 5 6
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)733 b Fn(5)75 45 y Fm(1.4)70 b(Messages)75 136 y Fn(A)14
b(message)g(consists)g(of)g(an)f Fg(envelop)n(e)i Fn(and)f
Fg(data)p Fn(.)75 251 y Fh(1.4.1)55 b(Data)75 328 y Fn(The)17
b(data)f(part)h(of)f(a)g(message)g(consists)h(of)f(a)g(sequence)j(of)d(v)n
(alues,)g(eac)o(h)h(of)f(a)g(basic)h(datat)o(yp)q(e)g(in)f(the)h(host)75
377 y(language.)29 b(Th)o(us,)19 b(in)e(F)m(ortran)h(77,)f(a)h(message)f
(consists)i(of)e(a)h(sequence)i(of)d(v)n(alues)h(that)g(are)g(eac)o(h)g(of)f
(t)o(yp)q(e)75 427 y Fl(INTEGER)p Fn(,)12 b Fl(REAL)p Fn(,)h
Fl(DOUBLE)20 b(PRECISION)p Fn(,)12 b Fl(COMPLEX)p Fn(,)g Fl(DOUBLE)20
b(PRECISION)g(COMPLEX)p Fn(,)12 b Fl(LOGICAL)p Fn(,)g(or)i(\(length)g(1\))75
477 y Fl(CHARACTER)p Fn(.)i(A)i(message)f(ma)o(y)f(also)h(con)o(tain)h(a)f(v)
n(alue)h(of)f(t)o(yp)q(e)h Fl(BYTE)p Fn(,)f(whic)o(h)h(consists)h(of)e(8)h
(binary)f(digits.)75 527 y(A)e(b)o(yte)g(is)g(di\013eren)o(t)h(from)d(a)i(c)o
(haracter.)23 b(Di\013eren)o(t)15 b(mac)o(hines)f(ma)o(y)f(ha)o(v)o(e)i
(di\013eren)o(t)h(represen)o(tations)h(for)d(the)75 577 y(same)e(c)o
(haracter,)i(or)f(ma)o(y)e(use)i(more)f(than)h(one)g(b)o(yte)g(to)g(represen)
o(t)i(a)e(c)o(haracter.)19 b(On)13 b(the)g(other)h(hand,)e(a)h(b)o(yte)75
626 y(has)h(the)h(same)e(binary)g(v)n(alue)g(on)h(an)o(y)f(mac)o(hine.)k(A)d
(message)g(ma)o(y)d(mix)h(v)n(alues)i(of)f(di\013eren)o(t)i(t)o(yp)q(es.)158
755 y Fj(Missing:)158 800 y Fi(Need)g(to)h(agree)g(on)f(the)h(C)f(t)o(yp)q
(es)h(\(including)i(handling)g(of)e(signed/unsign)q(ed\),)i(and)e(on)g(F)m
(ortran)g(90)f(t)o(yp)q(es)h(\(in-)75 846 y(cluding)f(handling)h(of)d
(kinds\).)75 1044 y Fh(1.4.2)55 b(En)n(v)n(elop)r(e)75 1120
y Fn(The)14 b(follo)o(wing)e(information)f(is)i(asso)q(ciated)i(with)e(eac)o
(h)i(message:)75 1197 y Fk(source)20 b Fn(The)14 b(rank)g(of)f(the)i(sending)
f(pro)q(cess)h(\(in)o(teger\))75 1277 y Fk(destinatio)o(n)j
Fn(The)c(rank)g(of)f(the)i(receiving)f(pro)q(cess)i(\(in)o(teger\))75
1357 y Fk(tag)k Fn(User)15 b(de\014ned)g(\(in)o(teger\))75
1437 y Fk(con)o(text)k Fn(comm)o(unication)11 b(con)o(text)j(\(handle\))158
1514 y(The)g(range)g(of)f(v)n(alid)f(v)n(alues)h(for)g(the)h
Fk(source)f Fn(and)g Fk(destination)d Fn(\014elds)k(is)f Fl(0)22
b(...)43 b(n-1)p Fn(,)12 b(where)j Fl(n)e Fn(is)g(the)75 1564
y(n)o(um)o(b)q(er)e(of)h(pro)q(cesses)j(in)c(the)i(sp)q(eci\014ed)h(con)o
(text.)k Fl(source)j(=)g(destination)10 b Fn(is)i(allo)o(w)o(ed:)k(a)c(pro)q
(cess)i(can)e(send)75 1614 y(a)i(message)f(to)h(itself.)158
1664 y(The)g(ranges)h(of)e(v)n(alid)f(v)n(alues)i(for)f Fl(tag)g
Fn(is)h(implem)o(en)o(tation)d(dep)q(enden)o(t,)k(and)f(can)g(b)q(e)g(found)f
(b)o(y)h(calling)e(a)75 1714 y(suitable)i(query)g(function,)f(as)h(describ)q
(ed)i(in)d(Chapter)i Fk(??)p Fn(.)158 1763 y(The)f Fl(tag)e
Fn(\014eld)i(can)f(b)q(e)h(arbitrarily)e(set)j(b)o(y)e(the)h(application,)d
(and)i(can)h(b)q(e)g(used)g(to)f(distinguish)g(di\013eren)o(t)75
1813 y(messages.)158 1863 y Fl(Context)f Fn(should)i(b)q(e)h(a)e(con)o(text)i
(shared)g(b)o(y)e(b)q(oth)h(source)h(and)f(destination.)158
1913 y(The)g(actual)g(mec)o(hanism)d(used)k(to)f(asso)q(ciate)g(an)g(en)o(v)o
(elop)q(e)g(with)g(a)f(message)h(is)g(implem)o(en)o(tation)d(dep)q(en-)75
1963 y(den)o(t;)h(some)f(of)g(the)i(information)8 b(\(e.g.,)j
Fk(sender)f Fn(or)i Fk(receiv)o(er)p Fn(\))e(ma)o(y)g(b)q(e)i(implicit,)d
(and)i(need)i(not)f(b)q(e)g(explicitly)75 2012 y(carried)j(b)o(y)e(a)h
(message.)158 2145 y Fj(Discussion:)42 b Fi(\\Con)o(text")15
b(has)g(no)o(w)g(b)q(ecome)g(\\comm)o(unicator",)i(but)e(this)g(w)o(ord)g(is)
g(akw)o(ard)g(to)g(use.)22 b(Sugges-)75 2195 y(tions?)75 2413
y Fm(1.5)70 b(Comm)n(unication)20 b(Bu\013ers)75 2504 y Fn(The)h(basic)f(p)q
(oin)o(t)g(to)g(p)q(oin)o(t)g(comm)o(unicatio)o(n)e(op)q(erations)i(are)h
Fk(send)e Fn(and)h Fk(receiv)o(e)p Fn(.)36 b(A)20 b Fk(send)f
Fn(op)q(eration)75 2554 y(creates)c(a)d(message;)g(the)i(message)e(data)h(is)
f(tak)o(en)h(from)e(the)j Fk(send)f(bu\013er)p Fn(.)j(A)d Fk(receiv)o(e)e
Fn(op)q(eration)i(consumes)75 2604 y(a)j(message;)h(the)g(message)f(data)g
(is)g(put)h(in)o(to)e(the)i Fk(receiv)o(e)h(bu\013er)p Fn(.)23
b(The)17 b(sp)q(eci\014cation)g(of)f(send)h(or)g(receiv)o(e)75
2654 y(bu\013ers)e(uses)h(the)e(same)f(syn)o(tax.)19 b(The)14
b(syn)o(tax)g(is)g(designed)h(to)f(b)q(e)h(extendable)f(so)h(that)f(new)g(t)o
(yp)q(es)h(of)f(bu\013ers)75 2704 y(can)g(added)g(b)o(y)g(v)o(endors.)p
eop
%%Page: 6 7
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)733 b Fn(6)75 45 y Fh(1.5.1)55 b(Comm)n(unication)21
b(bu\013er)d(comp)r(onen)n(ts)75 122 y Fn(A)g(bu\013er)g(consists)g(of)f(a)h
(sequence)h(of)e Fk(bu\013er)h(comp)q(onen)o(ts)p Fn(.)27 b(Eac)o(h)18
b(comp)q(onen)o(t)e(consists)j(of)e(a)g(sequence)75 172 y(of)h(\(not)h
(necessarily)h(distinct\))f(v)n(ariables)f(of)g(the)i(same)e(basic)h(datat)o
(yp)q(e.)33 b(The)19 b(datat)o(yp)q(e)g(of)f(suc)o(h)i(a)e(v)n(ari-)75
221 y(able)c(is)g(sp)q(eci\014ed)i(b)o(y)e(a)g(state)h(parameter.)k(The)c(p)q
(ossible)g(v)n(alues)f(for)g(F)m(ortran)g(are)h Fl(MPI)p 1505
221 14 2 v 15 w(INTEGER)p Fn(,)d Fl(MPI)p 1764 221 V 15 w(REAL)p
Fn(,)75 271 y Fl(MPI)p 144 271 V 15 w(DOUBLE)p Fn(,)c Fl(MPI)p
377 271 V 15 w(COMPLEX)p Fn(,)g Fl(MPI)p 632 271 V 15 w(DOUBLE)p
779 271 V 14 w(COMPLEX)p Fn(,)g Fl(MPI)p 1033 271 V 15 w(LOGICAL)p
Fn(,)f Fl(MPI)p 1287 271 V 16 w(CHARACTER)g Fn(and)j Fl(MPI)p
1651 271 V 15 w(BYTE)p Fn(,)e(corre-)75 321 y(sp)q(onding)14
b(to)h(datat)o(yp)q(es)g Fl(INTEGER)p Fn(,)e Fl(REAL)p Fn(,)g
Fl(DOUBLE)21 b(PRECISION)p Fn(,)12 b Fl(COMPLEX)p Fn(,)g Fl(DOUBLE)21
b(PRECISION)f(COMPLEX)p Fn(,)75 371 y Fl(LOGICAL)p Fn(,)d Fl(CHARACTER)h
Fn(and)h(to)g(un)o(t)o(yp)q(ed)h Fl(BYTE)p Fn(.)e(The)h(p)q(ossible)h(v)n
(alues)f(for)g(C)g(are)g Fl(MPI)p 1543 371 V 16 w(CHAR)p Fn(,)e
Fl(MPI)p 1742 371 V 16 w(SHORT)p Fn(,)75 421 y Fl(MPI)p 144
421 V 15 w(INT)p Fn(,)c Fl(MPI)p 316 421 V 15 w(LONG)p Fn(,)f
Fl(MPI)p 509 421 V 15 w(FLOAT)p Fn(,)h Fl(MPI)p 725 421 V 15
w(DOUBLE)f Fn(and)i Fl(MPI)p 1031 421 V 15 w(BYTE)p Fn(.)158
549 y Fj(Discussion:)158 595 y Fi(Ma)o(y)k(need)g(to)g(tak)o(e)g(care)g(of)f
(signed/unsi)q(gned)k(in)d(C.)f(More)h(elab)q(orate)i(de\014nitions)g(b)q
(elong)f(to)f(the)g(language)75 640 y(binding.)158 773 y Fn(There)d(are)f
(\014v)o(e)g(kinds)g(of)g(bu\013er)g(comp)q(onen)o(ts:)75 879
y Fk(Con)o(tiguous)f(comp)q(onen)o(t)75 955 y Fn(A)h(sequence)i(of)d(con)o
(tiguous)h(v)n(alues)g(of)f(the)h(same)f(basic)h(t)o(yp)q(e,)g(sp)q
(eci\014ed)i(b)o(y)75 1029 y Fk(start)k Fn(Initial)12 b(elemen)o(t)75
1107 y Fk(coun)o(t)19 b Fn(Num)o(b)q(er)14 b(of)f(elemen)o(ts)h(\()p
Fl(count)c Fc(\025)i Fl(0)p Fn(\))75 1185 y Fk(datat)o(yp)q(e)19
b Fn(T)o(yp)q(e)c(of)e(elemen)o(ts)158 1259 y(Th)o(us,)h(if)e
Fl(A)i Fn(is)f(an)h(arra)o(y)f(of)g(in)o(tegers,)h(then)h Fl(A\(1\),)21
b(4,)g(MPI)p 1127 1259 V 15 w(INT)13 b Fn(is)h(the)g(bu\013er)h(comp)q(onen)o
(t)e(with)g(en)o(tries)75 1309 y Fl(A\(1\),)21 b(A\(2\),)g(A\(3\),)f(A\(4\))p
Fn(.)75 1415 y Fk(V)l(ector)15 b(comp)q(onen)o(t)75 1491 y
Fn(A)f(sequence)j(of)c(equally)h(spaced)h(and)f(equally)f(sized)i(blo)q(c)o
(ks)f(of)g(elemen)o(ts)g(of)g(the)g(same)g(basic)g(t)o(yp)q(e,)g(sp)q
(eci\014ed)75 1541 y(b)o(y)75 1615 y Fk(start)20 b Fn(Initial)12
b(elemen)o(t)75 1693 y Fk(coun)o(t)19 b Fn(Num)o(b)q(er)14
b(of)f(elemen)o(ts)h(\()p Fl(count)c Fc(\025)i Fl(0)p Fn(\))75
1771 y Fk(stride)18 b Fn(Num)o(b)q(er)c(of)f(elemen)o(ts)h(b)q(et)o(w)o(een)h
(the)g(start)f(of)f(eac)o(h)i(blo)q(c)o(k)75 1850 y Fk(len)o(blk)j
Fn(Num)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(eac)o(h)g(blo)q(c)o(k)g(\()p
Fl(lenblk)c Fb(>)i Fl(0)p Fn(\))75 1928 y Fk(datat)o(yp)q(e)19
b Fn(T)o(yp)q(e)c(of)e(elemen)o(ts)158 2001 y(Assume)20 b(that)h(an)f(elemen)
o(t)g(of)f(t)o(yp)q(e)i Fl(datatype)e Fn(o)q(ccupies)i Fl(m)f
Fn(b)o(ytes.)38 b(Then,)22 b(in)e(a)g(b)o(yte)h(addressable)75
2051 y(mac)o(hine,)11 b(the)i(bu\013er)h(comp)q(onen)o(t)d(describ)q(ed)k(b)o
(y)d(these)i(\014v)o(e)f(parameters)f(consists)i(of)e(the)h
Fl(count)e Fn(v)n(ariables)h(at)75 2101 y(addresses)k Fl(start,)21
b(start+m,)f(...)43 b(,)21 b(start+m*\(lenblk-1\),)d(start+m*stride,)75
2151 y(start+m*\(stride+1)o(\),)h(...,)i(start+m*\(stride+l)o(enbl)o(k-1\),)d
(...)p Fn(.)i(F)m(or)14 b(example,)f(if)h Fl(A)g Fn(is)h(an)f(arra)o(y)h(of)
75 2201 y(in)o(tegers,)f(then)137 2274 y Fc(\017)21 b Fl(A\(1\),)g(5,)g(3,)g
(2,)h(MPI)p 575 2274 V 15 w(INT)c Fn(is)h(the)h(bu\013er)g(comp)q(onen)o(t)e
(with)h(en)o(tries)h Fl(A\(1\),)h(A\(2\),)f(A\(4\),)h(A\(5\),)179
2324 y(A\(7\))p Fn(.)137 2402 y Fc(\017)g Fl(A\(1\),)g(5,)g(0,)g(2,)h(MPI)p
575 2402 V 15 w(INT)c Fn(is)h(the)h(bu\013er)g(comp)q(onen)o(t)e(with)h(en)o
(tries)h Fl(A\(1\),)h(A\(2\),)f(A\(1\),)h(A\(2\),)179 2452
y(A\(1\))p Fn(.)137 2530 y Fc(\017)g Fl(A\(10\),)f(5,)i(-1,)f(2,)g(MPI)p
618 2530 V 15 w(INT)9 b Fn(is)g(the)h(bu\013er)g(comp)q(onen)o(t)f(with)g(en)
o(tries)h Fl(A\(10\),)21 b(A\(11\),)f(A\(9\),)h(A\(10\),)179
2580 y(A\(8\))p Fn(.)158 2654 y Fl(Contiguous)13 b Fn(is)h(a)g(sp)q(ecial)h
(case)h(of)e Fl(vector)p Fn(.)19 b(A)c(v)o(ector)g(bu\013er)h(comp)q(onen)o
(t)d(can)i(b)q(e)h(used)f(to)f(extract)i(an)75 2704 y(arbitrary)e(submatrix)e
(of)i(a)f(t)o(w)o(o-dimensional)e(matrix.)p eop
%%Page: 7 8
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)733 b Fn(7)75 45 y Fk(Indexed)15 b(comp)q(onen)o(t)75
122 y Fn(A)f(sequence)i(of)d(elemen)o(ts)h(of)f(the)i(same)e(basic)h(t)o(yp)q
(e,)g(sp)q(eci\014ed)h(b)o(y)75 205 y Fk(start)20 b Fn(initial)12
b(elemen)o(t)75 288 y Fk(coun)o(t)19 b Fn(Num)o(b)q(er)14 b(of)f(elemen)o(ts)
h(\()p Fl(count)c Fc(\025)i Fl(0)p Fn(\))75 371 y Fk(arra)o(y)p
188 371 15 2 v 17 w(of)p 244 371 V 16 w(indices)19 b Fn(Arra)o(y)14
b(of)f(displacemen)o(ts)h(of)f(the)i(elemen)o(ts)e(in)h(the)h(bu\013er)g
(comp)q(onen)o(ts,)e(relativ)o(e)h(to)f(the)179 421 y(initial)f(elemen)o(t.)
75 504 y Fk(datat)o(yp)q(e)19 b Fn(T)o(yp)q(e)c(of)e(elemen)o(ts)158
587 y(F)m(or)f(example,)f(if)h Fl(A)g Fn(is)g(an)g(arra)o(y)g(of)g(in)o
(tegers,)h(and)g Fl(I)f Fn(is)g(an)g(arra)o(y)h(with)f(v)n(alues)g
Fl(2,)21 b(-1,)g(2,)h(1)12 b Fn(then)h Fl(A\(3\),)75 636 y(4,)21
b(I,)h(MPI)p 275 636 14 2 v 15 w(INT)13 b Fn(is)h(the)g(bu\013er)h(comp)q
(onen)o(t)e(with)h(en)o(tries)h Fl(A\(5\),)21 b(A\(2\),)f(A\(5\),)h(A\(4\))p
Fn(.)158 686 y Fl(Vector)13 b Fn(can)h(b)q(e)g(though)o(t)g(of)f(as)h(a)g(sp)
q(ecial)g(case)h(of)e Fl(indexed)g Fn(in)g(whic)o(h)h(the)g(indices)h(are)f
(generated)h(with)75 736 y(a)f(constan)o(t)g(stride.)158 869
y Fj(Discussion:)33 b Fi(The)10 b(ab)q(o)o(v)o(e)h(statemen)o(t)g(is)g(not)g
(quite)g(true,)g(since)h(there)f(is)g(no)f Fd(lenblk)e Fi(parameter)j(on)g
(the)g(indexed)75 918 y(comp)q(onen)o(t.)18 b(It)13 b(w)o(as)g(suggested)h
(that)f(indexed)i(will)f(pro)o(vide)h(a)e(list)h(of)f(\(p)q(osition,)i(blo)q
(c)o(k)p 1410 918 12 2 v 15 w(length\))g(pairs.)75 1109 y Fk(Heterogeneous)e
(v)o(ector)i(\(h)o(v)o(ector\))f(comp)q(onen)o(t)75 1186 y
Fn(Same)e(as)h Fl(vector)p Fn(,)f(except)j(that)e Fl(stride)f
Fn(is)h(giv)o(en)g(in)f(m)o(ultiple)f(of)i(b)o(ytes,)h(rather)g(than)f(m)o
(ultiple)e(of)i(elemen)o(ts:)75 1277 y Fk(start)20 b Fn(Initial)12
b(elemen)o(t)75 1360 y Fk(coun)o(t)19 b Fn(Num)o(b)q(er)14
b(of)f(elemen)o(ts)h(\()p Fl(count)c Fc(\025)i Fl(0)p Fn(\))i(\(in)o(teger\))
75 1443 y Fk(stride)k Fn(Num)o(b)q(er)c(of)f Fk(b)o(ytes)g
Fn(b)q(et)o(w)o(een)i(the)f(start)h(of)e(eac)o(h)i(blo)q(c)o(k)e(\(in)o
(teger\))75 1526 y Fk(len)o(blk)18 b Fn(Num)o(b)q(er)13 b(of)h(elemen)o(ts)f
(in)h(eac)o(h)g(blo)q(c)o(k)g(\()p Fl(lenblk)c Fb(>)i Fl(0)p
Fn(\))i(\(in)o(teger\))75 1609 y Fk(datat)o(yp)q(e)19 b Fn(T)o(yp)q(e)c(of)e
(elemen)o(ts)h(\(state\))158 1700 y(Assume)20 b(that)h(an)f(elemen)o(t)g(of)f
(t)o(yp)q(e)i Fl(datatype)e Fn(o)q(ccupies)i Fl(m)f Fn(b)o(ytes.)38
b(Then,)22 b(in)e(a)g(b)o(yte)h(addressable)75 1750 y(mac)o(hine,)15
b(the)i(bu\013er)g(comp)q(onen)o(t)f(describ)q(ed)i(b)o(y)e(these)i(\014v)o
(e)e(parameters)h(consists)g(of)f(the)g Fl(count)g Fn(v)n(ariables)75
1800 y(at)c(addresses)j Fl(start,)20 b(start+m,)h(...)43 b(,)21
b(start+m*\(lenblk-1\))o(,)e(start+stride,)g(start+stride+m,)75
1850 y(...,)i(start+stride+m*\(l)o(enblk)o(-1\),)d(...)p Fn(.)158
1900 y(Consider)c(a)g(C)g(arra)o(y)f(declared)i(as)75 1991
y Fl(struct)21 b({)140 2041 y(char)g(info[3];)140 2091 y(short)g(number;)140
2140 y(double)g(val;)228 2190 y(})65 b(a[100])158 2281 y Fn(Assume)14
b(that)h(all)e(structure)j(comp)q(onen)o(ts)e(are)h(b)o(yte)g(aligned,)e(a)h
Fl(short)f Fn(o)q(ccupies)j(t)o(w)o(o)d(b)o(ytes,)i(a)f Fl(double)75
2331 y Fn(o)q(ccupies)21 b(eigh)o(t)e(b)o(ytes,)i(and)f(no)f(padding)g(is)g
(needed.)37 b(Then)20 b(the)g(bu\013er)g(comp)q(onen)o(t)f
Fl(&a,)i(100,)g(13,)g(2,)75 2381 y(MPI)p 144 2381 14 2 v 15
w(CHAR)14 b Fn(extracts)i(the)g(\014rst)f(t)o(w)o(o)g(c)o(haracters)h(of)f
(eac)o(h)g(structure.)23 b(The)15 b(bu\013er)h(comp)q(onen)o(t)e
Fl(&\(a.number\),)75 2431 y(100,)21 b(13,)g(1,)h(MPI)p 406
2431 V 15 w(SHORT)e Fn(extracts)k(the)e Fl(short)f Fn(\014eld)h(of)f(eac)o(h)
i(structure;)k(and)22 b(the)h(bu\013er)g(comp)q(onen)o(t)75
2481 y Fl(&\(a.val\),)d(100,)h(13,)g(1)c Fn(extracts)h(the)g
Fl(double)e Fn(\014eld)h(of)g(eac)o(h)g(structure.)30 b(Th)o(us,)18
b(heterogeneous)h(v)o(ectors)75 2531 y(can)14 b(b)q(e)h(used)f(to)g(extract)h
(v)o(ectors)g(of)e(homogeneous)g(v)n(alues)h(from)e(heterogeneous)k(data.)158
2580 y Fl(Vector)d Fn(is)g(a)h(sp)q(ecial)g(case)h(of)e Fl(heterogeneous)19
b(vector)p Fn(.)p eop
%%Page: 8 9
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)733 b Fn(8)75 45 y Fk(Heterogeneous)13 b(indexed)h(\(hindexed\))f(comp)
q(onen)o(t)75 122 y Fn(Same)g(as)h(indexed,)g(except)h(that)f(displacemen)o
(ts)f(are)i(in)e(b)o(ytes,)h(rather)h(than)f(m)o(ultiples)e(of)h(elemen)o(t)g
(size.)75 213 y Fk(start)20 b Fn(initial)12 b(elemen)o(t)75
296 y Fk(coun)o(t)19 b Fn(Num)o(b)q(er)14 b(of)f(elemen)o(ts)h(\()p
Fl(count)c Fc(\025)i Fl(0)p Fn(\))75 379 y Fk(arra)o(y)p 188
379 15 2 v 17 w(of)p 244 379 V 16 w(indices)19 b Fn(Arra)o(y)12
b(of)g(b)o(yte)g(displacemen)o(ts)g(of)g(the)g(elemen)o(ts)h(in)e(the)i
(bu\013er)g(comp)q(onen)o(ts,)f(relativ)o(e)g(to)179 429 y(the)i(initial)e
(elemen)o(t.)75 512 y Fk(datat)o(yp)q(e)19 b Fn(T)o(yp)q(e)c(of)e(elemen)o
(ts)158 603 y(F)m(or)18 b(example,)f(if)h Fl(a)g Fn(is)g(the)h(C)f(arra)o(y)g
(of)f(the)i(previous)g(example,)e(and)i Fl(I)e Fn(is)i(an)f(arra)o(y)g(with)f
(v)n(alues)h Fl(0,)75 653 y(13,)j(13,)g(27,)h(26)16 b Fn(then)i
Fl(&a,)k(5,)f(I,)g(MPI)p 782 653 14 2 v 15 w(CHAR)c Fn(is)g(the)h(bu\013er)h
(comp)q(onen)o(t)d(with)h(en)o(tries)i Fl(a[0].info[0],)75
703 y(a[1].info[0],)g(a[1].info[0],)g(a[1].info[1],)g(a[1].info[0])p
Fn(.)158 753 y(Lik)o(e)e Fl(heterogeneous)i(vector)p Fn(,)d
Fl(heterogeneous)j(indexed)c Fn(extends)k(the)e Fl(indexed)f
Fn(facilit)o(y)f(so)i(as)g(to)75 803 y(allo)o(w)12 b(the)j(extraction)f(of)f
(homogeneous)g(data)h(from)e(a)h(heterogeneous)j(la)o(y)o(out.)158
931 y Fj(Discussion:)158 977 y Fi(The)d(use)h(of)e(displacemen)o(ts)k(in)e
(indexed)h(bu\013er)f(comp)q(onen)o(ts)h(has)e(the)h(same)f(e\013ect)g(as)h
(indirect)h(addressing)g(in)o(to)75 1022 y(an)d(arra)o(y)g(with)g(initial)j
(index)e(zero.)j(I.e.,)11 b(if)h Fd(a)f Fi(is)h(an)g(arra)o(y)g(with)g
(initial)j(index)e(zero,)e(then)h(a)g(bu\013er)h(comp)q(onen)o(t)g(de\014ned)
75 1068 y(b)o(y)g(parameters)g Fd(a[0],)k(n,)i(i,)g(type)11
b Fi(extract)h(the)h(elemen)o(ts)g Fd(a[i[0]],)j(a[i[1]],)h(...,)h(a[i[n]])p
Fi(.)c(This)f(\014ts)f(w)o(ell)h(C)75 1113 y(usage)g(but)f(ill-\014ts)i(F)m
(ortran)e(usage)h(\(initial)h(index)g(one\).)i(W)m(e)c(to)q(ok)h(a)f
(decision)i(of)d(principle)k(to)d(force)g(\\start)g(from)f(zero")75
1159 y(index)j(arithmetic)f(on)g(F)m(ortran)f(users,)h(rather)f(than)h(ha)o
(v)o(e)f(di\013eren)o(t)i(index)g(arithmetic)f(in)g(the)f(C)g(and)h(F)m
(ortran)f(binding)75 1205 y(of)h(MPI.)158 1250 y(The)19 b(use)f(of)h(b)q(oth)
g(bu\013er)h(comp)q(onen)o(ts)f(with)h(b)o(yte)e(and)i(elemen)o(t)f(size)g
(displacemen)o(ts)j(is)d(motiv)n(ated)h(b)o(y)f(the)75 1296
y(observ)n(ation)c(that)f(some)g(applications)j(require)d(the)g(more)f
(general)i(b)o(yte)f(displacemen)o(t,)h(but)f(that)g(most)f(applicatio)q(ns)
75 1342 y(w)o(ould)d(use)g(elemen)o(t)g(size)h(displacemen)o(t,)h(whic)o(h)e
(is)g(m)o(uc)o(h)g(more)g(natural)g(and)g(con)o(v)o(enien)o(t)i(\(and)e(mac)o
(hine)h(indep)q(enden)o(t\).)75 1387 y(Th)o(us,)f(rather)f(than)h(forcing)g
(all)g(users)g(to)f(do)g(b)o(yte)h(arithmetics,)h(w)o(e)e(decided)h(to)f(pro)
o(vide)i(separately)g(the)e(more)g(adv)n(anced)75 1433 y(function)14
b(to)f(\\exp)q(ert)h(programmers".)75 1632 y Fh(1.5.2)55 b(Bu\013er)18
b(op)r(erations)75 1709 y Fn(A)c(bu\013er)i(is)e(describ)q(ed)i(b)o(y)e(an)g
(opaque)g Fk(bu\013er)h(descriptor)c Fn(ob)r(ject)k(accessed)h(via)e(a)g
Fk(bu\013er)h(handle)p Fn(.)i(Suc)o(h)75 1758 y(an)f(ob)r(ject)g(is)g
(created)h(b)o(y)f Fl(MPI)p 582 1758 V 15 w(CREATE)p 729 1758
V 15 w(BUFFER)p Fn(.)e(It)i(is)f(asso)q(ciated)i(with)f(successiv)o(e)i
(bu\013er)f(comp)q(onen)o(ts)e(b)o(y)75 1808 y(calling)g(in)i(succession)h
(one)f(of)f(the)i(functions)e Fl(MPI)p 914 1808 V 15 w(APPEND)p
1061 1808 V 15 w(xxx)p Fn(,)g(where)i Fl(xxx)e Fn(iden)o(ti\014es)h(the)h(t)o
(yp)q(e)f(of)f(bu\013er)75 1858 y(comp)q(onen)o(t)e(app)q(ended)h(to)f(the)h
(bu\013er.)20 b(It)14 b(b)q(ecomes)h(a)o(v)n(ailable)d(for)i(use)h(in)f(comm)
o(unicatio)o(n)e(op)q(erations)i(once)75 1908 y(committed)c(b)o(y)h(the)i
(function)e Fl(MPI)p 635 1908 V 15 w(COMMIT)p 782 1908 V 15
w(BUFFER)p Fn(.)f(Once)j(committed,)c(the)k(descriptor)g(cannot)f(b)q(e)g(mo)
q(di\014ed)75 1958 y(an)o(y)h(more.)158 2008 y(Note)i(that)f(the)h(commit)d
(op)q(eration)i(do)q(es)h(not)g(create)g(y)o(et)g(a)f(message,)g(and)g(do)q
(es)i(not)e(bind)g(the)h(data)f(to)75 2057 y(b)q(e)h(sen)o(t.)j(It)c(is)g(a)g
(commit)d(for)i(the)i(bu\013er)f(descriptor,)h(not)f(a)g(commi)o(t)d(for)j
(the)g(bu\013er)h(con)o(ten)o(t.)158 2107 y(A)f(bu\013er)g(descriptor)h(is)e
(destro)o(y)o(ed)h(after)g(the)g(completion)e(of)g(the)i(\014rst)h(comm)o
(unicati)o(on)c(op)q(eration)i(that)75 2157 y(uses)i(it,)e(if)g(it)g(is)h
(ephemeral,)f(or)h(after)g(it)f(is)h(freed)h(b)o(y)e(a)h(call)f(to)h
Fl(MPI)p 1170 2157 V 15 w(FREE)f Fn(and)g(an)o(y)h(p)q(ending)f(comm)o
(unication)75 2207 y(op)q(eration)h(that)g(uses)i(it)e(has)g(completed,)g(if)
f(it)h(is)g(p)q(ersisten)o(t.)21 b(After)15 b(the)g(bu\013er)g(descriptor)g
(ob)r(ject)g(has)g(b)q(een)75 2257 y(destro)o(y)o(ed,)g(the)f(handle)g(is)g
(unde\014ned.)158 2342 y Fk(MPI)p 257 2342 15 2 v 17 w(CREA)l(TE)p
471 2342 V 19 w(BUFFER\()h(bu\013er,)g(p)q(ersistence)e(\))158
2427 y Fn(Create)i(a)e(new)i(bu\013er)g(descriptor)g(ob)r(ject.)k(The)14
b(parameters)g(are:)75 2510 y Fk(OUT)i(bu\013er)j Fn(bu\013er)c(handle)75
2593 y Fk(IN)h(p)q(ersistence)i Fn(bu\013er)11 b(p)q(ersistence)h(\(state)e
(t)o(yp)q(e)g(with)f(p)q(ossible)g(v)n(alues)g Fl(MPI)p 1350
2593 14 2 v 15 w(PERSISTENT)e Fn(or)j Fl(MPI)p 1705 2593 V
15 w(EPHEMERAL)p Fn(\).)p eop
%%Page: 9 10
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)733 b Fn(9)158 45 y Fj(Discussion:)158 95 y Fi(F)m(unction)15
b(really)f(is)g Fd(create)p 585 95 12 2 v 12 w(buffer)p 717
95 V 11 w(descriptor)p Fi(.)f(Ma)o(y)h(w)o(an)o(t)f(to)g(c)o(hange)g(the)h
(name.)158 263 y Fk(MPI)p 257 263 15 2 v 17 w(APPEND)p 481
263 V 17 w(CONTIGUOUS\()h(bu\013er,)g(start,)g(coun)o(t,)f(datat)o(yp)q(e\))
158 348 y Fn(App)q(end)h(a)e(con)o(tigous)h(comp)q(onen)o(t)f(to)h(bu\013er.)
19 b(The)14 b(parameters)g(are:)75 429 y Fk(INOUT)i(bu\013er)j
Fn(bu\013er)c(handle)75 512 y Fk(IN)h(start)k Fn(bu\013er)15
b(comp)q(onen)o(t)e(initial)f(elemen)o(t)h(\(c)o(hoice\))75
594 y Fk(IN)j(coun)o(t)j Fn(Num)o(b)q(er)14 b(of)f(elemen)o(ts)h(\(in)o
(teger\))75 676 y Fk(IN)i(datat)o(yp)q(e)k Fn(datat)o(yp)q(e)14
b(iden)o(ti\014er)g(\(status\))158 793 y Fk(MPI)p 257 793 V
17 w(APPEND)p 481 793 V 17 w(VEC\()j(bu\013er,)d(start,)h(coun)o(t,)g
(stride,)f(len)o(blk,)f(datat)o(yp)q(e)i(\))158 878 y Fn(App)q(end)g(a)e(v)o
(ector)i(bu\013er)g(comp)q(onen)o(t)e(to)h(bu\013er.)19 b(The)14
b(parameters)g(are:)75 959 y Fk(INOUT)i(bu\013er)j Fn(bu\013er)c(handle)75
1041 y Fk(IN)h(start)k Fn(bu\013er)15 b(comp)q(onen)o(t)e(initial)f(elemen)o
(t)h(\(c)o(hoice\))75 1123 y Fk(IN)j(coun)o(t)j Fn(Num)o(b)q(er)14
b(of)f(elemen)o(ts)h(\(in)o(teger\))75 1206 y Fk(IN)i(stride)j
Fn(Num)o(b)q(er)13 b(of)h(elemen)o(ts)f(b)q(et)o(w)o(een)j(the)e(start)h(of)e
(eac)o(h)h(blo)q(c)o(k)g(\(in)o(teger\))75 1288 y Fk(IN)i(len)o(blk)i
Fn(Num)o(b)q(er)c(of)f(elemen)o(ts)h(in)f(eac)o(h)i(blo)q(c)o(k)e(\(in)o
(teger\))75 1370 y Fk(IN)j(datat)o(yp)q(e)k Fn(datat)o(yp)q(e)14
b(iden)o(ti\014er)g(\(status\))158 1530 y Fj(Discussion:)158
1575 y Fi(Whic)o(h)h(order)e(is)h(more)f(natural:)18 b Fd(stride,)f(lenblk)11
b Fi(or)i Fd(lenblk,)j(stride)p Fi(?)158 1743 y Fk(MPI)p 257
1743 V 17 w(APPEND)p 481 1743 V 17 w(INDEXED\()g(bu\013er,)f(start,)g(coun)o
(t,)f(arra)o(y)p 1294 1743 V 17 w(of)p 1350 1743 V 17 w(indices,)f(datat)o
(yp)q(e\))158 1829 y Fn(App)q(end)i(an)e(indexed)i(bu\013er)g(comp)q(onen)o
(t)e(to)h(bu\013er.)19 b(The)14 b(parameters)g(are:)75 1910
y Fk(INOUT)i(bu\013er)j Fn(bu\013er)c(handle)75 1992 y Fk(IN)h(start)k
Fn(initial)12 b(p)q(osition)h(for)h(indexing)f(\(c)o(hoice\))75
2074 y Fk(IN)j(coun)o(t)j Fn(Num)o(b)q(er)14 b(of)f(elemen)o(ts)h(\(in)o
(teger\))75 2156 y Fk(IN)i(arra)o(y)p 259 2156 V 17 w(of)p
315 2156 V 17 w(indices)i Fn(arra)o(y)c(of)f(displacemen)o(ts)g(of)h(en)o
(tries)h(relativ)o(e)e(to)h(start)h(\(arra)o(y)e(of)h(in)o(tegers\))75
2239 y Fk(IN)i(datat)o(yp)q(e)k Fn(datat)o(yp)q(e)14 b(iden)o(ti\014er)g
(\(status\))158 2320 y(The)g(index)f(v)n(alues)g(used)h(to)f(create)i(this)f
(comp)q(onen)o(t)e(are)i(the)g(v)n(alues)f(pro)o(vided)g(at)g(the)h(call;)e
(subsequen)o(t)75 2370 y(up)q(dates)j(of)e(the)i(arra)o(y)e(of)h(indices)g
(will)e(not)i(a\013ect)h(the)f(bu\013er)h(descriptor)g(comp)q(onen)o(t.)158
2455 y Fk(MPI)p 257 2455 V 17 w(APPEND)p 481 2455 V 17 w(HVEC\()i(bu\013er,)e
(start,)g(coun)o(t,)f(stride,)g(len)o(blk,)f(datat)o(yp)q(e)i(\))158
2540 y Fn(App)q(end)g(a)e(heterogeneous)j(v)o(ector)f(bu\013er)g(comp)q(onen)
o(t)e(to)h(bu\013er.)19 b(The)14 b(parameters)g(are:)75 2621
y Fk(INOUT)i(bu\013er)j Fn(bu\013er)c(handle)75 2704 y Fk(IN)h(start)k
Fn(bu\013er)15 b(comp)q(onen)o(t)e(initial)f(elemen)o(t)h(\(c)o(hoice\))p
eop
%%Page: 10 11
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(10)75 45 y Fk(IN)16 b(coun)o(t)j Fn(Num)o(b)q(er)14
b(of)f(elemen)o(ts)h(\(in)o(teger\))75 128 y Fk(IN)i(stride)j
Fn(Num)o(b)q(er)13 b(of)h(b)o(ytes)g(b)q(et)o(w)o(een)h(the)g(start)f(of)g
(eac)o(h)g(blo)q(c)o(k)g(\(in)o(teger\))75 211 y Fk(IN)i(len)o(blk)i
Fn(Num)o(b)q(er)c(of)f(elemen)o(ts)h(in)f(eac)o(h)i(blo)q(c)o(k)e(\(in)o
(teger\))75 294 y Fk(IN)j(datat)o(yp)q(e)k Fn(datat)o(yp)q(e)14
b(iden)o(ti\014er)g(\(status\))158 413 y Fk(MPI)p 257 413 15
2 v 17 w(APPEND)p 481 413 V 17 w(HINDEXED\()i(bu\013er,)f(start,)g(coun)o(t,)
g(arra)o(y)p 1332 413 V 16 w(of)p 1387 413 V 17 w(indices,)f(datat)o(yp)q
(e\))158 498 y Fn(App)q(end)h(an)e(heterogeneous)j(indexed)f(bu\013er)g(comp)
q(onen)o(t)e(to)h(bu\013er.)19 b(The)14 b(parameters)g(are:)75
581 y Fk(INOUT)i(bu\013er)j Fn(bu\013er)c(handle)75 664 y Fk(IN)h(start)k
Fn(initial)12 b(p)q(osition)h(for)h(indexing)f(\(c)o(hoice\))75
747 y Fk(IN)j(coun)o(t)j Fn(Num)o(b)q(er)14 b(of)f(elemen)o(ts)h(\(in)o
(teger\))75 830 y Fk(IN)i(arra)o(y)p 259 830 V 17 w(of)p 315
830 V 17 w(indices)i Fn(arra)o(y)c(of)f(b)o(yte)h(displacemen)o(ts)g(of)f(en)
o(tries)i(relativ)o(e)f(to)f(start)i(\(arra)o(y)f(of)f(in)o(tegers\))75
913 y Fk(IN)j(datat)o(yp)q(e)k Fn(datat)o(yp)q(e)14 b(iden)o(ti\014er)g
(\(status\))158 1031 y Fk(MPI)p 257 1031 V 17 w(COMMIT)p 485
1031 V 19 w(BUFFER\()h(bu\013er)f(\))158 1117 y Fn(Commi)o(t)7
b(a)j(bu\013er)h(descriptor)g(ob)r(ject.)18 b(The)10 b(ob)r(ject)h(cannot)f
(b)q(e)g(c)o(hanged)h(an)o(ymore)d(after)i(it)g(is)g(committed.)75
1166 y(A)h(bu\013er)g(descriptor)h(ob)r(ject)g(can)f(b)q(e)g(used)g(for)g
(comm)o(uni)o(cation)d(only)i(after)g(it)h(is)f(committed.)15
b(The)c(parameters)75 1216 y(are:)75 1299 y Fk(INOUT)16 b(bu\013er)j
Fn(bu\013er)c(descriptor)g(handle)158 1461 y Fj(Discussion:)158
1507 y Fi(The)i(commit)h(function)g(ma)o(y)g(do)f(prepro)q(cessing)j(of)d
(the)g(bu\013er)h(descriptor)h(to)e(simplify)i(its)f(use)f(and)h(commit)75
1552 y(resources)12 b(in)g(the)g(comm)o(unication)i(subsystem)e(for)f(its)h
(use.)k(The)c(commit)f(function)i(ma)o(y)f(generate)g(a)f(new)g(ob)r(ject)g
(and,)75 1598 y(hence,)i(mo)q(dify)h(the)g(ob)r(ject)f(handle.)158
1644 y(The)18 b(curren)o(t)g(prop)q(osal)h(do)q(es)g(not)f(allo)o(w)h(to)e
(create)h(a)g(bu\013er)g(descriptor,)i(use)e(it)h(in)f(a)g(comm)o(unication)i
(after)75 1689 y(committed,)14 b(then)g(mo)q(dify)g(it)g(partially)i(and)e
(use)g(it)g(for)f(another)h(comm)o(unication)i({)d(a)h(new)f(bu\013er)h
(descriptor)h(has)f(to)75 1735 y(b)q(e)h(created.)21 b(Of)13
b(course,)i(the)g(same)f(bu\013er)h(descriptor)h(can)f(b)q(e)f(reused)h(man)o
(y)g(times)g(in)g(successiv)o(e)h(comm)o(unications)75 1781
y(that)d(send)g(data)g(from)f(the)g(same)h(bu\013ers;)g(e.g.,)f(a)g(new)h
(send)g(with)g(a)f(bu\013er)i(descriptor)g(handle)g(can)f(b)q(e)f(initiated)j
(once)75 1826 y(the)e(previous)i(send)f(with)f(this)h(handle)h(has)e
(completed.)158 1959 y Fn(Example)f(1:)75 2008 y(Consider)i(the)h(follo)o
(wing)c(fragmen)o(t)h(of)i(F)m(ortran)f(co)q(de)75 2100 y Fl(DOUBLE)21
b(PRECISION)e(A\(10,20\))75 2150 y(INTEGER)h(B,)i(C\(5,10\),)e(I\(3\))75
2199 y(INTEGER)g(BH)75 2249 y(DATA)h(\(I\(J\),)g(J=1,3\))f(/9,2,1/)75
2299 y(...)75 2349 y(CALL)h(MPI_CREATE_BUFFER)o(\(BH,)d(MPI_PERSISTENT\))75
2399 y(CALL)j(MPI_APPEND_CONTIG)o(UOUS)d(\(BH,)j(B,)h(1,)f(MPI_INTEGER\))75
2448 y(CALL)g(MPI_APPEND_VEC)e(\(BH,)i(A\(1,3\),)f(11,)h(4,)h(2,)f
(MPI_DOUBLE\))75 2498 y(CALL)g(MPI_APPEND_INDEXE)o(D\(BH,)d(C\(3,7\),)j(3,)g
(I,)g(MPI_INTEGER\))158 2590 y Fn(Then)14 b(the)h(bu\013er)g(asso)q(ciated)f
(with)g(the)g(handle)g Fl(BH)g Fn(consists)h(of)e(the)h(sequence)i(of)e(v)n
(ariables)158 2639 y Fl(B,)21 b(A\(1,3\),)g(A\(2,3\),)f(A\(5,3\),)g
(A\(6,3\),)h(A\(9,3\),)f(A\(10,3\),)g(A\(3,4\),)h(A\(4,4\),)f(A\(7,4\),)g
(A\(8,4\),)75 2689 y(A\(1,5\),)g(C\(2,8\),)h(C\(5,7\),)f(C\(4,7\))p
Fn(.)p eop
%%Page: 11 12
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(11)158 45 y(A)14 b(message)f(created)j(from)c(this)i(bu\013er)
h(will)d(consist)j(of)e(a)g(sequence)j(of)e(one)g(in)o(teger,)f(follo)o(w)o
(ed)g(b)o(y)g(elev)o(en)75 95 y(double)h(precision)g(reals,)g(follo)o(w)o(ed)
e(b)o(y)i(three)h(in)o(tegers.)158 145 y(Example)d(2:)75 195
y(Supp)q(ose)j(one)f(has)g(an)g(arra)o(y)f(of)g(data)h(declared)h(in)e(C)h
(as)75 272 y Fl(struct)21 b({)140 322 y(int)h(type;)140 372
y(double)f(position[3];)140 422 y(double)g(velocity[3];)228
472 y(})g(particle[1000])158 549 y Fn(and)d(one)g(w)o(an)o(ts)h(to)f
(transfer)h(in)f(one)g(message)g(the)h(n)o(um)o(b)q(er)e(of)h(particles)g(of)
g(t)o(yp)q(e)h(1,)f(the)h(n)o(um)o(b)q(er)f(of)75 599 y(particles)g(of)g(t)o
(yp)q(e)g(2,)g(and)g(the)g(p)q(ositions)g(of)f(all)g(the)h(particles)h(of)e
(these)i(t)o(w)o(o)f(t)o(yp)q(es.)31 b(The)18 b(follo)o(wing)d(co)q(de)75
649 y(fragmen)o(t)d(creates)k(a)e(suitable)f(bu\013er)i(descriptor.)75
727 y Fl(int)21 b(count1)g(=)g(0;)75 777 y(int)g(count2)g(=)g(0;)75
826 y(...)75 876 y(mpi_create_buffer)o(\()e(&handle,)h(MPI_PERSISTENT\);)75
926 y(mpi_append_contig)o(uous\()e(handle,)j(\(void)f(*\)&count1,)g
(MPI_INT\);)75 976 y(mpi_append_contig)o(uous\()e(handle,)j(\(void)f
(*\)&count2,)g(MPI_INT\);)75 1026 y(for)h(\(i=0;)g(i<1000;)f(i++\))h({)140
1075 y(if)h(\(particle[i].typ)o(e)d(==)i(1\))h({)206 1125 y(count1++;)206
1175 y(mpi_append_conti)o(guous)o(\()d(&handle,)h(\(void)h
(*\)&particle[i].po)o(sitio)o(n,)e(3,)75 1225 y(MPI_DOUBLE\);)g(})140
1275 y(elseif)i(\(particle[i].type)d(==)k(2\))f({)206 1325
y(count2++;)206 1374 y(mpi_append_conti)o(guous)o(\()e(&handle,)h(\(void)h
(*\)&particle[i].po)o(sitio)o(n,)e(3,)75 1424 y(MPI_DOUBLE\);)g(})140
1474 y(})75 1524 y(mpi_commit_buffer)o(\(hand)o(le\))75 1574
y(...)158 1651 y Fn(The)14 b(bu\013er)h(descriptor)f(handle)g(can)g(no)o(w)f
(b)q(e)h(used)g(to)g(send)g(\(rep)q(eatedly\))h(the)f(particle)g(coun)o(ts)g
(for)f(t)o(yp)q(e)75 1701 y(1)g(and)f(2,)h(and)g(the)g(p)q(ositions)g(of)f
(the)i(particles)f(with)g(these)h(t)o(w)o(o)f(t)o(yp)q(es,)g(as)g(long)f(as)h
(the)h(t)o(yp)q(es)g(of)e(the)h(particles)75 1751 y(is)h(not)g(mo)q
(di\014ed.)158 1801 y(Supp)q(ose)i(the)f(incoming)d(data)i(is)h(to)f(b)q(e)h
(stored)h(at)e(the)h(receiv)o(er)h(in)o(to)e(the)h(t)o(w)o(o)g(coun)o(t)f(v)n
(ariables)g Fl(count1)75 1851 y Fn(and)h Fl(count2)f Fn(and)h(in)o(to)f(the)i
Fl(position)d Fn(comp)q(onen)o(ts)i(of)f(the)i(initial)d(en)o(tries)j(of)f
(the)g(arra)o(y)g(of)f(particles.)23 b(The)75 1900 y(follo)o(wing)10
b(co)q(de)i(generates)i(a)e(suitable)g(bu\013er)h(descriptor)h(for)d(the)i
(receiv)o(e)g(op)q(eration)f(\(w)o(e)h(assume)f(4)f(b)o(ytes)i(for)75
1950 y(in)o(teger)h(and)g(8)g(b)o(ytes)g(for)g(double\).)75
2028 y Fl(...)75 2078 y(mpi_create_buffer)o(\()19 b(&handle,)h
(MPI_PERSISTENT\);)75 2128 y(mpi_append_contig)o(uous\()e(&handle,)i(\(void)h
(*\)&count1,)f(MPI_INT\);)75 2177 y(mpi_append_contig)o(uous\()e(handle,)j
(\(void)f(*\)&count2,)g(MPI_INT\);)75 2227 y(mpi_append_hvec\()e(handle,)j
(\(void)g(*\)&particle[0].)o(posit)o(ion,)d(1000,)j(52,)g(3,)75
2277 y(MPI_DOUBLE\);)e(mpi_commit_buffer\()f(handle\))75 2327
y(...)158 2405 y Fn(A)d(bu\013er)g(handle)f(can)h(b)q(e)g(used)g(for)f(comm)o
(unication,)d(ev)o(en)k(if)f(it)g(is)g(not)g(asso)q(ciated)i(with)e(an)o(y)g
(v)n(ariables)75 2455 y(\(i.e.,)e(ev)o(en)i(if)e(it)h(w)o(as)g(not)g(set)h(b)
o(y)f(an)o(y)g Fl(MPI)p 761 2455 14 2 v 15 w(APPEND)p 908 2455
V 15 w(xxx)f Fn(call\).)17 b(Suc)o(h)d(a)f(handle)g(is)g(asso)q(ciated)h
(with)f(an)g(empt)o(y)75 2504 y(bu\013er,)i(and)f(a)g(message)g(created)i
(from)c(it)i(con)o(tains)g(no)g(data.)19 b(The)c(handle)f(still)f(need)i(b)q
(e)g(committed)d(b)q(efore)75 2554 y(it)i(is)f(used.)158 2604
y(The)h(same)e(en)o(try)i(ma)o(y)d(app)q(ear)i(more)f(than)i(once)f(in)g(a)g
(bu\013er)h(comp)q(onen)o(t,)e(and)h(distinct)g(bu\013er)h(comp)q(o-)75
2654 y(nen)o(ts)i(ma)o(y)d(o)o(v)o(erlap.)21 b(If)15 b(a)g(bu\013er)h
(descriptor)g(with)f(replicated)h(en)o(tries)g(is)f(used)h(to)f(receiv)o(e)h
(a)f(message,)f(then)75 2704 y(the)g(\014nal)g(v)n(alue)f(of)g(an)h(en)o(try)
g(that)g(o)q(ccurs)i(more)d(than)g(once)i(in)e(the)i(bu\013er)g(descriptor)g
(is)f(unde\014ned.)p eop
%%Page: 12 13
bop 75 -100 a Ff(CHAPTER)14 b(1.)27 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)717 b Fn(12)75 45 y Fh(1.5.3)55 b(Comm)n(unication)21
b(Bu\013ers)d({)g(Extension)1931 72 y Fe(TO)11 b(DISCUSS)75
200 y Fj(Discussion:)158 246 y Fi(James)g(Co)o(wnie)h(prop)q(oses)g(the)g
(follo)o(wing)h(extension)g(to)e(bu\013er)i(descriptors.)18
b(Its)11 b(main)h(feature)f(is)h(the)f(addition)j(of)75 292
y(a)g(bu\013er)h(comp)q(onen)o(t)g(that)g(allo)o(ws)g(for)f(the)g(e\016cien)o
(t)h(represen)o(tation)h(and)f(manipulation)j(of)13 b(arra)o(ys)i(of)f(C)f
(structures.)75 337 y(This)h(extension)h(has)e(not)g(b)q(een)h(discussed)h(b)
o(y)e(MPIF.)158 387 y(\(The)g(original)j(prop)q(osal)f(has)e(b)q(een)h(repro)
q(cessed)g(b)o(y)f(Rust)o(y)h(and)g(Marc.\))158 520 y Fn(F)m(ortran)d(and)f
(C)h(b)q(oth)f(allo)o(w)f(to)i(pro)o(vide)g(hierarc)o(hical)f(de\014nitions)h
(of)f(comp)q(osite)g(data)g(structures;)k(on)c(the)75 569 y(other)15
b(hand,)g(bu\013er)h(descriptors)g(are)f(\015at)g(structures.)23
b(Th)o(us,)15 b(it)g(is)f(incon)o(v)o(enien)o(t)h(to)g(use)g(bu\013er)h
(descriptors)75 619 y(in)d(order)i(to)f(transfer)h(records.)158
748 y Fj(Discussion:)158 797 y Fi(There)i(also)h(is)g(an)g(e\016ciency)g
(consideration.)33 b(Consider)18 b(the)f(transfer)h(of)f(an)g(arra)o(y)h(of)f
(structures,)h(as)g(in)g(the)75 847 y(example)g(giv)o(en)h(for)e(an)g
Fd(hvector)d Fi(comp)q(onen)o(t.)30 b(The)17 b(arra)o(y)h(is)f(co)o(v)o(ered)
h(with)g(strided)g(v)o(ectors)f(with)h(homogeneous)75 897 y(comp)q(onen)o
(ts;)c(the)f(fact)g(that)g(the)g(en)o(tire)h(data)g(structure)f(is)h(con)o
(tiguous)h(in)f(memory)f(is)h(lik)o(ely)h(to)e(b)q(e)g(lost.)158
1029 y Fn(Bu\013er)i(descriptors)h(p)q(erform)d(t)o(w)o(o)g(functions)h(:)126
1112 y(1.)20 b(They)12 b(describ)q(e)h(the)f(bu\013er)g Fk(t)o(yp)q(e)p
Fn(,)f(i.e.)16 b(the)c(data)f(t)o(yp)q(e)h(of)f(eac)o(h)h(elemen)o(t)f(of)g
(the)g(bu\013er,)i(and)e(the)h(relativ)o(e)179 1162 y(displacemen)o(t)h(of)g
(the)i(elemen)o(ts)e(in)h(memory)m(.)126 1245 y(2.)20 b(They)14
b(describ)q(e)i(the)e(address)h(in)f(memory)d(of)i(eac)o(h)i(elemen)o(t)e(of)
g(the)i(bu\013er.)158 1328 y(Consider,)f(for)f(example,)g(the)h(follo)o(wing)
d(fragmen)o(t)i(of)g(co)q(de.)75 1420 y Fl(int)21 b(a[10];)75
1469 y(...)75 1519 y(mpi_create_buffer)o(\(&b1,)d(MPI_EPHEMERAL\);)75
1569 y(mpi_append_contig)o(uous\()o(b1,)h(\(void)h(*\)a,)h(3,)h(MPI_INT\);)75
1619 y(mpi_create_buffer)o(\(&b2,)c(MPI_EPHEMERAL\);)75 1669
y(mpi_append_contig)o(uous\()o(b2,)h(\(void)h(*\)a,)h(3,)h(MPI_INT\);)75
1719 y(mpi_create_buffer)o(\(&b3,)c(MPI_EPHEMERAL\);)75 1768
y(mpi_append_contig)o(uous\()o(b3,)h(\(void)h(*\)\(a+2\),)h(3,)g(MPI_INT\);)
158 1860 y Fn(Then)c Fl(b1)f Fn(and)h Fl(b2)f Fn(b)q(oth)g(p)q(oin)o(t)g(to)h
(bu\013er)g(descriptors)i(for)d(the)h(same)f(bu\013er,)h(whereas)h
Fl(b3)e Fn(p)q(oin)o(ts)h(to)f(a)75 1909 y(bu\013er)f(descriptor)g(for)f
(another)g(bu\013er;)g(ho)o(w)o(ev)o(er,)g(all)f(three)i(bu\013er)g
(descriptors)g(ha)o(v)o(e)f(the)h(same)e(t)o(yp)q(e.)158 1959
y(In)f(order)g(to)g(pro)o(vide)f(a)h(recursiv)o(e)h(de\014nition)e(of)g
(bu\013er)i(descriptors,)g(one)f(needs)h(an)f(ob)r(ject)g(that)g(sp)q
(eci\014es)75 2009 y(the)g(bu\013er)g(t)o(yp)q(e,)f(but)g(not)g(its)g(lo)q
(cation.)16 b(By)c(analogy)m(,)d(in)h(a)h(language)f(suc)o(h)i(as)f(C,)f(a)h
(struct)h(de\014nition)f(pro)o(vides)75 2059 y(the)i(structure)i(t)o(yp)q(e,)
e(and)g(its)g(declaration)f(pro)o(vides)h(\(implicitly\))d(the)k(address)g
(of)e(the)h(structure.)20 b(The)14 b(struct)75 2109 y(de\014nition)f(can)i(b)
q(e)f(used)h(recursiv)o(ely)g(as)f(a)f(comp)q(onen)o(t)g(of)h(a)f(new)i
(struct)g(de\014nition.)158 2159 y(Rather)d(then)g(adding)e(new)i(functions)g
(and)f(new)h(ob)r(jects,)h(w)o(e)e(prop)q(ose)i(to)e(use)h(bu\013er)h
(descriptors)g(in)e(b)q(oth)75 2208 y(roles:)23 b(\\b)q(ound",)16
b(to)g(indicate)g(the)h(t)o(yp)q(e)g(and)f(lo)q(cation)g(of)f(a)h(bu\013er,)i
(and)e(\\un)o(b)q(ound",)g(to)g(indicate)g(a)g(t)o(yp)q(e,)75
2258 y(that)e(can)g(b)q(e)h(used)f(as)g(a)g(comp)q(onen)o(t)f(of)g(a)h(new)g
(bu\013er)h(de\014nition.)158 2308 y(F)m(ormally)m(,)d(the)k
Fl(MPI)p 485 2308 14 2 v 15 w(APPEND)p 632 2308 V 14 w(xxx)f
Fn(functions)h(detailed)f(ab)q(o)o(v)o(e)g(tak)o(e)h(a)f(handle)h(to)f(a)g
(previously)g(de\014ned,)75 2358 y(uncommitted)8 b(bu\013er)k(descriptor)f
(as)g(their)g Fl(datatype)e Fn(argumen)o(t)g(\(rather)i(than)g(a)f(state)h(v)
n(ariable\).)16 b(The)11 b(\(com-)75 2408 y(p)q(osite\))j(elemen)o(t)g
(describ)q(ed)h(b)o(y)f(this)g(argumen)o(t)f(is)h(an)f(elemen)o(t)h(of)f(the)
h(same)f(t)o(yp)q(e)i(as)f(the)g(bu\013er)h(argumen)o(t.)158
2457 y(Example)d(2:)75 2549 y Fl(int)21 b(i[2])g(=)h({)f(2,)h(0};)75
2599 y(int)f(a[100];)75 2648 y(...)75 2698 y(mpi_create_buffer)o(\()e(&b1,)i
(MPI_PERSISTENT\);)p eop
%%Page: 13 14
bop 75 -100 a Ff(CHAPTER)14 b(1.)27 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)717 b Fn(13)75 45 y Fl(mpi_append_indexe)o(d\()19 b(b1,)i(\(void)g
(*\)a,)g(2,)g(i,)h(MPI_INT\);)75 145 y(mpi_create_buffer)o(\()d(&b2,)i
(MPI_PERSISTENT\);)75 195 y(mpi_append_contig)o(uous\()d(b2,)j(\(void)g
(*\)a,)g(3,)h(b1\);)75 294 y(mpi_create_buffer)o(\()d(&b3,)i
(MPI_PERSISTENT\);)75 344 y(mpi_append_indexe)o(d\()e(b3,)i(\(void)g(*\)a,)g
(2,)g(i,)h(b2\);)75 394 y(mpi_append_vec\()d(b3,)i(\(void)g(*\)\(a+50\),)f
(3,)h(3,)g(2,)h(b1\);)158 478 y(b1)12 b Fn(is)g(asso)q(ciated)h(with)f(a)g
(bu\013er)h(consisting)g(of)e(the)i(t)o(w)o(o)f(elemen)o(ts)g
Fl(a[2],)21 b(a[0])p Fn(.)c(When)12 b(used)h(un)o(b)q(ound,)75
528 y(it)k(indicates)h(a)f(comp)q(onen)o(t)f(with)h(t)o(w)o(o)g(in)o(tegers)h
(that)f(are)h(one)g(in)o(teger)f(appart;)i(this)e(comp)q(onen)o(t)g(o)q
(ccupies)75 578 y(three)e(in)o(teger)g(storage)f(units)g(\(12)f(b)o(ytes,)i
(if)e(in)o(tegers)h(o)q(ccup)o(y)h(four)e(b)o(ytes\).)158 628
y(The)e(bu\013er)g(asso)q(ciated)g(with)e Fl(b2)h Fn(has)g(3)g(comp)q(onen)o
(ts)g(of)g(the)g(t)o(yp)q(e)h(indicated)f(b)o(y)g Fl(b1)p Fn(.)16
b(It)11 b(consists)g(of)e(the)i(ar-)75 678 y(ra)o(y)g(en)o(tries)h
Fl(a[2],)21 b(a[0],)f(a[5],)h(a[3],)g(a[8],)g(a[6])p Fn(.)16
b(When)11 b(used)h(un)o(b)q(ound,)f(it)g(indicates)g(a)g(comp)q(onen)o(t)75
727 y(with)j(six)f(in)o(tegers)i(that)f(o)q(ccup)o(y)g(nine)g(in)o(teger)h
(storage)f(units.)158 777 y(The)h(bu\013er)h(asso)q(ciated)g(with)f
Fl(b3)f Fn(has)h(t)o(w)o(o)g(comp)q(onen)o(t)f(of)g(the)i(t)o(yp)q(e)f
(indicated)g(b)o(y)g Fl(b2)f Fn(and)h(three)h(com-)75 827 y(p)q(onen)o(ts)f
(of)e(the)i(t)o(yp)q(e)f(indicated)g(b)o(y)f Fl(b1)p Fn(.)18
b(It)c(consists)h(of)e(the)i(arra)o(y)e(en)o(tries)75 905 y
Fl(a[20],)21 b(a[18],)f(a[23],)h(a[21],)f(a[26],)h(a[24],)97
954 y(a[2],)42 b(a[0],)h(a[5],)f(a[3],)h(a[8],)g(a[6],)75 1004
y(a[52],)21 b(a[50],)f(a[55],)h(a[53],)f(a[59],)h(a[57].)158
1082 y Fn(An)o(y)15 b(uncommitted)e(bu\013er)k(descriptor)f(ma)o(y)d(b)q(e)j
(used)g(as)g(a)f(data)g(t)o(yp)q(e.)22 b(MPI)16 b(prede\014nes)h(\(handles)f
(to\))75 1132 y(uncommitted)10 b(bu\013er)k(descriptors)g Fl(MPI)p
723 1132 14 2 v 16 w(INT)p Fn(,)d Fl(MPI)p 894 1132 V 15 w(FLOAT)p
Fn(,)g(etc.,)i(for)g(eac)o(h)g(basic)g(datat)o(yp)q(e)f(of)g(F)m(ortran)h
(and)f(C.)75 1181 y(Eac)o(h)f(of)f(these)i(descriptors)g(can)f(b)q(e)g
(though)o(t)g(as)f(describing)i(a)e(bu\013er)i(with)e(one)h(elemen)o(t)f(of)g
(the)h(corresp)q(onding)75 1231 y(t)o(yp)q(e.)158 1281 y(When)g(a)f(bu\013er)
i(descriptor)g(isd)e(used)i(as)e(a)h(t)o(yp)q(e)g(descriptor)h(then)f(MPI)g
(ensures)h(the)f(alignmen)o(ts)e(required)75 1331 y(b)o(y)14
b(the)g(underlying)g(arc)o(hitecture)h(and)f(add,)f(if)g(required,)i(padding)
e(space.)158 1381 y(Example)f(3:)75 1430 y(Consider)i(the)h(follo)o(wing)c(C)
j(co)q(de)h(whic)o(h)e(builds)h(a)f(bu\013er)i(descriptor)g(for)f(an)g(arra)o
(y)f(of)h(structures.)75 1558 y Fl(/*)21 b(A)h(brain)f(damaged)f(structure)g
(which)h(needs)g(both)f(internal)h(and)g(external)97 1608 y(*)g(padding)g(on)
g(a)h(32)f(bit)g(machine)g(with)g(strict)f(alignment)g(requirements)97
1658 y(*/)75 1707 y(struct)h(foostruct)e({)140 1757 y(int)j(i;)140
1807 y(/*)g(four)f(bytes)f(of)i(padding)e(to)i(get)f(back)g(to)g(double)g
(alignment)f(*/)140 1857 y(double)h(d[5];)140 1907 y(char)g(b;)140
1956 y(/*)h(trailing)e(7)h(bytes)g(of)h(padding)e(to)h(enforce)g(alignment)f
(again)g(*/)75 2006 y(};)75 2106 y(struct)h(foostruct)e(foo[100];)75
2205 y(MPI_BUFFER)h(t;)75 2255 y(MPI_BUFFER)g(fb;)75 2355 y
(mpi_create_buffer)o(\(&t,)40 b(MPI_EPHEMERAL\);)75 2405 y(mpi_create_buffer)
o(\(&fb,)18 b(MPI_PERSISTENT\);)75 2504 y(/*)j(Describe)g(the)g(data)g(type)g
(in)g(t)h(*/)75 2554 y(mpi_append_contig)o(uous\()o(t,)d(&\(\(struct)h
(foostruct)g(*\)0\)->i,1,MPI_IN)o(T\);)75 2604 y(mpi_append_contig)o(uous\()o
(t,)f(&\(\(struct)h(foostruct)g(*\)0\)->d,5,MPI_DO)o(UBLE\))o(;)75
2654 y(mpi_append_contig)o(uous\()o(t,)f(&\(\(struct)h(foostruct)g
(*\)0\)->b,1,MPI_BY)o(TE\);)p eop
%%Page: 14 15
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(14)75 45 y Fl(/*)21 b(Now)h(describe)e(foo)h(itself,)f(a)i
(contiguous)e(array)g(of)i(100)f(elements)97 95 y(*)g(of)h(the)f(derived)f
(type.)97 145 y(*/)75 195 y(mpi_append_contig)o(uous\()o(fb,&f)o(oo,10)o
(0,t\);)75 244 y(mpi_commit\(fb\);)158 324 y Fn(Example)12
b(4:)75 374 y(Consider)17 b(the)g(follo)o(wing)d(co)q(de)k(whic)o(h)f
(expresses)i(as)e(a)f(single)g(bu\013er)i(descriptor)g(a)e(subset)j(of)d(an)g
(arbitrary)75 424 y(dimensional)c(arra)o(y)m(.)162 503 y Fl(real)21
b(a\(100,100,100\))75 553 y(c)65 b(declare)21 b(the)g(buffer)f(descriptors)
162 603 y(integer)h(onedslice)162 653 y(integer)g(twodslice)162
702 y(integer)g(message)75 802 y(c)65 b(Slice)21 b(out)g(the)g(section)g
(a\(1:21:2,1:10,1:)o(11\))d(as)k(a)f(single)g(buffer)g(descriptor)162
902 y(call)g(mpi_create_buffer\()o(ondes)o(lice,)d(MPI_EPHEMERAL\))162
951 y(call)j(mpi_create_buffer\()o(twods)o(lice,)d(MPI_EPHEMERAL\))162
1001 y(call)j(mpi_create_buffer\()o(messa)o(ge,)62 b(MPI_EPHEMERAL\))162
1101 y(call)21 b(mpi_append_vec)e(\(onedslice,)h(a,)h(1+\(21-1\)/2,)140
1151 y($)458 b(2,)21 b(1,)h(MPI_REAL\))162 1200 y(call)f(mpi_append_hvec\(tw)
o(odsli)o(ce,)e(a,)195 b(10,)140 1250 y($)458 b(100*MPI_REAL_SIZE)o(,)19
b(1,)i(ondeslice\))162 1300 y(call)g(mpi_append_hvec\(me)o(ssage)o(,)63
b(a,)348 b(11,)140 1350 y($)458 b(100*100*MPI_REAL_)o(SIZE)o(,1,tw)o(odsli)o
(ce\))162 1450 y(call)21 b(mpi_commit\(message)o(\))75 1549
y(c)65 b(all)21 b(done...)158 1707 y Fj(Discussion:)158 1753
y Fi(F)m(or)16 b(p)q(ortabilit)o(y)i(this)f(example)g(requires)g(access)f(to)
g(the)g(size)g(in)h(b)o(ytes)f(of)g(an)g(MPI)f(data)i(t)o(yp)q(e.)25
b(\(In)16 b(general)h(a)75 1799 y(bu\013er)d(descriptor\).)k(W)m(e)c(should)g
(probably)h(pro)o(vide)g(an)e Fd(MPI)p 995 1799 12 2 v 13 w(SIZEOF\()k
(bufhandle)f(\))d Fi(function)h(to)f(ac)o(hiev)o(e)i(this.)158
2010 y Fj(Discussion:)158 2055 y Fi(W)m(e)g(should)i(probably)f(restrict)g(a)
f(bu\013er)g(descriptor)i(that)e(is)g(used)h(as)f(a)f(t)o(yp)q(e)i(parameter)
f(to)g(describ)q(e)h(a)f(bu\013er)75 2101 y(that)g(is)g(con)o(tained)h
(within)g(one)f(\(comp)q(osite\))h(v)n(ariable)g(\(arra)o(y)m(,)f(structure,)
g(etc.\).)21 b(The)14 b(w)o(orry)g(is)i(that)e(on)h(a)f(mac)o(hine)75
2147 y(with)i(a)g(segmen)o(ted)h(address)g(space)f(di\013eren)o(t)i(v)n
(ariables)g(ma)o(y)e(not)g(b)q(elong)h(to)f(the)g(same)g(address)h(segmen)o
(t,)g(so)f(that)75 2192 y(their)f(relativ)o(e)i(displacemen)o(t)g(is)e(not)g
(de\014ned)h(\(think)f(of)g(a)f(bu\013er)i(that)f(con)o(tains)h(a)e(heap)i(v)
n(ariable,)g(a)f(stac)o(k)g(v)n(ariable)75 2238 y(and)f(a)f(static)g(v)n
(ariable\).)75 2428 y Fk(Alternativ)o(e)g(within)g(alternativ)o(e)75
2504 y Fn(A)g(v)n(arian)o(t)f(on)h(the)g(previous)h(prop)q(osal)e(is)h(to)g
(k)o(eep)h(un)o(b)q(ound)f(bu\013er)h(descriptors)g(syn)o(tactically)e
(distinct)i(from)75 2554 y(b)q(ound)d(bu\013er)i(descriptors.)19
b(A)11 b(bu\013er)h(descriptor)h(is)e Fk(un)o(b)q(ound)e Fn(if)h(it)h(is)g
(not)g(asso)q(ciated)i(with)e(a)g(\014xed)g(memory)75 2604
y(address.)23 b(A)15 b(bu\013er)h(descriptor)g(can)f(b)q(e)h(used)g(as)f(a)f
(datat)o(yp)q(e)i(if)e(and)h(only)f(if)g(it)g(is)h(un)o(b)q(ound.)22
b(This)15 b(prev)o(en)o(ts)75 2654 y(the)f(p)q(ossible)g(confusion)g(arising)
e(from)g(using)i(the)g(same)f(ob)r(ject)h(for)g(t)o(w)o(o)f(di\013eren)o(t)h
(functions,)g(one)g(where)g(the)75 2704 y(starting)g(address)h(is)f
(signi\014can)o(t)f(and)h(one)g(where)h(the)g(starting)e(address)j(should)d
(b)q(e)i(ignored.)p eop
%%Page: 15 16
bop 75 -100 a Ff(CHAPTER)14 b(1.)27 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)717 b Fn(15)158 45 y(An)20 b(un)o(b)q(ound)g(bu\013er)h(descriptor)g
(is)e(created)i(b)o(y)f(using)f(the)i(sp)q(ecial)f Fl(MPI)p
1400 45 14 2 v 15 w(NULL)f Fn(v)n(alue)g(as)h(the)g Fl(start)75
95 y Fn(parameter)14 b(in)f Fl(MPI)p 391 95 V 15 w(APPEND)p
538 95 V 15 w(xxx)g Fn(op)q(erations)h(that)g(create)h(this)f(descriptor.)20
b(An)14 b(un)o(b)q(ound)g(bu\013er)h(descriptor)75 145 y(can)f(also)f(b)q(e)i
(created)g(b)o(y)f Fk(un)o(bind)o(in)o(g)d Fn(a)j(b)q(ound)g(bu\013er)g
(descriptor.)158 230 y Fk(MPI)p 257 230 15 2 v 17 w(UNBIND\(handlein,)f
(handleout\))75 357 y(IN)j(handlein)i Fn(handle)c(to)f(b)q(ound)h(bu\013er)h
(descriptor)75 440 y Fk(OUT)h(handleout)h Fn(handle)g(to)g(un)o(b)q(ound)g
(bu\013er)h(descriptor)g(with)f(the)g(datat)o(yp)q(e)g(of)g(the)g(input)g
(bu\013er)h(de-)179 490 y(scriptor)158 659 y Fj(Discussion:)158
705 y Fi(The)12 b Fd(MPI)p 298 705 12 2 v 13 w(UNBIND)e Fi(function)k(allo)o
(ws)g(to)e(create)h(a)g(bu\013er)g(datat)o(yp)q(e)h(after)e(the)g(pattern)h
(of)g(an)f(existing)j(bu\013er)e(and,)75 751 y(therefor,)g(after)g(the)g
(pattern)g(of)g(an)g(existing)j(data)d(structure)h(in)f(memory)m(.)158
883 y Fn(W)m(e)h(rep)q(eat)h(the)f(last)g(three)h(examples,)d(using)i(this)g
(alternativ)o(e)g(notation.)158 933 y(Example)e(2':)75 1024
y Fl(int)21 b(i[2])g(=)h({)f(2,)h(0};)75 1074 y(int)f(a[100];)75
1124 y(...)75 1174 y(mpi_create_buffer)o(\()e(&b1,)i(MPI_PERSISTENT\);)75
1224 y(mpi_append_indexe)o(d\()e(b1,)i(MPI_NULL,)f(2,)h(i,)h(MPI_INT\);)75
1323 y(mpi_create_buffer)o(\()d(&b2,)i(MPI_PERSISTENT\);)75
1373 y(mpi_append_contig)o(uous\()d(b2,)j(MPI_NULL,)f(3,)i(b1\);)75
1473 y(mpi_create_buffer)o(\()d(&b3,)i(MPI_PERSISTENT\);)75
1523 y(mpi_append_indexe)o(d\()e(b3,)i(\(void)g(*\)a,)g(2,)g(i,)h(b2\);)75
1572 y(mpi_append_vec\()d(b3,)i(\(void)g(*\)\(a+50\),)f(3,)h(3,)g(2,)h(b1\);)
158 1664 y Fn(Example)12 b(3:)75 1846 y Fl(struct)21 b(foostruct)e({)140
1896 y(int)j(i;)140 1946 y(double)f(d[5];)140 1996 y(char)g(b;)75
2046 y(};)75 2145 y(struct)g(foostruct)e(foo[100];)75 2245
y(MPI_BUFFER)h(t,)h(tt;)75 2295 y(MPI_BUFFER)f(fb;)75 2394
y(mpi_create_buffer)o(\(&t,)40 b(MPI_EPHEMERAL\);)75 2444 y
(mpi_create_buffer)o(\(&fb,)18 b(MPI_PERSISTENT\);)75 2544
y(/*)j(Describe)g(the)g(data)g(type)g(in)g(t)h(*/)75 2593 y
(mpi_append_contig)o(uous\()o(t,)d(&\(\(struct)h(foostruct)g
(*\)0\)->i,1,MPI_IN)o(T\);)75 2643 y(mpi_append_contig)o(uous\()o(t,)f
(&\(\(struct)h(foostruct)g(*\)0\)->d,5,MPI_DO)o(UBLE\))o(;)75
2693 y(mpi_append_contig)o(uous\()o(t,)f(&\(\(struct)h(foostruct)g
(*\)0\)->b,1,MPI_BY)o(TE\);)p eop
%%Page: 16 17
bop 75 -100 a Ff(CHAPTER)14 b(1.)27 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)717 b Fn(16)75 95 y Fl(/*)21 b(Abstract)g(buffer)f(datatype)g(*/)75
145 y(mpi_unbind\(t,)f(tt\);)75 244 y(/*)i(Now)h(describe)e(foo)h(itself,)f
(a)i(contiguous)e(array)g(of)i(100)f(elements)97 294 y(*)g(of)h(the)f
(derived)f(type.)97 344 y(*/)75 394 y(mpi_append_contig)o(uous\()o(fb,&f)o
(oo,10)o(0,tt\))o(;)75 444 y(mpi_commit\(fb\);)158 521 y Fn(Example)12
b(4:)162 649 y Fl(real)21 b(a\(100,100,100\))75 699 y(c)65
b(declare)21 b(the)g(buffer)f(descriptors)162 749 y(integer)h(onedslice)162
799 y(integer)g(twodslice)162 848 y(integer)g(message)75 948
y(c)65 b(Slice)21 b(out)g(the)g(section)g(a\(1:21:2,1:10,1:)o(11\))d(as)k(a)f
(single)g(buffer)g(descriptor)162 1048 y(call)g(mpi_create_buffer\()o(ondes)o
(lice,)d(MPI_EPHEMERAL\))162 1097 y(call)j(mpi_create_buffer\()o(twods)o
(lice,)d(MPI_EPHEMERAL\))162 1147 y(call)j(mpi_create_buffer\()o(messa)o(ge,)
62 b(MPI_EPHEMERAL\))162 1247 y(call)21 b(mpi_append_vec)e(\(onedslice,)h
(MPI_NULL,)f(1+\(21-1\)/2,)140 1297 y($)458 b(2,)21 b(1,)h(MPI_REAL\))162
1346 y(call)f(mpi_append_hvec\(tw)o(odsli)o(ce,)e(MPI_NULL,)41
b(10,)140 1396 y($)458 b(100*MPI_REAL_SIZE)o(,)19 b(1,)i(ondeslice\))162
1446 y(call)g(mpi_append_hvec\(me)o(ssage)o(,)e(a,)239 b(11,)140
1496 y($)458 b(100*100*MPI_REAL_)o(SIZE)o(,1,tw)o(odsli)o(ce\))162
1596 y(call)21 b(mpi_commit\(message)o(\))75 1695 y(c)65 b(all)21
b(done...)75 1802 y Fk(T)o(yp)q(e)16 b(matc)o(hing)75 1879
y Fn(The)j(rules)h(for)f(bu\013er)h(t)o(yp)q(e)f(matc)o(hing)e(are)j
(extended)g(to)f(comp)q(osite)f(bu\013er)i(descriptors:)30
b(A)19 b(send)h(bu\013er)75 1928 y(descriptor)15 b(matc)o(hes)f(a)g(receiv)o
(e)h(bu\013er)g(descriptor)g(is)f(the)h(successiv)o(e)h(basic)e(en)o(tries)h
(in)e(eac)o(h)i(descriptor)g(ha)o(v)o(e)75 1978 y(iden)o(tical)e(names.)158
2028 y(Example:)75 2106 y Fl(struct)21 b({)140 2156 y(int)h(a[5];)140
2205 y(char)f(c;)228 2255 y(})g(st[100];)75 2355 y(...)75 2405
y(mpi_create_buffer)o(\(&b1,)d(MPI_PERSISTENT\);)75 2455 y(mpi_append_contig)
o(uous\()o(b1,)h(\(void)h(*\)st,)h(5,)h(MPI_INT\);)75 2504
y(mpi_append_contig)o(uous\()o(b1,)d(\(void)h(*\)&\(st.c\),)g(1,)h
(MPI_CHAR\);)75 2554 y(mpi_append_contig)o(uous\()o(b1,)e(\(void)h(*\)st,)h
(5,)h(MPI_INT\);)75 2604 y(mpi_append_contig)o(uous\()o(b1,)d(\(void)h
(*\)&\(st.c\),)g(1,)h(MPI_CHAR\);)75 2654 y(...)75 2704 y(mpi_create_buffer)o
(\(&b2,)d(MPI_PERSISTENT\);)p eop
%%Page: 17 18
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(17)75 45 y Fl(mpi_append_contig)o(uous\()o(b2,)19
b(\(void)h(*\)st,)h(5,)h(MPI_INT\);)75 95 y(mpi_append_contig)o(uous\()o(b2,)
d(\(void)h(*\)&\(st.c\),)g(1,)h(MPI_CHAR\);)75 195 y(mpi_create_buffer)o
(\(&b3,)d(MPI_PERSISTENT\);)75 244 y(mpi_append_contig)o(uous\()o(b3,)h
(\(void)h(*\)st,)h(2,)h(b2\);)158 327 y Fn(The)15 b(bu\013er)g(descriptors)i
(asso)q(ciated)e(with)f Fl(b1)g Fn(and)g Fl(b3)g Fn(ha)o(v)o(e)h(matc)o(hing)
d(t)o(yp)q(es.)21 b(They)15 b(b)q(oth)f(corresp)q(ond)75 377
y(to)19 b(a)g(sequence)i(of)e Fl(int,)i(int,)g(char,)f(int,)h(int,)g(char)p
Fn(.)33 b(\(in)19 b(fact,)h(b)q(oth)f(bu\013ers)i(consist)f(of)e(the)i(same)
75 427 y(sequence)c(of)d(v)n(ariables\).)158 555 y Fj(Discussion:)158
601 y Fi(A)f(more)g(restrictiv)o(e)i(de\014nition)g(of)e(t)o(yp)q(e)h(matc)o
(hing)g(is)g(to)f(require)i(\\structural)f(matc)o(hing":)18
b(I.e.,)11 b(t)o(w)o(o)h(descriptors)75 647 y(matc)o(h)k(if)f(all)i(corresp)q
(onding)h(top)d(\(comp)q(osite\))i(comp)q(onen)o(ts)g(recursiv)o(ely)g(matc)o
(h)f(pairwise.)25 b(With)17 b(suc)o(h)e(de\014nition,)75 692
y(the)e(t)o(w)o(o)g(bu\013er)h(descriptors)h(in)f(the)f(last)h(example)h
(don't)e(ha)o(v)o(e)h(matc)o(hing)h(t)o(yp)q(es.)j(I)13 b(\(Marc\))g(b)q
(eliev)o(e)i(that)e(the)h(w)o(eak)o(er)75 738 y(de\014nition)20
b(mak)o(es)d(more)g(sense)g(in)h(our)f(en)o(vironmen)o(t,)j(since)e(w)o(e)e
(do)i(not,)f(in)h(general,)h(require)f(an)o(y)g(corrsp)q(ondance)75
784 y(b)q(et)o(w)o(een)13 b(data)h(alignemen)o(t)h(at)e(sender)h(and)f(data)h
(alignmen)o(t)h(at)e(receiv)o(er.)158 916 y Fn(T)o(yp)q(e)h(matc)o(hing)e(of)
i(bu\013er)g(descriptor)i(and)d(host)i(language)d(is)i(dealt)g(similarly)m(.)
75 1024 y Fk(Message)i(length)75 1101 y Fn(The)10 b(length)g(of)f(a)g
(message)g(is)g(de\014ned)i(as)f(the)g(n)o(um)o(b)q(er)f(of)g(basic)g(elemen)
o(ts)h(\(comp)q(onen)o(ts)f(with)h(basic)f(datat)o(yp)q(es\))75
1150 y(in)k(the)i(message.)j(This)13 b(is)h(the)h(v)n(alue)e(returned)i(in)f
(the)g(status)h(of)e(a)h(receiv)o(e)h(op)q(eration)f(for)f(that)h(message.)
158 1279 y Fj(Discussion:)158 1324 y Fi(An)f(alternativ)o(e)i(de\014nition)h
(is)e(to)f(coun)o(t)h(message)f(length)i(as)e(the)g(n)o(um)o(b)q(er)h(of)f
(top)h(comp)q(onen)o(ts)g(in)g(the)f(message.)75 1370 y(If)j(w)o(e)g(accept)g
(the)h(w)o(eak)o(er)f(de\014nition)j(of)e(t)o(yp)q(e)f(compatibili)q(t)o(y)m
(,)k(this)d(has)g(the)f(e\013ect)h(that)f(the)h(length)h(of)e(a)g(message)75
1416 y(sen)o(t)e(ma)o(y)h(b)q(e)f(v)o(ery)h(di\013eren)o(t)g(from)f(the)g
(length)i(of)e(the)g(message)h(receiv)o(ed)g({)f(ev)o(en)h(in)g(a)f
(homogeneous)i(en)o(vironmen)o(t.)75 1461 y(Consider)g(in)g(the)f(previous)h
(example)h(the)d(case)i(of)e(message)i(sen)o(t)f(with)g Fd(b1)f
Fi(and)h(receiv)o(ed)h(with)g Fd(b3)d Fi({)i(the)g(length)h(has)75
1507 y(halv)o(ed.)158 1557 y(On)d(the)g(other)h(hand,)g(if)f(w)o(e)g(accept)g
(the)g(stronger)h(de\014nition)i(of)d(t)o(yp)q(e)g(compatibil)q(it)o(y)m(,)j
(coun)o(ting)f(top)e(elemen)o(ts)h(is)75 1607 y(plausible.)20
b(Since)13 b(top)f(comp)q(onen)o(ts)h(are)f(required)h(to)f(matc)o(h)g
(pairwise,)h(the)f(message)h(length)g(is)f(in)o(teger,)h(and)f(iden)o(tical)
75 1657 y(at)h(sending)i(and)e(receiving)j(sites.)75 1847 y
Fk(Bu\013er)f(descriptors)e(as)i(datat)o(yp)q(es)g(in)g(comm)o(unicati)o(on)e
(op)q(erations)75 1924 y Fn(W)m(e)h(prop)q(ose)h(to)f(allo)o(w)e(the)j(use)g
(of)e(bu\013er)i(descriptor)h(handles)e(as)g(datat)o(yp)q(es)h(in)f(con)o
(tiguous)g(bu\013er)h(comm)o(u-)75 1974 y(nication)e(op)q(erations)h(\(e.g.)k
(in)c Fl(MPI)p 651 1974 14 2 v 15 w(SENDC)p Fn(\))158 2023
y(If)i(w)o(e)h(do)f(so,)h(then)g(w)o(e)g(don't)f(need)h(an)o(ymore)e(the)i
(more)f(general)g(comm)o(unication)d(op)q(erations)k(with)f(a)75
2073 y Fl(buffer)p 210 2073 V 14 w(handle)d Fn(argumen)o(t!!!)75
2123 y Fl(MPI)p 144 2123 V 15 w(SEND\(buffer)p 401 2123 V 13
w(handle,)21 b(dest,)g(tag,)g(context\))75 2173 y Fn(is)14
b(replaced)h(b)o(y)75 2223 y Fl(MPI)p 144 2223 V 15 w(SENDC\(start,)k(1,)j
(buffer)p 640 2223 V 14 w(handle,)f(dest,)f(tag,)h(context\))p
Fn(,)75 2272 y(where)14 b Fl(start)d Fn(is)i(the)g(\014rst)g(bu\013er)h(lo)q
(cation.)i(\(If)d(un)o(b)q(ound)f(bu\013er)i(descriptors)g(are)f(k)o(ept)g
(distinct)g(from)e(b)q(ound)75 2322 y(bu\013er)j(descriptors,)g(then)f(the)h
(argumen)o(t)d Fl(buffer)p 897 2322 V 15 w(handle)g Fn(gets)j(replaced)f(b)o
(y)g(the)g(un)o(b)q(ound)g(datat)o(yp)q(e)g(of)f(the)75 2372
y(bu\013er.\))158 2422 y(Suc)o(h)f(simpli\014cation)d(w)o(ould)i(b)q(e)h(a)f
(big)g(win,)h(as)f(comm)o(unication)d(with)k(general)g(bu\013ers)h(b)q
(ecomes)e(a)h(sp)q(ecial)75 2472 y(case)18 b(of)e(comm)o(unicatio)o(n)e(with)
j(con)o(tiguous)f(bu\013ers.)28 b(One)18 b(ca)o(v)o(eat:)23
b(When)17 b(a)g(bu\013er)h(descriptor)g(is)e(used)i(as)75 2522
y(a)d(datat)o(yp)q(e,)g(w)o(e)g(ma)o(y)e(ha)o(v)o(e)i(restrictions)h(on)f
(where)h(from)d(the)j(di\013eren)o(t)g(v)n(ariables)e(app)q(earing)h(in)f
(the)i(bu\013er)75 2571 y(descriptor)e(come)f(from:)j(They)d(need)h(to)f(all)
f(come)g(from)g(the)i(same)e(con)o(tiguous)h(address)h(sap)q(ce,)g(so)f(that)
h(their)75 2621 y(relativ)o(e)i(displacemen)o(t)g(is)g(w)o(ell)f(de\014ned.)
27 b(It)16 b(means)g(that)g(w)o(e)h(shall)e(only)h(b)q(e)g(able)g(to)h(pac)o
(k)f(in)g(one)g(message)75 2671 y(v)n(ariables)c(that)i(b)q(elong)f(to)g(the)
g(same)g(con)o(tiguous)g(address)h(space.)19 b(W)m(e)13 b(ha)o(v)o(e)g(to)g
(think)f(ab)q(out)i(syn)o(tactic)f(rules)p eop
%%Page: 18 19
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(18)75 45 y(to)15 b(enforce)g(this)g(restriction:)21
b(E.g.,)14 b(is)g(it)h(su\016cien)o(t)g(to)g(sa)o(y)f(in)g(C)h(that)g(a)g
(bu\013er)g(is)g(either)h(all)d(in)h(stac)o(k,)h(or)g(all)75
95 y(in)e(heap,)h(or)g(all)f(in)g(static?)19 b(What)13 b(is)h(the)g(equiv)n
(alen)o(t)f(F)m(ortran)h(rule?)k(Are)d(suc)o(h)g(rules)f(acceptable?)158
227 y Fj(Discussion:)35 b Fi(OPINIONS?)75 418 y Fk(Other)14
b(issues)75 495 y Fn(An)i(ephemeral)f(bu\013er)h(descriptor)h(can)f(b)q(e)g
(freed)h(as)e(so)q(on)h(as)g(it)f(has)h(b)q(een)g(used)h(as)e(a)h(t)o(yp)q(e)
g(parameter)f(in)g(a)75 544 y(bu\013er)g(descriptor)g(creation)f(function.)
158 594 y(A)j(bu\013er)g(descriptor)h(handle)e(cannot)h(b)q(e)g(passed)g(to)f
(the)h(same)f Fl(MPI)p 1295 594 14 2 v 15 w(APPEND)p 1442 594
V 14 w(xxx)g Fn(function)g(b)q(oth)h(as)f(a)75 644 y(bu\013er)f(descriptor)g
(handle)f(and)g(as)g(a)f(datat)o(yp)q(e)h(\(no)g(self-references\).)158
777 y Fj(Discussion:)35 b Fi(The)13 b(last)h(constrain)o(t)g(can)g(b)q(e)f
(remo)o(v)o(ed)h(if)f(someb)q(o)q(dy)h(cares.)75 975 y Fh(1.5.4)55
b(T)n(yp)r(e)18 b(Matc)n(hing)75 1052 y Fn(One)d(can)f(think)f(of)h(message)f
(transmission)g(as)h(consisting)g(of)f(three)i(phases:)126
1135 y(1.)20 b(Data)13 b(is)h(pulled)f(out)h(of)f(the)i(send)g(bu\013er)f
(and)g(a)g(message)f(is)h(assem)o(bled)126 1218 y(2.)20 b(A)14
b(message)f(is)h(transferred)i(from)c(sender)j(to)f(receiv)o(er)126
1301 y(3.)20 b(Data)13 b(is)h(pulled)f(from)f(the)j(incoming)c(message)j(and)
g(disassem)o(bled)f(in)o(to)g(the)i(receiv)o(e)g(bu\013er)158
1384 y(T)o(yp)q(e)c(matc)o(hing)e(has)i(to)f(b)q(e)h(observ)o(ed)h(at)f(eac)o
(h)g(of)f(these)i(three)g(phases:)17 b(The)11 b(t)o(yp)q(e)g(of)f(eac)o(h)i
(v)n(ariable)d(in)h(the)75 1434 y(sender)15 b(bu\013er)g(has)f(to)g(matc)o(h)
f(the)h(t)o(yp)q(e)g(of)g(the)g(corresp)q(onding)h(en)o(try)f(in)g(the)g
(bu\013er)h(descriptor;)g(the)f(t)o(yp)q(e)h(of)75 1484 y(an)e(en)o(try)g(in)
f(the)h(bu\013er)h(descriptor)g(used)g(to)e(send)i(a)f(message)f(has)h(to)f
(matc)o(h)g(the)h(t)o(yp)q(e)h(of)e(the)h(corresp)q(onding)75
1534 y(en)o(try)f(in)e(the)i(bu\013er)g(descriptor)g(used)g(to)f(receiv)o(e)h
(the)g(message;)f(and)g(the)h(t)o(yp)q(e)f(of)g(eac)o(h)g(v)n(ariable)f(in)h
(the)h(receiv)o(e)75 1583 y(bu\013er)j(has)g(to)f(matc)o(h)f(the)i(corresp)q
(onding)h(en)o(try)f(in)e(the)i(receiv)o(er)h(bu\013er)g(descriptor.)k(A)15
b(program)e(that)h(fails)75 1633 y(to)g(observ)o(e)h(these)g(three)g(rules)g
(is)e(erroneous.)158 1683 y(T)m(o)h(de\014ne)h(t)o(yp)q(e)g(matc)o(hing)d
(more)h(precisely)m(,)i(w)o(e)f(need)h(to)g(deal)f(with)g(t)o(w)o(o)f
(issues:)20 b(matc)o(hing)13 b(of)g(t)o(yp)q(es)j(of)75 1733
y(the)h(host)g(language)f(with)g(bu\013er)h(descriptor)h(t)o(yp)q(es;)g(and)f
(matc)o(hing)d(of)i(bu\013er)i(descriptor)g(t)o(yp)q(es)f(at)f(sender)75
1783 y(and)c(receiv)o(er.)18 b(W)m(e)12 b(restrict)h(ourselv)o(es)g(to)f(the)
g(case)h(where)g(the)f(sending)g(and)g(receiving)g(programs)e(are)i(written)
75 1832 y(in)h(the)i(same)e(language.)158 1882 y(The)f(t)o(yp)q(e)h(of)e(an)h
(en)o(try)g(in)g(the)g(sender)i(bu\013er)f(descriptor)g(matc)o(hes)f(the)g(t)
o(yp)q(e)h(of)e(an)h(en)o(try)g(in)g(the)g(receiv)o(er)75 1932
y(bu\013er)e(descriptor)h(if)e(they)h(ha)o(v)o(e)f(iden)o(tical)g(names:)15
b Fl(MPI)p 966 1932 V 15 w(INTEGER)8 b Fn(matc)o(hes)h Fl(MPI)p
1365 1932 V 15 w(INTEGER)p Fn(,)f Fl(MPI)p 1620 1932 V 15 w(REAL)g
Fn(matc)o(hes)75 1982 y Fl(MPI)p 144 1982 V 15 w(REAL)p Fn(,)13
b(and)g(so)h(on.)158 2032 y(The)i(t)o(yp)q(e)g(of)e(a)h(v)n(ariable)g(in)g(a)
g(host)g(program)f(matc)o(hes)h(the)h(t)o(yp)q(e)g(of)e(the)i(en)o(try)g(in)f
(a)g(bu\013er)i(descriptor)75 2082 y(if)e(the)i(name)e(of)g(the)i(bu\013er)g
(descriptor)g(en)o(try)g(t)o(yp)q(e)g(corresp)q(onds)h(to)e(the)g(basic)g(t)o
(yp)q(e)h(of)f(the)g(host)h(program)75 2131 y(v)n(ariable:)24
b(an)17 b(en)o(try)h(with)f(t)o(yp)q(e)h(name)e Fl(MPI)p 805
2131 V 15 w(INTEGER)g Fn(matc)o(hes)h(a)g(F)m(ortran)g(v)n(ariable)f(of)h(t)o
(yp)q(e)h Fl(INTEGER)p Fn(,)d(an)75 2181 y(en)o(try)h(with)f(t)o(yp)q(e)h
(name)e Fl(MPI)p 557 2181 V 15 w(REAL)g Fn(matc)o(hes)h(a)g(F)m(ortran)g(v)n
(ariable)f(of)h(t)o(yp)q(e)h Fl(REAL)p Fn(,)e(and)h(so)g(on.)22
b(There)17 b(is)e(one)75 2231 y(exception)i(to)f(this)g(last)f(rule:)23
b(An)16 b(en)o(try)g(with)g(t)o(yp)q(e)h(name)d Fl(MPI)p 1137
2231 V 15 w(BYTE)i Fn(can)g(b)q(e)g(used)h(to)f(matc)o(h)f(an)o(y)g(b)o(yte)i
(of)75 2281 y(storage)f(\(on)f(a)g(b)o(yte-addressable)h(mac)o(hine\),)e
(irresp)q(ectiv)o(e)j(of)d(the)i(datat)o(yp)q(e)f(of)g(the)h(v)n(ariable)e
(that)h(con)o(tains)75 2331 y(this)j(b)o(yte.)30 b(The)18 b(v)n(alue)g(of)f
(the)h(message)g(en)o(try)g(will)e(b)q(e)j(the)f(binary)g(v)n(alue)f(of)g
(the)h(corresp)q(onding)h(b)o(yte)f(in)75 2380 y(memory)m(.)158
2430 y(W)m(e)c(th)o(us)g(ha)o(v)o(e)g(t)o(w)o(o)f(cases:)137
2513 y Fc(\017)21 b Fn(Comm)o(uni)o(cation)d(of)j(t)o(yp)q(ed)h(v)n(alues)g
(\(e.g.,)g(with)f(datat)o(yp)q(e)h(di\013eren)o(t)g(from)e
Fl(MPI)p 1541 2513 V 15 w(BYTE)p Fn(\),)h(where)h(the)179 2563
y(datat)o(yp)q(es)c(of)f(the)i(corresp)q(onding)f(en)o(tries)h(in)e(the)h
(sender)i(program,)c(in)i(the)g(sender)h(bu\013er)g(descrip-)179
2613 y(tor,)13 b(in)h(the)g(receiv)o(er)i(bu\013er)f(descriptor)g(and)e(in)h
(the)g(receiv)o(er)i(program)c(should)i(all)e(matc)o(h.)p eop
%%Page: 19 20
bop 75 -100 a Ff(CHAPTER)14 b(1.)27 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)717 b Fn(19)137 45 y Fc(\017)21 b Fn(Comm)o(uni)o(cation)12
b(of)i(un)o(t)o(yp)q(ed)i(v)n(alues)e(\(e.g.,)g(of)h(datat)o(yp)q(e)g
Fl(MPI)p 1214 45 14 2 v 15 w(BYTE)p Fn(\),)f(where)i(the)f(the)h(corresp)q
(onding)179 95 y(en)o(tries)f(in)e(the)i(sender)g(and)f(the)g(receiv)o(er)h
(bu\013er)g(descriptors)h(ha)o(v)o(e)d(b)q(oth)h(datat)o(yp)q(e)g
Fl(MPI)p 1631 95 V 16 w(BYTE)p Fn(.)e(In)i(this)179 145 y(case,)k(there)g
(are)f(no)g(requiremen)o(ts)g(on)g(the)g(datat)o(yp)q(es)h(of)e(the)i
(corresp)q(onding)f(en)o(tries)h(in)f(the)g(sender)179 195
y(and)c(the)i(receiv)o(er)g(programs,)e(nor)h(is)f(it)h(required)h(that)f
(they)g(b)q(e)g(the)h(same.)75 311 y Fh(1.5.5)55 b(Data)19
b(con)n(v)n(ersion)75 387 y Fn(W)m(e)13 b(use)i(the)g(follo)o(wing)c
(terminology:)75 470 y Fk(t)o(yp)q(e)k(con)o(v)o(ersion)j Fn(c)o(hanges)d
(the)f(datat)o(yp)q(e)g(of)f(a)h(v)n(alue,)f(e.g.)18 b(b)o(y)13
b(rounding)h(a)f Fl(REAL)g Fn(to)h(an)g Fl(INTEGER)p Fn(.)75
553 y Fk(represen)o(tati)o(on)e(con)o(v)o(ersion)18 b Fn(c)o(hanges)e(the)g
(binary)f(represen)o(tation)i(of)e(a)g(v)n(alue,)f(e.g.)23
b(from)13 b(Hex)j(\015oating)179 603 y(p)q(oin)o(t)d(to)h(IEEE)g(\015oating)f
(p)q(oin)o(t.)158 686 y(Represen)o(tation)20 b(con)o(v)o(ersion)f(is)g
(needed)h(when)g(data)e(is)h(mo)o(v)o(ed)e(across)j(mac)o(hines)e(that)h(use)
h(di\013eren)o(t)75 736 y(binary)9 b(enco)q(dings)h(for)f(the)h(same)f(datat)
o(yp)q(e.)16 b(Represen)o(tation)11 b(con)o(v)o(ersion)e(preserv)o(es,)k(to)c
(the)h(greatest)h(p)q(ossible)75 786 y(extend,)h(the)e Fk(v)m(alue)g
Fn(represen)o(ted.)20 b(Ho)o(w)o(ev)o(er,)11 b(rounding)e(errors)j(and)e(o)o
(v)o(er\015o)o(w)g(and)g(under\015o)o(w)h(exceptions)g(ma)o(y)75
836 y(o)q(ccur)17 b(during)e(\015oating)f(p)q(oin)o(t)h(con)o(v)o(ersions;)h
(con)o(v)o(ersion)g(of)f(in)o(tegers)h(ma)o(y)e(also)g(lead)h(to)h
(exceptions)g(when)g(a)75 885 y(v)n(alue)d(that)h(can)g(represen)o(ted)j(in)c
(one)h(system)g(cannot)g(b)q(e)h(represen)o(ted)h(in)e(the)g(other)h(system.)
i(MPI)d(do)q(es)h(not)75 935 y(sp)q(ecify)f(rules)h(for)e(represen)o(tation)j
(con)o(v)o(ersion.)158 985 y(The)j(t)o(yp)q(e)f(matc)o(hing)e(rules)j(imply)d
(that)i(MPI)g(comm)o(unication)d(nev)o(er)k(en)o(tails)e(t)o(yp)q(e)i(con)o
(v)o(ersion.)31 b(On)75 1035 y(the)15 b(other)g(hand,)f(MPI)g(requires)i
(that)e(a)g(represen)o(tation)i(con)o(v)o(ersion)e(b)q(e)h(p)q(erformed)f
(when)h(a)f(t)o(yp)q(ed)g(v)n(alue)g(is)75 1085 y(transferred)g(across)g(en)o
(vironmen)o(ts)d(that)i(use)g(di\013eren)o(t)g(represen)o(tations)i(for)d
(the)h(datat)o(yp)q(e)g(of)e(this)i(v)n(alue.)k(An)75 1135
y(exception)f(o)q(ccurring)g(during)f(represen)o(tation)i(con)o(v)o(ersion)f
(results)g(in)f(a)h(failure)e(of)h(the)h(comm)o(unicatio)o(n;)d(an)75
1184 y(error)i(o)q(ccurs)g(either)g(in)e(the)i(send)g(op)q(eration,)e(or)h
(the)g(receiv)o(e)h(op)q(eration,)f(or)g(b)q(oth.)158 1234
y(If)g(a)f(v)n(alue)h(sen)o(t)h(in)e(a)h(message)g(is)f(un)o(t)o(yp)q(ed)i
(\(i.e.,)e(of)g(t)o(yp)q(e)i Fl(MPI)p 1180 1234 V 15 w(BYTE)p
Fn(\),)e(then)h(the)h(binary)e(represen)o(tation)75 1284 y(of)h(the)g(b)o
(yte)h(stored)g(at)f(the)h(receiv)o(er)h(is)e(iden)o(tical)f(to)h(the)h
(binary)f(represen)o(tation)i(of)d(the)i(b)o(yte)g(loaded)e(at)h(the)75
1334 y(sender.)24 b(This)16 b(holds)f(true,)h(whether)h(sender)g(and)e
(receiv)o(er)i(run)f(in)f(the)h(same)f(or)g(in)g(distinct)h(en)o(vironmen)o
(ts;)75 1384 y(no)e(represen)o(tation)h(con)o(v)o(ersion)f(is)g(required.)158
1433 y(Note)f(that)g(no)g(con)o(v)o(ersions)g(ev)o(er)h(o)q(ccur)g(when)g(an)
e(MPI)h(program)f(executes)j(in)d(a)h(homogeneous)f(system,)75
1483 y(where)j(all)e(pro)q(cesses)j(run)f(in)e(the)i(same)e(en)o(vironmen)o
(t.)k(Also)c(note)i(the)f(di\013eren)o(t)h(b)q(eha)o(vior)f(of)f
Fl(MPI)p 1695 1483 V 15 w(BYTE)g Fn(and)75 1533 y(of)18 b Fl(MPI)p
196 1533 V 15 w(CHARACTER)p Fn(.)f(A)h(bu\013er)i(descriptor)g(en)o(try)f
(with)g(datat)o(yp)q(e)g(of)f Fl(MPI)p 1320 1533 V 15 w(CHARACTER)f
Fn(can)i(only)f(matc)o(h)f(a)75 1583 y(F)m(ortran)e(v)n(ariable)f(of)h(t)o
(yp)q(e)g Fl(CHARACTER)p Fn(;)e(and)i(represen)o(tation)i(con)o(v)o(ersion)e
(ma)o(y)e(o)q(ccur)j(when)g(v)n(alues)f(of)f(t)o(yp)q(e)75
1633 y Fl(MPI)p 144 1633 V 15 w(CHARACTER)e Fn(are)i(transferred.,)h(e.g.,)e
(from)f(an)h(EBCDIC)i(enco)q(ding)f(to)f(an)h(ASCI)q(I)g(enco)q(ding.)158
1683 y(Consider)g(the)h(follo)o(wing)c(examples.)75 1774 y
Fl(!)43 b(FIRST)21 b(EXAMPLE)75 1824 y(INTEGER)f(A\(100\))75
1873 y(...)75 1923 y(CALL)h(MPI_CREATE_BUFFER)o(\(BH,)d(MPI_PERSISTENT\))75
1973 y(CALL)j(MPI_APPEND_CONTIG)o(UOUS)d(\(BH,)j(A\(1\),)g(1,)h
(MPI_CHARACTER\))158 2064 y Fn(This)15 b(program)f(is)i(erroneous,)g(since)h
(the)f(t)o(yp)q(e)g(of)e(the)j(bu\013er)f(descriptor)h(do)q(es)f(not)f(matc)o
(h)g(the)h(t)o(yp)q(e)g(of)75 2114 y(the)g(v)n(ariable)f(in)g(the)i
(bu\013er.)25 b(The)16 b(b)q(eha)o(vior)f(or)h(this)g(program)e(is)i
(unde\014ned.)25 b(A)16 b(desirable)g(b)q(eha)o(vior)g(is)f(for)75
2164 y(that)f(error)h(to)e(b)q(e)i(detected)h(\(at)e(compile)e(time)h(or)h
(run)g(time\))e(and)i(result)h(in)e(an)h(error)h(condition.)75
2255 y Fl(!)43 b(SECOND)21 b(EXAMPLE)75 2305 y(INTEGER)f(A\(100\))75
2355 y(...)75 2405 y(CALL)h(MPI_CREATE_BUFFER)o(\(BH,)d(MPI_PERSISTENT\))75
2455 y(CALL)j(MPI_APPEND_CONTIG)o(UOUS)d(\(BH,)j(A\(1\),)g(1,)h(MPI_BYTE\))
158 2546 y Fn(This)11 b(program)f(is)h(correct.)19 b(The)12
b(b)o(yte)g(that)f(will)f(b)q(e)i(transmitted)f(in)g(a)g(message)g(created)i
(with)e(this)h(bu\013er)75 2596 y(descriptor)h(is)f(the)g(\014rst)h(b)o(yte)f
(in)g(the)g(storage)h(o)q(ccupied)f(b)o(y)g Fl(A\(1\))p Fn(.)17
b(The)12 b(v)n(alue)f(of)h(this)f(b)o(yte)i(is)e(implemen)o(tation)75
2646 y(dep)q(enden)o(t,)17 b(and)e(will)f(v)n(ary)h(according)g(to)g(the)h(n)
o(um)o(b)q(er)f(of)f(b)o(ytes)i(used)h(to)e(store)h(F)m(ortran)f(v)n
(ariables)g(of)f(t)o(yp)q(e)75 2695 y Fl(INTEGER)e Fn(and)i(the)h(b)o(yte)f
(ordering)g(on)f(the)i(host)f(mac)o(hine.)p eop
%%Page: 20 21
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(20)75 45 y Fl(!)43 b(THIRD)21 b(EXAMPLE)75 95
y(INTEGER)f(A\(100\))75 145 y(...)75 195 y(CALL)h(MPI_CREATE_BUFFER)o(\(BH1,)
d(MPI_PERSISTENT\))75 244 y(CALL)j(MPI_APPEND_CONTIG)o(UOUS)d(\(BH1,)j
(A\(1\),)g(1,)g(MPI_INTEGER\))75 294 y(...)75 344 y(CALL)g(MPI_CREATE_BUFFER)
o(\(BH2,)d(MPI_PERSISTENT\))75 394 y(CALL)j(MPI_APPEND_CONTIG)o(UOUS)d
(\(BH2,)j(A\(1\),)g(4,)g(MPI_BYTE\))158 485 y Fn(Consider)14
b(the)h(follo)o(wing)c(three)k(cases:)126 568 y(1.)20 b(A)10
b(message)g(is)g(sen)o(t)h(using)e(bu\013er)j(descriptor)f(handle)f
Fl(BH1)f Fn(and)h(receiv)o(ed)i(using)e(bu\013er)h(descriptor)g(handle)179
618 y Fl(BH2)p Fn(.)19 b(The)d(program)d(is)h(erroneous,)i(since)f(the)h
(sender)g(and)e(receiv)o(er)i(bu\013er)g(descriptors)g(don't)f(matc)o(h.)179
668 y(The)d(b)q(eha)o(vior)f(of)g(the)h(program)e(is)i(unde\014ned,)h(and)e
(a)g(p)q(ossible)h(\(desirable)g(but)g(not)g(required\))g(b)q(eha)o(vior)179
718 y(is)i(for)f(an)h(error)h(condition)e(to)g(o)q(ccur.)126
801 y(2.)20 b(Both)d(sender)h(and)f(receiv)o(er)i(use)e(bu\013er)h
(descriptor)g(handle)f Fl(BH1)p Fn(.)26 b(The)18 b(program)d(is)i(correct,)h
(and)f(an)179 850 y(in)o(teger)12 b(v)n(alue)f(is)g(transmitted)g(from)f
(sender)j(to)f(receiv)o(er.)19 b(The)12 b(v)n(alue)f(assigned)h(to)f
Fl(A\(1\))g Fn(at)g(the)h(receiv)o(er)179 900 y(is)h(iden)o(tical)f(to)h(the)
g(v)n(alue)g(of)f Fl(A\(1\))g Fn(at)h(the)h(sender,)g(but)f(the)h(binary)f
(represen)o(tation)h(of)e(this)i(v)n(alue)e(ma)o(y)179 950
y(b)q(e)i(di\013eren)o(t,)h(if)e(sender)i(and)f(receiv)o(er)h(run)g(in)e
(di\013eren)o(t)i(en)o(vironmen)o(ts.)126 1033 y(3.)20 b(Both)c(sender)h(and)
e(receiv)o(er)i(use)g(bu\013er)f(descriptor)h(handle)f Fl(BH2)p
Fn(.)22 b(The)16 b(program)e(is)h(correct.)25 b(Assume)179
1083 y(that)14 b(b)q(oth)h(sender)h(and)e(receiv)o(er)i(use)f(four)f(b)o
(ytes)h(to)f(store)i(in)o(tegers.)k(Then)15 b(the)g(v)n(alue)f(stored)h(in)f
Fl(A\(1\))179 1133 y Fn(at)i(the)h(receiv)o(er)h(has)e(the)h(same)f(binary)g
(represen)o(tation)i(as)e(the)h(v)n(alue)f(of)f Fl(A\(1)h Fn(at)g(the)h
(sender.)27 b(If)16 b(the)179 1183 y(same)c(b)o(yte)h(ordering)g(and)g(the)h
(same)e(enco)q(ding)h(of)g(in)o(teger)g(v)n(alues)g(is)g(used)g(at)g(b)q(oth)
g(ends)h(then)g Fl(A\(1\))e Fn(at)179 1232 y(the)j(receiv)o(er)h(is)f(set)g
(to)g(the)g(v)n(alue)f(of)g Fl(A\(1\))g Fn(at)h(the)g(sender;)h(otherwise)g
(the)f(same)f(32)g(bits)h(ma)o(y)e(enco)q(de)179 1282 y(di\013eren)o(t)i(v)n
(alues.)158 1365 y(Data)h(represen)o(tation)h(con)o(v)o(ersion)g(also)e
(applies)h(to)g(the)h(en)o(v)o(elop)q(e)g(of)e(a)h(message:)23
b(source,)17 b(destination)75 1415 y(and)d(tag)f(are)i(all)d(in)o(tegers)j
(that)f(ma)o(y)e(need)j(to)e(b)q(e)i(con)o(v)o(erted.)158 1543
y Fj(Implemen)o(tation)e(note:)158 1589 y Fi(The)d(curren)o(t)g(de\014nition)
j(do)q(es)d(not)h(require)g(messages)g(to)e(carry)i(t)o(yp)q(e)f
(information.)18 b(A)9 b(message)i(can)f(b)q(e)h(comp)q(osed)75
1635 y(and)g(sen)o(t)f(using)i(only)f(the)f(information)i(in)f(the)g(sender)g
(bu\013er)g(descriptor,)h(and)e(can)h(b)q(e)f(receiv)o(ed)i(and)e(stored)h
(using)h(only)75 1680 y(the)i(information)i(in)e(the)g(receiv)o(er)h
(bu\013er)g(descriptor.)21 b(If)13 b(messages)h(are)g(sen)o(t)g(b)q(et)o(w)o
(een)g(di\013eren)o(t)i(mac)o(hines)f(then)f(one)75 1726 y(can)e(either)h
(use)g(a)f(\\univ)o(ersal")j(data)d(enco)q(ding)i(for)e(messages,)h(use)f
(kno)o(wledge)i(of)d(the)i(receiv)o(er)g(en)o(vironmen)o(t)h(in)e(order)75
1772 y(to)i(con)o(v)o(ert)h(data)f(at)g(the)h(sender,)f(or)h(use)f(kno)o
(wledge)i(of)e(the)g(sender)h(en)o(vironmen)o(t)h(in)f(order)f(to)g(con)o(v)o
(ert)h(data)g(at)f(the)75 1817 y(receiv)o(er.)k(In)c(either)g(case)f(the)h
(lo)q(cal)g(bu\013er)g(descriptor)h(can)f(b)q(e)f(used)h(to)f(deriv)o(e)i
(the)e(t)o(yp)q(es)h(of)f(the)g(v)n(alues)h(transferred.)75
1863 y(Ho)o(w)o(ev)o(er,)e(additional)17 b(t)o(yp)q(e)c(information)i
(carried)f(b)o(y)g(messages)g(can)f(pro)o(vide)i(b)q(etter)e(error)g
(detection.)158 2074 y Fj(Discussion:)158 2120 y Fi(There)i(is)g(no)g
(agreemen)o(t)h(y)o(et)f(on)g(the)g(need)g(for)g(a)g(de\014nition)i(and,)f
(if)f(needed,)h(on)f(the)g(righ)o(t)g(de\014nition)j(of)c(t)o(yp)q(e)75
2165 y(matc)o(hing)j(and)e(con)o(v)o(ersion)i(b)q(et)o(w)o(een)f(programs)g
(written)g(in)g(di\013eren)o(t)g(languages.)26 b(One)15 b(prop)q(osal)i(is)f
(to)f(allo)o(w)h(b)q(oth)57 b Fe(TO)11 b(DISCUSS)75 2211 y
Fi(F)m(ortran)16 b(routines)i(to)e(sp)q(ecify)h(C)e(datat)o(yp)q(es)j(in)e
(their)h(bu\013er)g(descriptors,)h(and)f(for)e(C)h(routines)h(to)f(sp)q
(ecify)h(F)m(ortran)75 2257 y(data)o(yp)q(es.)j(The)13 b(draft)h(will)h(sp)q
(ecify)f(rules)h(for)e(t)o(yp)q(e)h(matc)o(hing)h(b)q(et)o(w)o(een)f(F)m
(ortran)g(v)n(ariables)h(and)g(C)e(datat)o(yp)q(es)h(in)h(the)75
2302 y(bu\013er)f(descriptors)h(and)f(b)q(et)o(w)o(een)f(C)g(v)n(ariables)j
(and)d(F)m(ortran)h(datat)o(yp)q(es)g(in)g(the)g(bu\013er)g(descriptor.)19
b(\(E.g.,)12 b(a)h(F)m(ortran)75 2348 y(v)n(ariable)h(of)e(t)o(yp)q(e)g
Fd(REAL)f Fi(ma)o(y)h(matc)o(h)g(an)g(en)o(try)h(of)f(t)o(yp)q(e)g
Fd(MPI)p 976 2348 12 2 v 13 w(FLOAT)e Fi(in)j(a)f(bu\013er)h(descriptor,)g
(but)g(not)f(an)g(en)o(try)h(of)e(t)o(yp)q(e)75 2394 y Fd(MPI)p
137 2394 V 13 w(INTEGER)p Fi(.)j(Data)j(represen)o(tation)i(con)o(v)o(ersion)
g(o)q(ccurs)f(if)f(corresp)q(onding)j(C)d(and)h(F)m(ortran)f(t)o(yp)q(es)h
(ha)o(v)o(e)f(di\013eren)o(t)75 2439 y(represen)o(tations)i(on)e(the)g(same)g
(pro)q(cess.)29 b(There)16 b(still)j(is)e(the)g(requiremen)o(t)h(that)f
(bu\013er)h(descriptor)g(en)o(tries)g(on)f(the)75 2485 y(send)12
b(side)h(matc)o(h)f(v)o(erbatim)g(bu\013er)h(descriptor)g(en)o(tries)g(on)e
(the)h(receiv)o(e)h(side,)f(and)g(there)g(is)g(no)g(c)o(hange)h(in)f(in)o
(terpro)q(cess)75 2531 y(comm)o(unication.)158 2576 y(This)i(prop)q(osal)h
(giv)o(es)g(a)e(precise)h(meaning)h(to)e(in)o(terlanguage)k(comm)o
(unication.)j(It)13 b(has)h(t)o(w)o(o)e(dra)o(wbac)o(ks:)19
b(It)13 b(ma)o(y)75 2622 y(require)k(additional)i(data)d(con)o(v)o(ersions)i
(when)d(messages)i(are)e(assem)o(bled)j(or)d(disassem)o(bled,)k(and)d(it)g
(imp)q(oses)h(a)f(\014xed)75 2668 y(corresp)q(ondence)i(b)q(et)o(w)o(een)e(C)
g(and)h(F)m(ortran)f(t)o(yp)q(e)g(whic)o(h)h(ma)o(y)f(not)h(b)q(e)f(the)g
(preferred)h(one)f(on)g(the)h(target)f(mac)o(hine.)p eop
%%Page: 21 22
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(21)75 45 y Fi(\(Some)12 b(mac)o(hines)h(ma)o(y)f(w)o(an)o(t)g
(F)m(ortran)g Fd(REAL)e Fi(to)h(matc)o(h)h(C)g Fd(FLOAT)p Fi(;)d(other)j(ma)o
(y)g(w)o(an)o(t)f(it)h(to)g(matc)o(h)g(C)f Fd(double)p Fi(;)f(MPI)h(will)75
91 y(enforce)i(one)h(of)e(the)i(t)o(w)o(o.\))158 136 y(Another)i
(\(non\)solution)i(is)f(to)e(ignore)i(the)e(issue)i(and)f(let)g(the)g(b)q
(eha)o(vior)h(of)e(C)g(to)h(F)m(ortran)f(comm)o(unication)k(b)q(e)75
182 y(unde\014ned.)32 b(The)18 b(user)g(can)g(alw)o(a)o(ys)g(matc)o(h)g
(language)h(at)f(sending)h(and)f(receiving)i(end)e(if)f(he)h(or)g(she)g(is)g
(willing)i(to)75 228 y(struggle)14 b(with)g(the)f(issue)h(of)f(calling)i(MPI)
e(C)g(functions)i(from)d(F)m(ortran)i(or)f(vice-v)o(ersa.)75
448 y Fm(1.6)70 b(Receiv)n(e)20 b(Criteria)75 539 y Fn(The)e(selection)g(of)f
(a)g(message)g(b)o(y)g(a)g(receiv)o(e)i(op)q(eration)e(is)h(done)f(uniquely)g
(according)h(to)f(the)h(v)n(alue)f(of)f(the)75 588 y(message)c(en)o(v)o(elop)
q(e.)18 b(The)13 b(receiv)o(e)h(op)q(eration)e(sp)q(eci\014es)i(an)e
Fk(en)o(v)o(elop)q(e)g(pattern)p Fn(;)f(a)h(message)g(can)h(b)q(e)g(receiv)o
(ed)75 638 y(b)o(y)j(that)g(receiv)o(e)h(op)q(eration)f(only)f(if)g(its)h(en)
o(v)o(elop)q(e)g(matc)o(hes)f(that)h(pattern.)25 b(A)16 b(pattern)h(sp)q
(eci\014es)h(v)n(alues)d(for)75 688 y(the)i Fl(source)p Fn(,)f
Fl(tag)f Fn(and)i Fl(context)e Fn(\014elds)i(of)f(the)h(message)f(en)o(v)o
(elop)q(e.)26 b(In)17 b(addition,)f(the)h(v)n(alue)f(for)g(the)h
Fl(dest)75 738 y Fn(\014eld)e(is)g(set,)h(implicitl)o(y)m(,)c(to)i(b)q(e)i
(equal)f(to)g(the)g(receiving)g(pro)q(cess)i(id.)k(The)16 b(receiv)o(er)g(ma)
o(y)d(sp)q(ecify)j(a)e(wildcard)75 788 y Fl(MPI)p 144 788 14
2 v 15 w(ANY)p 225 788 V 15 w(SOURCE)d Fn(v)n(alue)g(for)g
Fl(source)p Fn(,)g(and/or)g(a)h(wildcard)f Fl(MPI)p 1105 788
V 15 w(ANY)p 1186 788 V 15 w(TAG)g Fn(v)n(alue)g(for)h Fl(tag)p
Fn(,)f(indicating)g(that)g(an)o(y)75 838 y(source)18 b(and/or)d(tag)h(are)h
(acceptable.)26 b(It)16 b(cannot)h(sp)q(ecify)g(a)f(wildcard)f(v)n(alue)h
(for)g Fl(context)f Fn(or)h Fl(dest)p Fn(.)24 b(Th)o(us,)75
887 y(a)16 b(message)g(can)g(b)q(e)h(receiv)o(ed)g(b)o(y)f(a)g(receiv)o(e)h
(op)q(eration)f(only)g(if)f(it)h(is)f(addressed)j(to)e(the)h(receiving)f
(task,)h(has)75 937 y(a)e(matc)o(hing)e(con)o(text,)i(has)g(matc)o(hing)e
(source)j(unless)g(source=)p Fl(MPI)p 1175 937 V 17 w(ANY)p
1258 937 V 15 w(SOURCE)d Fn(in)i(the)g(pattern,)h(and)e(has)h(a)75
987 y(matc)o(hing)d(tag)i(unless)g(tag=)p Fl(MPI)p 609 987
V 15 w(ANY)p 690 987 V 15 w(TAG)g Fn(in)f(the)h(pattern.)158
1037 y(The)h(length)f(of)g(the)g(receiv)o(ed)i(message)e(m)o(ust)f(b)q(e)i
(less)g(then)g(or)f(equal)g(the)h(length)f(of)g(the)h(receiv)o(e)g(bu\013er.)
75 1087 y(I.e.,)d(all)f(incoming)f(data)i(m)o(ust)f(\014t,)i(without)f
(truncation,)g(in)o(to)g(the)h(receiv)o(e)g(bu\013er.)19 b(It)12
b(is)h(erroneous)g(to)g(receiv)o(e)75 1136 y(a)h(message)f(whic)o(h)h(length)
g(exceed)i(the)e(receiv)o(e)h(bu\013er,)g(and)e(the)i(outcome)e(of)g(program)
g(where)i(this)f(o)q(ccurs)h(is)75 1186 y(undetermined.)75
1323 y Fm(1.7)70 b(Comm)n(unication)20 b(Mo)r(de)75 1414 y
Fn(A)14 b(send)h(op)q(eration)f(can)g(o)q(ccur)h(in)e(one)h(of)f(three)j(mo)q
(des:)75 1497 y Fk(ST)l(AND)o(ARD)k Fn(The)14 b(send)h(ma)o(y)d(b)q(e)i
(started)h(whether)h(or)d(not)h(a)g(matc)o(hing)e(receiv)o(e)j(has)f(b)q(een)
h(p)q(osted.)75 1580 y Fk(READ)o(Y)20 b Fn(The)15 b(send)g(ma)o(y)c(b)q(e)k
(started)g(only)e(if)g(a)h(matc)o(hing)e(receiv)o(e)j(has)f(b)q(een)h(p)q
(osted.)75 1663 y Fk(SYNCHR)o(ONOUS)20 b Fn(The)c(send)g(op)q(eration)f(will)
f(not)h(complete)g(successfully)h(un)o(til)e(it)h(is)g(guaran)o(teed)h(that)
179 1713 y(the)e(message)g(sen)o(t)h(will)d(b)q(e)i(receiv)o(ed.)158
1796 y(The)19 b(start)g(and)f(completion)f(of)h(a)g Fk(standard)h(send)f
Fn(do)g(not)g(dep)q(end)i(on)e(the)h(status)h(of)e(a)g(matc)o(hing)75
1846 y(receiv)o(e.)158 1896 y(A)f Fk(ready)i(send)c Fn(should)i(b)q(e)h
(started)g(only)e(if)g(a)g(matc)o(hing)f(receiv)o(e)j(is)f(already)g(p)q
(osted;)i(otherwise)e(the)75 1946 y(op)q(eration)j(is)f(erroneous)i(and)f
(its)g(outcome)f(is)g(unde\014ned.)37 b(In)20 b(some)f(systems,)i(this)e
(allo)o(ws)g(the)h(remo)o(v)n(al)75 1996 y(of)f(a)f(hand-shak)o(e)i(op)q
(eration)f(that)g(is)g(otherwise)h(required,)h(and)e(results)i(in)d(impro)o
(v)o(ed)g(p)q(erformance.)33 b(Its)75 2045 y(completion)12
b(do)q(es)j(not)f(dep)q(end)h(on)e(the)i(status)g(of)e(a)g(matc)o(hing)f
(receiv)o(e.)158 2095 y(A)k Fk(sync)o(hronous)f(send)g Fn(can)g(b)q(e)i
(started)g(irresp)q(ectiv)o(e)g(of)e(the)i(status)f(of)f(a)h(matc)o(hing)e
(receiv)o(e.)25 b(It)15 b(will)75 2145 y(complete)i(only)g(if)g(a)h(matc)o
(hing)e(receiv)o(e)j(is)f(p)q(osted,)h(and)f(the)h(receiv)o(e)g(op)q(eration)
f(is)f(committed)f(to)i(receiv)o(e)75 2195 y(the)e(message)f(sen)o(t)h(b)o(y)
f(the)h(secure)h(send.)24 b(\(I.e.,)14 b(the)i(receiv)o(e)h(has)e(b)q(een)i
(p)q(osted,)f(the)g(incoming)d(message)i(has)75 2245 y(b)q(een)i(matc)o(hed)e
(to)g(this)h(p)q(osted)h(receiv)o(e,)g(and)e(the)h(receiv)o(e)h(op)q(eration)
f(has)g(already)f(started)i(and)e(cannot)h(b)q(e)75 2294 y(cancelled)f(an)o
(ymore.\))158 2344 y(There)g(is)f(only)f(one)h(receiv)o(e)h(mo)q(de,)e(whic)o
(h)g(can)h(matc)o(h)f(an)o(y)h(of)f(the)h(send)h(mo)q(des.)158
2394 y(Comm)o(uni)o(cation)e(imp)q(oses)j(an)g(order)h(on)g(the)g(ev)o(en)o
(ts)g(o)q(ccurring)g(at)f(the)h(comm)o(unicating)c(no)q(des.)27
b(It)16 b(is)75 2444 y(alw)o(a)o(ys)d(the)i(case)h(that)e(the)h(completion)d
(of)i(a)g(receiv)o(e)i(o)q(ccurs)g(after)e(the)h(start)g(of)f(the)h(matc)o
(hing)d(send.)20 b(If)14 b(the)75 2494 y(sync)o(hronous)i(send)g(mo)q(de)f
(is)g(used,)h(then)g(it)f(is)g(also)g(the)h(case)g(that)f(the)h(completion)e
(of)h(a)g(send)h(o)q(ccurs)h(after)75 2543 y(the)f(start)g(of)g(the)g(matc)o
(hing)e(receiv)o(e.)24 b(Of)16 b(course,)h(on)e(eac)o(h)h(pro)q(cess,)i(a)d
(comm)o(unicatio)o(n)e(completes)i(after)h(it)75 2593 y(is)i(started.)30
b(No)18 b(other)g(order)g(is)g(imp)q(osed)e(b)o(y)i(MPI.)f(I.e.,)h(if)f(the)h
(standard)g(send)h(mo)q(de)d(is)i(used,)h(the)f(send)75 2643
y(op)q(eration)c(ma)o(y)e(complete)h(b)q(efore)i(the)f(matc)o(hing)e(receiv)o
(e)j(w)o(as)f(started.)p eop
%%Page: 22 23
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(22)158 45 y Fj(Implemen)o(tation)13 b(note:)35
b Fi(A)13 b(ready)g(send)h(can)g(b)q(e)f(implemen)o(ted)i(as)f(a)f(regular)h
(send;)g(in)g(suc)o(h)f(case)h(there)f(will)75 91 y(b)q(e)j(no)h(p)q
(erformance)g(adv)n(an)o(tage)g(\(or)f(disadv)n(an)o(tage\))j(for)d(the)g
(use)h(of)f(ready)g(send;)i(and)f(some)g(erroneous)g(programs)75
136 y(ma)o(y)c(go)g(undetected)i(\(and)e(ma)o(y)g(still)i(pro)q(duce)g
(correct)e(results\).)158 182 y(A)g(p)q(ossible)i(comm)o(unication)h(proto)q
(col)e(for)f(the)g(v)n(arious)i(comm)o(unication)g(mo)q(des)f(is)g(outlined)h
(b)q(elo)o(w:)158 228 y Fd(ready)j(send)p Fi(:)d(The)e(message)h(is)g(sen)o
(t)f(asap;)h(an)f(ac)o(kno)o(wledge)i(is)f(returned)g(b)o(y)g(receiv)o(er.)k
(The)13 b(proto)q(col)i(is)f(\(send,)75 273 y(ac)o(k\).)158
319 y Fd(synchronou)o(s)i(send:)25 b Fi(The)18 b(sender)g(sends)h(a)f
(request-to-send)h(message.)31 b(The)18 b(receiv)o(er)h(stores)f(this)g
(request.)75 365 y(When)e(a)e(matc)o(hing)j(receiv)o(e)e(is)h(p)q(osted,)f
(the)g(receiv)o(er)h(sends)f(bac)o(k)h(a)f(p)q(ermission-to-send)i(message,)f
(and)f(the)g(sender)75 410 y(no)o(w)e(sends)h(the)f(message.)18
b(The)12 b(proto)q(col)j(is)f(\(req,)e(ac)o(k-req,)h(send,)h(ac)o(k\).)158
456 y Fd(standard)j(send:)d Fi(First)e(proto)q(col)g(ma)o(y)g(b)q(e)f(used)h
(for)f(short)g(messages,)h(and)g(second)g(proto)q(col)h(for)e(long)h
(messages.)158 506 y(Of)g(course,)i(there)f(are)g(man)o(y)h(other)f(p)q
(ossible)i(c)o(hoices.)75 726 y Fm(1.8)70 b(Comm)n(unication)20
b(Ob)t(jects)75 817 y Fn(An)15 b(opaque)g(comm)o(unication)d(ob)r(ject)k
(iden)o(ti\014es)g(v)n(arious)e(prop)q(erties)j(of)e(a)g(comm)o(uni)o(cation)
d(op)q(eration,)j(suc)o(h)75 867 y(as)h(the)g(bu\013er)h(descriptor)h(that)d
(is)h(asso)q(ciated)h(with)e(it,)h(its)g(con)o(text,)g(the)h(tag)e(and)h
(destination)g(parameters)75 916 y(to)f(b)q(e)h(used)g(for)f(a)g(send,)h(or)f
(the)h(tag)f(and)g(source)h(parameters)g(to)f(b)q(e)g(used)i(for)d(a)h
(receiv)o(e.)24 b(In)15 b(addition,)f(this)75 966 y(ob)r(ject)g(stores)h
(information)10 b(ab)q(out)j(the)h(status)g(of)e(the)i(last)f(comm)o
(unication)d(op)q(eration)j(that)g(w)o(as)g(p)q(erformed)75
1016 y(with)h(this)f(ob)r(ject.)19 b(This)14 b(ob)r(ject)h(is)f(accessed)i
(using)d(a)h(comm)o(unicatio)o(n)d(handle.)158 1066 y(One)k(can)f(consider)h
(comm)o(uni)o(cation)c(op)q(erations)j(to)g(consist)g(of)g(the)g(follo)o
(wing)d(sub)q(op)q(erations:)75 1157 y Fk(INIT\(op)q(eration,)j(params,)i
(handle\))i Fn(Pro)q(cess)c(pro)o(vides)f(all)f(relev)n(an)o(t)g(parameters)h
(for)f(its)h(participation)179 1207 y(in)i(the)i(comm)o(unication)c(op)q
(eration)j(\(t)o(yp)q(e)g(of)g(op)q(eration,)g(data)g(bu\013er,)h(tag,)e
(participan)o(ts,)i(etc.\).)25 b(An)179 1257 y(ob)r(ject)14
b(is)g(created)i(that)e(iden)o(ti\014es)g(the)g(op)q(eration.)75
1340 y Fk(ST)l(AR)l(T\(handle\))k Fn(The)c(comm)o(unication)c(op)q(eration)k
(is)g(started)75 1423 y Fk(COMPLETE\(handle\))19 b Fn(The)14
b(comm)o(unication)c(op)q(eration)k(is)g(completed.)75 1506
y Fk(FREE\(handle\))k Fn(The)d(comm)o(unicati)o(on)c(ob)r(ject,)j(and)g(asso)
q(ciated)h(resources)h(are)e(freed.)75 1597 y(Correct)h(in)o(v)o(o)q(cation)e
(of)g(these)i(sub)q(op)q(erations)g(is)f(a)f(sequence)k(of)c(the)h(form)587
1688 y Fk(INIT)j Fn(\()p Fk(ST)l(AR)l(T)f(COMPLETE)p Fn(\))1187
1671 y Fa(\003)1223 1688 y Fk(FREE)p Fb(:)75 1780 y Fn(I.e.,)10
b(an)h(ob)r(ject)g(needs)h(b)q(e)f(created)i(b)q(efore)e(comm)o(unication)c
(o)q(ccurs;)13 b(it)d(can)h(b)q(e)g(reused)i(only)c(after)i(the)h(previous)75
1830 y(use)k(has)g(completed;)f(and)g(it)g(needs)i(to)e(b)q(e)h(freed)h(ev)o
(en)o(tually)d(\(of)h(course,)i(one)f(can)f(assume)g(that)h(all)e(ob)r(jects)
75 1879 y(are)g(freed)h(at)f(program)e(termination,)g(b)o(y)h(default\).)158
1929 y(The)21 b(ab)q(o)o(v)o(e)g(scenario)g(p)q(ertains)g(to)g
Fg(p)n(ersistent)f Fn(ob)r(jects.)39 b(One)22 b(can)f(also)f(create)i
Fg(ephemer)n(al)e Fn(ob)r(jects.)75 1979 y(Suc)o(h)c(an)g(ob)r(ject)h(p)q
(ersists)h(only)d(un)o(til)g(the)i(comm)o(uni)o(cation)c(op)q(eration)j(is)g
(completed,)f(at)h(whic)o(h)g(p)q(oin)o(t)f(it)h(is)75 2029
y(destro)o(y)o(ed.)i(Th)o(us)12 b(the)g(correct)i(in)o(v)o(o)q(cation)c(of)h
(sub)q(op)q(erations)i(with)e(an)g(ephemeral)g(ob)r(ject)i(is)e
Fk(INIT)j(ST)l(AR)l(T)75 2079 y(COMPLETE)p Fn(.)158 2128 y(A)19
b(user)i(ma)o(y)c(directly)j(in)o(v)o(ok)o(e)f(these)h(sub)q(op)q(erations.)
36 b(This)19 b(w)o(ould)g(allo)o(w)e(the)j(amortization)e(of)g(the)75
2178 y(o)o(v)o(erhead)d(of)g(setting)g(up)g(a)g(comm)o(unication)d(o)o(v)o
(er)j(man)o(y)e(successiv)o(e)k(uses)f(of)f(the)g(same)g(handle,)f(and)h
(allo)o(ws)75 2228 y(the)d(o)o(v)o(erlap)f(of)g(comm)o(unication)e(and)i
(computation.)16 b(Simpler)10 b(comm)o(unicatio)o(n)f(op)q(erations)j(com)o
(bine)e(sev)o(eral)75 2278 y(of)17 b(these)i(sub)q(op)q(erations)g(in)o(to)e
(one)h(op)q(eration,)g(th)o(us)g(simplifying)d(the)j(use)h(of)e(comm)o
(unicatio)o(n)e(primitiv)o(es.)75 2328 y(Th)o(us,)h(one)h(only)e(needs)j(to)e
(sp)q(ecify)g(precisely)h(the)g(seman)o(tics)f(of)f(these)j(sub)q(op)q
(erations)f(in)f(order)g(to)g(sp)q(ecify)75 2378 y(the)e(seman)o(tics)g(of)f
(MPI)h(p)q(oin)o(t)g(to)f(p)q(oin)o(t)h(comm)o(unicatio)o(n)d(op)q(erations.)
158 2427 y(W)m(e)i(sa)o(y)g(that)g(a)g(comm)o(unicatio)o(n)d(op)q(eration)j
(\(send)i(or)e(receiv)o(e\))h(is)f Fk(p)q(osted)f Fn(once)i(a)f
Fk(start)e Fn(sub)q(op)q(eration)75 2477 y(has)18 b(b)q(een)h(in)o(v)o(ok)o
(ed;)g(the)g(op)q(eration)f(is)g Fk(completed)e Fn(once)i(the)h
Fk(complete)d Fn(sub)q(op)q(eration)j(has)f(completed.)75 2527
y(A)e(send)h(and)f(a)g(receiv)o(e)i(op)q(eration)e Fk(matc)o(h)f
Fn(if)g(the)i(receiv)o(e)h(pattern)f(sp)q(eci\014ed)g(b)o(y)f(the)h(receiv)o
(e)h(matc)o(hes)d(the)75 2577 y(message)f(en)o(v)o(elop)q(e)g(created)h(b)o
(y)f(the)g(send.)p eop
%%Page: 23 24
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(23)75 45 y Fh(1.8.1)55 b(Comm)n(unication)21
b(Ob)s(ject)d(Creation)75 122 y Fn(An)g(ob)r(ject)g(for)g(a)f(send)i(op)q
(eration)f(is)f(created)j(b)o(y)d(a)h(call)e(to)i Fk(MPI)p
1199 122 15 2 v 17 w(INIT)p 1322 122 V 18 w(xSEND)p Fn(.)g(The)g(pre\014x)g
(to)g Fl(SEND)75 172 y Fn(indicates)13 b(the)g(comm)o(unication)d(mo)q(de:)16
b(none)d(for)g Fl(standard)p Fn(,)e Fl(R)h Fn(for)h Fl(ready)p
Fn(,)e(and)i Fl(S)f Fn(for)h Fl(synchronous)p Fn(.)i(A)e(call)75
221 y(to)f Fk(MPI)p 223 221 V 18 w(INIT)p 347 221 V 18 w(RECV)h
Fn(is)f(similarly)d(used)14 b(for)e(creating)h(an)f(ob)r(ject)h(for)f(a)g
(receiv)o(e)i(op)q(eration.)k(The)13 b(creation)75 271 y(of)g(a)h(comm)o
(unicatio)o(n)d(ob)r(ject)k(is)f(a)f(lo)q(cal)g(op)q(eration)h(that)g(need)h
(not)e(in)o(v)o(olv)o(e)g(comm)o(unicatio)o(n)e(with)j(a)f(remote)75
321 y(pro)q(cess.)158 406 y Fk(MPI)p 257 406 V 17 w(INIT)p
380 406 V 18 w(SEND)j(\(handle,)e(bu\013er)p 856 406 V 15 w(handle,)g(dest,)h
(tag,)h(con)o(text,)f(p)q(ersistence\))158 491 y Fn(Creates)g(a)f(comm)o
(unicatio)o(n)d(ob)r(ject)k(for)f(standard)g(mo)q(de)f(send.)19
b(P)o(arameters)14 b(are)75 571 y Fk(OUT)i(handle)i Fn(message)g(handle.)28
b(The)18 b(handle)g(should)f(not)g(b)q(e)h(asso)q(ciated)h(with)e(an)o(y)g
(ob)r(ject)h(b)q(efore)g(the)179 621 y(call.)75 703 y Fk(IN)e(bu\013er)p
273 703 V 16 w(handle)j Fn(handle)13 b(to)h(send)h(bu\013er)g(descriptor)75
784 y Fk(IN)h(dest)k Fn(rank)14 b(in)f(con)o(text)i(of)e(destination)h(\(in)o
(teger\))75 865 y Fk(IN)i(tag)21 b Fn(user)15 b(tag)e(for)h(messages)g(sen)o
(t)g(with)g(this)g(handle)g(\(in)o(teger\))75 947 y Fk(IN)i(con)o(text)k
Fn(con)o(text)14 b(of)f(messages)h(sen)o(t)h(with)f(this)g(handle)75
1028 y Fk(IN)i(p)q(ersistence)i Fn(handle)10 b(p)q(ersistence)i(\(state)e(t)o
(yp)q(e,)g(with)f(t)o(w)o(o)g(v)n(alues:)15 b Fl(MPI)p 1318
1028 14 2 v 15 w(PERSISTENT)8 b Fn(and)h Fl(MPI)p 1703 1028
V 15 w(EPHEMERAL)p Fn(\))158 1144 y Fk(MPI)p 257 1144 15 2
v 17 w(INIT)p 380 1144 V 18 w(RSEND)16 b(\(handle,)d(bu\013er)p
891 1144 V 16 w(handle,)h(dest,)h(tag,)h(con)o(text,)f(p)q(ersistence\))158
1229 y Fn(Creates)g(a)f(comm)o(unicatio)o(n)d(ob)r(ject)k(for)f(standard)g
(mo)q(de)f(send.)19 b(P)o(arameters)14 b(are)75 1309 y Fk(OUT)i(handle)i
Fn(message)g(handle.)28 b(The)18 b(handle)g(should)f(not)g(b)q(e)h(asso)q
(ciated)h(with)e(an)o(y)g(ob)r(ject)h(b)q(efore)g(the)179 1359
y(call.)75 1440 y Fk(IN)e(bu\013er)p 273 1440 V 16 w(handle)j
Fn(handle)13 b(to)h(send)h(bu\013er)g(descriptor)75 1521 y
Fk(IN)h(dest)k Fn(rank)14 b(in)f(con)o(text)i(of)e(destination)h(\(in)o
(teger\))75 1603 y Fk(IN)i(tag)21 b Fn(user)15 b(tag)e(for)h(messages)g(sen)o
(t)g(with)g(this)g(handle)g(\(in)o(teger\))75 1684 y Fk(IN)i(con)o(text)k
Fn(con)o(text)14 b(of)f(messages)h(sen)o(t)h(with)f(this)g(handle)75
1766 y Fk(IN)i(p)q(ersistence)i Fn(handle)10 b(p)q(ersistence)i(\(state)e(t)o
(yp)q(e,)g(with)f(t)o(w)o(o)g(v)n(alues:)15 b Fl(MPI)p 1318
1766 14 2 v 15 w(PERSISTENT)8 b Fn(and)h Fl(MPI)p 1703 1766
V 15 w(EPHEMERAL)p Fn(\))158 1881 y Fk(MPI)p 257 1881 15 2
v 17 w(INIT)p 380 1881 V 18 w(SSEND)16 b(\(handle,)d(bu\013er)p
882 1881 V 16 w(handle,)h(dest,)h(tag,)h(con)o(text,)e(p)q(ersistence\))158
1966 y Fn(Creates)h(a)f(comm)o(unicatio)o(n)d(ob)r(ject)k(for)f(sync)o
(hronous)g(mo)q(de)f(send.)19 b(P)o(arameters)14 b(are)75 2046
y Fk(OUT)i(handle)i Fn(message)g(handle.)28 b(The)18 b(handle)g(should)f(not)
g(b)q(e)h(asso)q(ciated)h(with)e(an)o(y)g(ob)r(ject)h(b)q(efore)g(the)179
2096 y(call.)75 2177 y Fk(IN)e(bu\013er)p 273 2177 V 16 w(handle)j
Fn(handle)13 b(to)h(send)h(bu\013er)g(descriptor)75 2259 y
Fk(IN)h(dest)k Fn(rank)14 b(in)f(con)o(text)i(of)e(destination)h(\(in)o
(teger\))75 2340 y Fk(IN)i(tag)21 b Fn(user)15 b(tag)e(for)h(messages)g(sen)o
(t)g(with)g(this)g(handle)g(\(in)o(teger\))75 2422 y Fk(IN)i(con)o(text)k
Fn(con)o(text)14 b(of)f(messages)h(sen)o(t)h(with)f(this)g(handle)75
2503 y Fk(IN)i(p)q(ersistence)i Fn(handle)10 b(p)q(ersistence)i(\(state)e(t)o
(yp)q(e,)g(with)f(t)o(w)o(o)g(v)n(alues:)15 b Fl(MPI)p 1318
2503 14 2 v 15 w(PERSISTENT)8 b Fn(and)h Fl(MPI)p 1703 2503
V 15 w(EPHEMERAL)p Fn(\))158 2618 y Fk(MPI)p 257 2618 15 2
v 17 w(INIT)p 380 2618 V 18 w(RECV)17 b(\(handle,)d(bu\013er)p
862 2618 V 15 w(handle,)g(source,)h(tag,)h(con)o(text,)f(p)q(ersistence\))158
2704 y Fn(Creates)g(a)f(receiv)o(e)h(handle.)j(P)o(arameters)c(are)p
eop
%%Page: 24 25
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(24)75 45 y Fk(OUT)16 b(handle)i Fn(message)g(handle.)28
b(The)18 b(handle)g(should)f(not)g(b)q(e)h(asso)q(ciated)h(with)e(an)o(y)g
(ob)r(ject)h(b)q(efore)g(the)179 95 y(call.)75 178 y Fk(IN)e(bu\013er)p
273 178 15 2 v 16 w(handle)j Fn(handle)13 b(to)h(receiv)o(e)h(bu\013er)g
(descriptor.)75 261 y Fk(IN)h(source)k Fn(rank)14 b(in)f(con)o(text)i(of)e
(source,)i(or)f Fl(MPI)p 897 261 14 2 v 15 w(ANY)p 978 261
V 15 w(SOURCE)f Fn(\(in)o(teger\).)75 344 y Fk(IN)j(tag)21
b Fn(user)15 b(tag)e(for)h(messages)g(receiv)o(ed)h(with)f(this)f(handle,)h
(or)g Fl(MPI)p 1232 344 V 15 w(ANY)p 1313 344 V 15 w(TAG)f
Fn(\(in)o(teger\).)75 427 y Fk(IN)j(con)o(text)k Fn(con)o(text)14
b(of)f(messages)h(receiv)o(ed)i(with)d(this)h(handle.)75 510
y Fk(IN)i(p)q(ersistence)i Fn(handle)10 b(p)q(ersistence)i(\(state)e(t)o(yp)q
(e,)g(with)f(t)o(w)o(o)g(v)n(alues:)15 b Fl(MPI)p 1318 510
V 15 w(PERSISTENT)8 b Fn(and)h Fl(MPI)p 1703 510 V 15 w(EPHEMERAL)p
Fn(\))158 593 y(See)15 b(Section)f(1.4.2)e(for)i(a)f(discussion)i(of)e
(source,)i(tag)e(and)h(con)o(text.)158 721 y Fj(Discussion:)158
767 y Fi(Ephemeral)f(\\p)q(ersisten)o(t)h(handles")f(are)f(not)g(terribly)h
(useful)g(as)f(suc)o(h.)17 b(But)12 b(their)g(existence)h(allo)o(w)g(us)f(to)
f(describ)q(e)75 813 y(all)j(the)f(higher)i(lev)o(el)f(send/receiv)o(e)h(op)q
(erations)g(in)f(terms)f(of)g(basic)h(op)q(erations)h(on)e(handles.)75
1012 y Fh(1.8.2)55 b(Comm)n(unication)21 b(Start)75 1124 y
Fk(MPI)p 174 1124 15 2 v 17 w(ST)l(AR)l(T\(handle\))75 1242
y(IN)16 b(handle)j Fn(comm)o(unication)10 b(handle)158 1325
y(The)16 b Fl(MPI)p 314 1325 14 2 v 15 w(START)f Fn(function)h(starts)g(the)h
(execution)f(of)g(a)f(comm)o(unication)e(op)q(eration)i(\(send)i(or)f(receiv)
o(e\).)75 1375 y(A)e(send)h(can)g(b)q(e)f(started)i(pro)o(vided)e(that)g(the)
h(previous)f(send)h(using)f(the)h(same)e(handle)h(has)h(completed,)e(or)h(as)
75 1425 y(so)q(on)j(as)h(the)g(handle)f(has)g(b)q(een)i(created,)g(if)d
(there)j(w)o(as)e(no)g(preceding)h(send.)30 b(If)17 b(the)g(send)i(mo)q(de)d
(is)h Fl(ready)75 1475 y Fn(then,)e(in)e(addition,)g(a)h(matc)o(hing)f
(receiv)o(e)i(should)f(ha)o(v)o(e)g(b)q(een)i(already)e(p)q(osted.)20
b(The)15 b(send)g(bu\013er)g(should)f(not)75 1524 y(b)q(e)h(up)q(dated)f
(after)g(the)h(send)f(is)g(started,)h(un)o(til)e(the)h(op)q(eration)g
(completes.)158 1574 y(A)f(receiv)o(e)h(can)f(b)q(e)g(started)h(as)f(so)q(on)
g(as)g(the)g(preceding)h(receiv)o(e)g(using)e(the)i(same)d(handle)i(has)g
(completed,)75 1624 y(or)18 b(as)g(so)q(on)g(as)g(the)h(handle)e(has)i(b)q
(een)g(created)g(is)f(there)h(w)o(as)f(no)g(preceding)h(receiv)o(e.)31
b(The)19 b(receiv)o(e)g(bu\013er)75 1674 y(should)14 b(not)f(b)q(e)i
(accessed)h(after)e(the)h(receiv)o(e)g(is)f(started,)g(un)o(til)f(the)i(op)q
(eration)f(completes.)158 1724 y(A)e(program)f(that)h(do)q(es)h(not)g
(satisfy)f(these)h(conditions)f(is)h(erroneous)g(and)f(its)h(outcome)e(is)h
(undetermined.)158 1773 y(The)i(call)f(returns)j(as)e(so)q(on)f(as)h(p)q
(ossible.)k(A)c(call)f(that)h(starts)h(a)f(send)g(can)g(return)h(b)q(efore)g
(the)f(data)g(to)f(b)q(e)75 1823 y(sen)o(t)i(has)f(b)q(een)i(cleared)f(out)f
(of)f(the)i(send)g(bu\013er)g(and)f(b)q(efore)h(an)o(y)f(matc)o(hing)e
(receiv)o(e)k(has)e(b)q(een)i(p)q(osted)f(\(this)75 1873 y(is)h(true)h(for)e
(all)g(send)i(mo)q(des,)e(including)g Fl(synchronous)p Fn(\).)22
b(A)16 b(call)f(that)h(starts)h(a)f(receiv)o(e)h(can)f(return)h(b)q(efore)75
1923 y(andy)d(data)f(has)h(b)q(een)h(receiv)o(ed)g(in)f(the)g(receiv)o(e)i
(bu\013er.)75 2039 y Fh(1.8.3)55 b(Comm)n(unication)21 b(Completion)75
2116 y Fn(The)c(completion)e(of)h(a)h(send)g(op)q(eration)g(indicates)g(that)
g(the)g(sender)i(is)d(no)o(w)h(free)g(to)g(up)q(date)g(the)g(lo)q(cations)75
2166 y(in)d(the)h(send)h(bu\013er,)f(or)g(an)o(y)f(other)h(lo)q(cation)f
(that)h(can)f(b)q(e)i(referenced)h(b)o(y)d(the)h(send)h(op)q(eration.)k(It)15
b(do)q(es)g(not)75 2215 y(indicate)c(that)f(the)h(message)g(has)g(b)q(een)g
(receiv)o(ed;)i(rather,)f(it)e(ma)o(y)e(ha)o(v)o(e)j(b)q(een)h(bu\013ered)g
(b)o(y)e(the)h(comm)o(unication)75 2265 y(subsystem.)21 b(Ho)o(w)o(ev)o(er,)
15 b(if)g(a)f Fl(synchronous)f Fn(mo)q(de)h(send)h(w)o(as)g(used,)h(the)f
(completion)e(of)i(the)g(send)h(op)q(eration)75 2315 y(indicates)d(that)h(a)f
(matc)o(hing)e(receiv)o(e)j(w)o(as)g(initiated,)e(and)h(that)g(the)h(message)
e(will)g(ev)o(en)o(tually)h(b)q(e)h(receiv)o(ed)g(b)o(y)75
2365 y(this)g(matc)o(hing)e(receiv)o(e.)158 2415 y(The)20 b(completion)e(of)i
(a)f(receiv)o(e)i(op)q(eration)f(indicates)g(that)g(the)h(receiv)o(er)g(is)f
(no)o(w)f(free)i(to)f(access)h(the)75 2464 y(lo)q(cations)15
b(in)g(the)h(receiv)o(e)h(bu\013er,)f(whic)o(h)f(con)o(tain)g(the)h(receiv)o
(ed)h(message,)e(or)h(an)o(y)f(other)h(lo)q(cation)e(that)i(can)75
2514 y(b)q(e)g(referenced)i(b)o(y)d(the)h(receiv)o(e)h(op)q(eration.)23
b(It)15 b(do)q(es)h(not)g(indicate)f(that)h(the)g(matc)o(hing)d(send)j(op)q
(eration)g(has)75 2564 y(completed)d(\(but)i(indicates,)e(of)h(course,)g
(that)g(the)h(send)g(w)o(as)e(initiated\).)158 2649 y Fk(MPI)p
257 2649 15 2 v 17 w(W)-5 b(AIT)17 b(\()e(handle,)f(status\))p
eop
%%Page: 25 26
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(25)75 45 y Fk(IN)16 b(handle)j Fn(comm)o(unication)10
b(handle)75 127 y Fk(OUT)16 b(status)j Fn(handle)i(that)f(is)h(asso)q(ciated)
g(with)g(return)g(status)h(ob)r(ject.)39 b(The)21 b(return)h(status)g(ob)r
(ject)f(is)179 177 y(up)q(dated)14 b(b)o(y)g(call.)158 257
y(A)g(call)f(to)h Fk(MPI)p 429 257 15 2 v 17 w(W)-5 b(AIT)14
b Fn(returns)i(when)e(the)h(send)f(op)q(eration)g(iden)o(ti\014ed)g(b)o(y)g
Fl(handle)f Fn(is)g(complete.)158 307 y(The)20 b(call)e(returns)j(a)e(handle)
h(to)f(an)g(opaque)g(ob)r(ject)h(that)g(con)o(tains)f(information)d(on)k(the)
g(completed)75 356 y(op)q(eration)14 b({)f(the)i Fk(return)f(status)e
Fn(ob)r(ject.)158 442 y Fk(MPI)p 257 442 V 17 w(TEST)k(\(handle,)e(\015ag,)i
(status\))75 557 y(IN)g(handle)j Fn(comm)o(unication)10 b(handle)75
639 y Fk(OUT)16 b(\015ag)k Fn(logical)75 721 y Fk(OUT)c(status)j
Fn(handle)14 b(that)g(is)f(asso)q(ciated)i(with)f(return)h(status)f(ob)r
(ject.)158 801 y(A)k(call)e(to)i Fk(MPI)p 440 801 V 17 w(TEST)g
Fn(returns)h Fl(flag=true)c Fn(if)i(the)h(op)q(eration)g(iden)o(ti\014ed)f(b)
o(y)g Fl(handle)g Fn(is)g(complete.)75 851 y(In)f(suc)o(h)g(case,)g(the)h
(return)f(handle)g(p)q(oin)o(ts)f(to)h(an)f(opaque)h(ob)r(ject)g(that)g(con)o
(tains)f(information)e(on)i(the)h(com-)75 900 y(pleted)f(op)q(eration.)k(It)c
(returns)h Fl(flag=false)p Fn(,)c(otherwise.)20 b(In)15 b(suc)o(h)g(case,)g
(the)g(v)n(alue)f(of)f(the)i(return)h(handle)e(is)75 950 y(unde\014ned.)158
1000 y(A)f(call)g(to)g Fl(MPI)p 397 1000 14 2 v 15 w(WAIT)f
Fn(blo)q(c)o(ks)h(only)f(the)i(executing)g(thread.)k(If)13
b(the)h(executing)g(pro)q(cess)h(is)e(m)o(ultithreaded,)75
1050 y(then)h(other)g(threads)g(within)f(the)h(pro)q(cess)h(can)f(b)q(e)f(sc)
o(heduled)i(for)e(execution.)19 b(The)13 b(use)i(of)d(a)h(blo)q(c)o(king)g
(receiv)o(e)75 1100 y(op)q(eration)e(\()p Fl(MPI)p 343 1100
V 15 w(WAIT)p Fn(\))g(allo)o(ws)f(the)i(op)q(erating)f(system)h(to)f(desc)o
(hedule)i(the)f(blo)q(c)o(k)o(ed)f(thread)i(and)e(sc)o(hedule)h(an-)75
1150 y(other)f(thread)g(for)e(execution,)j(if)d(suc)o(h)i(is)f(a)o(v)n
(ailable.)k(The)d(use)g(of)e(a)h(non)o(blo)q(c)o(king)f(receiv)o(e)i(op)q
(eration)f(\()p Fl(MPI)p 1759 1150 V 16 w(TEST)p Fn(\))75 1199
y(allo)o(ws)j(the)h(user)h(to)f(sc)o(hedule)h(alternativ)o(e)f(activities)f
(within)g(a)h(single)g(thread)g(of)f(execution.)158 1249 y(The)j(in)o(tended)
h(implem)o(en)o(tation)c(of)i Fl(MPI)p 833 1249 V 15 w(TEST)g
Fn(is)g(for)h(that)g(op)q(eration)f(to)h(return)h(as)f(so)q(on)f(as)h(p)q
(ossible.)75 1299 y(Ho)o(w)o(ev)o(er,)e(if)f(rep)q(eatedly)i(called)f(for)f
(an)h(op)q(eration)g(that)f(is)h(enabled,)g(it)f(m)o(ust)g(ev)o(en)o(tually)h
(succeed.)158 1349 y(The)g(return)h(status)g(ob)r(ject)g(for)e(a)h(send)h(op)
q(eration)e(carries)i(no)f(information.)h(The)f(return)h(status)g(ob)r(ject)
75 1399 y(for)h(a)g(receiv)o(e)i(op)q(eration)f(carries)g(information)d(on)i
(the)i(source,)g(tag)e(and)g(length)h(of)f(the)h(receiv)o(ed)h(message.)75
1448 y(These)13 b(\014elds)g(are)f(required)h(b)q(ecause)h(the)e(receiv)o(e)i
(op)q(eration)e(ma)o(y)e(ha)o(v)o(e)h(sp)q(eci\014ed)j Fl(DONTCARE)c
Fn(in)i(either)h(source)75 1498 y(or)h(tag)f(\014eld,)h(and)g(the)g(message)g
(ma)o(y)e(ha)o(v)o(e)h(b)q(een)i(shorter)g(than)f(the)h(receiv)o(e)g
(bu\013er.)158 1583 y Fk(MPI)p 257 1583 15 2 v 17 w(RETURN)p
484 1583 V 18 w(ST)l(A)l(TUS\()g(handle,)f(coun)o(t,)g(source,)h(tag\))75
1699 y(IN)h(handle)j Fn(handle)14 b(to)g(return)h(status)f(ob)r(ject)75
1781 y Fk(OUT)i(coun)o(t)j Fn(n)o(um)o(b)q(er)13 b(of)g(elemen)o(ts)h(receiv)
o(ed.)75 1862 y Fk(OUT)i(source)j Fn(rank)14 b(of)g(message)f(sender)j(in)d
(message)h(con)o(text)g(\(in)o(teger\).)75 1944 y Fk(OUT)i(tag)k
Fn(tag)14 b(of)f(receiv)o(ed)i(message)f(\(in)o(teger\).)158
2060 y Fk(MPI)p 257 2060 V 17 w(CREA)l(TE)p 471 2060 V 19 w(ST)l(A)l(TUS\()h
(handle\))158 2145 y Fn(Creates)g(a)f(new)g(return)h(status)g(ob)r(ject.)75
2225 y Fk(OUT)h(handle)i Fn(handle)c(to)g(return)h(status)g(ob)r(ject.)1931
2264 y Fe(TO)c(DISCUSS)158 2384 y Fj(Discussion:)158 2430 y
Fi(Should)k(w)o(e)e(ha)o(v)o(e)g(p)q(ersisten)o(t/ephemeral)k(status)c(ob)r
(jects?)158 2475 y(The)e(use)g(of)f(a)h(return)g(status)g(ob)r(ject,)g
(rather)g(than)g(a)g(list)h(of)e(parameters)i(ma)o(y)f(simplify)i(the)e(use)g
(of)f(MPI)h(routines,)75 2521 y(if)i(the)f(v)n(alues)i(stored)f(in)g(the)f
(ob)r(ject)h(are)f(seldom)i(c)o(hec)o(k)o(ed.)j(A)12 b(prede\014ned)i(return)
f(status)g(ob)r(ject)f(should)j(b)q(e)d(pro)o(vided,)75 2567
y(to)h(ease)g(programming.)19 b(The)12 b(main)i(reason)g(for)e(the)h(use)g
(of)g(a)f(return-status)i(ob)r(ject)f(is)g(that)g(one)h(w)o(an)o(ts)e(to)h(b)
q(e)g(able)h(to)75 2612 y(use)f(the)f(same)h Fd(MPI)p 364 2612
12 2 v 13 w(WAIT)e Fi(and)i Fd(MPI)p 602 2612 V 13 w(TEST)e
Fi(calls)j(for)e(c)o(hec)o(king)i(on)f(di\013eren)o(t)h(t)o(yp)q(es)f(of)f
(op)q(erations,)i(e.g.)j(b)q(oth)c(sends)g(and)75 2658 y(receiv)o(es,)i(and)f
(p)q(erhaps)h(new)e(op)q(erations)j(in)e(the)g(future.)19 b(These)14
b(di\013eren)o(t)h(op)q(erations)g(return)g(di\013eren)o(t)g(information)75
2704 y(\(alb)q(eit)g(w)o(e)d(could)j(decree)e(that)g(a)g(send)h(returns)g
(the)f(same)g(information)i(as)e(a)g(receiv)o(e\).)p eop
%%Page: 26 27
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(26)158 45 y Fi(The)12 b(issue)i(of)e(memory)h(allo)q(cation)j
(for)c(status)h(is)g(not)g(y)o(et)f(solv)o(ed.)18 b(There)13
b(is)g(a)f(desire)i(that)f(the)f(user)h(will)h(b)q(e)f(able)75
91 y(to)g(allo)q(cate)i(space)e(for)g(them)g(\(e.g.,)f(on)i(the)f(stac)o
(k\).)158 136 y(W)m(e)j(return)g(n)o(um)o(b)q(er)g(of)f(elemen)o(ts)i(receiv)
o(ed,)g(rather)e(than)i(b)o(ytes)e(receiv)o(ed)i(b)q(ecause)g(\\n)o(um)o(b)q
(er)f(of)f(elemen)o(ts")i(is)75 182 y(closer)c(to)f(the)g(application)j
(seman)o(tic)f(lev)o(el)f(\(user)f(do)q(es)h(not)f(need)h(to)f(b)q(e)g(a)o(w)
o(are)g(of)g(the)g(size)h(of)f(elemen)o(ts\),)g(and)h(is)g(more)75
228 y(in)o(v)n(arian)o(t.)23 b(The)14 b(return)h(status)f(ob)r(ject)h
(returns)g(the)f(n)o(um)o(b)q(er)h(of)f Fj(elemen)o(ts)g Fi(receiv)o(ed.)22
b(If)13 b(there)i(w)o(as)f(no)g(truncation,)75 273 y(then)h(this)g(is)g
(equal)g(to)f(the)h(n)o(um)o(b)q(er)g(of)f(elemen)o(ts)h(sen)o(t.)21
b(On)14 b(the)g(other)h(hand,)g(the)f(n)o(um)o(b)q(er)h(of)f(b)o(ytes)h
(collected)h(from)75 319 y(the)d(sender)i(memory)m(,)e(the)g(n)o(um)o(b)q(er)
h(of)f(b)o(ytes)h(sen)o(t)g(o)o(v)o(er)f(the)h(wire,)f(and)h(the)f(n)o(um)o
(b)q(er)i(of)e(b)o(ytes)g(stored)h(in)g(the)g(receiv)o(er)75
365 y(memory)c(ma)o(y)g(all)i(b)q(e)e(di\013eren)o(t,)i(in)e(a)g
(heterogeneous)i(en)o(vironmen)o(t.)18 b(The)10 b(n)o(um)o(b)q(er)g(of)g
(elemen)o(ts)h(sen)o(t)f(can)h(b)q(e)f(computed)75 410 y(form)k(the)g(send)h
(bu\013er)h(descriptor;)g(the)e(n)o(um)o(b)q(er)h(of)f(elemen)o(ts)i(receiv)o
(ed)f(can)g(b)q(e)g(computed)g(from)f(the)h(receiv)o(e)g(bu\013er)75
456 y(descriptor)g(and)e(the)g(length)i(\(in)e(b)o(ytes\))h(of)f(the)g
(receiv)o(ed)h(message.)75 654 y Fh(1.8.4)55 b(Multiple)20
b(Completions)75 731 y Fn(It)c(is)g(con)o(v)o(enien)o(t)h(to)f(b)q(e)h(able)e
(to)h(w)o(ait)g(for)g(the)g(completion)f(of)g(an)o(y)h(or)g(all)f(the)i(op)q
(erations)f(in)g(a)g(set,)h(rather)75 781 y(than)e(ha)o(ving)g(to)g(w)o(ait)f
(for)h(a)g(sp)q(eci\014c)i(message.)22 b(A)16 b(call)e(to)h
Fl(MPI)p 1125 781 14 2 v 15 w(WAITANY)f Fn(or)h Fl(MPI)p 1426
781 V 16 w(TESTANY)e Fn(can)j(b)q(e)g(used)g(to)75 831 y(w)o(ait)d(for)h(the)
h(completion)d(of)h(one)i(out)f(of)f(sev)o(eral)i(op)q(erations;)e(a)h(call)f
(to)h Fl(MPI)p 1340 831 V 15 w(WAITALL)f Fn(can)h(b)q(e)h(used)g(to)f(w)o
(ait)75 880 y(for)g(all)e(p)q(ending)i(op)q(erations)g(in)g(a)f(list.)158
966 y Fk(MPI)p 257 966 15 2 v 17 w(W)-5 b(AIT)l(ANY)17 b(\()f(list)p
628 966 V 15 w(of)p 682 966 V 16 w(handles,)e(coun)o(t,)h(index,)f(status\))
158 1051 y Fn(Blo)q(c)o(ks)g(un)o(til)f(one)h(of)f(the)h(op)q(erations)g
(asso)q(ciated)h(with)e(the)i(comm)o(uni)o(cation)c(handles)j(in)f(the)h
(arra)o(y)g(has)75 1101 y(completed.)19 b(Returns)c(the)g(index)g(of)e(that)i
(handle)f(in)g(the)h(arra)o(y)m(,)e(and)i(returns)h(the)f(status)g(of)f(that)
g(op)q(eration)75 1151 y(in)f(the)i(ob)r(ject)g(asso)q(ciated)f(with)g(the)g
(status.)19 b(The)14 b(parameters)g(are:)75 1239 y Fk(IN)i(list)p
215 1239 V 15 w(of)p 269 1239 V 17 w(handles)j Fn(list)13 b(of)g(handles)h
(to)g(comm)o(unication)d(ob)r(jects.)75 1321 y Fk(IN)16 b(coun)o(t)j
Fn(list)14 b(length)g(\(in)o(teger\))75 1402 y Fk(OUT)i(index)j
Fn(index)14 b(of)f(handle)h(for)f(op)q(eration)h(that)g(completed)f(\(in)o
(teger\).)75 1484 y Fk(OUT)j(status)j Fn(handle)14 b(that)g(is)h(asso)q
(ciated)g(with)f(return)h(status)g(ob)r(ject.)20 b(Ob)r(ject)c(is)e(set)h(to)
f(return)h(status)h(of)179 1534 y(op)q(eration)e(that)f(completed.)158
1622 y(The)20 b(successful)i(execution)f(of)e Fl(MPI)p 758
1622 14 2 v 15 w(WAITANY\(list)p 1037 1622 V 13 w(of)p 1094
1622 V 15 w(handles,)h(index,)h(status\))d Fn(has)i(the)h(same)75
1672 y(e\013ect)16 b(as)f(the)g(successful)h(execution)g(of)d
Fl(MPI)p 801 1672 V 15 w(WAIT\(handle[i],)19 b(status\))p Fn(,)13
b(where)j Fl(i)e Fn(is)g(the)h(v)n(alue)f(returned)75 1722
y(b)o(y)i Fl(index)f Fn(and)g Fl(handle[i])f Fn(is)i(the)h
Fl(i)p Fn(-th)f(handle)f(in)h(the)g(list,)g(and)g(the)g(cancellation)g(of)f
(all)g(remaining)f(w)o(ait)75 1772 y(op)q(erations.)158 1821
y(If)h(more)e(then)j(one)f(op)q(eration)g(is)g(enabled)g(and)g(can)g
(terminate,)f(one)h(is)g(arbitrarily)f(c)o(hosen)i(\(sub)r(ject)g(to)75
1871 y(the)e(restrictions)i(on)d(op)q(eration)h(termination)e(order,)i(and)g
(fairness,)g(see)h(Chapter)g Fk(??)p Fn(\).)158 1921 y Fl(MPI)p
227 1921 V 15 w(WAITANY)20 b(\()i(list)p 548 1921 V 15 w(of)p
607 1921 V 15 w(handles,)e(count,)h(index,)f(status\))13 b
Fn(is)140 2002 y Fl({MPI_WAIT)20 b(\(handle[0],)g(return_handle\);)f(index)h
(=)i(0})f(||)h(...)75 2051 y(||)140 2101 y({MPI_WAIT)e(\(handle[count-1],)f
(return_handle\);)f(index)j(=)h(count-1})158 2182 y Fn(\(\\)p
Fc(jj)p Fn(")13 b(indicates)h(c)o(hoice;)g(one)g(of)f(the)i(alternativ)o(es)f
(is)f(c)o(hosen,)i(nondeterministically)m(.\))158 2267 y Fk(MPI)p
257 2267 15 2 v 17 w(TEST)l(ANY)i(\()f(list)p 621 2267 V 15
w(of)p 675 2267 V 16 w(handles,)e(coun)o(t,)h(index,)f(status\))158
2352 y Fn(Causes)20 b(either)h(one)f(or)f(none)h(of)f(the)h(op)q(erations)g
(asso)q(ciated)g(with)f(the)h(comm)o(unication)c(handles)k(to)75
2402 y(return.)f(In)13 b(the)h(former)d(case,)j(it)f(has)g(the)h(same)e
(return)i(seman)o(tics)e(as)i(a)e(call)g(to)h Fl(MPI)p 1449
2402 14 2 v 15 w(WAIT)p 1552 2402 V 15 w(ANY)p Fn(.)f(In)h(the)h(latter)75
2452 y(case,)g(it)g(returns)h(a)f(v)n(alue)f(of)g({1)h(in)f
Fl(index)g Fn(and)h Fl(status)e Fn(is)i(unde\014ned.)19 b(The)c(parameters)f
(are:)75 2540 y Fk(IN)i(list)p 215 2540 15 2 v 15 w(of)p 269
2540 V 17 w(handles)j Fn(list)13 b(of)g(handles)h(to)g(comm)o(unication)d(ob)
r(jects.)75 2622 y Fk(IN)16 b(coun)o(t)j Fn(list)14 b(length)g(\(in)o
(teger\))75 2704 y Fk(OUT)i(index)j Fn(index)14 b(of)f(handle)h(for)f(op)q
(eration)h(that)g(completed,)f(or)h(-1)f(if)g(none)h(completed)g(\(in)o
(teger\).)p eop
%%Page: 27 28
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(27)75 45 y Fk(OUT)16 b(status)j Fn(handle)13
b(that)g(is)h(asso)q(ciated)g(with)f(return)h(status)g(ob)r(ject.)19
b(Set)14 b(to)f(return)h(status)g(of)f(op)q(eration)179 95
y(that)h(completed,)f(if)g(an)o(y;)g(unde\014ned)i(when)f Fl(index)21
b(=)g(-1)p Fn(.)158 222 y Fk(MPI)p 257 222 15 2 v 17 w(W)-5
b(AIT)l(ALL\(list)p 580 222 V 15 w(of)p 634 222 V 17 w(handles,)13
b(coun)o(t,)i(list)p 1047 222 V 15 w(of)p 1101 222 V 17 w(statuss\))158
307 y Fn(Blo)q(c)o(ks)k(un)o(til)e(all)g(comm)o(unicati)o(on)e(op)q(erations)
k(asso)q(ciated)g(with)f(handles)g(in)g(the)g(list)g(complete,)g(and)75
357 y(return)d(the)g(status)f(of)g(all)e(these)j(op)q(erations.)k(The)14
b(parameters)g(are:)75 448 y Fk(IN)i(list)p 215 448 V 15 w(of)p
269 448 V 17 w(handles)j Fn(list)13 b(of)g(handles)h(to)g(comm)o(unication)d
(ob)r(jects.)75 531 y Fk(IN)16 b(coun)o(t)j Fn(lists)14 b(length)g(\(in)o
(teger\))75 614 y Fk(OUT)i(list)p 266 614 V 15 w(of)p 320 614
V 16 w(status)k Fn(Must)c(ha)o(v)o(e)f(the)h(same)f(length)g(as)h(the)g
(\014rst)g(list.)23 b(Eac)o(h)15 b(return)i(status)f(ob)r(ject)h(is)e(set)179
664 y(to)f(the)g(return)h(status)g(of)e(the)i(corresp)q(onding)f(op)q
(eration)g(in)g(the)g(\014rst)h(list.)158 834 y Fj(Discussion:)158
879 y Fi(The)9 b(fairness)i(requiremen)o(t)g(giv)o(en)g(in)f(Chapter)g
Fj(??)16 b Fi(implies)c(that)e(the)f(use)h(of)f Fd(WAIT)p 1374
879 12 2 v 13 w(ANY)f Fi(cannot)j(lead)f(to)g(starv)n(ation:)75
925 y(If)15 b(the)i(sending)g(pro)q(cess)g(has)g(issued)g(a)f(send)h
(complete)g(op)q(eration,)i(and)d(the)g(receiving)j(pro)q(cess)d(rep)q
(eatedly)i(p)q(ost)f(a)75 971 y(receiv)o(e)e(for)f(the)h(message)g(sen)o(t,)f
(then)h(that)f(message)h(m)o(ust)g(b)q(e)f(ev)o(en)o(tually)j(receiv)o(ed.)22
b(Section)16 b Fj(??)21 b Fi(has)14 b(not)h(y)o(et)f(b)q(een)75
1016 y(discussed.)35 b(The)18 b(fairness)h(requiremen)o(t)h(can)f(b)q(e)f
(attac)o(k)o(ed)h(either)g(for)f(b)q(eing)i(to)q(o)f(w)o(eak)f(\(ev)o(en)o
(tually)j(is)d(not)h(go)q(o)q(d)75 1062 y(enough\),)13 b(or)f(to)q(o)g
(strong)g(\(hard)h(to)f(implemen)o(t\).)18 b(In)12 b(the)g(later)g(case,)g
(if)g(the)g(requiremen)o(t)i(of)d(fairness)i(is)g(dropp)q(ed)g(from)75
1108 y(MPI)g(implemen)o(tation)q(s,)j(then)d(some)h(mec)o(hanism)h(need)e(b)q
(e)h(pro)o(vided)h(to)e(the)h(user)f(to)h(ac)o(hiev)o(e)g(fairness)h(b)o(y)e
(his)h(or)g(her)75 1153 y(o)o(wn)g(devices.)22 b(One)14 b(suc)o(h)h(prop)q
(osal)h(is)f(to)f(b)q(e)g(able)i(to)e(sp)q(ecify)h(a)f(rotating)h(priorit)o
(y)h(order)f(on)g(the)f(op)q(erations)i(p)q(osted)75 1199 y(b)o(y)d(a)g
Fd(MPI)p 222 1199 V 13 w(WAITANY)p Fi(:)d(searc)o(h)k(the)f(list)h(sequen)o
(tially)n(,)h(starting)f(from)f(a)g(user)g(sp)q(eci\014ed)i(p)q(osition.)428
b Fe(TO)11 b(DISCUSS)158 1245 y Fi(A)i(prop)q(osal)i(w)o(as)e(made)h(for)f
(an)h Fd(MPI)p 707 1245 V 13 w(TESTALL)c Fi(function)15 b(that)e(returns)h
(successfully)i(\()p Fd(flag)i(=)h(true)p Fi(\))11 b(if)j(all)h(op)q(er-)75
1290 y(ations)f(in)g(the)f(list)h(ha)o(v)o(e)g(terminated,)g(unsuccessfully)i
(\()p Fd(flag)i(=)h(false)p Fi(\),)11 b(otherwise.)75 1510
y Fm(1.9)70 b(Blo)r(c)n(king)21 b(Comm)n(unication)75 1601
y Fn(Blo)q(c)o(king)14 b(send)i(and)f(receiv)o(e)h(op)q(erations)g(com)o
(bine)d(all)h(comm)o(unication)e(sub)q(op)q(erations)j(in)o(to)g(one)g(call.)
21 b(The)75 1651 y(op)q(eration)16 b(returns)j(only)c(when)i(the)h(comm)o
(unicati)o(on)c(completes)i(and)g(no)h(comm)o(unicatio)o(n)d(ob)r(ject)j(p)q
(ersists)75 1701 y(after)d(the)h(call)e(completed.)k(Ho)o(w)o(ev)o(er,)d(the)
h(bu\013er)f(descriptor)i(ob)r(ject)e(needs)i(b)q(e)e(created)h(ahead)f(of)g
(the)g(call.)158 1751 y(W)m(e)9 b(use)h(the)h(same)d(naming)f(con)o(v)o(en)o
(tion)j(as)f(for)g(comm)o(unication)d(handle)k(creation:)16
b(a)9 b(pre\014x)h(of)f Fl(R)h Fn(indicates)75 1801 y(the)k
Fl(ready)f Fn(mo)q(de,)g(and)g(a)h(pre\014x)h(of)e Fl(S)g Fn(indicates)i(the)
f(sync)o(hronous)h(mo)q(de.)158 1886 y Fk(MPI)p 257 1886 15
2 v 17 w(SEND)h(\(bu\013er)p 565 1886 V 15 w(handle,)e(dest,)h(tag,)h(con)o
(text\))158 1971 y Fn(Blo)q(c)o(king)d(standard)i(send.)158
2021 y Fl(MPI)p 227 2021 14 2 v 15 w(SEND)21 b(\(buffer)p 505
2021 V 14 w(handle,)g(dest,)f(tag,)h(context\))13 b Fn(is)75
2104 y Fl(MPI_INIT_SEND\(han)o(dle,)18 b(buffer_handle,)h(dest,)i(tag,)g
(context,)75 2154 y(MPI_EPHEMERAL\))75 2203 y(MPI_START\(handle\))75
2253 y(MPI_WAIT\(handle,)d(null\))158 2372 y Fk(MPI)p 257 2372
15 2 v 17 w(RSEND)e(\(bu\013er)p 601 2372 V 15 w(handle,)e(dest,)h(tag,)h
(con)o(text\))158 2457 y Fn(blo)q(c)o(king)d(ready)h(send)158
2507 y Fl(MPI)p 227 2507 14 2 v 15 w(RSEND)21 b(\(buffer)p
527 2507 V 14 w(handle,)f(dest,)h(tag,)g(context\))12 b Fn(is)75
2590 y Fl(MPI_INIT_RSEND\(ha)o(ndle,)18 b(buffer_handle,)h(dest,)i(tag,)g
(context,)f(MPI_EPHEMERAL\))75 2640 y(MPI_START\(handle\))75
2689 y(MPI_WAIT\(handle,)e(null\))p eop
%%Page: 28 29
bop 75 -100 a Ff(CHAPTER)14 b(1.)27 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)717 b Fn(28)158 45 y Fk(MPI)p 257 45 15 2 v 17 w(SSEND)16
b(\(bu\013er)p 592 45 V 15 w(handle,)e(dest,)h(tag,)h(con)o(text\))158
130 y Fn(Blo)q(c)o(king)d(sync)o(hronous)i(send.)158 180 y
Fl(MPI)p 227 180 14 2 v 15 w(SSEND)21 b(\(buffer)p 527 180
V 14 w(handle,)f(dest,)h(tag,)g(context\))12 b Fn(is)75 258
y Fl(MPI_INIT_SSEND\(ha)o(ndle,)18 b(buffer_handle,)h(dest,)i(tag,)g
(context,)f(MPI_EPHEMERAL\))75 307 y(MPI_START\(handle\))75
357 y(MPI_WAIT\(handle,)e(null\))158 470 y Fk(MPI)p 257 470
15 2 v 17 w(RECV\(bu\013er)p 554 470 V 16 w(handle,)c(source,)h(tag,)h(con)o
(text,)f(status\))158 555 y Fn(Blo)q(c)o(king)e(receiv)o(e)158
605 y Fl(MPI)p 227 605 14 2 v 15 w(RECV\(buffer)p 484 605 V
14 w(handle,)20 b(source,)g(tag,)h(context,)f(status\))13 b
Fn(is)75 682 y Fl(MPI_INIT_RECV\(han)o(dle,)18 b(buffer_handle,)h(source,)i
(tag,)g(context,)f(MPI_EPHEMERAL\))75 732 y(MPI_START\(handle\))75
782 y(MPI_WAIT\(handle,)e(status\))158 938 y Fj(Implemen)o(tation)13
b(note:)158 984 y Fi(While)20 b(these)f(functions)g(can)g(b)q(e)f(implemen)o
(ted)i(via)f(calls)h(to)e(functions)i(that)e(implemen)o(t)i(sub)q(op)q
(erations,)i(as)75 1029 y(describ)q(ed)16 b(in)g(this)f(subsection,)h(an)f
(e\016cien)o(t)g(implemen)o(tation)j(ma)o(y)d(optimize)h(a)o(w)o(a)o(y)e
(these)h(m)o(ultiple)i(calls,)f(pro)o(vided)75 1075 y(it)d(do)q(es)h(not)f(c)
o(hange)h(the)f(b)q(eha)o(vior)i(of)e(correct)g(programs.)75
1294 y Fm(1.10)70 b(Non)n(blo)r(c)n(king)22 b(Comm)n(unication)75
1385 y Fn(Non)o(blo)q(c)o(king)11 b(send)i(and)f(receiv)o(e)h(op)q(erations)f
(com)o(bine)f(the)i(\014rst)g(t)o(w)o(o)e(sub)q(op)q(erations)i(\()p
Fl(INIT)f Fn(and)g Fl(START)p Fn(\))f(in)o(to)75 1434 y(one)16
b(call.)21 b(They)16 b(use)g(ephemeral)f(comm)o(uni)o(cation)d(ob)r(jects,)17
b(so)e(that)g(the)h(op)q(eration)f(is)h(completed,)e(and)h(the)75
1484 y(asso)q(ciated)i(resources)h(are)e(freed,)h(b)o(y)f(using)g(one)g(of)f
(the)i(functions)f Fl(MPI)p 1265 1484 V 15 w(WAIT,)21 b(MPI)p
1477 1484 V 15 w(TEST,)g(MPI)p 1689 1484 V 15 w(WAITANY,)75
1534 y(MPI)p 144 1534 V 15 w(TESTANY)p Fn(,)13 b(or)i Fl(MPI)p
456 1534 V 15 w(WAITALL)p Fn(.)e(Here,)i(to)q(o,)g(a)f(bu\013er)i(ob)r(ject)g
(has)e(to)h(b)q(e)h(created)g(ahead)f(of)f(the)h(comm)o(uni-)75
1584 y(cation)f(initiation)d(op)q(eration.)158 1634 y(W)m(e)j(use)i(the)f
(same)f(naming)e(con)o(v)o(en)o(tion)i(as)h(for)f(blo)q(c)o(king)g(op)q
(erations:)20 b(a)14 b(pre\014x)h(of)f Fl(R)h Fn(\()p Fl(S)p
Fn(\))f(indicates)h(the)75 1683 y Fl(READY)g Fn(\()p Fk(SYNCHR)o(ONOUS)p
Fn(\))i(mo)q(de.)25 b(In)16 b(addition,)g(a)g(pre\014x)h(of)f
Fk(I)h Fn(is)f(used)h(to)g(indicate)f Fg(imme)n(diate)g Fn(\(i.e.,)75
1733 y(non)o(blo)q(c)o(king\))d(execution.)158 1818 y Fk(MPI)p
257 1818 15 2 v 17 w(ISEND)j(\(handle,)e(bu\013er)p 750 1818
V 15 w(handle,)g(dest,)h(tag,)h(con)o(text\))158 1904 y Fn(Non)o(blo)q(c)o
(king)d(standard)h(send.)158 1954 y Fl(MPI)p 227 1954 14 2
v 15 w(ISEND)21 b(\(handle,)f(buffer)p 701 1954 V 14 w(handle,)h(dest,)g
(tag,)g(context\))12 b Fn(is)75 2031 y Fl(MPI_INIT_SEND\(han)o(dle,)18
b(buffer_handle,)h(dest,)i(tag,)g(context,)f(MPI_EPHEMERAL\))75
2081 y(MPI_START\(handle\))158 2193 y Fk(MPI)p 257 2193 15
2 v 17 w(IRSEND)c(\(handle,)e(bu\013er)p 786 2193 V 15 w(handle,)g(dest,)h
(tag,)h(con)o(text\))158 2279 y Fn(Non)o(blo)q(c)o(king)d(ready)h(send.)158
2329 y Fl(MPI)p 227 2329 14 2 v 15 w(IRSEND)21 b(\(handle,)f(buffer)p
723 2329 V 14 w(handle,)h(dest,)f(tag,)h(context\))12 b Fn(is)75
2406 y Fl(MPI_INIT_RSEND\(ha)o(ndle,)18 b(buffer_handle,)h(dest,)i(tag,)g
(context,)f(MPI_EPHEMERAL\))75 2456 y(MPI_START\(handle\))158
2569 y Fk(MPI)p 257 2569 15 2 v 17 w(ISSEND)c(\(handle,)d(bu\013er)p
776 2569 V 16 w(handle,)h(dest,)h(tag,)h(con)o(text\))158 2654
y Fn(Non)o(blo)q(c)o(king)d(sync)o(hronous)i(send.)158 2704
y Fl(MPI)p 227 2704 14 2 v 15 w(ISSEND)21 b(\(handle,)f(buffer)p
723 2704 V 14 w(handle,)h(dest,)f(tag,)h(context\))12 b Fn(is)p
eop
%%Page: 29 30
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(29)75 45 y Fl(MPI_INIT_SSEND\(ha)o(ndle,)18
b(buffer_handle,)h(dest,)i(tag,)g(context,)f(MPI_EPHEMERAL\))75
95 y(MPI_START\(handle\))158 206 y Fk(MPI)p 257 206 15 2 v
17 w(IRECV\(handle,)15 b(bu\013er)p 740 206 V 15 w(handle,)f(source,)i(tag,)f
(con)o(text\))158 291 y Fn(Non)o(blo)q(c)o(king)e(receiv)o(e)158
341 y Fl(MPI)p 227 341 14 2 v 15 w(IRECV\(handle,)19 b(buffer)p
679 341 V 15 w(handle,)h(source,)g(tag,)h(context\))12 b Fn(is)75
417 y Fl(MPI_INIT_RECV\(han)o(dle,)18 b(buffer_handle,)h(source,)i(tag,)g
(context,)f(MPI_EPHEMERAL\))75 467 y(MPI_START\(handle\))75
603 y Fm(1.11)70 b(Con)n(tiguous)23 b(Bu\013er)g(Comm)n(unication)e(Op)r
(erations)75 694 y Fn(The)c(most)f(frequen)o(t)i(t)o(yp)q(e)g(of)e(bu\013er)i
(used)g(is)f(a)g(bu\013er)h(with)f(one)g(con)o(tiguous)g(comp)q(onen)o(t.)27
b(W)m(e)16 b(sp)q(ecialize)75 743 y(the)e(functions)f(in)f(the)i(t)o(w)o(o)e
(previous)i(subsections)g(to)f(this)g(case,)h(th)o(us)f(a)o(v)o(oiding)e(the)
j(need)g(for)f(the)g(creation)h(of)75 793 y(a)h(bu\013er)i(descriptor)f(ob)r
(ject.)24 b(W)m(e)15 b(use)h(the)g(same)e(naming)g(sc)o(heme)h(used)h(in)f
(the)h(previous)g(subsections,)h(and)75 843 y(app)q(end)d(a)g
Fk(C)g Fn(in)g(the)g(function)g(name,)e(for)i Fl(CONTIGUOUS)p
Fn(.)158 928 y Fk(MPI)p 257 928 15 2 v 17 w(SENDC)j(\(start,)d(coun)o(t,)h
(datat)o(yp)q(e,)f(dest,)h(tag,)h(con)o(text\))158 1014 y Fn(Blo)q(c)o(king)d
(send)i(of)e(con)o(tiguous)h(bu\013er)h(in)e(standard)i(mo)q(de.)158
1063 y Fl(MPI)p 227 1063 14 2 v 15 w(SENDC)21 b(\(start,)f(count,)h
(datatype,)f(dest,)g(tag,)h(context\))13 b Fn(is)75 1139 y
Fl(MPI_CREATE_BUFFER)o(\()19 b(buffer_handle,)g(MPI_EPHEMERAL\))75
1189 y(MPI_APPEND_CONTIG)o(UOUS\()f(buffer_handle,)h(start,)i(count,)f
(datatype\))75 1239 y(MPI_COMMIT_BUFFER)o(\()f(buffer_handle\))75
1289 y(MPI_SEND)h(\(buffer_handle,)f(count,)h(dest,)h(tag,)g(context\))158
1400 y Fk(MPI)p 257 1400 15 2 v 17 w(RSENDC)16 b(\(start,)f(coun)o(t,)f
(datat)o(yp)q(e,)h(dest,)g(tag,)h(con)o(text\))158 1485 y Fn(Blo)q(c)o(king)d
(send)i(of)e(con)o(tiguous)h(bu\013er)h(in)e(ready)i(mo)q(de.)158
1535 y Fl(MPI)p 227 1535 14 2 v 15 w(RSENDC)21 b(\(start,)f(count,)h
(datatype,)e(dest,)i(tag,)g(context\))12 b Fn(is)75 1611 y
Fl(MPI_CREATE_BUFFER)o(\()19 b(buffer_handle,)g(MPI_EPHEMERAL\))75
1661 y(MPI_APPEND_CONTIG)o(UOUS\()f(buffer_handle,)h(start,)i(count,)f
(datatype\))75 1710 y(MPI_COMMIT_BUFFER)o(\()f(buffer_handle\))75
1760 y(MPI_RSEND\()h(buffer_handle,)f(count,)h(dest,)h(tag,)g(context\))158
1872 y Fk(MPI)p 257 1872 15 2 v 17 w(SSENDC)16 b(\(start,)f(coun)o(t,)f
(datat)o(yp)q(e,)h(dest,)g(tag,)h(con)o(text\))158 1957 y Fn(Blo)q(c)o(king)d
(send)i(of)e(con)o(tiguous)h(bu\013er)h(in)e(sync)o(hron)o(uous)i(mo)q(de.)
158 2007 y Fl(MPI)p 227 2007 14 2 v 15 w(SSENDC)21 b(\(start,)f(count,)h
(datatype,)e(dest,)i(tag,)g(context\))12 b Fn(is)75 2083 y
Fl(MPI_CREATE_BUFFER)o(\()19 b(buffer_handle,)g(MPI_EPHEMERAL\))75
2132 y(MPI_APPEND_CONTIG)o(UOUS\()f(buffer_handle,)h(start,)i(count,)f
(datatype\))75 2182 y(MPI_COMMIT_BUFFER)o(\()f(buffer_handle\))75
2232 y(MPI_SSEND\()h(buffer_handle,)f(count,)h(dest,)h(tag,)g(context\))158
2343 y Fk(MPI)p 257 2343 15 2 v 17 w(RECV)o(C)c(\(start,)e(coun)o(t,)f(datat)
o(yp)q(e,)h(source,)g(tag,)h(con)o(text,)f(status\))158 2428
y Fn(Blo)q(c)o(king)e(receiv)o(e)i(of)f(con)o(tiguous)f(bu\013er.)158
2478 y Fl(MPI)p 227 2478 14 2 v 15 w(RECVC)21 b(\(start,)f(count,)h
(datatype,)f(source,)g(tag,)h(context,)f(status\))13 b Fn(is)75
2554 y Fl(MPI_CREATE_BUFFER)o(\()19 b(buffer_handle,)g(MPI_EPHEMERAL\))75
2604 y(MPI_APPEND_CONTIG)o(UOUS\()f(buffer_handle,)h(start,)i(count,)f
(datatype\))75 2654 y(MPI_COMMIT_BUFFER)o(\()f(buffer_handle\))75
2704 y(MPI_RECV\()h(buffer_handle,)f(source,)h(tag,)h(context,)f
(return_handle\))p eop
%%Page: 30 31
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(30)158 45 y Fk(MPI)p 257 45 15 2 v 17 w(ISENDC)17
b(\(handle,)c(start,)i(coun)o(t,)g(datat)o(yp)q(e,)g(dest,)g(tag,)g(con)o
(text\))158 130 y Fn(Non)o(blo)q(c)o(king)e(send)h(of)g(con)o(tiguous)f
(bu\013er)i(in)f(standard)g(mo)q(de.)158 180 y Fl(MPI)p 227
180 14 2 v 15 w(ISENDC)21 b(\(handle,)f(start,)g(count,)h(datatype,)f(dest,)h
(tag,)g(context\))12 b Fn(is)75 263 y Fl(MPI_CREATE_BUFFER)o(\()19
b(buffer_handle,)g(MPI_EPHEMERAL\))75 313 y(MPI_APPEND_CONTIG)o(UOUS\()f
(buffer_handle,)h(start,)i(count,)f(datatype\))75 363 y(MPI_COMMIT_BUFFER)o
(\()f(buffer_handle\))75 413 y(MPI_ISEND\()h(handle,)g(buffer_handle,)f
(dest,)i(tag,)g(context\))158 531 y Fk(MPI)p 257 531 15 2 v
17 w(IRSENDC)16 b(\(handle,)e(start,)h(coun)o(t,)g(datat)o(yp)q(e,)f(dest,)h
(tag,)h(con)o(text\))158 616 y Fn(Non)o(blo)q(c)o(king)d(send)h(of)g(con)o
(tiguous)f(bu\013er)i(in)f(ready)g(mo)q(de.)158 666 y Fl(MPI)p
227 666 14 2 v 15 w(IRSENDC)20 b(\(handle,)h(start,)f(count,)h(datatype,)f
(dest,)g(tag,)h(context\))13 b Fn(is)75 749 y Fl(MPI_CREATE_BUFFER)o(\()19
b(buffer_handle,)g(MPI_EPHEMERAL\))75 799 y(MPI_APPEND_CONTIG)o(UOUS\()f
(buffer_handle,)h(start,)i(count,)f(datatype\))75 849 y(MPI_COMMIT_BUFFER)o
(\()f(buffer_handle\))75 899 y(MPI_IRSEND\()h(handle,)g(buffer_handle,)f
(dest,)i(tag,)f(context\))158 1017 y Fk(MPI)p 257 1017 15 2
v 17 w(ISSENDC)c(\(handle,)e(start,)h(coun)o(t,)f(datat)o(yp)q(e,)h(dest,)g
(tag,)h(con)o(text\))158 1102 y Fn(Non)o(blo)q(c)o(king)d(send)h(of)g(con)o
(tiguous)f(bu\013er)i(in)f(sync)o(hronous)h(mo)q(de.)158 1152
y Fl(MPI)p 227 1152 14 2 v 15 w(ISSENDC)20 b(\(handle,)h(start,)f(count,)h
(datatype,)f(dest,)g(tag,)h(context\))13 b Fn(is)75 1235 y
Fl(MPI_CREATE_BUFFER)o(\()19 b(buffer_handle,)g(MPI_EPHEMERAL\))75
1285 y(MPI_APPEND_CONTIG)o(UOUS\()f(buffer_handle,)h(start,)i(count,)f
(datatype\))75 1335 y(MPI_COMMIT_BUFFER)o(\()f(buffer_handle\))75
1385 y(MPI_ISSEND\()h(handle,)g(buffer_handle,)f(dest,)i(tag,)f(context\))158
1503 y Fk(MPI)p 257 1503 15 2 v 17 w(IRECV)o(C\(handle,)15
b(start,)g(coun)o(t,)f(datat)o(yp)q(e,)h(source,)g(tag,)h(con)o(text\))158
1588 y Fn(Non)o(blo)q(c)o(king)d(receiv)o(e)i(of)e(con)o(tiguous)h(bu\013er.)
158 1638 y Fl(MPI)p 227 1638 14 2 v 15 w(IRECVC\(handle,)19
b(start,)i(count,)f(datatype,)g(source,)g(tag,)h(context\))13
b Fn(is)75 1721 y Fl(MPI_CREATE_BUFFER)18 b(\(buffer_handle,)h
(MPI_EPHEMERAL\))75 1771 y(MPI_APPEND_CONTIG)o(UOUS\()f(buffer_handle,)h
(start,)i(count,)f(datatype\))75 1821 y(MPI_COMMIT_BUFFER)o(\()f
(buffer_handle\))75 1871 y(MPI_IRECV\()h(handle,)g(buffer_handle,)f(source,)h
(tag,)h(context\))75 2008 y Fm(1.12)70 b(Prob)r(e)23 b(and)h(Cancel)75
2099 y Fn(The)18 b Fl(MPI)p 233 2099 V 15 w(PROBE)e Fn(op)q(eration)h(allo)o
(ws)f(incoming)f(messages)i(to)g(b)q(e)h(c)o(hec)o(k)o(ed)g(for,)g(without)e
(actually)h(receiving)75 2149 y(them.)22 b(The)16 b(user)g(can)g(then)g
(decide)h(where)f(to)g(receiv)o(e)g(them,)f(based)h(on)f(the)h(information)d
(returned)k(b)o(y)e(the)75 2198 y(prob)q(e)i(\(basically)m(,)f(the)h
(information)d(on)i(the)i(message)e(en)o(v)o(elop)q(e\).)27
b(An)17 b(additional)e(function,)h Fl(MPI)p 1716 2198 V 16
w(GET)p 1798 2198 V 15 w(LEN)75 2248 y Fn(allo)o(ws)11 b(the)j(amoun)o(t)c
(of)i(storage)h(needed)i(to)d(receiv)o(e)i(the)f(message)g(to)f(b)q(e)h
(computed,)f(when)h(this)g(length)g(is)f(not)75 2298 y(readily)h(computed)h
(from)e(the)i(information)d(returned)16 b(b)o(y)e Fl(MPI)p
1094 2298 V 15 w(PROBE)p Fn(.)158 2348 y(The)f Fl(MPI)p 311
2348 V 15 w(CANCEL)e Fn(op)q(eration)h(allo)o(ws)f(p)q(ending)i(comm)o
(unicatio)o(ns)d(to)i(b)q(e)h(cancelled.)19 b(This)12 b(is)g(required)h(for)
75 2398 y(clean)o(up.)20 b(P)o(osting)14 b(a)h(send)g(or)g(a)f(receiv)o(e)i
(ties)f(user)g(resources)i(\(send)f(or)e(receiv)o(e)i(bu\013ers\),)g(and)e(a)
h(cancel)g(ma)o(y)75 2447 y(b)q(e)g(needed)g(to)f(free)g(these)i(resources)g
(gracefully)m(.)158 2533 y Fk(MPI)p 257 2533 15 2 v 17 w(IPR)o(OBE\()f
(source,)g(tag,)h(con)o(text,)f(\015ag,)h(t)o(yp)q(e,)f(status\))75
2659 y(IN)h(source)k Fn(rank)14 b(in)f(con)o(text)i(of)e(source,)i(or)f
Fl(MPI)p 897 2659 14 2 v 15 w(ANY)p 978 2659 V 15 w(SOURCE)f
Fn(\(in)o(teger\).)p eop
%%Page: 31 32
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(31)75 45 y Fk(IN)16 b(tag)21 b Fn(user)15 b(tag)e(for)h
(messages)g(receiv)o(ed)h(with)f(this)f(handle,)h(or)g Fl(MPI)p
1232 45 14 2 v 15 w(ANY)p 1313 45 V 15 w(TAG)f Fn(\(in)o(teger\).)75
128 y Fk(IN)j(con)o(text)k Fn(con)o(text)14 b(of)f(messages)h(receiv)o(ed)i
(with)d(this)h(handle.)75 211 y Fk(OUT)i(\015ag)k Fn(\(logical\))75
294 y Fk(IN)c(t)o(yp)q(e)k Fn(assumed)14 b(t)o(yp)q(e)g(of)f(data)h(in)f
(message)h(\(status)h(v)n(ariable\).)75 377 y Fk(OUT)h(status)j
Fn(handle)14 b(that)g(is)f(asso)q(ciated)i(with)f(return)h(status)f(ob)r
(ject.)158 468 y Fl(MPI)p 227 468 V 15 w(IPROBE)9 b Fn(returns)j
Fl(flag)21 b(=)g(true)9 b Fn(if)h(there)h(is)f(a)g(message)g(that)g(can)g(b)q
(e)h(receiv)o(ed)g(and)f(that)h(matc)o(hes)e(the)75 517 y(pattern)j(sp)q
(eci\014ed)h(b)o(y)e(the)h(parameters)g Fl(source)p Fn(,)e
Fl(tag)p Fn(,)g(and)i Fl(context)p Fn(.)j(It)d(returns)h Fl(flag)21
b(=)g(false)p Fn(,)10 b(otherwise.)75 567 y(If)18 b Fl(MPI)p
190 567 V 15 w(PROBE)f Fn(returns)i Fl(flag)i(=)h(true)p Fn(,)c(then)h(the)f
(length,)h(source)g(and)f(tag)g(of)g(the)g(message)g(matc)o(hed)g(are)75
617 y(returned)i(in)d(the)i(return)g(status)g(ob)r(ject.)32
b(These)19 b(are)g(the)g(same)e(v)n(alues)h(that)g(w)o(ould)f(ha)o(v)o(e)h(b)
q(een)h(returned)75 667 y(b)o(y)d(a)g(call)f(to)h Fl(MPI)p
372 667 V 15 w(RECV)g Fn(or)g(to)g Fl(MPI)p 663 667 V 15 w(SRECV)f
Fn(executed)j(at)e(the)h(same)e(p)q(oin)o(t)h(in)g(the)g(program)f(\(with)h
(a)g(ca)o(v)o(eat)75 717 y(concerning)e(length;)f(see)h(b)q(elo)o(w\).)k
(These)c(v)n(alues)f(can)g(b)q(e)h(deco)q(ded)g(from)e(the)h(return)i(status)
f(ob)r(ject)g(using)e(the)75 766 y Fl(MPI)p 144 766 V 15 w(RETURN)p
291 766 V 15 w(STAT)h Fn(function.)k(The)e(return)g(status)f(ob)r(ject)h(is)f
(unde\014ned)h(if)e Fl(flag=false)p Fn(.)158 816 y(The)18 b(length)g(v)n
(alue)f(returned)i(b)o(y)e(the)i(return)f(status)h(ob)r(ject)f(is)g
(\(correctly\))h(the)f(n)o(um)o(b)q(er)f(of)g(elemen)o(ts)75
866 y(in)h(the)h(message,)f(pro)o(vided)h(that)f(all)f(elemen)o(ts)h(in)g
(the)h(message)f(are)h(of)e(the)i(t)o(yp)q(e)g(sp)q(eci\014ed)h(b)o(y)e(the)h
Fl(type)75 916 y Fn(parameter;)13 b(otherwise)i(the)f(length)g(v)n(alue)f
(returned)j(is)e(unde\014ned.)158 966 y(A)g(subsequen)o(t)j(receiv)o(e)e
(executed)h(with)e(the)h(same)f(con)o(text,)g(and)h(the)g(source)g(and)f(tag)
g(returned)i(b)o(y)e(the)75 1015 y(call)f(to)h Fl(MPI)p 271
1015 V 15 w(IPROBE)f Fn(will)f(receiv)o(e)k(the)e(message)g(that)g(w)o(as)g
(matc)o(hed)f(b)o(y)h(the)g(prob)q(e,)h(if)e(no)g(other)i(in)o(terv)o(ening)
75 1065 y(receiv)o(e)d(o)q(ccurred)g(after)f(the)g(prob)q(e.)18
b(If)10 b(the)h(receiving)g(pro)q(cess)i(is)d(m)o(ultithreaded,)g(it)g(is)h
(the)g(user)g(resp)q(onsibilit)o(y)75 1115 y(to)j(ensure)h(that)f(the)h(last)
e(condition)g(holds.)158 1200 y Fk(MPI)p 257 1200 15 2 v 17
w(PR)o(OBE\()i(source,)g(tag,)h(con)o(text,)f(t)o(yp)q(e,)g(status\))75
1327 y(IN)h(source)k Fn(rank)14 b(in)f(con)o(text)i(of)e(source,)i(or)f
Fl(MPI)p 897 1327 14 2 v 15 w(ANY)p 978 1327 V 15 w(SOURCE)f
Fn(\(in)o(teger\).)75 1410 y Fk(IN)j(tag)21 b Fn(user)15 b(tag)e(for)h
(messages)g(receiv)o(ed)h(with)f(this)f(handle,)h(or)g Fl(MPI)p
1232 1410 V 15 w(ANY)p 1313 1410 V 15 w(TAG)f Fn(\(in)o(teger\).)75
1492 y Fk(IN)j(con)o(text)k Fn(con)o(text)14 b(of)f(messages)h(receiv)o(ed)i
(with)d(this)h(handle.)75 1575 y Fk(IN)i(t)o(yp)q(e)k Fn(assumed)14
b(t)o(yp)q(e)g(of)f(data)h(in)f(message)h(\(status)h(v)n(ariable\).)75
1658 y Fk(OUT)h(status)j Fn(handle)14 b(that)g(is)f(asso)q(ciated)i(with)f
(return)h(status)f(ob)r(ject.)158 1749 y Fl(MPI)p 227 1749
V 15 w(PROBE)f Fn(b)q(eha)o(v)o(es)i(lik)o(e)f Fl(MPI)p 663
1749 V 15 w(IPROBE)f Fn(except)i(that)g(it)f(is)g(a)g(blo)q(c)o(king)f(call)g
(whic)o(h)i(returns)g(only)f(after)g(a)75 1799 y(matc)o(hing)e(message)i(has)
g(b)q(een)h(found.)158 1927 y Fj(Discussion:)158 1973 y Fi(MPI)10
b(guaran)o(tees)h(that)e(successiv)o(e)j(messages)e(sen)o(t)g(from)f(a)h
(source)g(to)g(a)g(destination)i(within)f(the)f(same)g(con)o(text)g(are)75
2019 y(receiv)o(ed)i(in)f(the)g(order)g(they)g(are)f(sen)o(t.)17
b(Th)o(us,)11 b(MPI)f(m)o(ust)h(supp)q(ort,)h(either)f(explicitly)j(or)c
(implicitl)q(y)m(,)k(a)c(FIF)o(O)g(structure)75 2064 y(to)i(manage)h
(messages)g(b)q(et)o(w)o(een)f(eac)o(h)h(pair)g(of)f(pro)q(cesses,)h(for)f
(eac)o(h)g(con)o(text.)17 b Fd(MPI)p 1309 2064 12 2 v 13 w(PROBE)10
b Fi(returns)j(information)h(on)f(the)75 2110 y(\014rst)i(matc)o(hing)g
(message)g(in)h(this)f(FIF)o(O;)e(this)j(will)g(also)f(b)q(e)g(the)f(message)
h(receiv)o(ed)h(b)o(y)f(the)f(\014rst)h(subsequen)o(t)h(receiv)o(e)75
2156 y(with)d(the)h(same)f(source,)g(tag)g(and)h(con)o(text)f(as)h(the)f
(message)g(matc)o(hed)h(b)o(y)f Fd(MPI)p 1261 2156 V 13 w(PROBE)p
Fi(.)158 2201 y(Message)19 b(passing)g(in)g(MPI)e(can)i(b)q(e)f(implemen)o
(ted)i(without)e(app)q(ending)j(t)o(yp)q(e)d(information)i(to)d(messages.)32
b(A)75 2247 y(message)14 b(is)g(merely)h(a)f(string)g(of)g(b)o(ytes)g(and)g
(the)g(in)o(terpretation)i(of)d(these)h(b)o(ytes)g(in)o(to)h(a)e(sequence)i
(of)e(t)o(yp)q(ed)i(elemen)o(ts)75 2293 y(is)f(done)f(using)i(the)e
(information)i(in)e(the)g(bu\013er)h(descriptors)h(at)e(eac)o(h)g(end.)18
b(The)13 b(abilit)o(y)i(to)e(use)g(suc)o(h)h(implemen)o(tation)75
2338 y(strategy)d(is)g(deemed)g(to)f(b)q(e)h(an)g(imp)q(ortan)o(t)h(goal.)17
b(In)10 b(suc)o(h)h(implemen)o(tation)q(,)i(when)e(a)f(message)h(arriv)o(es,)
h(it)f(is)g(not)f(kno)o(wn)75 2384 y(ho)o(w)16 b(man)o(y)g(elemen)o(ts)h(it)g
(con)o(tains,)h(or)e(ev)o(en)g(ho)o(w)g(m)o(uc)o(h)g(storage)h(is)g(needed)g
(to)e(receiv)o(e)i(that)f(message)h(\(b)q(ecause)g(of)75 2430
y(p)q(ossible)d(represen)o(tation)g(con)o(v)o(ersion)f(in)g(a)f
(heterogeneous)h(en)o(vironmen)o(t\).)18 b(The)12 b(prob)q(e)h(function)g
(cannot)f(use)g(a)g(bu\013er)75 2475 y(descriptor;)18 b(this)f(defeats)f(the)
g(purp)q(ose)h(of)e(probing)j(in)e(order)h(to)e(decide)i(where)f(to)g(receiv)
o(e)h(a)e(message.)26 b(Therefore,)75 2521 y(prob)q(e)17 b(cannot,)h(in)f
(general,)h(return)f(correct)f(length)i(information.)28 b(Still,)19
b(it)e(is)g(often)f(the)g(case)h(that)f(prob)q(e)h(is)g(used)75
2567 y(to)f(decide)h(ho)o(w)f(m)o(uc)o(h)h(storage)f(to)g(allo)q(cate)i(in)f
(order)f(to)g(receiv)o(e)h(a)f(message.)26 b(Enco)q(ding)18
b(suc)o(h)f(information)h(in)f(the)75 2612 y(message)d(tag)f(is)g(deemed)h
(to)f(b)q(e)g(to)q(o)g(a)o(wkw)o(ard,)g(and)g(it)g(is)h(deemed)g(imp)q(ortan)
o(t)g(for)f Fd(MPI)p 1396 2612 V 13 w(PROBE)d Fi(to)j(return)h(some)f(useful)
75 2658 y(size)k(information.)28 b(The)16 b(curren)o(t)h(de\014nition)i(of)c
Fd(MPI)p 884 2658 V 13 w(PROBE)f Fi(is)j(a)f(compromise)i(b)q(et)o(w)o(een)e
(these)h(t)o(w)o(o)e(goals.)28 b(F)m(or)16 b(the)75 2704 y(most)e(common)g
(case)h(of)e(messages)i(where)f(all)h(en)o(tries)g(ha)o(v)o(e)f(the)g(same)g
(t)o(yp)q(e,)g Fd(MPI)p 1318 2704 V 13 w(PROBE)e Fi(returns)i(the)g(correct)g
(length)p eop
%%Page: 32 33
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(32)75 45 y Fi(information;)20 b(the)d(more)g(esoteric)g(case)g
(is)g(handled)i(b)o(y)e(the)g Fd(MPI)p 1076 45 12 2 v 13 w(GET)p
1149 45 V 12 w(LEN)f Fi(that)h(is)g(describ)q(ed)h(b)q(elo)o(w.)29
b(The)16 b(curren)o(t)75 91 y(solution)g(sa)o(v)o(es)e(us)g(the)f(need)h(for)
g(one)g(additional)i(w)o(ord)e(p)q(er)g(message)g(that)g(w)o(ould)g
(otherwise)h(b)q(e)f(needed)g(to)g(transfer)75 136 y(the)f(message)h(length)g
(\(in)g(elemen)o(ts\))g(with)f(the)g(message.)158 304 y Fk(MPI)p
257 304 15 2 v 17 w(GET)p 376 304 V 18 w(LEN\()i(coun)o(t,)g(status,)g
(bu\013er)p 948 304 V 15 w(descriptor\))158 390 y Fn(Computes)g(the)i(n)o(um)
o(b)q(er)e(of)h(elemen)o(ts)g(that)g(w)o(ere)h(to)f(b)q(e)g(receiv)o(ed,)i
(if)d(the)i(message)e(that)h(is)g(asso)q(ciated)75 439 y(with)e(the)i(return)
f(status)h(handle)f(w)o(ould)e(b)q(e)j(receiv)o(ed)g(in)e(the)h(bu\013er)h
(asso)q(ciated)f(with)g(the)g(bu\013er)h(descriptor)75 489
y(handle.)75 564 y Fk(OUT)g(coun)o(t)j Fn(n)o(um)o(b)q(er)13
b(of)g(elemen)o(ts)h(that)g(w)o(ere)h(to)f(b)q(e)g(receiv)o(ed)h(\(in)o
(teger\))75 643 y Fk(IN)h(status)k Fn(handle)13 b(to)h(return)h(status)g
(descriptor)75 721 y Fk(IN)h(bu\013er)p 273 721 V 16 w(descriptor)i
Fn(handle)13 b(to)h(bu\013er)h(descriptor)158 874 y Fj(Discussion:)158
920 y Fi(In)d(order)h(to)g(supp)q(ort)g(this)h(function,)f(an)g(additional)j
(\014eld)d(is)g(needed)h(in)f(the)g(return)g(status)f(ob)r(ject,)h(i.e.,)f(n)
o(um)o(b)q(er)75 966 y(of)h(b)o(ytes)g(in)h(the)f(incoming)i(message)f(matc)o
(hed)g(b)o(y)f(prob)q(e.)158 1134 y Fk(MPI)p 257 1134 V 17
w(CANCEL\()k(handle,)d(\015ag\))75 1250 y(IN)i(handle)j Fn(handle)14
b(to)g(comm)o(uni)o(cation)d(ob)r(ject)75 1329 y Fk(OUT)16
b(\015ag)k Fn(\(logical\))158 1409 y(A)c(call)f(to)h Fl(MPI)p
405 1409 14 2 v 16 w(CANCEL)e Fn(cancels)j(a)f(p)q(ending)g(comm)o(unication)
d(op)q(eration)j(\(send)h(or)f(receiv)o(e\).)26 b(The)17 b(call)75
1459 y(returns)12 b Fl(flag)21 b(=)g(true)9 b Fn(if)h(the)g(cancel)h(op)q
(eration)f(succeeded,)j Fl(flag)21 b(=)h(false)9 b Fn(otherwise.)17
b(It)11 b(m)o(ust)e(b)q(e)h(the)h(case)75 1509 y(that)16 b(either)g(the)g
(cancel)h(op)q(eration)e(succeeds)j(or)e(that)g(the)g(p)q(ending)g(comm)o
(uni)o(cation)d(op)q(eration)i(completes)75 1559 y(\(but)f(not)g(b)q(oth\).)
158 1609 y(If)d(a)g(send)i(w)o(as)e(cancelled)h(successfully)h(then)f(the)g
(message)f(sen)o(t)i(will)d(not)h(b)q(e)h(receiv)o(ed,)h(the)f(receiv)o(e)h
(bu\013er)75 1659 y(of)h(an)o(y)h(p)q(osted)g(receiv)o(e)i(for)d(that)h
(message)f(will)g(not)h(b)q(e)g(altered,)g(and)g(an)o(y)f(suc)o(h)i(receiv)o
(e)g(has)f(to)g(b)q(e)g(satis\014ed)75 1708 y(b)o(y)g(another)h(send.)24
b(If)15 b(a)h(receiv)o(e)h(w)o(as)e(cancelled)h(successfully)m(,)g(then)h
(the)f(receiv)o(e)h(bu\013er)f(p)q(osted)h(will)d(not)h(b)q(e)75
1758 y(altered,)f(and)g(an)o(y)f(send)i(matc)o(hing)d(this)i(receiv)o(e)h
(has)f(to)g(b)q(e)g(satis\014ed)h(b)o(y)f(another)g(receiv)o(e.)158
1808 y(A)j(successful)i(cancel)f(op)q(eration)f(do)q(es)h(not)f(complete)f
(the)i(cancelled)g(comm)o(uni)o(cation;)d(the)j(op)q(eration)75
1858 y(still)10 b(needs)i(to)e(b)q(e)h(completed)g(with)f(an)g
Fl(MPI)p 773 1858 V 15 w(WAIT)g Fn(or)h Fl(MPI)p 1000 1858
V 15 w(TEST)e Fn(call,)i(if)e(it)i(is)f(an)h(non)o(blo)q(c)o(king)e(comm)o
(unicatio)o(n.)53 b Fe(TO)11 b(DISCUSS)158 1986 y Fj(Discussion:)158
2032 y Fi(W)m(e)h(ma)o(y)h(w)o(an)o(t)f(a)g(non)o(blo)q(c)o(king)j(cancel,)f
(that)e(returns)h(asap,)g(since,)g(an)o(yho)o(w,)f(one)h(has)g(to)f(w)o(ait)g
(for)g(the)h Fd(MPI)p 1786 2032 12 2 v 13 w(TEST)75 2077 y
Fi(or)k Fd(MPI)p 188 2077 V 13 w(WAIT)e Fi(to)i(return)g(b)q(efore)g(the)g
(bu\013er)h(is)f(reused.)29 b(If)16 b(w)o(e)h(do)g(so,)g(then)h(the)e
Fd(MPI)p 1402 2077 V 13 w(CANCEL)f Fi(call)j(will)g(not)f(return)75
2123 y(information)k(on)e(the)g(success)h(or)f(failure)h(of)f(the)g(cancel;)j
(this)e(will)g(b)q(e)g(returned)f(b)o(y)h(the)f Fd(MPI)p 1563
2123 V 13 w(WAIT)e Fi(or)i Fd(MPI)p 1786 2123 V 13 w(TEST)75
2169 y Fi(op)q(eration.)158 2214 y(The)c Fd(MPI)p 301 2214
V 13 w(TEST)f Fi(executed)j(after)e(an)h(op)q(eration)h(has)f(b)q(een)g
(cancelled)i(needs)e(to)g(return)f(an)h(indication)j(that)d(the)75
2260 y(op)q(eration)j(failed.)30 b(On)17 b(the)g(other)g(hand,)h(w)o(e)f(do)g
(not)g(w)o(an)o(t)g(the)g(program)g(to)g(blo)o(w)h(up)f(in)h(suc)o(h)f
(situation.)31 b(Th)o(us,)75 2306 y(this)16 b(indication)i(has)e(to)f(b)q(e)h
(handled)h(as)e(a)g(nonfatal)i(error,)e(ev)o(en)h(in)g(the)f(execution)i(mo)q
(de)f(where)f(an)o(y)h(unsuccessful)75 2351 y(comm)o(unication)g(is)d(fatal.)
18 b(Do)13 b(w)o(e)g(w)o(an)o(t)f(this)i(information)h(to)e(b)q(e)g(returned)
h(in)g(the)f(error)g(co)q(de,)h(or)f(to)f(b)q(e)i(returned)g(as)75
2397 y(part)f(of)g(the)g(status?)158 2443 y(Can)g(a)g(thread)h(cancel)g(a)f
(blo)q(c)o(king)j(comm)o(unication)f(executed)f(b)o(y)g(another)f(thread?)158
2493 y(Do)g(w)o(e)g(w)o(an)o(t)g Fd(MPI)p 432 2493 V 13 w(CANCEL)d
Fi(to)j(free)g(the)g(comm)o(unication)j(ob)r(ject?)158 2704
y Fj(Implemen)o(tation)d(note:)p eop
%%Page: 33 34
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(33)158 45 y Fi(The)13 b(cancel)h(op)q(eration)h(ma)o(y)e(b)q
(e)g(exp)q(ensiv)o(e)j(to)c(implemen)o(t)j(on)f(some)f(systems.)75
265 y Fm(1.13)70 b(send-receiv)n(e)1931 306 y Fe(TO)11 b(DISCUSS)75
434 y Fj(Discussion:)158 484 y Fi(This)j(section)g(has)f(not)h(y)o(et)f(b)q
(een)g(discussed)i(b)o(y)f(MPIF.)158 617 y Fn(The)g Fk(send-receiv)o(e)c
Fn(op)q(erations)k(com)o(bines)e(in)h(one)h(call)e(the)i(sending)g(of)e(a)h
(message)g(to)h(one)f(destination)75 667 y(and)h(the)g(receiving)h(of)e
(another)h(message,)f(form)g(another)h(destination,)f(p)q(ossibly)h(the)g
(same.)k(The)c Fk(exc)o(hange)75 716 y Fn(op)q(erations)20
b(are)g(the)h(same)e(as)h(send-receiv)o(e,)j(except)e(that)f(the)h(send)f
(bu\013er)h(and)f(the)g(receiv)o(e)i(bu\013er)f(are)75 766
y(iden)o(tical.)j(A)17 b(send-receiv)o(e)h(op)q(eration)e(is)g(v)o(ery)h
(useful)f(for)g(executing)h(a)f(shift)g(op)q(eration)g(across)h(a)f(c)o(hain)
g(of)75 816 y(pro)q(cesses.)25 b(If)15 b(blo)q(c)o(king)f(sends)j(and)e
(receiv)o(es)i(are)e(used)i(for)e(suc)o(h)h(shift,)f(then)g(one)h(needs)h(to)
e(order)h(correctly)75 866 y(the)d(sends)g(and)f(receiv)o(es)i(\(e.g.)j(ev)o
(en)c(sends,)g(next)g(receiv)o(es,)h(o)q(dd)e(receiv)o(es)i(\014rst,)e(next)h
(sends\))h(so)e(as)g(to)g(prev)o(en)o(t)75 916 y(cyclic)j(dep)q(endencies)i
(that)e(lead)f(to)h(deadlo)q(c)o(k.)20 b(When)15 b(a)f(send-receiv)o(e)j(ro)e
(exc)o(hange)g(op)q(eration)g(is)f(used,)h(the)75 965 y(comm)o(unication)10
b(subsystem)15 b(tak)o(es)f(care)h(of)e(these)i(issues.)158
1015 y(A)j(handle)f(for)h(a)f(send-receiv)o(e)j(\(exc)o(hange\))e(op)q
(eration)g(is)f(created)j(b)o(y)d(a)g(call)g(to)h Fl(MPI)p
1586 1015 14 2 v 15 w(INIT)p 1689 1015 V 15 w(SENDRECV)75 1065
y Fn(\()p Fl(MPI)p 160 1065 V 15 w(INIT)p 263 1065 V 15 w(EXCHANGE)p
Fn(\).)f(The)j(op)q(erations)f(can)g(b)q(e)h(started)g(and)f(completed)f(lik)
o(e)g(regular)h(comm)o(unication)75 1115 y(op)q(erations,)14
b(using)f(the)i Fl(MPI)p 538 1115 V 15 w(START)p Fn(,)d Fl(MPI)p
753 1115 V 15 w(WAIT)p Fn(,)h Fl(MPI)p 947 1115 V 15 w(WAITALL)p
Fn(,)f(etc.)19 b(In)13 b(addition,)g(op)q(erations)h(are)g(pro)o(vided)75
1165 y(for)k(blo)q(c)o(king)f(and)g(non)o(blo)q(c)o(king)g(send-receiv)o(e)j
(and)e(exc)o(hange)h(op)q(erations,)g(with)e(general)h(and)g(con)o(tiguous)75
1215 y(bu\013ers.)158 1264 y(A)f(message)f(sen)o(t)h(b)o(y)g(a)f(send-receiv)
o(e)j(or)d(exc)o(hange)i(op)q(eration)e(can)h(b)q(e)g(receiv)o(ed)h(b)o(y)f
(a)f(regular)h(receiv)o(e)75 1314 y(op)q(eration,)c(and)h(vice)g(v)o(ersa.)
158 1443 y Fj(Discussion:)158 1488 y Fi(The)h(correctness)g(c)o(hapter)h
(need)f(a)g(section)h(on)f(send-receiv)o(es)i({)d(the)h(correctness)h(issue)g
(is)f(not)g(en)o(tirely)i(trivial,)75 1534 y(b)q(ecause)e(of)e(p)q(ossible)j
(cyclic)g(dep)q(endencies.)21 b(Ev)o(en)15 b(in)f(an)g(implemen)o(tation)j
(where)d(messages)g(are)g(not)g(bu\013ered,)h(MPi)75 1580 y(has)j(to)g
(guaran)o(tee)h(that)f(blo)q(c)o(king)i(calls)g(to)d(send-receiv)o(e)j(that)e
(collectiv)o(ely)j(execute)d(a)g(shift)h(on)f(a)f(cycle)i(will)h(not)75
1625 y(deadlo)q(c)o(k.)f(Some)13 b(system)h(bu\013ering)h(is,)e(in)h(fact,)e
(necessary)i(when)g(exc)o(hanges)g(are)f(used.)158 1793 y Fk(MPI)p
257 1793 15 2 v 17 w(INIT)p 380 1793 V 18 w(SENDRECV\(handle,)d(send)p
944 1793 V 16 w(bu\013er)p 1084 1793 V 16 w(handle,)g(dest,)g(recv)p
1461 1793 V 17 w(bu\013er)p 1602 1793 V 16 w(handle,)g(source,)75
1843 y(tag,)16 b(con)o(text,)e(p)q(ersistence\))158 1928 y
Fn(Creates)h(a)f(comm)o(unicatio)o(n)d(ob)r(ject)k(for)f(a)f(send-receiv)o(e)
j(op)q(eration.)75 2019 y Fk(OUT)g(handle)i Fn(message)g(handle.)28
b(The)18 b(handle)g(should)f(not)g(b)q(e)h(asso)q(ciated)h(with)e(an)o(y)g
(ob)r(ject)h(b)q(efore)g(the)179 2069 y(call.)75 2152 y Fk(IN)e(send)p
244 2152 V 16 w(bu\013er)p 384 2152 V 16 w(handle)j Fn(handle)13
b(to)h(send)h(bu\013er)g(descriptor)75 2235 y Fk(IN)h(dest)k
Fn(rank)14 b(in)f(con)o(text)i(of)e(destination)h(\(in)o(teger\))75
2318 y Fk(IN)i(recv)p 237 2318 V 18 w(bu\013er)p 379 2318 V
15 w(handle)j Fn(handle)14 b(to)f(receiv)o(e)i(bu\013er)g(descriptor)75
2401 y Fk(IN)h(source)k Fn(rank)14 b(of)f(source)i(in)f(con)o(text)g(\(in)o
(teger\))75 2484 y Fk(IN)i(tag)21 b Fn(tag)13 b(used)i(b)q(oth)f(for)g(send)g
(and)g(for)g(receiv)o(e)h(op)q(eration)f(\(in)o(teger\))75
2567 y Fk(IN)i(con)o(text)k Fn(con)o(text)14 b(b)q(oth)g(for)g(send)h(and)e
(receiv)o(e)i(op)q(eration)f(\(handle\))75 2650 y Fk(IN)i(p)q(ersistence)i
Fn(comm)o(unication)11 b(ob)r(ject)k(p)q(ersistence)p eop
%%Page: 34 35
bop 75 -100 a Ff(CHAPTER)14 b(1.)27 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)717 b Fn(34)158 45 y Fk(MPI)p 257 45 15 2 v 17 w(INIT)p
380 45 V 18 w(EX)o(CHANGE\(handle,)18 b(bu\013er)p 991 45 V
16 w(handle,)e(dest,)i(source,)g(tag,)g(con)o(text,)g(p)q(ersis-)75
95 y(tence\))158 180 y Fn(Creates)d(a)f(comm)o(unicatio)o(n)d(ob)r(ject)k
(for)f(an)f(exc)o(hange)i(op)q(eration.)75 257 y Fk(OUT)h(handle)i
Fn(message)g(handle.)28 b(The)18 b(handle)g(should)f(not)g(b)q(e)h(asso)q
(ciated)h(with)e(an)o(y)g(ob)r(ject)h(b)q(efore)g(the)179 307
y(call.)75 384 y Fk(IN)e(bu\013er)p 273 384 V 16 w(handle)j
Fn(handle)13 b(to)h(send)h(and)f(receiv)o(e)h(bu\013er)g(descriptor)75
461 y Fk(IN)h(dest)k Fn(rank)14 b(in)f(con)o(text)i(of)e(destination)h(\(in)o
(teger\))75 539 y Fk(IN)i(source)k Fn(rank)14 b(of)f(source)i(in)f(con)o
(text)g(\(in)o(teger\))75 616 y Fk(IN)i(tag)21 b Fn(tag)13
b(used)i(b)q(oth)f(for)g(send)g(and)g(for)g(receiv)o(e)h(op)q(eration)f(\(in)
o(teger\))75 693 y Fk(IN)i(con)o(text)k Fn(con)o(text)14 b(b)q(oth)g(for)g
(send)h(and)e(receiv)o(e)i(op)q(eration)f(\(handle\))75 770
y Fk(IN)i(p)q(ersistence)i Fn(comm)o(unication)11 b(ob)r(ject)k(p)q
(ersistence)158 926 y Fj(Discussion:)158 972 y Fi(Do)e(w)o(e)g(also)h(w)o(an)
o(t)f(send-receiv)o(e)h(and)g(exc)o(hange)g(op)q(erations)h(with)f(the)f
Fd(ready)e Fi(and)i Fd(synchronous)c Fi(mo)q(de?)158 1017 y(Do)14
b(w)o(e)e(w)o(an)o(t)h Fd(tag)p Fi(?)k(\(Collectiv)o(e)e(comm)o(unication)h
(don't)e(use)f(tag;)h(but)f(tag)h(is)f(needed)i(if)e(w)o(e)g(w)o(an)o(t)g(to)
g(b)q(e)h(able)g(to)75 1063 y(mix)g(send-receiv)o(e)g(and)g(exc)o(hange)g
(with)g(regular)g(sends)g(and)g(receiv)o(es.\))158 1109 y(Do)f(w)o(e)f(w)o
(an)o(t)h(to)f(allo)o(w)i(wildcard)g(source)f(and/or)h(tag?)j(Since)d(I)f
(assumed)g(that)g(the)g(message)g(sen)o(t)g(has)g(the)g(same)75
1154 y(tag)g(as)g(the)g(message)h(receiv)o(ed,)g(then)g(widcard)g(tag)f(do)q
(es)g(not)h(mak)o(e)f(m)o(uc)o(h)g(sense.)158 1322 y Fk(MPI)p
257 1322 V 17 w(SENDRECV\(handle,)d(send)p 820 1322 V 16 w(bu\013er)p
960 1322 V 16 w(handle,)g(dest,)g(recv)p 1337 1322 V 17 w(bu\013er)p
1478 1322 V 16 w(handle,)g(source,)h(tag,)75 1372 y(con)o(text\))158
1457 y Fn(Blo)q(c)o(king)i(send-receiv)o(e)j(op)q(eration.)h(The)e(op)q
(eration)e(returns)i(when)f(b)q(oth)g(send)h(and)e(receiv)o(e)i(ha)o(v)o(e)e
(com-)75 1507 y(pleted.)158 1557 y Fl(MPI)p 227 1557 14 2 v
15 w(SENDRECV\(handle,)19 b(send)p 701 1557 V 14 w(buffer)p
847 1557 V 15 w(handle,)h(dest,)h(recv)p 1255 1557 V 15 w(buffer)p
1402 1557 V 14 w(handle,)g(source,)f(tag,)h(context,)75 1607
y(status\))12 b Fn(is)75 1684 y Fl(MPI_INIT_SENDRECV)o(\(hand)o(le,)19
b(send_buffer_hand)o(le,)f(dest,)140 1733 y(recv_buffer_handle,)g(source,)j
(tag,)g(context,)f(MPI_EPHEMERAL\))75 1783 y(MPI_START\(handle\))75
1833 y(MPI_WAIT\(handle,)e(status\))158 1945 y Fk(MPI)p 257
1945 15 2 v 17 w(EX)o(CHANGE\(handle,)d(bu\013er)p 864 1945
V 16 w(handle,)f(dest,)h(source,)g(tag,)h(con)o(text,)e(status\))158
2031 y Fn(Blo)q(c)o(king)j(exc)o(hange)h(op)q(eration.)29 b(The)18
b(op)q(eration)f(returns)i(when)f(b)q(oth)g(send)g(and)f(receiv)o(e)i(ha)o(v)
o(e)e(com-)75 2080 y(pleted.)158 2130 y Fl(MPI)p 227 2130 14
2 v 15 w(EXCHANGE\(handle,)i(buffer)p 745 2130 V 14 w(handle,)h(dest,)h
(source,)f(tag,)h(context,)g(status\))12 b Fn(is)75 2207 y
Fl(MPI_INIT_EXCHANGE)o(\(hand)o(le,)19 b(buffer_handle,)g(dest,)140
2257 y(source,)i(tag,)g(context,)f(MPI_EPHEMERAL\))75 2307
y(MPI_START\(handle\))75 2357 y(MPI_WAIT\(handle,)e(status\))158
2469 y Fk(MPI)p 257 2469 15 2 v 17 w(ISENDRECV\(handle,)25
b(send)p 853 2469 V 16 w(bu\013er)p 993 2469 V 15 w(handle,)g(dest,)g(recv)p
1399 2469 V 17 w(bu\013er)p 1540 2469 V 15 w(handle,)g(source,)75
2519 y(tag,)16 b(con)o(text\))158 2604 y Fn(Non)o(blo)q(c)o(king)d
(send-receiv)o(e)j(op)q(eration.)158 2654 y Fl(MPI)p 227 2654
14 2 v 15 w(ISENDRECV\(handle,)i(send)p 722 2654 V 15 w(buffer)p
869 2654 V 15 w(handle,)i(dest,)h(recv)p 1277 2654 V 15 w(buffer)p
1424 2654 V 14 w(handle,)f(source,)h(tag,)g(context\))75 2704
y Fn(is)p eop
%%Page: 35 36
bop 75 -100 a Ff(CHAPTER)14 b(1.)27 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)717 b Fn(35)75 45 y Fl(MPI_INIT_SENDRECV)o(\(hand)o(le,)19
b(send_buffer_hand)o(le,)f(dest,)140 95 y(recv_buffer_handle,)g(source,)j
(tag,)g(context,)f(MPI_EPHEMERAL\))75 145 y(MPI_START\(handle\))158
271 y Fk(MPI)p 257 271 15 2 v 17 w(IEX)o(CHANGE\(handle,)15
b(bu\013er)p 882 271 V 16 w(handle,)f(dest,)h(source,)g(tag,)h(con)o(text\))
158 357 y Fn(Non)o(blo)q(c)o(king)d(exc)o(hange)h(op)q(eration.)158
407 y Fl(MPI)p 227 407 14 2 v 15 w(IEXCHANGE\(handle,)k(buffer)p
766 407 V 15 w(handle,)i(dest,)h(source,)f(tag,)h(context\))12
b Fn(is)75 498 y Fl(MPI_INIT_EXCHANGE)o(\(hand)o(le,)19 b(buffer_handle,)g
(dest,)140 548 y(source,)i(tag,)g(context,)f(MPI_EPHEMERAL\))75
597 y(MPI_START\(handle\))158 724 y Fk(MPI)p 257 724 15 2 v
17 w(SENDRECV)o(C\(handle,)10 b(send)p 853 724 V 16 w(start,)h(send)p
1088 724 V 16 w(coun)o(t,)f(send)p 1339 724 V 16 w(datat)o(yp)q(e,)h(dest,)g
(recv)p 1763 724 V 17 w(start,)75 774 y(recv)p 166 774 V 17
w(coun)o(t,)k(recv)p 416 774 V 17 w(datat)o(yp)q(e,)g(source,)g(tag,)h(con)o
(text,)e(status\))158 859 y Fn(Blo)q(c)o(king)f(send-receiv)o(e)j(with)e(con)
o(tiguous)f(bu\013ers.)158 909 y Fl(MPI)p 227 909 14 2 v 15
w(SENDRECVC\(handle,)18 b(send)p 722 909 V 15 w(start,)j(send)p
978 909 V 15 w(count,)f(send)p 1233 909 V 15 w(datatype,)g(dest,)h(recv)p
1685 909 V 15 w(start,)f(recv)p 1940 909 V 15 w(count,)75 959
y(recv)p 166 959 V 15 w(datatype,)g(source,)g(tag,)h(context,)f(status\))13
b Fn(is)75 1050 y Fl(MPI_CREATE_BUFFER)o(\(send)o(_buff)o(er_ha)o(ndle,)18
b(MPI_EPHEMERAL\))75 1100 y(MPI_CREATE_BUFFER)o(\(recv)o(_buff)o(er_ha)o
(ndle,)g(MPI_EPHEMERAL\))75 1150 y(MPI_APPEND_CONTIG)o(UOUS\()o(send_)o
(buffe)o(r_han)o(dle,)g(send_start,)i(send_count,)184 1200
y(send_datatype\))75 1250 y(MPI_APPEND_CONTIG)o(UOUS\()o(recv_)o(buffe)o
(r_han)o(dle,)e(recv_start,)i(recv_count,)184 1299 y(recv_datatype\))75
1349 y(MPI_COMMIT\(send_b)o(uffer)o(_hand)o(le\))75 1399 y
(MPI_COMMIT\(recv_b)o(uffer)o(_hand)o(le\))75 1449 y(MPI_INIT_SENDRECV)o
(\(hand)o(le,)f(send_buffer_hand)o(le,)f(dest,)140 1499 y
(recv_buffer_handle,)g(source,)j(tag,)g(context,)f(MPI_EPHEMERAL\))75
1548 y(MPI_START\(handle\))75 1598 y(MPI_WAIT\(handle,)e(status\))158
1725 y Fk(MPI)p 257 1725 15 2 v 17 w(EX)o(CHANGEC\(handle,)e(start,)f(coun)o
(t,)f(datat)o(yp)q(e,)h(dest,)g(source,)g(tag,)h(con)o(text\))158
1810 y Fn(Blo)q(c)o(king)d(exc)o(hange)i(with)e(con)o(tiguous)h(bu\013er)158
1860 y Fl(MPI)p 227 1860 14 2 v 15 w(EXCHANGEC\(handle,)k(start,)j(count,)f
(datatype,)g(dest,)h(source,)g(tag,)f(context\))13 b Fn(is)75
1951 y Fl(MPI_CREATE_BUFFER)o(\(buff)o(er_ha)o(ndle,)18 b(MPI_EPHEMERAL\))75
2001 y(MPI_APPEND_CONTIG)o(UOUS\()o(buffe)o(r_han)o(dle,)g(start,)j(count,)f
(datatype\))75 2051 y(MPI_COMMIT\(buffer)o(_hand)o(le\))75
2101 y(MPI_INIT_EXCHANGE)o(\(hand)o(le,)f(buffer_handle,)g(dest,)140
2151 y(source,)i(tag,)g(context,)f(MPI_EPHEMERAL\))75 2200
y(MPI_START\(handle\))75 2250 y(MPI_WAIT\(handle,)e(status\))158
2377 y Fk(MPI)p 257 2377 15 2 v 17 w(ISENDRECV)o(C\(handle,)11
b(send)p 872 2377 V 15 w(start,)g(send)p 1106 2377 V 16 w(coun)o(t,)f(send)p
1357 2377 V 16 w(datat)o(yp)q(e,)h(dest,)g(recv)p 1781 2377
V 17 w(start,)75 2427 y(recv)p 166 2427 V 17 w(coun)o(t,)k(recv)p
416 2427 V 17 w(datat)o(yp)q(e,)g(source,)g(tag,)h(con)o(text\))158
2512 y Fn(Non)o(blo)q(c)o(king)d(send-receiv)o(e)j(with)d(con)o(tiguous)h
(bu\013ers.)158 2562 y Fl(MPI)p 227 2562 14 2 v 15 w(ISENDRECVC\(handle,)k
(send)p 744 2562 V 15 w(start,)j(send)p 1000 2562 V 14 w(count,)g(send)p
1255 2562 V 15 w(datatype,)f(dest,)h(recv)p 1707 2562 V 14
w(start,)g(recv)p 1962 2562 V 15 w(count,)75 2612 y(recv)p
166 2612 V 15 w(datatype,)f(source,)g(tag,)h(context\))12 b
Fn(is)p eop
%%Page: 36 37
bop 75 -100 a Ff(CHAPTER)14 b(1.)32 b(POINT)14 b(TO)g(POINT)h(COMMUNICA)m
(TION)712 b Fn(36)75 45 y Fl(MPI_CREATE_BUFFER)o(\(send)o(_buff)o(er_ha)o
(ndle,)18 b(MPI_EPHEMERAL\))75 95 y(MPI_CREATE_BUFFER)o(\(recv)o(_buff)o
(er_ha)o(ndle,)g(MPI_EPHEMERAL\))75 145 y(MPI_APPEND_CONTIG)o(UOUS\()o(send_)
o(buffe)o(r_han)o(dle,)g(send_start,)i(send_count,)184 195
y(send_datatype\))75 244 y(MPI_APPEND_CONTIG)o(UOUS\()o(recv_)o(buffe)o
(r_han)o(dle,)e(recv_start,)i(recv_count,)184 294 y(recv_datatype\))75
344 y(MPI_COMMIT\(send_b)o(uffer)o(_hand)o(le\))75 394 y(MPI_COMMIT\(recv_b)o
(uffer)o(_hand)o(le\))75 444 y(MPI_INIT_SENDRECV)o(\(hand)o(le,)f
(send_buffer_hand)o(le,)f(dest,)140 493 y(recv_buffer_handle,)g(source,)j
(tag,)g(context,)f(MPI_EPHEMERAL\))75 543 y(MPI_START\(handle\))158
670 y Fk(MPI)p 257 670 15 2 v 17 w(IEX)o(CHANGEC\(handle,)c(start,)f(coun)o
(t,)f(datat)o(yp)q(e,)h(dest,)g(source,)g(tag,)h(con)o(text\))158
755 y Fn(Non)o(blo)q(c)o(king)d(exc)o(hange)h(with)g(con)o(tiguous)f
(bu\013er)158 805 y Fl(MPI)p 227 805 14 2 v 15 w(IEXCHANGEC\(handle,)18
b(start,)j(count,)f(datatype,)g(dest,)h(source,)f(tag,)h(context\))12
b Fn(is)75 896 y Fl(MPI_CREATE_BUFFER)o(\(buff)o(er_ha)o(ndle,)18
b(MPI_EPHEMERAL\))75 946 y(MPI_APPEND_CONTIG)o(UOUS\()o(buffe)o(r_han)o(dle,)
g(start,)j(count,)f(datatype\))75 996 y(MPI_INIT_EXCHANGE)o(\(hand)o(le,)f
(buffer_handle,)g(dest,)140 1046 y(source,)i(tag,)g(context,)f
(MPI_EPHEMERAL\))75 1096 y(MPI_START\(handle\))158 1265 y Fj(Discussion:)158
1311 y Fi(Can)12 b(w)o(e)g(cancel)h(a)f(send-receiv)o(e)i(or)e(exc)o(hange?)
18 b(If)11 b(y)o(es,)i(should)g(it)g(b)q(e)f(the)g(case)h(that)f(either)h(w)o
(e)e(cancel)i(b)q(oth)g(send)75 1357 y(and)g(receiv)o(e)g(or)f(neither?)18
b(This)13 b(seems)f(natural,)i(but)e(ma)o(y)g(cause)h(problems)g(\(The)f
(receiv)o(e)h(has)g(already)h(executed,)e(but)75 1402 y(the)h(send)h(is)f(h)o
(ung.)18 b(Ho)o(w)13 b(do)g(w)o(e)g(cancel?\))158 1448 y(This)h(is)f(the)g
(pream)o(ble)i(to)e(a)g(m)o(uc)o(h)g(more)g(general)i(question:)j(can)c(w)o
(e)e(cancel)j(collectiv)o(e)g(op)q(erations?)75 1668 y Fm(1.14)70
b(Null)21 b(pro)r(cesses)75 1842 y Fj(Discussion:)35 b Fi(This)14
b(section)g(has)f(not)h(b)q(een)f(review)o(ed)h(b)o(y)g(MPIF.)158
1974 y Fn(In)i(man)o(y)d(instances,)k(it)e(is)h(con)o(v)o(enien)o(t)g(to)f
(sp)q(ecify)i(a)e(\\dumm)o(y")d(source)17 b(or)f(destination)f(for)g(comm)o
(uni-)75 2024 y(cation.)27 b(This)17 b(simpli\014es)e(the)j(co)q(de)f(that)g
(is)g(needed)i(for)d(dealing)g(with)h(b)q(oundaries,)h(e.g.,)e(in)g(the)i
(case)g(of)e(a)75 2074 y(noncircular)e(shift)g(done)g(with)f(calls)h(to)g
(send-receiv)o(e.)158 2124 y(The)d(sp)q(ecial)g(v)n(alue)f
Fl(MPI)p 545 2124 V 15 w(PROCNULL)f Fn(can)i(b)q(e)g(used)h(instead)f(of)f(a)
g(rank)h(wherev)o(er)h(a)e(source)i(or)f(a)f(destination)75
2173 y(parameter)k(is)g(required)h(in)f(a)g(call.)k(A)c(comm)o(unication)d
(with)j(pro)q(cess)i Fl(MPI)p 1300 2173 V 15 w(PROCNULL)c Fn(has)j(no)f
(e\013ect:)20 b(a)14 b(send)75 2223 y(to)k Fl(MPI)p 199 2223
V 15 w(PROCNULL)e Fn(succeeds)k(and)d(returns)j(asap.)29 b(A)18
b(receiv)o(e)h(from)d Fl(MPI)p 1287 2223 V 15 w(PROCNULL)g
Fn(succeeds)k(and)d(returns)75 2273 y(asap)d(with)f(no)h(mo)q(di\014cations)e
(to)i(the)g(receiv)o(e)h(bu\013er.)158 2401 y Fj(Discussion:)158
2447 y Fi(Need)h(to)g(decide)h(what)f(is)h(returned)g(in)g(the)f(status)h(ob)
r(ject:)23 b(I)16 b(suggest)g Fd(source)i(=)h(MPI)p 1505 2447
12 2 v 13 w(PROCNULL)p Fi(,)12 b Fd(tag=0)i Fi(and)75 2493
y Fd(count=0)p Fi(.)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF