From: "Marc Snir" <[email-masked]>
Date: Mon, 2 Aug 93 15:30:41 EDT

%!PS-Adobe-2.0
%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
%%Title: PT2PT-V6.DVI.*
%%Pages: 40 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 1 df<EAFFFEA20F027D8516>0
D E /Fb 1 106 df<1204A21200A4123812FC12D81218A212321233123E123C080F7E8E0B>105
D E /Fc 2 81 df<1470EB01F0EB03E0EB0780EB0F00131E5B5BA25BB3AD485AA25B1203485A90
C7FC120E123C12705A1270123C120E7E7F6C7E12017FA26C7EB3AD1378A27F7F7FEB0780EB03E0
EB01F0EB007014637B811F>26 D<B712E016F00078C7121F007C14036CEC00F86C15386C151C6D
140C6C7E000315066D14006C7E6C7E1378137C7F131E131F6D7E6D7E1303A26D5A130391C8FC13
065B5B133813305B4914064848140C120390C8121C000615384815F84814010038EC1FF0003FB6
FC5AB712E0272A7E7F2C>80 D E /Fd 1 1 df<B512C0A212027D8618>0
D E /Fe 2 111 df<123CA2120C5AA31360EA31F0EA3330EA3E70EA3C60EA7F00EA6380EA6198
13B0EAC1F0EAC0E00D117E9010>107 D<EA38F8EA7DFCEACF0C12CE120CEA1C181218EB1980EB
3300EA303F131C110B7F8A13>110 D E /Ff 2 50 df<121FEA3F80EA60C0EA4040EAC060A8EA
60C0A2EA3F80EA1F000B107F8F0F>48 D<1218127812F812981218AAEAFF80A209107E8F0F>I
E /Fg 4 111 df<126012F0A2126004047D830B>58 D<126012F0A212701230A31260A212C012
40040B7D830B>I<127EA2120EA25AA45AA2EA3BC0EA3FE0EA7C701278EA7030A2EAE070A4EAC0
E013C012E1EAE380EA7F00123C0C1A7E9910>98 D<EA1C3EEA3E7F3867C380EAC7831303A2380E
0700A3130E001C1330A2131C146038380FC03818078014107F8F17>110
D E /Fh 5 116 df<120313801300C7FCA4121C123E126612C612CC120CA25AEA19801231EA33
00123F121C091480930C>105 D<1360137013601300A4EA0380EA07C0EA0CE0EA18C0A21200A2
EA0180A4EA0300A4126612EE12FC12780C1A81930E>I<EA387CEA7CFEEA6F86EACF0612CE120E
120CEA1C0C001813C01318EB1980EA301FEB0E00120D808C15>110 D<EA38E0EA7DF0EA6F30EA
CE701330EA0C00A25AA45AA20C0D808C0F>114 D<1207EA1F80EA19C0EA3180EA3000121E121F
EA0380124112E1EAC30012FE127C0A0D7E8C10>I E /Fi 3 62 df<EA0FC0EA1FE0EA3870EA70
38EA6018EAE01CA9EA6018EA7038EA3870EA1FE0EA0FC00E137F9211>48
D<1206121E12FE12EE120EADEAFFE0A20B137D9211>I<387FFFE0B512F0C8FCA6B512F06C13E0
140A7E8B19>61 D E /Fj 23 123 df<127012F8A3127005057D840C>58
D<127012F012F8A212781218A31230A2127012601240050D7D840C>I<12E01278121EEA0780EA
01E0EA0078131EEB0780EB01E0EB0078141EEC0780A2EC1E001478EB01E0EB0780011EC7FC1378
EA01E0EA0780001EC8FC127812E019187D9520>62 D<48B512804814E039003C01F0EC0078153C
151C5B151EA35BA44848133CA3153848481378157015F0EC01E039078003C0EC0780EC0F00147C
B55A14C01F1C7E9B22>68 D<001FB512F0A2383C07800038146012701260EB0F0012C0A3D8001E
1300A45BA45BA45BA4387FFF80A21C1C7F9B18>84 D<EBF180EA03FBEA0F0F121E383C07001238
1278A2EAF00EA31420EB1C60A2EA703CEBFCC0EA3FCF380F078013127F9116>97
D<123F5A120F120EA45AA4EA39E0EA3FF8EA3E38EA3C1C1278EA701EA3EAE03CA3133813781370
13E0EA71C0EA3F80EA1E000F1D7E9C12>I<EB03F01307130014E0A4EB01C0A4EBF380EA03FBEA
0F0F121E383C070012381278A2EAF00EA31420EB1C60A2EA703CEBFCC0EA3FCF380F0780141D7F
9C16>100 D<13F8EA03FEEA0F06121E123C1238EA781CEA7FF8EAFFE0EAF000A4EA7004130EEA
383CEA1FF0EA0FC00F127F9113>I<EB01E0EB07F0EB0E7814F0EB1C601400A3133C1338A23803
FFC01480380038005BA55BA5485AA5485AA30063C7FC12F712F612FC127815257E9C14>I<13E0
1201A2EA00C01300A6120EEA1F8012331263124312C3EA0700A2120EA3EA1C201360A2EA38E013
C0EA1F80EA0F000B1C7F9B0E>105 D<1307130FA213061300A613F0EA01FCEA031C1206A2120C
1200A21338A41370A413E0A4EA01C01261EAF380EAF70012FE127C1024809B11>I<EA0FC0121F
12035BA448C7FCA4EA0E07EB1F8013391363EA1CC7EA1D87381F030090C7FC487EEA39C0EA38E0
1480EA70E1A3EBE300EAE07EEA603C111D7E9C16>I<EA1F80123F12071300A4120EA45AA45AA4
5AA3127212E6A4127C1238091D7E9C0C>I<381C0F80383F3FC0386770E013C0EAC780A2EA0700
A2380E01C0A3EB0384001C138CA2EB071C1418383803F0381801E016127F9119>110
D<13FCEA03FF38078780380E03C0EA1C0112381278A2EAF003A3EB0780A2EB0F00EA701E6C5AEA
1FF0EA0FC012127F9114>I<380707C0380FCFE03819D870EBF038EA31E013C00001133CA23803
8078A31470380700F0EB80E0EB81C0EBC380380EFF00137C90C7FCA25AA4B47EA2161A819115>
I<EA01F0EA03FCEA070CEA0E1EEA1C3C1318EA1E00EA1FE0EA0FF0EA07F8EA0078EA203CEA7038
12F01330EAE0F0EA7FE0EA1F800F127E9113>115 D<13C01201A3EA0380A4EAFFF0A2EA0700A2
120EA45AA31310EA3830A2136013C0EA1F80EA0F000C1A80990F>I<000E1360381F80E0123312
63384381C012C3EA0701A2380E0380A31488EB0718A2130FEB1F303807F3F03803E1E015127F91
18>I<EA0F87381FDFC0EA38F8EA60F113E312C03800E180EBE000485AA30071134038F380C0A2
38E3818038C7C300EA7CFEEA387C12127E9118>120 D<000E1360381F80E012331263384381C0
12C3EA0701A2380E0380A4EB0700A25B5BEA07FEEA03EEEA000E5B1230EA78381330EA70E0EA3F
C06CC7FC131A7F9114>I<3801E180EA07F1380FFF00EA0C1EEA180CC65A5B5B5B485A48C7FCEA
0601485A1218EA3F0EEA7FFCEA61F8EAC0F011127F9113>I E /Fk 2 4
df<B512C0A212027D871A>0 D<12041206A2EAC660EAF7E0EA3F80EA1F00EA3F80EAF7E0EAC660
EA0600A212040B0D7E8D11>3 D E /Fl 18 118 df<B51280A300F0C7FCAAB5FCA300F0C7FCAD
111D7C9C18>70 D<133F3801FFE0487F3807C0F8380F807C381E001E003E131F003C7F48EB0780
A348EB03C0A86C130700781480A2007C130F003C1400003E5B6C133E6C6C5A6C6C5A6CB45A6C5B
D8003FC7FC1A1F7E9D1F>79 D<EAFFFC13FF148038F007C0EB03E01301EB00F0A5EB01E01303EB
07C0B51280140013FC00F0C7FCAC141D7C9C1B>I<EAFFF813FF148038F007C0EB01E0130014F0
A414E01301EB07C0B51280140013F8EAF03C131C131E7FA2EB0780A2EB03C0A2EB01E0EB00F0A2
1478151D7C9C1B>82 D<EA0FC0EA3FF0EA7FF8EA7038EA401C1200A213FC120F123FEA781C12E0
A3EAF07CEA7FFC13DCEA3F1C0E127E9114>97 D<EA07E0EA0FF8EA1FFCEA3C1CEA700413005AA6
12701304EA3C1CEA1FFCEA0FF8EA07E00E127E9112>99 D<130EABEA0F8EEA1FEEEA3FFEEA7C3E
EA700EA212E0A612F0EA701EEA7C3EEA3FFEEA1FEEEA0F8E0F1D7E9C15>I<EA07C0EA1FE0EA3F
F0EA7878EA7018EA601CEAFFFCA3EAE000A312701304EA3C1CEA3FFCEA1FF8EA07E00E127E9112
>I<3803C3C0EA0FFF5A381C3800487EA56C5AEA1FF85BEA3BC00038C7FCA2EA1FFC13FF481380
EA700738E001C0A3EAF003387C0F80383FFF006C5AEA07F8121B7F9115>103
D<12F0A41200A71270B2041D7E9C0A>105 D<12E0B3AB031D7D9C0A>108
D<38E3F03F39EFF8FF80D8FFFD13C039F81F81E038F00F00EAE00EAD1B127D9124>I<EAE3E0EA
EFF0EAFFF8EAF83CEAF01C12E0AD0E127D9115>I<EA03F0EA0FFC487EEA3C0F38780780EA7003
38E001C0A5EAF00300701380EA7807383C0F00EA1FFE6C5AEA03F012127F9115>I<EAE38012E7
12EFEAFC005A5AA25AAB09127D910E>114 D<EA1FC0EA3FF0127FEAF030EAE000A27E127FEA3F
C0EA1FE0EA00F01338A21280EAF078EAFFF0EA7FE0EA1FC00D127F9110>I<121CA6EAFFE0A3EA
1C00AB1320EA1FF0120FEA07C00C187F970F>I<EAE01CAE137CEAFFFCEA7FDCEA3F1C0E127D91
15>I E /Fm 49 122 df<1238127C127EA2123E121EA2127C12F81260070A7A8414>44
D<127012F8A312700505798414>46 D<EA0FC0EA3FF0EA7FF8EAF07C131EA2130E12601200131E
131C133C137813F0EA01E0EA03C0EA0780EA1F00EA3C0E1278EAFFFEA30F177E9614>50
D<13F8120113B81203EA0738A2120F120E121C123C1238127812F0B51280A338003800A43803FF
80A311177F9614>52 D<127012F8A312701200A6127012F8A312700510798F14>58
D<B51280A3C8FCA3B51280A311097F8F14>61 D<EA01C0487EA21360A2EA0770A4EA0630EA0E38
A5EA1FFCA3EA1C1CEA3C1E38FE3F80A311177F9614>65 D<EAFFF813FE7FEA1C0FEB0380A4EB07
00133FEA1FFEA27FEA1C07EB0380A41307EB0F00B5FC5B5B1117809614>I<EA03C6EA0FFE121F
EA3E3EEA3C1EEA780E127012F0EAE000A7EAF00E12701278EA3C1EEA3E3CEA1FF8EA0FF0EA03C0
0F177E9614>I<EAFFE013F87FEA383E131E7F7FA2EB0380A7130714005B131E133EEAFFFC5B13
E011177F9614>I<B51280A3EA1C03A490C7FC1338A2EA1FF8A3EA1C38A290C7FCEB01C0A4B5FC
A31217809614>I<B51280A3EA1C03A490C7FC1338A2EA1FF8A3EA1C38A290C7FCA5B47EA31117
7F9614>I<EA03C6EA0FFE121FEA3E3EEA3C1EEA780E127012F048C7FCA4EB7F80A338F00E0012
70EA781E123CEA3E3EEA1FFE120FEA03CE11177F9614>I<38FE3F80A338380E00A7EA3FFEA3EA
380EA738FE3F80A311177F9614>I<EAFFFEA3EA0380B1EAFFFEA30F177E9614>I<EAFFC0A3001C
C7FCADEB0380A4B5FCA311177F9614>76 D<38FE0FE0A3383B1B80A413BBA2EA39B3A313F3EA38
E3A21303A538FE0FE0A31317809614>I<38FE3F80A3383B0E00A4138E1239A213CEA31238A213
EE136EA4EAFE3EA311177F9614>I<EA1FF0EA7FFCA2EA701CEAF01EEAE00EADEAF01EEA783CEA
7FFCA2EA1FF00F177E9614>I<EAFFF813FE7FEA1C0FEB07801303A41307EB0F00EA1FFF5B13F8
001CC7FCA6B47EA31117809614>I<EAFFE07F7FEA383C7F130EA3131E5BEA3FF85B7FEA383C13
1CA41480EB1DC0EAFE1F130FEB070012177F9614>82 D<EA0FCCEA3FFC127FEAF87CEAF03CEAE0
1CA2EAF000A2127EEA3FE0EA0FF8EA01FCEA003C131E130E12E0A2EAF01EEAF83CEAFFFC13F8EA
C7E00F177E9614>I<B51280A3EAE1C3A43801C000ADEA0FF8A311177F9614>I<38FF8FF8A3381C
01C0AEEA1E03000E1380EA0F073807FF006C5AEA00F81517819614>I<38FE3F80A338380E00A2
6C5AA56C5AA4EA0630EA0770A3EA0360A213E0A26C5A11177F9614>I<EAFE7FA3EA1E38EA0E78
EA0F70EA07F05B12035B120112037FA2EA0770A2EA0E781338EA1C3C131C38FE3F80A311177F96
14>88 D<38FE3F80A3383C1E00EA1C1CEA1E3CEA0E38A26C5AA2EA036013E0A26C5AA7EA07F0A3
11177F9614>I<EAFFE0A3EAE000B3A5EAFFE0A30B1D799914>91 D<EAFFE0A31200B3A512FFA3
0B1D7F9914>93 D<EA1FC0EA7FF07FEA783CEA301CEA00FC120F123FEA7F1C12F012E0133CEAF0
7C387FFF80A2EA1F8F11107E8F14>97 D<12FCA3121CA413FCEA1FFE7FEB0780EA1E03001C13C0
1301A4EA1E03EB0780EA1F0FEBFF005BEA1CF81217809614>I<EA03F0EA0FFC123FEA7C3CEA78
18EAF0005AA4EAF00E1278EA7E1EEA3FFCEA0FF8EA03E00F107E8F14>I<137EA3130EA4EA07CE
EA1FFE123FEA7C3EEA781EEAF00E12E0A4EAF01EEA703EEA787E383FFFC0EA1FEFEA078F12177F
9614>I<EA07E0EA1FF8EA3FFCEA7C3CEA781EEAF00EEAFFFEA3EAE000EAF00E1278EA7E1EEA3F
FCEA0FF8EA03E00F107E8F14>I<133C13FE1201EA03DE138C1380A2EAFFFEA3EA0380AAEA7FFC
A30F177F9614>I<EA07CF381FFF805A387C7F00EA783CEA701CA2EA783CEA7C7CEA3FF8485AEA
77C00078C7FCEA3FF813FE487E38F00F80EAE0071303A2EAF00738780F00EA3FFE6C5AEA07F011
197F8F14>I<12FCA3121CA413F8EA1FFE7F130FEA1E07121CA838FF9FE0A31317809614>I<1203
EA0780A2EA0300C7FCA4EAFF80A31203AAEAFFFEA30F187D9714>I<136013F0A213601300A4EA
1FF0A3EA0070B0EA60F0EAF1E012FF1380EA3E000C207E9714>I<EAFF80A31203B1EAFFFEA30F
177E9614>108 D<EAFCF8EAFFFE7FEA1F0FEA1E07121CA838FF9FE0A31310808F14>110
D<EA07C0EA1FF0EA3FF8EA783CEA701CEAF01EEAE00EA4EAF01EEA701CEA7C7CEA3FF8EA1FF0EA
07C00F107E8F14>I<EAFCFCB47E7F381F0780EA1E03001C13C01301A4EA1E03EB0780EA1F0FEB
FF005BEA1CF890C7FCA5B47EA31218808F14>I<38FF1F80EB7FC013FF3807E080EBC0005BA290
C7FCA6EAFFFCA31210808F14>114 D<EA0FD8EA3FF812FFEAF03812E0EAF000EA7F80EA3FF0EA
07FCEA003EEAE00EA2EAF01EEAFFFC13F8EACFE00F107E8F14>I<1207A5EAFFFCA3EA0700A613
0EA3139E13FCEA03F8EA00E00F157F9414>I<EAFC3FA3EA1C07A95B381FFFE07EEA07E7131080
8F14>I<38FE7F80A3380E7800EA07705B12036C5A12037FEA0770EA0E78133838FF7F80A31110
7F8F14>120 D<38FF3F80A3381C1C00A2120E5BA212071330A2EA0370A26C5AA35BA3EA7B8012
7F90C7FC127E123C11187F8F14>I E /Fn 7 104 df<B61280A219027D8A20>0
D<127012F8A3127005057D8C0C>I<EA018013C01380A2EA6186EAF99FEA7DBEEA1FF8EA07E0A2
EA1FF8EA7DBEEAF99FEA6186EA0180A213C0138010127E9215>3 D<EA07E0EA1FF8EA3FFCEA7F
FEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E010107E9115>15 D<00C01306B36C130E0060130C00
70131C6C1338381F01F03807FFC03800FE00171A7E981C>91 D<131F137F13F0EA01E013C0ADEA
0380EA070012FE12F812FE1207EA0380EA01C0AD13E0EA00F0137F131F10297E9E15>102
D<12F8B4FCEA0F80EA03C01201ADEA00E013F0133F131F133F13F013E0EA01C0AD1203EA0F80EA
FF0012F810297E9E15>I E /Fo 36 122 df<127012F812FCA3127C120CA21218A21230127012
20060D7D850C>44 D<127812FCA4127806067D850C>46 D<127812FCA412781200A5127812FCA4
127806117D900C>58 D<1303497EA3497EA2497EA3EB33F0A2EB63F81361EBE1FC13C0A248487E
13FF487FEB003FA20006EB1F80A2000E14C039FFC0FFFCA21E1A7F9921>65
D<90381FE0209038FFF8E03803F80F3807C003381F800190C7FC123E007E1460127C12FC1500A6
1560127C127E003E14C07E90388001803907C003003803F80E3800FFFCEB1FE01B1A7E9920>67
D<B512F014FC380FC03FEC0F80EC07C0EC03E0A2EC01F0A215F8A815F0A2140315E0EC07C0EC0F
80EC3F00B512FE14F01D1A7E9922>I<B512FEA2380FC03E140E140614078013C3A291C7FC13C7
13FFA213C713C3A2EC018013C0EC0300A35C5C143EB512FEA2191A7E991D>I<B512FCA2380FC0
3C141C140C140E1406A213C31400A213C713FFA213C713C3A313C0A6EAFFFEA2171A7E991C>I<
EAFFFCA2EA0FC0B3A4EAFFFCA20E1A7F9911>73 D<EAFFFEA2EA0FC0AE140CA3141CA214381478
14F8B5FCA2161A7E991B>76 D<D8FFC0EB1FF86D133F000F1580A2D80DF0136FA2D80CF813CFA2
90387C018FA390383E030FA2EB1F06A2EB0F8CA3EB07D8A2EB03F0A2EB01E0A2D8FFC1EBFFF8EB
C0C0251A7E992A>I<39FFE00FFCA2390FF000C07FEA0DFCEA0CFE137E7F1480EB1FC0EB0FE013
07EB03F014F8EB01FCEB00FE147E143FA2141F140F14071403A238FFC00114001E1A7E9923>I<
B512E014F8380FC07E80801580A515005C147EEBFFF814E001C0C7FCA9EAFFFCA2191A7E991E>
80 D<007FB51280A238783F07007013030060130100E014C000C01300A300001400AF380FFFFC
A21A1A7E991F>84 D<EA0FF0EA1FFCEA3E3E131E131F121C1200EA07FF121FEA7E1F127C12F8A3
EA7C3F383FEFE0EA0F8713117F9015>97 D<B4FCA2121FA7133FEBFFC0EBC1F013001478147CA6
1478A214F0EBC3E0381CFFC038183F00161A7F9919>I<EA03FCEA0FFEEA1E1F123C127CEA780E
00F8C7FCA51278127C383C0180381F0300EA0FFEEA03F811117F9014>I<EB1FE0A21303A7EA03
F3EA0FFFEA1E07EA3C031278A212F8A61278123CEA3E0F380FFFFCEA03F3161A7F9919>I<EA03
F0EA0FFCEA1E1E487E487E148012F8B5FCA200F8C7FCA21278127C383C0180381F0300EA0FFEEA
03F811117F9014>I<137E48B4FC3803CF80EA078F120FEB87001380A3EAFFF0A2EA0F80ADEA7F
F0A2111A80990E>I<3807E3C0381FFFE0EA3C3C38381CC038781E00A4EA381CEA3C3CEA3FF8EA
37E00070C7FCA2EA3FFEEBFF806C13C0127F38F003E01301A3387C07C0383FFF803807FC001319
7F9016>I<B4FCA2121FA7131FEB7FC013C3EB83E0A21303AA38FFE7FCA2161A7F9919>I<121E12
3FA4121EC7FCA4127FA2121FADEAFFC0A20A1B809A0C>I<B4FCA2121FB3A4EAFFE0A20B1A8099
0C>108 D<39FF1F81F890387FE7FE391FE3EE3E903881F81FA2EB01F0AA3AFFE7FE7FE0A22311
7F9026>I<EAFF1FEB7FC0EA1FC3EB83E0A21303AA38FFE7FCA216117F9019>I<EA03F8EA0FFE38
3E0F80EA3C07387803C0A200F813E0A6007813C0EA7C07383E0F80380FFE00EA03F813117F9016
>I<EAFF3FEBFFC0381FC3F0130014F8147CA6147814F814F0EBC3E0EBFFC0EB3F0090C7FCA5EA
FFE0A216187F9019>I<EAFE7813FCEA1FBE133EA2131C1300A9EAFFE0A20F117F9012>114
D<EA1FB0EA3FF0EA7070EAE030A2EAF800EAFFC0EA7FF0EA3FF8EA1FFC1201EAC03C131C12E0EA
F038EAFFF0EACFC00E117F9011>I<1203A35AA25A123FEAFFF0A2EA1F00A81318A5EA0FF0EA03
E00D187F9711>I<38FF1FE0A2EA1F03AB1307130F380FFFFCEA03F316117F9019>I<38FF83F0A2
381F0180A21383000F130013C7EA07C6A2EA03ECA2EA01F8A36C5AA2136014117F9017>I<39FF
9FF1F8A2393F07C0E0001F14C014E0EB8DE1000F148014F13907D8F30014FBEBF8FF3803F07EA2
3801E03CA33800C0181D117F9020>I<38FF8FF0A2381F0700EA0F8EEA07CC13D8EA03F86C5A6C
7EA2487EEA033E487E120E381C0F8038FE1FF0A214117F9017>I<38FF83F0A2381F0180A21383
000F130013C7EA07C6A2EA03ECA2EA01F8A36C5AA21360A2EA70C012F8EAC18012C3007FC7FC12
3C14187F9017>I E /Fp 18 122 df<EAFFC0A30A037D890F>45 D<EA03CCEA07FCEA0E7CEA18
3CEA383812301270A2EAE070A3137113E3A212E1EA63E6EA7E7CEA3C3810127B9115>97
D<123F5A120F120EA45AA4EA39C0EA3FE0EA3E70EA3830EA78381270A3EAE070A3136013E013C0
12E1EA6380EA7F00123C0D1D7B9C13>I<EA01E0EA07F8EA0E18121C123812701370EA7FE0EAFF
80EAE000A41310EA6038EA70F0EA3FC0EA1F000D127B9113>101 D<EB03C0EB07E0EB0CF0EB1D
E0EB1CC014005BA53803FF805A38007000A45BA5485AA5485AA448C7FC126712F612FE5A127814
25819C0D>I<EB798013FFEA01CFEA0307000713001206120EA2EA1C0EA45BA2133CEA0C7CEA0F
F8EA07B8EA0038A25B1260EAF0E012F1EAFF806CC7FC111A7E9113>I<13C0EA01E013C01380C7
FCA6120E123FEA33801263EAC700A21207120EA35A1340EA38C0A3EA3980EA3F00121E0B1C7D9B
0D>105 D<EA0FC0121F12031380A4EA0700A4EA0E0E131F13331367EA1CCFEA1D8FEA1F061300
EA3F80EA39C0EA38E013E1EA70E3A313E6EAE07CEA6038101D7D9C13>107
D<EA1F80123F12071300A4120EA45AA45AA45AA3127212E6A4127C1238091D7C9C0B>I<391E1F
07C0393F3F8FE0396761D8703863C1F038C781E0A2380701C0A2390E0380E0A3EC81C2391C0701
C6A2EC038CA239380E01F839180600F01F127D9122>I<EA1E1EEA3F7F3867E380EA63C3EAC783
13031207A2380E0700A3EB0E10001C1330A2EB1C60A238380FC03818078014127D9117>I<EA01
E0EA07F8EA0E1C121CEA380CEA300E1270A2EAE01CA31338A213701360EA71C0EA3F80EA1E000F
127B9115>I<EA1E3CEA3F7EEA67C3EA6387EAC78F130FEA07061300120EA45AA45A121810127D
9112>114 D<EA01F0EA07F8EA0E18133CEA1C781330EA1E00EA1FC0EA0FE0EA07F01200EA2078
EA707012F0A2EAE0E0EA7FC0EA1F000E127D9111>I<13C01201A3EA0380A4EAFFE0A2EA0700A2
120EA45AA31320EA3860A213C0A2EA1F80EA0F000B1A7D990E>I<EA0F03EA1F871233EA6383A2
12C3EA0703A2EA0E06A31304130C121CEA0E181330EA07E0EA03C010127D9113>118
D<EA0F1EEA1FBFEA31E3EA61E713CF12C1EA01C613C0EA0380A3EA7381EAF703A2EAE706EACF8E
EA7DFCEA70F010127D9113>120 D<380F0180EA1F8312331263EB870012C3EA0707A2EA0E0EA4
EA0C1C121C120CEA0E3CEA0FF81203EA0038A2EA3070EA786013E0EA71C0EA3F80001EC7FC111A
7D9114>I E /Fq 46 122 df<EAFFE0A30B037F8C10>45 D<12F0A404047B830E>I<13C0120112
0712FFA212FB1203B3A7B5FCA310227CA118>49 D<EA03F0EA0FFC487EEA3C1F38380780007013
C0130300F013E0EAE001126012201200A3EB03C0A2EB0780A2EB0F00131E5B5B5B485A5B485A48
C7FC120E5A5A5AB512E0A313227EA118>I<EA01F0EA07FCEA1FFFEA3E0F38380780387003C012
20A21200A3EB0780A2EB0F00131EEA03FC5B13FEEA000FEB0780EB03C0A2EB01E0A5128038C003
C012E038700780EA3C0F381FFF00EA0FFCEA03F013237EA118>I<131FA2132FA2136F13EF13CF
1201A2EA038FA21207130F120F120E121E123CA21278A212F0B512F8A338000F00A915217FA018
>I<383FFF80A3003CC7FCA913F8EA3FFE7FEB0F80EA3E07383C03C01238380001E0A7384003C0
A212E038700780387C1F00EA3FFEEA0FFCEA03F013227EA018>I<137E48B4FC5AEA07C148C7FC
121EA25AA25AA213F8EAF3FEEAF7FF38FF0F80EAFC0738F803C0A2130100F013E0A51270A21278
EB03C01238003C1380EA1C07381F0F00EA0FFE6C5AEA01F013237EA118>I<B512E0A3EA0001EB
03C014801307EB0F00130E131E131C133C13381378A25BA25B1201A3485AA5485AA713217EA018
>I<EA01F0EA07FC487EEA1E0F383C0780A2387803C0A500381380EA3C07381E0F00EA0F1EEA07
FC6C5AEA0FFEEA1E0F383C0780387803C0A238F001E0A6387803C0A2383C0780EA3E0F381FFF00
EA07FCEA01F013237EA118>I<EA01F0EA07FC487EEA1E0F487E00381380EA780314C012F01301
14E0A6EA70031278A2EA3C07EA3E1FEA1FFDEA0FF93803E3C0EA0003A21480130714005BEA101E
EA183CEA3FF86C5AEA07C013237EA118>I<131FA2497EA2133BEB7BC013731371EBF1E0A213E0
00017FA213C000031378A2138000077FA21300487FA2EBFFFE487FA2381C000F003CEB0780A212
380078EB03C0A2127000F0EB01E0A25A1B237EA220>65 D<EAFFFCEBFF8014C038F007F01301EB
0078143CA51438147814F0EB03E0B512C0140014C038F00FE0EB01F8EB0078143C141C141EA514
3C147C14F8EB03F0B512E014C0EBFE0017237BA220>I<EB0FF0EB7FFC90B5FC3801F01F3803C0
073807800248C8FC121E123E123CA25AA35AA91278A37EA2123E121E6C1480380780013803C003
3801F00F6CB51200EB7FFCEB0FF019257DA31F>I<EAFFFEEBFFC08038F003F0EB00F8147C8014
1E80A2EC0780A3EC03C0A915801407A3EC0F005C141E5C14FCEB03F8B512E05C49C7FC1A237BA2
23>I<B512F0A300F0C7FCACB512E0A300F0C7FCAEB512F8A315237BA21D>I<00FC147E6C14FEA3
00F7EB01DEA3EB800300F3149EA2EBC007A200F1141EA2EBE00F00F0130EA2EBF01EA2EB701CEB
783CA2EB3838EB3C78A2EB1C70A2EB1EF0EB0EE0A2130FEB07C0A390C7FC1F237BA22A>77
D<00FC131E7EA312F7A2EAF380A213C012F1A213E012F013F0A21378A21338133CA2131EA2130E
130F1307A2149E1303A2EB01DEA2EB00FEA3147E17237BA222>I<EB1FC0EB7FF03801FFFC3803
F07E3807C01F390F800F80391F0007C0001E130348EB01E0A248EB00F0A30070147000F01478A9
007814F0A3007C1301003C14E0003E1303001E14C0001F1307390F800F803907C01F003803F07E
6CB45A38007FF0EB1FC01D257DA324>I<EAFFFEEBFF8014C038F003E0EB00F01478A2143CA614
78A214F0EB03E0B512C01480EBFE0000F0C7FCAF16237BA21F>I<EAFFFCEBFF8014C038F003E0
EB00F014781438143CA51438147814F0EB03E0B512C01480EBFE00EAF01E7F7F1480130314C0EB
01E0A2EB00F0A214781438143C141EA2140F18237BA21F>82 D<13FF000313C04813F0EA0F83EA
1E0048132014005AA5127C123C123FEA1FC0EA0FFC6CB4FC0001138038003FC0EB07E0EB01F013
0014F81478A5124000E013F07E38F801E0387F07C0383FFF80000F1300EA01FC15257EA31B>I<
00F0133CB3A900781378A36C13F0381E01E0EA1F87380FFFC000031300EA00FC16247BA221>85
D<EA07E0EA1FF8EA3FFCEA3C1E1230EA200F1200A3EA01FF120F123FEA7F0F127812F0A312F8EA
7C3FEA7FFF7EEA1F8F10167E9517>97 D<12F0ADEAF1F0EAF7FCB47EEAFC1F487E38F00780A2EB
03C0A8EB0780A238F80F00EAFC3EEAFFFEEAF7F8EAF3F012237CA219>I<EA01FCEA07FF481380
EA1F07EA3C0148C7FCA2127012F0A61278A214406C13C0EA1F07EA0FFF6C13803801FC0012167E
9516>I<EB03C0ADEA03F3EA0FFF5AEA3F0FEA3C07EA7803A212F0A81278A2EA3C07EA3E0FEA1F
FFEA0FFBEA03E312237EA219>I<EA03F0EA07FCEA1FFEEA3E0F383C0780EA7803A238F001C0B5
FCA300F0C7FCA312701278A26C1380EA1F07EA0FFF6C1300EA01F812167E9516>I<133F13FF5A
EA03C113801207A8EAFFF8A3EA0780B3102380A20F>I<3801F0F8EA07FF5A381F1F80381E0F00
383C0780A5381E0F00EA1F1F13FE5BEA39F00038C7FCA2123CEA3FFE381FFFC014E04813F0EA78
0138F800F8481378A4007813F0383E03E0381FFFC06C13803801FC0015217F9518>I<12F0ADEA
F1F8EAF7FCEAFFFEEAFE1EEAF80FA212F0B010237CA219>I<12F0A41200A912F0B3A404237DA2
0B>I<13F0A41300A913F0B3A91280EAE3E012FFEA7FC0EA1F000C2D83A20D>I<12F0ADEB1F80EB
3F00133E5B5BEAF1F0EAF3E0EAF7C012FFA27FA2EAFDF0EAF8F8EAF078137C7F131E131F7F1480
EB07C012237CA218>I<12F0B3B104237DA20B>I<39F0F807C039F3FE1FF0B5EA7FF839FE0FF078
00FCEBE07C39F807C03CA200F01380AF1E167C9529>I<EAF1F8EAF7FCEAFFFEEAFE1EEAF80FA2
12F0B010167C9519>I<EA01FCEA07FF481380381F07C0383C01E0387800F0A20070137000F013
78A6007813F0A2EA7C01383E03E0381F07C0380FFF806C1300EA01FC15167F9518>I<EAF1F0EA
F7FCB47EEAFC3FEAF80F38F00780A214C01303A613071480130F00F81300EAFC3EEAFFFEEAF7F8
EAF3F000F0C7FCAA12207C9519>I<EAF0E012F312F712FF130012FC5AA25AAE0B167C9511>114
D<EA07F0EA1FFEEA3FFFEA3C0FEA78031300A2127C123F13F0EA1FF8EA0FFCEA01FEEA001F130F
A2124012E0EAF81EEAFFFEEA3FFCEA0FF010167F9513>I<120FA6EAFFF8A3EA0F00AE1308131C
EA07FC13F8EA03E00E1C7F9B12>I<EAF00FB1131FEAF83FEA7FFF13EFEA1F8F10167C9519>I<38
F001E0A2387803C0A3383C0780A3001E13005BA2EA0F0E131EA2EA071C139C13BCEA03B8A213F8
6C5AA213167F9516>I<387801F0007C13E0383E03C0EA1E07000F138038078F0013DEEA03FC12
016C5A137013F8487EEA03DC139EEA078F380F0780121EEB03C0383C01E0387800F000F813F815
16809516>120 D<38F001E0A2387803C0A2127C383C0780A2121E14005B120F130EEA071E139E
EA039CA3EA019813D8EA00F85BA35BA212015BA2EA4380127F90C7FC127E13207F9516>I
E /Fr 13 86 df<1230127812F81278127005057D840C>46 D<13181370EA03F0120FEA1C7012
00A213E0A6EA01C0A6EA0380A61207EAFFF8A20D1C7C9B15>49 D<14301470A214F0801301A2EB
0378A21306147CEB0C3CA21318A21330A2497EA2EBFFFEA23801801EA23803001F801206120F39
7FC0FFF012FF1C1D7F9C1F>65 D<903807F030EB1FFC90387C0E603901F003E0EA03C038078001
EA0F00000E1300001E14C05AA25A1500A25AA5EC0180EC03001270127814066C5B001C131C000F
5B3807C0E06CB45AD8007EC7FC1C1E7C9C1E>67 D<000FB512E0A23800F003EC01C01400A33801
E060A31500EBE1E013FF485B13C113C0A215C0ECC18038078001A2EC0300A25C140E380F003EB5
12FE5C1B1C7E9B1C>69 D<380FFF80A23800F000A5485AA6485AA6485AA6120FEAFFF8A2111C7F
9B0F>73 D<D80FFCEB0FFCA20000EC1F80A2153713DE1567D8019EEB6F0015CFA2EC018F138FEC
030FD8030F131E1406A2EB078CA2149800065C14B0A2EB03E0A214C0001E147C3AFFE387FFC001
C31480261C7E9B26>77 D<390FF80FFEA23900FC01E0EC00C0A213DEA239018F0180A214811387
A2EB83C1390303C300EB01E3A3EB00F3A20006137EA2143EA3141E001E131C38FFE00C13C01F1C
7E9B1F>I<EB07F0EB3FFCEBF81E3801E0073903C00380D8070013C0481301001E14E0121C003C
13001238007814F0A348EB01E0A4EC03C0A30070EB0780007814005C6C131E5C6C5B380F83E038
03FF80C648C7FC1C1E7C9C20>I<380FFFFC14FF3900F00F80140315C01401A23801E003A31580
1407EC0F003803C03EEBFFF814E001C0C7FCA3485AA6120FEAFFF85B1A1C7E9B1C>I<EB3F0CEB
FFCC3801C1F838030078481338120EA3001E13301400A26C7E13F86CB4FC6C13806C13C038003F
E0130313011300A21260A3EB01C0127038F8038038FE0F00EACFFEEA83F8161E7E9C17>83
D<001FB512F05A383C07810038EB806012701260A2EB0F0012C0A200001400A3131EA65BA6137C
381FFFE0A21C1C7C9B1E>I<39FFF8FFE0A2390F001E00140CA4001E5BA6485BA6485BA300385B
A2383C0180D81C03C7FCEA0E0EEA07FCEA01F01B1D7A9B1F>I E /Fs 10
58 df<121EEA7F801261EAC0C0A7EA6180127FEA1E000A0D7E8C0E>48 D<121812F8A21218A812
FFA2080D7D8C0E>I<123EEA7F80EAC1C012C01200A2EA0180EA0300120EEA18C01270EAFF80A2
0A0D7E8C0E>I<123E127FEA618012011203EA1F00A2EA0180EA00C012C012C1EA7F80EA3E000A
0D7E8C0E>I<12075AA2121B1233127312E3EAFFC0A2EA0300A2EA1FC0A20A0D7E8C0E>I<EA4080
127FEA7E001260A2127F1380EA60C01200A212C1EA7F80EA3E000A0D7E8C0E>I<120FEA1F8012
31EA60005AEAFF80A2EAC0C0A31261EA3F80EA1E000A0D7E8C0E>I<1260EA7FE0A2EAC0C0EAC1
80EA03001206A35AA50B0E7E8D0E>I<121E123FEA6180A21273EA3F00A2EA6380EAC0C0A212E1
EA7F80EA3F000A0D7E8C0E>I<121E127FEAE180EAC0C0A3127FA21200EA01801263EA7F00123C
0A0D7E8C0E>I E /Ft 71 124 df<EB7C3C3801FEFE38038FCF38070F8F000E1306EB0700A5B5
12F0A2380E0700AC387F0FF0A2181A809916>11 D<137CEA01FEEA0387485A120E130690C7FCA4
B5FCA2EA0E07AC387F0FE0A2131A809915>I<137F485AEA038FEA070FEA0E07A6B5FCA2EA0E07
AC387F9FE0A2131A809915>I<90383E0F803901FF7FC0390383F0E0380707C1000E1381903803
80C01500A4B612E0A2380E0380AC397F8FE3FCA21E1A809920>I<EA60C0EAF1E0EAF9F01278EA
1830A3EA3060EA70E0EAE1C0EA40800C0B7F9913>34 D<126012F012F812781218A31230127012
E01240050B7D990B>39 D<13C0EA0180EA03001206120E120C5A1238A212301270A21260A212E0
AA1260A21270A212301238A212187E120E12067EEA0180EA00C00A267E9B0F>I<12C012607E7E
121C120C7E1207A27E1380A21201A213C0AA1380A21203A213005AA212065A121C12185A5A5A0A
267E9B0F>I<126012F0A212701230A31260A212C01240040B7D830B>44
D<EAFFC0A30A0380880D>I<126012F0A2126004047D830B>I<130CA2131C1318A213381330A213
701360A213E013C0A212011380A2120313005A1206A2120E120CA2121C1218A212381230A21270
1260A212E05AA20E257E9B13>I<EA0780EA1FE0EA3870EA3030EA7038EA6018A2EAE01CACEA60
18A2EA7038EA3030EA3870EA1FE0EA07800E1A7E9813>I<12035AB4FCA21207B3EAFFF0A20C19
7D9813>I<EA0F80EA1FE0EA30F0EA6078EAF038EAF83CA2131C1270EA003CA213381370A213E0
EA01C0EA0380EA0700EA0E0C120C1218EA3018EA7FF812FFA20E197E9813>I<EA0F80EA1FE0EA
38F0EA7070EA7878133813781230EA0070A213E0EA0FC01380EA00E013701338133CA2127012F8
A2EAF038EA6078EA70F0EA3FE0EA0F800E1A7E9813>I<1370A213F0A21201120313701206A212
0C121C12181230A2126012E0B5FCA2EA0070A5EA07FFA210197F9813>I<1260EA7FFEA213FCEA
600CEAC0181330A2EA006013C0A21201A2EA0380A41207A8EA03000F1A7E9813>55
D<126012F0A212601200A8126012F0A2126004107D8F0B>58 D<126012F0A212601200A8126012
F0A212701230A31260A212C0124004177D8F0B>I<B61280A2C9FCA6B61280A2190A7E8D1E>61
D<EA1F80EA3FE0EA7070EAE03812F0A21260EA007013E0EA01C0EA03801300A21206A5C7FCA412
06120FA212060D1A7E9912>63 D<130C131EA3133FA3497E1367A3EBC3C0A3380181E0A348B47E
A2130000061378A3487F121E39FF81FFC0A21A1B7F9A1D>65 D<B5128014E0380F00F01478143C
A5147814F0EBFFE0A2EB01F0EB0078143C141EA5143CA214F8B512F014C0171A7F991B>I<EB3F
023801FFC63803E0EE3807003E000E131E5A003C130E123800781306127012F01400A614061270
12781238003C130C121C6C13186C13303803E0E03801FFC038003F00171C7E9A1C>I<B57E14E0
380F00F014388080A2140F801580A81500A25C140E5C143C14F8B512E01480191A7F991D>I<B5
12F8A2380F007814381418141C140C1303A214005B13FFA213077FA214061300140CA3141CA214
78B512F8A2171A7F991A>I<B512F0A2EA0F001470143014381418A213061400A2130E13FEA213
0E1306A390C7FCA6EAFFF8A2151A7F9919>I<EB3F023801FFC63803E0EE3807003E000E131E5A
003C130E123800781306127012F091C7FCA5903803FFC0A23970001E0012781238123C121C7E38
07803E3803E0763801FFE2D8003FC7FC1A1C7E9A1E>I<39FFF3FFC0A2390F003C00A9EBFFFCA2
EB003CAB39FFF3FFC0A21A1A7F991D>I<EAFFF0A2EA0F00B3A4EAFFF0A20C1A7F990E>I<EAFFF8
A2000FC7FCAE1430A31470A2146014E01303B5FCA2141A7F9918>76 D<39FF8001FF6D5A000F14
F0A2380DE006A3380CF00CA3EB7818A3EB3C30A3EB1E60A3EB0FC0A3EB0780121E39FFC78FFFEB
C30F201A7F9923>I<B4EBFFC07F000FEB1E00EBC00CEA0DE0A2EA0CF013F81378133C133E131E
130FA2EB078CEB03CCA2EB01ECEB00FCA2147CA2143C001E131CEAFFC0140C1A1A7F991D>I<13
7F3801FFC03807C1F0380F0078001E7F001C131C487F0078130FA200707F00F01480A80078EB0F
00A36C131E001C131C001E133C6C5B3807C1F03801FFC06C6CC7FC191C7E9A1E>I<B5128014E0
380F00F014781438143CA51438147814F0EBFFE0148090C7FCA9EAFFF0A2161A7F991A>I<EAFF
FEEBFFC0380F01E06D7E14701478A4147014F0495AEBFFC05CEB03C06D7E6D7EA615C0A238FFF0
78EC3F80C7EA0F001A1B7F991C>82 D<EA07C2EA1FF6EA383EEA701EEA600E12E01306A3EAF000
1278EA7F80EA3FF0EA1FF8EA0FFCEA01FEEA001E130F130712C0A312E01306EAF00EEAFC1CEACF
F8EA83E0101C7E9A15>I<007FB5FCA238781E0F00601303A200E0148000C01301A3000090C7FC
AF3803FFF0A2191A7F991C>I<39FFF0FFC0A2390F001E00140CB17E6D5A12036D5A3801E0E038
007FC0011FC7FC1A1B7F991D>I<3AFFC7FF1FF0A23A1E00F803C091387801806CEC0300A214FC
5DD807801306EB819EA2D803C15B13C3140F01E3131C000114189038E60798A2D800F613B001FE
13F0EBFC03017C5BA2EB7801A201385BEB3000241B7F9927>87 D<38FFE1FFA2380F80783807C0
60000313E06D5A3801E180EA00F301FBC7FC137F137E133E131E131F5BEB7780EB67C013E3EBC3
E0380181F0EA0380497E00061378000F7F39FFC1FFC0A21A1A7F991D>I<39FFE01FF0A2390F80
0F00000713066C6C5A13E000015BEBF038000013306D5A137CEB3CC0133F6D5AA26DC7FCA9EBFF
F0A21C1A80991D>I<EA1020EA3870EA70E0EA60C0EAC180A3EAF1E0EAF9F01278EA30600C0B7B
9913>92 D<EA3F80EAFFC0EAF0E0137012601200EA0FF0123FEA787012E0A21373A2EA70F3EA7F
FEEA3E3C10107E8F13>97 D<12FCA2121CA813F8EA1FFE130F381C0380A2EB01C0A6EB0380A238
1F0F00EA1BFEEA18F8121A7F9915>I<EA07F0EA0FFCEA3C3C1230EA7018EAE000A61270EA380C
EA3C18EA0FF8EA07E00E107F8F11>I<137EA2130EA8EA07CEEA1FFEEA3C1EEA700EA212E0A612
70131EEA3C3E381FFFC0EA07CF121A7F9915>I<EA07C0EA1FF0EA3838EA7018131CEAFFFCA2EA
E000A41270EA300CEA3C18EA0FF0EA07E00E107F8F11>I<13F8EA01FCEA03BCEA073CEA0E1813
00A5EAFFC0A2EA0E00ACEA7FE0A20E1A80990C>I<130EEA079FEA1FF7EA3877EA7038A5EA3870
EA3FE0EA7780EA7000A2EA3FF013FC13FEEA700FEAE007A3EA700EEA781EEA1FF8EA07E010197F
9013>I<12FCA2121CA813F8EA1FFC131EEA1E0E121CAA38FF9FC0A2121A7F9915>I<1218123CA2
1218C7FCA612FCA2121CACEAFF80A2091A80990A>I<13C0EA01E0A2EA00C01300A6EA07E0A212
00B0126012F0EAF1C0EA7F80EA3E000B2183990C>I<12FCA2121CA8EB7F80A2EB3C0013305B5B
121DEA1FE0121EEA1C70137813387F131E38FF3FC0A2121A7F9914>I<12FCA2121CB3A4EAFF80
A2091A80990A>I<38FCFC3F39FDFE7F80391F0FC3C0381E0781001C1301AA39FF9FE7F8A21D10
7F8F20>I<EAFCF8B47EEA1F1EEA1E0E121CAA38FF9FC0A212107F8F15>I<EA07E0EA1FF8EA381C
EA700EEA6006EAE007A6EA700EA2EA3C3CEA1FF8EA07E010107F8F13>I<EAFCF8EAFFFEEA1F0F
381C07801303EB01C0A6EB03801307381F0F0013FEEA1CF890C7FCA5B47EA212177F8F15>I<EA
07C6EA1FF6EA3C3EEA781EEA700E12E0A61270EA781EEA3C3EEA1FEEEA07CEEA000EA5EB7FC0A2
12177F8F14>I<EAFDE0EAFFF0EA1F70EA1E20EA1C00AAEAFFC0A20C107F8F0F>I<EA1F20EA7FE0
1270EAE060A2EAF000127FEA3FC0EA1FE0EA01F0EAC070A212E0EAF0E0EAFFC0EA8F800C107F8F
0F>I<120CA4121CA2123CEAFFC0A2EA1C00A71360A5EA0FC0EA07800B177F960F>I<EAFC7EA2EA
1C0EAA131E133E380FFFC0EA07CF12107F8F15>I<38FF3F80A2381C0E00130CA26C5AA21338EA
0730A213F06C5AA26C5AA311107F8F14>I<39FF3F9F80A239381E0E00381C3E0C13361337000E
5B13631498000713B013C114F0A2380380E0A319107F8F1C>I<387F1FC0A2380E1E00EA071CEA
03B813B0EA01E012007F1201EA03B8EA071C1206EA0E0E38FF1FE0A21310808F14>I<38FF3F80
A2381C0E00130CA26C5AA21338EA0730A213F06C5AA26C5AA35BA2126100F3C7FC12C712FE1278
11177F8F14>I<EA7FF8A2EA7070EA60E0126113C0EA63801207EA0F18120E121CEA3C38EA3830
EA7070EAFFF0A20D107F8F11>I<B512C0A21202808A13>I E /Fu 78 126
df<126012F0AF12601200A4126012F0A212600419779816>33 D<EA03C0487E120FEA1EF0EA1C
70A3EBF7E013E7121D381FC7006C5A130E121FEA3F1EEA7F9CEAF3BCEAE3F812E1EBF1C012E0EA
F1F9EA7FFF383F9F80381F0F0013197F9816>38 D<13E01201EA07C013005A121E5A1238127812
70A312F05AA77E1270A312781238123C7E7E7E13C0EA01E012000B217A9C16>40
D<12E07E127C121C121E7EEA0780120313C01201A313E01200A7120113C0A3120313801207EA0F
00121E121C127C12F05A0B217C9C16>I<EA01C0A4EA71C738F9CF80387FFF00EA1FFCEA07F0A2
EA1FFCEA7FFF38F9CF803871C700EA01C0A411127E9516>I<EA01C0A8B51280A33801C000A811
137E9516>I<1238127C127EA2123E120E121E123C127C12F81260070B798416>I<B51280A31103
7E8D16>I<127012F8A312700505788416>I<EB01801303130714005B130E131E131C133C133813
78137013F05B12015BA212035B120790C7FC5A120E121E121C123C12381278127012F05AA21120
7E9C16>I<EA03E0EA0FF8487EEA1E3CEA380EEA780FEA7007A238E00380A8EAF00700701300A2
EA780FEA3C1E6C5AEA1FFC6C5AEA03E011197E9816>I<EA018012031207A2121F127F12FF1273
1203AEEA7FF813FC13F80E197C9816>I<EA07E0EA1FF8EA7FFEEA783FEAF00FEB07801303A212
00A2130714005B131E5B5B5BEA03E0EA078048C7FC381E0380123CEA7FFFB5FC7E11197E9816>
I<EA07E0EA1FFCEA7FFEEA781F7F7F12005BA2133EEA07FC5B7FEA001E130714801303A212F013
071400EAF81FEA7FFE6C5AEA07E011197E9816>I<137C13FC13DC1201EA039CA2EA071C120F12
0E121E123C1238127812F0B512E0A338001C00A53801FFC0A313197F9816>I<EA3FFEA30038C7
FCA7EA3FF013FC7FEA3C0FEA3007000013801303126012F01307EB0F006C5AEA7FFEEA1FF8EA07
E011197E9816>I<13F8EA03FEEA0FFFEA1F0F123E123CEA78060070C7FC12F0EAF7F8EAFFFEA2
EAF80F38F00780A2EAE00312F0A21270EA7807EB0F006C5AEA1FFEEA0FF8EA03E011197E9816>
I<12E0B51280A338E00F00131EC65A13381378137013F05B12015B12035BA3120790C7FCA7111A
7E9916>I<EA03E0EA0FF8EA3FFCEA7C1EEA780F487E12E01480A21303EAF007A2EA780FEA3FFF
A2EA0FF3EA00071400EA300FEA780E131E137CEA7FF8EA3FE0EA0F8011197E9816>57
D<127012F8A312701200A8127012F8A312700512789116>I<1238127CA312381200A81238127C
A3123C121C123C123812F812F012600618799116>I<EB03801307131FEB3E0013FCEA03F0485A
EA1F80003EC7FC12FC12F012FC123E6C7EEA07E06C7EEA00FC133EEB1F801307130311157E9616
>I<EA7FFFB51280A2C8FCA5B51280A26C1300110B7E9116>I<13E0487EA213B0A2EA03B8A31318
EA071CA5EA0E0EA2EA0FFEA2487EEA1C07A3387F1FC000FF13E0007F13C013197F9816>65
D<EA7FF8EAFFFE6C7EEA1C0FEB07801303A313071400EA1FFF5BA2EA1C1FEB038014C01301A413
03EB0780EA7FFFB51200EA7FFC12197F9816>I<3801F180EA07FF5AEA1F0FEA3C071278130312
7000F0C7FC5AA77E387003801278A2EA3C07381F0F00EA0FFE6C5AEA01F011197E9816>I<EA7F
F8EAFFFE6C7EEA1C0FEB0780EB03C01301A214E01300A8EB01C0A21303EB0780130F387FFF0048
5AEA7FF81319809816>I<387FFFC0B5FC7EEA1C01A490C7FCA2131CA2EA1FFCA3EA1C1CA290C7
FC14E0A5EA7FFFB5FC7E13197F9816>I<B512E0A3EA1C00A41400A2131CA2EA1FFCA3EA1C1CA2
90C7FCA6B47E7F5B13197F9816>I<EA03E348B4FC121FEA3E1FEA3C0F12787F127000F0C7FC5A
A4EB3F80EB7FC0EB3F8038F007001270EA780FA2123CEA3E1F6CB4FC1207EA03E712197E9816>
I<387F1FC038FFBFE0387F1FC0381C0700A7EA1FFFA3EA1C07A9387F1FC038FFBFE0387F1FC013
197F9816>I<EAFFFEA3EA0380B3EAFFFEA30F197D9816>I<387F0FE038FF8FF0387F0FE0381C07
80EB0F00131E131C133C5B5BEA1DE07F121F7F1338EA1E3C131CEA1C1E7F7F14801303387F07E0
38FF8FF0387F07E01419809816>75 D<EAFFC0A3001CC7FCAE144014E0A4B5FCA313197F9816>
I<38FC07E0EAFE0FA2383A0B80EA3B1BA413BBA2EA39B3A413F3EA38E3A21303A538FE0FE0A313
197F9816>I<387E1FC038FF3FE0387F1FC0381D07001387A313C7A2121CA213E7A31367A21377
A21337A31317EA7F1FEAFF9FEA7F0F13197F9816>I<EA1FFC487E487EEA780F38F00780EAE003
AEEAF007A238780F00EA7FFF6C5A6C5A11197E9816>I<EA7FF8EAFFFE6C7E381C0F80130314C0
1301A313031480130F381FFF005B13F8001CC7FCA7127F487E6CC7FC12197F9816>I<EA1FFC48
7E487EEA780F38F00780EAE003AD13E312E1EAF0F738787F00EA7FFF6C5A6C5AEA001C131E130E
130F7FA2111F7E9816>I<EA7FE0EAFFF86C7EEA1C1E7F7FA45B131EEA1FFC5B7FEA1C3E130EA4
14201470A2387F0FF038FF87E0387F03C014197F9816>I<EA07E3EA1FFF127FEA781F487E487E
A290C7FC7E1278EA7F80EA1FF0EA07FCC67E130FEB07801303A212E0A2EAF00738F80F00EAFFFE
5BEAC7F011197E9816>I<387FFFE0B5FCA2EAE0E0A400001300AFEA07FC487E6C5A13197F9816>
I<387F07F038FF8FF8387F07F0381C01C0B0EA1E03000E1380EA0F8F3807FF006C5AEA00F81519
809816>I<38FE0FE0EAFF1FEAFE0F38380380381C0700A4EA0E0EA4EA060CEA071CA4EA031813
B8A3EA01B013F0A26C5A13197F9816>I<38FC07E0EAFE0FEAFC07387001C0A300301380EA3803
A313E3EA39F3A213B300191300A61313EA1B1BEA0F1EA2EA0E0E13197F9816>I<387F1F80133F
131F380E1E00131CEA073C1338EA03B813F012015B120012017F120313B81207131CA2EA0E0EA2
487E387F1FC000FF13E0007F13C013197F9816>I<38FE0FE0EAFF1FEAFE0F381C0700A2EA0E0E
A26C5AA3EA03B8A2EA01F0A26C5AA8EA03F8487E6C5A13197F9816>I<387FFF80B5FCA238E007
005B131E131CEA003C5B137013F0485A5B1203485A90C7FC5A381E0380121C123C12781270B5FC
A311197E9816>I<EAFFF0A3EAE000B3A8EAFFF0A30C20789C16>I<EAFFF0A3EA0070B3A8EAFFF0
A30C207F9C16>93 D<B51280A311037E7E16>95 D<EA1FE0EA7FF87FEA783CEA301EEA000E133E
EA07FE123FEA7FCEEAF80E12E0A2EAF01EEAF83E387FFFE0EA3FF7EA0FC313127E9116>97
D<127E12FE127E120EA4133EEBFF80000F13C0EB83E01301EB00F0120E1470A4000F13F014E013
81EB83C013FF000E1300EA067C1419809816>I<EA03F8EA0FFE121FEA3C1EEA780CEA700012F0
5AA47EEA70071278EA3E0FEA1FFEEA0FFCEA03F010127D9116>I<133F5B7F1307A4EA03E7EA0F
FF123FEA3C1F487E1270EAF00712E0A46C5AA2EA781FEA7C3F383FFFE0381FF7F03807C7E01419
7F9816>I<EA07E0EA0FF8EA1FFCEA3C3EEA780EEA700FEAF007B5FCA3EAE0007EEA70071278EA
3E1FEA1FFEEA0FFCEA03F010127D9116>I<131FEB7F8013FFEA01E7EBC30013C0A2EA7FFFB5FC
A2EA01C0ACEA3FFE487E6C5A11197F9816>I<3803E3C0380FFFE05A381E3CC0383C1E00EA380E
A3EA3C1E6C5AEA1FFC485AEA3BE00038C7FC123CEA1FFC48B4FC4813C0EA780338F001E0EAE000
A3EAF001387C07C0383FFF80380FFE00EA03F8131C7F9116>I<127E12FE127E120EA4137CEA0F
FF148013871303A2120EA9387FC7F038FFE7F8387FC7F01519809816>I<EA0180EA03C0A2EA01
80C7FCA4EA7FC0A31201ACEA7FFFB5FC7E101A7D9916>I<13301378A213301300A4EA1FF8A3EA
0038B3EA6078EAF0F0EAFFE0EA7FC0EA3F800D237E9916>I<127E12FE127E120EA4EB7FE0A3EB
0F00131E5B5B5BEA0FF8A213BC131EEA0E0E130FEB0780387F87F0EAFFCFEA7F871419809816>
I<EAFFC0A31201B3B51280A311197E9816>I<38FBC78038FFEFC0EBFFE0EA3E7CEA3C78EA3870
AA38FE7CF8A31512809116>I<EA7E7CB5FC6C1380EA0F871303A2120EA9387FC7F038FFE7F838
7FC7F01512809116>I<EA03E0EA0FF8487EEA3C1E487EEA700738E00380A5EAF00700701300EA
780FEA3C1EEA1FFC6C5AEA03E011127E9116>I<EA7E3E38FEFF80007F13C0380F83E01301EB00
F0120E1470A4000F13F014E01381EB83C013FF000E1300137C90C7FCA6EA7FC0487E6C5A141B80
9116>I<38FF0F80EB3FE013FFEA07F1EBE0C0EBC0005BA290C7FCA7EAFFFCA313127F9116>114
D<EA0FECEA3FFC127FEAF03CEAE01CA2EAF000EA7F80EA1FF0EA07FCEA003EEAE00EA212F0EAF8
1EEAFFFC13F8EAC7E00F127D9116>I<12035AA4EA7FFFB5FCA20007C7FCA75BEB0380A2130713
873803FF005BEA00F811177F9616>I<387E1F80EAFE3FEA7E1FEA0E03AA1307EA0F0FEBFFF06C
13F83803F3F01512809116>I<387F1FC000FF13E0007F13C0381C0700EA1E0FEA0E0EA36C5AA4
EA03B8A3EA01F0A26C5A13127F9116>I<38FF1FE013BF131F38380380A413E33819F300A213B3
EA1DB7A4EA0F1EA313127F9116>I<387F1FC0133F131F380F1C00EA073CEA03B813F012016C5A
12017FEA03B8EA073C131CEA0E0E387F1FC038FF3FE0387F1FC013127F9116>I<387F1FC038FF
9FE0387F1FC0381C0700120E130EA212075BA2EA039CA21398EA01B8A2EA00F0A35BA3485A1279
127BEA7F806CC7FC123C131B7F9116>I<383FFFC05AA238700780EB0F00131EC65A13F8485A48
5A485A48C7FC381E01C0123C1278B5FCA312127F9116>I<EB1F80137FEA01FFEBE0005BA91203
EA7F8048C7FCA26C7EEA03C01201A97FEBFF80EA007F131F11207E9C16>I<12FCB4FC13C01203
1201A97F6CB4FCEB7F80A2EBFF00EA01E05BA9120312FF90C7FC12FC11207E9C16>125
D E /Fv 30 122 df<90381FE1F890B512FC3903F03F3E3807C07EEB807C000F141C1500A5B612
C0A2390F807C00AE397FE1FFC0A21F1D809C1C>11 D<EAFFE0A40B047F8A10>45
D<EA0FF0EA3FFCEA703EEAF03F12F8A3EA203EEA007C13F813F0EA01C0A21380A5C7FCA4EA0380
EA07C0EA0FE0A3EA07C0EA0380101D7D9C17>63 D<EB0380A2497EA3497EA2497E131BA2EB31F8
A2EB61FC1360EBE0FEEBC07EA248487E90B5FC481480EB001FA20006EB0FC0A2000E14E0000C13
0739FFC07FFEA21F1C7E9B24>65 D<90381FE0209038FFF8E03803F80F3807E007380FC001EA1F
8048C7FCA2007E1460A212FE1500A7007E1460A27E15C06C7E390FC001803907E003003803F80E
3800FFFCEB1FE01B1C7D9B22>67 D<B6FCA2380FC01F1407801580A21401EBC181A2EC8000A213
C313FFA213C313C1A401C0C7FCA6B5FCA2191C7E9B1E>70 D<3807F860381FFEE0EA3C07EA7801
EA700012F01460A26C130012FEEAFFE0EA7FFE6C7E1480000F13C06C13E0EA007FEB03F0130113
0012C0A214E07E38F001C0EAFC0338EFFF00EAC3FC141C7D9B1B>83 D<EA0FF8EA1FFE383E1F80
130714C0121C1200EA03FF121FEA3F87EA7E0712FCA3130FEA7E1F383FFBF8EA0FE115127F9117
>97 D<B4FCA2121FA9EB1FC0EBFFE0EBC1F81300147CA2147EA6147CA2EB80F8EBC1F0381C7FE0
38181F80171D7F9C1B>I<EA03FCEA0FFEEA1F1F123E127C130E00FCC7FCA6127C387E0180EA3E
03381F0700EA0FFEEA03F811127E9115>I<EB0FF0A21301A9EA03F1EA0FFFEA1F07EA3E01127C
A212FCA6127CA2EA3E03EA1F0F380FFDFEEA03F1171D7E9C1B>I<EA01FCEA0FFF381F0F80383E
07C0EA7C0314E012FCB5FCA200FCC7FCA3127C007E1360003E13C0EA1F81380FFF00EA01FC1312
7F9116>I<3803F0F0380FFFF8383E1F38383C0F30007C1380A4003C1300EA3E1FEA1FFCEA33F0
0030C7FC12707EEA3FFF14C06C13E04813F0387801F838F00078A3007813F0383E03E0381FFFC0
3803FE00151B7F9118>103 D<B4FCA2121FA9EB1FC0EB7FE0EBE1F0EB80F8A21300AB38FFE7FF
A2181D7F9C1B>I<121E123FA25A7EA2121EC7FCA5B4FCA2121FAEEAFFE0A20B1E7F9D0E>I<B4FC
A2121FA9EB0FF8A2EB0380EB0700130C5B137013F87F13BC133E7F7F1480EB07C0EB03E038FFC7
FCA2161D7F9C19>107 D<B4FCA2121FB3A7EAFFE0A20B1D7F9C0E>I<39FF1FC0FE90387FE3FF3A
1FE1F70F80903980FC07C0A2EB00F8AB3AFFE7FF3FF8A225127F9128>I<38FF1FC0EB7FE0381F
E1F0EB80F8A21300AB38FFE7FFA218127F911B>I<EA01FC380FFF80381F07C0383E03E0387C01
F0A200FC13F8A6007C13F0A2383E03E0381F07C0380FFF803801FC0015127F9118>I<38FF1FC0
EBFFE0381FC1F8130014FC147C147EA6147C14FCEB80F8EBC1F0EB7FE0EB1F8090C7FCA6EAFFE0
A2171A7F911B>I<3803E060380FF8E0EA1F0DEA3E07EA7E03127C12FCA6127C127EEA3E07EA3F
0FEA0FFBEA07E3EA0003A6EB1FFCA2161A7E9119>I<EAFE3E137F381ECF80EA1F8FA2EB070090
C7FCAAEAFFF0A211127F9114>I<EA1FD8EA3FF8EA7038EAE018A2EAF000EAFF80EA7FE013F0EA
1FF8EA07FCEA007CEAC01CA212E0EAF038EAFFF0EACFC00E127E9113>I<1203A35AA25AA2123F
EAFFFCA2EA1F00A9130CA4EA0F98EA07F0EA03E00E1A7F9913>I<38FF07F8A2EA1F00AC1301EA
0F03EBFEFFEA03F818127F911B>I<38FFC1FCA2381F0060EB80E0000F13C013C03807C180A238
03E300A2EA01F6A213FE6C5AA21378A2133016127F9119>I<39FF8FF8FEA2391F03E030A20183
1370000FEBF0601386D807C613C0EBCEF8EBEC790003EB7D80EBF83D0001EB3F00A2497E000013
1EEBE00EA21F127F9122>I<38FFC7FCA2381F8180EA0F833807C700EA03EEEA01FC5B1200137C
13FEEA01DFEA039F38070F80380607C0380C03E038FF07FCA216127F9119>I<38FFC1FCA2381F
0060EB80E0000F13C013C03807C180A23803E300A2EA01F6A213FE6C5AA21378A21330A25B1270
EAF8E0EAC0C0EAE380007FC7FC123E161A7F9119>I E /Fw 44 122 df<EAFFFEA40F047F8F14>
45 D<12F8A505057A8411>I<137F3801FFC0000713F0487F13C1381F007C48137E003E133E003C
131E007C131FA300787F00F81480AF00781400007C5BA36C133EA2003F137E6C6C5A380FC1F813
FF6C5B000113C06C6CC7FC19297EA71E>48 D<1318133813F8120712FFA312F81200B3AA387FFF
F0A414287CA71E>I<13FE3803FFC04813E04813F0381F03F8383C00FC0038137E12780070133E
00F0133FA20060131F1220C7FC143FA2143EA2147CA214F8EB01F0EB03E0130714C0EB0F80EB1E
005B5B5B485A485A485A48C7FC121E5A007FB5FCA418287EA71E>I<137F3801FFC0000713F048
7FEA1F81383E00FC003C137E5A0030133E1210C7127EA2147CA214FC495AEB07F0EBFFE05C8080
EB01F8EB007C147E80A2EC1F80A512400060EB3F0012F06C5B007C137E383F81FC6CB45A6C5B00
0313C0C66CC7FC19297EA71E>I<EB03F013071305130DA2131D1339A21379A213F1A2EA01E112
03A2EA07C1A2EA0F81A2EA1F01A2123E127CA212F8B61280A4390001F000AA19277EA61E>I<38
3FFFFCA4003EC7FCAA133FEBFFC0003F13E014F0EBC1F8EB80FCEB007C003E137EC7123E143FA7
12200060137E127000F813FCEA7C01383F03F8EBFFF0000F13E06C13803800FE0018287EA61E>
I<EB0FF0EB3FFC13FF5A3803F80CD807E0C7FC485A5B48C8FC121E123E123C127CA2EB3FE048B4
7E00F97F00FB7F38FF807EEB003E48133F487FA2EC0F805AA41278127CA215006C5BA26C133E6D
5A380FC1FC6CB45A6C5B6C13C06C6CC7FC19297EA71E>I<B61280A4C7120FEC1F00141E5C147C
5CA2495A13035C13075C130F5C131F91C7FC5BA2133E137EA3137C13FCA45B1201A719277EA61E
>I<137F3801FFC0000713F0487F381FC1FC383F007E003E133E007E133F007C7FA56C133EA26C
5B380FC1F86CB45A6C5BA2000F13F8381FC1FC383F007E003E133E487FA248EB0F80A6007CEB1F
00A2007E5B6C137E381FC1FC6CB45A6C5B6C5BC66CC7FC19297EA71E>I<137F3801FFC0487F00
0F7FEBC1F8381F007C123E487F141E141F5AA2801580A4141F127CA2007E133F003E137F003F13
FF381FFFEF6C13CF6C138F3903FE1F00C7FCA2141E143EA25CA25C381801F0381E07E0383FFFC0
6C5B6C48C7FCEA03F819297EA71E>I<B512E014FC14FF158039FC007FC0EC0FE0EC07F01403EC
01F8A21400A2140115F01403EC07E0140FEC7F80B6120014FC80ECFF8039FC007FE0EC0FF0EC03
F81401EC00FC157C157EA5157C15FCEC01F81407EC3FF0B612E01580ECFE0014F01F2A7BA928>
66 D<49B4FC010F13E0013F13F85BEBFF013901F800304848131048481300485A485AA248C8FC
A2127EA45AAA127EA47EA26C7EA26C7E6C7E6C6C13046C6C131C6CB413FCEB7FFF6D13F8010F13
E0010113001E2C7CAA26>I<B512F014FC14FF15C039FC003FE0EC0FF0EC03F86E7E1400157EA2
81A2ED1F80A3ED0FC0AA1680151FA3ED3F00A2157E15FE4A5A4A5AEC0FF0EC3FE0B65A92C7FC5C
14F0222A7BA92B>I<12FCB3B3A6062A7BA911>73 D<B4EDFF80A36D5B00FB15DF6D1303A3D8F9
E0EB079FA36D130F00F8151FA26D131F0178131EA2017C133E013C133C013E137CA2011E137801
1F13F8A26D13F01481A2010713E0A214C3010313C0A214E701011380A30100130014FF147EA391
C7FC292A7BA934>77 D<B46C133EA27FA2EAFBE0A2EAF9F0A27F12F8A27F137C137E133E133F7F
1480130F14C0A2EB07E0A2130314F0130114F8130014FC147C147E143EA2143F141FA2EC0FBEA2
EC07FEA21403A21F2A7BA92A>I<B512E014FC80ECFF8039FC007FC0EC0FE01407EC03F0140115
F8A715F01403EC07E0140FEC7FC0B61280ECFE005C14E000FCC8FCB11D2A7BA926>80
D<EB7FC03801FFF8000713FE487F381FC07F383F000F007E1306007C90C7FC127812F8A47EA212
7E127FEA3FE013FE381FFFC06C13F06C7F00017F38003FFEEB03FF9038007F80141FA2EC0FC014
07A6EC0F80126000F0EB1F0000FC5B38FF80FE6CB45A001F5B000713E0C613801A2C7DAA21>83
D<B712F0A4260001F8C7FCB3B3A2242A7EA929>I<00FC147CB3AE007E14F8A26C130115F0391F
8003E0EBC00F390FF03FC06CB512800001EBFE006C6C5AEB1FE01E2B7BA929>I<EA01FE380FFF
80003F13C014E0383C03F0EA3001000013F81300A5137FEA07FF121FEA3FE0EA7F0012FC5AA3EA
FC01EA7E07EA7FFF7EEA1FFCEA0FE0151B7E9A1D>97 D<12F8AF133F38F9FFC000FB13E0B512F0
130738FC01F838F800FC147CA2147E143EA7147CA36C13F8130138FF07F0EBFFE000FB13C000F9
138038F87E00172A7BA91F>I<EB7FC03801FFF0000713FC5A381FC07CEB0008003E13005AA35A
A7127CA2127E123E6C130CEBC07C380FFFFC7E000113F038007F80161B7E9A1B>I<143EAF13FC
EA03FF4813FE5AEA1FC1383F007E003E133E5AA212FC5AA77E127CA26C137E003F13FEEA1FC1EA
0FFF6C13BE6C133EEA00FC172A7EA91F>I<137E3803FF804813C04813E0381F83F0EA3F00003E
13785A14380078133CB512FCA400F8C7FCA31278127CA27E003F130C381FC07C380FFFFC7E0001
13F038007F80161B7E9A1B>I<EB1FC0137F13FF5A3803F0005B485AA9EAFFFEA4EA07C0B3A512
2A7FA912>I<9038F807803903FE7FC0000FB5FC5A903807C000383E03E0A2486C7EA66C485AA2
6C485A13FF485BD83BFEC7FCEA38F80078C8FCA27E383FFFC014F86C7F80487F387C007F48EB1F
80140FA36C131F007EEB3F00383F80FE13FF000F13F86C5BC613801A287E9A1E>I<12F8AF133F
EBFF8000FB13C0B512E0130738FE03F0EAFC01A312F8B2142A7BA91F>I<12FCA61200A9127CB3
A9062A7DA90E>I<13FCA61300A9137CB3AFEA40FCEAE1F812FF13F0EA7FE0EA0F800E3683A910>
I<12F8AFEB01F8EB03F0EB07E014C0EB0F80EB1F00133E5B5B12F9EAFBF012FF7F7FA2EAFE7E48
7E12F8EB1F80130F14C0EB07E0A2EB03F0130114F8EB00FC162A7BA91D>I<12F8B3B3A6052A7C
A90E>I<D8F83F133F9039FFC0FFC000FB01E313E0B500F713F0018313833AFE01FE01F839FC00
FC00A3485BB2251B7B9A32>I<EAF83FEBFF8000FB13C0B512E0130738FE03F0EAFC01A312F8B2
141B7B9A1F>I<137F3801FFC0000713F0487F381FC1FC383F007E003E133E487FA200787F00F8
1480A7007CEB1F00A2007E5B003E133E003F137E381FC1FC6CB45A6C5B000113C06C6CC7FC191B
7E9A1E>I<EAF83F38F9FFC000FB13E0B512F0130738FC01F838F800FCA2147C147E143EA7147C
A214FC6C13F8130338FF07F0EBFFE000FB13C000F9138038F87E0090C7FCAC17277B9A1F>I<EA
F83813F812F912FBEAFFC013005AA25AA25AB10D1B7B9A14>114 D<EA03FC381FFF804813C05A
EA7C0738F800801400A37EEA7F8013F8EA3FFE6C7E00071380C613C0EB0FE013071303A21240EA
E00738FC0FC0B5FC6C1380381FFE00EA03F8131B7E9A17>I<EA07C0A7B512C0A43807C000B114
40EBE1C03803FFE0A26C13803800FC0013227FA116>I<38F801F0B3A21303A2EAFC0FB5FCEA7F
FDEA3FF9EA1FC1141B7B9A1F>I<00F8EB0F807E007CEB1F00A2127E003E133EA26C133C147CA2
6C6C5AA36C6C5A13C1A23803E1E013E300015BA213F33800F780A3017FC7FCA3191B7F9A1C>I<
00F8EB0F807E007CEB1F00127E003E133EA27E5CA2EA0F805CEA07C05C13C1EA03E15C120113E3
EBF3C012005C137313770137C7FC133F133E131EA25BA35BA25BA2EA7FE0A25B90C8FC19277F9A
1C>121 D E /Fx 79 124 df<EB3F0F9038FFBF803903C3F3C0380703E3ECC180390E01C000A6
B512FCA2380E01C0AE387F87FCA21A1D809C18>11 D<133FEBFF803803C1C0EA0703A2380E0180
90C7FCA5B512C0A2EA0E01AE387F87F8A2151D809C17>I<EB3FC013FFEA03C3EA07031301120E
A6B5FCA2EA0E01AE387FCFF8A2151D809C17>I<90383F03F09038FFCFF83903C0FC1C390701F0
3CA2390E00E01892C7FCA5B612FCA2390E00E01CAE3A7FC7FCFF80A2211D809C23>I<EA7070EA
F8F8EAFCFCA2EA7C7CEA0C0CA3EA1818A2EA3030EA6060EA40400E0D7F9C15>34
D<127012F812FCA2127C120CA31218A2123012601240060D7D9C0C>39 D<13C0EA0180EA030012
06120E120C121C121812381230A21270A21260A212E0AC1260A21270A21230A212381218121C12
0C120E12067EEA0180EA00C00A2A7D9E10>I<12C012607E7E121C120C120E120612077EA21380
A21201A213C0AC1380A21203A21300A25A1206120E120C121C12185A5A5A0A2A7E9E10>I<EA01
8013C01380A2EA6186EAF99FEA7DBEEA1FF8EA07E0A2EA1FF8EA7DBEEAF99FEA6186EA0180A213
C0138010127E9E15>I<1306ADB612E0A2D80006C7FCAD1B1C7E9720>I<127012F012F8A2127812
18A31230A2127012601240050D7D840C>I<EAFFE0A30B0380890E>I<127012F8A3127005057D84
0C>I<1303A213071306A2130E130C131C1318A213381330A213701360A213E013C0A212011380
12031300A25A1206A2120E120CA2121C1218A21238123012701260A212E05AA210297E9E15>I<
EA03C0EA0FF0EA1C38EA381CA2EA700EA3EAF00FADEA700EA3EA381CA2EA1C38EA0FF0EA07E010
1D7E9B15>I<12035A123FB4FC12C71207B3A3EAFFF8A20D1C7C9B15>I<EA07C0EA1FF0EA3878EA
603C131E12F0EAF80FA312701200130E131E131C133C1378137013E0EA01C0EA0380EA0700EA0E
03120C1218EA3006EA7FFE12FFA2101C7E9B15>I<EA07E0EA1FF0EA3838EA301CEA781EA31238
1200133C13381370EA07E0A2EA0038131C131E130E130FA2127012F8A2130EEAF01EEA601CEA38
38EA1FF0EA07C0101D7E9B15>I<131CA2133C137CA213DC1201139C1203EA071C1206120E120C
121812381230126012E0B512C0A238001C00A63801FFC0A2121C7F9B15>I<EA300CEA3FFC13F8
13E0EA3000A6EA33E0EA37F0EA3C38EA381CEA301E130EEA000FA4127012F0A2EAE00EEA601E13
1CEA3878EA1FF0EA07C0101D7E9B15>I<13F0EA03FCEA070CEA0E0EEA1C1E1238130CEA780012
70A2EAF3F0EAF7F8EAFC1CEAF81E130E12F0130FA51270A2130E1238131CEA1C38EA0FF0EA03E0
101D7E9B15>I<1260387FFF80A21400EA6003EAC0065BA2C65A5BA25BA25BA21201A2485AA412
07A76CC7FC111D7E9B15>I<EA03E0EA0FF0EA1C38EA381CEA300E1270A31278131C123EEA3FB8
EA1FE0EA07F0EA0FF8EA1CFCEA387EEA701E130F12E01307A4EA700E130CEA3C3CEA1FF0EA07E0
101D7E9B15>I<EA03C0EA0FF0EA1C38EA381C1278EA700E12F0A2130FA51270131F1278EA383F
EA1FEFEA0FCFEA000EA3EA301C12781338EA7030EA30F0EA3FC0EA0F80101D7E9B15>I<127012
F8A312701200A8127012F8A3127005127D910C>I<127012F8A312701200A8127012F012F8A212
781218A31230A2127012601240051A7D910C>I<007FB512C0B612E0C9FCA8B612E06C14C01B0C
7E8F20>61 D<1306130FA3497EA4EB33C0A3EB61E0A3EBC0F0A338018078A2EBFFF8487FEB003C
A200067FA3001F131F39FFC0FFF0A21C1D7F9C1F>65 D<B512C014F0380F00F8143C141C141EA4
141C143C1478EBFFF014E0EB00F8143C141EA2140FA5141E143E147CB512F814C0181C7E9B1D>
I<90381F8080EBFFE13803F0333807801B380F000F001E1307001C1303123C5A1401127012F091
C7FCA70070EB01801278A27E001CEB0300121E6C13066C6C5A3803F0383800FFF0EB1F80191E7E
9C1E>I<B512C014F0380F007C141E8080EC038015C0A2140115E0A815C0A2140315801407EC0F
00141E147CB512F014C01B1C7E9B20>I<B512FCA2380F007C141C140C140E14061303A314005B
13FFA213077FA21403A213001406A3140E141E147CB512FCA2181C7E9B1C>I<B512F8A2380F00
7814381418141C140CA21303A21400A25B13FFA213077FA490C7FCA6EAFFF8A2161C7E9B1B>I<
90381F8080EBFFE13803F0333807801B380F000F001E1307001C1303123C5A1401127012F091C7
FCA5ECFFF0A20070EB07801278A27E121C121E7E3807800F3803F0393800FFF090381FC0001C1E
7E9C21>I<39FFF3FFC0A2390F003C00AAEBFFFCA2EB003CAC39FFF3FFC0A21A1C7E9B1F>I<EAFF
F0A2EA0F00B3A6EAFFF0A20C1C7F9B0F>I<EAFFF8A2000FC7FCAF1418A414381430147014F013
01B5FCA2151C7E9B1A>76 D<B46CEBFF806D5A000FECF800A2390DE00378A3380CF006A3EB780C
A3EB3C18A3EB1E30A3EB0F60A3EB07C0A3381E03803AFFC387FF80A2211C7E9B26>I<B4EBFFC0
7F000FEB1E00EBC00CA2EA0DE0EA0CF0A21378A2133C131EA2130FA2EB078C14CC1303EB01ECA2
EB00FCA2147C143CA2001E131CEAFFC0140C1A1C7E9B1F>I<EB3F80EBFFE03803E0F83807803C
380E000E001E130F48EB078000381303007814C0A20070130100F014E0A80078EB03C0A36CEB07
80A26CEB0F006C131E6C6C5A3803E0F83800FFE0EB3F801B1E7E9C20>I<B5128014E0380F00F0
1438143C141EA6143C143814F0EBFFE0148090C7FCAAEAFFF0A2171C7E9B1C>I<B5FC14E0380F
00F01438143C80A55C143814F0EBFFE05CEB01E06D7E1478A71530143839FFF03C60EC1FE0C7EA
07C01C1D7E9B1F>82 D<3807E080EA1FF9EA3C1FEA7007130312E01301A36CC7FCA2127CEA7FC0
EA3FF8EA1FFEEA07FFC61380130FEB03C0A2130112C0A300E01380130300F01300EAFC0EEACFFC
EA83F8121E7E9C17>I<007FB512C0A238780F03007013010060130000E014E000C01460A40000
1400B03803FFFCA21B1C7F9B1E>I<39FFF0FFC0A2390F001E00140CB36C5B138000035BEA01C0
3800E0E0EB7FC0011FC7FC1A1D7E9B1F>I<39FFE01FF0A2390F000780EC0300A238078006A2EB
C00E0003130CA2EBE01C00011318A26C6C5AA3EB7860A36D5AA3EB1F80A36DC7FCA313061C1D7F
9B1F>I<3AFFE0FFE1FFA23A1F001E007C6C1530143FA20180147000079038678060A32603C0E7
13C0ECC3C0A2D801E0EBC1809038E181E1A3D800F3EBF3001400A2017B13F6017E137EA3013C13
3CA3011C133801181318281D7F9B2B>I<397FF0FFC0A23907C03E0000031338EBE03000011370
EBF06000005B1379EB7D80013FC7FC7FA27F80131FEB3BC0EB33E01371EB61F0EBC0F800011378
EB807C3803003C487F380F801F39FFE0FFF0A21C1C7F9B1F>I<12FEA212C0B3B312FEA207297C
9E0C>91 D<EA0808EA1818EA3030EA6060A2EAC0C0A3EAF8F8EAFCFCA2EA7C7CEA38380E0D7B9C
15>I<12FEA21206B3B312FEA20729809E0C>I<1208121812301260A212C0A312F812FCA2127C12
38060D7E9C0C>96 D<EA0FE0EA1FF8EA3C3C7FEA180E1200131EEA07FE121FEA3E0E127812F014
60A2131EEA783E383FFFC0381F878013127F9115>I<12FCA2121CA9137EEA1DFF381F8780381E
01C0001C13E0130014F0A614E01301001E13C0381F07803819FF00EA187C141D7F9C17>I<EA03
F0EA0FF8EA1E3C1238EA7818EA700012F0A612781306123CEA1E0CEA0FF8EA03E00F127F9112>
I<EB1F80A21303A9EA03E3EA0FFBEA1E0FEA3807EA7803127012F0A612701278EA3807EA1E1F38
0FFBF0EA07E3141D7F9C17>I<EA03E0EA0FF0EA1C38EA381CEA781EEA700EEAFFFEA2EAF000A4
1270EA7806123CEA1E0CEA0FF8EA03E00F127F9112>I<1378EA01FCEA039EEA071EEA0E0C1300
A6EAFFE0A2EA0E00AEEA7FE0A20F1D809C0D>I<EB03803807E7C0EA0FFDEA3C3D38381C00EA78
1EA4EA381CEA3C3CEA3FF0EA37E00070C7FCA21230EA3FFC6CB4FC481380EA700738E001C0A438
700380383C0F00EA1FFEEA07F8121C7F9215>I<12FCA2121CA9137CEA1DFFEA1F07381E0380A2
121CAB38FF9FF0A2141D7F9C17>I<1218123C127C123C1218C7FCA612FCA2121CAEEAFF80A209
1D7F9C0C>I<EA01C0EA03E0A3EA01C0C7FCA6EA0FE0A21200B31260EAF1C0A2EA7F80EA3E000B
25839C0D>I<12FCA2121CA9EB7FC0A2EB3E0013185B5B5BEA1DE0121FEA1E70EA1C781338133C
131C7F130F38FF9FE0A2131D7F9C16>I<12FCA2121CB3A7EAFF80A2091D7F9C0C>I<39FC7E07E0
39FDFF9FF8391F83B838391E01E01CA2001C13C0AB3AFF8FF8FF80A221127F9124>I<EAFC7CEA
FDFFEA1F07381E0380A2121CAB38FF9FF0A214127F9117>I<EA03F0EA0FFCEA1E1EEA38070078
1380EA700300F013C0A600701380EA780700381300EA1E1EEA0FFCEA03F012127F9115>I<EAFC
7EEAFDFF381F8780381E03C0381C01E0A2EB00F0A6EB01E0A2381E03C0381F0780381DFF00EA1C
7C90C7FCA6B47EA2141A7F9117>I<3803E180EA0FF9EA1E1FEA3C071278130312F0A612781307
123CEA1E1FEA0FFBEA07E3EA0003A6EB1FF0A2141A7F9116>I<EAFDE0EAFFF0EA1F78121E1330
EA1C00ABEAFFC0A20D127F9110>I<EA1F90EA3FF0EA7070EAE030A3EAF800EA7F80EA3FE0EA0F
F0EA00F8EAC038A212E0A2EAF070EADFE0EA8FC00D127F9110>I<120CA5121CA2123CEAFFE0A2
EA1C00A81330A5EA1E60EA0FC0EA07800C1A7F9910>I<38FC1F80A2EA1C03AC1307EA0C0F380F
FBF0EA03E314127F9117>I<38FF0FE0A2381C0780EB0300EA0E06A36C5AA2131CEA0398A213F8
6C5AA26C5AA313127F9116>I<39FF3FCFE0A2391C0F0780EC0300131F380E1B061486A2EB318E
000713CCA213603803E0F8A33801C070A31B127F911E>I<387F8FF0A2380F078038070600EA03
8EEA01DC13D8EA00F01370137813F8EA01DCEA038E130EEA0607380F038038FF8FF8A215128091
16>I<38FF0FE0A2381C0780EB0300EA0E06A36C5AA2131CEA0398A213F86C5AA26C5AA35BA3EA
F180A200C7C7FC127E123C131A7F9116>I<EA7FFCA2EA7838EA7070EA60F013E0EA61C01263EA
0380EA070C120F120EEA1C1CEA3C181238EA7078EAFFF8A20E127F9112>I<B512F0A21402808B
15>I E /Fy 10 118 df<DC7FFE140E030FB500E0133E92B600F8137E020303FE13FE021FEDFF
81027FD9F80113E391B53980003FF7010301FCC7EA07FF4901F08049491400490180157F4990C9
123F4948161F4948160F485B4818074A1603485B481801A2485B1900A2485B1A7E5AA391CCFCA2
B5FCAD7EA2801A3EA27EA26C7FA21A7E6C6D177CA26C19FC6C6D17F86E16016CF003F06C7F6D6C
EE07E06D6CEE0FC06D6DED1F806D01E0ED7F006D6D15FE6D01FCEC03FC0100D9FF80EB0FF86E01
F8EBFFF0021F90B612C0020393C7FC020015FC030F14E09226007FFEC8FC474979C756>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 /Fz 8 117 df<140F5C147FEB03FF131FB6FCA313E7EA0007B3B3A7007FB612E0A4233879B7
32>49 D<D907FF1307013FEBE00F90B5EAF81F48ECFE3F2607FC01B5FC390FF0001F4848130749
7F48487F8148C87EA24881A282A27F827F7F6D91C7FC13FC387FFFE014FE6CEBFFF015FE6C6E7E
826C15F06C816C81C681133F010F801300020F1480EC007F150F030313C0818112F0167FA2163F
A27EA26C1680A26C157F6C16006D5C6D5C6D495A01FC13039039FFC01FF0D8FC7FB55AD8F81F5C
D8F00749C7FC39E0007FF02A3D7ABB37>83 D<ECFFF0010F13FF013F14C09039FFC03FE0480100
13F0D807FE137F485A5B121F485AED3FE0007FEC1FC049EB070092C7FC12FFAA127F7FA2123F6D
1478121F6C6C14F86DEB01F06C6CEB03E0000190388007C06C9038E01F80013FB51200010F13FC
010013C025267DA52C>99 D<903801FFC0011F13F8017F13FE9038FFC1FF00039038007F80D807
FCEB1FC0484814E0ED0FF0485A003FEC07F8A2485AED03FCA212FFA290B6FCA301E0C8FCA5127F
A27F003F153CA26C6C147C000F15786C6C14F86C6CEB01F06C6CEB07E06C9038E03FC0013FB512
00010F13FC010013E026267DA52D>101 D<EA01F8487E487E487E5A1480A414007E6C5A6C5A6C
5AC8FCA913FFB5FCA412077EB3AAB512F8A4153D7DBC1B>105 D<01FEEB7FC000FF903803FFF8
020F13FE91381F03FFEC3C010007017814800003497E6D4814C05CA25CA291C7FCB3A4B5D8FC3F
13FFA430267CA537>110 D<ECFFE0010F13FE013F6D7E9039FFC07FE03A01FE000FF048486D7E
48486D7E000F8148486D7E003F1680497FA2007F16C0A300FF16E0A9007F16C0A36C6C491380A2
001F16006C6C495AA26C6C495AD801FFEB1FF06C9038C07FE0013FB51280010F49C7FC010013E0
2B267DA532>I<EB0780A5130FA4131FA2133FA2137F13FF5A1207001FEBFFF8B6FCA30001EB80
00B3153CA86C147814C0017F13F8ECE1F090381FFFE0010713C0010113001E377EB627>116
D E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300
TeXDict begin
%%EndSetup
%%Page: 1 1
bop 75 356 a Fz(Section)33 b(1)75 564 y Fy(P)m(oin)m(t)41 b(to)f(P)m(oin)m(t)
h(Comm)m(unication)884 780 y Fx(Marc)15 b(Snir)684 830 y(William)10
b(Gropp)j(and)h(Ewing)f(Lusk)75 967 y Fw(1.1)59 b(Intro)r(duction)75
1058 y Fx(This)10 b(c)o(hapter)i(is)e(a)g(draft)g(of)g(the)h(curren)o(t)h
(prop)q(osal)e(for)g(p)q(oin)o(t-to-p)q(oin)o(t)f(comm)o(unication.)14
b(Sending)c(and)g(receiv-)75 1108 y(ing)i(of)g(messages)h(b)o(y)g(pro)q
(cesses)i(is)e(the)g(basic)g(MPI)g(comm)o(unication)d(mec)o(hanism.)15
b(All)d(other)h(comm)o(unication)75 1157 y(functions)18 b(can)g(b)q(e)h
(implemen)o(ted)d(on)h(top)h(of)g(this)g(basic)g(comm)o(unication)d(la)o(y)o
(er)i(\(although)g(a)h(more)f(direct)75 1207 y(implemen)o(tatio)o(n)11
b(ma)o(y)h(lead)i(to)g(greater)h(e\016ciency\).)158 1257 y(The)g(basic)g(p)q
(oin)o(t)f(to)h(p)q(oin)o(t)f(comm)o(unication)d(op)q(erations)k(are)h
Fv(send)d Fx(and)i Fv(receiv)o(e)p Fx(.)k(A)c Fv(send)e Fx(op)q(eration)75
1307 y(creates)19 b(and)e(sends)h(a)e(message.)27 b(The)18
b(op)q(eration)f(sp)q(eci\014es)h(a)f Fv(send)h(bu\013er)e
Fx(in)g(the)i(sender)g(memory)d(from)75 1357 y(whic)o(h)f(the)i(message)e
(data)g(is)g(tak)o(en.)20 b(In)15 b(addition,)e(the)i(send)h(op)q(eration)e
(asso)q(ciates)i(an)e Fv(en)o(v)o(elop)q(e)e Fx(with)i(the)75
1407 y(message.)26 b(This)17 b(en)o(v)o(elop)q(e)g(sp)q(eci\014es)i(the)e
(message)g(destination)f(and)h(con)o(tains)f(distinguishing)g(information)75
1456 y(that)e(can)g(b)q(e)h(used)f(b)o(y)g(the)g Fv(receiv)o(e)f
Fx(op)q(eration)h(to)f(select)j(a)d(particular)h(message.)158
1506 y(A)g Fv(receiv)o(e)f Fx(op)q(eration)h(consumes)g(a)f(message.)18
b(The)d(message)f(to)f(b)q(e)i(receiv)o(ed)g(is)f(selected)i(according)e(to)
75 1556 y(the)g(v)n(alue)g(on)f(its)h(en)o(v)o(elop)q(e,)g(and)g(the)g
(message)g(data)f(is)h(put)g(in)o(to)g(the)g Fv(receiv)o(e)h(bu\013er)p
Fx(.)158 1606 y(The)g(next)h(sections)g(describ)q(e)h(the)f(basic)f(\(blo)q
(c)o(king\))f(send)i(and)f(receiv)o(e)h(op)q(erations.)22 b(W)m(e)14
b(discuss)j(send,)75 1656 y(receiv)o(e,)k(basic)e(comm)o(unication)d(seman)o
(tics,)j(t)o(yp)q(e)h(matc)o(hing)d(requiremen)o(ts,)j(t)o(yp)q(e)f(con)o(v)o
(ersion)h(in)e(hetero-)75 1705 y(geneous)i(en)o(vironmen)o(ts,)g(and)f(more)f
(general)i(comm)o(unicati)o(on)c(mo)q(des.)34 b(Non)o(blo)q(c)o(king)18
b(comm)o(unication)e(is)75 1755 y(addressed)h(next,)f(follo)o(w)o(ed)d(b)o(y)
i(c)o(hannel-lik)o(e)g(constructs)i(and)e(send-receiv)o(e)i(op)q(erations.)22
b(W)m(e)15 b(then)h(consider)75 1805 y(general)g(datat)o(yp)q(es)g(that)g
(allo)o(w)e(one)i(to)g(transfer)g(heterogeneous)i(and)e(noncon)o(tiguous)f
(data,)h(and)f(conclude)75 1855 y(with)c(a)h(description)g(of)g(an)f
(implemen)o(tation)d(of)k(MPI)g(p)q(oin)o(t)f(to)h(p)q(oin)o(t)f(comm)o
(unicatio)o(n)e(using)j(a)f(small)f(n)o(um)o(b)q(er)75 1905
y(of)j(primitiv)o(es.)75 2042 y Fw(1.2)59 b(Basic)19 b(send)h(op)r(eration)75
2133 y Fx(The)14 b(syn)o(tax)g(of)f(the)i(simplest)e(send)i(op)q(eration)e
(is)h(giv)o(en)g(b)q(elo)o(w.)75 2230 y Fu(MPI)p 144 2230 14
2 v 15 w(SEND)21 b(\(start,)f(count,)h(datatype,)f(dest,)h(tag,)g(comm\))117
2280 y Ft(in)14 b Fu(start)675 b Ft(initial)16 b(address)e(of)e(send)i
(bu\013er)g(\(c)o(hoice\))117 2325 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)
12 b(of)f(elemen)o(ts)h(in)g(send)g(bu\013er)g(\(nonnegativ)o(e)i(in)o
(teger\))117 2371 y(in)g Fu(datatype)609 b Ft(datat)o(yp)q(e)14
b(of)f(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)117 2417 y(in)g
Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
2462 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
2508 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))-32
46 y Fs(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32
328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-39 554 y(10)-39
611 y(11)-39 667 y(12)-39 724 y(13)-39 780 y(14)-39 836 y(15)-39
893 y(16)-39 949 y(17)-39 1006 y(18)-39 1062 y(19)-39 1119
y(20)-39 1175 y(21)-39 1232 y(22)-39 1288 y(23)-39 1345 y(24)-39
1401 y(25)-39 1457 y(26)-39 1514 y(27)-39 1570 y(28)-39 1627
y(29)-39 1683 y(30)-39 1740 y(31)-39 1796 y(32)-39 1853 y(33)-39
1909 y(34)-39 1966 y(35)-39 2022 y(36)-39 2078 y(37)-39 2135
y(38)-39 2191 y(39)-39 2248 y(40)-39 2304 y(41)-39 2361 y(42)-39
2417 y(43)-39 2474 y(44)-39 2530 y(45)-39 2587 y(46)-39 2643
y(47)-39 2699 y(48)p eop
%%Page: 2 2
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(2)75 45 y Fq(1.2.1)49 b(Message)16 b(data)75
122 y Fx(The)e(send)g(bu\013er)g(sp)q(eci\014ed)h(b)o(y)e(the)h
Fu(MPI)p 736 122 14 2 v 15 w(SEND)e Fx(op)q(eration)h(consists)h(of)f
Fu(count)f Fx(successiv)o(e)k(en)o(tries)e(of)f(the)g(t)o(yp)q(e)75
172 y(indicated)g(b)o(y)g Fu(datatype)p Fx(,)e(starting)i(with)g(the)h(en)o
(try)g(at)f(address)h Fu(start)p Fx(.)j(Note)c(that)g(w)o(e)h(sp)q(ecify)g
(the)f(message)75 221 y(length)k(in)f(terms)g(of)g(n)o(um)o(b)q(er)g(of)g
Fp(elements)p Fx(,)h(not)f(n)o(um)o(b)q(er)g(of)g Fp(bytes)p
Fx(.)26 b(The)17 b(former)f(is)g(mac)o(hine)g(indep)q(enden)o(t)75
271 y(and)e(closer)g(to)g(the)h(application)d(lev)o(el.)158
321 y(The)h(data)g(part)g(of)g(the)g(message)g(consists)h(of)e(a)h(sequence)i
(of)e Fu(count)f Fx(v)n(alues,)g(eac)o(h)h(of)g(the)g(t)o(yp)q(e)h(indicated)
75 371 y(b)o(y)h Fu(datatype)p Fx(.)k Fu(count)14 b Fx(ma)o(y)f(b)q(e)j
(zero,)f(in)g(whic)o(h)f(case)i(the)g(data)e(part)i(of)e(the)h(message)g(is)g
(empt)o(y)m(.)k(The)d(basic)75 421 y(datat)o(yp)q(es)h(that)g(can)h(b)q(e)f
(sp)q(eci\014ed)i(for)d(message)h(data)f(v)n(alues)h(corresp)q(ond)h(to)f
(the)h(basic)f(datat)o(yp)q(es)g(of)f(the)75 470 y(host)h(language.)27
b(The)17 b(p)q(ossible`)g(v)n(alues)g(of)f(this)h(parameter)g(for)g(F)m
(ortran)g(and)g(the)g(corresp)q(onding)h(F)m(ortran)75 520
y(t)o(yp)q(es)d(are)f(listed)g(b)q(elo)o(w)p 522 665 906 2
v 521 715 2 50 v 547 700 a(MPI)g(datat)o(yp)q(e)p 951 715 V
175 w(F)m(ortran)g(datat)o(yp)q(e)p 1427 715 V 522 716 906
2 v 521 766 2 50 v 547 751 a Fu(MPI)p 616 751 14 2 v 15 w(INTEGER)p
951 766 2 50 v 195 w Fx(INTEGER)p 1427 766 V 521 816 V 547
801 a Fu(MPI)p 616 801 14 2 v 15 w(REAL)p 951 816 2 50 v 261
w Fx(REAL)p 1427 816 V 521 866 V 547 851 a Fu(MPI)p 616 851
14 2 v 15 w(DOUBLE)p 951 866 2 50 v 217 w Fx(DOUBLE)g(PRECISION)p
1427 866 V 521 916 V 547 901 a Fu(MPI)p 616 901 14 2 v 15 w(COMPLEX)p
951 916 2 50 v 195 w Fx(COMPLEX)p 1427 916 V 521 966 V 547
951 a Fu(MPI)p 616 951 14 2 v 15 w(DOUBLE)p 763 951 V 15 w(COMPLEX)p
951 966 2 50 v 48 w Fx(DOUBLE)g(COMPLEX)p 1427 966 V 521 1015
V 547 1000 a Fu(MPI)p 616 1000 14 2 v 15 w(LOGICAL)p 951 1015
2 50 v 195 w Fx(LOGICAL)p 1427 1015 V 521 1065 V 547 1050 a
Fu(MPI)p 616 1050 14 2 v 15 w(CHARACTER)p 951 1065 2 50 v 151
w Fx(CHARA)o(CTER)p 1427 1065 V 521 1115 V 547 1100 a Fu(MPI)p
616 1100 14 2 v 15 w(BYTE)p 951 1115 2 50 v 1427 1115 V 522
1117 906 2 v 75 1301 a Fx(The)g(p)q(ossible)g(v)n(alues)g(for)g(this)g
(parameter)f(for)h(C)f(and)h(the)h(corresp)q(onding)f(C)g(t)o(yp)q(es)h(are)f
(listed)g(b)q(elo)o(w)p 695 1480 560 2 v 694 1529 2 50 v 720
1515 a(MPI)g(datat)o(yp)q(e)p 1000 1529 V 51 w(C)f(datat)o(yp)q(e)p
1254 1529 V 695 1531 560 2 v 694 1581 2 50 v 720 1566 a Fu(MPI)p
789 1566 14 2 v 15 w(SHORT)p 1000 1581 2 50 v 115 w Fx(short)p
1254 1581 V 694 1631 V 720 1616 a Fu(MPI)p 789 1616 14 2 v
15 w(INT)p 1000 1631 2 50 v 159 w Fx(in)o(t)p 1254 1631 V 694
1681 V 720 1666 a Fu(MPI)p 789 1666 14 2 v 15 w(LONG)p 1000
1681 2 50 v 137 w Fx(long)p 1254 1681 V 694 1730 V 720 1715
a Fu(MPI)p 789 1715 14 2 v 15 w(UNSIGNED)p 1000 1730 2 50 v
49 w Fx(unsigned)p 1254 1730 V 694 1780 V 720 1765 a Fu(MPI)p
789 1765 14 2 v 15 w(FLOAT)p 1000 1780 2 50 v 115 w Fx(\015oat)p
1254 1780 V 694 1830 V 720 1815 a Fu(MPI)p 789 1815 14 2 v
15 w(DOUBLE)p 1000 1830 2 50 v 93 w Fx(double)p 1254 1830 V
694 1880 V 720 1865 a Fu(MPI)p 789 1865 14 2 v 15 w(CHAR)p
1000 1880 2 50 v 137 w Fx(c)o(har)p 1254 1880 V 694 1930 V
720 1915 a Fu(MPI)p 789 1915 14 2 v 15 w(BYTE)p 1000 1930 2
50 v 1254 1930 V 695 1931 560 2 v 158 2087 a Fx(The)h(datat)o(yp)q(e)g
Fu(MPI)p 486 2087 14 2 v 15 w(BYTE)f Fx(do)q(es)h(not)g(corresp)q(ond)h(to)e
(a)g(F)m(ortran)h(or)f(C)h(datat)o(yp)q(e.)k(A)c(v)n(alue)f(of)g(t)o(yp)q(e)h
Fu(BYTE)75 2137 y Fx(consists)20 b(of)e(8)g(binary)g(digits.)32
b(A)19 b(b)o(yte)g(is)g(unin)o(terpreted)h(and)f(is)f(di\013eren)o(t)i(from)d
(a)h(c)o(haracter.)34 b(Di\013eren)o(t)75 2186 y(mac)o(hines)19
b(ma)o(y)g(ha)o(v)o(e)h(di\013eren)o(t)h(represen)o(tations)i(for)d(c)o
(haracters,)j(or)d(ma)o(y)f(use)i(more)e(than)i(one)f(b)o(yte)h(to)75
2236 y(represen)o(t)16 b(c)o(haracters.)k(On)14 b(the)h(other)f(hand,)f(a)h
(b)o(yte)g(has)g(the)h(same)e(binary)g(v)n(alue)g(on)h(all)f(mac)o(hines.)158
2365 y Fo(Discussion:)158 2410 y Ft(Need)g(to)g(decide)h(whether)g(w)o(e)e(w)
o(an)o(t)h(\(for)g(C\))158 2456 y(unsigned)i(c)o(har,)e(unsigned)i(short,)f
(unsigned)h(long)158 2502 y(long)f(double)158 2547 y(DOUBLE)f(COMPLEX)g(ma)o
(y)g(not)g(b)q(e)g(standard)i(F)m(ortran)e(77)158 2593 y(DOUBLE)g(is)h(no)o
(w)f(used)g(b)q(oth)h(for)f(F)m(ortran)g(and)h(C.)e(Should)j(w)o(e)e(use)g
(di\013eren)o(t)i(names?)p eop
%%Page: 3 3
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(3)75 45 y Fq(1.2.2)49 b(Message)16 b(envelop)q(e)75
122 y Fx(In)c(addition)g(to)g(the)h(data)f(part,)g(messages)h(con)o(tain)f
(information)d(that)k(can)f(b)q(e)h(used)h(to)e(distinguish)g(messages)75
172 y(and)h(selectiv)o(ely)h(receiv)o(e)h(them.)i(This)c(information)d(is)k
(con)o(tained)f(in)g(a)g(\014xed)h(n)o(um)o(b)q(er)e(of)h(\014xed-format)f
(\014elds,)75 221 y(whic)o(h)i(w)o(e)g(collectiv)o(ely)f(call)g(the)i
Fv(message)g(en)o(v)o(elop)q(e)p Fx(.)h(These)f(\014elds)f(are)75
304 y Fv(source)75 387 y(destinatio)o(n)75 470 y(tag)75 553
y(con)o(text)158 636 y Fx(The)h(message)g(source)h(is)e(implicitly)e
(determined)j(b)o(y)f(the)i(iden)o(tit)o(y)e(of)g(the)h(message)g(sender.)22
b(The)15 b(other)75 686 y(\014elds)f(are)h(sp)q(eci\014ed)g(b)o(y)f
(parameters)g(in)f(the)i(send)f(op)q(eration.)158 736 y(The)g(in)o(teger-v)n
(alued)g(message)f(tag)g(is)h(sp)q(eci\014ed)h(b)o(y)f(the)g
Fu(tag)f Fx(parameter.)18 b(This)13 b(in)o(teger)h(can)g(b)q(e)h(used)f(b)o
(y)75 786 y(the)f(program)e(to)h(distinguish)g(di\013eren)o(t)i(t)o(yp)q(es)f
(of)f(messages.)18 b(The)13 b(range)g(of)e(v)n(alid)g(tag)i(v)n(alues)f(is)g
(implemen)o(ta-)75 836 y(tion)g(dep)q(enden)o(t)h(and)f(can)h(b)q(e)f
(queried)h(using)f(the)g Fu(TagRange)f Fx(en)o(vironmen)o(tal)f(inquiry)h
(function,)h(as)g(describ)q(ed)75 886 y(in)h(Chapter)i Fv(??)p
Fx(.)158 935 y(The)i(con)o(text)g(of)f(the)h(message)f(sen)o(t)i(is)e(sp)q
(eci\014ed)i(b)o(y)e(the)h Fu(comm)f Fx(parameter.)26 b(the)17
b(message)f(carries)h(the)75 985 y(con)o(text)e(asso)q(ciated)f(with)g(this)g
(comm)o(unicator)d(\(see)k(Chapter)g Fv(??)p Fx(\).)158 1035
y(The)f(message)e(destination)h(is)g(sp)q(eci\014ed)i(b)o(y)e(the)h
Fu(dest)e Fx(parameter)h(as)g(a)g(rank)g(within)f(the)i(pro)q(cess)h(group)75
1085 y(asso)q(ciated)h(with)f(that)g(same)g(comm)o(unicator.)k(The)d(range)g
(of)e(v)n(alid)g(v)n(alues)h(is)g Fu(0,)22 b(...)42 b(,)22
b(n-1)p Fx(,)15 b(where)h Fu(n)f Fx(is)75 1135 y(the)i(n)o(um)o(b)q(er)f(of)h
(pro)q(cesses)i(in)d(this)h(group.)27 b(Th)o(us,)17 b(p)q(oin)o(t-to-p)q(oin)
o(t)e(comm)o(unications)f(do)j(not)f(use)i(absolute)75 1184
y(addresses,)e(but)e(only)f(relativ)o(e)g(ranks)i(within)e(a)g(group.)18
b(This)c(pro)o(vides)g(imp)q(ortan)o(t)e(mo)q(dularit)o(y)m(.)158
1234 y(The)i(message)g(en)o(v)o(elop)q(e)g(w)o(ould)f(normally)e(b)q(e)j
(enco)q(ded)h(b)o(y)e(a)h(\014xed-length)g(message)f(header.)19
b(Ho)o(w)o(ev)o(er,)75 1284 y(the)d(actual)f(mec)o(hanism)e(used)j(to)f(asso)
q(ciate)i(an)e(en)o(v)o(elop)q(e)g(with)h(a)f(message)g(is)g(implemen)o
(tatio)o(n)e(dep)q(enden)o(t:)75 1334 y(some)k(of)f(the)j(information)14
b(\(e.g.,)j(source)i(or)f(destination\))f(ma)o(y)e(b)q(e)k(implicit,)c(and)i
(need)h(not)g(b)q(e)g(explicitly)75 1384 y(carried)d(b)o(y)e(messages;)h(pro)
q(cesses)i(ma)o(y)c(b)q(e)j(iden)o(ti\014ed)f(b)o(y)f(relativ)o(e)h(ranks,)g
(or)g(absolute)g(ids;)f(etc.)75 1521 y Fw(1.3)59 b(Basic)19
b(receive)g(op)r(eration)75 1612 y Fx(The)14 b(syn)o(tax)g(of)f(the)i
(simplest)e(receiv)o(e)i(op)q(eration)f(is)g(giv)o(en)f(b)q(elo)o(w.)75
1709 y Fu(MPI)p 144 1709 14 2 v 15 w(RECV)21 b(\(start,)f(count,)h(datatype,)
f(source,)g(tag,)h(comm,)g(status\))117 1759 y Ft(out)14 b
Fu(start)651 b Ft(initial)16 b(address)e(of)e(receiv)o(e)i(bu\013er)g(\(c)o
(hoice\))117 1804 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(in)g(receiv)o(e)g(bu\013er)g(\(in)o(teger\))117
1850 y(in)g Fu(datatype)609 b Ft(datat)o(yp)q(e)14 b(of)f(eac)o(h)g(receiv)o
(e)h(bu\013er)g(elemen)o(t)g(\(state\))117 1896 y(in)g Fu(source)653
b Ft(rank)13 b(of)g(source)h(\(in)o(teger\))117 1941 y(in)g
Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117 1987
y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))117
2033 y(out)g Fu(status)629 b Ft(status)13 b(ob)r(ject)158 2109
y Fx(The)18 b(receiv)o(e)h(bu\013er)g(consists)g(of)e(the)h(storage)g(con)o
(taining)f Fu(count)f Fx(consecutiv)o(e)j(elemen)o(ts)f(of)f(the)h(t)o(yp)q
(e)75 2159 y(sp)q(eci\014ed)e(b)o(y)e Fu(datatype)p Fx(,)f(starting)h(at)h
(address)g Fu(start)p Fx(.)k(The)c(length)g(of)f(the)h(receiv)o(ed)g(message)
g(m)o(ust)e(b)q(e)i(less)75 2209 y(then)e(or)f(equal)g(to)g(the)g(length)g
(of)g(the)h(receiv)o(e)g(bu\013er.)18 b(I.e.,)12 b(all)f(incoming)f(data)h(m)
o(ust)g(\014t,)i(without)e(truncation,)75 2258 y(in)o(to)18
b(the)h(receiv)o(e)g(bu\013er.)33 b(The)19 b Fu(MPI)p 688 2258
V 15 w(PROBE)e Fx(function)h(describ)q(ed)i(in)e(Section)h(1.9)f(can)g(b)q(e)
h(used)g(to)g(receiv)o(e)75 2308 y(messages)14 b(of)f(unkno)o(wn)h(length.)
158 2358 y(The)f(selection)g(of)f(a)g(message)h(b)o(y)f(a)g(receiv)o(e)i(op)q
(eration)e(is)h(done)g(uniquely)e(according)i(to)f(the)i(v)n(alue)d(of)h(the)
75 2408 y(message)g(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 Fv(en)o(v)o(elop)q(e)g(pattern)p
Fx(;)f(a)h(message)g(can)h(b)q(e)g(receiv)o(ed)75 2458 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 2508 y(the)h Fu(source)p Fx(,)e Fu(tag)g Fx(and)h Fu(context)f
Fx(\014elds)h(of)g(the)h(message)f(en)o(v)o(elop)q(e.)22 b(The)16
b(receiv)o(er)g(ma)o(y)e(sp)q(ecify)h(a)g(wildcard)75 2557
y Fu(MPI)p 144 2557 V 15 w(ANY)p 225 2557 V 15 w(SOURCE)c Fx(v)n(alue)g(for)g
Fu(source)p Fx(,)g(and/or)g(a)h(wildcard)f Fu(MPI)p 1105 2557
V 15 w(ANY)p 1186 2557 V 15 w(TAG)g Fx(v)n(alue)g(for)h Fu(tag)p
Fx(,)f(indicating)g(that)g(an)o(y)75 2607 y(source)k(and/or)f(tag)g(are)g
(acceptable.)19 b(It)c(cannot)f(sp)q(ecify)g(a)g(wildcard)g(v)n(alue)f(for)h
Fu(context)p Fx(.)j(Th)o(us,)d(a)f(message)75 2657 y(can)f(b)q(e)g(receiv)o
(ed)i(b)o(y)d(a)h(receiv)o(e)h(op)q(eration)f(only)f(if)g(it)g(is)h
(addressed)h(to)f(the)h(receiving)f(pro)q(cess,)h(has)f(a)g(matc)o(hing)p
eop
%%Page: 4 4
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(4)75 45 y(con)o(text,)13 b(has)f(matc)o(hing)e(source)j
(unless)g(source=)p Fu(MPI)p 943 45 14 2 v 17 w(ANY)p 1026
45 V 15 w(SOURCE)e Fx(in)g(the)i(pattern,)f(and)g(has)g(a)g(matc)o(hing)e
(tag)75 95 y(unless)15 b(tag=)p Fu(MPI)p 357 95 V 15 w(ANY)p
438 95 V 15 w(TAG)e Fx(in)g(the)i(pattern.)158 145 y(The)20
b(message)g(tag)g(is)f(sp)q(eci\014ed)j(b)o(y)d(the)i Fu(tag)e
Fx(parameter)h(of)f(the)i(receiv)o(e)g(op)q(eration.)36 b(The)20
b(message)75 195 y Fu(context)e Fx(is)h(the)h(con)o(text)g(attac)o(hed)g
(with)f(the)h(comm)o(unicator)d(sp)q(eci\014ed)k(b)o(y)e(the)h(parameter)f
Fu(comm)p Fx(.)34 b(The)75 244 y(message)17 b(source,)h(if)e(di\013eren)o(t)i
(from)d Fu(MPI)p 758 244 V 15 w(ANY)p 839 244 V 16 w(SOURCE)p
Fx(,)g(is)i(sp)q(eci\014ed)h(as)f(a)g(rank)g(within)f(the)h(pro)q(cess)i
(group)75 294 y(asso)q(ciated)14 b(with)f(that)g(same)f(comm)o(unicator.)j
(Th)o(us,)e(the)h(range)f(of)g(v)n(alid)e(v)n(alues)i(for)g(the)g
Fu(source)f Fx(parameter)75 344 y(is)i Fn(f)21 b Fu(0,)h(...)43
b(,)21 b(n-1)g Fn(g)h([f)f Fu(MPI)p 646 344 V 15 w(ANY)p 727
344 V 15 w(SOURCE)g Fn(g)p Fx(,)13 b(where)i Fu(n)f Fx(is)f(the)i(n)o(um)o(b)
q(er)e(of)g(pro)q(cesses)k(in)c(this)h(group.)158 394 y(Note)20
b(the)f(asymmetry)e(b)q(et)o(w)o(een)k(send)f(and)f(receiv)o(e)h(op)q
(erations:)29 b(A)19 b(receiv)o(e)i(op)q(eration)e(ma)o(y)e(accept)75
444 y(messages)i(from)f(an)h(arbitrary)g(sender;)24 b(on)19
b(the)h(other)g(hand,)g(a)f(send)h(op)q(eration)g(m)o(ust)e(sp)q(ecify)i(a)f
(unique)75 493 y(receiv)o(er.)i(This)15 b(matc)o(hes)f(a)g(\\push")h(comm)o
(unicatio)o(n)d(mec)o(hanism,)g(where)j(data)g(transfer)g(is)f(e\013ected)j
(b)o(y)d(the)75 543 y(sender)h(\(rather)g(than)f(a)g(\\pull")e(mec)o(hanism,)
f(where)16 b(data)d(transfer)i(is)f(e\013ected)i(b)o(y)d(the)i(receiv)o
(er\).)158 593 y(Source)g(=)f(destination)g(is)f(allo)o(w)o(ed:)k(a)d(pro)q
(cess)i(can)e(send)g(a)g(message)g(to)f(itself.)75 709 y Fq(1.3.1)49
b(Return)16 b(status)75 869 y Fo(Discussion:)i(This)d(is)g(a)g(c)o(hange)g
(from)e(previous)j(draft)158 1001 y Fx(The)d(source)h(or)f(the)g(tag)f(of)h
(a)f(receiv)o(ed)i(message)e(ma)o(y)f(not)i(b)q(e)g(kno)o(wn)f(if)g(wildcard)
h(v)n(alues)f(where)i(used)f(in)75 1051 y(the)g(receiv)o(e)g(op)q(eration.)k
(Also,)12 b(the)g(actual)g(length)g(of)f(the)i(message)f(receiv)o(ed)h(ma)o
(y)d(not)i(b)q(e)h(kno)o(wn.)k(Th)o(us,)12 b(this)75 1101 y(information)e
(needs)k(to)f(b)q(e)h(returned)h(b)o(y)d(the)i(receiv)o(e)g(op)q(eration.)k
(F)m(or)12 b(reasons)i(that)g(will)d(b)q(ecome)i(clear)g(later,)75
1150 y(it)i(is)h(preferable)g(to)f(return)i(this)f(information)c(in)j(a)h
(separate)g Fu(out)f Fx(v)n(ariable,)g(rather)h(then)g(using)f(the)i
Fu(count)p Fx(,)75 1200 y Fu(source)12 b Fx(and)i Fu(tag)e
Fx(parameters)i(b)q(oth)g(for)f(input)g(and)h(output.)k(The)c(information)c
(is)k(returned)h(b)o(y)e(the)h Fu(status)75 1250 y Fx(parameter)f(of)g(the)h
Fu(MPI)p 460 1250 V 15 w(RECV)e Fx(function.)18 b(This)13 b(is)h(a)f
(parameter)g(of)g(a)g(sp)q(ecial)g(MPI-de\014ned)i(t)o(yp)q(e.)j(The)c
(status)75 1300 y(v)n(ariable)g(can)h(b)q(e)h(\\deco)q(ded")g(to)f(retriev)o
(e)i(the)f Fu(count)p Fx(,)e Fu(source)f Fx(and)i Fu(tag)g
Fx(\014elds,)g(using)g(the)h(query)g(functions)75 1350 y(listed)e(b)q(elo)o
(w.)75 1447 y Fu(MPI)p 144 1447 V 15 w(GET)p 225 1447 V 15
w(SOURCE\(status,)19 b(source\))117 1497 y Ft(in)14 b Fu(status)653
b Ft(return)13 b(status)h(of)e(receiv)o(e)i(op)q(eration)h(\(Status\))117
1542 y(out)f Fu(source)629 b Ft(source)13 b(rank)h(\(in)o(teger\))158
1619 y Fx(Returns)i(the)g(rank)g(of)f(the)h(message)f(source)h(\(in)g(the)g
(group)f(asso)q(ciated)h(with)f(the)h(comm)o(unicator)d(that)75
1668 y(w)o(as)h(used)h(to)e(receiv)o(e\).)75 1765 y Fu(MPI)p
144 1765 V 15 w(GET)p 225 1765 V 15 w(TAG\(status,)20 b(tag\))117
1815 y Ft(in)14 b Fu(status)653 b Ft(return)13 b(status)h(of)e(receiv)o(e)i
(op)q(eration)h(\(Status\))117 1861 y(out)f Fu(tag)695 b Ft(message)13
b(tag)h(\(in)o(teger\))158 1937 y Fx(Returns)h(the)f(tag)g(of)f(receiv)o(ed)i
(message.)75 2034 y Fu(MPI)p 144 2034 V 15 w(GET)p 225 2034
V 15 w(COUNT\(status,)k(count\))117 2084 y Ft(in)14 b Fu(status)653
b Ft(return)13 b(status)h(of)e(receiv)o(e)i(op)q(eration)h(\(Status\))117
2130 y(out)f Fu(count)651 b Ft(n)o(um)o(b)q(er)14 b(of)e(receiv)o(ed)j
(elemen)o(ts)f(\(in)o(teger\))158 2206 y Fx(Returns)h(the)f(n)o(um)o(b)q(er)f
(of)h(elemen)o(ts)f(receiv)o(ed.)20 b(\(Here,)15 b(again,)d(w)o(e)i(coun)o(t)
g Fp(elements)p Fx(,)f(not)h Fp(bytes)p Fx(.\))158 2256 y(The)f(information)e
(returned)j(b)o(y)f(these)h(query)g(functions)f(is)g(the)g(information)d
(last)j(stored)h(in)f(the)g Fu(status)75 2306 y Fx(v)n(ariable)i(b)o(y)h(a)g
(receiv)o(e)h(function.)24 b(It)16 b(is)g(erroneous)i(to)e(call)f(these)j
(query)e(functions)g(if)g(the)g Fu(status)f Fx(v)n(ariable)75
2355 y(w)o(as)f(nev)o(er)h(set)f(b)o(y)g(a)g(receiv)o(e.)158
2405 y(Note)h(that)g(it)f(is)g(not)g(mandatory)f(to)i(query)g(the)g(return)h
(status)f(after)g(a)f(receiv)o(e.)21 b(The)15 b(receiv)o(er)h(will)d(use)75
2455 y(these)i(calls,)e(or)h(some)f(of)g(them,)g(only)g(when)i(the)f
(information)d(they)j(return)h(is)f(needed.)158 2505 y(information)d
(returned)16 b(in)d(it)h(b)o(y)f(the)i(last)e(receiv)o(e)i(op)q(eration)f
(that)g(up)q(dated)158 2633 y Fo(Discussion:)p eop
%%Page: 5 5
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(5)158 45 y Ft(The)13 b(use)g(of)g(a)g(separate)h(status)f
(parameter)h(prev)o(en)o(ts)g(errors)f(that)g(are)g(often)g(attac)o(hed)h
(with)f Fm(inout)e Ft(parameters)75 91 y(\(e.g.,)h(passing)k(the)d
Fm(MPI)p 435 91 12 2 v 13 w(ANY)p 508 91 V 13 w(TAG)f Ft(constan)o(t)i(as)g
(the)f(actual)i(argumen)o(t)f(for)f Fm(tag)p Ft(\).)k(The)c(use)h(of)f(an)h
(explicit)i(user)e(ob)r(ject)75 136 y(b)q(ecomes)j(imp)q(ortan)o(t)g(for)e
(non)o(blo)q(c)o(king)k(comm)o(unication)g(as)d(it)g(allo)o(ws)h(the)f
(receiv)o(e)g(op)q(eration)i(to)e(b)q(e)g(stateless)g(and,)75
182 y(hence,)d(reen)o(tran)o(t.)18 b(This)c(prev)o(en)o(ts)f(confusions)i(in)
f(the)f(case)h(where)f(m)o(ultiple)i(receiv)o(es)f(can)g(b)q(e)f(p)q(osted)h
(b)o(y)f(a)g(pro)q(cess.)158 393 y Fo(Implemen)o(tation)g(note:)158
443 y Ft(One)g(exp)q(ects)h(deco)q(de)g(functions)g(to)f(b)q(e)h(in-lined)h
(in)f(man)o(y)g(implemen)o(tations.)158 575 y Fx(All)f(send)h(and)g(receiv)o
(e)h(op)q(erations)e(use)i(the)f Fu(start)p Fx(,)e Fu(count)p
Fx(,)g Fu(datatype)p Fx(,)g Fu(source)p Fx(,)g Fu(dest)p Fx(,)g
Fu(tag)p Fx(,)g Fu(comm)h Fx(and)75 625 y Fu(status)i Fx(parameters)i(in)g
(the)g(same)f(w)o(a)o(y)g(as)h(the)g(basic)g Fu(MPI)p 1064
625 14 2 v 15 w(SEND)f Fx(and)h Fu(MPI)p 1333 625 V 15 w(RECV)f
Fx(op)q(erations)h(describ)q(ed)h(in)75 675 y(this)c(section.)75
812 y Fw(1.4)59 b(Semantic)o(s)17 b(of)j(p)r(oint-to-p)r(oint)e(comm)m
(unicat)o(ion)75 903 y Fx(A)12 b(v)n(alid)e(MPI)i(implem)o(en)o(tation)d
(guaran)o(tees)j(certain)h(general)e(prop)q(erties)j(of)d(p)q(oin)o(t-to-p)q
(oin)o(t)f(comm)o(unicatio)o(n,)75 953 y(whic)o(h)k(are)g(describ)q(ed)i(in)d
(this)h(section.)75 1061 y Fl(Order)42 b Fx(Messages)13 b(are)f
Fp(non-overtaking)p Fx(,)g(within)f(eac)o(h)h(con)o(text:)18
b(if)10 b(t)o(w)o(o)h(messages)h(are)f(successiv)o(ely)i(sen)o(t)g(from)75
1111 y(the)h(same)f(source,)i(to)f(the)g(same)f(destination,)g(with)h(the)g
(same)f(con)o(text,)h(then)h(the)f(messages)g(are)g(receiv)o(ed)h(in)75
1161 y(the)h(order)h(they)f(w)o(ere)h(sen)o(t.)25 b(I.e.,)15
b(if)g(the)i(receiv)o(er)g(p)q(osts)g(t)o(w)o(o)e(successiv)o(e)j(receiv)o
(es)g(that)d(b)q(oth)h(matc)o(h)f(either)75 1210 y(message,)k(then)h(the)f
(\014rst)g(receiv)o(e)h(will)e(receiv)o(e)i(the)f(\014rst)h(message,)f(and)f
(the)i(second)f(receiv)o(e)h(will)e(receiv)o(e)75 1260 y(the)e(second)g
(message.)21 b(This)14 b(requiremen)o(t)h(facilitates)g(matc)o(hing)e(of)h
(sends)i(to)f(receiv)o(es.)23 b(It)15 b(guaran)o(tees)h(that)75
1310 y(message-passing)11 b(co)q(de)i(is)e(deterministic,)g(if)g(pro)q
(cesses)k(are)d(single-threaded)g(and)g(wildcard)f Fu(MPI)p
1651 1310 V 15 w(ANY)p 1732 1310 V 15 w(SOURCE)75 1360 y Fx(is)j(not)g(used)g
(in)g(receiv)o(es.)158 1410 y(If)i(a)h(pro)q(cess)h(has)f(a)f(single)h
(thread)g(of)f(execution,)i(then)f(an)o(y)f(t)o(w)o(o)g(comm)o(unications)e
(executed)k(b)o(y)f(this)75 1459 y(pro)q(cess)j(are)f(ordered.)32
b(On)19 b(the)g(other)g(hand,)g(if)e(the)i(pro)q(cess)h(is)e(m)o
(ulti-threaded,)g(then)h(the)g(seman)o(tics)f(of)75 1509 y(thread)i
(execution)g(ma)o(y)e(not)h(de\014ne)i(a)e(relativ)o(e)g(order)i(b)q(et)o(w)o
(een)g(t)o(w)o(o)e(send)h(op)q(erations)g(executed)h(b)o(y)e(t)o(w)o(o)75
1559 y(distinct)e(threads:)24 b(the)17 b(op)q(erations)g(are)g(logically)d
(concurren)o(t,)k(ev)o(en)f(though)f(one)h(ph)o(ysically)e(precedes)k(the)75
1609 y(other.)i(In)14 b(suc)o(h)i(a)e(case,)h(the)h(t)o(w)o(o)e(messages)g
(sen)o(t)i(can)f(b)q(e)g(receiv)o(ed)h(in)e(an)o(y)g(order.)21
b(Similarly)l(,)12 b(if)i(t)o(w)o(o)g(receiv)o(e)75 1659 y(op)q(erations)c
(that)g(are)g(logically)e(concurren)o(t)j(receiv)o(e)h(t)o(w)o(o)d(successiv)
o(ely)j(sen)o(t)e(messages,)g(then)h(the)f(t)o(w)o(o)g(messages)75
1709 y(can)k(matc)o(h)f(the)h(t)o(w)o(o)g(receiv)o(es)h(in)f(either)g(order.)
75 1816 y Fl(Progress)41 b Fx(If)12 b(a)h(pair)f(of)g(matc)o(hing)e(send)k
(and)e(receiv)o(es)i(ha)o(v)o(e)f(b)q(een)g(initiated)f(on)g(t)o(w)o(o)g(pro)
q(cesses,)j(then)e(at)g(least)75 1866 y(one)j(of)f(these)j(t)o(w)o(o)d(op)q
(erations)h(will)f(complete,)g(indep)q(enden)o(tly)i(of)e(other)i(actions)f
(in)f(the)i(system:)22 b(the)16 b(send)75 1916 y(op)q(eration)11
b(will)e(complete,)h(unless)i(the)f(receiv)o(e)h(is)f(satis\014ed)g(b)o(y)g
(another)g(message,)g(and)f(completes;)h(the)h(receiv)o(e)75
1966 y(op)q(eration)h(will)f(complete,)g(unless)i(the)g(message)f(sen)o(t)i
(is)e(consumed)g(b)o(y)g(another)h(matc)o(hing)d(receiv)o(e)k(that)e(w)o(as)
75 2016 y(p)q(osted)i(at)f(the)g(same)f(destination)h(pro)q(cess.)75
2124 y Fl(F)o(airness)42 b Fx(MPI)16 b(mak)o(es)f(no)h(guaran)o(tee)h(of)e
Fp(fairness)h Fx(in)g(the)g(handling)f(of)h(comm)o(unicati)o(on.)22
b(Supp)q(ose)17 b(that)f(a)75 2173 y(send)c(w)o(as)f(p)q(osted.)17
b(Then)12 b(it)e(is)h(p)q(ossible)g(that)g(the)g(destination)g(rep)q(eatedly)
h(p)q(osts)g(a)e(receiv)o(e)j(that)d(matc)o(hes)h(this)75 2223
y(send,)k(y)o(et)f(the)h(message)e(is)h(nev)o(er)h(receiv)o(ed,)g(b)q(ecause)
h(it)e(is)g(eac)o(h)g(time)f(o)o(v)o(ertak)o(en)h(b)o(y)g(another)h(message,)
e(sen)o(t)75 2273 y(from)d(another)j(source.)19 b(Similarl)o(y)m(,)9
b(supp)q(ose)k(that)f(a)g(receiv)o(e)i(w)o(as)e(p)q(osted.)18
b(Then)13 b(it)e(is)h(p)q(ossible)h(that)f(messages)75 2323
y(that)20 b(matc)o(h)g(this)g(receiv)o(e)i(are)e(rep)q(eatedly)i(receiv)o
(ed,)h(y)o(et)e(the)g(receiv)o(e)g(is)f(nev)o(er)i(satis\014ed,)g(b)q(ecause)
g(it)e(is)75 2373 y(o)o(v)o(ertak)o(en)12 b(b)o(y)g(other)g(receiv)o(es)i(p)q
(osted)f(at)f(this)g(no)q(de)g(\(b)o(y)g(other)h(executing)f(threads\).)19
b(It)12 b(is)g(the)g(programmer's)75 2422 y(resp)q(onsibilit)o(y)h(to)h(prev)
o(en)o(t)h(starv)n(ation)e(in)h(suc)o(h)g(situations.)158 2551
y Fo(Discussion:)158 2596 y(Need)g(to)h(b)q(e)g(discussed)g(b)o(y)g(MPIF)158
2642 y Ft(Alternativ)o(e)g(p)q(ositions:)p eop
%%Page: 6 6
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(6)158 45 y Ft(1.)25 b(Sends)17 b(are)f(handled)i(fairly;)g
(e.g.)25 b(a)16 b(p)q(osted)g(send)h(cannot)f(b)q(e)g(rep)q(eatedly)i(o)o(v)o
(ertak)o(en)f(b)o(y)f(other)g(sends.)26 b(An)75 91 y(example)16
b(of)f(an)g(implemen)o(tation)k(that)c(violates)i(this:)k(Assume)16
b(that)f(arriving)i(messages)f(are)f(k)o(ept)g(in)h(a)f(hash)h(table)75
136 y(organized)d(b)o(y)e(source,)h(and)f(that)h(a)f(receiv)o(e)h(with)f
(source=don)o(tcare)i(is)e(handled)i(b)o(y)e(searc)o(hing)i(this)f(table)g
(sequen)o(tially)n(.)75 182 y(Then)j(a)f(message)h(p)q(osted)h(at)e(the)h
(end)g(of)f(this)h(table)h(ma)o(y)e(b)q(e)h(rep)q(eatedly)h(o)o(v)o(ertak)o
(en)g(b)o(y)f(messages)g(that)f(get)h(p)q(osted)75 228 y(at)e(the)g(head)h
(of)f(the)g(table.)18 b(\(Easy)13 b(\014x:)k(rotate)d(starting)g(p)q(oin)o(t)
g(of)f(searc)o(h.\))158 273 y(2.)18 b(Receiv)o(es)d(are)e(handled)j(fairly;)e
(e.g.)k(a)13 b(p)q(osted)i(receiv)o(e)f(cannot)g(b)q(e)g(rep)q(eatedly)h(o)o
(v)o(ertak)o(en)g(b)o(y)e(other)h(receiv)o(es.)75 319 y(An)j(example)i(of)d
(an)i(implemen)o(tation)i(that)e(violates)h(this:)26 b(assume)18
b(that)f(there)g(are)g(t)o(w)o(o)g(di\013eren)o(t)i(p)q(osting)g(tables)75
365 y(for)e(receiv)o(es)h(with)f(a)g(sp)q(eci\014c)i(source)f(and)f(for)g
(receiv)o(es)h(with)g(source=don)o(tcare;)i(assume)d(further)h(that)f(these)g
(t)o(w)o(o)75 410 y(structures)i(are)f(searc)o(hed)h(in)g(a)f(\014xed)h
(order)g(when)f(a)h(message)f(arriv)o(es.)34 b(Then)18 b(a)g(receiv)o(e)i
(with)e(source=don)o(tcare)75 456 y(ma)o(y)e(b)q(e)f(rep)q(eatedly)i(o)o(v)o
(ertak)o(en)g(b)o(y)e(receiv)o(es)i(with)f(source)g(sp)q(eci\014ed.)26
b(\(Fix:)c(alternate)17 b(searc)o(h)f(order;)g(but)g(this)g(has)75
502 y(p)q(erformance)e(problems,)g(if)f(w)o(e)g(assume)h(that)f(one)g(t)o(yp)
q(e)h(of)e(receiv)o(e)i(is)g(m)o(uc)o(h)f(more)g(frequen)o(t)h(than)g(the)f
(other)g(t)o(yp)q(e.\))158 547 y(3.)k(Both)c(send)h(and)g(receiv)o(es)g(are)f
(handled)i(fairly)m(.)158 597 y(Opinions?)75 786 y Fl(Resource)20
b(limi)o(tations)39 b Fx(The)19 b(curren)o(t)g(practice)h(for)e(man)o(y)e
(commercial)g(message-passing)i(libraries)g(is)g(that)75 836
y(\(short\))g(messages)g(are)g(bu\013ered)h(b)o(y)f(the)g(system,)g(th)o(us)g
(allo)o(wing)d(blo)q(c)o(king)i(send)h(op)q(erations)g(to)g(complete)75
886 y(ahead)h(of)f(the)h(matc)o(hing)e(receiv)o(es.)34 b(It)18
b(is)h(exp)q(ected)h(that)f(man)o(y)e(MPI)i(implem)o(en)o(tations)d(will)h
(follo)o(w)g(this)75 935 y(practice,)22 b(and)d(pro)o(vide)h(the)g(same)f
(lev)o(el)g(of)g(bu\013ering)h(that)g(is)g(a)o(v)n(ailable)d(on)j(the)g
(libraries)f(they)i(replace.)75 985 y(Ho)o(w)o(ev)o(er,)e(message)g
(bu\013ering)f(is)h(not)f(a)g(univ)o(ersal)g(practice.)33 b(Ev)o(en)18
b(on)h(systems)f(where)i(bu\013ering)e(o)q(ccur,)75 1035 y(the)h(amoun)o(t)e
(of)h(bu\013er)h(space)h(a)o(v)n(ailable)c(and)i(the)i(w)o(a)o(y)d(it)i(is)f
(allo)q(cated)g(is)g(b)q(ound)h(to)f(b)q(e)h(implemen)o(tation)75
1085 y(dep)q(enden)o(t.)158 1135 y(Therefore,)12 b(message)f(bu\013ering)g
(is)f(not)h(mandated)f(b)o(y)g(MPI)h(and)g(is)g(seen)h(as)e(a)h(qualit)o(y)e
(of)h(implemen)o(tation)75 1184 y(issue.)20 b(A)14 b(v)n(alid)e(MPI)j
(implemen)o(tatio)o(n)d(of)h Fu(MPI)p 846 1184 14 2 v 15 w(SEND)g
Fx(is)h(to)g(blo)q(c)o(k)g(the)h(sender)h(un)o(til)d(a)h(matc)o(hing)e
(receiv)o(e)k(has)75 1234 y(b)q(een)h(initiated.)24 b(In)16
b(general,)g(the)h(programmer)c(can)k(mak)o(e)d(no)i(assumptions)f(on)h(the)g
(a)o(v)n(ailabilit)o(y)d(of)i(bu\013er)75 1284 y(space,)21
b(and)e(ho)o(w)f(this)h(space)h(is)f(allo)q(cated.)33 b(Th)o(us,)20
b(p)q(ortable)f(\(safe\))g(MPI)g(co)q(de)h(should)f(w)o(ork)g(under)g(the)75
1334 y(assumption)14 b(that)i(an)g(arbitrary)g(subset)h(of)e(the)h(send)h(op)
q(erations)f(are)g(going)f(to)h(return)h(b)q(efore)f(a)g(matc)o(hing)75
1384 y(receiv)o(e)f(is)f(p)q(osted,)g(and)g(the)g(rest)i(will)c(blo)q(c)o(k)i
(un)o(til)f(a)g(matc)o(hing)f(receiv)o(e)j(is)f(p)q(osted.)158
1434 y(MPI)i(implemen)o(tatio)o(n)d(will)h(pro)o(vide)h(information)e(on)i
(the)i(amoun)o(t)c(of)i(a)o(v)n(ailable)f(bu\013er)i(space)h(and)e(on)75
1483 y(the)f(bu\013ering)h(p)q(olicy)e(via)g(the)h(en)o(vironmen)o(tal)f
(enquiries)h(describ)q(ed)i(in)d(Chapter)i Fv(??)p Fx(.)158
1533 y(Examples)e(\(in)o(v)o(olving)f(t)o(w)o(o)h(pro)q(cessors)j(with)e
(ranks)g(0)f(and)h(1\))158 1583 y(The)g(follo)o(wing)e(program)g(is)i(safe,)f
(and)h(should)g(alw)o(a)o(ys)f(succeed.)75 1707 y Fu(CALL)21
b(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75 1757 y(IF)g(\(rank.EQ.0\))119
1807 y(THEN)162 1857 y(CALL)g(MPI_SEND\(sendbuf,)d(count,)j(MPI_REAL,)f(1,)h
(tag,)g(comm,)g(ierr\))162 1907 y(CALL)g(MPI_RECV\(recvbuf,)d(count,)j
(MPI_REAL,)f(1,)h(tag,)g(comm,)g(ierr\))119 1957 y(ELSE)86
b(!)22 b(rank.EQ.1)162 2006 y(CALL)f(MPI_RECV\(recvbuf,)d(count,)j(MPI_REAL,)
f(0,)h(tag,)g(comm,)g(ierr\))162 2056 y(CALL)g(MPI_SEND\(sendbuf,)d(count,)j
(MPI_REAL,)f(0,)h(tag,)g(comm,)g(context\))75 2106 y(END)g(IF)158
2181 y Fx(The)14 b(follo)o(wing)e(program)g(is)i(erroneous,)g(and)g(should)g
(alw)o(a)o(ys)f(fail.)75 2305 y Fu(CALL)21 b(MPI_COMM_RANK\(com)o(m,)e(rank,)
i(ierr\))75 2355 y(IF)g(\(rank.EQ.0\))119 2405 y(THEN)162 2455
y(CALL)g(MPI_RECV\(recvbuf,)d(count,)j(MPI_REAL,)f(1,)h(tag,)g(comm,)g
(ierr\))162 2504 y(CALL)g(MPI_SEND\(sendbuf,)d(count,)j(MPI_REAL,)f(1,)h
(tag,)g(comm,)g(ierr\))119 2554 y(ELSE)86 b(!)22 b(rank.EQ.1)162
2604 y(CALL)f(MPI_RECV\(recvbuf,)d(count,)j(MPI_REAL,)f(0,)h(tag,)g(comm,)g
(ierr\))162 2654 y(CALL)g(MPI_SEND\(sendbuf,)d(count,)j(MPI_REAL,)f(0,)h
(tag,)g(comm,)g(ierr\))75 2704 y(END)g(IF)p eop
%%Page: 7 7
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(7)158 45 y(The)13 b(receiv)o(e)h(op)q(eration)f(of)f(the)i
(\014rst)f(pro)q(cess)i(m)o(ust)d(complete)g(b)q(efore)i(its)e(send,)i(and)f
(can)g(complete)f(only)75 95 y(if)g(the)h(matc)o(hing)d(send)k(of)e(the)h
(second)g(pro)q(cessor)i(is)d(executed;)i(the)f(receiv)o(e)h(op)q(eration)f
(of)e(the)j(second)f(pro)q(cess)75 145 y(m)o(ust)j(complete)h(b)q(efore)h
(its)g(send)g(and)f(can)h(complete)e(only)h(if)f(the)i(matc)o(hing)e(send)i
(of)f(the)h(\014rst)g(pro)q(cess)h(is)75 195 y(executed.)h(This)14
b(program)e(will)g(deadlo)q(c)o(k.)158 244 y(The)i(follo)o(wing)e(program)g
(is)i(unsafe,)f(and)h(ma)o(y)e(succeed)k(or)e(fail,)e(dep)q(ending)i(on)g
(implemen)o(tatio)o(n.)75 374 y Fu(CALL)21 b(MPI_COMM_RANK\(com)o(m,)e(rank,)
i(ierr\))75 424 y(IF)g(\(rank.EQ.0\))119 474 y(THEN)162 524
y(CALL)g(MPI_SEND\(sendbuf,)d(count,)j(MPI_REAL,)f(1,)h(tag,)g(comm,)g
(ierr\))162 574 y(CALL)g(MPI_RECV\(recvbuf,)d(count,)j(MPI_REAL,)f(1,)h(tag,)
g(comm,)g(ierr\))119 623 y(ELSE)86 b(!)22 b(rank.EQ.1)162 673
y(CALL)f(MPI_SEND\(sendbuf,)d(count,)j(MPI_REAL,)f(0,)h(tag,)g(comm,)g
(ierr\))162 723 y(CALL)g(MPI_RECV\(recvbuf,)d(count,)j(MPI_REAL,)f(0,)h(tag,)
g(comm,)g(ierr\))75 773 y(END)g(IF)158 903 y Fx(The)15 b(message)g(sen)o(t)h
(b)o(y)f(eac)o(h)g(pro)q(cess)i(has)e(to)g(b)q(e)h(copied)f(out)g(b)q(efore)h
(the)g(send)g(op)q(eration)f(returns)h(and)75 952 y(the)c(receiv)o(e)h(op)q
(eration)e(starts.)19 b(F)m(or)11 b(the)h(program)e(to)h(complete,)g(it)h(is)
f(necessary)j(that)d(at)h(least)f(one)h(of)f(the)h(t)o(w)o(o)75
1002 y(messages)k(sen)o(t)i(is)e(bu\013ered.)27 b(Th)o(us,)17
b(this)f(program)f(can)i(succeed)h(only)e(if)g(the)h(comm)o(unicati)o(on)d
(system)i(has)75 1052 y(su\016cien)o(t)d(bu\013er)g(space)g(to)g(bu\013er)g
Fu(count)e Fx(w)o(ords)i(of)e(data,)h(and)g(the)h(MPI)g(implemen)o(tatio)o(n)
d(bu\013ers)j(messages.)75 1187 y Fw(1.5)59 b(Data)19 b(T)-5
b(yp)r(e)19 b(Matching)75 1278 y Fx(One)c(can)f(think)f(of)h(message)f
(transmission)g(as)h(consisting)g(of)f(three)i(phases:)126
1352 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 1431 y(2.)20 b(A)14
b(message)f(is)h(transferred)i(from)c(sender)j(to)f(receiv)o(er)126
1509 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
1583 y(T)o(yp)q(e)g(matc)o(hing)e(has)i(to)f(b)q(e)i(observ)o(ed)f(at)g(eac)o
(h)g(of)f(these)i(three)g(phases:)21 b(The)15 b(t)o(yp)q(e)h(of)e(eac)o(h)h
(v)n(ariable)e(in)75 1633 y(the)18 b(sender)h(bu\013er)g(has)e(to)h(matc)o(h)
e(the)i(t)o(yp)q(e)g(sp)q(eci\014ed)h(for)e(that)h(en)o(try)g(b)o(y)f(the)h
(send)h(op)q(eration;)f(the)g(t)o(yp)q(e)75 1683 y(sp)q(eci\014ed)g(b)o(y)e
(the)h(send)g(op)q(eration)f(has)g(to)g(matc)o(h)g(the)g(t)o(yp)q(e)h(sp)q
(eci\014ed)h(b)o(y)e(the)h(receiv)o(e)g(op)q(eration;)g(and)f(the)75
1733 y(t)o(yp)q(e)j(of)e(eac)o(h)i(v)n(ariable)e(in)g(the)i(receiv)o(e)g
(bu\013er)g(has)f(to)g(matc)o(h)f(the)i(t)o(yp)q(e)f(sp)q(eci\014ed)i(for)e
(that)g(en)o(try)h(b)o(y)e(the)75 1783 y(receiv)o(e)e(op)q(eration.)j(A)c
(program)e(that)i(fails)f(to)h(observ)o(e)h(these)g(three)g(rules)g(is)e
(erroneous.)158 1833 y(T)m(o)j(de\014ne)j(t)o(yp)q(e)e(matc)o(hing)f(more)g
(precisely)m(,)i(w)o(e)g(need)g(to)f(deal)g(with)g(t)o(w)o(o)f(issues:)26
b(matc)o(hing)15 b(of)i(t)o(yp)q(es)75 1882 y(of)f(the)h(host)g(language)f
(with)g(t)o(yp)q(es)h(sp)q(eci\014ed)i(in)d(comm)o(unicati)o(on)e(op)q
(erations;)k(and)e(matc)o(hing)f(of)h(t)o(yp)q(es)h(at)75 1932
y(sender)e(and)f(receiv)o(er.)158 1982 y(A)k(t)o(yp)q(e)h(sp)q(eci\014ed)h
(for)d(an)h(en)o(try)h(b)o(y)f(a)g(send)h(op)q(eration)f(matc)o(hes)f(the)i
(t)o(yp)q(e)g(sp)q(eci\014ed)g(for)f(that)g(en)o(try)75 2032
y(b)o(y)d(a)f(receiv)o(e)i(op)q(eration)f(if)f(b)q(oth)h(op)q(erations)g(use)
h(iden)o(tical)e(names:)19 b Fu(MPI)p 1289 2032 14 2 v 15 w(INTEGER)13
b Fx(matc)o(hes)i Fu(MPI)p 1699 2032 V 15 w(INTEGER)p Fx(,)75
2082 y Fu(MPI)p 144 2082 V 15 w(REAL)e Fx(matc)o(hes)h Fu(MPI)p
487 2082 V 15 w(REAL)p Fx(,)e(and)i(so)g(on.)158 2131 y(The)19
b(t)o(yp)q(e)g(of)g(a)f(v)n(ariable)g(in)g(a)g(host)h(program)f(matc)o(hes)g
(the)h(t)o(yp)q(e)h(sp)q(eci\014ed)g(in)e(the)h(comm)o(unication)75
2181 y(op)q(eration)e(if)f(the)i(datat)o(yp)q(e)f(name)e(used)j(b)o(y)f(that)
g(op)q(eration)g(corresp)q(onds)i(to)e(the)g(basic)g(t)o(yp)q(e)h(of)e(the)i
(host)75 2231 y(program)8 b(v)n(ariable:)15 b(an)9 b(en)o(try)i(with)e(t)o
(yp)q(e)h(name)f Fu(MPI)p 920 2231 V 15 w(INTEGER)f Fx(matc)o(hes)h(a)h(F)m
(ortran)f(v)n(ariable)g(of)g(t)o(yp)q(e)h Fu(INTEGER)p Fx(,)75
2281 y(an)i(en)o(try)h(with)e(t)o(yp)q(e)i(name)e Fu(MPI)p
600 2281 V 15 w(REAL)g Fx(matc)o(hes)h(a)g(F)m(ortran)f(v)n(ariable)g(of)h(t)
o(yp)q(e)h Fu(REAL)p Fx(,)d(and)i(so)g(on.)18 b(There)13 b(is)f(one)75
2331 y(exception)17 b(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 Fu(MPI)p 1137 2331 V 15 w(BYTE)i Fx(can)g(b)q(e)g(used)h
(to)f(matc)o(h)f(an)o(y)g(b)o(yte)i(of)75 2380 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 2430
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 2480 y(memory)m(.)158 2530 y(W)m(e)c(th)o(us)g(ha)o(v)o(e)g(t)o
(w)o(o)f(cases:)137 2604 y Fn(\017)21 b Fx(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
Fu(MPI)p 1541 2604 V 15 w(BYTE)p Fx(\),)h(where)h(the)179 2654
y(datat)o(yp)q(es)15 b(of)g(the)g(corresp)q(onding)h(en)o(tries)g(in)e(the)i
(sender)g(program,)d(in)i(the)g(send)h(call,)e(in)g(the)i(receiv)o(e)179
2704 y(call)d(and)h(in)f(the)i(receiv)o(er)g(program)d(should)i(all)f(matc)o
(h.)p eop
%%Page: 8 8
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(8)137 45 y Fn(\017)21 b Fx(Comm)o(uni)o(cation)15
b(of)i(un)o(t)o(yp)q(ed)i(v)n(alues)f(\(e.g.,)g(of)f(datat)o(yp)q(e)i
Fu(MPI)p 1237 45 14 2 v 15 w(BYTE)p Fx(\),)d(where)k(b)q(oth)e(sender)i(and)d
(re-)179 95 y(ceiv)o(er)e(use)h(the)f(datat)o(yp)q(e)g Fu(MPI)p
686 95 V 15 w(BYTE)p Fx(.)e(In)h(this)h(case,)g(there)h(are)f(no)g
(requiremen)o(ts)f(on)h(the)g(t)o(yp)q(es)g(of)f(the)179 145
y(corresp)q(onding)h(en)o(tries)g(in)e(the)i(sender)h(and)e(the)g(receiv)o
(er)i(programs,)c(nor)i(is)g(it)g(required)h(that)f(they)g(b)q(e)179
195 y(the)g(same.)158 275 y(Examples:)158 325 y(1st)g(program:)75
406 y Fu(CALL)21 b(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75
456 y(IF\(rank.EQ.0\))119 506 y(THEN)162 555 y(CALL)g(MPI_SEND\(a\(1\),)e
(10,)i(MPI_REAL,)f(1,)i(tag,)e(comm,)h(ierr\))119 605 y(ELSE)162
655 y(CALL)g(MPI_RECV\(a\(1\),)e(15,)i(MPI_REAL,)f(0,)i(tag,)e(comm,)h
(ierr\))75 705 y(END)g(IF)158 786 y Fx(This)12 b(co)q(de)i(is)e(correct)i(if)
e(b)q(oth)g(sender)j(and)d(receiv)o(er)i(programs)d(ha)o(v)o(e)h(allo)q
(cated)g(consecutiv)o(e)i(storage)f(for)75 835 y(ten)h(real)g(n)o(um)o(b)q
(ers,)f(starting)h(from)e Fu(a\(1\))p Fx(.)75 885 y(2nd)i(program:)75
966 y Fu(CALL)21 b(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75
1016 y(IF\(rank.EQ.0\))119 1066 y(THEN)162 1116 y(CALL)g(MPI_SEND\(a\(1\),)e
(10,)i(MPI_REAL,)f(1,)i(tag,)e(comm,)h(ierr\))119 1165 y(ELSE)162
1215 y(CALL)g(MPI_RECV\(a\(1\),)e(40,)i(MPI_BYTE,)f(0,)i(tag,)e(comm,)h
(ierr\))75 1265 y(END)g(IF)158 1346 y Fx(This)12 b(co)q(de)h(is)e(erroneous,)
j(since)e(sender)i(and)d(receiv)o(er)j(do)e(not)f(pro)o(vide)h(matc)o(hing)e
(datat)o(yp)q(e)i(parameters.)75 1396 y(3rd)i(program:)75 1476
y Fu(CALL)21 b(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75
1526 y(IF\(rank.EQ.0\))119 1576 y(THEN)162 1626 y(CALL)g(MPI_SEND\(a\(1\),)e
(40,)i(MPI_BYTE,)f(1,)i(tag,)e(comm,)h(ierr\))119 1676 y(ELSE)162
1725 y(CALL)g(MPI_RECV\(a\(1\),)e(60,)i(MPI_BYTE,)f(0,)i(tag,)e(comm,)h
(ierr\))75 1775 y(END)g(IF)158 1856 y Fx(This)14 b(co)q(de)h(is)e(correct,)i
(irresp)q(ectiv)o(e)h(of)d(the)i(t)o(yp)q(e)f(of)g Fu(a\(1\))f
Fx(and)g(follo)o(wing)f(v)n(ariables)h(in)g(store.)158 1984
y Fo(Discussion:)158 2030 y Ft(The)k(b)q(eha)o(vior)i(of)e(erroneous)h(co)q
(de)g(is)g(implemen)o(tation-dep)r(end)q(en)o(t.)32 b(It)17
b(is)g(desirable)j(but)d(not)h(required)h(that)75 2076 y(errors)13
b(are)g(rep)q(orted)h(at)f(run-time.)k(An)c(MPI)g(implemen)o(tation)j(ma)o(y)
d(decide)h(to)f(a)o(v)o(oid)h(t)o(yp)q(e-c)o(hec)o(king)h(for)e(the)g(sak)o
(e)g(of)75 2121 y(e\016ciency)m(,)i(in)g(whic)o(h)g(case)f(none)h(of)e(the)h
(three)h(programs)g(will)g(rep)q(ort)f(an)h(error.)20 b(On)14
b(a)g(system)g(where)g(real)h(n)o(um)o(b)q(ers)75 2167 y(o)q(ccup)o(y)g(four)
f(b)o(ytes)g(and)g(b)q(oth)g(sender)h(and)f(receiv)o(er)h(execute)f(in)h(the)
f(same)g(en)o(vironmen)o(t,)h(it)f(is)h(lik)o(ely)h(that)e(all)h(three)75
2213 y(co)q(des)f(will)g(ha)o(v)o(e)g(the)f(same)g(b)q(eha)o(vior.)75
2432 y Fw(1.6)59 b(Data)19 b(conversion)75 2523 y Fx(One)g(of)e(the)h(goals)f
(of)g(MPI)h(is)g(to)g(supp)q(ort)g(parallel)f(computations)g(across)h
(heterogeneous)i(en)o(vironmen)o(ts.)75 2573 y(Comm)o(uni)o(cation)11
b(in)i(a)h(heterogeneous)i(en)o(vironmen)o(t)d(ma)o(y)f(require)i(data)g(con)
o(v)o(ersions.)158 2623 y(W)m(e)g(use)g(the)h(follo)o(wing)c(terminology:)75
2704 y Fv(t)o(yp)q(e)k(con)o(v)o(ersion)j Fx(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
Fu(REAL)g Fx(to)h(an)g Fu(INTEGER)p Fx(.)p eop
%%Page: 9 9
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(9)75 45 y Fv(represen)o(tati)o(on)12 b(con)o(v)o(ersion)18
b Fx(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 95 y(p)q(oin)o(t)d(to)h(IEEE)g
(\015oating)f(p)q(oin)o(t.)158 178 y(Represen)o(tation)20 b(con)o(v)o(ersion)
f(is)g(needed)i(when)e(data)g(is)g(mo)o(v)o(ed)f(across)h(di\013eren)o(t)i
(en)o(vironmen)o(ts,)e(e.g.)75 228 y(di\013eren)o(t)h(mac)o(hines)d(that)i
(use)g(di\013eren)o(t)h(binary)e(enco)q(dings)h(for)f(the)h(same)f(datat)o
(yp)q(e,)h(or)g(co)q(des)h(compiled)75 278 y(with)d(di\013eren)o(t)h
(compiler)e(options)h(for)g(datat)o(yp)q(e)h(represen)o(tation.)30
b(Represen)o(tation)18 b(con)o(v)o(ersion)g(preserv)o(es,)75
327 y(to)d(the)g(greatest)h(p)q(ossible)f(exten)o(t,)h(the)f
Fv(v)m(alue)g Fx(represen)o(ted.)23 b(Ho)o(w)o(ev)o(er,)15
b(rounding)g(errors)h(and)f(o)o(v)o(er\015o)o(w)f(and)75 377
y(under\015o)o(w)i(exceptions)h(ma)o(y)d(o)q(ccur)j(during)e(\015oating)g(p)q
(oin)o(t)g(con)o(v)o(ersions;)i(con)o(v)o(ersion)f(of)f(in)o(tegers)i(ma)o(y)
d(also)75 427 y(lead)i(to)h(exceptions)g(when)g(a)f(v)n(alue)g(that)h(can)f
(represen)o(ted)j(in)d(one)h(system)f(cannot)h(b)q(e)g(represen)o(ted)i(in)d
(the)75 477 y(other)f(system.)i(MPI)d(do)q(es)h(not)f(sp)q(ecify)g(rules)h
(for)e(represen)o(tation)j(con)o(v)o(ersion.)158 527 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 576 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
626 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 676 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 726 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
776 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 Fu(MPI)p 1180 776 14 2 v 15 w(BYTE)p
Fx(\),)e(then)h(the)h(binary)e(represen)o(tation)75 826 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
875 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
925 y(no)e(represen)o(tation)h(con)o(v)o(ersion)f(is)g(required.)158
975 y(Note)f(that)g(no)g(con)o(v)o(ersion)g(ev)o(er)h(o)q(ccurs)g(when)g(an)e
(MPI)h(program)f(executes)j(in)d(a)h(homogeneous)f(system,)75
1025 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
Fu(MPI)p 1695 1025 V 15 w(BYTE)g Fx(and)75 1075 y(of)18 b Fu(MPI)p
196 1075 V 15 w(CHARACTER)p Fx(.)f(A)h(bu\013er)i(descriptor)g(en)o(try)f
(with)g(datat)o(yp)q(e)g(of)f Fu(MPI)p 1320 1075 V 15 w(CHARACTER)f
Fx(can)i(only)f(matc)o(h)f(a)75 1124 y(F)m(ortran)e(v)n(ariable)f(of)h(t)o
(yp)q(e)g Fu(CHARACTER)p Fx(;)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
1174 y Fu(MPI)p 144 1174 V 15 w(CHARACTER)e Fx(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
1224 y(Consider)g(the)h(previous)f(three)h(examples.)158 1274
y(The)h(\014rst)h(program)d(is)i(correct,)h(assuming)d(b)q(oth)i(sender)i
(and)d(receiv)o(er)j(declared)e(ten)h(consecutiv)o(e)g(real)75
1324 y(v)n(ariables)e(in)g(storage)g(starting)h(at)f Fu(a\(1\))p
Fx(.)22 b(If)15 b(the)h(sender)h(and)e(receiv)o(er)i(execute)g(in)e
(di\013eren)o(t)h(en)o(vironmen)o(ts,)75 1373 y(then)d(the)f(ten)h(real)f(v)n
(alues)g(that)g(are)h(fetc)o(hed)g(from)d(the)j(send)g(bu\013er)g(will)e(b)q
(e)h(con)o(v)o(erted)i(to)e(the)g(represen)o(tation)75 1423
y(for)j(reals)g(on)f(the)i(receiv)o(er)g(site)g(b)q(efore)f(they)h(are)f
(stored)h(in)e(the)i(receiv)o(e)g(bu\013er.)22 b(While)14 b(the)i(n)o(um)o(b)
q(er)e(of)g(real)75 1473 y(elemen)o(ts)e(fetc)o(hed)i(from)c(the)j(send)h
(bu\013er)f(equal)f(the)h(n)o(um)o(b)q(er)f(of)g(real)g(elemen)o(ts)g(stored)
i(in)e(the)h(receiv)o(e)g(bu\013er,)75 1523 y(the)j(n)o(um)o(b)q(er)e(of)h(b)
o(ytes)h(stored)g(need)g(not)f(equal)g(the)g(n)o(um)o(b)q(er)g(of)f(b)o(ytes)
i(loaded:)k(e.g.)i(the)15 b(sender)i(ma)o(y)c(use)j(a)75 1573
y(four)11 b(b)o(yte)h(represen)o(tation)h(and)e(the)i(receiv)o(er)g(an)e
(eigh)o(t)g(b)o(yte)h(represen)o(tation)h(for)e(reals.)18 b(If)11
b(the)h(send)g(or)g(receiv)o(e)75 1623 y(bu\013er)i(do)e(not)g(con)o(tain)g
(ten)i(consecutiv)o(e)g(real)e(v)n(ariables,)g(then)h(the)g(program)e(is)i
(erroneous,)g(and)g(its)f(b)q(eha)o(vior)75 1672 y(is)i(unde\014ned.)158
1722 y(The)g(second)h(program)e(is)g(erroneous,)i(and)f(its)g(b)q(eha)o(vior)
f(is)h(unde\014ned.)158 1772 y(The)e(third)g(program)e(is)h(correct.)19
b(The)12 b(exact)g(same)f(sequence)j(of)d(fort)o(y)g(b)o(ytes)h(that)g(w)o
(ere)g(loaded)g(from)d(the)75 1822 y(send)k(bu\013er)h(will)d(b)q(e)i(stored)
g(in)f(the)h(receiv)o(e)h(bu\013er,)f(ev)o(en)g(if)f(sender)i(and)e(receiv)o
(er)i(run)f(in)f(a)g(di\013eren)o(t)h(en)o(viron-)75 1872 y(men)o(t.)k(The)d
(message)f(sen)o(t)h(has)g(exactly)g(the)g(same)e(length)i(\(in)f(b)o(ytes\))
h(and)g(the)g(same)e(binary)h(represen)o(tation)75 1921 y(as)h(the)h(message)
f(receiv)o(ed.)20 b(If)13 b(the)i(v)n(ariables)f(in)f(the)i(send)g(bu\013er)g
(are)g(of)e(di\013eren)o(t)i(t)o(yp)q(es)g(as)f(the)h(v)n(ariables)e(in)75
1971 y(the)g(receiv)o(e)i(bu\013er,)e(or)g(they)g(are)g(of)g(the)g(same)f(t)o
(yp)q(e)h(but)g(di\013eren)o(t)h(data)e(represen)o(tations)j(are)e(used,)h
(then)f(the)75 2021 y(bits)i(stored)g(in)g(the)g(receiv)o(e)h(bu\013er)f(ma)o
(y)e(enco)q(de)j(v)n(alues)e(that)h(are)g(di\013eren)o(t)h(from)d(the)i(v)n
(alues)f(they)i(enco)q(ded)75 2071 y(in)d(the)i(send)g(bu\013er.)158
2121 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 2170 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 2220 y(The)h(curren)o(t)h(draft)e
(do)q(es)h(not)g(pro)o(vide)f(a)g(mec)o(hanism)e(for)i(in)o(ter-language)g
(comm)o(unication:)j(messages)75 2270 y(sen)o(t)g(b)o(y)f(F)m(ortran)f(calls)
h(should)g(b)q(e)g(receiv)o(ed)i(b)o(y)d(F)m(ortran)h(calls)g(and)g(messages)
g(sen)o(t)g(b)o(y)g(C)g(calls)g(should)f(b)q(e)75 2320 y(receiv)o(ed)g(b)o(y)
f(C)f(calls)h(\(this)g(follo)o(ws)e(from)g(the)i(requiremen)o(ts)g(of)f(t)o
(yp)q(e)i(matc)o(hing)d(and)h(the)i(fact)e(that)h(F)m(ortran)75
2370 y(and)f(C)g(datat)o(yp)q(es)g(are)h(distinct\).)k(If)13
b(in)o(ter-language)h(comm)o(unicati)o(on)d(is)j(needed)i(then)e(one)h(needs)
g(to)f(in)o(v)o(ok)o(e)75 2420 y(C)j(comm)o(unication)d(routines)k(from)e(a)h
(F)m(ortran)g(program)e(or)j(F)m(ortran)f(comm)o(unicatio)o(n)e(routines)i
(from)f(a)h(C)75 2469 y(program.)158 2598 y Fo(Implemen)o(tation)c(note:)158
2643 y Ft(The)j(curren)o(t)g(de\014nition)i(do)q(es)e(not)g(require)h
(messages)f(to)g(carry)g(data)g(t)o(yp)q(e)g(information.)27
b(A)15 b(message)i(can)f(b)q(e)75 2689 y(comp)q(osed)h(and)f(sen)o(t)f(using)
i(only)g(the)e(information)j(pro)o(vided)f(b)o(y)f(the)g(send)g(call,)h(and)f
(can)g(b)q(e)f(receiv)o(ed)i(and)f(stored)p eop
%%Page: 10 10
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(10)75 45 y Ft(using)12 b(only)g(the)f(information)i(pro)o
(vided)g(b)o(y)e(the)g(receiv)o(e)h(call.)18 b(If)10 b(messages)h(are)g(sen)o
(t)g(b)q(et)o(w)o(een)h(di\013eren)o(t)g(mac)o(hines)g(then)75
91 y(one)i(can)h(either)f(use)h(a)f(\\univ)o(ersal")i(data)f(enco)q(ding)h
(for)d(messages,)i(use)f(kno)o(wledge)i(of)d(the)h(receiv)o(er)h(en)o
(vironmen)o(t)h(in)75 136 y(order)f(to)g(con)o(v)o(ert)h(data)f(at)g(the)g
(sender,)g(or)g(use)h(kno)o(wledge)g(of)f(the)g(sender)g(en)o(vironmen)o(t)i
(in)f(order)f(to)g(con)o(v)o(ert)g(data)75 182 y(at)g(the)g(receiv)o(er.)23
b(In)15 b(either)h(case)f(the)g(datat)o(yp)q(e)h(parameter)f(in)h(the)f(lo)q
(cal)i(call)f(can)f(b)q(e)g(used)h(to)f(deriv)o(e)h(the)f(t)o(yp)q(es)g(of)75
228 y(the)g(v)n(alues)g(transferred.)22 b(Ho)o(w)o(ev)o(er,)14
b(additional)k(t)o(yp)q(e)d(information)h(carried)f(b)o(y)g(messages)g(can)g
(pro)o(vide)h(b)q(etter)f(error)75 273 y(detection.)158 484
y Fo(Discussion:)158 530 y Ft(MPI)e(do)q(es)h(not)f(handle)i(in)o
(ter-language)h(comm)o(unication)g(b)q(ecause)e(there)f(seem)h(to)f(b)q(e)g
(no)h(agreed)f(standards)i(for)75 576 y(in)o(ter-language)g(t)o(yp)q(e)d(con)
o(v)o(ersions.)19 b(The)12 b(curren)o(t)h(\(non\)solution)i(means)d(that)h
(in)o(ter-language)i(comm)o(unication)f(relies)75 621 y(on)f(the)g(v)o(endor)
h(sp)q(eci\014c)h(rules)f(for)f(in)o(ter-language)j(calls)e(at)f(eac)o(h)g
(site.)158 667 y(It)f(ma)o(y)h(b)q(e)g(desireable)h(to)f(pro)o(vide)h
(information)g(on)f(the)g(corresp)q(ondance)i(b)q(et)o(w)o(een)d(MPI)h(C)f
(datat)o(yp)q(es)i(\(suc)o(h)f(as)75 713 y Fm(MPI)p 137 713
12 2 v 13 w(FLOAT)p Ft(\))e(and)i(MPI)g(F)m(ortran)h(datat)o(yp)q(es)g(\(suc)
o(h)g(as)f Fm(MPI)p 963 713 V 13 w(REAL)p Ft(\))e(with)i(suitable)i(en)o
(vironmen)o(t)g(query)f(functions.)75 933 y Fw(1.7)59 b(Comm)n(unicat)o(ion)
17 b(Mo)r(des)75 1024 y Fx(The)12 b(basic)g(send)h(op)q(eration)f(describ)q
(ed)i(in)d(Section)h(1.2)f(used)i(the)g Fv(standard)d Fx(comm)o(uni)o(cation)
f(mo)q(de.)16 b(In)c(suc)o(h)75 1073 y(a)18 b(comm)o(unicati)o(on)d(mo)q(de,)
j(a)f(send)i(op)q(eration)f(can)g(b)q(e)h(started)g(whether)g(or)f(not)g(a)g
(matc)o(hing)e(receiv)o(e)j(w)o(as)75 1123 y(p)q(osted.)f(The)13
b(completion)d(of)i(the)g(send)h(op)q(eration)f(indicates)g(that)g(the)h
(message)f(and)f(its)i(en)o(v)o(elop)q(e)f(ha)o(v)o(e)g(b)q(een)75
1173 y(safely)17 b(stored)h(a)o(w)o(a)o(y)d(and)i(that)g(the)h(sender)g(is)f
(free)h(to)e(access)j(and)e(mo)q(dify)e(the)i(sender)i(bu\013er.)28
b(Th)o(us,)17 b(the)75 1223 y(op)q(eration)f(is)g Fv(blo)q(c)o(king)p
Fx(:)k(it)c(do)q(es)g(not)g(return)h(un)o(til)f(the)g(send)h(op)q(eration)f
(has)g(completed)g Fv(lo)q(cally)p Fx(,)f(on)g(the)75 1273
y(sender)g(side.)158 1322 y(The)h(completion)e(of)i(a)f(send)i(op)q(eration)e
(giv)o(es)h(no)g(indication)e(that)i(the)g(message)g(w)o(as)g(receiv)o(ed)h
(on)e(the)75 1372 y(receiv)o(er)k(side.)29 b(A)17 b(blo)q(c)o(king)g(send)h
(ma)o(y)d(b)q(e)j(implemen)o(ted)d(so)j(that)f(a)g(blo)q(c)o(king)g(send)h
(returns)h(only)e(after)g(a)75 1422 y(matc)o(hing)9 b(receiv)o(e)k(has)e(b)q
(een)i(executed)g(on)e(the)g(receiv)o(er)i(side.)18 b(This)11
b(a)o(v)o(oids)f(the)i(need)g(to)f(bu\013er)h(message)f(data)75
1472 y(out)i(of)f(sender)i(or)e(receiv)o(er)j(memory)m(.)f(In)f(this)g(case)g
(the)g(send)h(op)q(eration)e(completes)h(only)f(after)h(the)g(matc)o(hing)75
1522 y(receiv)o(e)18 b(has)g(started)g(executing.)28 b(On)17
b(the)h(other)g(hand,)f(it)g(is)g(also)f(p)q(ossible)h(for)g(MPI)g(to)g
(bu\013er)h(messages,)75 1572 y(so)d(as)h(to)f(allo)o(w)f(the)i(sender)h(to)e
(pro)q(ceed)i(ahead)f(of)e(the)i(receiv)o(er.)24 b(In)16 b(suc)o(h)g(a)f
(case)h(the)g(send)h(op)q(eration)e(ma)o(y)75 1621 y(complete)e(successfully)
i(b)q(efore)g(the)g(message)e(w)o(as)h(receiv)o(ed.)20 b(Th)o(us,)13
b(the)i(basic)f(send)h(op)q(eration)f(describ)q(ed)h(in)75
1671 y(the)h(previous)g(section)g(is)g Fv(async)o(hronous)p
Fx(,)c(since)17 b(its)e(return)i(do)q(es)f(not)f(imply)f(a)h(sync)o
(hronization)g(with)g(the)75 1721 y(\(remote\))f(receiv)o(e)h(op)q(eration,)e
(and)h(do)q(es)h(not)e(imply)f Fv(global)g Fx(termination)g(of)h(the)i(comm)o
(uni)o(cation.)158 1771 y(There)g(are)f(t)o(w)o(o)g(additional)e(comm)o
(unicatio)o(n)f(mo)q(des:)158 1821 y(A)j(send)h(that)f(uses)h(the)f
Fv(ready)g Fx(comm)o(uni)o(cation)d(mo)q(de)i(ma)o(y)f(b)q(e)i(started)h
(only)e(if)g(a)h(matc)o(hing)e(receiv)o(e)j(is)75 1870 y(already)d(p)q
(osted;)h(otherwise)g(the)g(op)q(eration)f(is)g(erroneous)i(and)e(its)g
(outcome)g(is)g(unde\014ned.)19 b(In)12 b(some)f(systems,)75
1920 y(this)h(allo)o(ws)e(the)i(remo)o(v)n(al)d(of)i(a)g(hand-shak)o(e)h(op)q
(eration)g(that)f(is)h(otherwise)g(required,)h(and)e(results)i(in)e(impro)o
(v)o(ed)75 1970 y(p)q(erformance.)24 b(The)17 b(completion)d(of)i(the)g(send)
h(op)q(eration)f(do)q(es)h(not)f(dep)q(end)h(on)f(the)h(status)g(of)e(a)h
(matc)o(hing)75 2020 y(receiv)o(e,)i(and)e(merely)g(indicates)h(that)g(the)g
(send)g(bu\013er)h(can)f(b)q(e)g(reused.)27 b(A)17 b(send)h(op)q(eration)e
(that)h(uses)g(the)75 2070 y(ready)i(mo)q(de)e(has)i(the)g(same)e(seman)o
(tics)h(as)h(a)f(standard)h(send)g(op)q(eration.)32 b(It)18
b(is)g(merely)g(that)g(the)h(sender)75 2120 y(pro)o(vides)14
b(additional)e(information)f(to)j(the)g(comm)o(unication)d(subsystem,)i(when)
i(using)e(the)i(ready)f(mo)q(de.)158 2169 y(A)e(send)h(that)f(uses)h(the)g
Fv(sync)o(hronous)c Fx(mo)q(de)i(can)i(b)q(e)f(started)h(whether)h(or)e(not)g
(a)g(matc)o(hing)e(receiv)o(e)j(w)o(as)75 2219 y(p)q(osted.)23
b(Ho)o(w)o(ev)o(er,)16 b(the)g(send)g(will)e(complete)g(successfully)j(only)d
(if)h(a)g(matc)o(hing)e(receiv)o(e)k(is)e(p)q(osted,)h(and)f(the)75
2269 y(receiv)o(e)g(op)q(eration)e(has)g(started)h(to)f(receiv)o(e)i(the)f
(message)f(sen)o(t)h(b)o(y)f(the)h(sync)o(hronous)g(send.)k(\(I.e.,)13
b(the)h(receiv)o(e)75 2319 y(has)j(b)q(een)g(p)q(osted,)h(and)f(the)g
(incoming)d(message)j(has)f(b)q(een)i(matc)o(hed)e(to)g(this)h(p)q(osted)h
(receiv)o(e.\))27 b(Th)o(us,)17 b(the)75 2369 y(completion)e(of)h(a)g(sync)o
(hronous)h(send)h(not)e(only)g(indicates)h(that)f(the)i(send)f(bu\013er)h
(can)e(b)q(e)h(reused,)i(but)e(also)75 2418 y(indicates)f(that)f(the)h
(receiv)o(er)h(has)f(reac)o(hed)h(a)e(certain)h(p)q(oin)o(t)f(in)g(its)h
(execution,)g(namely)e(that)h(it)g(has)h(started)75 2468 y(executing)g(the)f
(matc)o(hing)e(receiv)o(e.)23 b(If)14 b(b)q(oth)h(sends)i(and)d(receiv)o(es)j
(are)e(blo)q(c)o(king)f(op)q(erations)i(then)f(the)h(use)g(of)75
2518 y(the)f(sync)o(hronous)h(mo)q(de)e(pro)o(vides)h(sync)o(hronous)g(comm)o
(unication)d(seman)o(tics:)19 b(a)14 b(comm)o(unication)e(do)q(es)j(not)75
2568 y(complete)f(at)h(either)g(ends)h(b)q(efore)f(b)q(oth)g(pro)q(cesses)i
(\\attend")e(to)g(the)g(comm)o(unicatio)o(n;)d(the)j(completion)e(of)h(a)75
2618 y(sync)o(hronous)h(send)g(is)e(a)h Fv(global)e Fx(ev)o(en)o(t.)158
2667 y(Tw)o(o)h(additional)f(send)j(functions)f(are)g(pro)o(vided)g(for)f
(the)i(t)o(w)o(o)e(additional)f(comm)o(unicatio)o(n)f(mo)q(des.)18
b(The)p eop
%%Page: 11 11
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(11)75 45 y(comm)o(unication)10 b(mo)q(de)j(is)h(indicated)g(b)
o(y)g(a)f(one)h(letter)h(pre\014x:)k Fu(R)13 b Fx(for)h(ready)g(and)g
Fu(S)g Fx(for)f(sync)o(hronous)158 145 y(Send)h(in)g(ready)g(mo)q(de)75
242 y Fu(MPI)p 144 242 14 2 v 15 w(RSEND)21 b(\(start,)f(count,)h(datatype,)f
(dest,)g(tag,)h(comm\))117 292 y Ft(in)14 b Fu(start)675 b
Ft(initial)16 b(address)e(of)e(send)i(bu\013er)g(\(c)o(hoice\))117
337 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)14 b(of)e(elemen)o(ts)i(in)g
(send)g(bu\013er)g(\(in)o(teger\))117 383 y(in)g Fu(datatype)609
b Ft(datat)o(yp)q(e)14 b(of)f(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)117
429 y(in)g Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
474 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
520 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))158
696 y Fx(Send)g(in)g(sync)o(hronous)h(mo)q(de)75 793 y Fu(MPI)p
144 793 V 15 w(SSEND)21 b(\(start,)f(count,)h(datatype,)f(dest,)g(tag,)h
(comm\))117 843 y Ft(in)14 b Fu(start)675 b Ft(initial)16 b(address)e(of)e
(send)i(bu\013er)g(\(c)o(hoice\))117 888 y(in)g Fu(count)675
b Ft(n)o(um)o(b)q(er)14 b(of)e(elemen)o(ts)i(in)g(send)g(bu\013er)g(\(in)o
(teger\))117 934 y(in)g Fu(datatype)609 b Ft(datat)o(yp)q(e)14
b(of)f(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)117 980 y(in)g
Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
1025 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
1071 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))158
1147 y Fx(There)g(is)e(only)g(one)g(receiv)o(e)i(mo)q(de,)d(whic)o(h)h(can)h
(matc)o(h)e(an)o(y)h(of)g(the)h(send)h(mo)q(des.)i(The)d(receiv)o(e)h(op)q
(eration)75 1197 y(describ)q(ed)h(in)e(the)h(last)g(section)g(is)f
Fv(blo)q(c)o(king)p Fx(:)j(it)d(returns)i(only)d(after)i(the)g(receiv)o(e)h
(bu\013er)g(con)o(tains)e(the)h(newly)75 1247 y(receiv)o(ed)20
b(message.)34 b(It)19 b(is)g Fv(async)o(hronous)p Fx(:)25 b(the)20
b(completion)d(of)i(a)f(receiv)o(e)j(is)e(a)f(lo)q(cal)h(op)q(eration,)g(and)
g(a)75 1297 y(receiv)o(e)c(can)f(complete)f(b)q(efore)i(the)f(matc)o(hing)e
(send)i(has)g(completed)f(\(of)h(course,)g(it)g(can)g(complete)f(only)g
(after)75 1347 y(the)h(matc)o(hing)f(send)h(has)g(started\).)158
1396 y(Comm)o(uni)o(cation)f(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 1446 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 1496 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 1546 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 1596 y(is)h(started.)28
b(No)17 b(other)g(order)h(is)f(imp)q(osed)f(b)o(y)g(MPI.)h(E.g.,)f(if)g(the)i
(standard)f(send)h(mo)q(de)e(is)g(used,)j(the)e(send)75 1645
y(op)q(eration)d(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.)158 1695 y(In)d(a)f(m)o(ulti-threaded)f(implemen)o
(tation)e(of)j(MPI,)h(a)f(blo)q(c)o(king)f(send)j(or)f(receiv)o(e)g(op)q
(eration)g(ma)o(y)e(only)g(blo)q(c)o(k)75 1745 y(the)15 b(executing)h
(thread,)f(not)g(the)g(en)o(tire)h(pro)q(cess.)22 b(Th)o(us,)15
b(while)g(a)f(thread)i(is)e(blo)q(c)o(k)o(ed)h(w)o(aiting)e(for)i(a)f(send)i
(or)75 1795 y(receiv)o(e)i(to)f(complete,)g(other)g(threads)h(ma)o(y)d
(execute)k(within)d(the)i(same)e(address)i(space.)28 b(In)17
b(suc)o(h)h(a)e(case)i(it)75 1845 y(the)d(user)h(resp)q(onsibilit)o(y)f(not)f
(to)h(mo)q(dify)d(the)k(send)f(bu\013er)h(un)o(til)e(the)h(send)h(completes)f
(and)f(not)h(to)f(access)j(or)75 1895 y(mo)q(dify)12 b(the)k(receiv)o(e)g
(bu\013er)g(un)o(til)e(the)h(receiv)o(e)h(completes;)f(otherwise)h(the)f
(outcome)f(of)h(the)g(computation)e(is)75 1944 y(unde\014ned.)158
2073 y Fo(Discussion:)158 2118 y Ft(Do)g(w)o(e)g(w)o(an)o(t)g(to)g(sa)o(y)g
(that)g(a)g(blo)q(c)o(king)j(op)q(eration)f(MA)m(Y)d(or)h(MUST)g(only)h(blo)q
(c)o(k)g(the)g(executing)g(thread?)158 2329 y Fo(Implemen)o(tation)f(note:)38
b Ft(A)13 b(ready)h(send)h(can)f(b)q(e)g(implemen)o(ted)h(as)f(a)g(standard)h
(send;)f(in)h(suc)o(h)f(a)g(case)g(there)75 2375 y(will)h(b)q(e)e(no)g(p)q
(erformance)h(adv)n(an)o(tage)g(\(or)f(disadv)n(an)o(tage\))j(for)d(the)g
(use)g(of)g(ready)g(send.)158 2421 y(A)d(standard)h(send)g(can)g(b)q(e)f
(implemen)o(ted)j(as)d(a)h(sync)o(hronous)h(send.)17 b(In)10
b(suc)o(h)h(a)f(case,)h(no)f(data)h(bu\013ering)h(is)f(needed.)158
2466 y(A)i(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
2512 y Fm(ready)j(send)p Ft(:)d(The)e(message)g(is)h(sen)o(t)f(as)g(so)q(on)h
(as)f(p)q(ossible.)158 2558 y Fm(synchronou)o(s)j(send:)25
b Ft(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 2603 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
2649 y(no)o(w)e(sends)h(the)f(message.)158 2695 y Fm(standard)k(send:)d
Ft(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.)p eop
%%Page: 12 12
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(12)158 45 y Ft(Additional)17 b(con)o(trol)d(messages)h(migh)o
(t)f(b)q(e)g(needed)h(for)f(\015o)o(w)f(con)o(trol)i(and)f(error)g(reco)o(v)o
(ery)m(.)20 b(Of)13 b(course,)h(there)g(are)75 91 y(man)o(y)g(other)f(p)q
(ossible)i(c)o(hoices.)75 311 y Fw(1.8)59 b(Nonblo)r(cking)20
b(comm)m(unicat)o(ion)75 402 y Fx(One)d(can)f(impro)o(v)o(e)f(p)q(erformance)
h(on)g(man)o(y)e(systems)i(b)o(y)g(o)o(v)o(erlapping)f(comm)o(unication)e
(and)j(computation.)75 451 y(This)11 b(is)g(esp)q(ecially)h(true)g(on)f
(systems)h(where)g(comm)o(unication)c(can)k(b)q(e)g(executed)h(autonomously)c
(b)o(y)i(an)h(in)o(telli-)75 501 y(gen)o(t)h(comm)o(unicatio)o(n)d(con)o
(troller.)18 b(Ligh)o(t-w)o(eigh)o(t)11 b(threads)j(are)f(one)g(mec)o(hanism)
d(for)j(ac)o(hieving)f(suc)o(h)h(o)o(v)o(erlap.)75 551 y(An)h(alternativ)o(e)
g(mec)o(hanism)e(that)j(often)f(leads)g(to)g(b)q(etter)i(p)q(erformance)e(is)
g(to)h(use)g Fv(non)o(blo)q(c)o(kin)o(g)e(comm)o(u-)75 601
y(nication)p Fx(.)i(A)f(non)o(blo)q(c)o(king)e(send)i(call)e(initiates)h(the)
h(send)g(op)q(eration,)f(but)g(do)q(es)h(not)f(complete)g(it.)k(The)d(send)75
651 y(call)h(will)e(return)k(b)q(efore)f(the)g(message)f(w)o(as)g(copied)h
(out)f(of)g(the)h(send)g(bu\013er.)24 b(A)15 b(separate)i(call)d(is)h(needed)
i(to)75 701 y(complete)f(the)i(comm)o(unicati)o(on,)c(i.e.)27
b(to)16 b(v)o(erify)h(that)f(the)i(data)e(has)h(b)q(een)h(copied)f(out)g(of)f
(the)i(send)f(bu\013er.)75 750 y(With)e(suitable)h(hardw)o(are,)g(the)g
(transfer)h(of)e(data)g(out)h(of)f(the)h(sender)h(memory)d(ma)o(y)f(pro)q
(ceed)18 b(concurren)o(tly)75 800 y(with)10 b(computations)g(done)h(at)f(the)
h(sender)i(after)d(the)i(send)f(w)o(as)g(initiated)f(and)g(b)q(efore)i(it)e
(completed.)16 b(Similarly)l(,)75 850 y(a)e(non)o(blo)q(c)o(king)f(receiv)o
(e)i(initiates)f(the)h(receiv)o(e)g(op)q(eration,)f(but)g(do)q(es)h(not)f
(complete)g(it.)k(The)d(call)e(will)g(return)75 900 y(b)q(efore)i(a)f
(message)f(is)h(stored)h(in)o(to)e(the)i(receiv)o(e)g(bu\013er.)20
b(A)14 b(separate)h(call)e(is)h(needed)i(to)e(complete)f(the)i(receiv)o(e)75
950 y(op)q(eration)c(and)g(v)o(erify)g(that)h(the)f(data)g(has)h(b)q(een)g
(receiv)o(ed)h(in)o(to)e(the)g(receiv)o(e)i(bu\013er.)18 b(With)11
b(suitable)g(hardw)o(are,)75 999 y(the)18 b(transfer)g(of)e(data)h(in)o(to)g
(the)g(receiv)o(er)i(memory)c(ma)o(y)g(pro)q(ceed)k(concurren)o(tly)f(with)f
(computations)f(done)75 1049 y(after)e(the)h(receiv)o(e)g(w)o(as)f(initiated)
f(and)g(b)q(efore)i(it)f(completed.)158 1099 y(Non)o(blo)q(c)o(king)k(sends)j
(can)e(use)h(the)g(same)f(three)h(mo)q(des)f(as)g(blo)q(c)o(king)f(sends:)30
b Fu(standard)p Fx(,)19 b Fu(ready)f Fx(and)75 1149 y Fu(synchronous)p
Fx(.)e(These)e(carry)g(the)g(same)e(meaning.)k(The)e(initiation)e(and)h
(completion)e(of)i(a)g(standard)h(send)g(do)75 1199 y(not)h(dep)q(end)i(on)e
(the)h(status)h(of)d(a)i(matc)o(hing)d(receiv)o(e.)24 b(A)16
b(ready)g(send)g(can)g(b)q(e)g(initiated)e(only)h(if)g(a)g(matc)o(hing)75
1248 y(receiv)o(e)e(has)f(already)f(b)q(een)i(initiated,)e(otherwise)i(the)f
(call)f(is)h(erroneous;)h(its)f(completion)e(do)q(es)j(not)e(dep)q(end)i(on)
75 1298 y(the)g(status)h(of)d(a)i(matc)o(hing)d(receiv)o(e.)19
b(A)13 b(sync)o(hronous)g(send)h(can)f(b)q(e)g(initiated)f(b)q(efore)h(a)f
(matc)o(hing)f(receiv)o(e)j(has)75 1348 y(b)q(een)i(initiated,)f(but)g(will)f
(complete)h(only)f(after)i(a)f(matc)o(hing)e(receiv)o(e)k(has)e(b)q(een)i
(initiated,)d(and)h(has)h(started)75 1398 y(receiving)e(the)h(message)e
(generated)j(b)o(y)d(the)i(send)f(op)q(eration.)158 1448 y(In)k(all)e(cases)j
(the)f(op)q(eration)f(that)h(initiates)f(the)h(comm)o(unicati)o(on)d(\(send)j
(or)g(receiv)o(e\))h(is)e(a)g(lo)q(cal,)g(non-)75 1498 y(blo)q(c)o(king)d
(call)g(that)h(returns)h(as)f(so)q(on)g(as)g(p)q(ossible.)20
b(A)15 b(non)o(blo)q(c)o(king)f(comm)o(unicatio)o(n)e(call)i(ma)o(y)f(fail)g
(b)q(ecause)75 1547 y(b)q(ecause)g(the)g(system)e(has)h(exhausted)h(a)o(v)n
(ailable)d(resources)k(\(e.g.,)d(exceeded)j(the)e(limit)d(on)j(n)o(um)o(b)q
(er)f(of)g(p)q(ending)75 1597 y(comm)o(unications)f(p)q(er)15
b(no)q(de\).)j(Go)q(o)q(d)13 b(qualit)o(y)f(implemen)o(tatio)o(ns)f(of)i(MPI)
h(will)e(set)i(these)h(limits)c(high)i(enough)75 1647 y(so)h(that)g(a)f(non)o
(blo)q(c)o(king)g(comm)o(unication)e(call)i(will)f(fail)g(only)h(in)h
(\\pathological")d(cases.)158 1697 y(Non)o(blo)q(c)o(king)i(sends)i(can)f(b)q
(e)g(matc)o(hed)g(with)f(blo)q(c)o(king)g(receiv)o(es,)i(and)f(vice-v)o
(ersa.)75 1813 y Fq(1.8.1)49 b(Comm)o(unication)14 b(Objects)75
1890 y Fx(Non)o(blo)q(c)o(king)f(comm)o(unications)f(use)j(opaque)f(comm)o
(unication)d(ob)r(jects)16 b(to)e(iden)o(tify)g(comm)o(unicatio)o(n)e(op)q
(era-)75 1939 y(tions)h(and)g(matc)o(h)f(the)i(op)q(eration)f(that)g
(initiates)g(the)h(comm)o(uni)o(cation)c(with)j(the)h(op)q(eration)f(that)g
(terminates)75 1989 y(it.)32 b(These)20 b(are)f(system)f(ob)r(jects)i(that)f
(are)g(accessed)i(via)d(a)g(handle.)33 b(An)18 b(opaque)h(comm)o(unicatio)o
(n)d(ob)r(ject)75 2039 y(iden)o(ti\014es)e(v)n(arious)f(prop)q(erties)i(of)e
(a)g(comm)o(unicati)o(on)e(op)q(eration,)i(suc)o(h)h(as)f(the)i(\(send)f(or)g
(receiv)o(e\))g(bu\013er)h(that)75 2089 y(is)g(asso)q(ciated)h(with)f(it,)g
(its)h(con)o(text,)g(the)g(tag)f(and)g(destination)g(parameters)g(to)h(b)q(e)
g(used)g(for)f(a)g(send,)h(or)f(the)75 2139 y(tag)d(and)f(source)j
(parameters)e(to)g(b)q(e)g(used)h(for)f(a)f(receiv)o(e.)19
b(In)12 b(addition,)f(this)h(ob)r(ject)h(stores)g(information)c(ab)q(out)75
2188 y(the)14 b(status)h(of)e(the)i(p)q(ending)f(comm)o(unicatio)o(n)d(op)q
(eration)j(that)g(is)g(p)q(erformed)f(with)h(this)g(ob)r(ject.)75
2305 y Fq(1.8.2)49 b(Comm)o(unication)14 b(initiation)75 2381
y Fx(W)m(e)i(use)g(the)h(same)e(naming)e(con)o(v)o(en)o(tions)j(as)g(for)g
(blo)q(c)o(king)f(comm)o(unicatio)o(n:)20 b(a)15 b(pre\014x)i(of)e
Fu(R)h Fx(\()p Fu(S)p Fx(\))g(is)f(used)i(for)75 2431 y Fu(READY)g
Fx(\()p Fu(SYNCHRONOUS)p Fx(\))f(mo)q(de.)29 b(In)18 b(addition)f(a)g
(pre\014x)i(of)e Fu(I)h Fx(\(for)g Fu(IMMEDIATE)p Fx(\))e(indicates)i(that)g
(the)h(call)e(is)75 2481 y(non)o(blo)q(c)o(king.)158 2581 y(Initiate)c(a)h
(standard)g(mo)q(de)f(non)o(blo)q(c)o(king)g(comm)o(unicatio)o(n.)75
2678 y Fu(MPI)p 144 2678 14 2 v 15 w(ISEND\(handle,)19 b(start,)i(count,)f
(datatype,)g(dest,)h(tag,)g(comm\))p eop
%%Page: 13 13
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(13)117 45 y Ft(out)14 b Fu(handle)629 b Ft(handle)14
b(to)f(comm)o(unication)j(ob)r(ject)117 91 y(in)e Fu(start)675
b Ft(initial)16 b(address)e(of)e(send)i(bu\013er)g(\(c)o(hoice\))117
136 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)14 b(of)e(elemen)o(ts)i(in)g
(send)g(bu\013er)g(\(in)o(teger\))117 182 y(in)g Fu(datatype)609
b Ft(datat)o(yp)q(e)14 b(of)f(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)117
228 y(in)g Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
273 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
319 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))158
495 y Fx(Initiate)f(a)h(ready)g(mo)q(de)f(non)o(blo)q(c)o(king)g(comm)o
(unicatio)o(n.)75 592 y Fu(MPI)p 144 592 14 2 v 15 w(IRSEND\(handle,)19
b(start,)i(count,)f(datatype,)g(dest,)h(tag,)g(comm\))117 642
y Ft(out)14 b Fu(handle)629 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r
(ject)117 688 y(in)e Fu(start)675 b Ft(initial)16 b(address)e(of)e(send)i
(bu\013er)g(\(c)o(hoice\))117 733 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(in)g(send)g(bu\013er)g(\(in)o(teger\))117
779 y(in)g Fu(datatype)609 b Ft(datat)o(yp)q(e)14 b(of)f(eac)o(h)g(send)h
(bu\013er)g(elemen)o(t)117 825 y(in)g Fu(dest)697 b Ft(rank)13
b(of)g(destination)j(\(in)o(teger\))117 870 y(in)e Fu(tag)719
b Ft(message)13 b(tag)h(\(in)o(teger\))117 916 y(in)g Fu(comm)697
b Ft(comm)o(unicator)14 b(\(handle\))158 1092 y Fx(Initiate)f(a)h(sync)o
(hronous)h(mo)q(de)e(non)o(blo)q(c)o(king)f(comm)o(unication.)75
1189 y Fu(MPI)p 144 1189 V 15 w(ISSEND\(handle,)19 b(start,)i(count,)f
(datatype,)g(dest,)h(tag,)g(comm\))117 1239 y Ft(out)14 b Fu(handle)629
b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r(ject)117 1284
y(in)e Fu(start)675 b Ft(initial)16 b(address)e(of)e(send)i(bu\013er)g(\(c)o
(hoice\))117 1330 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(in)g(send)g(bu\013er)g(\(in)o(teger\))117
1376 y(in)g Fu(datatype)609 b Ft(datat)o(yp)q(e)14 b(of)f(eac)o(h)g(send)h
(bu\013er)g(elemen)o(t)117 1421 y(in)g Fu(dest)697 b Ft(rank)13
b(of)g(destination)j(\(in)o(teger\))117 1467 y(in)e Fu(tag)719
b Ft(message)13 b(tag)h(\(in)o(teger\))117 1513 y(in)g Fu(comm)697
b Ft(comm)o(unicator)14 b(\(handle\))158 1689 y Fx(Initiate)f(a)h(non)o(blo)q
(c)o(king)f(receiv)o(e.)75 1786 y Fu(MPI)p 144 1786 V 15 w(IRECV)21
b(\(handle,)f(start,)h(count,)f(datatype,)g(source,)g(tag,)h(comm\))117
1835 y Ft(out)14 b Fu(handle)629 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)
r(ject)117 1881 y(out)e Fu(start)651 b Ft(initial)16 b(address)e(of)e(receiv)
o(e)i(bu\013er)g(\(c)o(hoice\))117 1927 y(in)g Fu(count)675
b Ft(n)o(um)o(b)q(er)14 b(of)e(elemen)o(ts)i(in)g(receiv)o(e)g(bu\013er)g
(\(in)o(teger\))117 1972 y(in)g Fu(datatype)609 b Ft(datat)o(yp)q(e)14
b(of)f(eac)o(h)g(receiv)o(e)h(bu\013er)g(elemen)o(t)117 2018
y(in)g Fu(source)653 b Ft(rank)13 b(of)g(source)h(\(in)o(teger\))117
2064 y(in)g Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
2109 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))158
2186 y Fx(The)i(call)f(allo)q(cates)g(a)g(comm)o(unication)d(ob)r(ject)17
b(and)e(asso)q(ciates)h(it)f(with)h(the)g(handle.)22 b(The)16
b(handle)g(can)75 2235 y(b)q(e)f(used)f(later)g(to)g(query)g(ab)q(out)g(the)h
(status)f(of)g(the)g(comm)o(unication)d(or)i(w)o(ait)h(for)f(its)h
(completion.)158 2285 y(A)d(sender)h(should)f(not)f(up)q(date)h(an)o(y)g
(part)f(of)g(a)h(send)g(bu\013er)h(after)f(a)f(non)o(blo)q(c)o(king)g(send)h
(op)q(eration)g(returns,)75 2335 y(un)o(til)h(the)i(send)g(completes.)k(A)13
b(receiv)o(er)i(should)e(not)g(access)i(or)e(up)q(date)h(an)o(y)e(part)i(of)e
(a)h(receiv)o(e)i(bu\013er)f(after)f(a)75 2385 y(non)o(blo)q(c)o(king)g
(receiv)o(e)i(op)q(eration)f(returns,)h(un)o(til)e(the)h(receiv)o(e)h
(completes.)p eop
%%Page: 14 14
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(14)75 45 y Fq(1.8.3)49 b(Comm)o(unication)14
b(Completion)75 122 y Fx(The)j(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 172 y(in)g(the)h(send)g(bu\013er,)h(or)f(an)o(y)e(other)i
(lo)q(cation)f(that)g(can)h(b)q(e)g(referenced)i(b)o(y)d(the)h(send)h(op)q
(eration)e(\(the)h(send)75 221 y(op)q(eration)h(itself)g(lea)o(v)o(es)g(the)g
(con)o(ten)o(t)h(of)f(the)g(send)h(bu\013er)g(unc)o(hanged\).)34
b(It)20 b(do)q(es)f(not)g(indicate)g(that)g(the)75 271 y(message)f(has)g(b)q
(een)i(receiv)o(ed;)h(rather,)e(it)f(ma)o(y)f(ha)o(v)o(e)h(b)q(een)h
(bu\013ered)h(b)o(y)e(the)g(comm)o(unication)d(subsystem.)75
321 y(Ho)o(w)o(ev)o(er,)d(if)f(a)h Fu(synchronous)d Fx(mo)q(de)i(send)i(w)o
(as)e(used,)i(the)g(completion)d(of)h(the)h(send)h(op)q(eration)f(indicates)g
(that)75 371 y(a)h(matc)o(hing)e(receiv)o(e)k(w)o(as)e(initiated,)f(and)h
(that)h(the)f(message)g(will)f(ev)o(en)o(tually)h(b)q(e)h(receiv)o(ed)g(b)o
(y)f(this)h(matc)o(hing)75 421 y(receiv)o(e.)158 470 y(The)k(completion)e(of)
g(a)i(receiv)o(e)g(op)q(eration)g(indicates)f(that)h(the)g(receiv)o(e)h
(bu\013er)f(con)o(tains)g(the)g(receiv)o(ed)75 520 y(message,)e(and)g(that)g
(the)g(status)h(ob)r(ject)g(is)f(set;)h(the)g(receiv)o(er)g(is)f(no)o(w)g
(free)g(to)g(access)i(the)f(receiv)o(e)g(bu\013er,)g(or)75
570 y(an)o(y)f(other)i(lo)q(cation)d(that)i(can)g(b)q(e)g(referenced)j(b)o(y)
c(the)i(receiv)o(e)g(op)q(eration.)26 b(It)17 b(do)q(es)g(not)g(indicate)g
(that)f(the)75 620 y(matc)o(hing)c(send)j(op)q(eration)f(has)g(completed)f
(\(but)h(indicates,)g(of)f(course,)i(that)f(the)g(send)h(w)o(as)f
(initiated\).)75 767 y Fu(MPI)p 144 767 14 2 v 15 w(WAIT)21
b(\(handle,)f(status\))117 817 y Ft(in)14 b Fu(handle)653 b
Ft(handle)14 b(to)f(comm)o(unication)j(ob)r(ject)117 862 y(out)e
Fu(status)629 b Ft(status)13 b(ob)r(ject)158 939 y Fx(A)k(call)e(to)i
Fu(MPI)p 407 939 V 15 w(WAIT)e Fx(returns)j(when)f(the)g(send)h(op)q(eration)
e(iden)o(ti\014ed)g(b)o(y)h Fu(handle)e Fx(is)h(complete.)25
b(If)16 b(the)75 988 y(comm)o(unication)9 b(ob)r(ject)j(asso)q(ciated)h(with)
f(this)g(handle)g(w)o(as)g(created)i(b)o(y)d(a)h(non)o(blo)q(c)o(king)f(send)
i(or)f(receiv)o(e)h(call,)75 1038 y(then)i(the)f(ob)r(ject)h(is)e(deallo)q
(cated)h(b)o(y)g(the)h(call)e(to)g Fu(MPI)p 951 1038 V 15 w(WAIT)g
Fx(and)h(the)h(handle)e(b)q(ecomes)i(n)o(ull.)158 1088 y(The)i(call)f
(returns)j(in)d Fu(status)g Fx(information)d(on)k(the)g(completed)g(op)q
(eration.)26 b(The)18 b(status)f(ob)r(ject)h(for)e(a)75 1138
y(receiv)o(e)c(op)q(eration)e(can)h(b)q(e)g(queried)g(using)f(the)h
(functions)g(describ)q(ed)h(in)e(Section)h(1.3.1.)k(The)c(status)g(parameter)
75 1188 y(is)g(not)h(used)g(or)f(up)q(dated)h(for)f(a)h(send)g(op)q(eration,)
f(and)h(an)f(arbitrary)g(v)n(alue)g(ma)o(y)e(b)q(e)j(passed)h(for)e(this)g
(parameter)75 1237 y(in)i(the)i(call.)158 1366 y Fo(Discussion:)158
1411 y Ft(Do)e(w)o(e)g(agree)g(on)h(the)f(last)g(sen)o(tence?)19
b(\(this)13 b(implies)j(some)d(restriction)i(on)e(the)g(implemen)o(tation)q
(\))75 1591 y Fu(MPI)p 144 1591 V 15 w(TEST)21 b(\(handle,)f(flag,)h
(status\))117 1641 y Ft(in)14 b Fu(handle)653 b Ft(handle)14
b(to)f(comm)o(unication)j(ob)r(ject)117 1687 y(out)36 b Fu(flag)651
b Ft(logical)117 1732 y(out)14 b Fu(status)629 b Ft(status)13
b(ob)r(ject)158 1809 y Fx(A)18 b(call)f(to)g Fu(MPI)p 410 1809
V 15 w(TEST)g Fx(returns)i Fu(flag=true)d Fx(if)h(the)h(op)q(eration)f(iden)o
(ti\014ed)h(b)o(y)f Fu(handle)g Fx(is)g(complete.)29 b(In)75
1858 y(suc)o(h)21 b(a)f(case,)i(the)e(status)h(ob)r(ject)g(is)f(set)h(to)f
(con)o(tain)f(information)f(on)h(the)i(completed)f(op)q(eration;)i(if)d(the)
75 1908 y(comm)o(unication)11 b(ob)r(ject)k(w)o(as)g(created)h(b)o(y)e(a)g
(non)o(blo)q(c)o(king)f(send)j(or)e(receiv)o(e,)i(then)f(it)f(is)g(deallo)q
(cated)h(and)f(the)75 1958 y(handle)e(b)q(ecomes)f(n)o(ull.)17
b(The)12 b(call)f(returns)i Fu(flag=false)p Fx(,)c(otherwise.)19
b(In)11 b(suc)o(h)i(a)e(case,)i(the)f(v)n(alue)f(of)g(the)h(status)75
2008 y(ob)r(ject)j(is)e(unde\014ned.)158 2136 y Fo(Discussion:)158
2186 y Ft(W)m(e)g(could)i(disp)q(ose)f(of)f(the)g(\015ag)h(parameter)f(and)h
(add)g(an)f(additional)j(query)e(function)h(for)d(status)i(ob)r(jects.)158
2318 y Fu(MPI)p 227 2318 V 15 w(TEST)c Fx(is)i(a)f(lo)q(cal,)f(non)o(blo)q(c)
o(king)g(op)q(eration.)17 b(If)11 b(rep)q(eatedly)h(called)f(for)g(an)g(op)q
(eration)h(that)f(is)g(enabled,)75 2368 y(it)j(m)o(ust)e(ev)o(en)o(tually)i
(succeed.)158 2418 y(The)g(return)h(status)g(ob)r(ject)f(for)g(a)f(receiv)o
(e)i(op)q(eration)f(carries)g(information)d(that)j(can)g(b)q(e)g(accessed)i
(using)75 2468 y(the)i(functions)f(describ)q(ed)i(in)e(Section)h(1.3.1.)26
b(The)18 b(status)g(argumen)o(t)e(is)h(not)g(used)h(or)f(up)q(dated)h(for)f
(a)g(send)75 2518 y(op)q(eration)d(and)f(an)h(arbitrary)g(v)n(alue)f(can)h(b)
q(e)h(passed)g(for)e(this)h(parameter)g(in)f(the)i(call.)158
2568 y(In)h(m)o(ulti-threaded)e(en)o(vironmen)o(t,)h(the)h(use)h(of)e(a)g
(blo)q(c)o(king)g(receiv)o(e)i(op)q(eration)f(\()p Fu(MPI)p
1559 2568 V 15 w(WAIT)p Fx(\))f(ma)o(y)f(allo)o(w)75 2617 y(the)e(op)q
(erating)f(system)h(to)f(de-sc)o(hedule)i(the)f(blo)q(c)o(k)o(ed)f(thread)i
(and)e(sc)o(hedule)h(another)g(thread)g(for)g(execution,)g(if)p
eop
%%Page: 15 15
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(15)75 45 y(suc)o(h)14 b(is)f(a)o(v)n(ailable.)i(The)e(use)h
(of)f(a)f(non)o(blo)q(c)o(king)g(receiv)o(e)i(op)q(eration)f(\()p
Fu(MPI)p 1265 45 14 2 v 15 w(TEST)p Fx(\))g(allo)o(ws)e(the)j(user)g(to)f(sc)
o(hedule)75 95 y(alternativ)o(e)h(activities)f(within)g(a)h(single)g(thread)g
(of)f(execution.)75 195 y(Example:)75 276 y Fu(CALL)21 b(MPI_COMM_RANK\(com)o
(m,)e(rank,)i(ierr\))75 325 y(IF\(rank.EQ.0\))119 375 y(THEN)162
425 y(CALL)g(MPI_ISEND\(handle,)d(a\(1\),)j(10,)g(MPI_REAL,)f(1,)i(tag,)f
(comm,)f(ierr\))162 475 y(****)h(do)h(some)e(computation)g(to)h(mask)g
(latency)g(****)162 525 y(CALL)g(MPI_WAIT\(handle,)e(status,)h(ierr\))119
574 y(ELSE)162 624 y(CALL)h(MPI_IRECV\(handle,)d(a\(1\),)j(15,)g(MPI_REAL,)f
(0,)i(tag,)f(comm,)f(ierr\))162 674 y(****)h(do)h(some)e(computation)g(to)h
(mask)g(latency)g(****)162 724 y(CALL)g(MPI_WAIT\(handle,)e(status,)h(ierr\))
75 774 y(END)h(IF)158 855 y Fx(The)16 b(functions)f Fu(MPI)p
494 855 V 15 w(WAIT)g Fx(and)g Fu(MPI)p 760 855 V 15 w(TEST)f
Fx(can)i(b)q(e)g(used)g(to)f(complete)g(b)q(oth)g(sends)i(and)e(receiv)o(es;)
i(they)75 905 y(will)12 b(b)q(e)j(also)e(used)i(to)f(complete)f(an)o(y)g
(other)i(non)o(blo)q(c)o(king)d(comm)o(unication)f(call)i(pro)o(vided)h(b)o
(y)f(MPI.)158 954 y(Non)o(blo)q(c)o(king)20 b(comm)o(unications)e(cannot)k(b)
q(e)g(replaced)g(b)o(y)f(blo)q(c)o(king)f(comm)o(unications,)g(ev)o(en)i(in)e
(the)75 1004 y Fu(synchronous)12 b Fx(comm)o(uni)o(cation)f(mo)q(de.)17
b(Consider)d(the)h(follo)o(wing)c(example:)75 1085 y Fu(CALL)21
b(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75 1135 y(IF\(rank.EQ.0\))119
1185 y(THEN)162 1235 y(CALL)g(MPI_ISEND\(handle1,)d(a\(1\),)j(count,)g
(MPI_REAL,)e(1,)j(tag1,)f(comm,)f(ierr\))162 1285 y(CALL)h
(MPI_ISEND\(handle2,)d(a\(2\),)j(count,)g(MPI_REAL,)e(1,)j(tag2,)f(comm,)f
(ierr\))162 1334 y(CALL)h(MPI_WAIT\(handle1,)d(status,)j(ierr\))162
1384 y(CALL)g(MPI_WAIT\(handle2,)d(status,)j(ierr\))119 1434
y(ELSE)162 1484 y(CALL)g(MPI_IRECV\(handle2,)d(a\(2\),)j(count,)g(MPI_REAL,)e
(0,)j(tag2,)f(comm,)f(ierr\))162 1534 y(CALL)h(MPI_IRECV\(handle1,)d(a\(1\),)
j(count,)g(MPI_REAL,)e(0,)j(tag1,)f(comm,)f(ierr\))162 1583
y(CALL)h(MPI_WAIT\(handle2,)d(status,)j(ierr\))162 1633 y(CALL)g
(MPI_WAIT\(handle1,)d(status,)j(ierr\))75 1683 y(END)g(IF)158
1764 y Fx(The)c(co)q(de)h(is)f(guaran)o(teed)g(to)g(execute)h(correctly)m(,)g
(ev)o(en)g(in)e(an)h(implem)o(en)o(tation)d(that)j(do)q(es)g(not)g(bu\013er)
75 1814 y(messages)f(\(the)h(only)e(resource)k(requiremen)o(t)d(is)g(the)g
(abilit)o(y)f(to)h(ha)o(v)o(e)g(t)o(w)o(o)g(p)q(ending)g(comm)o(unicatio)o
(ns\).)23 b(On)75 1864 y(the)14 b(other)f(hand,)g(the)h(co)q(de)f(ma)o(y)f
(deadlo)q(c)o(k)h(if)f(the)h(non)o(blo)q(c)o(king)f(op)q(erations)h(are)h
(replaced)g(b)o(y)f(blo)q(c)o(king)f(ones.)75 1979 y Fq(1.8.4)49
b(Multiple)17 b(Completions)75 2056 y Fx(It)f(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 2106
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 Fu(MPI)p 1125 2106 V 15 w(WAITANY)f Fx(or)h
Fu(MPI)p 1426 2106 V 16 w(TESTANY)e Fx(can)j(b)q(e)g(used)g(to)75
2156 y(w)o(ait)d(for)g(the)i(completion)d(of)h(one)h(out)f(of)h(sev)o(eral)g
(op)q(erations;)f(a)h(call)f(to)g Fu(MPI)p 1336 2156 V 15 w(WAITALL)g
Fx(or)g Fu(MPI)p 1634 2156 V 15 w(TESTALL)g Fx(can)75 2206
y(b)q(e)i(used)f(to)g(w)o(ait)f(for)h(all)e(p)q(ending)i(op)q(erations)g(in)g
(a)f(list.)158 2334 y Fo(Discussion:)158 2384 y Fm(MPI)p 220
2384 12 2 v 13 w(TESTALL)f Fo(is)j(new.)75 2563 y Fu(MPI)p
144 2563 14 2 v 15 w(WAITANY)20 b(\(count,)h(array)p 618 2563
V 14 w(of)p 676 2563 V 16 w(handles,)f(index,)g(status\))117
2613 y Ft(in)14 b Fu(count)675 b Ft(list)14 b(length)g(\(in)o(teger\))117
2658 y(in)g Fu(array)p 275 2658 V 15 w(of)p 334 2658 V 15 w(handles)447
b Ft(arra)o(y)13 b(of)g(handles)i(to)e(comm)o(unication)i(ob)r(jects)117
2704 y(out)f Fu(index)651 b Ft(index)14 b(of)f(handle)i(for)d(op)q(eration)j
(that)e(completed)i(\(in)o(teger\))p eop
%%Page: 16 16
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(16)117 45 y Ft(out)14 b Fu(status)629 b Ft(return)13
b(status)h(ob)r(ject)158 121 y Fx(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 171 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 221 y(in)f(the)i(ob)r(ject)g(asso)q(ciated)f
(with)g(the)g(status.)158 271 y(The)23 b(successful)h(execution)f(of)f
Fu(MPI)p 768 271 14 2 v 15 w(WAITANY\(count,)d(array)p 1220
271 V 15 w(of)p 1279 271 V 15 w(handles,)h(index,)h(status\))g
Fx(has)75 321 y(the)f(same)f(e\013ect)i(as)e(the)h(successful)h(execution)g
(of)d Fu(MPI)p 1017 321 V 16 w(WAIT\(array)p 1253 321 V 13
w(of)p 1310 321 V 15 w(handles[i],)i(status\))p Fx(,)f(where)75
370 y Fu(i)12 b Fx(is)h(the)g(v)n(alue)f(returned)i(b)o(y)e
Fu(index)p Fx(.)17 b(In)12 b(particular,)g(the)h(asso)q(ciated)h(comm)o
(unicati)o(on)c(ob)r(ject)j(is)f(deallo)q(cated,)75 420 y(and)i(the)h(handle)
f(to)g(it)f(in)h Fu(array)p 616 420 V 15 w(of)p 675 420 V 15
w(handles)f Fx(is)h(set)h(to)f(n)o(ull.)k(If)13 b(more)g(then)i(one)g(op)q
(eration)f(is)g(enabled)g(and)75 470 y(can)f(terminate,)e(one)i(is)f
(arbitrarily)f(c)o(hosen.)18 b(There)c(is)e(no)g(requiremen)o(t)h(that)f(the)
h(c)o(hoice)g(satisfy)f(an)o(y)g(fairness)75 520 y(criterion.)158
648 y Fo(Discussion:)158 694 y Ft(If)g(statemen)o(t)i(of)f(fairness)h(is)f(c)
o(hanged)i(in)e(Section)i(1.4)e(then)g(will)i(need)e(to)g(c)o(hange)h(here,)f
(to)q(o.)75 874 y Fu(MPI)p 144 874 V 15 w(TESTANY\()20 b(count,)h(array)p
618 874 V 14 w(of)p 676 874 V 16 w(handles,)f(index,)g(status\))117
923 y Ft(in)14 b Fu(count)675 b Ft(list)14 b(length)g(\(in)o(teger\))117
968 y(in)g Fu(array)p 275 968 V 15 w(of)p 334 968 V 15 w(handles)447
b Ft(arra)o(y)13 b(of)g(handles)i(to)e(comm)o(unication)i(ob)r(jects)117
1013 y(out)f Fu(index)651 b Ft(index)18 b(of)f(handle)h(for)f(op)q(eration)h
(that)f(completed,)i(or)e(-1)g(if)905 1063 y(none)d(completed)g(\(in)o
(teger\))117 1107 y(out)g Fu(status)629 b Ft(return)13 b(status)h(ob)r(ject)
158 1184 y Fx(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
1233 y(return.)i(In)15 b(the)h(former)e(case,)h(it)g(returns)h(the)g(index)f
(of)f(that)h(handle)g(in)f(the)h(arra)o(y)m(,)f(and)h(returns)i(the)e(status)
75 1283 y(of)d(that)h(op)q(eration)f(in)g(the)h(ob)r(ject)h(asso)q(ciated)f
(with)f(the)i(status.)k(The)13 b(comm)o(unicatio)o(n)d(ob)r(ject)j(is)g
(deallo)q(cated)75 1333 y(and)k(the)h(handle)f(to)g(it)g(in)g
Fu(array)p 635 1333 V 15 w(of)p 694 1333 V 15 w(handles)f Fx(is)h(set)h(to)f
(n)o(ull.)27 b(In)17 b(the)h(latter)g(case,)g(it)f(returns)i(a)e(v)n(alue)g
(of)75 1383 y(-1)e(in)f Fu(index)g Fx(and)h Fu(status)f Fx(is)g(unde\014ned.)
23 b(Lik)o(e)15 b Fu(MPI)p 938 1383 V 15 w(TEST)p Fx(,)e(this)i(is)g(a)g(non)
o(blo)q(c)o(king)f(op)q(eration,)g(that)h(returns)75 1433 y(immediately;)f
(and)i(if)g(one)g(busy-w)o(aits)h(with)f Fu(MPI)p 904 1433
V 15 w(TESTANY)p Fx(,)e(and)j(some)e(op)q(eration)i(on)f(the)h(list)f(is)g
(enabled,)75 1482 y(then)f Fu(MPI)p 239 1482 V 15 w(TESTANY)d
Fx(will)g(ev)o(en)o(tually)i(return)h Fu(flag)21 b(=)g(true)p
Fx(.)158 1611 y Fo(Discussion:)158 1656 y Ft(Could)e(ha)o(v)o(e)f(a)f
Fm(flag)f Ft(parameter,)j(rather)f(than)g(using)h(index)g(=)f(-1)f(for)g
(unsuccessful)j(return.)31 b(This)19 b(is)f(more)75 1702 y(consisten)o(t)d
(and)e(more)g(elegan)o(t,)h(but)g(requires)g(an)f(additional)k(parameter.)158
1752 y(If)12 b(w)o(e)h(stic)o(k)h(with)f(curren)o(t)h(v)o(ersion,)g(ma)o(y)f
(replace)h(-1)f(b)o(y)g(an)h(MPI)f(constan)o(t.)75 1932 y Fu(MPI)p
144 1932 V 15 w(WAITALL\()20 b(count,)h(array)p 618 1932 V
14 w(of)p 676 1932 V 16 w(handles,)f(array)p 998 1932 V 14
w(of)p 1056 1932 V 16 w(status\))117 1981 y Ft(in)14 b Fu(count)675
b Ft(lists)14 b(length)g(\(in)o(teger\))117 2026 y(in)g Fu(array)p
275 2026 V 15 w(of)p 334 2026 V 15 w(handles)447 b Ft(arra)o(y)13
b(of)g(handles)i(to)e(comm)o(unication)i(ob)r(jects)117 2071
y(out)f Fu(array)p 299 2071 V 14 w(of)p 357 2071 V 16 w(status)445
b Ft(arra)o(y)13 b(of)g(status)g(ob)r(jects)158 2147 y Fx(Blo)q(c)o(ks)19
b(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 2197
y(return)f(the)f(status)g(of)f(all)f(these)j(op)q(erations.)22
b(Both)16 b(arra)o(ys)g(ha)o(v)o(e)f(the)h(same)f(n)o(um)o(b)q(er)f(of)h(v)n
(alid)f(en)o(tries.)24 b(The)75 2247 y Fu(i)p Fx(-th)13 b(en)o(try)h(in)f
Fu(array)p 432 2247 V 15 w(of)p 491 2247 V 15 w(status)g Fx(is)g(set)h(to)g
(the)g(return)g(status)h(of)e(the)h Fu(i)p Fx(-th)f(op)q(eration.)18
b(All)12 b(comm)o(unication)75 2297 y(ob)r(jects)j(are)f(deallo)q(cated)g
(and)g(all)f(handles)h(are)g(set)h(to)f(n)o(ull.)75 2394 y
Fu(MPI)p 144 2394 V 15 w(TESTALL\(count,)19 b(array)p 596 2394
V 15 w(of)p 655 2394 V 15 w(handles,)h(flag,)h(array)p 1107
2394 V 14 w(of)p 1165 2394 V 16 w(status\))117 2443 y Ft(in)14
b Fu(count)675 b Ft(lists)14 b(length)g(\(in)o(teger\))117
2488 y(in)g Fu(array)p 275 2488 V 15 w(of)p 334 2488 V 15 w(handles)447
b Ft(arra)o(y)13 b(of)g(handles)i(to)e(comm)o(unication)i(ob)r(jects)117
2533 y(out)f Fu(flag)673 b Ft(\(logical\))117 2577 y(out)14
b Fu(array)p 299 2577 V 14 w(of)p 357 2577 V 16 w(status)445
b Ft(arra)o(y)13 b(of)g(status)g(ob)r(jects)158 2654 y Fx(Causes)h(either)g
(all)e(or)h(none)h(of)e(the)i(op)q(erations)g(asso)q(ciated)g(with)e(the)i
(comm)o(unication)c(ahndles)j(to)g(com-)75 2704 y(plete.)36
b(It)20 b(returns)h Fu(flag)g(=)g(true)e Fx(if)g(all)f(comm)o(unications)f
(asso)q(ciated)j(with)f(handles)h(in)g(the)g(arra)o(y)f(ha)o(v)o(e)p
eop
%%Page: 17 17
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(17)75 45 y(completed.)18 b(In)c(this)h(case,)f(eac)o(h)h
(status)g(en)o(try)g(is)f(set)h(to)f(the)h(status)g(of)e(the)i(corresp)q
(onding)g(comm)o(unicatio)o(n.)75 95 y(All)10 b(comm)o(unicatio)o(n)e(ob)r
(jects)k(are)f(deallo)q(cated,)g(and)f(all)f(handles)i(are)g(set)h(to)e(n)o
(ull.)16 b(Otherwise,)c Fu(flag)21 b(=)h(false)75 145 y Fx(is)14
b(returned)h(and)f(the)h(v)n(alues)f(of)f(the)h(status)h(en)o(tries)g(are)g
(unde\014ned.)k(This)14 b(is)g(a)f(non)o(blo)q(c)o(king)g(op)q(eration)h
(that)75 195 y(returns)20 b(immediately;)e(if)f(one)i(busy)g(w)o(aits)g(with)
f Fu(MPI)p 986 195 14 2 v 15 w(TESTALL)p Fx(,)f(and)i(all)e(op)q(erations)i
(in)f(the)i(list)e(b)q(ecome)75 244 y(enabled,)c(then)g Fu(MPI)p
402 244 V 15 w(TESTALL)f Fx(will)f(ev)o(en)o(tually)h(return)j
Fu(flag)21 b(=)g(true)p Fx(.)158 344 y(Example:)75 477 y Fu(CALL)g
(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75 527 y(IF\(rank)f(<)i(2\))119
576 y(THEN)162 626 y(CALL)f(MPI_ISEND\(handle,)d(a,)k(n,)f(MPI_REAL,)f(2,)h
(tag,)g(comm,)g(ierr\))162 676 y(****)g(do)h(some)e(computation)g(to)h(mask)g
(latency)g(****)162 726 y(CALL)g(MPI_WAIT\(handle,)e(status,)h(ierr\))119
776 y(ELSE)86 b(!)22 b(rank.EQ.2)162 826 y(CALL)f(MPI_IRECV\(handle_l)o
(ist\(0)o(\),)e(a,)i(n,)h(MPI_REAL,)d(0,)j(tag,)f(comm,)g(ierr\))162
875 y(CALL)g(MPI_IRECV\(handle_l)o(ist\(1)o(\),)e(b,)i(n,)h(MPI_REAL,)d(1,)j
(tag,)f(comm,)g(ierr\))162 925 y(****)g(do)h(some)e(computation)g(to)h(mask)g
(latency)g(****)162 975 y(CALL)g(MPI_WAITANY\(2,)e(handle_list,)g(index,)i
(status,)f(ierr\))162 1025 y(IF\(index.EQ.0\))206 1075 y(THEN)249
1124 y(****)h(handle)g(message)f(from)h(process)g(0)g(****)249
1174 y(CALL)g(MPI_WAIT\(handle_lis)o(t\(1\),)d(status,)i(ierr\))249
1224 y(****)h(handle)g(message)f(from)h(process)g(1)g(****)206
1274 y(ELSE)249 1324 y(****)g(handle)g(message)f(from)h(process)g(1)g(****)
249 1373 y(CALL)g(MPI_WAIT\(handle_lis)o(t\(0\),)d(status,)i(ierr\))249
1423 y(****)h(handle)g(message)f(from)h(process)g(0)g(****)162
1473 y(END)g(IF)75 1523 y(END)g(IF)158 1606 y Fx(The)d(calls)f(in)o(tro)q
(duced)h(in)f(this)h(subsection)h(can)e(b)q(e)i(used)f(to)f(w)o(ait)g(or)h
(test)g(for)f(the)h(completion)e(of)h(an)75 1656 y(arbitrary)f(mix)f(of)h
(non)o(blo)q(c)o(king)f(comm)o(unicatio)o(n)f(calls,)i(including)g(a)g(mix)e
(sends)k(and)e(receiv)o(es)i(and)f(of)e(an)o(y)75 1706 y(additional)d(non)o
(blo)q(c)o(king)h(comm)o(unicati)o(on)e(calls)j(pro)o(vided)f(b)o(y)h(MPI.)
158 1755 y(The)e Fu(status)f Fx(argumen)o(t)f(in)h Fu(MPI)p
682 1755 V 16 w(WAITANY)f Fx(and)h Fu(MPI)p 1006 1755 V 15
w(WAITALL)g Fx(and)g(the)h Fu(array)p 1443 1755 V 15 w(of)p
1502 1755 V 15 w(status)f Fx(argumen)o(t)f(in)75 1805 y Fu(MPI)p
144 1805 V 15 w(WAITALL)i Fx(and)h Fu(MPI)p 471 1805 V 15 w(TESTALL)f
Fx(are)i(not)f(used)i(or)e(up)q(dated)h(if)f(the)h(completing)d(comm)o
(unication)f(is)j(a)h(send.)75 1855 y(If)h(all)e(op)q(erations)i(in)g(the)g
(list)g(pro)o(vided)g(b)o(y)f(the)i(argumen)o(t)e Fu(array)p
1175 1855 V 14 w(of)p 1233 1855 V 16 w(handles)f Fx(are)i(send)h(op)q
(erations,)f(then)75 1905 y(an)f(arbitrary)f(v)n(alue)h(can)g(b)q(e)g(passed)
h(to)f(the)g Fu(status)f Fx(\(resp.)19 b Fu(array)p 1181 1905
V 15 w(of)p 1240 1905 V 15 w(status)p Fx(\))13 b(argumen)o(t.)158
2033 y Fo(Discussion:)158 2079 y Ft(Is)g(the)g(last)h(paragraph)g(agreed?)158
2124 y(W)m(e)h(ma)o(y)g(w)o(an)o(t)g(to)g(allo)o(w)h(n)o(ull)g(p)q(oin)o
(ters)h(in)e(an)h(arra)o(y)p 975 2124 12 2 v 14 w(of)p 1020
2124 V 14 w(handles)h(This)e(will)i(allo)o(w)f(to)e(lo)q(op)j(with)e(the)g
(same)g(ar-)75 2170 y(ra)o(y)p 130 2170 V 14 w(of)p 175 2170
V 14 w(handles,)e(un)o(til)g(all)g(comm)o(unications)h(ha)o(v)o(e)e
(completed.)18 b(On)11 b(the)h(other)g(hand,)g(this)g(will)h(encourage)g(p)q
(oten)o(tially)75 2216 y(ine\016cien)o(t)i(co)q(de.)158 2266
y(I)10 b(added)h(the)f(requiremen)o(t)i(that)e(the)h(handel)h(to)e(a)g(comm)o
(unication)j(that)d(completes)h(is)g(set)f(to)g(n)o(ull.)18
b(This)11 b(prev)o(en)o(ts)75 2315 y(the)i(o)q(ccurence)h(of)f(dangling)j
(references,)d(but)g(add)h(some)f(o)o(v)o(erhead.)75 2535 y
Fw(1.9)59 b(Prob)r(e)20 b(and)f(Cancel)75 2626 y Fx(The)h Fu(MPI)p
235 2626 14 2 v 15 w(PROBE)e Fx(and)h Fu(MPI)p 530 2626 V 15
w(IPROBE)f Fx(op)q(erations)i(allo)o(w)d(incoming)g(messages)j(to)f(b)q(e)h
(c)o(hec)o(k)o(ed)g(for,)g(without)75 2676 y(actually)15 b(receiving)g(them.)
23 b(The)15 b(user)i(can)f(then)g(decide)g(ho)o(w)g(to)f(receiv)o(e)i(them,)d
(based)i(on)g(the)g(information)p eop
%%Page: 18 18
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(18)75 45 y(returned)16 b(b)o(y)d(the)i(prob)q(e)g(\(basically)
m(,)d(the)i(information)d(returned)16 b(b)o(y)e Fu(status)p
Fx(\).)j(In)d(particular,)f(the)i(user)g(ma)o(y)75 95 y(allo)q(cate)e(memory)
f(for)h(the)i(receiv)o(e)g(bu\013er,)f(according)g(to)g(the)h(length)e(of)h
(the)g(prob)q(ed)h(message.)158 145 y(The)e Fu(MPI)p 311 145
14 2 v 15 w(CANCEL)e Fx(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 195 y(clean)o(up.)25 b(P)o(osting)16 b(a)f(send)i(or)g(a)e(receiv)o(e)j
(ties)e(up)h(user)g(resources)h(\(send)f(or)f(receiv)o(e)i(bu\013ers\),)g
(and)d(a)h(cancel)75 244 y(ma)o(y)c(b)q(e)i(needed)i(to)e(free)g(these)i
(resources)g(gracefully)m(.)158 373 y Fo(Discussion:)158 423
y Ft(Made)j(one)g(c)o(hange)h(from)e(appro)o(v)o(ed)i(draft)f(on)g(prob)q(e:)
29 b(remo)o(v)o(ed)19 b(the)g(datat)o(yp)q(e)h(argumen)o(t)f(from)g(prob)q
(e.)34 b(If)75 472 y(generalized)15 b(datat)o(yp)q(e)f(are)e(adopted,)i(then)
f(it)g(seems)g(more)f(natural)i(to)f(pro)o(vide)h(the)e(argumen)o(t)i(in)f
(the)g(status)g(deco)q(de)75 522 y(function.)75 702 y Fu(MPI)p
144 702 V 15 w(IPROBE\(source,)19 b(tag,)i(comm,)g(flag,)f(status\))117
752 y Ft(in)14 b Fu(source)653 b Ft(source)13 b(rank,)h(or)f
Fm(MPI)p 1273 752 12 2 v 13 w(ANY)p 1346 752 V 13 w(SOURCE)d
Ft(\(in)o(teger\))117 797 y(in)k Fu(tag)719 b Ft(tag)13 b(v)n(alue)h(or)f
Fm(MPI)p 1221 797 V 13 w(ANY)p 1294 797 V 13 w(TAG)f Ft(\(in)o(teger\))117
843 y(in)i Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)117
889 y(out)h Fu(flag)673 b Ft(\(logical\))117 934 y(out)14 b
Fu(status)629 b Ft(status)13 b(ob)r(ject)158 1011 y Fu(MPI)p
227 1011 14 2 v 15 w(IPROBE)h Fx(returns)i Fu(flag)21 b(=)h(true)14
b Fx(if)g(there)i(is)f(a)g(message)f(that)h(can)h(b)q(e)f(receiv)o(ed)i(and)d
(that)h(matc)o(hes)75 1060 y(the)d(pattern)g(sp)q(eci\014ed)g(b)o(y)f(the)h
(parameters)f Fu(source)p Fx(,)f Fu(tag)p Fx(,)g(and)h Fu(comm)p
Fx(.)16 b(It)11 b(returns)i Fu(flag)21 b(=)g(false)p Fx(,)10
b(otherwise.)75 1110 y(If)k Fu(MPI)p 186 1110 V 15 w(IPROBE)f
Fx(returns)k Fu(flag)k(=)g(true)p Fx(,)13 b(then)j(the)f(source)h(and)e(tag)g
(of)g(the)h(message)f(matc)o(hed)g(are)h(returned)75 1160 y(in)c(the)i
(status)g(ob)r(ject.)18 b(These)13 b(are)g(the)f(same)f(v)n(alues)h(that)g(w)
o(ould)f(ha)o(v)o(e)h(b)q(een)h(returned)g(b)o(y)f(a)g(call)f(to)h
Fu(MPI)p 1776 1160 V 15 w(RECV)75 1210 y Fx(executed)k(at)e(the)g(same)f(p)q
(oin)o(t)g(in)h(the)g(program.)158 1260 y(These)19 b(v)n(alues)e(can)h(b)q(e)
g(deco)q(ded)h(from)d(the)i(return)h(status)f(ob)r(ject)h(using)e(the)h
(status)h(query)f(functions)75 1310 y(describ)q(ed)e(in)d(Section)h(1.3.1.)j
(The)d(return)h(status)g(ob)r(ject)f(is)g(unde\014ned)h(if)e
Fu(flag=false)p Fx(.)158 1359 y(The)20 b(call)e(to)h Fu(MPI)p
455 1359 V 15 w(PROBE)f Fx(do)q(es)i(not)f(carry)h(a)f(datat)o(yp)q(e)g
(argumen)o(t:)28 b(the)19 b(message)g(t)o(yp)q(e)h(ma)o(y)d(not)i(b)q(e)75
1409 y(kno)o(wn)13 b(when)h(the)f(prob)q(e)h(is)g(executed.)19
b(Accordingly)m(,)13 b(the)g(prob)q(e)h(call)f(do)q(es)h(not)f(return)h(in)f
(the)h(status)g(ob)r(ject)75 1459 y(the)i(length)f(of)f(the)i(prob)q(ed)g
(message,)e(and)h Fu(MPI)p 861 1459 V 15 w(GET)p 942 1459 V
15 w(COUNT)f Fx(cannot)h(b)q(e)h(used)g(after)f(a)g(call)f(to)h
Fu(MPI)p 1702 1459 V 15 w(PROBE)f Fx(to)75 1509 y(query)h(on)f(the)i(length)e
(of)g(the)h(prob)q(ed)h(message.)k(\(Remem)o(b)q(er)13 b(that)h(the)i(length)
e(of)g(a)g(message,)g(in)h(elemen)o(ts,)75 1559 y(dep)q(ends)k(on)d(the)i(t)o
(yp)q(es)g(of)e(these)j(elemen)o(ts;)f(some)e(implemen)o(tatio)o(ns)f(ma)o(y)
g(not)i(carry)g(in)g(the)g(transmitted)75 1608 y(message)c(t)o(yp)q(e)g
(information.)o(\))j(Instead,)d(a)g(di\013eren)o(t)g(status)h(deco)q(ding)f
(function)f(that)h(pro)o(vides)g(the)h(datat)o(yp)q(e)75 1658
y(as)g(argumen)o(t)f(can)h(b)q(e)g(used)h(in)f(this)f(case.)75
1755 y Fu(MPI)p 144 1755 V 15 w(PROBE)p 269 1755 V 15 w(COUNT\(status,)19
b(datatype,)h(count\))117 1805 y Ft(in)14 b Fu(status)653 b
Ft(status)13 b(ob)r(ject)117 1851 y(in)h Fu(datatype)609 b
Ft(message)13 b(datat)o(yp)q(e)117 1896 y(out)h Fu(count)651
b Ft(n)o(um)o(b)q(er)14 b(of)e(en)o(tries)i(in)g(message)g(\(in)o(teger\))158
1973 y Fx(Returns)h(the)f(length)g(of)f(the)h(message)f(that)h(w)o(as)g(last)
f(prob)q(ed)i(with)e Fu(status)f Fx(as)i(an)g(argumen)o(t.)j(The)d(call)75
2023 y(is)g(erroneous)h(if)e Fu(datatype)f Fx(do)q(es)j(not)f(matc)o(h)e(the)
j(t)o(yp)q(e)f(of)g(the)g(message.)158 2151 y Fo(Discussion:)158
2197 y Ft(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 2242 y(message)12 b(is)g(merely)h(a)e(string)i(of)e(b)o(ytes)h(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)f(is)75 2288 y(done)i(using)i(the)d(datat)o
(yp)q(e)i(information)h(pro)o(vided)g(b)o(y)e(the)g(lo)q(cal)h(comm)o
(unication)h(call.)21 b(The)13 b(abilit)o(y)j(to)e(use)g(suc)o(h)g(an)75
2333 y(implemen)o(tation)k(strategy)d(is)h(deemed)f(to)g(b)q(e)g(an)g(imp)q
(ortan)o(t)h(goal.)23 b(In)15 b(suc)o(h)g(an)g(implemen)o(tation)q(,)i(when)e
(a)g(message)75 2379 y(arriv)o(es,)f(it)f(is)g(not)h(kno)o(wn)f(ho)o(w)g(man)
o(y)g(elemen)o(ts)h(it)g(con)o(tains,)g(or)f(ev)o(en)g(ho)o(w)g(m)o(uc)o(h)g
(storage)h(is)f(needed)h(to)f(receiv)o(e)h(that)75 2425 y(message)g(\(b)q
(ecause)g(of)e(p)q(ossible)k(represen)o(tation)f(con)o(v)o(ersion)g(in)f(a)f
(heterogeneous)i(en)o(vironmen)o(t\).)k(The)13 b(length)h(of)f(the)75
2470 y(incoming)18 b(message)e(can)g(b)q(e)g(computed)h(b)o(y)f
Fm(MPI)p 818 2470 12 2 v 13 w(PROBE)p 931 2470 V 12 w(LEN)e
Ft(from)i(the)f(b)o(yte)h(length)h(of)f(the)g(message)g(and)g(from)g(the)75
2516 y(datat)o(yp)q(e)e(parameter.)158 2562 y(The)h(curren)o(t)g(solution)i
(sa)o(v)o(es)f(us)f(the)g(need)h(for)e(one)i(additional)i(w)o(ord)d(p)q(er)g
(message)h(that)f(w)o(ould)h(otherwise)g(b)q(e)75 2607 y(needed)e(to)f
(transfer)g(the)g(message)h(length)g(\(in)g(elemen)o(ts\))g(with)g(the)f
(message.)158 2653 y Fo(Need)h(b)q(e)h(discussed)g(b)o(y)g(MPIF)p
eop
%%Page: 19 19
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(19)158 45 y Ft(W)m(e)15 b(ma)o(y)g(w)o(an)o(t)g(a)f(call)j(to)
d Fm(MPI)p 623 45 12 2 v 13 w(PROBE)p 736 45 V 13 w(COUNT)e
Ft(to)j(b)q(e)g(signi\014can)o(t)i(not)e(just)g(after)g(prob)q(e,)h(but)f
(also)h(after)e(receiv)o(e,)75 91 y(for)f(consistency)i(reasons.)158
136 y(It's)k(tempting)h(to)f(merge)h Fm(MPI)p 637 136 V 13
w(GET)p 710 136 V 13 w(COUNT)d Ft(and)j Fm(MPI)p 981 136 V
13 w(PROBE)p 1094 136 V 12 w(COUNT)d Ft(in)o(to)j(one)g(call.)37
b(E.g.,)20 b(alw)o(a)o(ys)g(pro)o(vide)h(a)75 182 y(datat)o(yp)q(e)15
b(argumen)o(t,)f(ev)o(en)g(though)h(it)f(is)g(redundan)o(t)i(after)d(a)h
(receiv)o(e.)19 b(But)14 b(then)g(w)o(e)g(imp)q(ose)h(an)f(additional)j
(burden)75 228 y(on)c(regular)i(receiv)o(es.)158 273 y(W)m(e)d(ma)o(y)h(w)o
(an)o(t)f(to)g(relax)h(t)o(yp)q(e)g(restrictions)h(so)e(that)h
Fm(datatype)j(=)k(MPI)p 1230 273 V 13 w(BYTE)10 b Ft(could)k(b)q(e)e(used)h
(as)f(an)h(argumen)o(t)g(to)75 319 y Fm(MPI)p 137 319 V 13
w(PROBE)p 250 319 V 12 w(COUNT)p Ft(,)d(ev)o(en)o(t)k(if)f(the)g(message)g(w)
o(as)g(sen)o(t)g(with)g(another)g(datat)o(yp)q(e;)h(this)g(will)g(allo)o(w)g
(to)f(coun)o(t)g(the)g(n)o(um)o(b)q(er)75 365 y(of)g(b)o(ytes)g(receiv)o(ed,)
h(and)g(use)f(this)h(coun)o(t)g(in)f(a)g(mallo)q(c.)158 497
y Fx(A)h(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
547 y(call)f(to)h Fu(MPI)p 271 547 14 2 v 15 w(IPROBE)f Fx(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 597 y(receiv)o(e)c(o)q(ccurred)g(after)f
(the)g(prob)q(e.)18 b(If)9 b(the)h(receiving)g(pro)q(cess)i(is)d(m)o
(ulti-threaded,)g(it)g(is)h(the)g(user)g(resp)q(onsibilit)o(y)75
647 y(to)k(ensure)h(that)f(the)h(last)e(condition)g(holds.)158
775 y Fo(Discussion:)158 821 y Ft(MPI)d(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 866 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
912 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 Fm(MPI)p 1309 912
12 2 v 13 w(PROBE)10 b Ft(returns)j(information)h(on)f(the)75
958 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 1003 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
Fm(MPI)p 1261 1003 V 13 w(PROBE)p Ft(.)75 1183 y Fu(MPI)p 144
1183 14 2 v 15 w(PROBE\()21 b(source,)f(tag,)h(comm,)g(datatype,)f(status\))
117 1233 y Ft(in)14 b Fu(source)653 b Ft(source)13 b(rank,)h(or)f
Fm(MPI)p 1273 1233 12 2 v 13 w(ANY)p 1346 1233 V 13 w(SOURCE)d
Ft(\(in)o(teger\))117 1279 y(in)k Fu(tag)719 b Ft(tag)13 b(v)n(alue,)h(or)f
Fm(MPI)p 1232 1279 V 13 w(ANY)p 1305 1279 V 13 w(TAG)e Ft(\(in)o(teger\))117
1324 y(in)j Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)117
1370 y(in)h Fu(datatype)609 b Ft(assumed)14 b(t)o(yp)q(e)f(of)g(data)g(in)h
(message)g(\(status\))117 1416 y(out)g Fu(status)629 b Ft(status)13
b(ob)r(ject)158 1492 y Fu(MPI)p 227 1492 14 2 v 15 w(PROBE)g
Fx(b)q(eha)o(v)o(es)i(lik)o(e)f Fu(MPI)p 663 1492 V 15 w(IPROBE)f
Fx(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 1542 y(matc)o(hing)e(message)i(has)g(b)q(een)h(found.)
158 1670 y Fo(Discussion:)158 1716 y(CANCEL)f(has)h(b)q(een)g(c)o(hanged)f
(since)h(last)h(draft)75 1895 y Fu(MPI)p 144 1895 V 15 w(CANCEL\(handle\))117
1945 y Ft(in)e Fu(handle)653 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r
(ject)158 2021 y Fx(A)g(call)f(to)g Fu(MPI)p 404 2021 V 15
w(CANCEL)g Fx(marks)f(for)h(cancellation)g(a)h(p)q(ending)g(non)o(blo)q(c)o
(king)e(comm)o(unicatio)o(n)f(op)q(eration)75 2071 y(\(send)h(or)f(receiv)o
(e\).)19 b(The)13 b(cancel)g(call)f(is)h(non-blo)q(c)o(king,)e(and)i(lo)q
(cal.)k(It)c(returns)h(immediately)l(,)c(p)q(ossibly)i(b)q(efore)75
2121 y(the)i(comm)o(unication)d(is)j(actually)f(cancelled.)158
2171 y(It)f(is)g(still)f(necessary)j(to)e(complete)g(a)f(comm)o(unication)e
(that)j(has)g(b)q(een)h(mark)o(ed)e(for)h(cancellation,)f(using)h(a)75
2221 y(call)f(to)h Fu(MPI)p 267 2221 V 15 w(WAIT)f Fx(or)g
Fu(MPI)p 495 2221 V 16 w(TEST)f Fx(\(or)i(an)o(y)g(of)f(the)h(deriv)o(ed)h
(op)q(erations\).)k(If)12 b(the)g(op)q(eration)g(has)g(b)q(een)h(cancelled,)
75 2271 y(then)h(information)d(ab)q(out)j(to)g(that)g(e\013ect)h(will)d(b)q
(e)j(returned)g(in)f(the)g(status)h(argumen)o(t)e(of)g(the)h(op)q(eration)g
(that)75 2320 y(completes)19 b(the)h(comm)o(unicatio)o(n.)31
b(If)19 b(a)g(comm)o(unicatio)o(n)e(is)i(mark)o(ed)f(for)h(cancellation,)g
(then)h(a)f Fu(MPI)p 1776 2320 V 15 w(WAIT)75 2370 y Fx(call)d(for)g(that)h
(comm)o(unication)d(is)i(guaran)o(teed)i(to)e(return,)i(irresp)q(ectiv)o(e)h
(of)d(the)i(status)f(of)f(other)i(pro)q(cesses;)75 2420 y(similarly)13
b(if)h Fu(MPI)p 355 2420 V 15 w(TEST)h Fx(is)h(rep)q(eatedly)h(called)e(in)g
(a)g(busy)h(w)o(ait)f(lo)q(op)g(for)g(a)h(cancelled)g(comm)o(unication,)c
(then)75 2470 y Fu(MPI)p 144 2470 V 15 w(TEST)h Fx(will)f(ev)o(en)o(tually)i
(b)q(e)g(successful.)158 2520 y(Either)21 b(the)g(cancellation)f(succeeds,)k
(or)c(the)h(comm)o(unication)c(succeeds,)24 b(but)d(not)f(b)q(oth.)38
b(If)20 b(a)g(send)75 2569 y(is)e(mark)o(ed)f(for)h(cancellation,)g(then)h
(it)e(m)o(ust)g(b)q(e)i(the)g(case)g(that)f(either)h(the)g(send)g(completes)f
(normally)m(,)d(in)75 2619 y(whic)o(h)e(case)h(the)g(message)e(sen)o(t)i(w)o
(as)f(receiv)o(ed)h(at)f(the)h(destination)f(pro)q(cess,)h(or)f(that)g(the)h
(send)g(is)f(successfully)75 2669 y(cancelled,)g(in)e(whic)o(h)h(case)h(no)f
(part)g(of)f(the)i(message)f(w)o(as)g(receiv)o(ed)h(at)f(the)h(destination.)k
(Then,)12 b(an)o(y)g(matc)o(hing)p eop
%%Page: 20 20
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(20)75 45 y(receiv)o(e)16 b(has)f(to)f(b)q(e)h(satis\014ed)h(b)
o(y)e(another)h(send.)22 b(If)14 b(a)g(receiv)o(e)i(is)f(mark)o(ed)e(for)h
(cancellation,)g(then)h(it)g(m)o(ust)e(b)q(e)75 95 y(the)i(case)h(that)f
(either)h(the)f(receiv)o(e)i(completes)d(normally)m(,)e(or)j(that)g(the)g
(receiv)o(e)h(is)f(successfully)h(cancelled,)f(in)75 145 y(whic)o(h)g(case)g
(no)g(part)g(of)f(the)h(receiv)o(e)h(bu\013er)g(is)e(altered.)21
b(Then,)15 b(an)o(y)g(matc)o(hing)d(send)k(has)f(to)f(b)q(e)i(satis\014ed)f
(b)o(y)75 195 y(another)f(receiv)o(e.)75 292 y Fu(MPI)p 144
292 14 2 v 15 w(TEST)p 247 292 V 15 w(CANCELLED\(status,)k(flag\))117
341 y Ft(in)c Fu(status)653 b Ft(return)13 b(status)h(ob)r(ject)117
387 y(in)g Fu(flag)697 b Ft(\(logical\))158 463 y Fx(Returns)16
b Fu(flag)21 b(=)g(true)14 b Fx(if)g(the)i(comm)o(unicatio)o(n)c(asso)q
(ciated)k(with)e(the)i(return)g(status)f(ob)r(ject)h(w)o(as)f(can-)75
513 y(celled)f(successfully)m(.)19 b(In)14 b(suc)o(h)g(a)g(case,)g(all)f
(other)h(\014elds)g(of)f Fu(status)g Fx(\(suc)o(h)i(as)e Fu(length)g
Fx(or)h Fu(tag)p Fx(\))f(are)h(unde\014ned.)75 563 y(Returns)j
Fu(flag)k(=)h(false)p Fx(,)15 b(otherwise.)27 b(If)16 b(a)g(receiv)o(e)i(op)q
(eration)e(migh)o(t)f(b)q(e)i(cancelled)g(then)g(one)g(should)f(call)75
613 y Fu(MPI)p 144 613 V 15 w(TEST)p 247 613 V 15 w(CANCELLED)g
Fx(\014rst,)k(to)e(c)o(hec)o(k)h(whether)h(the)e(op)q(eration)g(w)o(as)g
(cancelled,)i(b)q(efore)f(c)o(hec)o(king)f(on)g(the)75 663
y(other)d(v)n(alues)e(of)g(the)i(return)g(status.)75 800 y
Fw(1.10)59 b(P)n(ersistent)19 b(comm)n(un)o(ication)e(objects)75
969 y Fo(Discussion:)158 1019 y(there)e(are)h(some)e(c)o(hanges)h(here)g(not)
g(y)o(et)g(appro)o(v)o(ed)f(b)o(y)h(MPIF)158 1152 y Fx(Often)i(a)f(comm)o
(uni)o(cation)d(with)j(the)h(same)e(parameter)h(list)f(is)h(rep)q(eatedly)i
(executed)g(within)d(the)i(inner)75 1201 y(lo)q(op)g(of)h(a)g(parallel)f
(computation.)29 b(In)18 b(suc)o(h)h(a)e(situation,)i(it)e(ma)o(y)f(b)q(e)j
(p)q(ossible)g(to)f(optimize)e(the)j(comm)o(u-)75 1251 y(nication)c(b)o(y)h
(binding)g(the)h(list)e(of)h(comm)o(unicatio)o(n)e(parameters)i(to)g(the)h
(comm)o(unicatio)o(n)d(ob)r(ject)j(once)g(and,)75 1301 y(then,)f(rep)q
(eatedly)g(using)e(the)i(comm)o(unication)c(handle)j(to)f(initiate)h(and)f
(complete)h(messages.)21 b(The)16 b(comm)o(u-)75 1351 y(nication)g(handle)g
(th)o(us)h(created)h(can)f(b)q(e)g(though)o(t)f(of)g(as)h(a)f(comm)o
(unication)d(p)q(ort)k(or)g(a)f(\\half-c)o(hannel")f(.)26 b(It)75
1401 y(do)q(es)18 b(not)f(pro)o(vide)g(the)g(full)f(functionalit)o(y)f(of)i
(a)g(con)o(v)o(en)o(tional)f(c)o(hannel,)h(since)h(there)g(is)f(no)g(binding)
f(of)g(the)75 1451 y(send)i(p)q(ort)f(to)g(the)g(receiv)o(e)h(p)q(ort:)24
b(this)17 b(construct)i(allo)o(ws)c(reduction)j(of)e(the)i(o)o(v)o(erhead)f
(for)f(comm)o(unication)75 1500 y(b)q(et)o(w)o(een)f(pro)q(cessor)g(and)e
(comm)o(unication)d(con)o(troller,)k(but)f(not)h(the)g(o)o(v)o(erhead)f(for)h
(comm)o(uni)o(cation)d(b)q(et)o(w)o(een)75 1550 y(one)j(comm)o(unication)d
(con)o(troller)i(and)h(another.)158 1600 y(A)g(comm)o(unication)c(ob)r(ject)
15 b(is)f(created)h(using)f(one)g(of)f(the)i(four)e(follo)o(wing)e(calls.)18
b(These)d(calls)f(in)o(v)o(olv)o(e)e(no)75 1650 y(comm)o(unication.)158
1700 y(The)k(function)f Fu(MPI)p 478 1700 V 15 w(CREATE)p 625
1700 V 14 w(SEND)g Fx(creates)i(a)e(comm)o(uni)o(cation)d(ob)r(ject)k(for)f
(a)g(standard)h(mo)q(de)e(send)i(op-)75 1749 y(eration,)d(and)h(binds)g(to)g
(it)f(all)g(the)h(parameters)g(of)g(a)f(send)i(op)q(eration.)75
1846 y Fu(MPI)p 144 1846 V 15 w(CREATE)p 291 1846 V 15 w(SEND\(handle,)k
(start,)h(count,)h(datatype,)f(dest,)h(tag,)g(comm\))117 1896
y Ft(out)14 b Fu(handle)629 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r
(ject)117 1942 y(in)e Fu(start)675 b Ft(initial)16 b(address)e(of)e(send)i
(bu\013er)g(\(c)o(hoice\))117 1988 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)
14 b(of)e(elemen)o(ts)i(sen)o(t)g(\(in)o(teger\))117 2033 y(in)g
Fu(datatype)609 b Ft(t)o(yp)q(e)13 b(of)g(eac)o(h)g(elemen)o(t)117
2079 y(in)h Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
2125 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
2170 y(in)g Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)i(ob)r(ject)158
2247 y Fx(The)g(call)e(allo)q(cates)h(a)g(new)h(comm)o(unicati)o(on)c(ob)r
(ject)k(and)f(asso)q(ciates)i(the)e(comm)o(unication)d(handle)j(with)75
2296 y(it.)158 2425 y Fo(Discussion:)158 2470 y Ft(Tw)o(o)e(c)o(hanges:)158
2516 y(1.)29 b Fm(buffer)p 339 2516 12 2 v 12 w(handle)15 b
Ft(is)j(replaced)g(with)g Fm(start,)f(count,)h(datatype)p Ft(,)c(to)j(b)q(e)h
(in)g(sync)g(with)f(the)h(new)f(datat)o(yp)q(e)75 2562 y(prop)q(osal.)158
2607 y(2.)25 b(T)m(o)q(ok)15 b(out)h Fm(persistenc)o(e)p Ft(.)22
b(Do)q(es)16 b(not)g(seem)f(v)o(ery)h(useful)h(here.)25 b(Instead,)17
b(I)e(in)o(tro)q(duce)i(in)g(the)f(last)g(section,)75 2653
y(a)e(\\univ)o(ersal")j(comm)o(unication)f(function,)f(whic)o(h)g(w)o(ould)g
(not)f(usually)i(used)f(directly)g(b)o(y)f(programmers,)h(but)f(can)h(b)q(e)
75 2699 y(used)f(to)f(de\014ne)h(the)f(other)g(comm)o(unication)j(functions.)
p eop
%%Page: 21 21
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(21)158 45 y(The)14 b(function)f Fu(MPI)p 474
45 14 2 v 16 w(CREATE)p 622 45 V 14 w(RSEND)g Fx(creates)i(a)e(comm)o
(unication)e(ob)r(ject)j(for)f(a)h(ready)g(mo)q(de)e(send)j(op)q(era-)75
95 y(tion.)75 192 y Fu(MPI)p 144 192 V 15 w(CREATE)p 291 192
V 15 w(RSEND\(handle,)k(start,)h(count,)h(datatype,)f(dest,)g(tag,)h(comm\))
117 242 y Ft(out)14 b Fu(handle)629 b Ft(handle)14 b(to)f(comm)o(unication)j
(ob)r(ject)117 287 y(in)e Fu(start)675 b Ft(initial)16 b(address)e(of)e(send)
i(bu\013er)117 333 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(sen)o(t)g(\(in)o(teger\))117 378 y(in)g
Fu(datatype)609 b Ft(t)o(yp)q(e)13 b(of)g(eac)o(h)g(elemen)o(t)117
424 y(in)h Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
469 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
515 y(in)g Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)i(ob)r(ject)158
591 y Fx(The)g(function)f Fu(MPI)p 476 591 V 15 w(CREATE)p
623 591 V 14 w(SSEND)f Fx(creates)j(a)e(comm)o(unication)d(ob)r(ject)k(for)f
(a)g(sync)o(hronous)h(mo)q(de)e(send)75 641 y(op)q(eration.)75
738 y Fu(MPI)p 144 738 V 15 w(CREATE)p 291 738 V 15 w(SSEND\(handle,)19
b(start,)h(count,)h(datatype,)f(dest,)g(tag,)h(comm\))117 788
y Ft(out)14 b Fu(handle)629 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r
(ject)117 833 y(in)e Fu(start)675 b Ft(initial)16 b(address)e(of)e(send)i
(bu\013er)117 879 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(sen)o(t)g(\(in)o(teger\))117 924 y(in)g
Fu(datatype)609 b Ft(t)o(yp)q(e)13 b(of)g(eac)o(h)g(elemen)o(t)117
970 y(in)h Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
1015 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
1061 y(in)g Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)i(ob)r(ject)158
1137 y Fx(The)f(function)g Fu(MPI)p 475 1137 V 15 w(CREATE)p
622 1137 V 14 w(RECV)f Fx(creates)j(a)e(comm)o(unicatio)o(n)d(ob)r(ject)k
(for)e(a)h(receiv)o(e)h(op)q(eration.)75 1234 y Fu(MPI)p 144
1234 V 15 w(CREATE)p 291 1234 V 15 w(RECV\(handle,)k(start,)h(count,)h
(datatype,)f(source,)g(tag,)h(comm\))117 1284 y Ft(out)14 b
Fu(handle)629 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r(ject)117
1330 y(out)e Fu(start)651 b Ft(initial)16 b(address)e(of)e(receiv)o(e)i
(bu\013er)117 1375 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(receiv)o(ed)h(\(in)o(teger\))117 1421
y(in)f Fu(datatype)609 b Ft(t)o(yp)q(e)13 b(of)g(eac)o(h)g(elemen)o(t)117
1466 y(in)h Fu(dest)697 b Ft(rank)13 b(of)g(source)h(or)f(MPI)p
1321 1466 12 2 v 14 w(ANY)p 1422 1466 V 13 w(SOUR)o(CE)g(\(in)o(teger\))117
1512 y(in)h Fu(tag)719 b Ft(message)13 b(tag)h(or)f(MPI)p 1285
1512 V 14 w(ANY)p 1386 1512 V 13 w(T)m(A)o(G)f(\(in)o(teger\))117
1557 y(in)i Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)i(ob)r(ject)158
1634 y Fx(A)i(comm)o(uni)o(cation)d(\(send)j(or)f(receiv)o(e\))i(that)f(uses)
g(a)g(prede\014ned)h(handle)e(is)g(initiated)g(b)o(y)g(the)h(function)75
1683 y Fu(MPI)p 144 1683 14 2 v 15 w(START)p Fx(.)75 1780 y
Fu(MPI)p 144 1780 V 15 w(START\(handle\))117 1830 y Ft(inout)e
Fu(handle)597 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r(ject)158
1907 y Fx(The)i(comm)o(unication)c(ob)r(ject)19 b(asso)q(ciated)f(with)g
Fu(handle)e Fx(should)h(b)q(e)i(an)e(ob)r(ject)i(that)e(w)o(as)h(created)h(b)
o(y)75 1956 y(one)d(of)g(the)h(previous)f(four)g(functions,)g(so)g(that)h
(all)d(the)j(comm)o(unication)c(parameters)j(are)h(already)e(de\014ned.)75
2006 y(A)g(send)g(can)g(b)q(e)g(started)h(pro)o(vided)f(that)f(the)h
(previous)g(send)h(using)e(the)i(same)d(ob)r(ject)j(has)e(completed,)g(or)h
(as)75 2056 y(so)q(on)i(as)f(the)h(ob)r(ject)h(is)e(created,)i(if)e(it)g(has)
h(not)f(y)o(et)h(b)q(een)g(used)h(in)e(a)g(comm)o(unication.)23
b(In)16 b(addition,)g(if)f(the)75 2106 y(comm)o(unication)e(mo)q(de)i(is)g
Fu(ready)g Fx(then)i(a)f(matc)o(hing)e(receiv)o(e)j(should)f(b)q(e)g(p)q
(osted.)26 b(The)16 b(send)h(bu\013er)g(should)75 2156 y(not)d(b)q(e)g(up)q
(dated)h(after)f(the)h(send)f(is)g(started,)h(un)o(til)e(the)h(op)q(eration)g
(completes.)158 2205 y(A)i(receiv)o(e)i(can)e(b)q(e)h(started)h(pro)o(vided)e
(that)g(the)h(preceding)g(receiv)o(e)h(using)e(the)h(same)e(ob)r(ject)i(has)f
(com-)75 2255 y(pleted,)i(or)f(as)g(so)q(on)h(as)f(the)h(ob)r(ject)g(is)f
(created,)i(if)d(it)h(has)g(not)g(y)o(et)g(b)q(een)i(used)f(in)e(a)h(comm)o
(unication.)25 b(The)75 2305 y(receiv)o(e)15 b(bu\013er)g(should)f(not)g(b)q
(e)g(accessed)i(after)e(the)h(receiv)o(e)g(is)f(started,)g(un)o(til)f(the)i
(op)q(eration)f(completes.)158 2355 y(The)i(call)f(is)h(non)o(blo)q(c)o
(king,)e(with)i(similar)d(seman)o(tics)j(as)f(the)i(non)o(blo)q(c)o(king)d
(comm)o(unication)f(op)q(erations)75 2405 y(describ)q(ed)j(in)d(Section)h
(1.8.)158 2455 y(A)d(comm)o(uni)o(cation)d(started)j(with)f(a)h(call)e(to)i
Fu(MPI)p 935 2455 V 15 w(START)e Fx(is)i(completed)e(b)o(y)i(a)f(call)g(to)g
Fu(MPI)p 1574 2455 V 15 w(WAIT)p Fx(,)f Fu(MPI)p 1764 2455
V 15 w(TEST)p Fx(,)75 2504 y(or)h(one)g(of)f(the)i(deriv)o(ed)f(functions)g
(describ)q(ed)i(in)d(Section)h(1.8.4.)15 b(These)c(comm)o(unication)c
(completion)h(functions)75 2554 y(do)13 b(not)g(deallo)q(cate)g(the)g(comm)o
(unication)d(ob)r(ject,)j(and)g(this)g(can)g(b)q(e)h(reused)g(anew)f(b)o(y)g
(a)g Fu(MPI)p 1578 2554 V 15 w(START)f Fx(call.)17 b(The)75
2604 y(ob)r(ject)f(needs)h(to)e(b)q(e)h(explicitly)e(deallo)q(cated)h(b)o(y)g
(a)g(call)g(to)g(the)h(function)f Fu(MPI)p 1358 2604 V 15 w(COMM)p
1461 2604 V 15 w(FREE)p Fx(,)f(b)q(elo)o(w.)22 b(W)m(e)15 b(th)o(us)75
2654 y(ha)o(v)o(e)k(t)o(w)o(o)g(t)o(yp)q(es)h(of)e(comm)o(unication)e(ob)r
(jects:)29 b Fv(p)q(ersisten)o(t)16 b Fx(ob)r(jects,)21 b(whic)o(h)e(are)g
(allo)q(cated)g(b)o(y)g(a)g(call)f(to)75 2704 y Fu(MPI)p 144
2704 V 15 w(CREATE)p 291 2704 V 15 w(xxx)p Fx(,)h(and)g(are)g(explicitly)f
(deallo)q(cated)h(b)o(y)g Fu(MPI)p 1100 2704 V 15 w(COMM)p
1203 2704 V 15 w(FREE)p Fx(,)e(and)i Fv(ephemeral)e Fx(ob)r(jects)j(that)p
eop
%%Page: 22 22
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(22)75 45 y(p)q(ersist)19 b(for)d(one)i(comm)o(unication)c
(only:)24 b(they)18 b(are)f(created)i(b)o(y)e(a)g(non)o(blo)q(c)o(king)f
(comm)o(unication)e(initiation)75 95 y(function,)f(and)h(are)g(freed)h(b)o(y)
f(the)g(comm)o(unication)c(completion)j(call.)75 192 y Fu(MPI)p
144 192 14 2 v 15 w(COMM)p 247 192 V 15 w(FREE\(handle\))117
242 y Ft(inout)i Fu(handle)597 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r
(ject)158 318 y Fx(Marks)g(the)h(comm)o(uni)o(cation)c(ob)r(ject)k(for)e
(deallo)q(cation.)23 b(The)16 b(ob)r(ject)h(will)d(b)q(e)i(deallo)q(cated)g
(when)h(there)75 368 y(are)d(no)g(p)q(ending)g(comm)o(unicatio)o(ns)e(in)o(v)
o(olving)f(this)j(ob)r(ject,)g(at)g(whic)o(h)g(p)q(oin)o(t)f(the)i(handle)f
(b)q(ecomes)g(n)o(ull.)158 418 y(The)21 b(call)e(is)h(non)o(blo)q(c)o(king,)g
(and)g(the)h(ob)r(ject)g(ma)o(y)d(not)i(b)q(e)h(deallo)q(cated)f(when)h(the)g
(call)e(returns.)39 b(It)75 468 y(is)18 b(p)q(ermissible)g(to)g(call)f
Fu(MPI)p 546 468 V 16 w(COMM)p 650 468 V 14 w(FREE\(handle\))f
Fx(after)j(a)f(comm)o(unicati)o(on)e(that)i(uses)h Fu(handle)e
Fx(has)i(b)q(een)75 517 y(initiated,)g(but)h(b)q(efore)g(it)f(has)g
(completed.)34 b(The)20 b(ob)r(ject)g(will)e(b)q(e)i(deallo)q(cated)f(after)h
(the)f(comm)o(unication)75 567 y(completes.)f(It)c(is)f(erroneous)j(to)d(try)
i(to)e(reuse)j(the)e(handle)g(for)g(a)f(subsequen)o(t)j(comm)o(unicatio)o(n.)
158 617 y(A)g(correct)i(in)o(v)o(o)q(cation)c(of)i(the)g(functions)g(describ)
q(ed)i(in)e(this)g(section)g(will)f(o)q(ccur)i(in)e(a)h(sequence)i(of)d(the)
75 667 y(form)179 750 y Fv(Create)g Fx(\()p Fv(Start)g(Complete)p
Fx(\))691 733 y Fk(\003)724 750 y Fv(F)l(ree)h Fj(;)75 833
y Fx(where)j Fn(\003)f Fx(indicates)g(zero)g(or)g(more)f(rep)q(etitions.)31
b(If)17 b(the)i(same)e(comm)o(unicati)o(on)e(ob)r(ject)k(is)e(used)i(in)e
(sev)o(eral)75 883 y(concurren)o(t)h(threads,)g(it)e(is)g(the)h(user)g(resp)q
(onsibilit)o(y)f(to)g(co)q(ordinate)h(calls)f(so)g(that)h(the)g(correct)h
(sequence)g(is)75 932 y(ob)q(ey)o(ed.)158 982 y(A)g(send)h(op)q(eration)f
(initiated)f(with)h Fu(MPI)p 834 982 V 15 w(START)f Fx(can)h(b)q(e)h(matc)o
(hed)e(with)h(an)o(y)f(receiv)o(e)j(op)q(eration)e(and,)75
1032 y(lik)o(ewise,)d(a)g(receiv)o(e)i(op)q(eration)e(initiated)g(with)g
Fu(MPI)p 935 1032 V 15 w(START)f Fx(can)i(receiv)o(e)h(messages)e(generated)i
(b)o(y)e(an)o(y)g(send)75 1082 y(op)q(eration.)75 1219 y Fw(1.11)59
b(Send-receive)75 1389 y Fo(Discussion:)158 1438 y(This)15
b(section)g(has)g(not)g(y)o(et)g(b)q(een)g(appro)o(v)o(ed)f(b)o(y)h(MPIF.)158
1571 y Fx(The)f Fv(send-receiv)o(e)c Fx(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
1621 y(and)h(the)g(receiving)h(of)e(another)h(message,)f(from)g(another)h
(destination,)f(p)q(ossibly)h(the)g(same.)k(The)c Fv(exc)o(hange)75
1671 y Fx(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 1720 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 1770 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 1820 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
1870 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(or)e(exc)o(hange)g(op)q(eration)g(is)f
(used,)h(the)75 1920 y(comm)o(unication)g(subsystem)j(tak)o(es)g(care)h(of)f
(these)h(issues.)32 b(Also,)18 b(a)g(send-receiv)o(e)i(op)q(eration)e(is)g
(useful)g(for)75 1969 y(implemen)o(ting)10 b(remote)k(pro)q(cedure)i(calls.)
158 2019 y(A)h(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 2069 y(op)q(eration,)c(and)h(vice)g(v)o(ersa.)75
2166 y Fu(MPI)p 144 2166 V 15 w(SENDRECV\(send)p 445 2166 V
13 w(start,)21 b(send)p 699 2166 V 14 w(count,)g(send)p 954
2166 V 15 w(type,)g(dest,)f(recv)p 1318 2166 V 15 w(start,)h(recv)p
1574 2166 V 15 w(count,)f(recv)p 1829 2166 V 15 w(type,)75
2216 y(source,)g(tag,)h(comm,)g(status\))117 2266 y Ft(in)14
b Fu(send)p 253 2266 V 15 w(start)572 b Ft(initial)16 b(address)e(of)e(send)i
(bu\013er)g(\(c)o(hoice\))117 2311 y(in)g Fu(send)p 253 2311
V 15 w(count)572 b Ft(n)o(um)o(b)q(er)14 b(of)e(elemen)o(ts)i(in)g(send)g
(bu\013er)g(\(in)o(teger\))117 2357 y(in)g Fu(send)p 253 2357
V 15 w(type)594 b Ft(t)o(yp)q(e)13 b(of)g(elemen)o(ts)h(in)g(send)f(bu\013er)
117 2403 y(in)h Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))
117 2448 y(out)e Fu(recv)p 277 2448 V 15 w(start)548 b Ft(initial)16
b(address)e(of)e(receiv)o(e)i(bu\013er)g(\(c)o(hoice\))117
2494 y(in)g Fu(recv)p 253 2494 V 15 w(count)572 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(in)g(receiv)o(e)g(bu\013er)g(\(in)o(teger\))117
2540 y(in)g Fu(recv)p 253 2540 V 15 w(type)594 b Ft(t)o(yp)q(e)13
b(of)g(elemen)o(ts)h(in)g(receiv)o(e)g(bu\013er)117 2585 y(in)g
Fu(source)653 b Ft(rank)13 b(of)g(source)h(\(in)o(teger\))117
2631 y(in)g Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
2677 y(in)g Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)p
eop
%%Page: 23 23
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(23)117 45 y Ft(out)14 b Fu(status)629 b Ft(status)13
b(ob)r(ject)158 121 y Fx(Execute)k(a)d(blo)q(c)o(king)g(send)i(and)f(receiv)o
(e)h(op)q(eration.)21 b(Both)16 b(send)g(and)e(receiv)o(e)j(use)e(the)h(same)
e(tag)h(v)n(alue)75 171 y(and)d(the)h(same)e(comm)o(unicator.)k(Ho)o(w)o(ev)o
(er,)d(the)h(send)g(bu\013er)g(and)f(receiv)o(e)h(bu\013er)g(are)g(disjoin)o
(t,)e(and)h(ma)o(y)e(ha)o(v)o(e)75 221 y(di\013eren)o(t)15
b(length)f(and)f(di\013eren)o(t)i(datat)o(yp)q(es.)158 349
y Fo(Discussion:)158 395 y Ft(F)m(or)d(a)f(shift)i(it's)e(more)h(natural)h
(to)f(ha)o(v)o(e)g(same)g(t)o(yp)q(e)g(and)g(same)g(length)h(b)q(oth)g(for)e
(send)h(and)h(receiv)o(e;)g(for)e(a)h(remote)75 441 y(pro)q(cedure)i(call,)g
(the)g(additional)i(freedom)d(mak)o(es)h(sense.)75 620 y Fu(MPI)p
144 620 14 2 v 15 w(EXCHANGE\(start,)19 b(count,)h(datatype,)g(dest,)h
(source,)f(tag,)h(comm,)g(status\))117 670 y Ft(in)14 b Fu(start)675
b Ft(initial)16 b(address)e(of)e(send)i(and)g(receiv)o(e)g(bu\013er)g(\(c)o
(hoice\))117 713 y(in)g Fu(count)675 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(in)g(send)g(and)f(receiv)o(e)h(bu\013er)g(\(in)o
(teger\))117 755 y(in)g Fu(datatype)609 b Ft(t)o(yp)q(e)13
b(of)g(elemen)o(ts)h(in)g(send)f(and)h(receiv)o(e)g(bu\013er)117
798 y(in)g Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
841 y(in)e Fu(source)653 b Ft(rank)13 b(of)g(source)h(\(in)o(teger\))117
883 y(in)g Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
926 y(in)g Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)117
968 y(out)h Fu(status)629 b Ft(status)13 b(ob)r(ject)158 1045
y Fx(Execute)20 b(a)e(blo)q(c)o(king)f(send)i(and)f(receiv)o(e;)j(the)e(same)
e(bu\013er)i(is)f(used)i(b)q(oth)e(for)g(the)g(send)i(and)e(for)f(the)75
1094 y(receiv)o(e.)158 1223 y Fo(Discussion:)158 1268 y Ft(I)10
b(omitted)h(the)g(ready)g(and)f(sync)o(hronous)j(mo)q(des)e(for)f
(send/receiv)o(e)i(and)f(exc)o(hange.)17 b(Also,)11 b(I)f(omitted)h(non)o
(blo)q(c)o(kin)q(g)75 1314 y(send/receiv)o(e)k(and)f(exc)o(hange.)k(Do)13
b(w)o(e)g(w)o(an)o(t)g(an)o(y)g(of)g(those?)158 1447 y Fx(The)d(seman)o(tics)
f(of)f(a)h(send-receiv)o(e)j(op)q(eration)d(is)g(what)g(w)o(ould)g(obtain)f
(if)h(the)h(caller)f(fork)o(ed)g(t)o(w)o(o)g(concurren)o(t)75
1496 y(threads,)18 b(one)g(to)f(execute)h(the)g(send,)g(and)f(one)g(to)g
(execute)i(the)f(receiv)o(e,)h(follo)o(w)o(ed)c(b)o(y)i(a)g(join)f(of)g
(these)i(t)o(w)o(o)75 1546 y(threads.)25 b(A)16 b(send-receiv)o(e)h(cannot)f
(b)q(e)h(implemen)o(ted)c(b)o(y)j(a)f(blo)q(c)o(king)g(send)i(follo)o(w)o(ed)
d(b)o(y)h(a)h(blo)q(c)o(king)f(receiv)o(e)75 1596 y(or)e(a)f(blo)q(c)o(king)f
(receiv)o(e,)j(follo)o(w)o(ed)d(b)o(y)i(a)f(blo)q(c)o(king)f(send.)19
b(Consider)13 b(the)g(follo)o(wing)d(co)q(de,)j(where)h(t)o(w)o(o)e(pro)q
(cesses)75 1646 y(exc)o(hange)j(messages:)75 1722 y Fu(CALL)21
b(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75 1772 y(IF)g(\(rank.EQ.0\))119
1821 y(THEN)162 1871 y(CALL)g(MPI_SENDRECV\(send_)o(buff,)d(count,)j
(MPI_REAL,)f(0,)h(recv_buff,)f(count,)g(MPI_REAL,)271 1921
y(1,)i(tag,)e(comm,)h(status,)g(ierr\))119 1971 y(ELSE)162
2021 y(CALL)g(MPI_SENDRECV\(send_)o(buff,)d(count,)j(MPI_REAL,)f(1,)h
(recv_buff,)f(count,)g(MPI_REAL,)271 2070 y(0,)i(tag,)e(comm,)h(status,)g
(ierr\))75 2120 y(END)g(IF)158 2196 y Fx(If)10 b(the)g(send)h(receiv)o(es)h
(are)f(replaced)g(either)g(b)o(y)e(blo)q(c)o(king)h(send,)h(follo)o(w)o(ed)d
(b)o(y)i(blo)q(c)o(king)f(receiv)o(e,)j(or)e(blo)q(c)o(king)75
2246 y(receiv)o(e,)j(follo)o(w)o(ed)d(b)o(y)h(blo)q(c)o(king)f(send,)i(then)g
(the)g(co)q(de)h(ma)o(y)c(deadlo)q(c)o(k.)17 b(On)12 b(the)g(other)g(hand,)f
(send-receiv)o(e)j(can)75 2296 y(b)q(e)h(implem)o(en)o(ted)d(using)i(non)o
(blo)q(c)o(king)f(sends)i(and)f(receiv)o(es.)20 b(Note)14 b(that)g(some)f
(system)h(bu\013ering)g(is)g(required)75 2346 y(for)9 b(a)h(correct)h
(implemen)o(tatio)o(n)c(of)i Fu(MPI)p 703 2346 V 15 w(EXCHANGE)p
Fx(.)f(\(Consider)i(the)g(last)f(example,)g(with)g(send-receiv)o(e)j
(replaced)75 2395 y(b)o(y)i(exc)o(hange.\))75 2530 y Fw(1.12)59
b(Null)21 b(p)n(ro)r(cesses)75 2704 y Fo(Discussion:)35 b Ft(This)14
b(section)g(has)f(not)h(b)q(een)f(review)o(ed)h(b)o(y)g(MPIF.)p
eop
%%Page: 24 24
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(24)158 45 y(In)16 b(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 95 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 145 y(non-circular)e
(shift)f(done)i(with)e(calls)h(to)f(send-receiv)o(e.)158 195
y(The)e(sp)q(ecial)g(v)n(alue)f Fu(MPI)p 545 195 14 2 v 15
w(PROCNULL)f Fx(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 244 y(parameter)h(is)f(required)i(in)e
(a)h(call.)16 b(A)11 b(comm)o(unication)d(with)i(pro)q(cess)j
Fu(MPI)p 1268 244 V 15 w(PROCNULL)c Fx(has)i(no)g(e\013ect:)18
b(a)10 b(send)i(to)75 294 y Fu(MPI)p 144 294 V 15 w(PROCNULL)f
Fx(succeeds)16 b(and)d(returns)h(as)f(so)q(on)g(as)g(p)q(ossible.)18
b(A)13 b(receiv)o(e)h(from)d Fu(MPI)p 1443 294 V 15 w(PROCNULL)h
Fx(succeeds)j(and)75 344 y(returns)d(as)e(so)q(on)g(as)g(p)q(ossible)g(with)g
(no)g(mo)q(di\014cations)e(to)i(the)h(receiv)o(e)g(bu\013er.)18
b(When)10 b(a)g(receiv)o(e)h(with)f Fu(source)20 b(=)75 394
y(MPI)p 144 394 V 15 w(PROCNULL)9 b Fx(is)h(executed)i(then)f(the)g(status)g
(ob)r(ject)g(returns)h Fu(source)21 b(=)g(MPI)p 1352 394 V
15 w(PROCNULL)p Fx(,)8 b Fu(tag=MPI)p 1717 394 V 15 w(ANY)p
1798 394 V 15 w(TAG)75 444 y Fx(and)14 b Fu(count=0)p Fx(.)158
572 y Fo(Discussion:)158 618 y Ft(It)f(w)o(ould)h(b)q(e)f(nice)h(to)f(ha)o(v)
o(e)g Fm(MPI)p 640 618 12 2 v 13 w(PROCNULL)d Ft(\\equiv)n(alenced")16
b(to)d(-1)g(and)g(to)g(group)p 1393 618 V 15 w(size,)h(so)f(that,)f(when)i(a)
f(shift)g(is)75 663 y(executed)h(in)g(a)f(group)h(the)f(\014rst)g(and)h(last)
f(pro)q(cessors)i(automatically)h(comm)o(unicate)e(with)g(the)f(n)o(ull)i
(pro)q(cess.)158 709 y(A)e(c)o(hoice)i(is)g(to)e(sa)o(y)i(that)e(a)h
(source/destinati)q(on)j(with)d(rank)g(-1)g(or)g(group)p 1278
709 V 15 w(size)g(is)g(alw)o(a)o(ys)h(the)f(n)o(ull)i(pro)q(cess.)k(W)m(e)75
755 y(then)13 b(lose)h(some)g(error)f(catc)o(hing)h(capabilit)o(y)m(.)158
800 y(Another)g(c)o(hoice)g(is)f(to)g(sa)o(y)h(that)f(only)h(for)f
(send-receiv)o(e)h(and)g(exc)o(hange.)158 846 y(A)d(third)h(c)o(hoice)g(is)g
(to)f(liv)o(e)i(without)f(this)g(nicet)o(y)m(.)17 b(It)11 b(means)g(that)h
(one)f(still)i(ha)o(v)o(e)f(to)f(execute)h(conditional)i(co)q(de:)j(\(if)75
892 y(m)o(yrank=0)c(then)g(m)o(yneigh)o(b)q(or=mpi)p 640 892
V 17 w(pro)q(cn)o(ull\).)19 b(But)13 b(this)h(co)q(de)f(need)g(b)q(e)f
(executed)i(only)g(when)e(the)h(comm)o(unication)75 937 y(pattern)h(is)f
(set,)g(and)h(the)f(conditional)j(b)q(oundary)f(co)q(de)e(is)h(not)f(needed)h
(in)g(the)f(inner)i(lo)q(op.)75 1157 y Fw(1.13)59 b(Derived)19
b(datat)n(yp)r(es)75 1327 y Fo(Discussion:)158 1372 y(This)c(is)g(a)g(new)g
(section,)h(and)e(the)h(material)g(has)h(not)e(y)o(et)i(b)q(een)e(discussed)h
(b)o(y)g(MPIF.)158 1505 y Fx(Up)k(to)g(no)o(w,)g(all)f(p)q(oin)o(t)h(to)f(p)q
(oin)o(t)h(comm)o(unicatio)o(n)d(in)o(v)o(olv)o(ed)i(only)g(con)o(tiguous)h
(bu\013ers)h(con)o(taining)e(a)75 1555 y(sequence)f(of)d(elemen)o(ts)g(of)h
(the)g(same)f(t)o(yp)q(e.)21 b(This)14 b(is)h(to)q(o)f(constraining)h(on)f(t)
o(w)o(o)g(accoun)o(ts:)21 b(One)15 b(often)g(w)o(an)o(ts)75
1604 y(to)i(pass)g(messages)h(that)f(con)o(tain)f(v)n(alues)h(with)g
(di\013eren)o(t)h(datat)o(yp)q(es)f(\(e.g.,)g(an)g(in)o(teger)g(coun)o(t,)h
(follo)o(w)o(ed)d(b)o(y)75 1654 y(coun)o(t)d(real)g(n)o(um)o(b)q(ers\);)g
(and)f(one)h(often)g(w)o(an)o(ts)g(to)f(send)i(noncon)o(tiguous)f(data)f
(\(e.g.)17 b(a)12 b(sub-blo)q(c)o(k)f(of)h(a)f(matrix\).)75
1704 y(One)17 b(solution)e(is)g(to)h(pro)o(vide)f(functions)h(that)g(pac)o(k)
g(noncon)o(tiguous)f(data)h(in)o(to)f(a)g(con)o(tiguous)h(bu\013er)h(at)e
(the)75 1754 y(sender)f(site)e(and)g(unpac)o(k)g(it)g(bac)o(k)g(at)g(the)g
(receiv)o(er)i(site.)k(This)12 b(has)g(the)g(disadv)n(an)o(tage)g(of)f
(requiring)h(additional)75 1804 y(memory)f(to)h(memory)f(cop)o(y)i(at)g(b)q
(oth)g(sites,)g(ev)o(en)h(when)g(the)f(comm)o(unication)d(subsystem)j(has)g
(scatter-gather)75 1853 y(capabilities.)19 b(Instead,)c(MPI)g(pro)o(vides)g
(mec)o(hanisms)d(to)j(sp)q(ecify)g(more)e(general,)i(mixed)e(and)h(noncon)o
(tiguous)75 1903 y(comm)o(unication)8 b(bu\013ers.)19 b(It)11
b(is)g(up)h(to)f(the)h(implemen)o(tation)c(to)k(decide)g(whether)h(data)e
(should)g(b)q(e)h(\014rst)h(pac)o(k)o(ed)75 1953 y(in)i(a)g(con)o(tiguous)g
(bu\013er)h(b)q(efore)g(b)q(een)g(transmitted,)f(or)g(whether)i(it)e(can)g(b)
q(e)h(collected)g(directly)f(from)f(where)75 2003 y(it)g(resides.)158
2053 y(The)f(general)g(mec)o(hanisms)e(pro)o(vided)i(here)h(allo)o(ws)e(one)h
(to)f(transfer)i(directly)m(,)e(without)h(cop)o(ying,)f(ob)r(jects)75
2103 y(of)20 b(v)n(arious)g(shap)q(e)h(and)f(size.)39 b(It)20
b(is)h(not)f(assumed)g(that)h(the)g(MPI)g(library)e(is)i(cognizan)o(t)f(of)g
(the)h(ob)r(jects)75 2152 y(declared)15 b(in)f(the)g(host)h(language;)e(th)o
(us,)h(if)f(one)i(w)o(an)o(ts)f(to)g(transfer)h(a)f(structure,)h(or)f(an)g
(arra)o(y)g(section,)h(it)e(will)75 2202 y(b)q(e)k(necessary)h(to)e(pro)o
(vide)g(in)g(MPI)h(a)e(de\014nition)h(of)g(a)g(comm)o(unicatio)o(n)e
(bu\013er)j(that)f(mimi)o(cs)e(the)j(de\014nition)75 2252 y(of)f(the)i
(structure)h(or)e(arra)o(y)g(section)h(in)f(question.)27 b(These)19
b(facilities)d(can)h(b)q(e)h(used)g(b)o(y)e(library)h(designers)h(to)75
2302 y(de\014ne)13 b(comm)o(unicatio)o(n)c(functions)j(that)g(can)g(transfer)
h(ob)r(jects)g(de\014ned)g(in)e(the)i(host)f(language)f({)g(b)o(y)h(deco)q
(ding)75 2352 y(their)k(de\014nitions)f(as)h(a)o(v)n(ailable)d(in)i(a)g(sym)o
(b)q(ol)f(table)h(or)h(a)f(dop)q(e)h(v)o(ector.)23 b(Suc)o(h)16
b(higher-lev)o(el)f(comm)o(unication)75 2401 y(functions)f(are)g(not)g(part)g
(of)f(MPI.)158 2451 y(More)k(general)g(comm)o(unicatio)o(n)d(bu\013ers)k(are)
f(sp)q(eci\014ed)h(b)o(y)e(replacing)h(the)g(basic)f(datat)o(yp)q(es)i(that)e
(ha)o(v)o(e)75 2501 y(used)e(so)e(far)g(with)h(deriv)o(ed)g(datat)o(yp)q(es)g
(that)g(are)g(constructed)i(from)10 b(basic)j(datat)o(yp)q(es)g(using)g(the)g
(constructors)75 2551 y(describ)q(ed)e(in)e(this)h(section.)17
b(These)10 b(metho)q(ds)f(of)g(constructing)i(deriv)o(ed)e(datat)o(yp)q(es)h
(can)g(b)q(e)g(applied)f(recursiv)o(ely)m(.)158 2601 y(A)14
b Fv(general)g(datat)o(yp)q(e)f Fx(is)g(an)h(opaque)g(ob)r(ject)h(that)f(sp)q
(eci\014es)h(t)o(w)o(o)f(things:)137 2684 y Fn(\017)21 b Fx(A)14
b(sequence)i(of)d(basic)h(t)o(yp)q(es)p eop
%%Page: 25 25
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(25)137 45 y Fn(\017)21 b Fx(A)14 b(sequence)i(of)d(in)o(teger)
h(\(b)o(yte\))h(displacemen)o(ts)158 128 y(The)e(displacemen)o(ts)f(are)h
(not)f(required)i(to)e(b)q(e)h(p)q(ositiv)o(e,)f(distinct,)h(or)f(in)g
(increasing)h(order;)g(therefore)h(the)75 178 y(order)g(of)e(items)g(need)j
(not)e(coincide)g(with)g(their)g(order)h(in)f(store,)g(and)g(an)g(item)f(ma)o
(y)f(app)q(ear)j(more)e(than)h(once.)158 228 y(Let)179 311
y Fj(D)q(ataty)q(pe)g Fx(=)f Fn(f)p Fx(\()p Fj(ty)q(pe)519
317 y Fi(0)538 311 y Fj(;)7 b(disp)633 317 y Fi(0)651 311 y
Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)833 317 y Fh(n)p Fk(\000)p
Fi(1)897 311 y Fj(;)g(disp)992 317 y Fh(n)p Fk(\000)p Fi(1)1057
311 y Fx(\))p Fn(g)p Fj(;)75 394 y Fx(b)q(e)15 b(suc)o(h)g(a)f(general)h
(datat)o(yp)q(e,)f(where)i Fj(ty)q(pe)788 400 y Fh(i)817 394
y Fx(are)f(basic)f(t)o(yp)q(es,)h(and)f Fj(disp)1270 400 y
Fh(i)1299 394 y Fx(are)g(displacemen)o(ts.)19 b(This)c(general)75
444 y(datat)o(yp)q(e,)d(together)h(with)f(a)g(base)g(address)i
Fu(start)p Fx(,)c(sp)q(eci\014es)k(a)e(comm)o(unication)d(bu\013er:)18
b(the)12 b(comm)o(unication)75 493 y(bu\013er)i(that)e(consists)i(of)e
Fj(n)g Fx(en)o(tries,)h(where)h(the)f Fj(i)p Fx(-th)g(en)o(try)g(is)g(at)f
(address)i Fu(start)5 b Fx(+)i Fj(disp)1502 499 y Fh(i)1529
493 y Fx(and)12 b(has)h(t)o(yp)q(e)g Fj(ty)q(pe)1849 499 y
Fh(i)1863 493 y Fx(.)75 543 y(A)18 b(message)f(assem)o(bled)g(from)f(this)i
(comm)o(unicatio)o(n)d(bu\013er)k(will)d(con)o(tain)h(a)h(sequence)h(of)e
Fj(n)h Fx(v)n(alues,)g(where)75 593 y(v)n(alue)d Fj(i)h Fx(has)g(t)o(yp)q(e)g
Fj(ty)q(pe)461 599 y Fh(i)476 593 y Fx(.)23 b(The)16 b(general)g(datat)o(yp)q
(e)g(determines)g(the)g Fv(t)o(yp)q(e)h(signature)c Fx(of)i(the)h(message)g
(\(i.e.)75 643 y(the)e(n)o(um)o(b)q(er)g(of)f(v)n(alues)h(carried)g(b)o(y)g
(the)g(message)g(and)g(the)g(basic)g(t)o(yp)q(e)g(of)g(eac)o(h)g(v)n(alue\).)
158 693 y(W)m(e)h(can)i(use)f(a)g(handle)f(to)h(a)g(general)g(datat)o(yp)q(e)
g(as)g(an)f(argumen)o(t)g(in)g(a)h(send)h(or)f(receiv)o(e)h(op)q(eration,)e
(in)75 742 y(replacemen)o(t)j(of)g(a)g(basic)g(datat)o(yp)q(e)h(argumen)o(t.)
30 b(The)19 b(op)q(eration)f Fu(MPI)p 1253 742 14 2 v 15 w(SEND\(start,)h(1,)
j(datatype,...\))75 792 y Fx(will)11 b(use)j(the)f(send)h(bu\013er)f
(de\014ned)h(b)o(y)f(the)g(base)g(address)h Fu(start)e Fx(and)h(the)g
(general)g(datat)o(yp)q(e)g(asso)q(ciated)g(with)75 842 y Fu(datatype)p
Fx(;)d(it)h(will)e(generate)k(a)e(message)f(with)h(the)h(t)o(yp)q(e)g
(signature)f(determined)g(b)o(y)g(the)h Fu(datatype)e Fx(argumen)o(t.)75
892 y Fu(MPI)p 144 892 V 15 w(RECV\(start,)20 b(1,)h(datatype,...\))15
b Fx(will)d(use)i(the)g(receiv)o(e)g(bu\013er)g(de\014ned)g(b)o(y)f(the)h
(base)g(address)g Fu(start)75 942 y Fx(and)g(the)g(general)g(datat)o(yp)q(e)g
(asso)q(ciated)h(with)f Fu(datatype)p Fx(.)158 992 y(General)k(datat)o(yp)q
(es)h(can)f(b)q(e)g(used)h(in)f(all)e(send)j(and)f(receiv)o(e)h(op)q
(erations.)31 b(W)m(e)17 b(address)j(later)e(in)f(Sec-)75 1041
y(tion)c(1.13.3)f(the)j(case)g(where)g(the)f(second)h(argumen)o(t)e
Fu(count)g Fx(has)h(v)n(alue)f Fj(>)f Fx(1.)158 1091 y(The)21
b(prede\014ned)h(basic)e(datat)o(yp)q(es)h(presen)o(ted)h(in)e(Section)g
(1.2.1)e(are)j(particular)f(cases)h(of)f(a)g(general)75 1141
y(datat)o(yp)q(e.)h(Th)o(us,)15 b Fu(MPI)p 455 1141 V 15 w(INT)f
Fx(is)h(a)f(prede\014ned)j(handle)d(to)h(the)g(datat)o(yp)q(e)h
Fn(f)p Fx(\()p Fu(int)o Fj(;)7 b Fx(0\))p Fn(g)p Fx(,)13 b(with)i(one)g(en)o
(try)g(of)f(t)o(yp)q(e)75 1191 y Fu(int)f Fx(and)h(displacemen)o(t)f(zero.)19
b(And)14 b(similarly)d(for)i(all)g(other)i(basic)f(datat)o(yp)q(es.)158
1241 y(The)f Fv(exten)o(t)d Fx(of)i(a)g(datat)o(yp)q(e)h(is)f(de\014ned)i(to)
e(b)q(e)h(the)g(span)f(from)f(the)i(\014rst)g(b)o(yte)g(to)f(the)h(last)f(b)o
(yte)h(o)q(ccupied)75 1290 y(b)o(y)h(en)o(tries)h(in)e(this)h(datat)o(yp)q
(e,)g(rounded)g(up)g(to)g(satisfy)f(alignmen)o(t)f(requiremen)o(ts.)18
b(I.e.,)13 b(if)179 1373 y Fj(D)q(ataty)q(pe)g Fx(=)f Fn(f)p
Fx(\()p Fj(ty)q(pe)519 1379 y Fi(0)538 1373 y Fj(;)7 b(disp)633
1379 y Fi(0)651 1373 y Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)833
1379 y Fh(n)p Fk(\000)p Fi(1)897 1373 y Fj(;)g(disp)992 1379
y Fh(n)p Fk(\000)p Fi(1)1057 1373 y Fx(\))p Fn(g)p Fj(;)75
1456 y(disp)151 1462 y Fh(r)181 1456 y Fx(=)12 b(min)294 1462
y Fh(j)319 1456 y Fj(disp)395 1462 y Fh(j)426 1456 y Fx(and)i
Fj(disp)583 1462 y Fh(s)612 1456 y Fx(=)e(max)733 1462 y Fh(j)758
1456 y Fj(disp)834 1462 y Fh(j)865 1456 y Fx(then)179 1548
y Fj(extent)p Fx(\()p Fj(D)q(ataty)q(pe)p Fx(\))h(=)f Fj(disp)631
1554 y Fh(s)658 1548 y Fx(+)e Fj(siz)r(eof)t Fx(\()p Fj(ty)q(pe)909
1554 y Fh(s)930 1548 y Fx(\))f Fn(\000)h Fj(disp)1073 1554
y Fh(r)1091 1548 y Fx(;)-1028 b(\(1.1\))75 1639 y(if)8 b(furthermore,)i
Fj(ty)q(pe)422 1645 y Fh(i)446 1639 y Fx(requires)h(alignmen)o(t)c(to)i(a)g
(b)o(yte)g(address)i(that)e(is)g(is)h(a)f(m)o(ultiple)d(of)j
Fj(k)1505 1645 y Fh(i)1519 1639 y Fx(,)g(then)h Fj(extent)p
Fx(\()p Fj(D)q(ataty)q(pe)p Fx(\))75 1689 y(is)k(rounded)g(up)g(to)g(the)g
(next)h(m)o(ultiple)c(of)j(max)841 1695 y Fh(i)862 1689 y Fj(k)884
1695 y Fh(i)897 1689 y Fx(.)158 1739 y(Example:)j(Assume)c(that)179
1822 y Fj(T)6 b(y)q(pe)p Fx(1)12 b(=)g Fn(f)p Fx(\()p Fu(double)o
Fj(;)7 b Fx(0\))p Fj(;)g Fx(\()p Fu(char)n Fj(;)g Fx(8\))p
Fn(g)75 1905 y Fx(\(a)15 b Fu(double)g Fx(at)g(displacemen)o(t)g(zero,)h
(follo)o(w)o(ed)e(b)o(y)i(a)f Fu(char)g Fx(at)g(displacemen)o(t)g(eigh)o
(t\).)23 b(Assume,)15 b(furthermore,)75 1955 y(that)f(doubles)g(ha)o(v)o(e)g
(to)f(b)q(e)i(strictly)f(aligned)f(at)g(addresses)j(that)e(are)g(m)o(ultiple)
e(of)h(eigh)o(t.)18 b(Then,)13 b(the)i(exten)o(t)g(of)75 2004
y(this)h(datat)o(yp)q(e)f(is)h(16)f(\(9)g(rounded)h(to)f(the)h(next)g(m)o
(ultiple)e(of)h(8\).)22 b(A)16 b(datat)o(yp)q(e)f(that)h(consists)h(of)d(a)i
(c)o(haracter)75 2054 y(immediately)10 b(follo)o(w)o(ed)j(b)o(y)g(a)h(double)
g(will)e(also)h(ha)o(v)o(e)h(an)g(exten)o(t)h(of)e(16.)75 2170
y Fq(1.13.1)49 b(Datat)o(yp)q(e)17 b(constructo)o(rs)75 2247
y Fx(The)e(simplest)f(datat)o(yp)q(e)i(constructor)g(is)f Fu(MPI)p
832 2247 V 15 w(TYPE)p 935 2247 V 15 w(CONTIGUOUS)e Fx(whic)o(h)i(allo)o(ws)e
(replication)i(of)f(a)h(datat)o(yp)q(e)75 2297 y(in)o(to)e(con)o(tiguous)h
(lo)q(cations.)75 2394 y Fu(MPI)p 144 2394 V 15 w(TYPE)p 247
2394 V 15 w(CONTIGUOUS\(count,)k(oldtype,)i(newtype\))117 2444
y Ft(in)14 b Fu(count)675 b Ft(replication)16 b(coun)o(t)d(\(in)o(teger\))117
2489 y(in)h Fu(oldtype)631 b Ft(handle)14 b(to)f(input)i(datat)o(yp)q(e)f(ob)
r(ject)117 2535 y(out)g Fu(newtype)607 b Ft(handle)14 b(to)f(output)h(datat)o
(yp)q(e)g(ob)r(ject)p eop
%%Page: 26 26
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(26)158 45 y Fu(newtype)12 b Fx(is)i(the)g(datat)o(yp)q(e)g
(obtained)g(b)o(y)g(concatenating)g Fu(count)e Fx(copies)j(of)e
Fu(oldtype)p Fx(.)j(P)o(adding)d(ma)o(y)f(b)q(e)75 95 y(added)i(to)g(satisfy)
g(alignmen)o(t)d(requiremen)o(ts)j(of)g(the)g(underlying)g(arc)o(hitecture.)
158 145 y(Example:)j(let)d Fu(oldtype)e Fx(b)q(e)i(a)g(handle)g(to)f(the)i
(datat)o(yp)q(e)179 228 y Fn(f)p Fx(\()p Fu(double)n Fj(;)7
b Fx(0\))p Fj(;)g Fx(\()p Fu(char)o Fj(;)g Fx(8\))p Fn(g)p
Fj(;)75 311 y Fx(with)14 b(exten)o(t)g(16,)f(and)h(let)g Fu(count)c
Fx(=)i(3.)18 b(The)c(resulting)g(datat)o(yp)q(e)g(returned)i(b)o(y)e
Fu(newtype)e Fx(is)179 394 y Fn(f)p Fx(\()p Fu(double)n Fj(;)7
b Fx(0\))p Fj(;)g Fx(\()p Fu(char)o Fj(;)g Fx(8\))p Fj(;)g
Fx(\()p Fu(double)m Fj(;)g Fx(16\))p Fj(;)g Fx(\()p Fu(char)n
Fj(;)g Fx(24\))p Fj(;)g Fx(\()p Fu(double)n Fj(;)g Fx(32\))p
Fj(;)g Fx(\()p Fu(char)m Fj(;)g Fx(40\))p Fn(g)p Fx(;)75 477
y(i.e.,)12 b(alternating)i Fu(double)e Fx(and)i Fu(char)f Fx(elemen)o(ts,)g
(with)h(displacemen)o(ts)f(0)p Fj(;)7 b Fx(8)p Fj(;)g Fx(16)p
Fj(;)g Fx(24)p Fj(;)g Fx(3)o(2)p Fj(;)g Fx(4)o(0.)158 527 y(In)14
b(general,)g(assume)f(that)h Fu(oldtype)e Fx(is)i(a)g(handle)f(to)h(the)h
(datat)o(yp)q(e)179 610 y Fn(f)p Fx(\()p Fj(ty)q(pe)292 616
y Fi(0)311 610 y Fj(;)7 b(disp)406 616 y Fi(0)425 610 y Fx(\))p
Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)607 616 y Fh(n)p Fk(\000)p
Fi(1)671 610 y Fj(;)g(disp)766 616 y Fh(n)p Fk(\000)p Fi(1)830
610 y Fx(\))p Fn(g)p Fj(;)75 693 y Fx(with)14 b(exten)o(t)g
Fj(extent)p Fx(.)19 b(Then)14 b Fu(newtype)e Fx(is)i(a)g(handle)g(to)f(the)i
(datat)o(yp)q(e)f(with)f Fu(count)c Fn(\001)f Fu(n)14 b Fx(en)o(tries)h
(de\014ned)g(b)o(y:)179 784 y Fn(f)p Fx(\()p Fj(ty)q(pe)292
790 y Fi(0)311 784 y Fj(;)7 b(disp)406 790 y Fi(0)425 784 y
Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)607 790 y Fh(n)p Fk(\000)p
Fi(1)671 784 y Fj(;)g(disp)766 790 y Fh(n)p Fk(\000)p Fi(1)830
784 y Fx(\))p Fj(;)g Fx(\()p Fj(ty)q(pe)957 790 y Fi(0)977
784 y Fj(;)g(disp)1072 790 y Fi(0)1099 784 y Fx(+)j Fj(extent)p
Fx(\))p Fj(;)d(:::;)g Fx(\()p Fj(ty)q(pe)1440 790 y Fh(n)p
Fk(\000)p Fi(1)1504 784 y Fj(;)g(disp)1599 790 y Fh(n)p Fk(\000)p
Fi(1)1673 784 y Fx(+)j Fj(extent)p Fx(\))p Fj(;)d(:::;)179
875 y Fx(\()p Fj(ty)q(pe)271 881 y Fi(0)291 875 y Fj(;)g(disp)386
881 y Fi(0)413 875 y Fx(+)j Fj(extent)f Fn(\001)g Fx(\()p Fu(count)f
Fn(\000)i Fx(1\)\))p Fj(;)d(:::;)g Fx(\()p Fj(ty)q(pe)997 881
y Fh(n)p Fk(\000)p Fi(1)1061 875 y Fj(;)g(disp)1156 881 y Fh(n)p
Fk(\000)p Fi(1)1230 875 y Fx(+)i Fj(extent)h Fn(\001)e Fx(\()p
Fu(count)h Fn(\000)g Fx(1\)\))p Fn(g)p Fj(:)158 967 y Fu(MPI)p
227 967 14 2 v 15 w(TYPE)p 330 967 V 15 w(VECTOR)k Fx(is)g(a)h(more)f
(general)h(constructor)h(that)f(allo)o(ws)f(replication)g(of)h(a)f(datat)o
(yp)q(e)h(in)o(to)g(lo)q(ca-)75 1016 y(tions)f(that)h(consist)g(of)f(equally)
f(spaced)j(con)o(tiguous)e(blo)q(c)o(ks)h(of)e(equal)h(size)i({)e(blo)q(c)o
(k)g(sizes)i(and)e(blo)q(c)o(k)g(displace-)75 1066 y(men)o(ts)g(are)i(all)d
(m)o(ultiples)g(of)h(the)i(old)e(t)o(yp)q(e)i(exten)o(t.)75
1163 y Fu(MPI)p 144 1163 V 15 w(TYPE)p 247 1163 V 15 w(VECTOR\()20
b(count,)h(oldtype,)f(stride,)g(blocklen,)g(newtype\))117 1213
y Ft(in)14 b Fu(count)675 b Ft(n)o(um)o(b)q(er)14 b(of)e(blo)q(c)o(ks)j(\(in)
o(teger\))117 1259 y(in)f Fu(oldtype)631 b Ft(handle)14 b(to)f(input)i(datat)
o(yp)q(e)f(ob)r(ject)117 1304 y(in)g Fu(stride)653 b Ft(n)o(um)o(b)q(er)10
b(of)f(elemen)o(ts)i(b)q(et)o(w)o(een)f(start)f(of)g(eac)o(h)h(blo)q(c)o(k)h
(\(in)o(teger\))117 1350 y(in)j Fu(blocklen)609 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(in)g(eac)o(h)g(blo)q(c)o(k)g(\(p)q(ositiv)o(e)h(in)o
(teger\))117 1396 y(out)f Fu(newtype)607 b Ft(handle)14 b(to)f(output)h
(datat)o(yp)q(e)g(ob)r(ject)158 1472 y Fx(Example:)j(Assume,)c(again,)f(that)
i Fu(oldtype)e Fx(p)q(oin)o(ts)i(to)g(the)g(t)o(yp)q(e)179
1555 y Fn(f)p Fx(\()p Fu(double)n Fj(;)7 b Fx(0\))p Fj(;)g
Fx(\()p Fu(char)o Fj(;)g Fx(8\))p Fn(g)p Fj(;)75 1638 y Fx(with)j(exten)o(t)h
(16.)16 b(A)10 b(call)f(to)h Fu(MPI)p 588 1638 V 15 w(TYPE)p
691 1638 V 15 w(VECTOR\()20 b(2,)i(oldtype,)e(4,)h(3,)h(newtype\))8
b Fx(will)h(create)i(the)g(datat)o(yp)q(e)179 1721 y Fn(f)p
Fx(\()p Fu(double)n Fj(;)c Fx(0\))p Fj(;)g Fx(\()p Fu(char)o
Fj(;)g Fx(8\))p Fj(;)g Fx(\()p Fu(double)m Fj(;)g Fx(16\))p
Fj(;)g Fx(\()p Fu(char)n Fj(;)g Fx(24\))p Fj(;)g Fx(\()p Fu(double)n
Fj(;)g Fx(32\))p Fj(;)g Fx(\()p Fu(char)m Fj(;)g Fx(40\))p
Fj(;)179 1812 y Fx(\()p Fu(double)o Fj(;)g Fx(64\))p Fj(;)g
Fx(\()p Fu(char)n Fj(;)g Fx(72\))p Fj(;)g Fx(\()p Fu(double)m
Fj(;)g Fx(80\))p Fj(;)g Fx(\()p Fu(char)n Fj(;)g Fx(88\))p
Fj(;)g Fx(\()p Fu(double)m Fj(;)g Fx(96\))p Fj(;)g Fx(\()p
Fu(char)n Fj(;)g Fx(104\))p Fn(g)j Fx(:)75 1904 y(t)o(w)o(o)j(blo)q(c)o(ks)h
(with)g(three)h(copies)g(eac)o(h)f(of)f(the)i(old)e(t)o(yp)q(e,)h(starting)g
(4*16)f(apart.)158 1954 y(A)h(call)f(to)h Fu(MPI)p 399 1954
V 15 w(TYPE)p 502 1954 V 15 w(VECTOR\(oldtype,)k(3,)k(-2,)f(1,)g(newtype\))13
b Fx(will)f(create)j(the)g(datat)o(yp)q(e)179 2037 y Fn(f)p
Fx(\()p Fu(double)n Fj(;)7 b Fx(0\))p Fj(;)g Fx(\()p Fu(char)o
Fj(;)g Fx(8\))p Fj(;)g Fx(\()p Fu(double)m Fj(;)g Fn(\000)p
Fx(32\))p Fj(;)g Fx(\()p Fu(char)n Fj(;)g Fn(\000)p Fx(24\))p
Fj(;)g Fx(\()p Fu(double)n Fj(;)g Fn(\000)p Fx(64\))p Fj(;)g
Fx(\()p Fu(char)n Fj(;)g Fn(\000)p Fx(56\))p Fn(g)p Fj(:)158
2120 y Fx(In)14 b(general,)g(assume)f(that)h Fu(oldtype)e Fx(is)i(a)g(handle)
f(to)h(the)h(datat)o(yp)q(e)179 2203 y Fn(f)p Fx(\()p Fj(ty)q(pe)292
2209 y Fi(0)311 2203 y Fj(;)7 b(disp)406 2209 y Fi(0)425 2203
y Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)607 2209 y Fh(n)p
Fk(\000)p Fi(1)671 2203 y Fj(;)g(disp)766 2209 y Fh(n)p Fk(\000)p
Fi(1)830 2203 y Fx(\))p Fn(g)p Fj(;)75 2286 y Fx(with)15 b(exten)o(t)h
Fj(extent)p Fx(.)22 b(The)16 b(newly)f(created)h(datat)o(yp)q(e)g(is)f(a)g
(sequence)i(of)d(length)i Fu(count)9 b Fn(\001)g Fu(blocklen)g
Fn(\001)g Fj(n)15 b Fx(with)75 2336 y(en)o(tries:)179 2419
y Fn(f)p Fx(\()p Fj(ty)q(pe)292 2425 y Fi(0)311 2419 y Fj(;)7
b(disp)406 2425 y Fi(0)425 2419 y Fx(\))p Fj(;)g(:::;)g Fx(\()p
Fj(ty)q(pe)607 2425 y Fh(n)p Fk(\000)p Fi(1)671 2419 y Fj(;)g(disp)766
2425 y Fh(n)p Fk(\000)p Fi(1)830 2419 y Fx(\))p Fj(;)179 2510
y Fx(\()p Fj(ty)q(pe)271 2516 y Fi(0)291 2510 y Fj(;)g(disp)386
2516 y Fi(0)413 2510 y Fx(+)j Fj(extent)p Fx(\))p Fj(;)d(:::;)g
Fx(\()p Fj(ty)q(pe)754 2516 y Fh(n)p Fk(\000)p Fi(1)818 2510
y Fj(;)g(disp)913 2516 y Fh(n)p Fk(\000)p Fi(1)987 2510 y Fx(+)i
Fj(extent)p Fx(\))p Fj(;)e(:::;)179 2601 y Fx(\()p Fj(ty)q(pe)271
2607 y Fi(0)291 2601 y Fj(;)g(disp)386 2607 y Fi(0)413 2601
y Fx(+)j(\()p Fu(blocklen)d Fn(\000)j Fx(1\))f Fn(\001)g Fj(extent)p
Fx(\))p Fj(;)e(:::;)g Fx(\()p Fj(ty)q(pe)1062 2607 y Fh(n)p
Fk(\000)p Fi(1)1126 2601 y Fj(;)g(disp)1221 2607 y Fh(n)p Fk(\000)p
Fi(1)1295 2601 y Fx(+)i(\()p Fu(blocklen)f Fn(\000)i Fx(1\))f
Fn(\001)g Fj(extent)p Fx(\))p Fj(;)179 2693 y Fx(\()p Fj(ty)q(pe)271
2699 y Fi(0)291 2693 y Fj(;)e(disp)386 2699 y Fi(0)413 2693
y Fx(+)j Fu(stride)e Fn(\001)g Fj(extent)p Fx(\))p Fj(;)f(:::;)g
Fx(\()p Fj(ty)q(pe)914 2699 y Fh(n)p Fk(\000)p Fi(1)979 2693
y Fj(;)g(disp)1074 2699 y Fh(n)p Fk(\000)p Fi(1)1148 2693 y
Fx(+)i Fu(stride)f Fn(\001)h Fj(extent)p Fx(\))p Fj(;)e(:::;)p
eop
%%Page: 27 27
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(27)179 45 y(\()p Fj(ty)q(pe)271 51 y Fi(0)291
45 y Fj(;)7 b(disp)386 51 y Fi(0)413 45 y Fx(+)j(\()p Fu(stride)e
Fx(+)h Fu(blocklen)f Fn(\000)h Fx(1\))g Fn(\001)g Fj(extent)p
Fx(\))p Fj(;)e(:::;)179 135 y Fx(\()p Fj(ty)q(pe)271 141 y
Fh(n)p Fk(\000)p Fi(1)337 135 y Fj(;)g(disp)432 141 y Fh(n)p
Fk(\000)p Fi(1)506 135 y Fx(+)j(\()p Fu(stride)e Fx(+)h Fu(blocklen)f
Fn(\000)h Fx(1\))g Fn(\001)g Fj(extent)p Fx(\))p Fj(;)e(::::;)179
225 y Fx(\()p Fj(ty)q(pe)271 231 y Fi(0)291 225 y Fj(;)g(disp)386
231 y Fi(0)413 225 y Fx(+)j Fu(stride)e Fn(\001)g Fx(\()p Fu(count)h
Fn(\000)g Fx(1\))g Fn(\001)g Fj(extent)p Fx(\))p Fj(;)e(:::;)179
315 y Fx(\()p Fj(ty)q(pe)271 321 y Fh(n)p Fk(\000)p Fi(1)337
315 y Fj(;)g(disp)432 321 y Fh(n)p Fk(\000)p Fi(1)506 315 y
Fx(+)j Fu(stride)e Fn(\001)g Fx(\()p Fu(count)h Fn(\000)g Fx(1\))g
Fn(\001)g Fj(extent)p Fx(\))p Fj(;)e(:::;)179 404 y Fx(\()p
Fj(ty)q(pe)271 410 y Fi(0)291 404 y Fj(;)g(disp)386 410 y Fi(0)413
404 y Fx(+)j(\()p Fu(stride)e Fn(\001)h Fx(\()p Fu(count)f
Fn(\000)h Fx(1\))g(+)h Fu(blocklen)e Fn(\000)h Fx(1\))g Fn(\001)g
Fj(extent)p Fx(\))p Fj(;)e(:::;)179 494 y Fx(\()p Fj(ty)q(pe)271
500 y Fh(n)p Fk(\000)p Fi(1)337 494 y Fj(;)g(disp)432 500 y
Fh(n)p Fk(\000)p Fi(1)506 494 y Fx(+)j(\()p Fu(stride)e Fn(\001)g
Fx(\()p Fu(count)h Fn(\000)g Fx(1\))g(+)h Fu(blocklen)e Fn(\000)h
Fx(1\))g Fn(\001)g Fj(extent)p Fx(\))p Fn(g)158 663 y Fo(Discussion:)158
708 y Ft(I)17 b(c)o(hanged)h Fm(count)d Ft(from)i(b)q(eing)h(the)f(n)o(um)o
(b)q(er)h(of)f(en)o(tries)h(\(or)f(replicates\),)i(as)f(in)f(the)h(old)g
(draft,)f(to)g(b)q(eing)i(the)75 754 y(n)o(um)o(b)q(er)13 b(of)f(blo)q(c)o
(ks.)18 b(The)12 b(reason)h(is)g(that)f(in)h(the)g(next)f(calls)i(I)e(allo)o
(w)h(blo)q(c)o(k)h(lengths)g(to)e(v)n(ary;)g(it)h(is)g(easy)g(to)f(sa)o(y)g
(what)g(it)75 800 y(means)i(to)f(ha)o(v)o(e)h Fg(n)g Ft(blo)q(c)o(ks)h(of)e
(sizes)h Fg(b)631 804 y Ff(0)649 800 y Fg(;)6 b(:::;)f(b)731
804 y Fe(n)p Fd(\000)p Ff(1)792 800 y Ft(;)13 b(it)h(is)g(harder)g(to)g
(explain)i(what)d(it)h(means)g(to)f(ha)o(v)o(e)h Fg(n)g Ft(elemen)o(ts)g
(\014lling)75 845 y(up)f(successiv)o(e)i(p)q(ositions)h(in)d(blo)q(c)o(ks)i
(of)e(sizes)h Fg(b)779 849 y Ff(0)796 845 y Fg(;)6 b(b)829
849 y Ff(1)847 845 y Fg(;)g(::::)p Ft(.)158 891 y(W)m(e)16
b(lo)q(ose)h(the)g(abilit)o(y)h(to)e(use)h Fm(MPI)p 699 891
12 2 v 13 w(TYPE)p 792 891 V 12 w(VECTOR)d Ft(to)i(create)g(a)g(partially)j
(\014lled)f(last)f(blo)q(c)o(k)g(\(the)f(more)g(general)75
937 y Fm(MPI)p 137 937 V 13 w(TYPE)p 230 937 V 13 w(INDEXED)d
Ft(function)18 b(is)f(needed\);)h(w)o(e)e(gain)h(consistency)i(with)d(the)h
(next)g(calls,)h(and)f(con)o(v)o(enience)h(in)f(these)75 982
y(calls.)158 1028 y(Opinions?)158 1160 y Fx(A)d(call)f(to)h
Fu(MPI)p 399 1160 14 2 v 15 w(TYPE)p 502 1160 V 15 w(CONTIGUOUS\(oldty)o(pe,)
19 b(count,)h(newtype\))12 b Fx(is)i(equiv)n(alen)o(t)f(to)h(a)g(call)f(to)75
1210 y Fu(MPI)p 144 1210 V 15 w(TYPE)p 247 1210 V 15 w(VECTOR\(oldtype,)19
b(count,)h(1,)i(1,)f(newtype\))p Fx(.)158 1260 y(The)16 b(function)f
Fu(MPI)p 478 1260 V 15 w(TYPE)p 581 1260 V 15 w(HVECTOR)f Fx(is)h(iden)o
(tical)g(to)h Fu(MPI)p 1095 1260 V 15 w(TYPE)p 1198 1260 V
15 w(VECTOR)p Fx(,)d(except)k(that)f Fu(stride)e Fx(is)h(giv)o(en)75
1310 y(in)i(b)o(ytes,)i(rather)f(then)g(in)f(elemen)o(ts.)29
b(The)18 b(use)h(for)e(b)q(oth)g(t)o(yp)q(es)i(of)e(v)o(ector)h(constructors)
i(is)d(illustrated)g(in)75 1360 y(Section)d(1.13.4.)i(\()p
Fu(H)e Fx(is)g(used)h(for)e(\\heterogeneous"\).)75 1457 y Fu(MPI)p
144 1457 V 15 w(TYPE)p 247 1457 V 15 w(HVECTOR\()20 b(count,)h(oldtype,)f
(stride,)g(blocklen,)g(newtype\))117 1507 y Ft(in)14 b Fu(count)675
b Ft(n)o(um)o(b)q(er)14 b(of)e(blo)q(c)o(ks)j(\(in)o(teger\))117
1552 y(in)f Fu(oldtype)631 b Ft(handle)14 b(to)f(input)i(datat)o(yp)q(e)f(ob)
r(ject)117 1597 y(in)g Fu(stride)653 b Ft(n)o(um)o(b)q(er)14
b(of)e(b)o(ytes)i(b)q(et)o(w)o(een)f(start)g(of)g(eac)o(h)g(blo)q(c)o(k)i
(\(in)o(teger\))117 1643 y(in)f Fu(blocklen)609 b Ft(n)o(um)o(b)q(er)14
b(of)e(elemen)o(ts)i(in)g(eac)o(h)g(blo)q(c)o(k)g(\(p)q(ositiv)o(e)h(in)o
(teger\))117 1688 y(out)f Fu(newtype)607 b Ft(handle)14 b(to)f(output)h
(datat)o(yp)q(e)g(ob)r(ject)158 1764 y Fu(MPI)p 227 1764 V
15 w(TYPE)p 330 1764 V 15 w(INDEXED)f Fx(is)h(a)h(more)e(general)i(function)f
(that)h(allo)o(ws)e(replication)h(of)g(an)g(old)g(datat)o(yp)q(e)g(in)o(to)g
(a)75 1814 y(sequence)i(of)e(con)o(tiguous)f(blo)q(c)o(ks,)h(where)h(blo)q(c)
o(k)f(lengths)g(and)g(blo)q(c)o(k)g(displacemen)o(ts)f(can)h(all)f(di\013er)i
({)e(but)i(are)75 1864 y(all)e(m)o(ultiples)f(of)h(the)h(old)g(t)o(yp)q(e)g
(exten)o(t.)75 1961 y Fu(MPI)p 144 1961 V 15 w(TYPE)p 247 1961
V 15 w(INDEXED\()20 b(count,)h(oldtype,)f(array)p 917 1961
V 14 w(of)p 975 1961 V 16 w(indices,)g(array)p 1297 1961 V
14 w(of)p 1355 1961 V 16 w(blocklen,)g(newtype\))117 2011 y
Ft(in)14 b Fu(count)675 b Ft(n)o(um)o(b)q(er)14 b(of)e(blo)q(c)o(ks)j(\(in)o
(teger\))117 2056 y(in)f Fu(oldtype)631 b Ft(handle)14 b(to)f(input)i(datat)o
(yp)q(e)f(ob)r(ject)117 2102 y(in)g Fu(array)p 275 2102 V 15
w(of)p 334 2102 V 15 w(indices)447 b Ft(displacemen)o(t)14
b(for)d(eac)o(h)h(blo)q(c)o(k,)g(in)g(m)o(ultiples)i(of)d Fm(oldtype)e
Ft(ex-)905 2151 y(ten)o(t)k(\(arra)o(y)h(of)e(in)o(teger\))117
2197 y(in)i Fu(array)p 275 2197 V 15 w(of)p 334 2197 V 15 w(blocklen)425
b Ft(n)o(um)o(b)q(er)14 b(of)e(elemen)o(ts)i(p)q(er)g(blo)q(c)o(k)g(\(arra)o
(y)f(of)g(in)o(teger\))117 2242 y(out)h Fu(newtype)607 b Ft(handle)14
b(to)f(output)h(datat)o(yp)q(e)g(ob)r(ject)158 2318 y Fx(Example:)j(let)d
Fu(oldtype)e Fx(b)q(e)i(a)g(handle)g(to)f(the)i(t)o(yp)q(e)179
2400 y Fn(f)p Fx(\()p Fu(double)n Fj(;)7 b Fx(0\))p Fj(;)g
Fx(\()p Fu(char)o Fj(;)g Fx(8\))p Fn(g)p Fj(;)75 2482 y Fx(with)15
b(exten)o(t)h(16.)22 b(Let)16 b Fu(I)21 b(=)h(\(64,)f(0\))15
b Fx(and)g(let)g Fu(B)22 b(=)f(\(3,)g(1\))p Fx(.)h(A)15 b(call)g(to)g
Fu(MPI)p 1346 2482 V 15 w(TYPE)p 1449 2482 V 15 w(INDEXED\(2,)20
b(oldtype,)75 2532 y(I,)h(B,)h(newtype\))12 b Fx(returns)j(in)f
Fu(newtype)e Fx(a)i(handle)g(to)f(the)i(t)o(yp)q(e)179 2614
y Fn(f)p Fx(\()p Fu(double)n Fj(;)7 b Fx(64\))p Fj(;)g Fx(\()p
Fu(char)n Fj(;)g Fx(72\))p Fj(;)g Fx(\()p Fu(double)n Fj(;)g
Fx(80\))p Fj(;)g Fx(\()p Fu(char)n Fj(;)g Fx(88\))p Fj(;)g
Fx(\()p Fu(double)m Fj(;)g Fx(96\))p Fj(;)g Fx(\()p Fu(char)n
Fj(;)g Fx(104\))179 2704 y(\()p Fu(double)o Fj(;)g Fx(0\))p
Fj(;)g Fx(\()p Fu(char)n Fj(;)g Fx(8\))p Fn(g)j Fx(:)p eop
%%Page: 28 28
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(28)75 45 y(three)15 b(copies)g(of)e(the)h(old)g(t)o(yp)q(e)g
(starting)g(at)g(displacemen)o(t)f(64,)g(and)g(one)h(cop)o(y)g(starting)g(at)
g(displacemen)o(t)f(0.)158 95 y(In)h(general,)g(assume)f(that)h
Fu(oldtype)e Fx(is)i(a)g(handle)f(to)h(the)h(datat)o(yp)q(e)179
178 y Fn(f)p Fx(\()p Fj(ty)q(pe)292 184 y Fi(0)311 178 y Fj(;)7
b(disp)406 184 y Fi(0)425 178 y Fx(\))p Fj(;)g(:::;)g Fx(\()p
Fj(ty)q(pe)607 184 y Fh(n)p Fk(\000)p Fi(1)671 178 y Fj(;)g(disp)766
184 y Fh(n)p Fk(\000)p Fi(1)830 178 y Fx(\))p Fn(g)p Fj(;)75
261 y Fx(with)17 b(exten)o(t)h Fp(extent)p Fx(.)29 b(Let)17
b Fu(B)g Fx(b)q(e)h(the)g Fu(array)p 816 261 14 2 v 15 w(of)p
875 261 V 15 w(blocklen)e Fx(parameter)h(and)g Fu(I)g Fx(b)q(e)h(the)g
Fu(array)p 1652 261 V 14 w(of)p 1710 261 V 15 w(indices)75
318 y Fx(parameter.)f(The)12 b(newly)f(created)i(t)o(yp)q(e)f(returned)h(b)o
(y)e Fu(newtype)f Fx(is)h(the)h(sequence)h(of)e Fj(n)t Fn(\001)1474
287 y Fc(P)1517 297 y Fu(count)o Fk(\000)p Fi(1)1517 331 y
Fh(i)p Fi(=0)1678 318 y Fu(B)p Fx([)p Fu(i)p Fx(])f(en)o(tries)179
401 y Fn(f)p Fx(\()p Fj(ty)q(pe)292 407 y Fi(0)311 401 y Fj(;)d(disp)406
407 y Fi(0)434 401 y Fx(+)i Fu(I)p Fx([)p Fu(0)p Fx(])f Fn(\001)h
Fj(extent)p Fx(\))p Fj(;)e(:::;)g Fx(\()p Fj(ty)q(pe)871 407
y Fh(n)p Fk(\000)p Fi(1)935 401 y Fj(;)g(disp)1030 407 y Fh(n)p
Fk(\000)p Fi(1)1104 401 y Fx(+)j Fu(I)p Fx([)p Fu(0)p Fx(])e
Fn(\001)g Fj(extent)p Fx(\))p Fj(;)f(:::;)179 493 y Fx(\()p
Fj(ty)q(pe)271 499 y Fi(0)291 493 y Fj(;)g(disp)386 499 y Fi(0)413
493 y Fx(+)j(\()p Fu(I)p Fx([)p Fu(0)p Fx(])e(+)h Fu(B)p Fx([)p
Fu(0)p Fx(])f Fn(\000)i Fx(1\))f Fn(\001)f Fj(extent)p Fx(\))p
Fj(;)f(:::;)g Fx(\()p Fj(ty)q(pe)1071 499 y Fh(n)p Fk(\000)p
Fi(1)1136 493 y Fj(;)g(disp)1231 499 y Fh(n)p Fk(\000)p Fi(1)1305
493 y Fx(+)i(\()p Fu(I)p Fx([)p Fu(0)p Fx(])f(+)i Fu(B)p Fx([)p
Fu(0)p Fx(])e Fn(\000)h Fx(1\))g Fn(\001)g Fj(extent)p Fx(\))p
Fj(;)e(:::;)179 584 y Fx(\()p Fj(ty)q(pe)271 590 y Fi(0)291
584 y Fj(;)g(disp)386 590 y Fi(0)413 584 y Fx(+)j Fu(I)p Fx([)p
Fu(count)d Fn(\000)j Fu(1)p Fx(])e Fn(\001)h Fj(extent)p Fx(\))p
Fj(;)e(:::;)g Fx(\()p Fj(ty)q(pe)1010 590 y Fh(n)p Fk(\000)p
Fi(1)1074 584 y Fj(;)g(disp)1169 590 y Fh(n)p Fk(\000)p Fi(1)1243
584 y Fx(+)j Fu(I)p Fx([)p Fu(count)d Fn(\000)j Fu(1)p Fx(])e
Fn(\001)h Fj(extent)p Fx(\))p Fj(;)e(:::;)179 675 y Fx(\()p
Fj(ty)q(pe)271 681 y Fi(0)291 675 y Fj(;)g(disp)386 681 y Fi(0)413
675 y Fx(+)j(\()p Fu(I)p Fx([)p Fu(count)d Fn(\000)j Fu(1)p
Fx(])e(+)i Fu(B)p Fx([)p Fu(count)d Fn(\000)j Fu(1)p Fx(])e
Fn(\000)i Fx(1\))f Fn(\001)g Fj(extent)p Fx(\))p Fj(;)e(:::;)179
767 y Fx(\()p Fj(ty)q(pe)271 773 y Fh(n)p Fk(\000)p Fi(1)337
767 y Fj(;)g(disp)432 773 y Fh(n)p Fk(\000)p Fi(1)506 767 y
Fx(+)j(\()p Fu(I)p Fx([)p Fu(count)d Fn(\000)j Fu(1)p Fx(])e(+)i
Fu(B)p Fx([)p Fu(count)d Fn(\000)j Fu(1)p Fx(])e Fn(\000)i
Fx(1\))f Fn(\001)g Fj(extent)p Fx(\))p Fn(g)p Fj(:)158 858
y Fx(A)15 b(call)e(to)i Fu(MPI)p 401 858 V 15 w(TYPE)p 504
858 V 15 w(VECTOR\(count,)k(oldtype,)h(stride,)g(blocklen,)g(newtype\))13
b Fx(is)h(equiv)n(alen)o(t)g(to)75 908 y(a)g(call)f(to)75 957
y Fu(MPI)p 144 957 V 15 w(TYPE)p 247 957 V 15 w(INDEX\(count,)19
b(oldtype,)h(I,)i(B,)f(newtype\))12 b Fx(where)179 1040 y Fu(I)p
Fx([)p Fu(j)p Fx(])e(=)i Fj(j)f Fn(\001)e Fu(stride)k Fj(;)7
b(j)13 b Fx(=)f(0)p Fj(;)7 b(:::;)g Fu(count)f Fn(\000)j Fx(1)p
Fj(;)75 1123 y Fx(and)179 1207 y Fu(B)p Fx([)p Fu(j)p Fx(])h(=)i
Fu(blocklen)g Fj(;)7 b(j)13 b Fx(=)f(0)p Fj(;)7 b(:::;)g Fu(count)f
Fn(\000)j Fx(1)p Fj(:)158 1290 y Fx(The)k(function)g Fu(MPI)p
473 1290 V 15 w(TYPE)p 576 1290 V 15 w(HINDEXED)e Fx(is)h(iden)o(tical)g(to)h
Fu(MPI)p 1100 1290 V 15 w(TYPE)p 1203 1290 V 15 w(INDEXED)p
Fx(,)e(except)j(that)f(blo)q(c)o(k)f(displace-)75 1339 y(men)o(ts)h(in)h
Fu(array)p 358 1339 V 14 w(of)p 416 1339 V 16 w(indices)e Fx(are)i(sp)q
(eci\014ed)i(in)d(b)o(ytes,)h(rather)h(than)f(in)f(m)o(ultiples)f(of)i(the)g
(old)f(t)o(yp)q(e)i(exten)o(t.)75 1436 y Fu(MPI)p 144 1436
V 15 w(TYPE)p 247 1436 V 15 w(HINDEXED\()20 b(count,)g(oldtype,)h(array)p
939 1436 V 14 w(of)p 997 1436 V 15 w(indices,)g(array)p 1319
1436 V 14 w(of)p 1377 1436 V 16 w(blocklen,)e(newtype\))117
1486 y Ft(in)14 b Fu(count)675 b Ft(n)o(um)o(b)q(er)14 b(of)e(blo)q(c)o(ks)j
(\(in)o(teger\))117 1532 y(in)f Fu(oldtype)631 b Ft(handle)14
b(to)f(input)i(datat)o(yp)q(e)f(ob)r(ject)117 1578 y(in)g Fu(array)p
275 1578 V 15 w(of)p 334 1578 V 15 w(indices)447 b Ft(b)o(yte)13
b(displacemen)o(t)j(of)c(eac)o(h)i(blo)q(c)o(k)g(\(arra)o(y)f(of)g(in)o
(teger\))117 1623 y(in)h Fu(array)p 275 1623 V 15 w(of)p 334
1623 V 15 w(blocklen)425 b Ft(n)o(um)o(b)q(er)14 b(of)e(elemen)o(ts)i(in)g
(eac)o(h)g(blo)q(c)o(k)g(\(arra)o(y)f(of)g(in)o(teger\))117
1669 y(out)h Fu(newtype)607 b Ft(handle)14 b(to)f(output)h(datat)o(yp)q(e)g
(ob)r(ject)158 1745 y Fu(MPI)p 227 1745 V 15 w(TYPE)p 330 1745
V 15 w(STRUCT)j Fx(is)h(the)g(most)f(general)i(constructor:)28
b(It)18 b(further)h(generalizes)g(the)g(previous)f(one)g(in)75
1795 y(that)c(it)f(allo)o(ws)g(eac)o(h)h(blo)q(c)o(k)g(to)g(consist)g(of)g
(replications)f(of)h(a)f(di\013eren)o(t)i(datat)o(yp)q(e.)75
1892 y Fu(MPI)p 144 1892 V 15 w(TYPE)p 247 1892 V 15 w(STRUCT\(count,)k
(array)p 677 1892 V 15 w(of)p 736 1892 V 15 w(types,)i(array)p
1014 1892 V 14 w(of)p 1072 1892 V 15 w(indices,)g(array)p 1394
1892 V 14 w(of)p 1452 1892 V 16 w(blocklen,)e(newtype\))117
1942 y Ft(in)14 b Fu(count)675 b Ft(n)o(um)o(b)q(er)14 b(of)e(blo)q(c)o(ks)j
(\(in)o(teger\))117 1988 y(in)f Fu(array)p 275 1988 V 15 w(of)p
334 1988 V 15 w(types)491 b Ft(t)o(yp)q(e)17 b(of)g(elemen)o(ts)h(in)f(eac)o
(h)h(blo)q(c)o(k)g(\(arra)o(y)f(of)g(datat)o(yp)q(e)h(ob-)905
2037 y(jects\))117 2083 y(in)c Fu(array)p 275 2083 V 15 w(of)p
334 2083 V 15 w(indices)447 b Ft(b)o(yte)13 b(displacemen)o(t)j(of)c(eac)o(h)
i(blo)q(c)o(k)g(\(arra)o(y)f(of)g(in)o(teger\))117 2129 y(in)h
Fu(array)p 275 2129 V 15 w(of)p 334 2129 V 15 w(blocklen)425
b Ft(n)o(um)o(b)q(er)14 b(of)e(elemen)o(ts)i(in)g(eac)o(h)g(blo)q(c)o(k)g
(\(arra)o(y)f(of)g(in)o(teger\))117 2174 y(out)h Fu(newtype)607
b Ft(handle)14 b(to)f(output)h(datat)o(yp)q(e)g(ob)r(ject)158
2251 y Fx(Example:)j(Let)d Fu(type1)f Fx(b)q(e)h(a)g(handle)g(to)f(the)i(t)o
(yp)q(e)179 2334 y Fn(f)p Fx(\()p Fu(double)n Fj(;)7 b Fx(0\))p
Fj(;)g Fx(\()p Fu(char)o Fj(;)g Fx(8\))p Fn(g)p Fj(;)75 2417
y Fx(with)14 b(exten)o(t)i(16.)j(Let)c Fu(I)22 b(=)f(\(0,)g(16,)h(26\))p
Fx(,)13 b Fu(B)22 b(=)f(\(2,)g(1,)h(3\))14 b Fx(and)g Fu(T)22
b(=)f(\(MPI)p 1356 2417 V 15 w(FLOAT,)g(type1,)f(MPI)p 1742
2417 V 16 w(BYTE\))p Fx(.)75 2466 y(Then)11 b(a)f(call)f(to)h
Fu(MPI)p 399 2466 V 15 w(TYPE)p 502 2466 V 15 w(STRUC\(3,)20
b(T,)i(I,)f(B,)h(newtype\))8 b Fx(returns)k(in)e Fu(newtype)f
Fx(a)h(handle)g(to)g(the)h(datat)o(yp)q(e)179 2549 y Fn(f)p
Fx(\()p Fu(float)o Fj(;)c Fx(0\))p Fj(;)g Fx(\()p Fu(float)n
Fj(;)g Fx(4\))p Fj(;)g Fx(\()p Fu(double)m Fj(;)g Fx(16\))p
Fj(;)g Fx(\()p Fu(char)n Fj(;)g Fx(24\))p Fj(;)g Fx(\()p Fu(char)n
Fj(;)g Fx(26\))p Fj(;)g Fx(\()p Fu(char)n Fj(;)g Fx(27\))p
Fj(;)g Fx(\()p Fu(char)n Fj(;)g Fx(28\))p Fn(g)j Fx(:)75 2633
y(t)o(w)o(o)17 b(copies)h(of)e Fu(MPI)p 402 2633 V 15 w(FLOAT)g
Fx(starting)i(at)f(0,)g(follo)o(w)o(ed)f(b)o(y)h(one)g(cop)o(y)g(of)g
Fu(type1)f Fx(starting)h(at)g(16,)h(follo)o(w)o(ed)d(b)o(y)75
2682 y(three)g(copies)g(of)e Fu(MPI)p 420 2682 V 15 w(CHAR)p
Fx(,)g(starting)g(at)h(26.)k(\(W)m(e)13 b(assume)h(that)g(a)f
Fu(float)g Fx(o)q(ccupies)i(four)f(b)o(ytes.\))p eop
%%Page: 29 29
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(29)158 45 y(In)14 b(general,)g(let)g Fu(T)f
Fx(b)q(e)i(the)f Fu(array)p 701 45 14 2 v 15 w(of)p 760 45
V 15 w(types)f Fx(parameter,)g(where)i Fu(T[i])e Fx(is)h(a)f(handle)h(to)179
124 y Fj(ty)q(pe)255 130 y Fh(i)281 124 y Fx(=)e Fn(f)p Fx(\()p
Fj(ty)q(pe)438 107 y Fh(i)438 134 y Fi(0)458 124 y Fj(;)7 b(disp)553
107 y Fh(i)553 134 y Fi(0)571 124 y Fx(\))p Fj(;)g(:::;)g Fx(\()p
Fj(ty)q(pe)753 107 y Fh(i)753 134 y(n)774 138 y Fb(i)787 124
y Fj(;)g(disp)882 107 y Fh(i)882 134 y(n)903 138 y Fb(i)918
124 y Fx(\))p Fn(g)p Fj(;)75 203 y Fx(with)15 b(exten)o(t)i
Fj(extent)417 209 y Fh(i)431 203 y Fx(.)24 b(Let)16 b Fu(B)g
Fx(b)q(e)g(the)g Fu(array)p 825 203 V 15 w(of)p 884 203 V 15
w(blocklen)e Fx(parameter)i(and)f Fu(I)h Fx(b)q(e)g(the)h Fu(array)p
1652 203 V 14 w(of)p 1710 203 V 15 w(indices)75 260 y Fx(parameter.)g(Then)c
(the)h(newly)e(created)i(datat)o(yp)q(e)f(is)g(the)g(sequence)i(of)d(length)
1355 229 y Fc(P)1398 239 y Fu(count)o Fk(\000)p Fi(1)1398 273
y Fh(i)p Fi(=0)1559 260 y Fu(B)p Fx([)p Fu(i)p Fx(])5 b Fn(\001)i
Fj(extent)1768 266 y Fh(i)1794 260 y Fx(with)75 310 y(en)o(tries)179
389 y Fn(f)p Fx(\()p Fj(ty)q(pe)292 372 y Fi(0)292 399 y(0)311
389 y Fj(;)g(disp)406 372 y Fi(0)406 399 y(0)434 389 y Fx(+)i
Fu(I)p Fx([)p Fu(0)p Fx(])o(\))p Fj(;)e(:::;)g Fx(\()p Fj(ty)q(pe)724
372 y Fi(0)724 399 y Fh(n)745 403 y Fs(0)762 389 y Fj(;)g(disp)857
372 y Fi(0)857 399 y Fh(n)878 403 y Fs(0)904 389 y Fx(+)j Fu(I)p
Fx([)p Fu(0)p Fx(])o(\))p Fj(;)d(:::;)179 480 y Fx(\()p Fj(ty)q(pe)271
463 y Fi(0)271 490 y(0)291 480 y Fj(;)g(disp)386 463 y Fi(0)386
490 y(0)413 480 y Fx(+)j Fu(I)p Fx([)p Fu(0)p Fx(])e(+)h(\()p
Fu(B)p Fx([)p Fu(0)p Fx(])f Fn(\000)i Fx(1\))f Fn(\001)f Fj(extent)889
486 y Fi(0)908 480 y Fx(\))p Fj(;)f(:::;)g Fx(\()p Fj(ty)q(pe)1090
463 y Fi(0)1090 490 y Fh(n)1111 494 y Fs(0)1128 480 y Fj(;)g(disp)1223
463 y Fi(0)1223 490 y Fh(n)1244 494 y Fs(0)1271 480 y Fx(+)i
Fu(I)p Fx([)p Fu(0)p Fx(])f(+)i(\()p Fu(B)p Fx([)p Fu(0)p Fx(])e
Fn(\000)h Fu(1)p Fx(\))g Fn(\001)g Fj(extent)1748 486 y Fi(0)1767
480 y Fx(\))p Fj(;)e(:::;)179 576 y Fx(\()p Fj(ty)q(pe)271
558 y Fu(count)p Fk(\000)p Fi(1)271 587 y(0)425 576 y Fj(;)g(disp)520
558 y Fu(count)o Fk(\000)p Fi(1)520 587 y(0)683 576 y Fx(+)i
Fu(I)p Fx([)p Fu(count)f Fn(\000)h Fu(1)p Fx(]\))p Fj(;)e(:::;)g
Fx(\()p Fj(ty)q(pe)1133 558 y Fu(count)n Fk(\000)p Fi(1)1133
586 y Fh(n)1154 599 y Fu(count)m Fa(\000)p Fs(1)1302 576 y
Fj(;)g(disp)1397 558 y Fu(count)o Fk(\000)p Fi(1)1397 586 y
Fh(n)1418 599 y Fu(count)n Fa(\000)p Fs(1)1576 576 y Fx(+)j
Fu(I)p Fx([)p Fu(count)d Fn(\000)j Fu(1)p Fx(])o(\))p Fj(;)d(:::;)179
684 y Fx(\()p Fj(ty)q(pe)271 666 y Fu(count)p Fk(\000)p Fi(1)271
695 y(0)425 684 y Fj(;)g(disp)520 666 y Fu(count)o Fk(\000)p
Fi(1)520 695 y(0)683 684 y Fx(+)i Fu(I)p Fx([)p Fu(count)f
Fn(\000)h Fu(1)p Fx(])g(+)h(\()p Fu(B)p Fx([)p Fu(count)d Fn(\000)j
Fu(1)p Fx(])e Fn(\000)i Fx(1\))f Fn(\001)g Fj(extent)1479 692
y Fu(count)o Fk(\000)p Fi(1)1632 684 y Fx(\))p Fj(;)e(:::;)179
776 y Fx(\()p Fj(ty)q(pe)271 759 y Fu(count)p Fk(\000)p Fi(1)271
787 y Fh(n)292 800 y Fu(count)o Fa(\000)p Fs(1)442 776 y Fj(;)g(disp)537
759 y Fu(count)o Fk(\000)p Fi(1)537 787 y Fh(n)558 800 y Fu(count)n
Fa(\000)p Fs(1)716 776 y Fx(+)j Fu(I)p Fx([)p Fu(count)d Fn(\000)j
Fu(1)p Fx(])e(+)i(\()p Fu(B)p Fx([)p Fu(count)e Fn(\000)h Fu(1)p
Fx(])g Fn(\000)g Fu(1)p Fx(\))g Fn(\001)g Fj(extent)1513 785
y Fu(count)o Fk(\000)p Fi(1)1667 776 y Fx(\))p Fn(g)158 873
y Fx(A)14 b(call)f(to)h Fu(MPI)p 399 873 V 15 w(TYPE)p 502
873 V 15 w(HINDEXED\()20 b(count,)g(oldtype,)g(I,)i(B,)f(newtype\))12
b Fx(is)i(equiv)n(alen)o(t)f(to)h(a)g(call)f(to)75 922 y Fu(MPI)p
144 922 V 15 w(TYPE)p 247 922 V 15 w(STRUC\()20 b(count,)h(T,)g(I,)h(B,)f
(newtype\))p Fx(,)12 b(where)j(eac)o(h)f(en)o(try)h(of)e Fu(T)h
Fx(is)f(equal)h(to)g Fu(oldtype)p Fx(.)158 1051 y Fo(Discussion:)158
1096 y Ft(I)f(am)g(op)q(en)g(to)g(suggestions)j(for)c(b)q(etter)i(names)f(to)
g(these)g(functions.)75 1294 y Fq(1.13.2)49 b(Additional)19
b(functions)75 1371 y Fx(The)c(displacemen)o(ts)g(in)g(a)f(general)h(datat)o
(yp)q(e)h(are)f(relativ)o(e)g(to)g(some)f(start)h(address.)23
b Fv(Absolute)15 b(addresses)75 1421 y Fx(can)10 b(b)q(e)g(substituted)h(for)
e(these)i(displacemen)o(ts:)16 b(w)o(e)9 b(treat)i(them)d(as)i(displacemen)o
(ts)f(relativ)o(e)h(to)f(\\address)i(zero",)75 1471 y(the)17
b(start)g(of)f(the)h(address)h(space.)26 b(This)16 b(initial)f(address)j
(zero)f(is)f(indicated)h(b)o(y)f(the)h(constan)o(t)g Fu(MPI)p
1721 1471 V 15 w(BOTTOM)p Fx(.)75 1520 y(Th)o(us,)h(a)f(datat)o(yp)q(e)g(can)
h(sp)q(ecify)f(the)h(absolute)f(address)i(of)e(the)g(en)o(tries)i(in)d(the)i
(comm)o(unication)c(bu\013er,)k(in)75 1570 y(whic)o(h)c(case)h(the)f
Fu(start)f Fx(parameter)g(is)h(passed)h(the)g(v)n(alue)e Fu(MPI)p
1096 1570 V 15 w(BOTTOM)p Fx(.)158 1620 y(The)h(address)i(of)d(a)g(lo)q
(cation)g(in)h(memory)d(can)j(b)q(e)h(found)e(b)o(y)h(in)o(v)o(oking)e(the)i
(function)g Fu(MPI)p 1616 1620 V 15 w(ADDRESS)p Fx(.)75 1717
y Fu(MPI)p 144 1717 V 15 w(ADDRESS\(location,)k(address\))117
1767 y Ft(in)c Fu(location)609 b Ft(lo)q(cation)15 b(in)f(caller)g(memory)g
(\(c)o(hoice\))117 1812 y(out)g Fu(address)607 b Ft(address)14
b(of)f(lo)q(cation)i(\(in)o(teger\))158 1888 y Fx(Returns)g(the)f(\(b)o
(yte\))h(address)g(of)e Fu(location)p Fx(.)158 1938 y(Another)h(useful)g
(auxiliary)d(function)i(is)g Fu(MPI)p 883 1938 V 15 w(EXTENT)p
Fx(,)f(that)h(returns)i(the)f(exten)o(t)g(of)f(a)g(datat)o(yp)q(e)h({)f
(where)75 1987 y(exten)o(t)i(is)f(as)g(de\014ned)h(in)e(Eq.)g(1.1.)75
2085 y Fu(MPI)p 144 2085 V 15 w(TYPE)p 247 2085 V 15 w(EXTENT\(datatype,)18
b(extent\))117 2134 y Ft(in)c Fu(datatype)609 b Ft(handle)14
b(to)f(datat)o(yp)q(e)h(ob)r(ject)117 2179 y(out)g Fu(extent)629
b Ft(datat)o(yp)q(e)14 b(exten)o(t)f(\(in)o(teger\))158 2255
y Fx(As)i(de\014ned)h(no)o(w,)f(the)g(exten)o(t)h(of)e(a)h(datat)o(yp)q(e)g
(go)q(es)h(from)d(its)i(\014rst)g(o)q(ccupied)h(b)o(yte)g(to)e(its)h(last)g
(o)q(ccupied)75 2305 y(b)o(yte.)35 b(It)20 b(is)f(often)h(con)o(v)o(enien)o
(t)f(to)h(de\014ne)g(a)f(datat)o(yp)q(e)h(that)g(has)f(a)g(\\hole")g(at)h
(its)f(b)q(eginning)g(and/or)g(its)75 2355 y(end;)d(or)f(a)g(datat)o(yp)q(e)h
(with)f(en)o(tries)h(that)f(extend)i(b)q(ey)o(ond)e(the)h(datat)o(yp)q(e)f
(\\exten)o(t".)23 b(This)15 b(allo)o(ws)f(to)h(use)h(the)75
2405 y(functions)f Fu(MPI)p 324 2405 V 15 w(TYPE)p 427 2405
V 15 w(CONTIGUOUS)p Fx(,)d Fu(MPI)p 752 2405 V 15 w(TYPE)p
855 2405 V 15 w(VECTOR)p Fx(,)h(or)i Fu(MPI)p 1145 2405 V 15
w(TYPE)p 1248 2405 V 15 w(INDEX)f Fx(to)h(replicate)g(a)g(more)f(general)75
2455 y(pattern;)22 b(examples)c(of)h(suc)o(h)h(a)f(usage)g(are)h(pro)o(vided)
f(in)g(Section)g(1.13.4.)32 b(T)m(o)19 b(ac)o(hiev)o(e)g(this,)h(w)o(e)f(add)
g(t)o(w)o(o)75 2504 y(additional)10 b(\\pseudo-datat)o(yp)q(es")j
Fu(MPI)p 707 2504 V 15 w(LB)p Fx(,)e(and)h Fu(MPI)p 934 2504
V 15 w(UB)g Fx(that)g(can)g(b)q(e)h(used,)f(resp)q(ectiv)o(ely)m(,)h(to)f
(mark)f(the)h(lo)o(w)o(er)75 2554 y(b)q(ound)g(or)g(the)g(upp)q(er)h(b)q
(ound)f(of)f(a)h(datat)o(yp)q(e.)17 b(these)d(pseudo-datat)o(yp)q(es)f(o)q
(ccup)o(y)f(no)g(space)h(\()p Fj(extent)p Fx(\()p Fu(MP)p 1759
2554 V 15 w(LB)p Fx(\))f(=)75 2604 y Fj(extent)p Fx(\()p Fu(MP)p
255 2604 V 16 w(UB)o Fx(\))20 b(=)g(0\).)32 b(They)19 b(do)g(not)g(a\013ect)g
(the)h(signature)f(of)f(a)g(message)h(created)h(with)e(this)h(datat)o(yp)q
(e.)75 2654 y(Ho)o(w)o(ev)o(er,)13 b(they)h(do)f(a\013ect)h(the)f
(de\014nition)g(of)f(the)i(exten)o(t)g(of)e(a)h(datat)o(yp)q(e)g(and,)g
(therefore,)h(a\013ect)g(the)g(outcome)75 2704 y(of)f(a)h(replication)f(of)h
(this)f(datat)o(yp)q(e)i(b)o(y)e(a)h(datat)o(yp)q(e)g(constructor.)p
eop
%%Page: 30 30
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(30)158 45 y(Example:)16 b(Let)e Fu(I)21 b(=)h(\(-3,)f(0,)g
(6\))p Fx(;)12 b Fu(T)22 b(=)g(\(MPI)p 928 45 14 2 v 14 w(LB,)g(MPI)p
1096 45 V 15 w(INT,)f(MPI)p 1286 45 V 15 w(UB\))p Fx(,)12 b(and)g
Fu(B)22 b(=)g(\(1,)f(1,)g(1\))p Fx(.)c(Then)75 95 y(a)22 b(call)g(to)g
Fu(MPI)p 331 95 V 15 w(TYPE)p 434 95 V 15 w(STRUC\(3,)e(T,)i(I,)f(B,)g
(type1\))h Fx(creates)i(a)e(new)h(datat)o(yp)q(e)g(that)f(has)h(an)f(exten)o
(t)i(of)75 145 y(9)c(\(from)g(-3)g(to)h(6\),)g(and)g(con)o(tains)g(an)f(in)o
(teger)i(at)e(displacemen)o(t)g(0.)39 b(This)20 b(is)h(the)g(datat)o(yp)q(e)g
(de\014ned)h(b)o(y)75 195 y(the)h(sequence)h Fn(f)p Fu(\(lb,)c(-3\),)h
(\(int,)g(0\),)g(\(ub,)g(6\))p Fn(g)g Fx(.)43 b(If)21 b(this)h(t)o(yp)q(e)h
(is)f(replicated)g(t)o(wice)h(b)o(y)e(a)h(call)f(to)75 244
y Fu(MPI)p 144 244 V 15 w(TYPE)p 247 244 V 15 w(CONTIGUOUS\(2,)e(type1,)i
(type2\))d Fx(then)i(the)h(newly)e(created)j(t)o(yp)q(e)e(can)g(b)q(e)g
(describ)q(ed)i(b)o(y)d(the)75 294 y(sequence)d Fn(f)p Fu(\(lb,)21
b(-3\),)g(\(int,)g(0\),)g(\(int,9\),)f(\(ub,)h(15\))p Fn(g)g
Fx(.)d(\(En)o(tries)d(of)e(t)o(yp)q(e)i Fu(lb)f Fx(or)f Fu(ub)h
Fx(can)g(b)q(e)h(deleted)75 344 y(if)e(they)h(are)h(not)f(at)f(the)i(endp)q
(oin)o(ts)f(of)f(the)i(datat)o(yp)q(e.\))158 394 y(In)f(general,)g(if)179
475 y Fj(D)q(ataty)q(pe)f Fx(=)f Fn(f)p Fx(\()p Fj(ty)q(pe)519
481 y Fi(0)538 475 y Fj(;)7 b(disp)633 481 y Fi(0)651 475 y
Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)833 481 y Fh(n)p Fk(\000)p
Fi(1)897 475 y Fj(;)g(disp)992 481 y Fh(n)p Fk(\000)p Fi(1)1057
475 y Fx(\))p Fn(g)p Fj(;)75 556 y Fx(then)15 b(the)f Fv(lo)o(w)o(er)g(b)q
(ound)f Fx(of)g Fj(D)q(ataty)q(pe)i Fx(is)f(de\014ned)h(to)f(b)q(e)179
660 y Fj(l)q(b)p Fx(\()p Fj(D)q(ataty)q(pe)p Fx(\))f(=)469
602 y Fc(\032)521 635 y Fx(min)590 641 y Fh(j)614 635 y Fj(disp)690
641 y Fh(j)1036 635 y Fx(if)g(no)h(en)o(try)g(has)h(basic)f(t)o(yp)q(e)g
Fj(ty)q(pe)1588 641 y Fh(j)1618 635 y Fx(=)e Fu(lb)521 685
y Fx(min)n Fn(f)p Fj(disp)687 691 y Fh(j)730 685 y Fx(:)25
b Fj(ty)q(pe)843 691 y Fh(j)873 685 y Fx(=)12 b Fu(lb)o Fn(g)41
b Fx(otherwise)158 764 y(Similarly)l(,)11 b(the)j Fv(upp)q(er)g(b)q(ound)f
Fx(of)g Fj(D)q(ataty)q(pe)i Fx(is)f(de\014ned)h(to)f(b)q(e)179
868 y Fj(ub)p Fx(\()p Fj(D)q(ataty)q(pe)p Fx(\))f(=)479 810
y Fc(\032)531 843 y Fx(max)609 849 y Fh(j)633 843 y Fj(disp)709
849 y Fh(j)736 843 y Fx(+)c Fj(siz)r(eof)t Fx(\()p Fj(ty)r(pe)987
849 y Fh(j)1007 843 y Fx(\))56 b(if)13 b(no)g(en)o(try)i(has)f(basic)g(t)o
(yp)q(e)g Fj(ty)q(pe)1630 849 y Fh(j)1660 843 y Fx(=)e Fu(ub)531
893 y Fx(max)o Fn(f)p Fj(disp)706 899 y Fh(j)748 893 y Fx(:)25
b Fj(ty)q(pe)861 899 y Fh(j)891 893 y Fx(=)12 b Fu(ub)p Fn(g)65
b Fx(otherwise)158 972 y(Then)179 1054 y Fj(extent)p Fx(\()p
Fj(D)q(ataty)q(pe)p Fx(\))13 b(=)f Fj(ub)p Fx(\()p Fj(D)q(ataty)q(pe)p
Fx(\))f Fn(\000)e Fj(l)q(b)p Fx(\()p Fj(D)q(ataty)q(pe)p Fx(\);)158
1135 y(F)m(urthermore,)h(if)e Fj(ty)q(pe)516 1141 y Fh(i)540
1135 y Fx(requires)j(alignemen)o(t)c(to)i(an)g(address)i(that)e(is)g(a)g(m)o
(ultiple)e(of)i Fj(k)1516 1141 y Fh(i)1529 1135 y Fx(,)h(then)g
Fj(extent)p Fx(\()p Fj(D)q(ataty)q(pe)p Fx(\))75 1185 y(is)i(further)h
(rounded)f(up)g(to)g(the)g(nearest)i(m)o(ultiple)9 b(of)j(max)1013
1191 y Fh(i)1034 1185 y Fj(k)1056 1191 y Fh(i)1069 1185 y Fx(.)17
b(The)c(formal)c(de\014nitions)j(giv)o(en)g(for)f(the)i(v)n(arious)75
1235 y(datat)o(yp)q(e)h(constructors)i(apply)d(no)o(w,)g(with)h(the)g
(amended)g(de\014nition)f(of)g Fv(exten)o(t)p Fx(.)158 1284
y(A)j(datat)o(yp)q(e)g(ob)r(ject)h(has)f(to)g(b)q(e)h Fv(committed)c
Fx(b)q(efore)k(it)f(can)g(b)q(e)h(used)g(in)e(a)h(comm)o(unication.)21
b(A)16 b(com-)75 1334 y(mitted)h(datat)o(yp)q(e)i(ob)r(ject)h(cannot)e(b)q(e)
i(used)f(to)f(build)g(new)h(deriv)o(ed)g(datat)o(yp)q(es.)33
b(The)19 b(system)f(ma)o(y)f(use)i(a)75 1384 y(di\013eren)o(t)e(in)o(ternal)g
(represen)o(tation)h(for)e(committed)e(datat)o(yp)q(e)j(ob)r(ject)g(so)g(as)f
(to)g(facilitate)g(comm)o(unicatio)o(n,)75 1434 y(e.g.)h(c)o(hange)c(from)e
(a)i(compacted)f(represen)o(tation)j(to)d(a)h(\015at)f(represen)o(tation)i
(of)f(the)g(datat)o(yp)q(e,)g(and)f(select)i(the)75 1484 y(most)f(con)o(v)o
(enien)o(t)h(transfer)h(mec)o(hanism.)75 1581 y Fu(MPI)p 144
1581 V 15 w(TYPE)p 247 1581 V 15 w(COMMIT\(intype,)k(outtype\))117
1631 y Ft(in)14 b Fu(intype)653 b Ft(handle)14 b(to)f(datat)o(yp)q(e)h(ob)r
(ject)g(to)f(b)q(e)g(committed)117 1676 y(out)h Fu(outtype)607
b Ft(handle)14 b(to)f(committed)h(datat)o(yp)q(e)g(ob)r(ject)158
1752 y Fx(There)f(is)f(no)g(need)h(to)e(commit)e(basic)j(datat)o(yp)q(es;)h
(they)f(are)h(\\pre-committed".)i(They)d(are)h(the)f(exception)75
1802 y(to)i(the)g(rule)g(that)g(committed)e(datat)o(yp)q(es)i(cannot)g(b)q(e)
h(used)g(to)e(form)g(deriv)o(ed)h(datat)o(yp)q(es.)158 1930
y Fo(Discussion:)158 1976 y Ft(1.)j(Do)c(w)o(e)g(really)i(need)e(a)g(commit)h
(here?)158 2022 y(2.)j(Do)c(w)o(e)g(w)o(an)o(t)g(one)g(inout)h(argumen)o(t,)g
(or)f(t)o(w)o(o)f(distinct)j(argumen)o(ts?)158 2067 y(3.)24
b(Are)15 b(committed)h(and)g(uncommitted)i(ob)r(jects)d(of)g(the)h(same)f(t)o
(yp)q(e?)25 b(\(The)16 b(answ)o(er)f(m)o(ust)h(b)q(e)f(y)o(es,)h(if)g(it)f
(is)h(an)75 2113 y(inout)e(argumen)o(t.\))158 2159 y(4.)k(If)13
b(w)o(e)f(ha)o(v)o(e)i(only)h(one)e(inout)i(argumen)o(t,)f(do)q(es)g(a)f
(commit)h(c)o(hange)g(the)g(datat)o(yp)q(e)g(ob)r(ject,)f(or)h(do)q(es)g(it)f
(create)h(a)75 2204 y(new)d(ob)r(ject)g(and)h(return)g(a)f(p)q(oin)o(ter)h
(to)f(it)h(in)g Fm(datatype)p Ft(?)h(I.e.,)d(if)i(w)o(e)e(ha)o(v)o(e)i
(another)g(p)q(oin)o(ter)h(to)e(the)g(same)g(uncommitted)75
2250 y(ob)r(ject,)i(can)g(w)o(e)g(con)o(tin)o(ue)h(to)f(use)h(it?)158
2296 y(W)m(e)j(prohibit)j(the)d(use)g(of)g(committed)h(datat)o(yp)q(e)h(in)e
(the)h(construction)h(of)e(new)g(datat)o(yp)q(es)h(in)g(order)g(to)f(allo)o
(w)75 2341 y(the)c(commit)g(function)g(to)g(c)o(hange)g(a)g(datat)o(yp)q(e)g
(represen)o(tation)i(in)o(to)e(one)g(suitable)h(for)e(comm)o(unication,)j
(and)e(p)q(erhaps)75 2387 y(unsuitable)i(for)e(recursiv)o(e)h(datat)o(yp)q(e)
g(construction.)k(This)c(restriction)g(could)g(b)q(e)f(relaxed)h(b)o(y)f
(assuming)i(that)e(the)f(\\un-)75 2433 y(committed")i(datat)o(yp)q(e)h
(represen)o(tation)g(is)f(k)o(ept)g(alongside)i(the)d(\\committed")i(one.)j
(With)c(suc)o(h)g(an)g(implemen)o(tation)75 2478 y Fm(MPI)p
137 2478 12 2 v 13 w(TYPE)p 230 2478 V 13 w(COMMIT)h Ft(could)j(ha)o(v)o(e)g
(only)h(one)f(argumen)o(t,)h(and)f(only)h(one)f(t)o(yp)q(e)g(of)f(datat)o(yp)
q(e)i(ob)r(ject)e(is)i(needed.)31 b(Suc)o(h)75 2524 y(represen)o(tation)14
b(could)f(also)g(simplify)h(the)e(implemen)o(tation)j(of)d(a)g(datat)o(yp)q
(e)h(\\\015atten")g(function)g(\(e.g.,)e(for)h(debugging\).)75
2704 y Fu(MPI)p 144 2704 14 2 v 15 w(TYPE)p 247 2704 V 15 w(FREE\(datatype\))
p eop
%%Page: 31 31
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(31)117 45 y Ft(inout)15 b Fu(datatype)553 b
Ft(handle)14 b(to)f(datat)o(yp)q(e)h(ob)r(ject)158 121 y Fx(Marks)g(the)g
(datat)o(yp)q(e)f(ob)r(ject)h(asso)q(ciated)g(with)f Fu(datatype)f
Fx(for)h(deallo)q(cation.)k(The)c(ob)r(ject)i(will)c(b)q(e)j(deal-)75
171 y(lo)q(cated)f(after)h(an)o(y)f(p)q(ending)g(comm)o(unication)d(that)j
(uses)i(this)e(ob)r(ject)h(completes,)f(at)g(whic)o(h)g(p)q(oin)o(t)g
Fu(datatype)75 221 y Fx(b)q(ecomes)h(n)o(ull.)158 349 y Fo(Discussion:)158
395 y Ft(If)d(w)o(e)g(ha)o(v)o(e)i(di\013eren)o(t)g(datat)o(yp)q(es)g(for)e
(committed)i(and)f(uncommitted,)i(then)e(w)o(e)f(ha)o(v)o(e)h(2)g(free)f
(functions)j(\(or)d(nev)o(er)75 441 y(free)i(uncommitted)h(datat)o(yp)q(e\))
75 637 y Fq(1.13.3)49 b(Use)16 b(of)h(general)f(datat)o(yp)q(es)g(in)h(comm)n
(unication)75 714 y Fx(Handles)c(to)g(deriv)o(ed)g(datat)o(yp)q(es)g(can)g(b)
q(e)g(passed)h(to)f(a)f(comm)o(unication)d(call)j(wherev)o(er)j(a)d(datat)o
(yp)q(e)h(argumen)o(t)75 764 y(is)i(required.)23 b(A)16 b(call)e(of)h(the)h
(form)d Fu(MPI)p 715 764 14 2 v 15 w(SEND\(start,)20 b(count,)g(datatype,)g
(...\))p Fx(,)14 b(where)j Fu(count)c Fx(=)h Fu(1)h Fx(uses)75
814 y(the)e(send)g(bu\013er)h(de\014ned)g(b)o(y)e Fu(start)f
Fx(and)i Fu(datatype)p Fx(;)d(i.e.)17 b(if)12 b Fu(datatype)f
Fx(is)h(a)g(handle)h(to)f(the)h(datat)o(yp)q(e)g(de\014ned)75
864 y(b)o(y)h(the)i(sequence)h Fn(f)p Fx(\()p Fj(ty)q(pe)492
870 y Fi(0)511 864 y Fj(;)7 b(disp)606 870 y Fi(0)625 864 y
Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)807 870 y Fh(n)p Fk(\000)p
Fi(1)870 864 y Fj(;)g(disp)965 870 y Fh(n)p Fk(\000)p Fi(1)1030
864 y Fx(\))p Fn(g)p Fx(,)15 b(\(with)f(empt)o(y)g(en)o(tries)h(deleted\))h
(then)g(the)f(send)75 913 y(bu\013er)f(consists)f(of)f(the)i(en)o(tries)f(of)
f(t)o(yp)q(es)i Fj(ty)q(pe)823 919 y Fh(i)838 913 y Fx(,)e(at)g(addresses)j
Fu(start)6 b Fx(+)h Fj(disp)1324 919 y Fh(i)1338 913 y Fx(,)12
b Fj(i)g Fx(=)g(0)p Fj(;)7 b(:::;)g(n)g Fn(\000)g Fx(1.)14
b(The)f(message)75 963 y(generated)h(consists)f(of)f(a)g(sequence)i(of)e
Fj(n)g Fx(en)o(tries,)h(of)f(t)o(yp)q(es)h Fj(ty)q(pe)1119
969 y Fi(0)1139 963 y Fj(;)7 b(:::;)g(ty)q(pe)1289 969 y Fh(n)p
Fk(\000)p Fi(1)1353 963 y Fx(.)17 b(The)c(receiv)o(e)g(bu\013er)h(for)e(a)g
(call)75 1013 y Fu(MPI)p 144 1013 V 15 w(RECV\()21 b(start,)f(count,)h
(datatype)f(,)i(...\))p Fx(,)10 b(is)h(similarly)e(de\014ned,)j(for)f
Fu(count)21 b(=1)p Fx(.)c(The)12 b(same)e(applies)75 1063 y(to)k(all)e(other)
j(send)g(and)e(receiv)o(e)j(op)q(erations)e(that)g(ha)o(v)o(e)f(a)h
Fu(datatype)e Fx(parameter.)158 1113 y(A)f(datat)o(yp)q(e)h(used)g(in)e(a)h
(receiv)o(e)i(op)q(eration)e(ma)o(y)e(not)i(ha)o(v)o(e)g(o)o(v)o(erlapping)f
(en)o(tries;)j(otherwise)f(the)g(outcome)75 1162 y(of)h(the)i(receiv)o(e)g
(op)q(eration)f(is)f(unde\014ned.)158 1212 y(If)i(a)g(send)i(op)q(eration)e
(using)g(a)g(general)h(datat)o(yp)q(e)f Fu(type1)g Fx(is)g(matc)o(hed)g(b)o
(y)g(a)g(receiv)o(e)i(op)q(eration)e(using)g(a)75 1262 y(general)d(datat)o
(yp)q(e)f Fu(type2)f Fx(then)i(the)g(sequence)i(of)c(\(nonempt)o(y\))h(basic)
g(t)o(yp)q(e)h(en)o(tries)g(de\014ned)h(b)o(y)e(eac)o(h)h(datat)o(yp)q(e)75
1312 y(should)i(b)q(e)h(iden)o(tical.)j(F)m(urthermore,)13
b(eac)o(h)i(en)o(try)f(in)g(the)h(send)g(bu\013er)g(should)f(b)q(e)g(of)g(t)o
(yp)q(e)g(that)h(matc)o(hes)e(the)75 1362 y(t)o(yp)q(e)h(of)g(the)g(corresp)q
(onding)h(en)o(try)g(in)e Fu(type1)g Fx(and)h(eac)o(h)g(en)o(try)h(in)e(the)i
(receiv)o(e)g(bu\013er)g(should)f(of)f(a)g(t)o(yp)q(e)i(that)75
1411 y(matc)o(hes)c(the)g(t)o(yp)q(e)h(of)f(the)g(corresp)q(onding)h(en)o
(try)g(in)f Fu(type2)f Fx(\(with)h(t)o(yp)q(e)g(matc)o(hing)f(de\014ned)i(as)
f(in)g(Section)g(1.5\).)75 1461 y(Th)o(us,)17 b(t)o(yp)q(e)f(matc)o(hing)f
(is)h(de\014ned)h(b)o(y)f(the)h(\\\015at")e(structure)k(of)c(a)h(datat)o(yp)q
(e,)h(and)f(do)q(es)g(not)h(dep)q(end)g(on)f(its)75 1511 y(de\014ning)e
(expression.)158 1561 y(Example:)75 1634 y Fu(...)75 1684 y
(MPI_TYPE_CONTIGUO)o(US\()19 b(MPI_REAL,)h(2,)h(type2\))75
1734 y(MPI_TYPE_CONTIGUO)o(US\()e(MPI_REAL,)h(4,)h(type4\))75
1784 y(MPI_TYPE_CONTIGUO)o(US\()e(type2,)h(2,)i(type22\))158
1857 y Fx(A)14 b(message)g(sen)o(t)g(with)g(datat)o(yp)q(e)g
Fu(type4)f Fx(can)h(b)q(e)g(receiv)o(ed)i(with)d(datat)o(yp)q(e)h
Fu(type22)p Fx(.)158 1907 y(T)o(yp)q(e)19 b(matc)o(hing)d(requiremen)o(ts)i
(imply)e(that)j(\(nonempt)o(y\))e(en)o(tries)i(of)f(di\013eren)o(t)h(t)o(yp)q
(es)g(in)f(a)g(datat)o(yp)q(e)75 1957 y(cannot)d(o)o(v)o(erlap,)e(unless)j
(they)f(coincide)g(and)f(ha)o(v)o(e)h(the)g(same)f(basic)g(t)o(yp)q(e,)h(or)g
(one)g(of)e(them)h(ha)o(v)o(e)h(basic)f(t)o(yp)q(e)75 2007
y Fu(byte)p Fx(.)158 2056 y(The)19 b(length)f(of)g(a)g(message)h(receiv)o(ed)
g(\(i.e.,)g(the)g(v)n(alue)f(returned)i(when)f(the)g(receiv)o(e)h(status)f
(ob)r(ject)g(is)75 2106 y(deco)q(ded)f(b)o(y)f(the)g(function)g
Fu(MPI)p 608 2106 V 15 w(GET)p 689 2106 V 15 w(LEN)p Fx(\))f(is)h(equal)f(to)
h(the)g(n)o(um)o(b)q(er)f(of)h(basic)g(en)o(tries)g(receiv)o(ed.)29
b(Consider)75 2156 y(again)13 b(the)i(datat)o(yp)q(es)h(de\014ned)f(in)f(the)
h(last)g(example.)j(If)d(a)f(message)g(is)g(sen)o(t)i(using)e(either)h(datat)
o(yp)q(e)g Fu(type22)75 2206 y Fx(or)d Fu(type4)f Fx(and)h(is)f(receiv)o(ed)j
(using)d(either)i(of)f(these)h(t)o(w)o(o)e(datat)o(yp)q(es,)i(then)g(the)f
(length)g(of)f(the)i(message)f(receiv)o(ed)75 2256 y(will)g(b)q(e)j(four.)j
(In)c(the)g(general)g(case)h(the)f(basic)g(en)o(tries)h(need)g(not)f(b)q(e)h
(all)d(of)i(the)g(same)f(t)o(yp)q(e.)158 2384 y Fo(Discussion:)158
2430 y Ft(An)h(alternativ)o(e)i(de\014nition)h(that)d(\014nds)h(fa)o(v)o(or)g
(with)f(man)o(y)h(mem)o(b)q(ers)f(of)g(the)g(sub)q(committee)i(is)f(that)f
(the)g(length)75 2475 y(of)g(the)g(message)h(receiv)o(ed)h(is)f(measured)g
(in)g(terms)f(of)g(subunits)i(of)e(the)g(receiving)j(datat)o(yp)q(e.)k(Th)o
(us,)15 b(if)f(four)h(reals)g(are)75 2521 y(receiv)o(ed)d(using)h
Fm(type4)p Ft(,)c(the)i(length)i(of)e(the)g(receiv)o(ed)h(message)g(is)g
(four;)f(if)h(they)f(are)g(receiv)o(ed)i(using)g Fm(type22)p
Ft(,)8 b(the)j(length)75 2567 y(of)g(the)g(receiv)o(ed)h(message)g(is)f(t)o
(w)o(o.)16 b(With)c(suc)o(h)g(a)f(de\014nition,)i(it)f(is)f(required)i(that)e
(the)g(arriving)i(message)f(\014lls)g(an)g(in)o(teger)75 2612
y(n)o(um)o(b)q(er)i(of)f(subunits.)158 2658 y(The)f(rationale)i(is)e(that)g
(the)g(these)g(are)g(the)g(units)h(that)f(are)f(meaningful)k(to)c(the)h
(programmer.)18 b(Consider)13 b(the)f(case)75 2704 y(of)h(an)h(arra)o(y)f(of)
g(structures)h(that)g(is)f(passed)i(in)f(a)f(message)h(\(example)g(4.1)g(b)q
(elo)o(w\).)k(Then)13 b(one)h(migh)o(t)g(w)o(an)o(t)f(to)g(enforce)p
eop
%%Page: 32 32
bop 75 -100 a Fr(SECTION)15 b(1.)26 b(POINT)15 b(TO)f(POINT)h(COMMUNICA)m
(TION)736 b Fx(32)75 45 y Ft(the)15 b(restriction)h(that)f(only)h(complete)g
(structures)f(are)g(passed;)h(and)f(is)g(natural)h(to)f(return)g(in)g(the)g
(receiv)o(e)h(status)f(the)75 91 y(n)o(um)o(b)q(er)c(of)f(structures)h
(receiv)o(ed,)h(rather)f(than)g(this)g(n)o(um)o(b)q(er)g(m)o(ultipli)q(ed)i
(b)o(y)e(14,)g(the)f(n)o(um)o(b)q(er)h(of)f(en)o(tries)i(p)q(er)e(structure.)
158 136 y(Consider,)19 b(on)f(the)f(other)g(hand,)i(the)e(case)h(of)f(a)g
(sequence)h(of)f(reals)h(that)f(is)h(receiv)o(ed)h(in)e(a)h(3D)f(arra)o(y)h
(section)75 182 y(\(de\014ned)d(as)f(in)h(the)f(\014rst)g(example)i(b)q(elo)o
(w\).)k(W)m(e)14 b(ma)o(y)g(w)o(an)o(t)g(to)g(receiv)o(e)h(an)f(arbitrary)i
(n)o(um)o(b)q(er)e(of)g(reals,)h(and)f(the)g(1D)75 228 y(and)g(2D)f
(subsections)i(ma)o(y)e(not)h(carry)f(an)o(y)h(signi\014cance)h(for)e(the)g
(purp)q(ose)i(of)d(this)i(comm)o(unication.)158 273 y(Opinions?)158
406 y Fx(A)19 b(call)e(of)h(the)i(form)c Fu(MPI)p 588 406 14
2 v 16 w(SEND\(start,)j(count,)i(datatype)f(,)h(...\))p Fx(,)e(where)g
Fu(count)g Fj(>)g Fu(1)p Fx(,)g(is)g(in)o(ter-)75 456 y(preted)i(as)g(if)e
(the)i(call)e(w)o(as)h(passed)h(a)f(new)g(datat)o(yp)q(e)g(whic)o(h)g(is)g
(the)h(concatenation)f(of)g Fu(count)f Fx(copies)i(of)75 506
y Fu(datatype)p Fx(,)12 b(suc)o(h)j(as)f(w)o(ould)f(b)q(e)h(pro)q(duced)h(b)o
(y)f(a)g(call)f(to)h Fu(MPI)p 1067 506 V 15 w(CONTIGUOUS\(count,)k(datatype,)
i(newtype\))p Fx(,)75 555 y(and)12 b(a)f Fu(count)g Fx(argumen)o(t)f(of)h
(one.)18 b(The)12 b(same)f(holds)h(true)g(for)g(the)g(other)g(comm)o
(unication)d(functions)i(that)h(ha)o(v)o(e)75 605 y(a)i(datat)o(yp)q(e)g
(argumen)o(t.)75 721 y Fq(1.13.4)49 b(Examples)75 798 y Fx(The)14
b(follo)o(wing)e(examples)h(illustrate)g(the)i(use)f(of)g(deriv)o(ed)g(datat)
o(yp)q(es.)158 898 y(First)g(example:)j(extract)e(a)f(section)g(of)f(a)h(3D)f
(matrix.)206 981 y Fu(REAL)21 b(a\(100,100,100\),)d(e\(9,9,9\))206
1030 y(INTEGER)i(oneslice,)g(twoslice,)g(threeslice,)f(finaltype,)h
(sizeofreal)75 1130 y(C)131 b(extract)20 b(the)h(section)f(a\(1:17:2,)g
(3:11,)h(2:10\))75 1180 y(C)131 b(and)21 b(store)f(it)i(in)f(e\(*,*,*\).)206
1280 y(CALL)g(MPI_TYPE_EXTENT\()d(MPI_REAL,)i(sizeofreal,)g(ierr\))75
1379 y(C)109 b(create)20 b(datatype)g(for)i(a)f(1D)h(section)206
1429 y(CALL)f(MPI_TYPE_VECTOR\()d(9,)k(MPI_REAL,)41 b(2,)22
b(1,)f(oneslice,)f(ierr\))75 1529 y(C)109 b(create)20 b(datatype)g(for)i(a)f
(2D)h(section)206 1578 y(CALL)f(MPI_TYPE_HVECTOR)o(\()e(9,)i(oneslice,)42
b(100*sizeofreal,)19 b(1,)i(twoslice,)f(ierr\))75 1678 y(C)109
b(create)20 b(datatype)g(for)i(the)f(entire)f(section)206 1728
y(CALL)h(MPI_TYPE_HVECTOR)o(\()e(9,)i(twoslice,)42 b(100*100*sizeofreal)o(,)
19 b(1,)467 1778 y(threeslice,)h(ierr\))206 1877 y(CALL)h(MPI_TYPE_COMMIT\()d
(threeslice,)i(finaltype,)f(ierr\))206 1927 y(CALL)i(MPI_SENDRECV\(a\(1)o
(,3,2\))o(,)e(1,)i(finaltype,)f(MPI_ME,)g(e,)i(9*9*9,)467 1977
y(MPI_REAL,)e(MPI_ME,)h(0,)g(MPI_ALL,)f(status,)g(ierr\))158
2060 y Fx(Second)15 b(example:)h(Cop)o(y)e(the)g(\(strictly\))h(lo)o(w)o(er)e
(triangular)g(part)h(of)g(a)f(matrix.)206 2143 y Fu(REAL)21
b(a\(100,100\),)e(b\(100,100\))206 2193 y(INTEGER)42 b(index\(100\),)19
b(blocklen\(100\),)g(ltype,)i(finaltype)75 2292 y(C)109 b(copy)21
b(lower)f(triangular)g(part)h(of)h(array)e(a)75 2342 y(C)109
b(onto)21 b(lower)f(triangular)g(part)h(of)h(array)e(b)75 2442
y(C)109 b(compute)20 b(start)h(and)g(size)g(of)g(each)g(column)206
2492 y(DO)g(i=1,)g(100)249 2541 y(index\(i\))f(=)i(100*\(i-1\))e(+)i(i)249
2591 y(block\(i\))e(=)i(100-i)206 2641 y(END)f(DO)p eop
%%Page: 33 33
bop 75 -100 a Fr(SECTION)15 b(1.)26 b(POINT)15 b(TO)f(POINT)h(COMMUNICA)m
(TION)736 b Fx(33)75 45 y Fu(C)109 b(create)20 b(datatype)g(for)i(lower)e
(triangular)g(part)206 95 y(CALL)h(MPI_TYPE_INDEX\()d(MPI_REAL,)i(100,)h
(index,)g(block,)f(ltype,)h(ierr\))206 195 y(CALL)g(MPI_TYPE_COMMIT\()o
(ltype)o(,)e(finaltype,)h(ierr\))206 244 y(CALL)h(MPI_SENDRECV\()e(a,)i(1,)h
(finaltype,)d(MPI_ME,)i(b,)g(1,)424 294 y(finaltype,)e(MPI_ME,)i(0,)g
(MPI_ALL,)f(status,)h(ierr\))158 473 y Fx(Third)14 b(example:)i(T)m(ransp)q
(ose)f(a)f(matrix)206 552 y Fu(REAL)21 b(a\(100,100\),)e(b\(100,100\))206
602 y(INTEGER)h(row,)h(xpose,)g(finaltype,)e(sizeofreal)75
702 y(C)109 b(transpose)20 b(matrix)g(a)i(onto)f(b)206 851
y(CALL)g(MPI_TYPE_EXTENT\()d(MPI_REAL,)i(sizeofreal,)g(ierr\))75
951 y(C)109 b(create)20 b(datatype)g(for)i(one)f(row)206 1001
y(CALL)g(MPI_TYPE_VECTOR\()d(100,)j(MPI_REAL,)f(100,)h(1,)g(row,)g(ierr\))75
1100 y(C)109 b(create)20 b(datatype)g(for)i(matrix)e(in)i(row-major)d(order)
206 1150 y(CALL)i(MPI_TYPE_HVECTOR)o(\()e(100,)i(row,)g(sizeofreal,)e(1,)j
(xpose,)e(ierr\))206 1250 y(CALL)h(MPI_TYPE_COMMIT\()d(xpose,)j(finaltype,)e
(ierr\))75 1349 y(C)109 b(send)21 b(matrix)f(in)i(row-major)e(order)g(and)i
(receive)e(in)h(column)g(major)g(order)206 1399 y(CALL)g(MPI_SENDRECV\()e(a,)
i(1,)h(finaltype,)d(MPI_ME,)i(b,)g(100*100,)424 1449 y(MPI_REAL,)f(MPI_ME,)g
(0,)h(MPI_ALL,)f(status,)h(ierr\))158 1628 y Fx(Another)15
b(approac)o(h)f(to)f(the)i(transp)q(ose)g(problem:)206 1707
y Fu(REAL)21 b(a\(100,100\),)e(b\(100,100\))206 1757 y(INTEGER)42
b(index\(2\),)20 b(blen\(2\),)g(type\(2\),)g(row,)h(row1,)g(finaltype,)f
(sizeofreal)75 1907 y(C)109 b(transpose)20 b(matrix)g(a)i(onto)f(b)206
2056 y(CALL)g(MPI_TYPE_EXTENT\()d(MPI_REAL,)i(sizeofreal,)g(ierr\))75
2156 y(C)109 b(create)20 b(datatype)g(for)i(one)f(row)206 2205
y(CALL)g(MPI_TYPE_VECTOR\()d(MPI_REAL,)i(100,)h(100,)g(1,)g(row,)g(ierr\))75
2305 y(C)109 b(create)20 b(datatype)g(for)i(one)f(row,)g(with)g(the)g(extent)
f(of)i(one)f(real)g(number)206 2355 y(index\(1\))f(=)h(0)206
2405 y(index\(2\))f(=)h(sizeofreal)206 2455 y(type\(1\))42
b(=)21 b(row)206 2504 y(type\(2\))42 b(=)21 b(MPI_UB)206 2554
y(blen\(1\))42 b(=)21 b(1)206 2604 y(blen\(2\))42 b(=)21 b(1)206
2654 y(CALL)g(MPI_TYPE_STRUC\()d(2,)k(type,)f(index,)f(blen,)h(row1\))p
eop
%%Page: 34 34
bop 75 -100 a Fr(SECTION)15 b(1.)26 b(POINT)15 b(TO)f(POINT)h(COMMUNICA)m
(TION)736 b Fx(34)206 45 y Fu(CALL)21 b(MPI_TYPE_COMMIT\()d(row1,)j
(finaltype,)f(ierr\))75 145 y(C)109 b(send)21 b(100)g(rows)g(and)g(receive)f
(in)i(column)e(major)h(order)206 195 y(CALL)g(MPI_SENDRECV\()e(a,)i(100,)g
(finaltype,)f(MPI_ME,)g(b,)i(100*100,)424 244 y(MPI_REAL,)e(MPI_ME,)g(0,)h
(MPI_ALL,)f(status,)h(ierr\))158 427 y Fx(F)m(ourth)14 b(example:)j
(manipulate)11 b(an)j(arra)o(y)g(of)f(structures.)75 510 y
Fu(struct)21 b(Partstruct)140 560 y({)140 610 y(int)h(index;)85
b(/*)22 b(particle)e(type)h(*/)140 659 y(double)g(d[6])43 b(/*)21
b(particle)f(coordinates)g(*/)140 709 y(char)h(b[7])87 b(/*)21
b(some)g(additional)f(information)f(*/)140 759 y(};)75 859
y(struct)i(Partstruct)e(particle[1000];)315 958 y(/*)i(build)g(datatype)f
(describing)g(first)g(array)h(entry)g(*/)75 1058 y(MPI_datatype)e
(Particletype;)75 1108 y(MPI_datatype)g(stype[3])h(=)i({MPI_int,)e
(MPI_double,)f(MPI_char};)75 1158 y(int)217 b(sblock[3])20
b(=)i({1,)f(6,)g(7};)75 1207 y(int)217 b(sindex[3];)75 1307
y(MPI_address\()19 b(\(void)i(*\)particle,)f(sindex\);)75 1357
y(MPI_address\()f(\(void)i(*\)particle[0].d,)e(sindex+1\);)75
1407 y(MPI_address\()g(\(void)i(*\)particle[0].b,)e(sindex+2\);)75
1456 y(MPI_type_struct\()f(3,)k(stype,)e(sindex,)h(sblock,)f(Particletype\);)
75 1506 y(/*)h(Particletype)f(describes)g(first)g(array)h(entry)g(--)g(using)
g(absolute)140 1556 y(addresses)f(*/)249 1706 y(/*)i(4.1:)f(send)g(the)g
(entire)f(array)h(*/)75 1805 y(MPI_datatype)e(Type1;)75 1855
y(MPI_commit\()h(Particletype,)f(Type1\);)75 1905 y(MPI_send\()h(MPI_bottom,)
f(1000,)i(Type1,)g(dest,)g(tag,)f(comm\);)249 2054 y(/*)i(4.2:)f(send)g(the)g
(entries)f(with)h(index)g(value)g(zero,)293 2104 y(preceded)f(by)h(the)h
(number)e(of)i(such)f(entries)f(*/)75 2204 y(MPI_datatype)f(Zparticles;)63
b(/*)22 b(datatype)e(describing)g(all)h(particles)860 2253
y(with)g(index)f(zero)h(\(needs)g(to)g(be)h(recomputed)860
2303 y(if)f(indices)f(change\))h(*/)75 2353 y(MPI_datatype)e(Ztype,)i(Type2;)
75 2453 y(int)g(zindex[1000],)e(zblock[1000],)g(i,)j(j,)f(k;)75
2503 y(int)g(zzblock[2])f(=)h({1,1};)75 2552 y(int)g(zztype[2],)f
(zzindex[2];)75 2702 y(/*)h(compute)g(indices)f(of)h(particles)f(with)h
(index)g(zero)g(*/)p eop
%%Page: 35 35
bop 75 -100 a Fr(SECTION)15 b(1.)26 b(POINT)15 b(TO)f(POINT)h(COMMUNICA)m
(TION)736 b Fx(35)75 45 y Fu(j)22 b(=)f(0;)75 95 y(for\(i=0;)f(i)i(<)f(1000;)
g(i++\))119 145 y(if)g(\(particle[i].inde)o(x==0\))d(then)184
195 y({)184 244 y(zindex[j])i(=)h(i;)184 294 y(zblock[i])f(=)h(1;)184
344 y(j++;)184 394 y(})75 493 y(/*)g(create)g(datatype)f(for)h(particles)f
(with)h(index)g(zero)g(*/)75 543 y(MPI_type_index\()e(j,)i(Particletype,)41
b(zindex,)20 b(zblock,)h(Zparticles\);)75 643 y(/*)g(prepend)g(particle)f
(count)h(*/)75 693 y(MPI_address\(\(void)d(*\)&j,)j(zzindex\);)75
742 y(zzindex[1])f(=)h(MPI_bottom;)75 792 y(zztype[0])f(=)i(MPI_int;)75
842 y(zztype[1])e(=)i(Zparticles;)75 892 y(MPI_type_struc\(2,)c(zztype,)j
(zzindex,)f(zzblock,)g(Ztype\);)75 992 y(MPI_type_commit\()e(Ztype,)j
(Type2\);)75 1041 y(MPI_send\()f(MPI_bottom,)f(1,)j(Type2,)e(dest,)h(tag,)g
(comm\);)249 1191 y(/*)h(A)f(possibly)f(more)h(efficient)f(way)i(of)f
(defining)f(Zparticles)g(*/)75 1290 y(/*)h(consecutive)f(particles)g(with)h
(index)g(zero)g(are)g(handled)f(as)h(one)h(block)e(*/)75 1340
y(j=0;)75 1390 y(for)h(\(i=0;)g(i)h(<)f(1000;)g(i++\))119 1440
y(if)g(\(particle[i].inde)o(x==0\))d(then)162 1490 y({)162
1539 y(for)j(\(k=i+1;)g(\(k)g(<)h(1000\)&&\(particle)o([k].i)o(ndex)c(==)k
(0\))f(;)h(k++\);)162 1589 y(zindex[j])e(=)i(i;)162 1639 y(zblock[j])e(=)i
(k-i;)162 1689 y(j++;)162 1739 y(i)g(=)f(k;)162 1789 y(})75
1838 y(MPI_type_index\()e(j,)i(Particletype,)e(zindex,)i(zblock,)f
(Zparticles\);)249 1988 y(/*)i(4.3:)f(send)g(the)g(first)g(two)g(coordinates)
e(of)j(all)f(entries)f(*/)75 2087 y(MPI_datatype)f(Allpairs;)129
b(/*)22 b(datatype)e(for)h(all)g(pairs)g(of)g(coordinates)f(*/)75
2137 y(MPI_datatype)f(Type3;)75 2237 y(int)217 b(sizeofentry;)75
2337 y(MPI_extent\()20 b(Particletype,)f(sizeofentry\);)184
2436 y(/*)i(sizeofentry)f(can)h(also)g(be)g(computed)g(by)g(subtracting)e
(the)j(address)249 2486 y(of)g(particle[0])d(from)i(the)g(address)g(of)g
(particle[1])f(*/)75 2586 y(MPI_type_hvector\()e(1000,)j(MPI_real,)f
(sizeofentry,)f(2,)j(Allpairs\);)75 2635 y(MPI_type_commit\()c(Allpairs,)i
(Type3\);)75 2685 y(MPI_send\()g(particle.d,)f(1,)j(Type3,)e(dest,)h(tag,)g
(comm\);)p eop
%%Page: 36 36
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(36)206 95 y Fu(/*)21 b(an)h(alternative)d(solution)h(to)i(4.3)
f(*/)75 195 y(MPI_datatype)e(Onepair;)64 b(/*)21 b(datatype)g(for)g(one)g
(pair)g(of)g(coordinates,)f(with)642 244 y(the)h(extent)f(of)i(one)f
(particle)f(entry)h(*/)75 294 y(MPI_datatype)e(Type4;)75 394
y(int)i(indexp[3];)75 444 y(int)g(typep[3])f(=)i({MPI_lb,)e(MPI_double,)g
(MPI_ub};)75 493 y(int)h(blockp[3])f(=)i({1,)f(2,)g(1};)75
593 y(MPI_address\()e(\(void)i(*\)particle,)f(indexp\);)75
643 y(MPI_address\()f(\(void)i(*\)particle[0].d,)e(indexp+1\);)75
693 y(MPI_address\()g(\(void)i(*\)\(particle+1\),)e(indexp+2\);)75
792 y(MPI_type_struc\()g(3,)i(typep,)g(indexp,)f(blockp,)g(Onepair\);)75
842 y(MPI_commit\()g(Onepair,)g(Type4\);)75 892 y(MPI_send\()g(MPI_bottom,)f
(1000,)i(Type4,)g(dest,)g(tag,)f(comm\);)158 1099 y Fo(Discussion:)158
1145 y Ft(The)13 b(examples)i(carry)e(t)o(w)o(o)f(implicit)k(assumptions)f
(on)f(the)f(w)o(a)o(y)g(padding)i(is)f(done)f(in)h(an)f(arra)o(y)h(of)f
(structures.)158 1191 y(First,)h(that)f(padding)j(is)e(done)g(in)h(the)e
(same)h(w)o(a)o(y)f(in)h(the)g(successiv)o(e)h(arra)o(y)f(en)o(tries,)g(so)g
(that)f(all)i(en)o(tries)f(ha)o(v)o(e)g(an)75 1236 y(iden)o(tical)i(memory)e
(la)o(y)o(out.)20 b(E.g.,)13 b(w)o(e)g(assume)h(that)g(displacemen)o(t)i
(from)d Fm(particle[i)o(].b)d Ft(to)j Fm(particle[j)o(].b)c
Ft(is)15 b(the)75 1282 y(same)e(as)g(the)h(displacemen)o(t)h(from)e
Fm(particle[)o(i].)o(d)d Ft(to)j Fm(particle)o([j])o(.d)p Ft(.)158
1328 y(Second,)g(that)e(the)h(amoun)o(t)g(of)f(padding)j(added)e(is,)g(in)h
(some)e(sense,)h(minimal.)19 b(I.e.,)10 b(if)i(the)g(most)f(stringen)o(t)i
(aligne-)75 1373 y(men)o(t)h(requiremen)o(t)h(for)e(a)h(basic)h(comp)q(onen)o
(t)g(of)e(a)h(structure)g(is)h(alignmen)o(t)h(to)d(m)o(ultiples)j(of)e(2)1511
1357 y Fe(k)1530 1373 y Ft(,)f(then)i(no)f(con)o(tiguous)75
1419 y(padding)h(space)f(has)f(size)h(greater)f(or)g(equal)i(to)e(2)811
1403 y Fe(k)830 1419 y Ft(.)k(This)c(assumption)i(is)f(implicit)i(in)e(the)f
(de\014nition)i(of)e Fo(exten)o(t)p Ft(.)158 1465 y(I)i(don't)g(think)h
(either)g(assumptions)h(are)f(mandated)g(b)o(y)f(C)g(of)f(F)m(ortran)i
(standards,)g(although)h(I)e(w)o(ould)h(b)q(e)f(v)o(ery)75
1510 y(surprised)d(to)d(see)h(an)g(implemen)o(tation)j(that)d(do)q(es)h(not)f
(ful\014l)h(these)f(conditions.)19 b(If)9 b(I)h(am)f(wrong)h(\(e.g.,)g(if)g
(some)g(compilers)75 1556 y(alw)o(a)o(ys)j(align)h(structures)e(to)g(double)i
(w)o(ord)e(b)q(oundaries,)i(ev)o(en)f(if)f(they)g(ha)o(v)o(e)h(no)f(double)i
(w)o(ord)e(comp)q(onen)o(ts\),)h(then)g(the)75 1602 y(de\014nition)j(of)c
Fm(extent)f Ft(should)k(b)q(e)e(revisited.)75 1800 y Fq(1.13.5)49
b(Co)o(rrect)15 b(use)h(of)g(addresses)75 1876 y Fx(Successiv)o(ely)i
(declared)f(v)n(ariables)f(in)g(C)g(or)h(F)m(ortran)f(are)h(not)f
(necessarily)i(stored)f(at)g(con)o(tiguous)f(lo)q(cations.)75
1926 y(Th)o(us,)g(care)g(m)o(ust)f(b)q(e)h(exercised)i(that)e(displacemen)o
(ts)f(do)g(not)h(cross)h(from)d(one)i(v)n(ariable)e(to)i(another.)24
b(Also,)75 1976 y(in)18 b(mac)o(hines)f(with)g(segmen)o(ted)h(address)i
(space,)f(addresses)h(are)f(not)f(unique)g(and)g(address)h(arithmetic)e(has)
75 2026 y(some)e(p)q(eculiar)g(prop)q(erties.)25 b(Th)o(us,)16
b(use)g(of)f Fv(addresses)p Fx(,)f(i.e.)22 b(displacemen)o(ts)15
b(relativ)o(e)h(to)f(the)h(start)h(address)75 2075 y Fu(MPI)p
144 2075 14 2 v 15 w(BOTTOM)p Fx(,)12 b(has)i(to)g(b)q(e)g(restricted.)158
2125 y(V)m(ariables)d(b)q(elong)h(to)g(the)h(same)e Fv(sequen)o(tial)g
(storage)g Fx(if)g(they)h(b)q(elong)g(to)g(the)h(same)e(arra)o(y)m(,)g(to)h
(the)h(same)75 2175 y Fu(COMMON)h Fx(blo)q(c)o(k)i(in)f(F)m(ortran,)g(or)h
(to)f(the)i(same)d(structure)k(in)d(C.)h(V)m(alid)e(addresses)j(are)g
(de\014ned)f(recursiv)o(ely)h(as)75 2225 y(follo)o(ws:)126
2311 y(1.)j(The)15 b(function)f Fu(MPI)p 497 2311 V 15 w(ADDRESS)f
Fx(returns)j(a)e(v)n(alid)f(address,)j(when)f(passed)g(as)g(argumen)o(t)f(a)g
(host)h(program)179 2361 y(v)n(ariable.)126 2442 y(2.)20 b(The)14
b Fu(start)g Fx(parameter)g(of)f(a)h(comm)o(unication)d(function)j(ev)n
(aluates)g(to)g(a)g(v)n(alid)f(address,)i(when)g(passed)179
2492 y(as)f(argumen)o(t)f(a)g(host)h(program)f(v)n(ariable.)126
2573 y(3.)20 b(If)13 b Fu(v)g Fx(is)g(a)g(v)n(alid)e(address,)j(and)f
Fu(i)g Fx(is)g(an)g(in)o(teger,)h(then)g Fu(v+i)e Fx(is)h(a)g(v)n(alid)f
(address,)i(pro)o(vided)f Fu(v)g Fx(and)g Fu(v+i)g Fx(are)179
2623 y(in)g(the)i(same)e(sequen)o(tial)h(storage.)126 2704
y(4.)20 b(If)13 b Fu(v)h Fx(is)g(a)f(v)n(alid)g(address)i(then)f
Fu(MPI)p 744 2704 V 15 w(BOTTOM)21 b(+)h(v)13 b Fx(is)h(a)f(v)n(alid)g
(address.)p eop
%%Page: 37 37
bop 75 -100 a Fr(SECTION)15 b(1.)26 b(POINT)15 b(TO)f(POINT)h(COMMUNICA)m
(TION)736 b Fx(37)158 45 y(A)11 b(correct)h(program)d(uses)i(only)f(v)n(alid)
f(addresses)k(to)d(iden)o(tify)g(the)h(lo)q(cations)f(of)g(en)o(tries)h(in)f
(comm)o(unication)75 95 y(bu\013ers.)20 b(F)m(urthermore,)13
b(if)g Fu(u)h Fx(and)f Fu(v)h Fx(are)g(t)o(w)o(o)g(v)n(alid)e(addresses,)k
(then)e(the)h(\(in)o(teger\))g(di\013erence)g Fu(u)22 b(-)g(v)13
b Fx(can)h(b)q(e)75 145 y(computed)h(only)g(if)g(b)q(oth)h
Fu(u)g Fx(and)g Fu(v)f Fx(are)h(in)g(the)g(same)f(sequen)o(tial)h(storage;)h
(no)f(other)g(arithmetic)f(op)q(erations)75 195 y(can)f(b)q(e)h(meaningfully)
10 b(executed)16 b(on)e(addresses.)158 244 y(W)m(e)c(sa)o(y)h(that)f(a)h
(datat)o(yp)q(e)f(is)h Fv(absolute)d Fx(if)i(all)f(displacemen)o(ts)h(within)
g(this)h(datat)o(yp)q(e)g(are)g(v)n(alid)e(\(absolute\))75
294 y(addresses;)16 b(it)d(is)h Fv(relativ)o(e)d Fx(otherwise.)158
344 y(A)j(correct)i(program)c(ob)q(eys)i(the)h(follo)o(wing)c(constrain)o(ts)
k(in)e(the)i(use)f(of)g(datat)o(yp)q(es:)137 435 y Fn(\017)21
b Fx(If)9 b(the)h Fu(oldtype)d Fx(argumen)o(t)h(used)j(in)d
Fu(MPI)p 828 435 14 2 v 16 w(TYPE)p 932 435 V 14 w(CONTIGUOUS,)20
b(MPI)p 1274 435 V 15 w(TYPE)p 1377 435 V 15 w(VECTOR,)g(MPI)p
1632 435 V 15 w(TYPE)p 1735 435 V 15 w(HVECTOR,)179 485 y(MPI)p
248 485 V 15 w(TYPE)p 351 485 V 15 w(INDEX)12 b Fx(or)i Fu(MPI)p
605 485 V 15 w(TYPE)p 708 485 V 15 w(HINDEX)e Fx(is)h(absolute,)g(then)h(all)
f(addresses)i(within)e(it)g(m)o(ust)g(b)q(e)h(to)f(v)n(ari-)179
535 y(ables)i(con)o(tained)h(within)e(the)i(same)f(arra)o(y)g(or)g
(structure;)j(the)e(result)g(datat)o(yp)q(e)g(is)f(also)g(absolute,)g(and)179
585 y(all)d(computed)i(addresses)i(m)o(ust)d(also)g(fall)f(within)h(the)i
(same)e(arra)o(y)h(or)f(structure.)137 668 y Fn(\017)21 b Fx(If)12
b(all)e(en)o(tries)k(of)d(the)i Fu(array)p 634 668 V 14 w(of)p
692 668 V 16 w(types)e Fx(argumen)o(t)g(of)g Fu(MPI)p 1124
668 V 15 w(TYPE)p 1227 668 V 15 w(STRUC)g Fx(are)i(absolute)f(addresses)i
(\(com-)179 718 y(puted)j(b)o(y)f Fu(MPI)p 428 718 V 15 w(ADDR)p
Fx(\),)f(then)i(the)g(result)g(datat)o(yp)q(e)f(is)h(also)e(absolute.)26
b(Eac)o(h)16 b(new)h(address)g(computed)179 767 y(from)12 b(an)i(old)g
(address)h(m)o(ust)f(fall)e(within)i(the)h(same)e(arra)o(y)h(or)h(record)g
(as)f(the)h(old)f(address.)20 b(\(Addresses)179 817 y(in)13
b(the)i(old)e(t)o(yp)q(e)h(ma)o(y)e(not)i(b)q(e)h(all)d(within)h(the)i(same)e
(arra)o(y)g(or)h(record.\))137 900 y Fn(\017)21 b Fx(If)12
b(a)g(comm)o(unication)e(call)h(is)i(in)o(v)o(ok)o(ed)f(with)g(parameters)h
Fu(start)e Fx(and)i Fu(datatype)p Fx(,)e(then)i(either)g Fu(start)21
b(=)179 950 y(MPI)p 248 950 V 15 w(BOTTOM)12 b Fx(and)i Fu(datatype)e
Fx(is)h(a)h(handle)f(to)h(an)f(absolute)h(datat)o(yp)q(e,)f(or)h
Fu(start)f Fx(is)g(set)i(to)e(the)i(address)179 1000 y(of)e(a)h(program)e(v)n
(ariable,)g(and)i(all)f(displacemen)o(ts)g(in)h Fu(datatype)e
Fx(relativ)o(e)h(to)h(this)g(base)h(yield)e(addresses)179 1050
y(that)h(are)g(within)f(the)i(same)e(arra)o(y)g(or)h(record)h(as)f(this)g(v)n
(ariable.)158 1141 y(In)9 b(summary)m(,)e(the)j(t)o(yp)q(e)g(constructors)h
Fu(MPI)p 847 1141 V 15 w(TYPE)p 950 1141 V 15 w(CONTIGUOUS,)19
b(MPI)p 1292 1141 V 16 w(TYPE)p 1396 1141 V 14 w(VECTOR,)i(MPI)p
1651 1141 V 15 w(TYPE)p 1754 1141 V 15 w(HVECTOR,)75 1191 y(MPI)p
144 1191 V 15 w(TYPE)p 247 1191 V 15 w(INDEX)12 b Fx(and)i
Fu(MPI)p 531 1191 V 15 w(TYPE)p 634 1191 V 15 w(HINDEX)e Fx(can)i(b)q(e)g
(recursiv)o(ely)g(applied)f(to)h(build)f(datat)o(yp)q(es)h(that)f(will)f
(com-)75 1241 y(bine)i(v)n(ariables)f(that)h(b)q(elong)g(to)g(the)h(same)e
(sequen)o(tial)h(storage;)g(v)n(ariables)f(that)h(do)g(not)g(b)q(elong)f(to)h
(the)h(same)75 1290 y(sequen)o(tial)f(storage)g(can)g(b)q(e)h(com)o(bined)e
(together)h(using)g(one)g(application)f(of)g Fu(MPI)p 1410
1290 V 15 w(TYPE)p 1513 1290 V 15 w(STRUC)p Fx(.)158 1419 y
Fo(Discussion:)158 1464 y Ft(It)e(is)i(not)f(exp)q(ected)h(that)f(MPI)g
(implemen)o(tations)j(will)e(b)q(e)g(able)g(to)e(detect)h(erroneous,)h(\\out)
g(of)e(b)q(ound")j(displace-)75 1510 y(men)o(ts)h({)g(unless)i(those)f(o)o(v)
o(er\015o)o(w)f(the)h(user)f(address)h(space)g({)f(since)h(the)g(MPI)f(call)h
(ma)o(y)g(not)f(no)o(w)g(the)g(exten)o(t)h(of)f(the)75 1556
y(arra)o(ys)f(and)f(records)h(in)g(the)f(host)g(program.)75
1776 y Fw(1.14)59 b(Universal)20 b(comm)m(unica)o(tion)d(functions)75
1867 y Fx(Although)11 b(the)i(n)o(um)o(b)q(er)e(of)g(comm)o(unicati)o(on)e
(functions)j(de\014ned)h(in)e(this)h(c)o(hapter)g(is)g(fairly)e(large,)i(it)f
(is)h(p)q(ossible)75 1916 y(to)k(construct)j(all)c(of)h(them)g(from)f(a)h(m)o
(uc)o(h)g(smaller)f(n)o(um)o(b)q(er)h(of)g(primitiv)o(e)e(functions.)26
b(The)17 b(construction)h(is)75 1966 y(outlined)c(in)g(this)h(section.)20
b(The)15 b(construction)h(can)f(b)q(e)g(used)g(to)g(build)e(a)i(p)q(ortable)f
(implemen)o(tation)d(of)j(MPI,)75 2016 y(although)j(it)g(is)g(exp)q(ected)i
(that)f(more)e(e\016cien)o(t)i(implemen)o(tation)c(will)i(implemen)o(t)f
(directly)j(most)e(or)h(all)g(of)75 2066 y(the)e(functions)f(in)g(this)h
(section.)20 b(Also,)14 b(this)g(construction)i(can)e(b)q(e)h(used)g(in)f
(order)h(to)g(deriv)o(e)f(the)h(b)q(eha)o(vior)g(of)75 2116
y(MPI)i(p)q(oin)o(t)f(to)h(p)q(oin)o(t)f(comm)o(unicatio)o(n)e(from)h(the)i
(b)q(eha)o(vior)g(of)f(a)g(small)e(subset)19 b(of)d(functions.)26
b(W)m(e)16 b(assume)75 2166 y(the)e(a)o(v)n(ailabili)o(t)o(y)c(of)j(the)h
(primitiv)o(e)d(functions)i(listed)g(at)g(the)h(end)g(of)f(the)g(section,)h
(and)f(the)h(abilit)o(y)d(to)i(allo)q(cate)75 2215 y(memory)e(for)j(new)g(v)n
(ariables.)158 2265 y(W)m(e)d(assume)f(that)h(the)h(function)f
Fu(MPI)p 752 2265 V 15 w(TYPE)p 855 2265 V 15 w(COMMIT)f Fx(is)g(not)h(c)o
(hanging)g(the)g(represen)o(tation)i(of)d(a)h(datat)o(yp)q(e,)75
2315 y(but)j(merely)f(creates)j(a)d(new)i(cop)o(y)f(of)f(it.)158
2365 y(Comm)o(uni)o(cation)i(with)j(a)f Fu(count)g Fx(argumen)o(t)g(that)h
(is)g Fj(>)h Fx(1)e(can)i(b)q(e)f(reduced)i(to)e(comm)o(unicatio)o(n)d(with)
75 2415 y Fu(count)21 b(=1)p Fx(,)d(b)o(y)g(replicating)g(the)h
Fu(datatype)e Fx(argumen)o(t)g Fu(count)g Fx(times.)31 b(Comm)o(uni)o(cation)
15 b(with)j(a)g Fu(a)k(start)75 2464 y Fx(argumen)o(t)14 b(that)i(is)f(not)g
Fu(MPI)p 541 2464 V 15 w(BOTTOM)f Fx(can)i(b)q(e)g(reduced)h(to)e(comm)o
(unicatio)o(n)e(with)i Fu(start)20 b(=)i(MPI)p 1673 2464 V
15 w(BOTTOM)14 b Fx(b)o(y)75 2514 y(creating)g(a)g(suitable)g(displaced)g
(new)g(datat)o(yp)q(e.)k(Th)o(us:)158 2564 y Fu(MPI)p 227 2564
V 15 w(SEND\()j(start,)f(count,)h(datatype,)f(dest,)h(tag,)g(comm\))12
b Fx(is)75 2647 y Fu(Type[1])20 b(=)i(datatype)75 2697 y(MPI_ADDRESS\()d
(start,)i(Index[1]\);)p eop
%%Page: 38 38
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(38)75 45 y Fu(Block[1])20 b(=)i(count;)75 95
y(MPI_TYPE_STRUCT\()c(1,)k(Type,)f(Index,)f(Block,)h(Newtype\))75
145 y(MPI_TYPE_COMMIT\()d(Newtype,)j(datatype1\))75 195 y(MPI_SEND\()f
(MPI_BOTTOM,)f(1,)j(datatype1,)e(dest,)g(tag,)h(comm\))158
264 y Fx(The)13 b(same)e(construction)i(applies)f(to)g(all)f(other)i(comm)o
(unicatio)o(n)d(functions)i(with)g(argumen)o(ts)f Fu(count)g
Fx(and)75 314 y Fu(datatype)p Fx(.)19 b(W)m(e)14 b(shall)g(henceforth)i
(restrict)g(ourselv)o(es)g(to)e(comm)o(unication)d(that)k(in)o(v)o(olv)o(es)f
(only)g(one)g(elemen)o(t)75 364 y(with)g(an)f(absolute)h(address)h(\()p
Fu(count)21 b(=1)p Fx(,)13 b(and)h Fu(start)21 b(=)g(MPI)p
1079 364 14 2 v 15 w(BOTTOM)p Fx(\).)158 413 y(\(If)15 b(the)h(op)q(eration)f
Fu(MPI)p 546 413 V 15 w(TYPE)p 649 413 V 15 w(COMMIT\))f Fx(is)h(not)h
(assumed)f(to)g(b)q(e)h(trivial,)e(then)i(the)g(ab)q(o)o(v)o(e)f
(construction)75 463 y(cannot)h(b)q(e)h(used;)h(this)e(adds)h(one)f(more)f
(primitiv)o(e)f(function,)i(namely)f Fu(MPI)p 1322 463 V 15
w(TYPE)p 1425 463 V 15 w(COMMIT)p Fx(,)f(to)i(our)g(list,)g(and)75
513 y(in)o(tro)q(duces)f(small)d(c)o(hanges)i(in)g(the)g(construction.\))158
563 y(It)j(is)h(con)o(v)o(enien)o(t)f(to)g(to)h(mak)o(e)d(explicit)i(the)h
Fv(p)q(ersistence)d Fx(attribute)j(of)e(comm)o(unication)e(ob)r(jects.)30
b(A)75 613 y Fu(persistent)16 b Fx(comm)o(unicatio)o(n)f(ob)r(ject)k(need)g
(b)q(e)g(explicitly)e(deallo)q(cated)h(b)o(y)g(a)f Fu(MPI)p
1471 613 V 16 w(COMM)p 1575 613 V 14 w(FREE)h Fx(op)q(eration.)75
662 y(On)d(the)h(other)f(hand,)g(an)f Fu(ephemeral)f Fx(comm)o(unication)f
(ob)r(ject)k(is)e(go)q(o)q(d)h(for)f(a)h(single)g(comm)o(uni)o(cation.)j(It)d
(is)75 712 y(deallo)q(cated)f(b)o(y)g(the)g(system)g(when)g(the)h(\014rst)f
(comm)o(unication)d(it)i(is)h(used)h(for)e(completes.)158 762
y(The)h(function)g Fu(MPI)p 475 762 V 15 w(COMM)p 578 762 V
15 w(INIT)f Fx(is)g(a)h(univ)o(ersal)f(function)h(for)f(the)i(creation)f(of)f
(comm)o(unicatio)o(n)e(ob)r(jects:)75 859 y Fu(MPI)p 144 859
V 15 w(COMM)p 247 859 V 15 w(INIT\(handle,)19 b(datatype,)h(source-dest,)f
(tag,)i(comm,)g(op-mode,)f(persistence\))117 909 y Ft(out)14
b Fu(handle)629 b Ft(handle)14 b(to)f(newly)h(created)g(comm)o(unication)h
(ob)r(ject)117 951 y(in)f Fu(datatype)609 b Ft(datat)o(yp)q(e)14
b(of)f(elemen)o(t)g(sen)o(t)h(or)f(receiv)o(ed)117 993 y(in)h
Fu(source-dest)543 b Ft(rank)13 b(of)g(destination)j(or)d(source)g(\(in)o
(teger\))117 1036 y(in)h Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))
117 1078 y(in)g Fu(comm)697 b Ft(comm)o(unication)15 b(ob)r(ject)117
1120 y(in)f Fu(op-mode)631 b Ft(one)19 b(of)g Fm(MPI)p 1135
1120 12 2 v 13 w(STANDARD)p Ft(,)d Fm(MPI)p 1395 1120 V 13
w(READY)p Ft(,)g Fm(MPI)p 1595 1120 V 13 w(SYNCHRONOU)o(S)g
Ft(or)905 1170 y Fm(MPI)p 967 1170 V 13 w(RECV)117 1212 y Ft(in)e
Fu(persistence)543 b Ft(one)13 b(of)g Fm(MPI)p 1123 1212 V
13 w(PERSISTEN)o(T)d Ft(or)j Fm(MPI)p 1452 1212 V 13 w(EPHEMERAL)158
1289 y Fx(The)h(comm)o(unication)d(in)o(v)o(olv)o(es)i(only)g(one)h(elemen)o
(t,)f(with)g(an)h(absolute)g(address.)75 1402 y Fq(1.14.1)49
b(P)o(ersistent)14 b(comm)o(unication)g(objects)75 1479 y Fu(MPI)p
144 1479 14 2 v 15 w(CREATE)p 291 1479 V 15 w(SEND\(handle,)19
b(MPI)p 655 1479 V 15 w(BOTTOM,)h(1,)i(datatype,)e(dest,)g(tag,)h(comm\))13
b Fx(is)75 1553 y Fu(MPI_COMM_INIT\(han)o(dle,)18 b(datatype,)i(dest,)h(tag,)
g(comm,)g(MPI_STANDARD,)e(MPI_PERSISTENT\))158 1627 y Fx(The)14
b(functions)g Fu(MPI)p 491 1627 V 15 w(CREATE)p 638 1627 V
15 w(RSEND)p Fx(,)e Fu(MPI)p 853 1627 V 15 w(CREATE)p 1000
1627 V 14 w(RSEND)h Fx(and)h Fu(MPI)p 1284 1627 V 15 w(CREATE)p
1431 1627 V 14 w(RECV)f Fx(are)h(dealt)g(in)f(a)h(sim-)75 1677
y(ilar)f(manner.)158 1727 y(The)h(functions)g Fu(MPI)p 491
1727 V 15 w(START)f Fx(and)h Fu(MPI)p 776 1727 V 15 w(COMM)p
879 1727 V 15 w(FREE)f Fx(are)h(primitiv)o(e.)75 1840 y Fq(1.14.2)49
b(Nonblo)q(cking)19 b(comm)n(unication)14 b(initiation)75 1917
y Fu(MPI)p 144 1917 V 15 w(ISEND\(handle,)19 b(MPI)p 530 1917
V 15 w(BOTTOM,)i(1,)g(datatype,)f(dest,)h(tag,)g(comm\))12
b Fx(is)75 1991 y Fu(MPI_COMM_INIT\(han)o(dle,)18 b(datatype,)i(dest,)h(tag,)
g(comm,)g(MPI_STANDARD,)e(MPI_EPHEMERAL\))75 2041 y(MPI_START\(handle\))158
2115 y Fx(The)14 b(functions)g Fu(MPI)p 491 2115 V 15 w(IRSEND)p
Fx(,)f Fu(MPI)p 729 2115 V 15 w(ISSEND)f Fx(and)i Fu(MPI)p
1035 2115 V 15 w(IRECV)f Fx(are)h(handled)g(in)f(a)h(similar)d(manner.)75
2228 y Fq(1.14.3)49 b(Comm)o(unication)14 b(completion)75 2305
y Fx(The)g(t)o(w)o(o)g(primitiv)o(e)d(completion)i(op)q(erations)h(are)g
Fu(MPI)p 969 2305 V 15 w(WAITANY)e Fx(and)i Fu(MPI)p 1297 2305
V 15 w(TESTALL)p Fx(.)158 2355 y(The)c(function)f Fu(MPI)p
466 2355 V 15 w(WAIT)f Fx(can)i(b)q(e)g(implemen)o(ted)d(b)o(y)i(a)g(call)g
(to)g Fu(MPI)p 1209 2355 V 15 w(WAITANY)f Fx(with)h(an)g Fu(array-of-handles)
75 2405 y Fx(argumen)o(t)k(of)g(length)h(one.)158 2455 y(The)j(function)e
Fu(MPI)p 479 2455 V 15 w(WAITALL)g Fx(can)h(b)q(e)h(implemen)o(ted)d(as)i(a)g
(lo)q(op)f(where)j(an)d Fu(MPI)p 1479 2455 V 15 w(WAIT)h Fx(call)f(is)h
(executed)75 2504 y(for)e(eac)o(h)g(successiv)o(e)i(handle)e(in)f(the)i
Fu(array-of-handles)o Fx(.)158 2554 y(The)d(function)e Fu(MPI)p
469 2554 V 15 w(TEST)h Fx(can)g(b)q(e)g(implemen)o(ted)e(b)o(y)i(a)g(call)f
(to)h Fu(MPI)p 1226 2554 V 15 w(TESTALL)f Fx(with)g(an)h Fu(array-ofhandles)
75 2604 y Fx(of)i(length)h(one.)158 2654 y(The)j(function)e
Fu(MPI)p 479 2654 V 15 w(TESTALL)g Fx(can)h(b)q(e)h(implemen)o(ted)d(as)i(a)g
(lo)q(op)f(where)j(an)d Fu(MPI)p 1479 2654 V 15 w(TEST)h Fx(call)f(is)h
(executed)75 2704 y(for)e(eac)o(h)g(successiv)o(e)i(handle)e(in)f(the)i
Fu(array-of-handle)p Fx(.)p eop
%%Page: 39 39
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(39)75 45 y Fq(1.14.4)49 b(Blo)q(cking)18 b(comm)o(unication)75
122 y Fu(MPI)p 144 122 14 2 v 15 w(SEND\(MPI)p 335 122 V 14
w(BOTTOM,)i(1,)i(datatype,)e(dest,)h(tag,)f(comm\))13 b Fx(is)75
210 y Fu(MPI_COMM_INIT\(han)o(dle,)18 b(datatype,)i(dest,)h(tag,)g(comm,)g
(MPI_STANDARD,)e(MPI_EPHEMERAL\))75 260 y(MPI_START\(handle\))75
309 y(MPI_WAIT\(handle,)f(dontcarestatus\))158 398 y Fx(The)c(functions)g
Fu(MPI)p 491 398 V 15 w(RSEND)f Fx(and)h Fu(MPI)p 776 398 V
15 w(SSEND)f Fx(are)h(handled)g(in)f(a)h(similar)d(manner.)158
447 y Fu(MPI)p 227 447 V 15 w(RECV\(MPI)p 418 447 V 14 w(BOTTOM,)20
b(1,)i(datatype,)e(source,)g(tag,)h(comm\))13 b Fx(is)75 535
y Fu(MPI_COMM_INIT\(han)o(dle,)18 b(datatype,)i(dest,)h(tag,)g(comm,)g
(MPI_RECV,)f(MPI_EPHEMERAL\))75 585 y(MPI_START\(handle\))75
635 y(MPI_WAIT\(handle,)e(status\))75 751 y Fq(1.14.5)49 b(Prob)q(e)17
b(and)f(cancel)75 827 y Fx(The)e(functions)g Fu(MPI)p 408 827
V 15 w(PROBE)f Fx(and)h Fu(MPI)p 693 827 V 15 w(CANCEL)f Fx(are)h(primitiv)o
(e.)75 943 y Fq(1.14.6)49 b(Return)16 b(status)75 1020 y Fx(The)e(functions)g
Fu(MPI)p 408 1020 V 15 w(GET)p 489 1020 V 15 w(SOURCE)p Fx(,)e
Fu(MPI)p 726 1020 V 15 w(GET)p 807 1020 V 15 w(TAG)p Fx(,)g
Fu(MPI)p 978 1020 V 15 w(GET)p 1059 1020 V 15 w(LEN)p Fx(,)h
Fu(MPI)p 1231 1020 V 15 w(PROBE)p 1356 1020 V 15 w(LEN)p Fx(,)f(and)i
Fu(MPI)p 1608 1020 V 15 w(IS)p 1667 1020 V 15 w(CANCELLED)75
1069 y Fx(are)g(primitiv)o(e.)158 1119 y(These)h(functions)f(are)g(simple)f
(macros)g(that)h(access)h(records)h(in)d(a)h(structure.)75
1235 y Fq(1.14.7)49 b(send-receive)15 b(and)i(exchange)75 1311
y Fu(MPI)p 144 1311 V 15 w(SENDRECV\()j(send)p 465 1311 V 15
w(start,)g(send)p 720 1311 V 15 w(count,)h(send)p 976 1311
V 15 w(type,)f(dest,)h(recv)p 1340 1311 V 15 w(start,)g(recv)p
1596 1311 V 14 w(count,)g(recv)p 1851 1311 V 15 w(type,)75
1361 y(source,)f(tag,)h(comm,)g(status\))12 b Fx(is)75 1449
y Fu(MPI_ISEND\(handle[)o(0],)19 b(send_start,)g(send_count,)h(send_type,)f
(dest,)i(tag,)g(comm\))75 1499 y(MPI_IRECV\(handle[)o(1],)e(recv_start,)g
(recv_count,)h(recv_type,)f(source,)i(tag,)g(comm\))75 1549
y(MPI_WAITALL\(2,)e(handle,)h(status_array\))75 1599 y(status)h(=)g
(status_array[1])158 1687 y Fx(The)14 b(non)o(blo)q(c)o(king)f(sends)i(and)f
(receiv)o(es)h(can)f(b)q(e)h(replaced)g(b)o(y)f(their)g(primitiv)o(e)d
(implemen)o(tation.)158 1737 y(The)17 b(function)f Fu(MPI)p
480 1737 V 15 w(EXCHANGE)e Fx(can)i(b)q(e)h(handled)f(in)g(a)g(similar)e
(manner;)i(a)g(temp)q(orary)f(bu\013er)i(need)g(b)q(e)75 1787
y(allo)q(cated)d(to)g(replicate)h(the)g(send)g(and)f(receiv)o(e)i(bu\013er.)
21 b(A)14 b(size)h(for)f(this)g(bu\013er)i(can)e(b)q(e)h(computed)f(using)g
(the)75 1836 y(function)g Fu(MPI)p 307 1836 V 15 w(TYPE)p 410
1836 V 15 w(EXTENT)p Fx(.)75 1952 y Fq(1.14.8)49 b(Derived)16
b(datat)o(yp)q(es)75 2029 y Fx(W)m(e)22 b(ha)o(v)o(e)g(outlined)f(in)h
(Section)g(1.13.1)f(ho)o(w)g(eac)o(h)i(datat)o(yp)q(e)f(constructor)i(can)e
(b)q(e)h(expressed)i(in)c(terms)75 2078 y(of)f(the)h(next)h(one.)38
b(Th)o(us)21 b(all)f(datat)o(yp)q(e)g(constructors)j(can)e(b)q(e)g(expressed)
i(in)e(terms)f(of)g(the)h(constructor)75 2128 y Fu(MPI)p 144
2128 V 15 w(TYPE)p 247 2128 V 15 w(STRUC)p Fx(;)12 b(the)j(functions)f
Fu(MPI)p 713 2128 V 15 w(TYPE)p 816 2128 V 15 w(FREE)p Fx(,)e
Fu(MPI)p 1009 2128 V 15 w(TYPE)p 1112 2128 V 15 w(EXTENT)h
Fx(and)g Fu(MPI)p 1418 2128 V 16 w(ADDRESS)f Fx(are)i(primitiv)o(e.)75
2244 y Fq(1.14.9)49 b(Summ)o(a)o(r)o(y)75 2321 y Fx(In)13 b(order)h(to)f
(implemen)o(t)e(the)j(MPI)f(p)q(oin)o(t-to-p)q(oin)o(t)f(comm)o(unication)e
(one)k(needs)g(16)f(functions;)g(ab)q(out)g(half)g(of)75 2370
y(those)i(are)f(trivial)e(macros:)126 2458 y(1.)20 b Fu(MPI)p
248 2458 V 15 w(COMM)p 351 2458 V 15 w(INIT)126 2540 y Fx(2.)g
Fu(MPI)p 248 2540 V 15 w(START)126 2622 y Fx(3.)g Fu(MPI)p
248 2622 V 15 w(WAITALL)126 2704 y Fx(4.)g Fu(MPI)p 248 2704
V 15 w(TESTANY)p eop
%%Page: 40 40
bop 75 -100 a Fr(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(40)126 45 y(5.)20 b Fu(MPI)p 248 45 14 2 v 15
w(PROBE)126 128 y Fx(6.)g Fu(MPI)p 248 128 V 15 w(CANCEL)126
211 y Fx(7.)g Fu(MPI)p 248 211 V 15 w(GET)p 329 211 V 15 w(SOURCE)126
294 y Fx(8.)g Fu(MPI)p 248 294 V 15 w(GET)p 329 294 V 15 w(TAG)126
377 y Fx(9.)g Fu(MPI)p 248 377 V 15 w(GET)p 329 377 V 15 w(LEN)105
460 y Fx(10.)g Fu(MPI)p 248 460 V 15 w(PROBE)p 373 460 V 15
w(LEN)105 543 y Fx(11.)g Fu(MPI)p 248 543 V 15 w(IS)p 307 543
V 15 w(CANCELLED)105 626 y Fx(12.)g Fu(MPI)p 248 626 V 15 w(TYPE)p
351 626 V 15 w(STRUC)105 709 y Fx(13.)g Fu(MPI)p 248 709 V
15 w(TYPE)p 351 709 V 15 w(EXTENT)105 792 y Fx(14.)g Fu(MPI)p
248 792 V 15 w(ADDRESS)105 875 y Fx(15.)g Fu(MPI)p 248 875
V 15 w(TYPE)p 351 875 V 15 w(FREE)105 958 y Fx(16.)g Fu(MPI)p
248 958 V 15 w(COMM)p 351 958 V 15 w(FREE)158 1050 y Fx(On)13
b(the)h(other)g(hand,)e(w)o(e)i(exp)q(ect)g(most)e(implemen)o(tations)e(to)j
(use)h(more)e(primitiv)o(es,)f(in)i(order)g(to)g(reduce)75
1099 y(comm)o(unication)d(o)o(v)o(erheads,)15 b(reduce)g(bu\013ering,)f(and)g
(impro)o(v)o(e)e(error)j(rep)q(orting.)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF