From: "Marc Snir" <[email-masked]>
Date: Fri, 23 Jul 93 18:41:33 EDT

%!PS-Adobe-2.0
%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
%%Title: PT2PT-V6.DVI.*
%%Pages: 38 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 1 111 df<EA38F8EA7DFCEACF0C12CE120CEA1C181218EB1980EB3300EA303F131C11
0B7F8A13>110 D E /Ff 2 50 df<121FEA3F80EA60C0EA4040EAC060A8EA60C0A2EA3F80EA1F
000B107F8F0F>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 6 116 df<120313801300C7FCA4121C123E126612C612CC120CA25AEA19801231EA33
00123F121C091480930C>105 D<1360137013601300A4EA0380EA07C0EA0CE0EA18C0A21200A2
EA0180A4EA0300A4126612EE12FC12780C1A81930E>I<123EA2120CA45A137013F0EA19B8EA32
70EA3C301300123E1267EA6318A21330EAC3F0EAC1C00D147E9312>I<EA387CEA7CFEEA6F86EA
CF0612CE120E120CEA1C0C001813C01318EB1980EA301FEB0E00120D808C15>110
D<EA38E0EA7DF0EA6F30EACE701330EA0C00A25AA45AA20C0D808C0F>114
D<1207EA1F80EA19C0EA3180EA3000121E121FEA0380124112E1EAC30012FE127C0A0D7E8C10>
I E /Fi 3 62 df<EA0FC0EA1FE0EA3870EA7038EA6018EAE01CA9EA6018EA7038EA3870EA1FE0
EA0FC00E137F9211>48 D<1206121E12FE12EE120EADEAFFE0A20B137D9211>I<387FFFE0B512
F0C8FCA6B512F06C13E0140A7E8B19>61 D E /Fj 22 123 df<127012F8A3127005057D840C>
58 D<127012F012F8A212781218A31230A2127012601240050D7D840C>I<12E01278121EEA0780
EA01E0EA0078131EEB0780EB01E0EB0078141EEC0780A2EC1E001478EB01E0EB0780011EC7FC13
78EA01E0EA0780001EC8FC127812E019187D9520>62 D<48B512804814E039003C01F0EC007815
3C151C5B151EA35BA44848133CA3153848481378157015F0EC01E039078003C0EC0780EC0F0014
7CB55A14C01F1C7E9B22>68 D<001FB512F0A2383C07800038146012701260EB0F0012C0A3D800
1E1300A45BA45BA45BA4387FFF80A21C1C7F9B18>84 D<EBF180EA03FBEA0F0F121E383C070012
381278A2EAF00EA31420EB1C60A2EA703CEBFCC0EA3FCF380F078013127F9116>97
D<123F5A120F120EA45AA4EA39E0EA3FF8EA3E38EA3C1C1278EA701EA3EAE03CA3133813781370
13E0EA71C0EA3F80EA1E000F1D7E9C12>I<EB03F01307130014E0A4EB01C0A4EBF380EA03FBEA
0F0F121E383C070012381278A2EAF00EA31420EB1C60A2EA703CEBFCC0EA3FCF380F0780141D7F
9C16>100 D<13F8EA03FEEA0F06121E123C1238EA781CEA7FF8EAFFE0EAF000A4EA7004130EEA
383CEA1FF0EA0FC00F127F9113>I<EB01E0EB07F0EB0E7814F0EB1C601400A3133C1338A23803
FFC01480380038005BA55BA5485AA5485AA30063C7FC12F712F612FC127815257E9C14>I<13E0
1201A2EA00C01300A6120EEA1F8012331263124312C3EA0700A2120EA3EA1C201360A2EA38E013
C0EA1F80EA0F000B1C7F9B0E>105 D<1307130FA213061300A613F0EA01FCEA031C1206A2120C
1200A21338A41370A413E0A4EA01C01261EAF380EAF70012FE127C1024809B11>I<EA1F80123F
12071300A4120EA45AA45AA45AA3127212E6A4127C1238091D7E9C0C>108
D<381C0F80383F3FC0386770E013C0EAC780A2EA0700A2380E01C0A3EB0384001C138CA2EB071C
1418383803F0381801E016127F9119>110 D<13FCEA03FF38078780380E03C0EA1C0112381278
A2EAF003A3EB0780A2EB0F00EA701E6C5AEA1FF0EA0FC012127F9114>I<380707C0380FCFE038
19D870EBF038EA31E013C00001133CA238038078A31470380700F0EB80E0EB81C0EBC380380EFF
00137C90C7FCA25AA4B47EA2161A819115>I<EA01F0EA03FCEA070CEA0E1EEA1C3C1318EA1E00
EA1FE0EA0FF0EA07F8EA0078EA203CEA703812F01330EAE0F0EA7FE0EA1F800F127E9113>115
D<13C01201A3EA0380A4EAFFF0A2EA0700A2120EA45AA31310EA3830A2136013C0EA1F80EA0F00
0C1A80990F>I<000E1360381F80E012331263384381C012C3EA0701A2380E0380A31488EB0718
A2130FEB1F303807F3F03803E1E015127F9118>I<EA0F87381FDFC0EA38F8EA60F113E312C038
00E180EBE000485AA30071134038F380C0A238E3818038C7C300EA7CFEEA387C12127E9118>
120 D<000E1360381F80E012331263384381C012C3EA0701A2380E0380A4EB0700A25B5BEA07FE
EA03EEEA000E5B1230EA78381330EA70E0EA3FC06CC7FC131A7F9114>I<3801E180EA07F1380F
FF00EA0C1EEA180CC65A5B5B5B485A48C7FCEA0601485A1218EA3F0EEA7FFCEA61F8EAC0F01112
7F9113>I E /Fk 2 4 df<B512C0A212027D871A>0 D<12041206A2EAC660EAF7E0EA3F80EA1F
00EA3F80EAF7E0EAC660EA0600A212040B0D7E8D11>3 D E /Fl 18 118
df<B51280A300F0C7FCAAB5FCA300F0C7FCAD111D7C9C18>70 D<133F3801FFE0487F3807C0F8
380F807C381E001E003E131F003C7F48EB0780A348EB03C0A86C130700781480A2007C130F003C
1400003E5B6C133E6C6C5A6C6C5A6CB45A6C5BD8003FC7FC1A1F7E9D1F>79
D<EAFFFC13FF148038F007C0EB03E01301EB00F0A5EB01E01303EB07C0B51280140013FC00F0C7
FCAC141D7C9C1B>I<EAFFF813FF148038F007C0EB01E0130014F0A414E01301EB07C0B5128014
0013F8EAF03C131C131E7FA2EB0780A2EB03C0A2EB01E0EB00F0A21478151D7C9C1B>82
D<EA0FC0EA3FF0EA7FF8EA7038EA401C1200A213FC120F123FEA781C12E0A3EAF07CEA7FFC13DC
EA3F1C0E127E9114>97 D<EA07E0EA0FF8EA1FFCEA3C1CEA700413005AA612701304EA3C1CEA1F
FCEA0FF8EA07E00E127E9112>99 D<130EABEA0F8EEA1FEEEA3FFEEA7C3EEA700EA212E0A612F0
EA701EEA7C3EEA3FFEEA1FEEEA0F8E0F1D7E9C15>I<EA07C0EA1FE0EA3FF0EA7878EA7018EA60
1CEAFFFCA3EAE000A312701304EA3C1CEA3FFCEA1FF8EA07E00E127E9112>I<3803C3C0EA0FFF
5A381C3800487EA56C5AEA1FF85BEA3BC00038C7FCA2EA1FFC13FF481380EA700738E001C0A3EA
F003387C0F80383FFF006C5AEA07F8121B7F9115>103 D<12F0A41200A71270B2041D7E9C0A>
105 D<12E0B3AB031D7D9C0A>108 D<38E3F03F39EFF8FF80D8FFFD13C039F81F81E038F00F00
EAE00EAD1B127D9124>I<EAE3E0EAEFF0EAFFF8EAF83CEAF01C12E0AD0E127D9115>I<EA03F0EA
0FFC487EEA3C0F38780780EA700338E001C0A5EAF00300701380EA7807383C0F00EA1FFE6C5AEA
03F012127F9115>I<EAE38012E712EFEAFC005A5AA25AAB09127D910E>114
D<EA1FC0EA3FF0127FEAF030EAE000A27E127FEA3FC0EA1FE0EA00F01338A21280EAF078EAFFF0
EA7FE0EA1FC00D127F9110>I<121CA6EAFFE0A3EA1C00AB1320EA1FF0120FEA07C00C187F970F>
I<EAE01CAE137CEAFFFCEA7FDCEA3F1C0E127D9115>I E /Fm 42 122 df<1238127C127EA212
3E121EA2127C12F81260070A7A8414>44 D<EA0FC0EA3FF0EA7FF8EAF07C131EA2130E12601200
131E131C133C137813F0EA01E0EA03C0EA0780EA1F00EA3C0E1278EAFFFEA30F177E9614>50
D<13F8120113B81203EA0738A2120F120E121C123C1238127812F0B51280A338003800A43803FF
80A311177F9614>52 D<127012F8A312701200A6127012F8A312700510798F14>58
D<EA01C0487EA21360A2EA0770A4EA0630EA0E38A5EA1FFCA3EA1C1CEA3C1E38FE3F80A311177F
9614>65 D<EAFFF813FE7FEA1C0FEB0380A4EB0700133FEA1FFEA27FEA1C07EB0380A41307EB0F
00B5FC5B5B1117809614>I<EA03C6EA0FFE121FEA3E3EEA3C1EEA780E127012F0EAE000A7EAF0
0E12701278EA3C1EEA3E3CEA1FF8EA0FF0EA03C00F177E9614>I<EAFFE013F87FEA383E131E7F
7FA2EB0380A7130714005B131E133EEAFFFC5B13E011177F9614>I<B51280A3EA1C03A490C7FC
1338A2EA1FF8A3EA1C38A290C7FCEB01C0A4B5FCA31217809614>I<EA03C6EA0FFE121FEA3E3E
EA3C1EEA780E127012F048C7FCA4EB7F80A338F00E001270EA781E123CEA3E3EEA1FFE120FEA03
CE11177F9614>71 D<38FE3F80A338380E00A7EA3FFEA3EA380EA738FE3F80A311177F9614>I<
EAFFFEA3EA0380B1EAFFFEA30F177E9614>I<EAFFC0A3001CC7FCADEB0380A4B5FCA311177F96
14>76 D<38FE0FE0A3383B1B80A413BBA2EA39B3A313F3EA38E3A21303A538FE0FE0A313178096
14>I<38FE3F80A3383B0E00A4138E1239A213CEA31238A213EE136EA4EAFE3EA311177F9614>I<
EA1FF0EA7FFCA2EA701CEAF01EEAE00EADEAF01EEA783CEA7FFCA2EA1FF00F177E9614>I<EAFF
F813FE7FEA1C0FEB07801303A41307EB0F00EA1FFF5B13F8001CC7FCA6B47EA31117809614>I<
EAFFE07F7FEA383C7F130EA3131E5BEA3FF85B7FEA383C131CA41480EB1DC0EAFE1F130FEB0700
12177F9614>82 D<EA0FCCEA3FFC127FEAF87CEAF03CEAE01CA2EAF000A2127EEA3FE0EA0FF8EA
01FCEA003C131E130E12E0A2EAF01EEAF83CEAFFFC13F8EAC7E00F177E9614>I<B51280A3EAE1
C3A43801C000ADEA0FF8A311177F9614>I<38FF8FF8A3381C01C0AEEA1E03000E1380EA0F0738
07FF006C5AEA00F81517819614>I<38FE3F80A338380E00A26C5AA56C5AA4EA0630EA0770A3EA
0360A213E0A26C5A11177F9614>I<EAFE7FA3EA1E38EA0E78EA0F70EA07F05B12035B12011203
7FA2EA0770A2EA0E781338EA1C3C131C38FE3F80A311177F9614>88 D<38FE3F80A3383C1E00EA
1C1CEA1E3CEA0E38A26C5AA2EA036013E0A26C5AA7EA07F0A311177F9614>I<EA1FC0EA7FF07F
EA783CEA301CEA00FC120F123FEA7F1C12F012E0133CEAF07C387FFF80A2EA1F8F11107E8F14>
97 D<12FCA3121CA413FCEA1FFE7FEB0780EA1E03001C13C01301A4EA1E03EB0780EA1F0FEBFF
005BEA1CF81217809614>I<EA03F0EA0FFC123FEA7C3CEA7818EAF0005AA4EAF00E1278EA7E1E
EA3FFCEA0FF8EA03E00F107E8F14>I<137EA3130EA4EA07CEEA1FFE123FEA7C3EEA781EEAF00E
12E0A4EAF01EEA703EEA787E383FFFC0EA1FEFEA078F12177F9614>I<EA07E0EA1FF8EA3FFCEA
7C3CEA781EEAF00EEAFFFEA3EAE000EAF00E1278EA7E1EEA3FFCEA0FF8EA03E00F107E8F14>I<
133C13FE1201EA03DE138C1380A2EAFFFEA3EA0380AAEA7FFCA30F177F9614>I<EA07CF381FFF
805A387C7F00EA783CEA701CA2EA783CEA7C7CEA3FF8485AEA77C00078C7FCEA3FF813FE487E38
F00F80EAE0071303A2EAF00738780F00EA3FFE6C5AEA07F011197F8F14>I<12FCA3121CA413F8
EA1FFE7F130FEA1E07121CA838FF9FE0A31317809614>I<1203EA0780A2EA0300C7FCA4EAFF80
A31203AAEAFFFEA30F187D9714>I<EAFF80A31203B1EAFFFEA30F177E9614>108
D<EAFCF8EAFFFE7FEA1F0FEA1E07121CA838FF9FE0A31310808F14>110
D<EA07C0EA1FF0EA3FF8EA783CEA701CEAF01EEAE00EA4EAF01EEA701CEA7C7CEA3FF8EA1FF0EA
07C00F107E8F14>I<EAFCFCB47E7F381F0780EA1E03001C13C01301A4EA1E03EB0780EA1F0FEB
FF005BEA1CF890C7FCA5B47EA31218808F14>I<38FF1F80EB7FC013FF3807E080EBC0005BA290
C7FCA6EAFFFCA31210808F14>114 D<EA0FD8EA3FF812FFEAF03812E0EAF000EA7F80EA3FF0EA
07FCEA003EEAE00EA2EAF01EEAFFFC13F8EACFE00F107E8F14>I<1207A5EAFFFCA3EA0700A613
0EA3139E13FCEA03F8EA00E00F157F9414>I<EAFC3FA3EA1C07A95B381FFFE07EEA07E7131080
8F14>I<38FF3F80A3381C1C00A2120E5BA212071330A2EA0370A26C5AA35BA3EA7B80127F90C7
FC127E123C11187F8F14>121 D E /Fn 6 104 df<B61280A219027D8A20>0
D<127012F8A3127005057D8C0C>I<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA
1FF8EA07E010107E9115>15 D<00C01306B36C130E0060130C0070131C6C1338381F01F03807FF
C03800FE00171A7E981C>91 D<131F137F13F0EA01E013C0ADEA0380EA070012FE12F812FE1207
EA0380EA01C0AD13E0EA00F0137F131F10297E9E15>102 D<12F8B4FCEA0F80EA03C01201ADEA
00E013F0133F131F133F13F013E0EA01C0AD1203EA0F80EAFF0012F810297E9E15>I
E /Fo 35 122 df<127012F812FCA3127C120CA21218A2123012701220060D7D850C>44
D<127812FCA4127806067D850C>46 D<127812FCA412781200A5127812FCA4127806117D900C>
58 D<1303497EA3497EA2497EA3EB33F0A2EB63F81361EBE1FC13C0A248487E13FF487FEB003F
A20006EB1F80A2000E14C039FFC0FFFCA21E1A7F9921>65 D<90381FE0209038FFF8E03803F80F
3807C003381F800190C7FC123E007E1460127C12FC1500A61560127C127E003E14C07E90388001
803907C003003803F80E3800FFFCEB1FE01B1A7E9920>67 D<B512F014FC380FC03FEC0F80EC07
C0EC03E0A2EC01F0A215F8A815F0A2140315E0EC07C0EC0F80EC3F00B512FE14F01D1A7E9922>
I<B512FEA2380FC03E140E140614078013C3A291C7FC13C713FFA213C713C3A2EC018013C0EC03
00A35C5C143EB512FEA2191A7E991D>I<B512FCA2380FC03C141C140C140E1406A213C31400A2
13C713FFA213C713C3A313C0A6EAFFFEA2171A7E991C>I<EAFFFCA2EA0FC0B3A4EAFFFCA20E1A
7F9911>73 D<EAFFFEA2EA0FC0AE140CA3141CA21438147814F8B5FCA2161A7E991B>76
D<D8FFC0EB1FF86D133F000F1580A2D80DF0136FA2D80CF813CFA290387C018FA390383E030FA2
EB1F06A2EB0F8CA3EB07D8A2EB03F0A2EB01E0A2D8FFC1EBFFF8EBC0C0251A7E992A>I<39FFE0
0FFCA2390FF000C07FEA0DFCEA0CFE137E7F1480EB1FC0EB0FE01307EB03F014F8EB01FCEB00FE
147E143FA2141F140F14071403A238FFC00114001E1A7E9923>I<B512E014F8380FC07E808015
80A515005C147EEBFFF814E001C0C7FCA9EAFFFCA2191A7E991E>80 D<007FB51280A238783F07
007013030060130100E014C000C01300A300001400AF380FFFFCA21A1A7E991F>84
D<EA0FF0EA1FFCEA3E3E131E131F121C1200EA07FF121FEA7E1F127C12F8A3EA7C3F383FEFE0EA
0F8713117F9015>97 D<B4FCA2121FA7133FEBFFC0EBC1F013001478147CA61478A214F0EBC3E0
381CFFC038183F00161A7F9919>I<EA03FCEA0FFEEA1E1F123C127CEA780E00F8C7FCA5127812
7C383C0180381F0300EA0FFEEA03F811117F9014>I<EB1FE0A21303A7EA03F3EA0FFFEA1E07EA
3C031278A212F8A61278123CEA3E0F380FFFFCEA03F3161A7F9919>I<EA03F0EA0FFCEA1E1E48
7E487E148012F8B5FCA200F8C7FCA21278127C383C0180381F0300EA0FFEEA03F811117F9014>
I<137E48B4FC3803CF80EA078F120FEB87001380A3EAFFF0A2EA0F80ADEA7FF0A2111A80990E>
I<3807E3C0381FFFE0EA3C3C38381CC038781E00A4EA381CEA3C3CEA3FF8EA37E00070C7FCA2EA
3FFEEBFF806C13C0127F38F003E01301A3387C07C0383FFF803807FC0013197F9016>I<B4FCA2
121FA7131FEB7FC013C3EB83E0A21303AA38FFE7FCA2161A7F9919>I<121E123FA4121EC7FCA4
127FA2121FADEAFFC0A20A1B809A0C>I<B4FCA2121FB3A4EAFFE0A20B1A80990C>108
D<39FF1F81F890387FE7FE391FE3EE3E903881F81FA2EB01F0AA3AFFE7FE7FE0A223117F9026>
I<EAFF1FEB7FC0EA1FC3EB83E0A21303AA38FFE7FCA216117F9019>I<EA03F8EA0FFE383E0F80
EA3C07387803C0A200F813E0A6007813C0EA7C07383E0F80380FFE00EA03F813117F9016>I<EA
FF3FEBFFC0381FC3F0130014F8147CA6147814F814F0EBC3E0EBFFC0EB3F0090C7FCA5EAFFE0A2
16187F9019>I<EAFE7813FCEA1FBE133EA2131C1300A9EAFFE0A20F117F9012>114
D<EA1FB0EA3FF0EA7070EAE030A2EAF800EAFFC0EA7FF0EA3FF8EA1FFC1201EAC03C131C12E0EA
F038EAFFF0EACFC00E117F9011>I<1203A35AA25A123FEAFFF0A2EA1F00A81318A5EA0FF0EA03
E00D187F9711>I<38FF1FE0A2EA1F03AB1307130F380FFFFCEA03F316117F9019>I<38FF83F0A2
381F0180A21383000F130013C7EA07C6A2EA03ECA2EA01F8A36C5AA2136014117F9017>I<39FF
9FF1F8A2393F07C0E0001F14C014E0EB8DE1000F148014F13907D8F30014FBEBF8FF3803F07EA2
3801E03CA33800C0181D117F9020>I<38FF83F0A2381F0180A21383000F130013C7EA07C6A2EA
03ECA2EA01F8A36C5AA21360A2EA70C012F8EAC18012C3007FC7FC123C14187F9017>121
D E /Fp 17 122 df<EA03CCEA07FCEA0E7CEA183CEA383812301270A2EAE070A3137113E3A212
E1EA63E6EA7E7CEA3C3810127B9115>97 D<123F5A120F120EA45AA4EA39C0EA3FE0EA3E70EA38
30EA78381270A3EAE070A3136013E013C012E1EA6380EA7F00123C0D1D7B9C13>I<EA01E0EA07
F8EA0E18121C123812701370EA7FE0EAFF80EAE000A41310EA6038EA70F0EA3FC0EA1F000D127B
9113>101 D<EB03C0EB07E0EB0CF0EB1DE0EB1CC014005BA53803FF805A38007000A45BA5485A
A5485AA448C7FC126712F612FE5A12781425819C0D>I<EB798013FFEA01CFEA03070007130012
06120EA2EA1C0EA45BA2133CEA0C7CEA0FF8EA07B8EA0038A25B1260EAF0E012F1EAFF806CC7FC
111A7E9113>I<13C0EA01E013C01380C7FCA6120E123FEA33801263EAC700A21207120EA35A13
40EA38C0A3EA3980EA3F00121E0B1C7D9B0D>105 D<EA0FC0121F12031380A4EA0700A4EA0E0E
131F13331367EA1CCFEA1D8FEA1F061300EA3F80EA39C0EA38E013E1EA70E3A313E6EAE07CEA60
38101D7D9C13>107 D<EA1F80123F12071300A4120EA45AA45AA45AA3127212E6A4127C123809
1D7C9C0B>I<391E1F07C0393F3F8FE0396761D8703863C1F038C781E0A2380701C0A2390E0380
E0A3EC81C2391C0701C6A2EC038CA239380E01F839180600F01F127D9122>I<EA1E1EEA3F7F38
67E380EA63C3EAC78313031207A2380E0700A3EB0E10001C1330A2EB1C60A238380FC038180780
14127D9117>I<EA01E0EA07F8EA0E1C121CEA380CEA300E1270A2EAE01CA31338A213701360EA
71C0EA3F80EA1E000F127B9115>I<EA1E3CEA3F7EEA67C3EA6387EAC78F130FEA07061300120E
A45AA45A121810127D9112>114 D<EA01F0EA07F8EA0E18133CEA1C781330EA1E00EA1FC0EA0F
E0EA07F01200EA2078EA707012F0A2EAE0E0EA7FC0EA1F000E127D9111>I<13C01201A3EA0380
A4EAFFE0A2EA0700A2120EA45AA31320EA3860A213C0A2EA1F80EA0F000B1A7D990E>I<EA0F03
EA1F871233EA6383A212C3EA0703A2EA0E06A31304130C121CEA0E181330EA07E0EA03C010127D
9113>118 D<EA0F1EEA1FBFEA31E3EA61E713CF12C1EA01C613C0EA0380A3EA7381EAF703A2EA
E706EACF8EEA7DFCEA70F010127D9113>120 D<380F0180EA1F8312331263EB870012C3EA0707
A2EA0E0EA4EA0C1C121C120CEA0E3CEA0FF81203EA0038A2EA3070EA786013E0EA71C0EA3F8000
1EC7FC111A7D9114>I E /Fq 13 86 df<1230127812F81278127005057D840C>46
D<13181370EA03F0120FEA1C701200A213E0A6EA01C0A6EA0380A61207EAFFF8A20D1C7C9B15>
49 D<14301470A214F0801301A2EB0378A21306147CEB0C3CA21318A21330A2497EA2EBFFFEA2
3801801EA23803001F801206120F397FC0FFF012FF1C1D7F9C1F>65 D<903807F030EB1FFC9038
7C0E603901F003E0EA03C038078001EA0F00000E1300001E14C05AA25A1500A25AA5EC0180EC03
001270127814066C5B001C131C000F5B3807C0E06CB45AD8007EC7FC1C1E7C9C1E>67
D<000FB512E0A23800F003EC01C01400A33801E060A31500EBE1E013FF485B13C113C0A215C0EC
C18038078001A2EC0300A25C140E380F003EB512FE5C1B1C7E9B1C>69 D<380FFF80A23800F000
A5485AA6485AA6485AA6120FEAFFF8A2111C7F9B0F>73 D<D80FFCEB0FFCA20000EC1F80A21537
13DE1567D8019EEB6F0015CFA2EC018F138FEC030FD8030F131E1406A2EB078CA2149800065C14
B0A2EB03E0A214C0001E147C3AFFE387FFC001C31480261C7E9B26>77 D<390FF80FFEA23900FC
01E0EC00C0A213DEA239018F0180A214811387A2EB83C1390303C300EB01E3A3EB00F3A2000613
7EA2143EA3141E001E131C38FFE00C13C01F1C7E9B1F>I<EB07F0EB3FFCEBF81E3801E0073903
C00380D8070013C0481301001E14E0121C003C13001238007814F0A348EB01E0A4EC03C0A30070
EB0780007814005C6C131E5C6C5B380F83E03803FF80C648C7FC1C1E7C9C20>I<380FFFFC14FF
3900F00F80140315C01401A23801E003A315801407EC0F003803C03EEBFFF814E001C0C7FCA348
5AA6120FEAFFF85B1A1C7E9B1C>I<EB3F0CEBFFCC3801C1F838030078481338120EA3001E1330
1400A26C7E13F86CB4FC6C13806C13C038003FE0130313011300A21260A3EB01C0127038F80380
38FE0F00EACFFEEA83F8161E7E9C17>83 D<001FB512F05A383C07810038EB806012701260A2EB
0F0012C0A200001400A3131EA65BA6137C381FFFE0A21C1C7C9B1E>I<39FFF8FFE0A2390F001E
00140CA4001E5BA6485BA6485BA300385BA2383C0180D81C03C7FCEA0E0EEA07FCEA01F01B1D7A
9B1F>I E /Fr 10 58 df<121EEA7F801261EAC0C0A7EA6180127FEA1E000A0D7E8C0E>48
D<121812F8A21218A812FFA2080D7D8C0E>I<123EEA7F80EAC1C012C01200A2EA0180EA030012
0EEA18C01270EAFF80A20A0D7E8C0E>I<123E127FEA618012011203EA1F00A2EA0180EA00C012
C012C1EA7F80EA3E000A0D7E8C0E>I<12075AA2121B1233127312E3EAFFC0A2EA0300A2EA1FC0
A20A0D7E8C0E>I<EA4080127FEA7E001260A2127F1380EA60C01200A212C1EA7F80EA3E000A0D
7E8C0E>I<120FEA1F801231EA60005AEAFF80A2EAC0C0A31261EA3F80EA1E000A0D7E8C0E>I<12
60EA7FE0A2EAC0C0EAC180EA03001206A35AA50B0E7E8D0E>I<121E123FEA6180A21273EA3F00
A2EA6380EAC0C0A212E1EA7F80EA3F000A0D7E8C0E>I<121E127FEAE180EAC0C0A3127FA21200
EA01801263EA7F00123C0A0D7E8C0E>I E /Fs 46 122 df<EAFFE0A30B037F8C10>45
D<12F0A404047B830E>I<13C01201120712FFA212FB1203B3A7B5FCA310227CA118>49
D<EA03F0EA0FFC487EEA3C1F38380780007013C0130300F013E0EAE001126012201200A3EB03C0
A2EB0780A2EB0F00131E5B5B5B485A5B485A48C7FC120E5A5A5AB512E0A313227EA118>I<EA01
F0EA07FCEA1FFFEA3E0F38380780387003C01220A21200A3EB0780A2EB0F00131EEA03FC5B13FE
EA000FEB0780EB03C0A2EB01E0A5128038C003C012E038700780EA3C0F381FFF00EA0FFCEA03F0
13237EA118>I<131FA2132FA2136F13EF13CF1201A2EA038FA21207130F120F120E121E123CA2
1278A212F0B512F8A338000F00A915217FA018>I<383FFF80A3003CC7FCA913F8EA3FFE7FEB0F
80EA3E07383C03C01238380001E0A7384003C0A212E038700780387C1F00EA3FFEEA0FFCEA03F0
13227EA018>I<137E48B4FC5AEA07C148C7FC121EA25AA25AA213F8EAF3FEEAF7FF38FF0F80EA
FC0738F803C0A2130100F013E0A51270A21278EB03C01238003C1380EA1C07381F0F00EA0FFE6C
5AEA01F013237EA118>I<B512E0A3EA0001EB03C014801307EB0F00130E131E131C133C133813
78A25BA25B1201A3485AA5485AA713217EA018>I<EA01F0EA07FC487EEA1E0F383C0780A23878
03C0A500381380EA3C07381E0F00EA0F1EEA07FC6C5AEA0FFEEA1E0F383C0780387803C0A238F0
01E0A6387803C0A2383C0780EA3E0F381FFF00EA07FCEA01F013237EA118>I<EA01F0EA07FC48
7EEA1E0F487E00381380EA780314C012F0130114E0A6EA70031278A2EA3C07EA3E1FEA1FFDEA0F
F93803E3C0EA0003A21480130714005BEA101EEA183CEA3FF86C5AEA07C013237EA118>I<131F
A2497EA2133BEB7BC013731371EBF1E0A213E000017FA213C000031378A2138000077FA2130048
7FA2EBFFFE487FA2381C000F003CEB0780A212380078EB03C0A2127000F0EB01E0A25A1B237EA2
20>65 D<EAFFFCEBFF8014C038F007F01301EB0078143CA51438147814F0EB03E0B512C0140014
C038F00FE0EB01F8EB0078143C141C141EA5143C147C14F8EB03F0B512E014C0EBFE0017237BA2
20>I<EB0FF0EB7FFC90B5FC3801F01F3803C0073807800248C8FC121E123E123CA25AA35AA912
78A37EA2123E121E6C1480380780013803C0033801F00F6CB51200EB7FFCEB0FF019257DA31F>
I<EAFFFEEBFFC08038F003F0EB00F8147C80141E80A2EC0780A3EC03C0A915801407A3EC0F005C
141E5C14FCEB03F8B512E05C49C7FC1A237BA223>I<B512F0A300F0C7FCACB512E0A300F0C7FC
AEB512F8A315237BA21D>I<00FC147E6C14FEA300F7EB01DEA3EB800300F3149EA2EBC007A200
F1141EA2EBE00F00F0130EA2EBF01EA2EB701CEB783CA2EB3838EB3C78A2EB1C70A2EB1EF0EB0E
E0A2130FEB07C0A390C7FC1F237BA22A>77 D<00FC131E7EA312F7A2EAF380A213C012F1A213E0
12F013F0A21378A21338133CA2131EA2130E130F1307A2149E1303A2EB01DEA2EB00FEA3147E17
237BA222>I<EB1FC0EB7FF03801FFFC3803F07E3807C01F390F800F80391F0007C0001E130348
EB01E0A248EB00F0A30070147000F01478A9007814F0A3007C1301003C14E0003E1303001E14C0
001F1307390F800F803907C01F003803F07E6CB45A38007FF0EB1FC01D257DA324>I<EAFFFEEB
FF8014C038F003E0EB00F01478A2143CA61478A214F0EB03E0B512C01480EBFE0000F0C7FCAF16
237BA21F>I<EAFFFCEBFF8014C038F003E0EB00F014781438143CA51438147814F0EB03E0B512
C01480EBFE00EAF01E7F7F1480130314C0EB01E0A2EB00F0A214781438143C141EA2140F18237B
A21F>82 D<13FF000313C04813F0EA0F83EA1E0048132014005AA5127C123C123FEA1FC0EA0FFC
6CB4FC0001138038003FC0EB07E0EB01F0130014F81478A5124000E013F07E38F801E0387F07C0
383FFF80000F1300EA01FC15257EA31B>I<00F0133CB3A900781378A36C13F0381E01E0EA1F87
380FFFC000031300EA00FC16247BA221>85 D<EA07E0EA1FF8EA3FFCEA3C1E1230EA200F1200A3
EA01FF120F123FEA7F0F127812F0A312F8EA7C3FEA7FFF7EEA1F8F10167E9517>97
D<12F0ADEAF1F0EAF7FCB47EEAFC1F487E38F00780A2EB03C0A8EB0780A238F80F00EAFC3EEAFF
FEEAF7F8EAF3F012237CA219>I<EA01FCEA07FF481380EA1F07EA3C0148C7FCA2127012F0A612
78A214406C13C0EA1F07EA0FFF6C13803801FC0012167E9516>I<EB03C0ADEA03F3EA0FFF5AEA
3F0FEA3C07EA7803A212F0A81278A2EA3C07EA3E0FEA1FFFEA0FFBEA03E312237EA219>I<EA03
F0EA07FCEA1FFEEA3E0F383C0780EA7803A238F001C0B5FCA300F0C7FCA312701278A26C1380EA
1F07EA0FFF6C1300EA01F812167E9516>I<133F13FF5AEA03C113801207A8EAFFF8A3EA0780B3
102380A20F>I<3801F0F8EA07FF5A381F1F80381E0F00383C0780A5381E0F00EA1F1F13FE5BEA
39F00038C7FCA2123CEA3FFE381FFFC014E04813F0EA780138F800F8481378A4007813F0383E03
E0381FFFC06C13803801FC0015217F9518>I<12F0ADEAF1F8EAF7FCEAFFFEEAFE1EEAF80FA212
F0B010237CA219>I<12F0A41200A912F0B3A404237DA20B>I<13F0A41300A913F0B3A91280EAE3
E012FFEA7FC0EA1F000C2D83A20D>I<12F0ADEB1F80EB3F00133E5B5BEAF1F0EAF3E0EAF7C012
FFA27FA2EAFDF0EAF8F8EAF078137C7F131E131F7F1480EB07C012237CA218>I<12F0B3B10423
7DA20B>I<39F0F807C039F3FE1FF0B5EA7FF839FE0FF07800FCEBE07C39F807C03CA200F01380
AF1E167C9529>I<EAF1F8EAF7FCEAFFFEEAFE1EEAF80FA212F0B010167C9519>I<EA01FCEA07FF
481380381F07C0383C01E0387800F0A20070137000F01378A6007813F0A2EA7C01383E03E0381F
07C0380FFF806C1300EA01FC15167F9518>I<EAF1F0EAF7FCB47EEAFC3FEAF80F38F00780A214
C01303A613071480130F00F81300EAFC3EEAFFFEEAF7F8EAF3F000F0C7FCAA12207C9519>I<EA
F0E012F312F712FF130012FC5AA25AAE0B167C9511>114 D<EA07F0EA1FFEEA3FFFEA3C0FEA78
031300A2127C123F13F0EA1FF8EA0FFCEA01FEEA001F130FA2124012E0EAF81EEAFFFEEA3FFCEA
0FF010167F9513>I<120FA6EAFFF8A3EA0F00AE1308131CEA07FC13F8EA03E00E1C7F9B12>I<EA
F00FB1131FEAF83FEA7FFF13EFEA1F8F10167C9519>I<38F001E0A2387803C0A3383C0780A300
1E13005BA2EA0F0E131EA2EA071C139C13BCEA03B8A213F86C5AA213167F9516>I<387801F000
7C13E0383E03C0EA1E07000F138038078F0013DEEA03FC12016C5A137013F8487EEA03DC139EEA
078F380F0780121EEB03C0383C01E0387800F000F813F81516809516>120
D<38F001E0A2387803C0A2127C383C0780A2121E14005B120F130EEA071E139EEA039CA3EA0198
13D8EA00F85BA35BA212015BA2EA4380127F90C7FC127E13207F9516>I
E /Ft 68 124 df<EB7C3C3801FEFE38038FCF38070F8F000E1306EB0700A5B512F0A2380E0700
AC387F0FF0A2181A809916>11 D<137CEA01FEEA0387485A120E130690C7FCA4B5FCA2EA0E07AC
387F0FE0A2131A809915>I<137F485AEA038FEA070FEA0E07A6B5FCA2EA0E07AC387F9FE0A213
1A809915>I<90383E0F803901FF7FC0390383F0E0380707C1000E138190380380C01500A4B612
E0A2380E0380AC397F8FE3FCA21E1A809920>I<EA60C0EAF1E0EAF9F01278EA1830A3EA3060EA
70E0EAE1C0EA40800C0B7F9913>34 D<126012F012F812781218A31230127012E01240050B7D99
0B>39 D<13C0EA0180EA03001206120E120C5A1238A212301270A21260A212E0AA1260A21270A2
12301238A212187E120E12067EEA0180EA00C00A267E9B0F>I<12C012607E7E121C120C7E1207
A27E1380A21201A213C0AA1380A21203A213005AA212065A121C12185A5A5A0A267E9B0F>I<12
6012F0A212701230A31260A212C01240040B7D830B>44 D<EAFFC0A30A0380880D>I<126012F0
A2126004047D830B>I<130CA2131C1318A213381330A213701360A213E013C0A212011380A212
0313005A1206A2120E120CA2121C1218A212381230A212701260A212E05AA20E257E9B13>I<EA
0780EA1FE0EA3870EA3030EA7038EA6018A2EAE01CACEA6018A2EA7038EA3030EA3870EA1FE0EA
07800E1A7E9813>I<12035AB4FCA21207B3EAFFF0A20C197D9813>I<EA0F80EA1FE0EA30F0EA60
78EAF038EAF83CA2131C1270EA003CA213381370A213E0EA01C0EA0380EA0700EA0E0C120C1218
EA3018EA7FF812FFA20E197E9813>I<EA0F80EA1FE0EA38F0EA7070EA7878133813781230EA00
70A213E0EA0FC01380EA00E013701338133CA2127012F8A2EAF038EA6078EA70F0EA3FE0EA0F80
0E1A7E9813>I<1370A213F0A21201120313701206A2120C121C12181230A2126012E0B5FCA2EA
0070A5EA07FFA210197F9813>I<126012F0A212601200A8126012F0A2126004107D8F0B>58
D<126012F0A212601200A8126012F0A212701230A31260A212C0124004177D8F0B>I<B61280A2
C9FCA6B61280A2190A7E8D1E>61 D<EA1F80EA3FE0EA7070EAE03812F0A21260EA007013E0EA01
C0EA03801300A21206A5C7FCA41206120FA212060D1A7E9912>63 D<130C131EA3133FA3497E13
67A3EBC3C0A3380181E0A348B47EA2130000061378A3487F121E39FF81FFC0A21A1B7F9A1D>65
D<B5128014E0380F00F01478143CA5147814F0EBFFE0A2EB01F0EB0078143C141EA5143CA214F8
B512F014C0171A7F991B>I<EB3F023801FFC63803E0EE3807003E000E131E5A003C130E123800
781306127012F01400A61406127012781238003C130C121C6C13186C13303803E0E03801FFC038
003F00171C7E9A1C>I<B57E14E0380F00F014388080A2140F801580A81500A25C140E5C143C14
F8B512E01480191A7F991D>I<B512F8A2380F007814381418141C140C1303A214005B13FFA213
077FA214061300140CA3141CA21478B512F8A2171A7F991A>I<B512F0A2EA0F00147014301438
1418A213061400A2130E13FEA2130E1306A390C7FCA6EAFFF8A2151A7F9919>I<EB3F023801FF
C63803E0EE3807003E000E131E5A003C130E123800781306127012F091C7FCA5903803FFC0A239
70001E0012781238123C121C7E3807803E3803E0763801FFE2D8003FC7FC1A1C7E9A1E>I<39FF
F3FFC0A2390F003C00A9EBFFFCA2EB003CAB39FFF3FFC0A21A1A7F991D>I<EAFFF0A2EA0F00B3
A4EAFFF0A20C1A7F990E>I<39FF8001FF6D5A000F14F0A2380DE006A3380CF00CA3EB7818A3EB
3C30A3EB1E60A3EB0FC0A3EB0780121E39FFC78FFFEBC30F201A7F9923>77
D<B4EBFFC07F000FEB1E00EBC00CEA0DE0A2EA0CF013F81378133C133E131E130FA2EB078CEB03
CCA2EB01ECEB00FCA2147CA2143C001E131CEAFFC0140C1A1A7F991D>I<137F3801FFC03807C1
F0380F0078001E7F001C131C487F0078130FA200707F00F01480A80078EB0F00A36C131E001C13
1C001E133C6C5B3807C1F03801FFC06C6CC7FC191C7E9A1E>I<B5128014E0380F00F014781438
143CA51438147814F0EBFFE0148090C7FCA9EAFFF0A2161A7F991A>I<EAFFFEEBFFC0380F01E0
6D7E14701478A4147014F0495AEBFFC05CEB03C06D7E6D7EA615C0A238FFF078EC3F80C7EA0F00
1A1B7F991C>82 D<EA07C2EA1FF6EA383EEA701EEA600E12E01306A3EAF0001278EA7F80EA3FF0
EA1FF8EA0FFCEA01FEEA001E130F130712C0A312E01306EAF00EEAFC1CEACFF8EA83E0101C7E9A
15>I<007FB5FCA238781E0F00601303A200E0148000C01301A3000090C7FCAF3803FFF0A2191A
7F991C>I<39FFF0FFC0A2390F001E00140CB17E6D5A12036D5A3801E0E038007FC0011FC7FC1A
1B7F991D>I<3AFFC7FF1FF0A23A1E00F803C091387801806CEC0300A214FC5DD807801306EB81
9EA2D803C15B13C3140F01E3131C000114189038E60798A2D800F613B001FE13F0EBFC03017C5B
A2EB7801A201385BEB3000241B7F9927>87 D<39FFE01FF0A2390F800F00000713066C6C5A13E0
00015BEBF038000013306D5A137CEB3CC0133F6D5AA26DC7FCA9EBFFF0A21C1A80991D>89
D<EA1020EA3870EA70E0EA60C0EAC180A3EAF1E0EAF9F01278EA30600C0B7B9913>92
D<EA3F80EAFFC0EAF0E0137012601200EA0FF0123FEA787012E0A21373A2EA70F3EA7FFEEA3E3C
10107E8F13>97 D<12FCA2121CA813F8EA1FFE130F381C0380A2EB01C0A6EB0380A2381F0F00EA
1BFEEA18F8121A7F9915>I<EA07F0EA0FFCEA3C3C1230EA7018EAE000A61270EA380CEA3C18EA
0FF8EA07E00E107F8F11>I<137EA2130EA8EA07CEEA1FFEEA3C1EEA700EA212E0A61270131EEA
3C3E381FFFC0EA07CF121A7F9915>I<EA07C0EA1FF0EA3838EA7018131CEAFFFCA2EAE000A412
70EA300CEA3C18EA0FF0EA07E00E107F8F11>I<13F8EA01FCEA03BCEA073CEA0E181300A5EAFF
C0A2EA0E00ACEA7FE0A20E1A80990C>I<130EEA079FEA1FF7EA3877EA7038A5EA3870EA3FE0EA
7780EA7000A2EA3FF013FC13FEEA700FEAE007A3EA700EEA781EEA1FF8EA07E010197F9013>I<
12FCA2121CA813F8EA1FFC131EEA1E0E121CAA38FF9FC0A2121A7F9915>I<1218123CA21218C7
FCA612FCA2121CACEAFF80A2091A80990A>I<13C0EA01E0A2EA00C01300A6EA07E0A21200B012
6012F0EAF1C0EA7F80EA3E000B2183990C>I<12FCA2121CA8EB7F80A2EB3C0013305B5B121DEA
1FE0121EEA1C70137813387F131E38FF3FC0A2121A7F9914>I<12FCA2121CB3A4EAFF80A2091A
80990A>I<38FCFC3F39FDFE7F80391F0FC3C0381E0781001C1301AA39FF9FE7F8A21D107F8F20>
I<EAFCF8B47EEA1F1EEA1E0E121CAA38FF9FC0A212107F8F15>I<EA07E0EA1FF8EA381CEA700E
EA6006EAE007A6EA700EA2EA3C3CEA1FF8EA07E010107F8F13>I<EAFCF8EAFFFEEA1F0F381C07
801303EB01C0A6EB03801307381F0F0013FEEA1CF890C7FCA5B47EA212177F8F15>I<EA07C6EA
1FF6EA3C3EEA781EEA700E12E0A61270EA781EEA3C3EEA1FEEEA07CEEA000EA5EB7FC0A212177F
8F14>I<EAFDE0EAFFF0EA1F70EA1E20EA1C00AAEAFFC0A20C107F8F0F>I<EA1F20EA7FE01270EA
E060A2EAF000127FEA3FC0EA1FE0EA01F0EAC070A212E0EAF0E0EAFFC0EA8F800C107F8F0F>I<
120CA4121CA2123CEAFFC0A2EA1C00A71360A5EA0FC0EA07800B177F960F>I<EAFC7EA2EA1C0E
AA131E133E380FFFC0EA07CF12107F8F15>I<38FF3F80A2381C0E00130CA26C5AA21338EA0730
A213F06C5AA26C5AA311107F8F14>I<39FF3F9F80A239381E0E00381C3E0C13361337000E5B13
631498000713B013C114F0A2380380E0A319107F8F1C>I<387F1FC0A2380E1E00EA071CEA03B8
13B0EA01E012007F1201EA03B8EA071C1206EA0E0E38FF1FE0A21310808F14>I<38FF3F80A238
1C0E00130CA26C5AA21338EA0730A213F06C5AA26C5AA35BA2126100F3C7FC12C712FE12781117
7F8F14>I<EA7FF8A2EA7070EA60E0126113C0EA63801207EA0F18120E121CEA3C38EA3830EA70
70EAFFF0A20D107F8F11>I<B512C0A21202808A13>I E /Fu 78 126 df<126012F0AF12601200
A4126012F0A212600419779816>33 D<EA03C0487E120FEA1EF0EA1C70A3EBF7E013E7121D381F
C7006C5A130E121FEA3F1EEA7F9CEAF3BCEAE3F812E1EBF1C012E0EAF1F9EA7FFF383F9F80381F
0F0013197F9816>38 D<13E01201EA07C013005A121E5A123812781270A312F05AA77E1270A312
781238123C7E7E7E13C0EA01E012000B217A9C16>40 D<12E07E127C121C121E7EEA0780120313
C01201A313E01200A7120113C0A3120313801207EA0F00121E121C127C12F05A0B217C9C16>I<
EA01C0A4EA71C738F9CF80387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38F9CF803871C700EA01C0
A411127E9516>I<EA01C0A8B51280A33801C000A811137E9516>I<1238127C127EA2123E120E12
1E123C127C12F81260070B798416>I<B51280A311037E8D16>I<127012F8A312700505788416>
I<EB01801303130714005B130E131E131C133C13381378137013F05B12015BA212035B120790C7
FC5A120E121E121C123C12381278127012F05AA211207E9C16>I<EA03E0EA0FF8487EEA1E3CEA
380EEA780FEA7007A238E00380A8EAF00700701300A2EA780FEA3C1E6C5AEA1FFC6C5AEA03E011
197E9816>I<EA018012031207A2121F127F12FF12731203AEEA7FF813FC13F80E197C9816>I<EA
07E0EA1FF8EA7FFEEA783FEAF00FEB07801303A21200A2130714005B131E5B5B5BEA03E0EA0780
48C7FC381E0380123CEA7FFFB5FC7E11197E9816>I<EA07E0EA1FFCEA7FFEEA781F7F7F12005B
A2133EEA07FC5B7FEA001E130714801303A212F013071400EAF81FEA7FFE6C5AEA07E011197E98
16>I<137C13FC13DC1201EA039CA2EA071C120F120E121E123C1238127812F0B512E0A338001C
00A53801FFC0A313197F9816>I<EA3FFEA30038C7FCA7EA3FF013FC7FEA3C0FEA300700001380
1303126012F01307EB0F006C5AEA7FFEEA1FF8EA07E011197E9816>I<13F8EA03FEEA0FFFEA1F
0F123E123CEA78060070C7FC12F0EAF7F8EAFFFEA2EAF80F38F00780A2EAE00312F0A21270EA78
07EB0F006C5AEA1FFEEA0FF8EA03E011197E9816>I<12E0B51280A338E00F00131EC65A133813
78137013F05B12015B12035BA3120790C7FCA7111A7E9916>I<EA03E0EA0FF8EA3FFCEA7C1EEA
780F487E12E01480A21303EAF007A2EA780FEA3FFFA2EA0FF3EA00071400EA300FEA780E131E13
7CEA7FF8EA3FE0EA0F8011197E9816>57 D<127012F8A312701200A8127012F8A3127005127891
16>I<1238127CA312381200A81238127CA3123C121C123C123812F812F012600618799116>I<EB
03801307131FEB3E0013FCEA03F0485AEA1F80003EC7FC12FC12F012FC123E6C7EEA07E06C7EEA
00FC133EEB1F801307130311157E9616>I<EA7FFFB51280A2C8FCA5B51280A26C1300110B7E91
16>I<13E0487EA213B0A2EA03B8A31318EA071CA5EA0E0EA2EA0FFEA2487EEA1C07A3387F1FC0
00FF13E0007F13C013197F9816>65 D<EA7FF8EAFFFE6C7EEA1C0FEB07801303A313071400EA1F
FF5BA2EA1C1FEB038014C01301A41303EB0780EA7FFFB51200EA7FFC12197F9816>I<3801F180
EA07FF5AEA1F0FEA3C0712781303127000F0C7FC5AA77E387003801278A2EA3C07381F0F00EA0F
FE6C5AEA01F011197E9816>I<EA7FF8EAFFFE6C7EEA1C0FEB0780EB03C01301A214E01300A8EB
01C0A21303EB0780130F387FFF00485AEA7FF81319809816>I<387FFFC0B5FC7EEA1C01A490C7
FCA2131CA2EA1FFCA3EA1C1CA290C7FC14E0A5EA7FFFB5FC7E13197F9816>I<B512E0A3EA1C00
A41400A2131CA2EA1FFCA3EA1C1CA290C7FCA6B47E7F5B13197F9816>I<EA03E348B4FC121FEA
3E1FEA3C0F12787F127000F0C7FC5AA4EB3F80EB7FC0EB3F8038F007001270EA780FA2123CEA3E
1F6CB4FC1207EA03E712197E9816>I<387F1FC038FFBFE0387F1FC0381C0700A7EA1FFFA3EA1C
07A9387F1FC038FFBFE0387F1FC013197F9816>I<EAFFFEA3EA0380B3EAFFFEA30F197D9816>I<
387F0FE038FF8FF0387F0FE0381C0780EB0F00131E131C133C5B5BEA1DE07F121F7F1338EA1E3C
131CEA1C1E7F7F14801303387F07E038FF8FF0387F07E01419809816>75
D<EAFFC0A3001CC7FCAE144014E0A4B5FCA313197F9816>I<38FC07E0EAFE0FA2383A0B80EA3B
1BA413BBA2EA39B3A413F3EA38E3A21303A538FE0FE0A313197F9816>I<387E1FC038FF3FE038
7F1FC0381D07001387A313C7A2121CA213E7A31367A21377A21337A31317EA7F1FEAFF9FEA7F0F
13197F9816>I<EA1FFC487E487EEA780F38F00780EAE003AEEAF007A238780F00EA7FFF6C5A6C
5A11197E9816>I<EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005B13
F8001CC7FCA7127F487E6CC7FC12197F9816>I<EA1FFC487E487EEA780F38F00780EAE003AD13
E312E1EAF0F738787F00EA7FFF6C5A6C5AEA001C131E130E130F7FA2111F7E9816>I<EA7FE0EA
FFF86C7EEA1C1E7F7FA45B131EEA1FFC5B7FEA1C3E130EA414201470A2387F0FF038FF87E0387F
03C014197F9816>I<EA07E3EA1FFF127FEA781F487E487EA290C7FC7E1278EA7F80EA1FF0EA07
FCC67E130FEB07801303A212E0A2EAF00738F80F00EAFFFE5BEAC7F011197E9816>I<387FFFE0
B5FCA2EAE0E0A400001300AFEA07FC487E6C5A13197F9816>I<387F07F038FF8FF8387F07F038
1C01C0B0EA1E03000E1380EA0F8F3807FF006C5AEA00F81519809816>I<38FE0FE0EAFF1FEAFE
0F38380380381C0700A4EA0E0EA4EA060CEA071CA4EA031813B8A3EA01B013F0A26C5A13197F98
16>I<38FC07E0EAFE0FEAFC07387001C0A300301380EA3803A313E3EA39F3A213B300191300A6
1313EA1B1BEA0F1EA2EA0E0E13197F9816>I<387F1F80133F131F380E1E00131CEA073C1338EA
03B813F012015B120012017F120313B81207131CA2EA0E0EA2487E387F1FC000FF13E0007F13C0
13197F9816>I<38FE0FE0EAFF1FEAFE0F381C0700A2EA0E0EA26C5AA3EA03B8A2EA01F0A26C5A
A8EA03F8487E6C5A13197F9816>I<387FFF80B5FCA238E007005B131E131CEA003C5B137013F0
485A5B1203485A90C7FC5A381E0380121C123C12781270B5FCA311197E9816>I<EAFFF0A3EAE0
00B3A8EAFFF0A30C20789C16>I<EAFFF0A3EA0070B3A8EAFFF0A30C207F9C16>93
D<B51280A311037E7E16>95 D<EA1FE0EA7FF87FEA783CEA301EEA000E133EEA07FE123FEA7FCE
EAF80E12E0A2EAF01EEAF83E387FFFE0EA3FF7EA0FC313127E9116>97 D<127E12FE127E120EA4
133EEBFF80000F13C0EB83E01301EB00F0120E1470A4000F13F014E01381EB83C013FF000E1300
EA067C1419809816>I<EA03F8EA0FFE121FEA3C1EEA780CEA700012F05AA47EEA70071278EA3E
0FEA1FFEEA0FFCEA03F010127D9116>I<133F5B7F1307A4EA03E7EA0FFF123FEA3C1F487E1270
EAF00712E0A46C5AA2EA781FEA7C3F383FFFE0381FF7F03807C7E014197F9816>I<EA07E0EA0F
F8EA1FFCEA3C3EEA780EEA700FEAF007B5FCA3EAE0007EEA70071278EA3E1FEA1FFEEA0FFCEA03
F010127D9116>I<131FEB7F8013FFEA01E7EBC30013C0A2EA7FFFB5FCA2EA01C0ACEA3FFE487E
6C5A11197F9816>I<3803E3C0380FFFE05A381E3CC0383C1E00EA380EA3EA3C1E6C5AEA1FFC48
5AEA3BE00038C7FC123CEA1FFC48B4FC4813C0EA780338F001E0EAE000A3EAF001387C07C0383F
FF80380FFE00EA03F8131C7F9116>I<127E12FE127E120EA4137CEA0FFF148013871303A2120E
A9387FC7F038FFE7F8387FC7F01519809816>I<EA0180EA03C0A2EA0180C7FCA4EA7FC0A31201
ACEA7FFFB5FC7E101A7D9916>I<13301378A213301300A4EA1FF8A3EA0038B3EA6078EAF0F0EA
FFE0EA7FC0EA3F800D237E9916>I<127E12FE127E120EA4EB7FE0A3EB0F00131E5B5B5BEA0FF8
A213BC131EEA0E0E130FEB0780387F87F0EAFFCFEA7F871419809816>I<EAFFC0A31201B3B512
80A311197E9816>I<38FBC78038FFEFC0EBFFE0EA3E7CEA3C78EA3870AA38FE7CF8A315128091
16>I<EA7E7CB5FC6C1380EA0F871303A2120EA9387FC7F038FFE7F8387FC7F01512809116>I<EA
03E0EA0FF8487EEA3C1E487EEA700738E00380A5EAF00700701300EA780FEA3C1EEA1FFC6C5AEA
03E011127E9116>I<EA7E3E38FEFF80007F13C0380F83E01301EB00F0120E1470A4000F13F014
E01381EB83C013FF000E1300137C90C7FCA6EA7FC0487E6C5A141B809116>I<38FF0F80EB3FE0
13FFEA07F1EBE0C0EBC0005BA290C7FCA7EAFFFCA313127F9116>114 D<EA0FECEA3FFC127FEA
F03CEAE01CA2EAF000EA7F80EA1FF0EA07FCEA003EEAE00EA212F0EAF81EEAFFFC13F8EAC7E00F
127D9116>I<12035AA4EA7FFFB5FCA20007C7FCA75BEB0380A2130713873803FF005BEA00F811
177F9616>I<387E1F80EAFE3FEA7E1FEA0E03AA1307EA0F0FEBFFF06C13F83803F3F015128091
16>I<387F1FC000FF13E0007F13C0381C0700EA1E0FEA0E0EA36C5AA4EA03B8A3EA01F0A26C5A
13127F9116>I<38FF1FE013BF131F38380380A413E33819F300A213B3EA1DB7A4EA0F1EA31312
7F9116>I<387F1FC0133F131F380F1C00EA073CEA03B813F012016C5A12017FEA03B8EA073C13
1CEA0E0E387F1FC038FF3FE0387F1FC013127F9116>I<387F1FC038FF9FE0387F1FC0381C0700
120E130EA212075BA2EA039CA21398EA01B8A2EA00F0A35BA3485A1279127BEA7F806CC7FC123C
131B7F9116>I<383FFFC05AA238700780EB0F00131EC65A13F8485A485A485A48C7FC381E01C0
123C1278B5FCA312127F9116>I<EB1F80137FEA01FFEBE0005BA91203EA7F8048C7FCA26C7EEA
03C01201A97FEBFF80EA007F131F11207E9C16>I<12FCB4FC13C012031201A97F6CB4FCEB7F80
A2EBFF00EA01E05BA9120312FF90C7FC12FC11207E9C16>125 D E /Fv
29 122 df<90381FE1F890B512FC3903F03F3E3807C07EEB807C000F141C1500A5B612C0A2390F
807C00AE397FE1FFC0A21F1D809C1C>11 D<EAFFE0A40B047F8A10>45 D<EA0FF0EA3FFCEA703E
EAF03F12F8A3EA203EEA007C13F813F0EA01C0A21380A5C7FCA4EA0380EA07C0EA0FE0A3EA07C0
EA0380101D7D9C17>63 D<EB0380A2497EA3497EA2497E131BA2EB31F8A2EB61FC1360EBE0FEEB
C07EA248487E90B5FC481480EB001FA20006EB0FC0A2000E14E0000C130739FFC07FFEA21F1C7E
9B24>65 D<90381FE0209038FFF8E03803F80F3807E007380FC001EA1F8048C7FCA2007E1460A2
12FE1500A7007E1460A27E15C06C7E390FC001803907E003003803F80E3800FFFCEB1FE01B1C7D
9B22>67 D<B6FCA2380FC01F1407801580A21401EBC181A2EC8000A213C313FFA213C313C1A401
C0C7FCA6B5FCA2191C7E9B1E>70 D<3807F860381FFEE0EA3C07EA7801EA700012F01460A26C13
0012FEEAFFE0EA7FFE6C7E1480000F13C06C13E0EA007FEB03F01301130012C0A214E07E38F001
C0EAFC0338EFFF00EAC3FC141C7D9B1B>83 D<EA0FF8EA1FFE383E1F80130714C0121C1200EA03
FF121FEA3F87EA7E0712FCA3130FEA7E1F383FFBF8EA0FE115127F9117>97
D<B4FCA2121FA9EB1FC0EBFFE0EBC1F81300147CA2147EA6147CA2EB80F8EBC1F0381C7FE03818
1F80171D7F9C1B>I<EA03FCEA0FFEEA1F1F123E127C130E00FCC7FCA6127C387E0180EA3E0338
1F0700EA0FFEEA03F811127E9115>I<EB0FF0A21301A9EA03F1EA0FFFEA1F07EA3E01127CA212
FCA6127CA2EA3E03EA1F0F380FFDFEEA03F1171D7E9C1B>I<EA01FCEA0FFF381F0F80383E07C0
EA7C0314E012FCB5FCA200FCC7FCA3127C007E1360003E13C0EA1F81380FFF00EA01FC13127F91
16>I<3803F0F0380FFFF8383E1F38383C0F30007C1380A4003C1300EA3E1FEA1FFCEA33F00030
C7FC12707EEA3FFF14C06C13E04813F0387801F838F00078A3007813F0383E03E0381FFFC03803
FE00151B7F9118>103 D<B4FCA2121FA9EB1FC0EB7FE0EBE1F0EB80F8A21300AB38FFE7FFA218
1D7F9C1B>I<121E123FA25A7EA2121EC7FCA5B4FCA2121FAEEAFFE0A20B1E7F9D0E>I<B4FCA212
1FA9EB0FF8A2EB0380EB0700130C5B137013F87F13BC133E7F7F1480EB07C0EB03E038FFC7FCA2
161D7F9C19>107 D<B4FCA2121FB3A7EAFFE0A20B1D7F9C0E>I<39FF1FC0FE90387FE3FF3A1FE1
F70F80903980FC07C0A2EB00F8AB3AFFE7FF3FF8A225127F9128>I<38FF1FC0EB7FE0381FE1F0
EB80F8A21300AB38FFE7FFA218127F911B>I<EA01FC380FFF80381F07C0383E03E0387C01F0A2
00FC13F8A6007C13F0A2383E03E0381F07C0380FFF803801FC0015127F9118>I<38FF1FC0EBFF
E0381FC1F8130014FC147C147EA6147C14FCEB80F8EBC1F0EB7FE0EB1F8090C7FCA6EAFFE0A217
1A7F911B>I<EAFE3E137F381ECF80EA1F8FA2EB070090C7FCAAEAFFF0A211127F9114>114
D<EA1FD8EA3FF8EA7038EAE018A2EAF000EAFF80EA7FE013F0EA1FF8EA07FCEA007CEAC01CA212
E0EAF038EAFFF0EACFC00E127E9113>I<1203A35AA25AA2123FEAFFFCA2EA1F00A9130CA4EA0F
98EA07F0EA03E00E1A7F9913>I<38FF07F8A2EA1F00AC1301EA0F03EBFEFFEA03F818127F911B>
I<38FFC1FCA2381F0060EB80E0000F13C013C03807C180A23803E300A2EA01F6A213FE6C5AA213
78A2133016127F9119>I<39FF8FF8FEA2391F03E030A201831370000FEBF0601386D807C613C0
EBCEF8EBEC790003EB7D80EBF83D0001EB3F00A2497E0000131EEBE00EA21F127F9122>I<38FF
C7FCA2381F8180EA0F833807C700EA03EEEA01FC5B1200137C13FEEA01DFEA039F38070F803806
07C0380C03E038FF07FCA216127F9119>I<38FFC1FCA2381F0060EB80E0000F13C013C03807C1
80A23803E300A2EA01F6A213FE6C5AA21378A21330A25B1270EAF8E0EAC0C0EAE380007FC7FC12
3E161A7F9119>I E /Fw 44 122 df<EAFFFEA40F047F8F14>45 D<12F8A505057A8411>I<137F
3801FFC0000713F0487F13C1381F007C48137E003E133E003C131E007C131FA300787F00F81480
AF00781400007C5BA36C133EA2003F137E6C6C5A380FC1F813FF6C5B000113C06C6CC7FC19297E
A71E>48 D<1318133813F8120712FFA312F81200B3AA387FFFF0A414287CA71E>I<13FE3803FF
C04813E04813F0381F03F8383C00FC0038137E12780070133E00F0133FA20060131F1220C7FC14
3FA2143EA2147CA214F8EB01F0EB03E0130714C0EB0F80EB1E005B5B5B485A485A485A48C7FC12
1E5A007FB5FCA418287EA71E>I<137F3801FFC0000713F0487FEA1F81383E00FC003C137E5A00
30133E1210C7127EA2147CA214FC495AEB07F0EBFFE05C8080EB01F8EB007C147E80A2EC1F80A5
12400060EB3F0012F06C5B007C137E383F81FC6CB45A6C5B000313C0C66CC7FC19297EA71E>I<
EB03F013071305130DA2131D1339A21379A213F1A2EA01E11203A2EA07C1A2EA0F81A2EA1F01A2
123E127CA212F8B61280A4390001F000AA19277EA61E>I<383FFFFCA4003EC7FCAA133FEBFFC0
003F13E014F0EBC1F8EB80FCEB007C003E137EC7123E143FA712200060137E127000F813FCEA7C
01383F03F8EBFFF0000F13E06C13803800FE0018287EA61E>I<EB0FF0EB3FFC13FF5A3803F80C
D807E0C7FC485A5B48C8FC121E123E123C127CA2EB3FE048B47E00F97F00FB7F38FF807EEB003E
48133F487FA2EC0F805AA41278127CA215006C5BA26C133E6D5A380FC1FC6CB45A6C5B6C13C06C
6CC7FC19297EA71E>I<B61280A4C7120FEC1F00141E5C147C5CA2495A13035C13075C130F5C13
1F91C7FC5BA2133E137EA3137C13FCA45B1201A719277EA61E>I<137F3801FFC0000713F0487F
381FC1FC383F007E003E133E007E133F007C7FA56C133EA26C5B380FC1F86CB45A6C5BA2000F13
F8381FC1FC383F007E003E133E487FA248EB0F80A6007CEB1F00A2007E5B6C137E381FC1FC6CB4
5A6C5B6C5BC66CC7FC19297EA71E>I<137F3801FFC0487F000F7FEBC1F8381F007C123E487F14
1E141F5AA2801580A4141F127CA2007E133F003E137F003F13FF381FFFEF6C13CF6C138F3903FE
1F00C7FCA2141E143EA25CA25C381801F0381E07E0383FFFC06C5B6C48C7FCEA03F819297EA71E
>I<B512E014FC14FF158039FC007FC0EC0FE0EC07F01403EC01F8A21400A2140115F01403EC07
E0140FEC7F80B6120014FC80ECFF8039FC007FE0EC0FF0EC03F81401EC00FC157C157EA5157C15
FCEC01F81407EC3FF0B612E01580ECFE0014F01F2A7BA928>66 D<49B4FC010F13E0013F13F85B
EBFF013901F800304848131048481300485A485AA248C8FCA2127EA45AAA127EA47EA26C7EA26C
7E6C7E6C6C13046C6C131C6CB413FCEB7FFF6D13F8010F13E0010113001E2C7CAA26>I<B512F0
14FC14FF15C039FC003FE0EC0FF0EC03F86E7E1400157EA281A2ED1F80A3ED0FC0AA1680151FA3
ED3F00A2157E15FE4A5A4A5AEC0FF0EC3FE0B65A92C7FC5C14F0222A7BA92B>I<12FCB3B3A606
2A7BA911>73 D<B4EDFF80A36D5B00FB15DF6D1303A3D8F9E0EB079FA36D130F00F8151FA26D13
1F0178131EA2017C133E013C133C013E137CA2011E1378011F13F8A26D13F01481A2010713E0A2
14C3010313C0A214E701011380A30100130014FF147EA391C7FC292A7BA934>77
D<B46C133EA27FA2EAFBE0A2EAF9F0A27F12F8A27F137C137E133E133F7F1480130F14C0A2EB07
E0A2130314F0130114F8130014FC147C147E143EA2143F141FA2EC0FBEA2EC07FEA21403A21F2A
7BA92A>I<B512E014FC80ECFF8039FC007FC0EC0FE01407EC03F0140115F8A715F01403EC07E0
140FEC7FC0B61280ECFE005C14E000FCC8FCB11D2A7BA926>80 D<EB7FC03801FFF8000713FE48
7F381FC07F383F000F007E1306007C90C7FC127812F8A47EA2127E127FEA3FE013FE381FFFC06C
13F06C7F00017F38003FFEEB03FF9038007F80141FA2EC0FC01407A6EC0F80126000F0EB1F0000
FC5B38FF80FE6CB45A001F5B000713E0C613801A2C7DAA21>83 D<B712F0A4260001F8C7FCB3B3
A2242A7EA929>I<00FC147CB3AE007E14F8A26C130115F0391F8003E0EBC00F390FF03FC06CB5
12800001EBFE006C6C5AEB1FE01E2B7BA929>I<EA01FE380FFF80003F13C014E0383C03F0EA30
01000013F81300A5137FEA07FF121FEA3FE0EA7F0012FC5AA3EAFC01EA7E07EA7FFF7EEA1FFCEA
0FE0151B7E9A1D>97 D<12F8AF133F38F9FFC000FB13E0B512F0130738FC01F838F800FC147CA2
147E143EA7147CA36C13F8130138FF07F0EBFFE000FB13C000F9138038F87E00172A7BA91F>I<
EB7FC03801FFF0000713FC5A381FC07CEB0008003E13005AA35AA7127CA2127E123E6C130CEBC0
7C380FFFFC7E000113F038007F80161B7E9A1B>I<143EAF13FCEA03FF4813FE5AEA1FC1383F00
7E003E133E5AA212FC5AA77E127CA26C137E003F13FEEA1FC1EA0FFF6C13BE6C133EEA00FC172A
7EA91F>I<137E3803FF804813C04813E0381F83F0EA3F00003E13785A14380078133CB512FCA4
00F8C7FCA31278127CA27E003F130C381FC07C380FFFFC7E000113F038007F80161B7E9A1B>I<
EB1FC0137F13FF5A3803F0005B485AA9EAFFFEA4EA07C0B3A5122A7FA912>I<9038F807803903
FE7FC0000FB5FC5A903807C000383E03E0A2486C7EA66C485AA26C485A13FF485BD83BFEC7FCEA
38F80078C8FCA27E383FFFC014F86C7F80487F387C007F48EB1F80140FA36C131F007EEB3F0038
3F80FE13FF000F13F86C5BC613801A287E9A1E>I<12F8AF133FEBFF8000FB13C0B512E0130738
FE03F0EAFC01A312F8B2142A7BA91F>I<12FCA61200A9127CB3A9062A7DA90E>I<13FCA61300A9
137CB3AFEA40FCEAE1F812FF13F0EA7FE0EA0F800E3683A910>I<12F8AFEB01F8EB03F0EB07E0
14C0EB0F80EB1F00133E5B5B12F9EAFBF012FF7F7FA2EAFE7E487E12F8EB1F80130F14C0EB07E0
A2EB03F0130114F8EB00FC162A7BA91D>I<12F8B3B3A6052A7CA90E>I<D8F83F133F9039FFC0FF
C000FB01E313E0B500F713F0018313833AFE01FE01F839FC00FC00A3485BB2251B7B9A32>I<EA
F83FEBFF8000FB13C0B512E0130738FE03F0EAFC01A312F8B2141B7B9A1F>I<137F3801FFC000
0713F0487F381FC1FC383F007E003E133E487FA200787F00F81480A7007CEB1F00A2007E5B003E
133E003F137E381FC1FC6CB45A6C5B000113C06C6CC7FC191B7E9A1E>I<EAF83F38F9FFC000FB
13E0B512F0130738FC01F838F800FCA2147C147E143EA7147CA214FC6C13F8130338FF07F0EBFF
E000FB13C000F9138038F87E0090C7FCAC17277B9A1F>I<EAF83813F812F912FBEAFFC013005A
A25AA25AB10D1B7B9A14>114 D<EA03FC381FFF804813C05AEA7C0738F800801400A37EEA7F80
13F8EA3FFE6C7E00071380C613C0EB0FE013071303A21240EAE00738FC0FC0B5FC6C1380381FFE
00EA03F8131B7E9A17>I<EA07C0A7B512C0A43807C000B11440EBE1C03803FFE0A26C13803800
FC0013227FA116>I<38F801F0B3A21303A2EAFC0FB5FCEA7FFDEA3FF9EA1FC1141B7B9A1F>I<00
F8EB0F807E007CEB1F00A2127E003E133EA26C133C147CA26C6C5AA36C6C5A13C1A23803E1E013
E300015BA213F33800F780A3017FC7FCA3191B7F9A1C>I<00F8EB0F807E007CEB1F00127E003E
133EA27E5CA2EA0F805CEA07C05C13C1EA03E15C120113E3EBF3C012005C137313770137C7FC13
3F133E131EA25BA35BA25BA2EA7FE0A25B90C8FC19277F9A1C>121 D E
/Fx 78 124 df<EB3F0F9038FFBF803903C3F3C0380703E3ECC180390E01C000A6B512FCA2380E
01C0AE387F87FCA21A1D809C18>11 D<133FEBFF803803C1C0EA0703A2380E018090C7FCA5B512
C0A2EA0E01AE387F87F8A2151D809C17>I<EB3FC013FFEA03C3EA07031301120EA6B5FCA2EA0E
01AE387FCFF8A2151D809C17>I<90383F03F09038FFCFF83903C0FC1C390701F03CA2390E00E0
1892C7FCA5B612FCA2390E00E01CAE3A7FC7FCFF80A2211D809C23>I<EA7070EAF8F8EAFCFCA2
EA7C7CEA0C0CA3EA1818A2EA3030EA6060EA40400E0D7F9C15>34 D<127012F812FCA2127C120C
A31218A2123012601240060D7D9C0C>39 D<13C0EA0180EA03001206120E120C121C1218123812
30A21270A21260A212E0AC1260A21270A21230A212381218121C120C120E12067EEA0180EA00C0
0A2A7D9E10>I<12C012607E7E121C120C120E120612077EA21380A21201A213C0AC1380A21203
A21300A25A1206120E120C121C12185A5A5A0A2A7E9E10>I<EA018013C01380A2EA6186EAF99F
EA7DBEEA1FF8EA07E0A2EA1FF8EA7DBEEAF99FEA6186EA0180A213C0138010127E9E15>I<1306
ADB612E0A2D80006C7FCAD1B1C7E9720>I<127012F012F8A212781218A31230A2127012601240
050D7D840C>I<EAFFE0A30B0380890E>I<127012F8A3127005057D840C>I<1303A213071306A2
130E130C131C1318A213381330A213701360A213E013C0A21201138012031300A25A1206A2120E
120CA2121C1218A21238123012701260A212E05AA210297E9E15>I<EA03C0EA0FF0EA1C38EA38
1CA2EA700EA3EAF00FADEA700EA3EA381CA2EA1C38EA0FF0EA07E0101D7E9B15>I<12035A123F
B4FC12C71207B3A3EAFFF8A20D1C7C9B15>I<EA07C0EA1FF0EA3878EA603C131E12F0EAF80FA3
12701200130E131E131C133C1378137013E0EA01C0EA0380EA0700EA0E03120C1218EA3006EA7F
FE12FFA2101C7E9B15>I<EA07E0EA1FF0EA3838EA301CEA781EA312381200133C13381370EA07
E0A2EA0038131C131E130E130FA2127012F8A2130EEAF01EEA601CEA3838EA1FF0EA07C0101D7E
9B15>I<131CA2133C137CA213DC1201139C1203EA071C1206120E120C121812381230126012E0
B512C0A238001C00A63801FFC0A2121C7F9B15>I<EA300CEA3FFC13F813E0EA3000A6EA33E0EA
37F0EA3C38EA381CEA301E130EEA000FA4127012F0A2EAE00EEA601E131CEA3878EA1FF0EA07C0
101D7E9B15>I<13F0EA03FCEA070CEA0E0EEA1C1E1238130CEA78001270A2EAF3F0EAF7F8EAFC
1CEAF81E130E12F0130FA51270A2130E1238131CEA1C38EA0FF0EA03E0101D7E9B15>I<126038
7FFF80A21400EA6003EAC0065BA2C65A5BA25BA25BA21201A2485AA41207A76CC7FC111D7E9B15
>I<EA03E0EA0FF0EA1C38EA381CEA300E1270A31278131C123EEA3FB8EA1FE0EA07F0EA0FF8EA
1CFCEA387EEA701E130F12E01307A4EA700E130CEA3C3CEA1FF0EA07E0101D7E9B15>I<EA03C0
EA0FF0EA1C38EA381C1278EA700E12F0A2130FA51270131F1278EA383FEA1FEFEA0FCFEA000EA3
EA301C12781338EA7030EA30F0EA3FC0EA0F80101D7E9B15>I<127012F8A312701200A8127012
F8A3127005127D910C>I<127012F8A312701200A8127012F012F8A212781218A31230A2127012
601240051A7D910C>I<007FB512C0B612E0C9FCA8B612E06C14C01B0C7E8F20>61
D<1306130FA3497EA4EB33C0A3EB61E0A3EBC0F0A338018078A2EBFFF8487FEB003CA200067FA3
001F131F39FFC0FFF0A21C1D7F9C1F>65 D<B512C014F0380F00F8143C141C141EA4141C143C14
78EBFFF014E0EB00F8143C141EA2140FA5141E143E147CB512F814C0181C7E9B1D>I<90381F80
80EBFFE13803F0333807801B380F000F001E1307001C1303123C5A1401127012F091C7FCA70070
EB01801278A27E001CEB0300121E6C13066C6C5A3803F0383800FFF0EB1F80191E7E9C1E>I<B5
12C014F0380F007C141E8080EC038015C0A2140115E0A815C0A2140315801407EC0F00141E147C
B512F014C01B1C7E9B20>I<B512FCA2380F007C141C140C140E14061303A314005B13FFA21307
7FA21403A213001406A3140E141E147CB512FCA2181C7E9B1C>I<B512F8A2380F007814381418
141C140CA21303A21400A25B13FFA213077FA490C7FCA6EAFFF8A2161C7E9B1B>I<90381F8080
EBFFE13803F0333807801B380F000F001E1307001C1303123C5A1401127012F091C7FCA5ECFFF0
A20070EB07801278A27E121C121E7E3807800F3803F0393800FFF090381FC0001C1E7E9C21>I<
39FFF3FFC0A2390F003C00AAEBFFFCA2EB003CAC39FFF3FFC0A21A1C7E9B1F>I<EAFFF0A2EA0F
00B3A6EAFFF0A20C1C7F9B0F>I<EAFFF8A2000FC7FCAF1418A414381430147014F01301B5FCA2
151C7E9B1A>76 D<B46CEBFF806D5A000FECF800A2390DE00378A3380CF006A3EB780CA3EB3C18
A3EB1E30A3EB0F60A3EB07C0A3381E03803AFFC387FF80A2211C7E9B26>I<B4EBFFC07F000FEB
1E00EBC00CA2EA0DE0EA0CF0A21378A2133C131EA2130FA2EB078C14CC1303EB01ECA2EB00FCA2
147C143CA2001E131CEAFFC0140C1A1C7E9B1F>I<EB3F80EBFFE03803E0F83807803C380E000E
001E130F48EB078000381303007814C0A20070130100F014E0A80078EB03C0A36CEB0780A26CEB
0F006C131E6C6C5A3803E0F83800FFE0EB3F801B1E7E9C20>I<B5128014E0380F00F01438143C
141EA6143C143814F0EBFFE0148090C7FCAAEAFFF0A2171C7E9B1C>I<B5FC14E0380F00F01438
143C80A55C143814F0EBFFE05CEB01E06D7E1478A71530143839FFF03C60EC1FE0C7EA07C01C1D
7E9B1F>82 D<3807E080EA1FF9EA3C1FEA7007130312E01301A36CC7FCA2127CEA7FC0EA3FF8EA
1FFEEA07FFC61380130FEB03C0A2130112C0A300E01380130300F01300EAFC0EEACFFCEA83F812
1E7E9C17>I<007FB512C0A238780F03007013010060130000E014E000C01460A400001400B038
03FFFCA21B1C7F9B1E>I<39FFF0FFC0A2390F001E00140CB36C5B138000035BEA01C03800E0E0
EB7FC0011FC7FC1A1D7E9B1F>I<39FFE01FF0A2390F000780EC0300A238078006A2EBC00E0003
130CA2EBE01C00011318A26C6C5AA3EB7860A36D5AA3EB1F80A36DC7FCA313061C1D7F9B1F>I<
3AFFE0FFE1FFA23A1F001E007C6C1530143FA20180147000079038678060A32603C0E713C0ECC3
C0A2D801E0EBC1809038E181E1A3D800F3EBF3001400A2017B13F6017E137EA3013C133CA3011C
133801181318281D7F9B2B>I<397FF0FFC0A23907C03E0000031338EBE03000011370EBF06000
005B1379EB7D80013FC7FC7FA27F80131FEB3BC0EB33E01371EB61F0EBC0F800011378EB807C38
03003C487F380F801F39FFE0FFF0A21C1C7F9B1F>I<12FEA212C0B3B312FEA207297C9E0C>91
D<EA0808EA1818EA3030EA6060A2EAC0C0A3EAF8F8EAFCFCA2EA7C7CEA38380E0D7B9C15>I<12
FEA21206B3B312FEA20729809E0C>I<EA0FE0EA1FF8EA3C3C7FEA180E1200131EEA07FE121FEA
3E0E127812F01460A2131EEA783E383FFFC0381F878013127F9115>97 D<12FCA2121CA9137EEA
1DFF381F8780381E01C0001C13E0130014F0A614E01301001E13C0381F07803819FF00EA187C14
1D7F9C17>I<EA03F0EA0FF8EA1E3C1238EA7818EA700012F0A612781306123CEA1E0CEA0FF8EA
03E00F127F9112>I<EB1F80A21303A9EA03E3EA0FFBEA1E0FEA3807EA7803127012F0A6127012
78EA3807EA1E1F380FFBF0EA07E3141D7F9C17>I<EA03E0EA0FF0EA1C38EA381CEA781EEA700E
EAFFFEA2EAF000A41270EA7806123CEA1E0CEA0FF8EA03E00F127F9112>I<1378EA01FCEA039E
EA071EEA0E0C1300A6EAFFE0A2EA0E00AEEA7FE0A20F1D809C0D>I<EB03803807E7C0EA0FFDEA
3C3D38381C00EA781EA4EA381CEA3C3CEA3FF0EA37E00070C7FCA21230EA3FFC6CB4FC481380EA
700738E001C0A438700380383C0F00EA1FFEEA07F8121C7F9215>I<12FCA2121CA9137CEA1DFF
EA1F07381E0380A2121CAB38FF9FF0A2141D7F9C17>I<1218123C127C123C1218C7FCA612FCA2
121CAEEAFF80A2091D7F9C0C>I<EA01C0EA03E0A3EA01C0C7FCA6EA0FE0A21200B31260EAF1C0
A2EA7F80EA3E000B25839C0D>I<12FCA2121CA9EB7FC0A2EB3E0013185B5B5BEA1DE0121FEA1E
70EA1C781338133C131C7F130F38FF9FE0A2131D7F9C16>I<12FCA2121CB3A7EAFF80A2091D7F
9C0C>I<39FC7E07E039FDFF9FF8391F83B838391E01E01CA2001C13C0AB3AFF8FF8FF80A22112
7F9124>I<EAFC7CEAFDFFEA1F07381E0380A2121CAB38FF9FF0A214127F9117>I<EA03F0EA0FFC
EA1E1EEA380700781380EA700300F013C0A600701380EA780700381300EA1E1EEA0FFCEA03F012
127F9115>I<EAFC7EEAFDFF381F8780381E03C0381C01E0A2EB00F0A6EB01E0A2381E03C0381F
0780381DFF00EA1C7C90C7FCA6B47EA2141A7F9117>I<3803E180EA0FF9EA1E1FEA3C07127813
0312F0A612781307123CEA1E1FEA0FFBEA07E3EA0003A6EB1FF0A2141A7F9116>I<EAFDE0EAFF
F0EA1F78121E1330EA1C00ABEAFFC0A20D127F9110>I<EA1F90EA3FF0EA7070EAE030A3EAF800
EA7F80EA3FE0EA0FF0EA00F8EAC038A212E0A2EAF070EADFE0EA8FC00D127F9110>I<120CA512
1CA2123CEAFFE0A2EA1C00A81330A5EA1E60EA0FC0EA07800C1A7F9910>I<38FC1F80A2EA1C03
AC1307EA0C0F380FFBF0EA03E314127F9117>I<38FF0FE0A2381C0780EB0300EA0E06A36C5AA2
131CEA0398A213F86C5AA26C5AA313127F9116>I<39FF3FCFE0A2391C0F0780EC0300131F380E
1B061486A2EB318E000713CCA213603803E0F8A33801C070A31B127F911E>I<387F8FF0A2380F
078038070600EA038EEA01DC13D8EA00F01370137813F8EA01DCEA038E130EEA0607380F038038
FF8FF8A21512809116>I<38FF0FE0A2381C0780EB0300EA0E06A36C5AA2131CEA0398A213F86C
5AA26C5AA35BA3EAF180A200C7C7FC127E123C131A7F9116>I<EA7FFCA2EA7838EA7070EA60F0
13E0EA61C01263EA0380EA070C120F120EEA1C1CEA3C181238EA7078EAFFF8A20E127F9112>I<
B512F0A21402808B15>I E /Fy 10 118 df<DC7FFE140E030FB500E0133E92B600F8137E0203
03FE13FE021FEDFF81027FD9F80113E391B53980003FF7010301FCC7EA07FF4901F08049491400
490180157F4990C9123F4948161F4948160F485B4818074A1603485B481801A2485B1900A2485B
1A7E5AA391CCFCA2B5FCAD7EA2801A3EA27EA26C7FA21A7E6C6D177CA26C19FC6C6D17F86E1601
6CF003F06C7F6D6CEE07E06D6CEE0FC06D6DED1F806D01E0ED7F006D6D15FE6D01FCEC03FC0100
D9FF80EB0FF86E01F8EBFFF0021F90B612C0020393C7FC020015FC030F14E09226007FFEC8FC47
4979C756>67 D<B97E18FC18FF19C019F0D8001F902680000F13FC05017F716C7E7213807213C0
841AE0A27213F0A31AF8A81AF0A34E13E0A21AC04E1380604E13004D485A050F13F892B75A19C0
4EC7FC18F003C0CAFCB3A9B712F8A545477CC651>80 D<903807FFFE017FEBFFE048B612F84815
FE489039001FFF8003077F48D980017F6F7FA2707EA2707E6C90C7FC6C5A6C5AC9FCA40207B5FC
91B6FC130F013FEBF03F3901FFFE004813F04813C04890C7FC485A485A485AA212FF5BA3167FA2
6D14FF6C6CEB01EF003F140301FF90380FCFFF6C9026C07F8F13F8000790B5000713FC6CECFC03
C66CEBF0010107903980007FF8362E7DAD3A>97 D<91381FFFC049B512FC010714FF011F158090
267FFC0113C0EBFFF048D9C00313E04813804813005A485AA248486D13C06F1380007FED7F0093
C7FC5BA212FFAA127F7FA3123F6D15F8121F16016C6C15F06C6D13036C6DEB07E06C6DEB0FC06C
01F8EB3F80903A7FFE01FF00011FB55A010714F8010114E0D9001F90C7FC2D2E7CAD35>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 964 y Fw(1.1)59 b(Intro)r(duction)75
1055 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 1105 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 1155 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 1205 y(implemen)o(tatio)o(n)11
b(ma)o(y)h(lead)i(to)g(greater)h(e\016ciency\).)158 1254 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
1304 y(creates)18 b(and)d(sends)i(a)e(message.)23 b(The)17
b(op)q(eration)e(sp)q(eci\014es)j(a)d Fv(send)i(bu\013er)d
Fx(in)h(the)h(sender)i(memory)13 b(where)75 1354 y(from)h(the)i(message)g
(data)f(is)h(tak)o(en.)23 b(In)16 b(addition,)f(the)h(send)h(op)q(eration)e
(asso)q(ciates)i(an)f Fv(en)o(v)o(elop)q(e)d Fx(with)i(the)75
1404 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
1454 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
1503 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 1553 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 1603 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 1653 y(receiv)o(e,)12 b(basic)e(comm)o(unicatio)o(n)e
(seman)o(tics,)i(t)o(yp)q(e)g(matc)o(hing)e(requiremen)o(ts,)j(t)o(yp)q(e)g
(con)o(v)o(ersion)f(in)g(hetrogenous)75 1703 y(en)o(vironmen)o(ts,)16
b(and)g(more)f(general)h(comm)o(unication)d(mo)q(des.)24 b(Non)o(blo)q(c)o
(king)15 b(comm)o(unication)e(is)j(addressed)75 1753 y(next,)k(follo)o(w)o
(ed)d(b)o(y)i(c)o(hannel-lik)o(e)f(constructs)i(and)f(send-receiv)o(e)i(op)q
(erations.)32 b(W)m(e)19 b(then)g(consider)h(general)75 1802
y(datat)o(yp)q(es)13 b(that)f(allo)o(w)e(to)i(transfer)h(heterogenous)h(and)e
(noncon)o(tiguous)f(data,)h(and)g(conclude)h(with)e(a)h(descrip-)75
1852 y(tion)f(of)h(an)g(implem)o(en)o(tation)d(of)j(MPI)g(p)q(oin)o(t)f(to)h
(p)q(oin)o(t)g(comm)o(unicatio)o(n)d(using)j(a)g(small)e(n)o(um)o(b)q(er)h
(of)g(primitiv)o(es.)75 1987 y Fw(1.2)59 b(Basic)19 b(send)h(op)r(eration)75
2078 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 2175 y Fu(MPI)p 144 2175 14
2 v 15 w(SEND)21 b(\(start,)f(count,)h(datatype,)f(dest,)h(tag,)g(comm\))117
2225 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 2267 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 2310 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 2352 y(in)g
Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
2395 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
2437 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))75
2577 y Fs(1.2.1)49 b(Message)16 b(data)75 2654 y Fx(The)e(send)g(bu\013er)g
(sp)q(eci\014ed)h(b)o(y)e(the)h Fu(MPI)p 736 2654 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 2704 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)-32
46 y Fr(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 Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(2)75 45 y(length)17 b(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
95 y(and)e(closer)g(to)g(the)h(application)d(lev)o(el.)158
145 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 195 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 244 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 294 y(host)i(language.)29
b(The)18 b(p)q(ossible)g(v)n(alues)g(of)f(this)h(parameter)f(for)h(F)m
(ortran)f(and)h(the)g(corresp)q(onding)h(F)m(ortran)75 344
y(t)o(yp)q(es)c(are)f(listed)g(b)q(elo)o(w)p 158 447 906 2
v 157 497 2 50 v 183 482 a(MPI)g(datat)o(yp)q(e)p 587 497 V
175 w(F)m(ortran)g(datat)o(yp)q(e)p 1063 497 V 158 499 906
2 v 157 549 2 50 v 183 534 a Fu(MPI)p 252 534 14 2 v 15 w(INTEGER)p
587 549 2 50 v 195 w Fx(INTEGER)p 1063 549 V 157 598 V 183
583 a Fu(MPI)p 252 583 14 2 v 15 w(REAL)p 587 598 2 50 v 261
w Fx(REAL)p 1063 598 V 157 648 V 183 633 a Fu(MPI)p 252 633
14 2 v 15 w(DOUBLE)p 587 648 2 50 v 217 w Fx(DOUBLE)g(PRECISION)p
1063 648 V 157 698 V 183 683 a Fu(MPI)p 252 683 14 2 v 15 w(COMPLEX)p
587 698 2 50 v 195 w Fx(COMPLEX)p 1063 698 V 157 748 V 183
733 a Fu(MPI)p 252 733 14 2 v 15 w(DOUBLE)p 399 733 V 14 w(COMPLEX)p
587 748 2 50 v 49 w Fx(DOUBLE)g(COMPLEX)p 1063 748 V 157 798
V 183 783 a Fu(MPI)p 252 783 14 2 v 15 w(LOGICAL)p 587 798
2 50 v 195 w Fx(LOGICAL)p 1063 798 V 157 847 V 183 832 a Fu(MPI)p
252 832 14 2 v 15 w(CHARACTER)p 587 847 2 50 v 151 w Fx(CHARA)o(CTER)p
1063 847 V 157 897 V 183 882 a Fu(MPI)p 252 882 14 2 v 15 w(BYTE)p
587 897 2 50 v 1063 897 V 158 899 906 2 v 75 1042 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 75 1187 560
2 v 74 1237 2 50 v 100 1222 a(MPI)g(datat)o(yp)q(e)p 379 1237
V 50 w(C)g(datat)o(yp)q(e)p 633 1237 V 75 1239 560 2 v 74 1288
2 50 v 100 1274 a Fu(MPI)p 169 1274 14 2 v 15 w(SHORT)p 379
1288 2 50 v 114 w Fx(short)p 633 1288 V 74 1338 V 100 1323
a Fu(MPI)p 169 1323 14 2 v 15 w(INT)p 379 1338 2 50 v 158 w
Fx(in)o(t)p 633 1338 V 74 1388 V 100 1373 a Fu(MPI)p 169 1373
14 2 v 15 w(LONG)p 379 1388 2 50 v 136 w Fx(long)p 633 1388
V 74 1438 V 100 1423 a Fu(MPI)p 169 1423 14 2 v 15 w(UNSIGNED)p
379 1438 2 50 v 48 w Fx(unsigned)p 633 1438 V 74 1488 V 100
1473 a Fu(MPI)p 169 1473 14 2 v 15 w(FLOAT)p 379 1488 2 50
v 114 w Fx(\015oat)p 633 1488 V 74 1538 V 100 1523 a Fu(MPI)p
169 1523 14 2 v 15 w(DOUBLE)p 379 1538 2 50 v 92 w Fx(double)p
633 1538 V 74 1587 V 100 1572 a Fu(MPI)p 169 1572 14 2 v 15
w(CHAR)p 379 1587 2 50 v 136 w Fx(c)o(har)p 633 1587 V 74 1637
V 100 1622 a Fu(MPI)p 169 1622 14 2 v 15 w(BYTE)p 379 1637
2 50 v 633 1637 V 75 1639 560 2 v 158 1761 a Fx(The)g(datat)o(yp)q(e)g
Fu(MPI)p 486 1761 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 1811 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 1861 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
1911 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(alues)h(on)g(all)e(mac)o(hines.)
158 2039 y Fo(Discussion:)158 2085 y Ft(Need)h(to)g(decide)h(whether)g(w)o(e)
e(w)o(an)o(t)h(\(for)g(C\))158 2130 y(unsigned)i(c)o(har,)e(unsigned)i
(short,)f(unsigned)h(long)158 2176 y(long)f(double)75 2373
y Fs(1.2.2)49 b(Message)16 b(envelop)q(e)75 2450 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 2500 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
2549 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 2625 y Fv(source)75
2704 y(destinatio)o(n)p eop
%%Page: 3 3
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(3)75 45 y Fv(tag)75 128 y(con)o(text)158 211
y Fx(The)16 b(in)o(teger-v)n(alued)f(message)f(tag)h(is)g(sp)q(eci\014ed)i(b)
o(y)e(the)h Fu(tag)e Fx(parameter)h(of)f(the)i(send)g(op)q(eration.)22
b(This)75 261 y(in)o(teger)16 b(can)g(b)q(e)h(used)f(b)o(y)g(the)g(program)e
(to)i(distinguish)f(di\013eren)o(t)i(t)o(yp)q(es)f(of)f(messages.)24
b(The)16 b(range)g(of)g(v)n(alid)75 311 y(tag)d(v)n(alues)f(is)h(implemen)o
(tatio)o(n)d(dep)q(enden)o(t)15 b(and)e(can)g(b)q(e)g(queried)h(using)f(an)f
(en)o(vironmetal)g(inquiry)g(function,)75 361 y(as)i(describ)q(ed)i(in)d
(Chapter)i Fv(??)p Fx(.)158 410 y(The)g(con)o(text)g(of)e(the)i(message)f
(sen)o(t)h(is)g(sp)q(eci\014ed)g(b)o(y)f(the)h Fu(comm)f Fx(parameter)g(in)g
(the)g(send)i(op)q(eration:)i(the)75 460 y(message)c(carries)g(the)h(con)o
(text)g(asso)q(ciated)f(with)g(this)g(comm)o(unicator)d(\(see)k(Chapter)g
Fv(??)p Fx(\).)158 510 y(The)i(message)f(destination)g(is)h(sp)q(eci\014ed)g
(as)g(a)f(rank)g(within)g(the)h(pro)q(cess)h(group)f(asso)q(ciated)g(with)f
(that)75 560 y(same)e(comm)o(unicator.)j(The)e(range)g(of)f(v)n(alid)f(v)n
(alues)i(for)f(the)h Fu(dest)f Fx(parameter)g(is)h Fu(0,)21
b(...)43 b(,)22 b(n-1)p Fx(,)13 b(where)j Fu(n)75 610 y Fx(is)e(the)h(n)o(um)
o(b)q(er)e(of)g(pro)q(cesses)k(in)c(this)i(group.)j(Th)o(us,)c(p)q(oin)o
(t-to-p)q(oin)o(t)e(comm)o(unications)f(do)j(not)g(use)h(absolute)75
659 y(addresses,)h(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
709 y(The)i(message)g(source)h(is)f(implicitly)d(sp)q(eci\014ed)k(b)o(y)f
(the)g(iden)o(tit)o(y)f(of)h(the)g(message)g(sender.)158 759
y(The)g(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 809 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 859 y(some)g(of)h(the)h(information)c(\(e.g.,)j Fv(source)f
Fx(or)h Fv(destination)o Fx(\))e(ma)o(y)g(b)q(e)j(implicit,)c(and)j(need)i
(not)e(b)q(e)h(explicitly)75 909 y(carried)g(b)o(y)e(a)h(message.)75
1046 y Fw(1.3)59 b(Basic)19 b(receive)g(op)r(eration)75 1137
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 1234 y Fu(MPI)p 144 1234 14
2 v 15 w(RECV)21 b(\(start,)f(count,)h(datatype,)f(source,)g(tag,)h(comm,)g
(status\))117 1284 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
1329 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 1375 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 1421 y(in)g Fu(source)653 b Ft(rank)13 b(of)g(source)h(\(in)o
(teger\))117 1466 y(in)g Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))
117 1512 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))117
1558 y(out)g Fu(status)629 b Ft(status)13 b(ob)r(ject)158 1634
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 1684 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 1733 y(then)h(or)f(equal)g(the)g(length)g(of)g
(the)h(receiv)o(e)g(bu\013er.)23 b(I.e.,)14 b(all)g(incoming)f(data)h(m)o
(ust)g(\014t,)i(without)e(truncation,)75 1783 y(in)o(to)f(the)i(receiv)o(e)g
(bu\013er.)158 1833 y(The)e(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 1883 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 1933 y(b)o(y)e(that)h(receiv)o(e)g(op)q(eration)g(only)e(if)h(its)g
(en)o(v)o(elop)q(e)h(matc)o(hes)f(that)h(pattern.)18 b(A)12
b(pattern)g(sp)q(eci\014es)h(v)n(alues)e(for)g(the)75 1983
y Fu(source)p Fx(,)f Fu(tag)h Fx(and)h Fu(context)e Fx(\014elds)i(of)f(the)h
(message)f(en)o(v)o(elop)q(e.)18 b(In)11 b(addition,)g(the)h(v)n(alue)f(for)g
(the)h Fu(destination)75 2032 y Fx(\014eld)j(is)g(set,)h(implicitl)o(y)m(,)c
(to)i(b)q(e)i(equal)f(to)g(the)g(receiving)g(pro)q(cess)i(id.)k(The)16
b(receiv)o(er)g(ma)o(y)d(sp)q(ecify)j(a)e(wildcard)75 2082
y Fu(MPI)p 144 2082 V 15 w(ANY)p 225 2082 V 15 w(SOURCE)d Fx(v)n(alue)g(for)g
Fu(source)p Fx(,)g(and/or)g(a)h(wildcard)f Fu(MPI)p 1105 2082
V 15 w(ANY)p 1186 2082 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 2132 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 2182 y(can)i(b)q(e)h(receiv)o
(ed)g(b)o(y)f(a)f(receiv)o(e)j(op)q(eration)d(only)g(if)h(it)f(is)h
(addressed)i(to)d(the)i(receiving)f(task,)g(has)g(a)g(matc)o(hing)75
2232 y(con)o(text,)e(has)f(matc)o(hing)e(source)j(unless)g(source=)p
Fu(MPI)p 943 2232 V 17 w(ANY)p 1026 2232 V 15 w(SOURCE)e Fx(in)g(the)i
(pattern,)f(and)g(has)g(a)g(matc)o(hing)e(tag)75 2281 y(unless)15
b(tag=)p Fu(MPI)p 357 2281 V 15 w(ANY)p 438 2281 V 15 w(TAG)e
Fx(in)g(the)i(pattern.)158 2331 y(The)d(receiving)f(tag)g(v)n(alue)f(is)h(sp)
q(eci\014ed)i(b)o(y)e(the)g Fu(tag)g Fx(parameter)g(of)f(the)i(receiv)o(e)g
(op)q(eration.)17 b(The)12 b(receiving)75 2381 y Fu(context)g
Fx(v)n(alue)h(is)g(the)h(con)o(text)g(attac)o(hed)g(with)f(the)h(comm)o
(uniator)c(sp)q(eci\014ed)15 b(b)o(y)e(the)h(parameter)g Fu(comm)p
Fx(.)j(The)75 2431 y(message)g(source,)h(if)e(di\013eren)o(t)i(from)d
Fu(MPI)p 758 2431 V 15 w(ANY)p 839 2431 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
2481 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 2531 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 2531 V 15 w(ANY)p 727 2531
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 2580 y(Source)h(=)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.)p eop
%%Page: 4 4
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(4)75 45 y Fs(1.3.1)49 b(Return)16 b(status)75
204 y Fo(Discussion:)i(This)d(is)g(a)g(c)o(hange)g(from)e(previous)j(draft)
158 337 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 387 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 437 y(information)d(need)k(b)q(e)g(returned)g(b)
o(y)f(the)h(receiv)o(e)g(op)q(eration.)k(F)m(or)12 b(reasons)h(that)f(will)e
(b)q(ecome)i(clear)h(later,)e(it)h(is)75 486 y(preferable)j(to)g(return)g
(this)g(information)c(in)j(a)h(separate)g Fu(out)f Fx(v)n(ariable,)f(rather)i
(then)h(using)e(the)h Fu(count)p Fx(,)e Fu(dest)75 536 y Fx(and)k
Fu(tag)f Fx(parameters)i(b)q(oth)f(for)g(input)f(and)h(output.)28
b(This)17 b(return)i(status)e(information)e(is)i(carried)g(b)o(y)g(the)75
586 y Fu(status)d Fx(parameter)h(of)g Fu(MPI)p 539 586 14 2
v 15 w(RECEIVE)p Fx(.)e(This)i(is)g(a)g(parameter)g(of)g(a)g(sp)q(ecial)g
(MPI-de\014ned)i(t)o(yp)q(e.)22 b(The)16 b(status)75 636 y(v)n(ariable)f(can)
i(b)q(e)g(\\deco)q(ded")g(to)g(retriev)o(e)g(the)g(information)d(returned)k
(in)e(it)g(b)o(y)g(the)h(last)f(receiv)o(e)i(op)q(eration)75
686 y(that)c(up)q(dated)h(it,)e(using)g(the)i(query)f(functions)g(listed)g(b)
q(elo)o(w.)75 783 y Fu(MPI)p 144 783 V 15 w(GET)p 225 783 V
15 w(SOURCE\(status,)19 b(source\))117 832 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
878 y(out)f Fu(source)629 b Ft(source)13 b(rank)h(\(in)o(teger\))158
954 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
1004 y(w)o(as)h(used)h(to)e(receiv)o(e\).)75 1101 y Fu(MPI)p
144 1101 V 15 w(GET)p 225 1101 V 15 w(TAG\(status,)20 b(tag\))117
1151 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 1197 y(out)f Fu(tag)695 b Ft(message)13
b(tag)h(\(in)o(teger\))158 1273 y Fx(Returns)h(the)f(tag)g(of)f(receiv)o(ed)i
(message.)75 1370 y Fu(MPI)p 144 1370 V 15 w(GET)p 225 1370
V 15 w(LEN\(status,)20 b(len\))117 1420 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
1466 y(out)f Fu(len)695 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 1542 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 1592 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 1642
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 1770 y Fo(Discussion:)158
1816 y Ft(The)f(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 1861 y(\(e.g.,)h(passing)k(the)d Fm(MPI)p
435 1861 12 2 v 13 w(ANY)p 508 1861 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 1907 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
1953 y(hence,)d(reen)o(tran)o(t.)18 b(This)c(prev)o(en)o(ts)f(confusions)i
(in)f(the)f(cast)g(where)g(m)o(ultiple)j(receiv)o(es)e(can)f(b)q(e)h(p)q
(osted)g(b)o(y)f(a)g(pro)q(cess.)158 2164 y Fo(Implemen)o(tation)g(note:)158
2213 y Ft(One)g(exp)q(ects)h(deco)q(de)g(functions)g(to)f(b)q(e)h(inlined)h
(in)f(man)o(y)g(implemen)o(tations.)158 2346 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 2396 y Fu(status)d Fx(parameters)h(in)g
(the)h(same)e(w)o(a)o(y)h(as)g(the)h(basic)f Fu(MPI)p 1014
2396 14 2 v 15 w(SEND)f Fx(and)h Fu(MPI)p 1271 2396 V 15 w(RECV)g
Fx(op)q(erations)g(describ)q(ed)i(in)e(this)75 2445 y(section.)18
b(The)12 b(additional)d(op)q(erations)j(pro)o(vide)f(mec)o(hanisms)e(to)i
(con)o(trol)g(more)f(precisely)j(the)e(comm)o(unication)75
2495 y(proto)q(col.)p eop
%%Page: 5 5
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(5)75 45 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 136 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 186 y(whic)o(h)k(are)g(describ)q
(ed)i(in)d(this)h(section.)75 294 y Fl(Order)42 b Fx(Messages)15
b(are)e Fp(nonovertaking)p Fx(,)g(within)f(eac)o(h)h(con)o(text:)19
b(if)12 b(t)o(w)o(o)g(messages)h(are)g(successiv)o(ely)h(sen)o(t)g(from)75
344 y(the)g(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
393 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 443 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 493 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
543 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 543
14 2 v 15 w(ANY)p 1732 543 V 15 w(SOURCE)75 593 y Fx(is)j(not)g(used)g(in)g
(receiv)o(es.)158 642 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 692 y(pro)q(cess)k(are)e(ordered.)35 b(On)20 b(the)f(other)h
(hand,)g(if)e(the)i(pro)q(cess)h(is)e(m)o(ultithreaded,)f(then)i(the)g(seman)
o(tics)f(of)75 742 y(thread)h(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 792 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 842 y(other.)26
b(In)16 b(suc)o(h)h(case,)g(the)g(t)o(w)o(o)f(messages)g(sen)o(t)h(can)g(b)q
(e)g(receiv)o(ed)g(in)f(an)o(y)g(order.)26 b(Similarly)l(,)13
b(if)j(t)o(w)o(o)g(receiv)o(e)75 891 y(op)q(erations)10 b(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 941 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 1049
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 1099 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 1149 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
1199 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 1248 y(p)q(osted)i(at)f(the)g(same)f(destination)h(pro)q(cess.)75
1356 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 1406 y(send)h(w)o(as)f(p)q(osted.)25
b(Then)16 b(it)g(is)f(p)q(ossible)i(that)e(the)i(destination)f(rep)q(eatedly)
h(p)q(osts)g(a)e(receiv)o(e)i(that)f(matc)o(hes)75 1456 y(this)e(send,)h(y)o
(et)g(the)g(message)f(is)h(nev)o(er)g(receiv)o(ed,)h(b)q(ecause)g(it)e(is)g
(eac)o(h)h(time)e(o)o(v)o(ertak)o(en)i(b)o(y)f(another)h(message,)75
1506 y(sen)o(t)j(from)e(another)h(source.)30 b(Similarly)l(,)15
b(supp)q(ose)j(that)g(a)f(receiv)o(e)h(w)o(as)f(p)q(osted.)30
b(Then)17 b(it)g(is)g(p)q(ossible)h(that)75 1556 y(messages)12
b(that)f(matc)o(h)g(this)g(receiv)o(e)i(are)f(rep)q(eatedly)h(receiv)o(ed,)g
(y)o(et)f(the)g(receiv)o(e)h(is)e(nev)o(er)i(satis\014ed,)f(b)q(ecause)h(it)
75 1605 y(is)e(o)o(v)o(ertak)o(en)g(b)o(y)g(other)h(receiv)o(es)h(p)q(osted)f
(at)f(this)g(no)q(de)h(\(b)o(y)f(other)h(executing)g(threads\).)18
b(It)11 b(is)g(the)h(programmer)75 1655 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 1784
y Fo(Discussion:)158 1829 y(Need)g(to)h(b)q(e)g(discussed)g(b)o(y)g(MPIF)158
1875 y Ft(Alternativ)o(e)g(p)q(ositions:)158 1921 y(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 1966 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 2012 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 2058 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
2103 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 2149 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 2195 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 2240 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 2286
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 2332 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 2377 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
2423 y(3.)k(Both)c(send)h(and)g(receiv)o(es)g(are)f(handled)i(fairly)m(.)158
2473 y(Oppinions?)p eop
%%Page: 6 6
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(6)75 45 y Fl(Resource)18 b(lim)o(itations)39
b Fx(There)17 b(is)f(no)g(requiremen)o(t)g(that)h(MPI)f(bu\013ers)i(message)e
(data.)24 b(Th)o(us,)17 b(a)f(v)n(alid)f(MPI)75 95 y(implemen)o(tatio)o(n)10
b(of)h Fu(MPI)p 484 95 14 2 v 15 w(SEND)h Fx(is)g(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)e(b)q(een)i
(initiated.)i(Ev)o(en)75 145 y(if)c(messages)g(are)h(bu\013ered,)h(bu\013er)g
(space)f(can)g(b)q(e)g(exhausted.)19 b(It)12 b(is)h(v)n(alid)e(for)h(MPI)h
(to)f(bu\013er)i(some)d(messages,)75 195 y(and)17 b(not)f(to)h(bu\013er)h
(some)e(other,)h(blo)q(c)o(king)f(the)h(sender)i(un)o(til)d(a)g(matc)o(hing)f
(reciev)o(e)j(is)f(p)q(osted.)27 b(In)17 b(general,)75 244
y(the)g(programmer)d(can)j(mak)o(e)e(no)h(assumptions)g(on)g(the)h(a)o(v)n
(ailabilit)o(y)c(of)j(bu\013er)h(space,)h(and)e(ho)o(w)g(this)h(space)75
294 y(is)e(allo)q(cated.)23 b(Th)o(us,)15 b(p)q(ortable)h(\(safe\))g(MPI)g
(co)q(de)g(should)f(w)o(ork)h(under)g(the)g(assumption)e(that)i(an)f
(arbitrary)75 344 y(subset)21 b(of)f(the)g(send)h(op)q(erations)f(are)h
(going)d(to)i(return)h(b)q(efore)g(a)f(matc)o(hing)e(receiv)o(e)j(is)f(p)q
(osted,)i(and)d(the)75 394 y(remaining)12 b(will)g(blo)q(c)o(k)i(un)o(til)f
(a)g(matc)o(hing)f(receiv)o(e)k(is)d(p)q(osted.)158 444 y(Ho)o(w)o(ev)o(er,)g
(MPI)f(implemen)o(tation)d(will)i(pro)o(vide)h(information)d(on)j(the)h
(amoun)o(t)e(of)h(a)o(v)n(ailable)e(bu\013er)j(space)75 493
y(and)h(on)f(the)i(bu\013ering)f(p)q(olicy)f(via)g(the)i(en)o(vironmen)o(tal)
d(enquiries)i(describ)q(ed)i(in)e(Chapter)g Fv(??)p Fx(.)158
543 y(Examples)f(\(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 593 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 718 y Fu(CALL)21
b(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75 768 y(IF)g(\(rank.EQ.0\))f
(THEN)140 818 y(CALL)h(MPI_SEND\(sendbuf,)e(count,)h(MPI_REAL,)g(1,)h(tag,)g
(comm,)g(ierr\))140 868 y(CALL)g(MPI_RECV\(recvbuf,)e(count,)h(MPI_REAL,)g
(1,)h(tag,)g(comm,)g(ierr\))75 918 y(ELSE)86 b(!)22 b(rank.EQ.1)140
968 y(CALL)f(MPI_RECV\(recvbuf,)e(count,)h(MPI_REAL,)g(0,)h(tag,)g(comm,)g
(ierr\))140 1017 y(CALL)g(MPI_SEND\(sendbuf,)e(count,)h(MPI_REAL,)g(0,)h
(tag,)g(comm,)g(context\))75 1067 y(END)g(IF)158 1143 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 1268 y Fu(CALL)21 b(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75
1318 y(IF)g(\(rank.EQ.0\))f(THEN)140 1368 y(CALL)h(MPI_RECV\(recvbuf,)e
(count,)h(MPI_REAL,)g(1,)h(tag,)g(comm,)g(ierr\))140 1418 y(CALL)g
(MPI_SEND\(sendbuf,)e(count,)h(MPI_REAL,)g(1,)h(tag,)g(comm,)g(ierr\))75
1468 y(ELSE)86 b(!)22 b(rank.EQ.1)140 1517 y(CALL)f(MPI_RECV\(recvbuf,)e
(count,)h(MPI_REAL,)g(0,)h(tag,)g(comm,)g(ierr\))140 1567 y(CALL)g
(MPI_SEND\(sendbuf,)e(count,)h(MPI_REAL,)g(0,)h(tag,)g(comm,)g(ierr\))75
1617 y(END)g(IF)158 1693 y Fx(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 1742 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 1792 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 1842 y(executed.)h(This)14
b(program)e(will)g(deadlo)q(c)o(k.)158 1892 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 2024 y Fu(CALL)21 b(MPI_COMM_RANK\(com)o(m,)e
(rank,)i(ierr\))75 2074 y(IF)g(\(rank.EQ.0\))f(THEN)140 2123
y(CALL)h(MPI_SEND\(sendbuf,)e(count,)h(MPI_REAL,)g(1,)h(tag,)g(comm,)g
(ierr\))140 2173 y(CALL)g(MPI_RECV\(recvbuf,)e(count,)h(MPI_REAL,)g(1,)h
(tag,)g(comm,)g(ierr\))75 2223 y(ELSE)86 b(!)22 b(rank.EQ.1)140
2273 y(CALL)f(MPI_SEND\(sendbuf,)e(count,)h(MPI_REAL,)g(0,)h(tag,)g(comm,)g
(ierr\))140 2323 y(CALL)g(MPI_RECV\(recvbuf,)e(count,)h(MPI_REAL,)g(0,)h
(tag,)g(comm,)g(ierr\))75 2372 y(END)g(IF)158 2504 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
2554 y(the)h(receiv)o(e)g(op)q(eration)e(starts.)26 b(F)m(or)15
b(the)i(program)d(to)i(complete,)f(it)g(is)h(necessary)i(that)e(at)g(least)g
(one)g(of)f(the)75 2604 y(t)o(w)o(o)d(messages)g(sen)o(t)h(is)f(bu\013ered)i
(out)e(of)f(either)i(pro)q(cesses')h(address)g(space.)k(Th)o(us,)13
b(this)f(program)e(can)j(succeed)75 2654 y(only)g(if)f(the)i(comm)o(unicatio)
o(n)d(system)i(has)g(su\016cien)o(t)h(bu\013er)g(space)h(to)e(bu\013er)h
Fu(count)e Fx(w)o(ords)i(of)f(data,)f(and)h(the)75 2704 y(MPI)h(implemen)o
(tation)c(bu\013ers)16 b(messages.)p eop
%%Page: 7 7
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(7)75 45 y Fw(1.5)59 b(T)-5 b(yp)r(e)18 b(Matching)75
136 y Fx(One)d(can)f(think)f(of)h(message)f(transmission)g(as)h(consisting)g
(of)f(three)i(phases:)126 207 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
283 y(2.)20 b(A)14 b(message)f(is)h(transferred)i(from)c(sender)j(to)f
(receiv)o(er)126 360 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
431 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 481 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 530 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
580 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 630 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 680 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 730 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 779
y(sender)e(and)f(receiv)o(er.)158 829 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 879
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 879 14 2 v 15 w(INTEGER)13
b Fx(matc)o(hes)i Fu(MPI)p 1699 879 V 15 w(INTEGER)p Fx(,)75
929 y Fu(MPI)p 144 929 V 15 w(REAL)e Fx(matc)o(hes)h Fu(MPI)p
487 929 V 15 w(REAL)p Fx(,)e(and)i(so)g(on.)158 979 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
1029 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 1078 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 1078 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
1128 y(an)i(en)o(try)h(with)e(t)o(yp)q(e)i(name)e Fu(MPI)p
600 1128 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
1178 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 1178 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 1228 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 1278
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 1327 y(memory)m(.)158 1377 y(W)m(e)c(th)o(us)g(ha)o(v)o(e)g(t)o
(w)o(o)f(cases:)137 1448 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 1448 V 15 w(BYTE)p Fx(\),)h(where)h(the)179 1498
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
1547 y(call)d(and)h(in)f(the)i(receiv)o(er)g(program)d(should)i(all)f(matc)o
(h.)137 1624 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 1624 V 15 w(BYTE)p Fx(\),)d(where)k(b)q(oth)e(sender)i(and)d(re-)179
1674 y(ceiv)o(er)e(use)h(the)f(datat)o(yp)q(e)g Fu(MPI)p 686
1674 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 1724 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 1774 y(the)g(same.)158
1844 y(Examples:)158 1894 y(1st)g(program:)140 1965 y Fu(CALL)21
b(MPI_COMM_RANK\(comm,)d(rank,)j(ierr\))140 2014 y(IF\(rank.EQ.0\))e(THEN)249
2064 y(CALL)i(MPI_SEND\(a\(1\),)e(10,)i(MPI_REAL,)f(1,)i(tag,)f(comm,)f
(ierr\))445 2114 y(ELSE)249 2164 y(CALL)h(MPI_RECV\(a\(1\),)e(15,)i
(MPI_REAL,)f(0,)i(tag,)f(comm,)f(ierr\))140 2214 y(END)i(IF)158
2284 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 2334 y(ten)h(real)g(n)o(um)o(b)q(ers,)f(starting)h(from)e
Fu(a\(1\))p Fx(.)75 2384 y(2nd)i(program:)140 2455 y Fu(CALL)21
b(MPI_COMM_RANK\(comm,)d(rank,)j(ierr\))140 2504 y(IF\(rank.EQ.0\))e(THEN)249
2554 y(CALL)i(MPI_SEND\(a\(1\),)e(10,)i(MPI_REAL,)f(1,)i(tag,)f(comm,)f
(ierr\))445 2604 y(ELSE)249 2654 y(CALL)h(MPI_RECV\(a\(1\),)e(40,)i
(MPI_BYTE,)f(0,)i(tag,)f(comm,)f(ierr\))140 2704 y(END)i(IF)p
eop
%%Page: 8 8
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(8)158 45 y(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 95 y(3rd)i(program:)140 174 y Fu(CALL)21
b(MPI_COMM_RANK\(comm,)d(rank,)j(ierr\))140 224 y(IF\(rank.EQ.0\))e(THEN)249
274 y(CALL)i(MPI_SEND\(a\(1\),)e(40,)i(MPI_BYTE,)f(1,)i(tag,)f(comm,)f
(ierr\))445 324 y(ELSE)249 373 y(CALL)h(MPI_RECV\(a\(1\),)e(60,)i(MPI_BYTE,)f
(0,)i(tag,)f(comm,)f(ierr\))140 423 y(END)i(IF)158 502 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
631 y Fo(Discussion:)158 676 y Ft(The)j(b)q(eha)o(vior)i(of)e(erroneous)h(co)
q(de)f(is)h(implemen)o(tation-de)q(p)q(end)q(en)o(t.)29 b(It)15
b(is)i(desireable)h(but)f(not)f(required)i(that)75 722 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 768 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 813 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
859 y(co)q(des)f(will)g(ha)o(v)o(e)g(the)f(same)g(b)q(eha)o(vior.)75
1078 y Fw(1.6)59 b(Data)19 b(conversion)75 1169 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 1219 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 1269 y(W)m(e)g(use)g(the)h(follo)o(wing)c(terminology:)75
1348 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(.)75 1429 y Fv(represen)o(tati)o(on)e
(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
1479 y(p)q(oin)o(t)d(to)h(IEEE)g(\015oating)f(p)q(oin)o(t.)158
1558 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
1608 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 1658 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 1707 y(to)c(the)h(greatest)h(p)q(ossible)e(extend,)h(the)g
Fv(v)m(alue)f Fx(represen)o(ted.)22 b(Ho)o(w)o(ev)o(er,)15
b(rounding)e(errors)j(and)e(o)o(v)o(er\015o)o(w)g(and)75 1757
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 1807 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 1857 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 1907 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 1956 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
2006 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 2056 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 2106 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
2156 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 2156 14 2 v
15 w(BYTE)p Fx(\),)e(then)h(the)h(binary)e(represen)o(tation)75
2205 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 2255 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 2305 y(no)e(represen)o(tation)h(con)o(v)o(ersion)f(is)g
(required.)158 2355 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 2405 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 2405 V 15 w(BYTE)g Fx(and)75 2455 y(of)18 b Fu(MPI)p
196 2455 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 2455 V 15 w(CHARACTER)f
Fx(can)i(only)f(matc)o(h)f(a)75 2504 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
2554 y Fu(MPI)p 144 2554 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
2604 y(Consider)g(the)h(previous)f(three)h(examples.)158 2654
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
2704 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,)p eop
%%Page: 9 9
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)753 b Fx(9)75 45 y(then)13 b(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 95 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 145 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
195 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 244 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 294 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
344 y(is)i(unde\014ned.)158 394 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 444 y(The)h(third)g
(program)e(is)h(correct.)22 b(The)16 b(exact)f(same)f(sequence)i(of)f(fourt)o
(y)f(b)o(ytes)h(that)g(w)o(ere)g(loaded)g(from)75 493 y(the)j(send)g
(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)75
543 y(en)o(vironmen)o(t.)i(The)c(message)f(sen)o(t)i(has)e(exactly)h(the)g
(same)f(length)h(\(in)f(b)o(ytes\))h(and)g(the)g(same)f(binary)g(repre-)75
593 y(sen)o(tation)i(as)h(the)g(message)f(receiv)o(ed.)26 b(If)16
b(the)h(v)n(ariables)f(in)g(the)h(send)g(bu\013er)g(are)g(of)e(di\013eren)o
(t)j(t)o(yp)q(es)f(as)f(the)75 643 y(v)n(ariables)f(in)h(the)g(receiv)o(e)i
(bu\013er,)f(or)f(they)g(are)g(of)g(the)g(same)f(t)o(yp)q(e)i(but)f
(di\013eren)o(t)h(data)f(represen)o(tations)i(are)75 693 y(used,)c(then)g
(the)g(bits)g(stored)g(in)f(the)i(receiv)o(e)f(bu\013er)h(ma)o(y)c(enco)q(de)
k(v)n(alues)e(that)h(are)g(di\013eren)o(t)g(from)e(the)i(v)n(alues)75
742 y(they)g(enco)q(ded)i(in)d(the)i(send)f(bu\013er.)158 792
y(Data)i(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
842 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 892 y(The)i(curren)o(t)h(draft)f(do)q(es)g(not)g
(pro)o(vide)f(a)g(mec)o(hanism)f(for)h(in)o(terlanguage)g(comm)o(unicatio)o
(n:)21 b(messages)75 942 y(sen)o(t)d(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 992 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 1041
y(and)g(C)g(datat)o(yp)q(es)g(are)g(distinct\).)22 b(If)14
b(in)o(terlanguage)h(comm)o(uni)o(cation)d(is)j(needed)h(then)g(one)f(needs)h
(to)f(in)o(v)o(ok)o(e)75 1091 y(C)i(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 1141 y(program.)158 1269 y Fo(Implemen)o(tation)c(note:)158
1315 y Ft(The)d(curren)o(t)g(de\014nition)j(do)q(es)d(not)h(require)g
(messages)g(to)e(carry)i(t)o(yp)q(e)f(information.)18 b(A)9
b(message)i(can)f(b)q(e)h(comp)q(osed)75 1361 y(and)h(sen)o(t)f(using)i(only)
g(the)e(information)i(pro)o(vided)h(b)o(y)d(the)h(send)f(call,)i(and)f(can)g
(b)q(e)f(receiv)o(ed)i(and)f(stored)f(using)i(only)g(the)75
1406 y(information)g(pro)o(vided)g(b)o(y)e(the)g(receiv)o(e)h(call.)18
b(If)10 b(messages)i(are)f(sen)o(t)g(b)q(et)o(w)o(een)g(di\013eren)o(t)h(mac)
o(hines)h(then)e(one)h(can)f(either)75 1452 y(use)h(a)g(\\univ)o(ersal")j
(data)d(enco)q(ding)i(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)e(order)g(to)g(con)o(v)o(ert)75
1498 y(data)h(at)g(the)h(sender,)f(or)g(use)g(kno)o(wledge)i(of)e(the)g
(sender)h(en)o(vironmen)o(t)h(in)e(order)h(to)f(con)o(v)o(ert)g(data)h(at)f
(the)g(receiv)o(er.)18 b(In)75 1543 y(either)12 b(case)g(the)g(datat)o(yp)q
(e)g(parameter)g(in)h(the)e(lo)q(cal)i(call)g(can)f(b)q(e)g(used)g(to)g
(deriv)o(e)g(the)g(t)o(yp)q(es)g(of)f(the)h(v)n(alues)g(transferred.)75
1589 y(Ho)o(w)o(ev)o(er,)g(additional)17 b(t)o(yp)q(e)c(information)i
(carried)f(b)o(y)g(messages)g(can)f(pro)o(vide)i(b)q(etter)e(error)g
(detection.)158 1800 y Fo(Discussion:)158 1846 y Ft(MPI)h(do)q(es)h(not)f
(handle)i(in)o(terlanguage)h(comm)o(unication)g(b)q(ecause)e(there)f(seem)g
(to)g(b)q(e)g(no)h(agreed)g(standards)g(for)75 1891 y(in)o(terlanguage)i(t)o
(yp)q(e)e(con)o(v)o(ersions.)24 b(The)14 b(curren)o(t)h(\(non\)solution)i
(means)e(that)g(in)o(terlanguage)i(comm)o(unication)g(relies)75
1937 y(on)c(the)g(v)o(endor)h(sp)q(eci\014c)h(rules)f(for)f(in)o(terlanguage)
j(calls)e(at)f(eac)o(h)h(site.)75 2157 y Fw(1.7)59 b(Comm)n(unicat)o(ion)17
b(Mo)r(des)75 2248 y Fx(The)i(basic)f(send)i(op)q(eration)e(describ)q(ed)i
(in)e(Section)h(1.2)e(used)i(the)g Fv(standard)e Fx(comm)o(uni)o(cation)f(mo)
q(de.)30 b(In)75 2298 y(suc)o(h)15 b(comm)o(unicatio)o(n)c(mo)q(de,)i(a)h
(send)h(op)q(eration)f(can)g(b)q(e)h(started)g(whether)h(or)e(not)g(a)f(matc)
o(hing)g(receiv)o(e)i(w)o(as)75 2347 y(p)q(osted.)j(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
2397 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 2447 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 2497
y(sender)g(side.)158 2547 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 2597 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 2646 y(matc)o(hing)e(receiv)o(e)k(has)e(b)q
(een)h(executed)h(on)e(the)g(receiv)o(er)i(side.)28 b(This)17
b(a)o(v)o(oids)f(the)h(need)h(to)f(bu\013er)h(message)75 2696
y(data)f(out)h(of)f(sender)i(or)f(receiv)o(er)h(memory)m(.)26
b(In)18 b(this)f(case)i(the)f(send)h(op)q(eration)e(completes)h(only)e(after)
i(the)p eop
%%Page: 10 10
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(10)75 45 y(matc)o(hing)16 b(receiv)o(e)i(has)g(started)g
(executing.)30 b(On)17 b(the)h(other)h(hand,)e(it)g(is)h(also)e(p)q(ossible)i
(for)f(MPI)h(to)f(bu\013er)75 95 y(messages,)12 b(so)g(as)g(to)g(allo)o(w)f
(the)h(sender)i(to)e(pro)q(ceed)h(ahead)g(of)e(the)i(receiv)o(er.)19
b(In)12 b(suc)o(h)g(case)h(the)g(send)g(op)q(eration)75 145
y(ma)o(y)d(complete)i(sucessfully)g(b)q(efore)h(the)g(message)f(w)o(as)f
(receiv)o(ed.)19 b(Th)o(us,)12 b(the)h(basic)f(send)h(op)q(eration)f(describ)
q(ed)75 195 y(in)g(the)g(previous)h(section)g(is)f Fv(async)o(hronous)p
Fx(,)d(since)k(its)f(return)i(do)q(es)f(not)f(imply)e(a)h(sync)o(hronization)
i(with)e(the)75 244 y(\(remote\))j(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 294 y(There)g(are)f(t)o(w)o(o)g(additional)e(comm)o(unicatio)o
(n)f(mo)q(des:)158 344 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 394 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 444 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
493 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 543 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 593 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 643 y(pro)o(vides)14 b(addtional)f(information)e(to)i(the)i(comm)o
(unicatio)o(n)c(subsystem,)j(when)g(using)g(the)g(ready)h(mo)q(de.)158
693 y(A)d(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 742 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 792 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 842 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 892 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 942 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 992 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
1041 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
1091 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
1141 y(sync)o(hronous)h(send)g(is)e(a)h Fv(global)e Fx(ev)o(en)o(t.)158
1191 y(Tw)o(o)g(new)i(send)g(functions)f(are)g(pro)o(vided)g(for)g(the)g(t)o
(w)o(o)g(new)g(comm)o(unication)d(mo)q(des.)17 b(The)c(comm)o(unica-)75
1241 y(tion)g(mo)q(de)g(is)h(indicated)g(b)o(y)f(a)h(one)g(letter)h
(pre\014x:)k Fu(R)13 b Fx(for)h(ready)g(and)g Fu(S)f Fx(for)h(sync)o(hronous)
158 1340 y(Send)g(in)g(ready)g(mo)q(de)75 1437 y Fu(MPI)p 144
1437 14 2 v 15 w(RSEND)21 b(\(start,)f(count,)h(datatype,)f(dest,)g(tag,)h
(comm\))117 1487 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 1533 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 1578 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
1624 y(in)g Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
1670 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
1715 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))158
1891 y Fx(Send)g(in)g(sync)o(hronous)h(mo)q(de)75 1988 y Fu(MPI)p
144 1988 V 15 w(SSEND)21 b(\(start,)f(count,)h(datatype,)f(dest,)g(tag,)h
(comm\))117 2038 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 2084 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 2130 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
2175 y(in)g Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
2221 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
2267 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))158
2343 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 2393 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 2442 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 2492 y(receiv)o(e)c(can)e(complete)g(b)q(efore)i(the)f(matc)o(hing)d
(send)k(has)e(completed)g(\(or)h(course,)g(it)f(can)h(complete)f(only)g
(after)75 2542 y(the)h(matc)o(hing)f(send)h(has)g(started\).)158
2592 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 2642 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 2692 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)p eop
%%Page: 11 11
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(11)75 45 y(the)16 b(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 95 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 145
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 195 y(In)e(a)f(m)o(ultithreaded)f(implemen)o
(tation)e(of)j(MPI,)h(a)f(blo)q(c)o(king)g(send)h(or)g(receiv)o(e)g(op)q
(eration)g(ma)o(y)e(only)g(blo)q(c)o(k)75 244 y(the)18 b(executing)h(thread,)
f(not)g(the)g(en)o(tire)g(pro)q(cess.)31 b(Th)o(us,)19 b(while)e(a)g(thread)h
(is)g(blo)q(c)o(k)o(ed)f(w)o(aiting)g(for)g(a)g(send)75 294
y(or)f(receiv)o(e)h(to)f(complete,)g(other)g(threads)h(ma)o(y)e(execute)i
(within)f(the)g(same)g(address)h(space.)25 b(In)17 b(suc)o(h)f(case)h(it)75
344 y(the)e(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 394 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 444 y(unde\014ned.)158 572 y Fo(Discussion:)158
618 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 829 y Fo(Implemen)o(tation)h(note:)45 b Ft(A)15
b(ready)h(send)g(can)g(b)q(e)f(implemen)o(ted)j(as)e(a)f(standard)i(send;)g
(in)f(suc)o(h)g(case)g(there)75 874 y(will)f(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 920 y(A)f(standard)h(send)g(can)f(b)q(e)h(implemen)o(ted)h
(as)e(a)g(sync)o(hronous)i(send.)j(In)c(suc)o(h)f(case,)g(no)h(data)f
(bu\013ering)i(is)f(needed.)158 966 y(A)g(p)q(ossible)i(comm)o(unication)h
(proto)q(col)e(for)f(the)g(v)n(arious)i(comm)o(unication)g(mo)q(des)f(is)g
(outlined)h(b)q(elo)o(w:)158 1011 y Fm(ready)j(send)p Ft(:)d(The)e(message)h
(is)g(sen)o(t)f(asap;)h(an)f(ac)o(kno)o(wledge)i(is)f(returned)g(b)o(y)g
(receiv)o(er.)k(The)13 b(proto)q(col)i(is)f(\(send,)75 1057
y(ac)o(k\).)158 1103 y Fm(synchronou)o(s)i(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 1148 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 1194
y(no)o(w)e(sends)h(the)f(message.)18 b(The)12 b(proto)q(col)j(is)f(\(req,)e
(ac)o(k-req,)h(send,)h(ac)o(k\).)158 1240 y Fm(standard)j(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.)158 1289
y(Of)g(course,)i(there)f(are)g(man)o(y)h(other)f(p)q(ossible)i(c)o(hoices.)75
1509 y Fw(1.8)59 b(Nonblo)r(cking)20 b(comm)m(unicat)o(ion)75
1600 y Fx(One)f(can)g(impro)o(v)o(e)d(p)q(erformance)i(on)g(man)o(y)f
(systems)h(b)o(y)g(o)o(v)o(erlaping)f(comm)o(unication)e(and)j(computation.)
75 1650 y(This)13 b(is)g(esp)q(ecially)g(true)h(on)f(systems)g(where)h(comm)o
(unicatio)o(n)d(can)i(b)q(e)g(executed)i(autonomously)c(b)o(y)i(an)g(in)o
(tel-)75 1700 y(ligen)o(t)d(comm)o(unicatio)o(n)e(con)o(troller.)17
b(Ligh)o(t-w)o(eigh)o(t)9 b(threads)i(are)g(one)g(mec)o(hanism)d(for)i(ac)o
(hieving)g(suc)o(h)h(o)o(v)o(erlap.)75 1750 y(An)j(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 1800 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
1849 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 1899 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 1949 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 1999 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 2049 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 2098
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 2148 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 2198 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 2248 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 2298
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 2347 y Fu(asynchronous)p Fx(.)j(These)16
b(carry)h(the)f(same)f(meaning.)21 b(The)16 b(initiation)d(and)j(completion)e
(of)h(a)g(standard)h(send)75 2397 y(do)c(not)h(dep)q(end)g(on)g(the)g(status)
g(of)f(a)g(matc)o(hing)e(receiv)o(e.)19 b(A)13 b(ready)g(send)g(can)g(b)q(e)g
(initiated)e(only)h(if)g(a)g(matc)o(hing)75 2447 y(receiv)o(e)h(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 2497
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 2547 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 2597 y(receiving)e(the)h(message)e
(generated)j(b)o(y)d(the)i(send)f(op)q(eration.)158 2646 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 2696 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)p eop
%%Page: 12 12
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(12)75 45 y(b)q(ecause)13 b(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 95 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 145 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 195 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 311 y Fs(1.8.1)49 b(Comm)o(unication)14 b(Objects)75
387 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 437 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 487 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 537 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 587 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 636 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 686 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 802 y Fs(1.8.2)49
b(Comm)o(unication)14 b(initiation)75 879 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 929 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
979 y(non)o(blo)q(c)o(king.)158 1078 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 1175 y Fu(MPI)p
144 1175 14 2 v 15 w(ISEND\(handle,)19 b(start,)i(count,)f(datatype,)g(dest,)
h(tag,)g(comm\))117 1225 y Ft(out)14 b Fu(handle)629 b Ft(handle)14
b(to)f(comm)o(unication)j(ob)r(ject)117 1271 y(in)e Fu(start)675
b Ft(initial)16 b(address)e(of)e(send)i(bu\013er)g(\(c)o(hoice\))117
1317 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 1362 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
1408 y(in)g Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
1454 y(in)e Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
1499 y(in)g Fu(comm)697 b Ft(comm)o(unicator)14 b(\(handle\))158
1675 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 1772 y Fu(MPI)p 144 1772 V 15 w(IRSEND\(handle,)19
b(start,)i(count,)f(datatype,)g(dest,)h(tag,)g(comm\))117 1822
y Ft(out)14 b Fu(handle)629 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r
(ject)117 1868 y(in)e Fu(start)675 b Ft(initial)16 b(address)e(of)e(send)i
(bu\013er)g(\(c)o(hoice\))117 1913 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
1959 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 2005 y(in)g Fu(dest)697 b Ft(rank)13
b(of)g(destination)j(\(in)o(teger\))117 2050 y(in)e Fu(tag)719
b Ft(message)13 b(tag)h(\(in)o(teger\))117 2096 y(in)g Fu(comm)697
b Ft(comm)o(unicator)14 b(\(handle\))158 2272 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
2369 y Fu(MPI)p 144 2369 V 15 w(ISSEND\(handle,)19 b(start,)i(count,)f
(datatype,)g(dest,)h(tag,)g(comm\))117 2419 y Ft(out)14 b Fu(handle)629
b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r(ject)117 2464
y(in)e Fu(start)675 b Ft(initial)16 b(address)e(of)e(send)i(bu\013er)g(\(c)o
(hoice\))117 2510 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
2556 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 2601 y(in)g Fu(dest)697 b Ft(rank)13
b(of)g(destination)j(\(in)o(teger\))117 2647 y(in)e Fu(tag)719
b Ft(message)13 b(tag)h(\(in)o(teger\))117 2693 y(in)g Fu(comm)697
b Ft(comm)o(unicator)14 b(\(handle\))p eop
%%Page: 13 13
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(13)158 145 y(Initiate)13 b(a)h(non)o(blo)q(c)o(king)f(receiv)o
(e.)75 242 y Fu(MPI)p 144 242 14 2 v 15 w(IRECV)21 b(\(handle,)f(start,)h
(count,)f(datatype,)g(source,)g(tag,)h(comm\))117 292 y Ft(out)14
b Fu(handle)629 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r(ject)117
337 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 383 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
429 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 474 y(in)g Fu(source)653 b Ft(rank)13
b(of)g(source)h(\(in)o(teger\))117 520 y(in)g Fu(tag)719 b
Ft(message)13 b(tag)h(\(in)o(teger\))117 566 y(in)g Fu(comm)697
b Ft(comm)o(unicator)14 b(\(handle\))158 642 y Fx(The)h(handle)f(parameter)h
(should)f(not)h(b)q(e)g(asso)q(ciated)g(with)f(a)h(comm)o(unicati)o(on)d(ob)r
(ject)j(when)g(passed)h(in.)75 692 y(The)g(call)g(allo)q(cates)f(suc)o(h)i
(ob)r(ject)g(and)f(asso)q(ciates)h(it)f(with)f(the)i(handle.)24
b(The)16 b(handle)g(can)h(b)q(e)f(used)h(later)f(to)75 741
y(query)e(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 791 y(A)21 b(sender)h(should)f(not)g(up)q
(date)g(an)o(y)f(part)h(of)f(a)h(send)h(bu\013er)f(after)g(a)g(non)o(blo)q(c)
o(king)e(send)j(op)q(eration)75 841 y(returned,)14 b(and)e(un)o(til)g(the)h
(send)h(completes.)j(A)c(receiv)o(er)h(should)e(not)h(access)h(or)e(up)q
(date)i(an)o(y)e(part)g(of)g(a)h(receiv)o(e)75 891 y(bu\013er)i(after)f(a)g
(non)o(blo)q(c)o(king)e(receiv)o(e)j(op)q(eration)f(returned,)h(and)f(un)o
(til)f(the)h(receiv)o(e)i(completes.)75 1007 y Fs(1.8.3)49
b(Comm)o(unication)14 b(Completion)75 1084 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 1134 y(in)d(the)h(send)h(bu\013er,)f
(or)g(an)o(y)f(other)h(lo)q(cation)f(that)h(can)f(b)q(e)i(referenced)h(b)o(y)
d(the)h(send)h(op)q(eration.)k(It)15 b(do)q(es)g(not)75 1183
y(indicate)c(that)f(the)h(message)g(has)g(b)q(een)g(receiv)o(ed;)i(rather,)f
(it)e(ma)o(y)e(ha)o(v)o(e)j(b)q(een)h(bu\013ered)g(b)o(y)e(the)h(comm)o
(unication)75 1233 y(subsystem.)21 b(Ho)o(w)o(ev)o(er,)15 b(if)g(a)f
Fu(synchronous)f Fx(mo)q(de)h(send)h(w)o(as)g(used,)h(the)f(completion)e(of)i
(the)g(send)h(op)q(eration)75 1283 y(indicates)d(that)h(a)f(matc)o(hing)e
(receiv)o(e)j(w)o(as)g(initiated,)e(and)h(that)g(the)h(message)e(will)g(ev)o
(en)o(tually)h(b)q(e)h(receiv)o(ed)g(b)o(y)75 1333 y(this)g(matc)o(hing)e
(receiv)o(e.)158 1383 y(The)k(completion)e(of)h(a)h(receiv)o(e)h(op)q
(eration)e(indicates)i(that)e(the)i(receiv)o(er)g(is)f(no)o(w)f(free)h(to)g
(access)i(the)e(lo-)75 1432 y(cations)i(in)f(the)h(receiv)o(e)h(bu\013er,)g
(whic)o(h)e(con)o(tain)h(the)g(receiv)o(ed)h(message,)e(or)h(an)o(y)f(other)h
(lo)q(cation)f(that)h(can)75 1482 y(b)q(e)e(referenced)i(b)o(y)d(the)h
(receiv)o(e)h(op)q(eration.)23 b(It)15 b(do)q(es)h(not)g(indicate)f(that)h
(the)g(matc)o(hing)d(send)j(op)q(eration)g(has)75 1532 y(completed)d(\(but)i
(indicates,)e(of)h(course,)g(that)g(the)h(send)g(w)o(as)e(initiated\).)75
1679 y Fu(MPI)p 144 1679 V 15 w(WAIT)21 b(\(handle,)f(status\))117
1729 y Ft(in)14 b Fu(handle)653 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r
(ject)117 1774 y(out)e Fu(status)629 b Ft(status)13 b(ob)r(ject)158
1851 y Fx(A)k(call)e(to)i Fu(MPI)p 407 1851 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 1901 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
1950 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 1950 V 15 w(WAIT)g Fx(and)h(the)h(handle)e(b)q(ecomes)i(n)
o(ull.)158 2000 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 2050 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 2100 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 2150 y(in)i(the)i(call.)158 2278 y Fo(Discussion:)158
2324 y Ft(Do)e(w)o(e)g(agree)g(on)h(this?)k(\(this)c(implies)h(some)e
(restriction)i(on)e(the)h(implemen)o(tation\))75 2503 y Fu(MPI)p
144 2503 V 15 w(TEST)21 b(\(handle,)f(flag,)h(status\))117
2553 y Ft(in)14 b Fu(handle)653 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r
(ject)117 2599 y(out)36 b Fu(flag)651 b Ft(logical)117 2644
y(out)14 b Fu(status)629 b Ft(status)13 b(ob)r(ject)p eop
%%Page: 14 14
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(14)158 45 y(A)12 b(call)e(to)i Fu(MPI)p 392
45 14 2 v 15 w(TEST)e Fx(returns)k Fu(flag=true)9 b Fx(if)i(the)h(op)q
(eration)f(iden)o(ti\014ed)h(b)o(y)f Fu(handle)g Fx(is)g(complete.)17
b(In)11 b(suc)o(h)75 95 y(case,)g(the)g(status)f(ob)r(ject)h(is)f(set)h(to)e
(con)o(tain)h(information)d(on)i(the)i(completed)e(op)q(eration;)i(if)e(the)h
(comm)o(unication)75 145 y(ob)r(ject)15 b(w)o(as)e(created)j(b)o(y)e(a)f(non)
o(blo)q(c)o(king)g(send)h(or)g(receiv)o(e,)h(then)g(it)e(is)h(deallo)q(cated)
g(and)f(the)i(handle)f(b)q(ecomes)75 195 y(n)o(ull.)38 b(The)21
b(call)f(returns)i Fu(flag=false)p Fx(,)e(otherwise.)40 b(In)20
b(suc)o(h)i(case,)h(the)e(v)n(alue)f(of)h(the)g(status)h(ob)r(ject)f(is)75
244 y(unde\014ned.)158 373 y Fo(Discussion:)158 423 y Ft(W)m(e)13
b(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
555 y Fu(MPI)p 227 555 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 605 y(it)j(m)o(ust)e(ev)o(en)o(tually)i
(succeed.)158 655 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 704 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 754 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
804 y(In)i(m)o(ultithreaded)f(en)o(vironmen)o(t,)g(the)h(use)h(of)e(a)h(blo)q
(c)o(king)e(receiv)o(e)k(op)q(eration)d(\()p Fu(MPI)p 1556
804 V 16 w(WAIT)p Fx(\))g(ma)o(y)f(allo)o(w)75 854 y(the)e(op)q(erating)f
(system)h(to)f(desc)o(hedule)i(the)f(blo)q(c)o(k)o(ed)g(thread)g(and)f(sc)o
(hedule)i(another)f(thread)g(for)f(execution,)h(if)75 904 y(suc)o(h)h(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 904 V 15 w(TEST)p Fx(\))g(allo)o(ws)e(the)j
(user)g(to)f(sc)o(hedule)75 954 y(alternativ)o(e)h(activities)f(within)g(a)h
(single)g(thread)g(of)f(execution.)75 1053 y(Example:)140 1136
y Fu(CALL)21 b(MPI_COMM_RANK\(comm,)d(rank,)j(ierr\))140 1186
y(IF\(rank.EQ.0\))e(THEN)249 1236 y(CALL)i(MPI_ISEND\(handle,)e(a\(1\),)h
(10,)i(MPI_REAL,)d(1,)j(tag,)f(comm,)g(ierr\))249 1286 y(****)g(do)h(some)f
(computation)e(to)j(mask)f(latency)f(****)249 1335 y(CALL)h
(MPI_WAIT\(handle,)e(status,)h(ierr\))445 1385 y(ELSE)249 1435
y(CALL)h(MPI_IRECV\(handle,)e(a\(1\),)h(15,)i(MPI_REAL,)d(0,)j(tag,)f(comm,)g
(ierr\))249 1485 y(****)g(do)h(some)f(computation)e(to)j(mask)f(latency)f
(****)249 1535 y(CALL)h(MPI_WAIT\(handle,)e(status,)h(ierr\))119
1584 y(END)h(IF)158 1667 y Fx(The)16 b(functions)f Fu(MPI)p
494 1667 V 15 w(WAIT)g Fx(and)g Fu(MPI)p 760 1667 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 1717 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 1767 y(Non)o(blo)q(c)o(king)g(comm)o(unicatio)o(ns)f(cannot)i
(b)q(e)g(implemen)o(ted)e(as)i(blo)q(c)o(king)f(comm)o(unicatio)o(ns,)e(ev)o
(en)k(in)e(the)75 1817 y Fu(synchronous)f Fx(comm)o(uni)o(cation)f(mo)q(de.)
17 b(Consider)d(the)h(follo)o(wing)c(example:)140 1900 y Fu(CALL)21
b(MPI_COMM_RANK\(comm,)d(rank,)j(ierr\))140 1950 y(IF\(rank.EQ.0\))e(THEN)249
2000 y(CALL)i(MPI_ISEND\(handle1,)d(a\(1\),)j(count,)g(MPI_REAL,)f(1,)h
(tag1,)g(comm,)g(ierr\))249 2049 y(CALL)g(MPI_ISEND\(handle2,)d(a\(2\),)j
(count,)g(MPI_REAL,)f(1,)h(tag2,)g(comm,)g(ierr\))249 2099
y(CALL)g(MPI_WAIT\(handle1,)e(status,)h(ierr\))249 2149 y(CALL)h
(MPI_WAIT\(handle2,)e(status,)h(ierr\))424 2199 y(ELSE)249
2249 y(CALL)h(MPI_IRECV\(handle2,)d(a\(2\),)j(count,)g(MPI_REAL,)f(0,)h
(tag2,)g(comm,)g(ierr\))249 2298 y(CALL)g(MPI_IRECV\(handle1,)d(a\(1\),)j
(count,)g(MPI_REAL,)f(0,)h(tag1,)g(comm,)g(ierr\))249 2348
y(CALL)g(MPI_WAIT\(handle2,)e(status,)h(ierr\))249 2398 y(CALL)h
(MPI_WAIT\(handle1,)e(status,)h(ierr\))119 2448 y(END)h(IF)158
2531 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 2581 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 2631 y(the)14 b(other)h(hand,)e(the)i(co)q(de)g(will)d
(deadlo)q(c)o(k)i(if)f(blo)q(c)o(king)g(send)h(and)g(receiv)o(es)i(are)e
(used.)p eop
%%Page: 15 15
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(15)75 45 y Fs(1.8.4)49 b(Multiple)17 b(Completions)75
122 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 172 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
172 14 2 v 15 w(WAITANY)f Fx(or)h Fu(MPI)p 1426 172 V 16 w(TESTANY)e
Fx(can)j(b)q(e)g(used)g(to)75 221 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 221 V 15 w(WAITALL)g Fx(or)g Fu(MPI)p 1634 221
V 15 w(TESTALL)g Fx(can)75 271 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 400 y Fo(Discussion:)158
449 y Fm(MPI)p 220 449 12 2 v 13 w(TESTALL)f Fo(is)j(new.)75
629 y Fu(MPI)p 144 629 14 2 v 15 w(WAITANY)20 b(\(count,)h(array)p
618 629 V 14 w(of)p 676 629 V 16 w(handles,)f(index,)g(status\))117
679 y Ft(in)14 b Fu(count)675 b Ft(list)14 b(length)g(\(in)o(teger\))117
725 y(in)g Fu(array)p 275 725 V 15 w(of)p 334 725 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
770 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\))117 816 y(out)f Fu(status)629
b Ft(return)13 b(status)h(ob)r(ject)158 892 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 942 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 992
y(in)f(the)i(ob)r(ject)g(asso)q(ciated)f(with)g(the)g(status.)158
1042 y(The)23 b(successful)h(execution)f(of)f Fu(MPI)p 768
1042 V 15 w(WAITANY\(count,)d(array)p 1220 1042 V 15 w(of)p
1279 1042 V 15 w(handles,)h(index,)h(status\))g Fx(has)75 1091
y(the)f(same)f(e\013ect)i(as)e(the)h(successful)h(execution)g(of)d
Fu(MPI)p 1017 1091 V 16 w(WAIT\(array)p 1253 1091 V 13 w(of)p
1310 1091 V 15 w(handles[i],)i(status\))p Fx(,)f(where)75 1141
y Fu(i)c Fx(is)f(the)i(v)n(alue)e(returned)j(b)o(y)e Fu(index)p
Fx(.)20 b(If)14 b(more)g(then)i(one)f(op)q(eration)g(is)g(enabled)g(and)g
(can)g(terminate,)f(one)h(is)75 1191 y(arbitrarily)e(c)o(hosen.)19
b(There)c(is)f(no)f(requiremen)o(t)h(that)g(the)h(c)o(hoice)f(satisfy)g(an)o
(y)f(fairness)h(criterion.)158 1319 y Fo(Discussion:)158 1369
y Ft(Need)f(to)g(revisit)i(fainess)f(here,)f(together)g(with)h(fairness)g(in)
g(general.)75 1549 y Fu(MPI)p 144 1549 V 15 w(TESTANY\()20
b(count,)h(array)p 618 1549 V 14 w(of)p 676 1549 V 16 w(handles,)f(index,)g
(status\))117 1599 y Ft(in)14 b Fu(count)675 b Ft(list)14 b(length)g(\(in)o
(teger\))117 1644 y(in)g Fu(array)p 275 1644 V 15 w(of)p 334
1644 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 1690 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
1740 y(none)d(completed)g(\(in)o(teger\))117 1786 y(out)g Fu(status)629
b Ft(return)13 b(status)h(ob)r(ject)158 1862 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 1912 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
1961 y(of)g(that)g(op)q(eration)h(in)f(the)h(ob)r(ject)g(asso)q(ciated)h
(with)e(the)h(status.)24 b(In)15 b(the)h(latter)g(case,)g(it)f(returns)i(a)f
(v)n(alue)f(of)75 2011 y(-1)e(in)g Fu(index)g Fx(and)h Fu(status)e
Fx(is)i(unde\014ned.)19 b(Lik)o(e)13 b Fu(MPI)p 925 2011 V
15 w(TESTT)p Fx(,)f(this)i(is)g(a)f(non)o(blo)q(c)o(king)f(op)q(eration,)i
(that)f(returns)75 2061 y(immediatl)o(y;)j(and)h(if)g(one)h(busy)f(w)o(aits)g
(with)h Fu(MPI)p 896 2061 V 15 w(TESTANY)p Fx(,)d(and)i(some)g(op)q(eration)g
(on)h(the)g(list)f(is)g(enabled,)75 2111 y(then)e Fu(MPI)p
239 2111 V 15 w(TESTANY)d Fx(will)g(ev)o(en)o(tually)i(return)h
Fu(flag)21 b(=)g(true)p Fx(.)75 2208 y Fu(MPI)p 144 2208 V
15 w(WAITALL\()f(count,)h(array)p 618 2208 V 14 w(of)p 676
2208 V 16 w(handles,)f(array)p 998 2208 V 14 w(of)p 1056 2208
V 16 w(status\))117 2258 y Ft(in)14 b Fu(count)675 b Ft(lists)14
b(length)g(\(in)o(teger\))117 2303 y(in)g Fu(array)p 275 2303
V 15 w(of)p 334 2303 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 2349 y(out)f Fu(array)p
299 2349 V 14 w(of)p 357 2349 V 16 w(status)445 b Ft(arra)o(y)13
b(of)g(status)g(ob)r(jects)158 2425 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 2475 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
2525 y Fu(i)p Fx(-th)14 b(en)o(try)g(in)g Fu(array)p 434 2525
V 14 w(of)p 492 2525 V 16 w(status)e Fx(is)i(set)h(to)e(the)i(return)g
(status)g(of)e(the)h Fu(i)p Fx(-th)g(op)q(eration.)75 2622
y Fu(MPI)p 144 2622 V 15 w(TESTALL\(count,)19 b(array)p 596
2622 V 15 w(of)p 655 2622 V 15 w(handles,)h(flag,)h(array)p
1107 2622 V 14 w(of)p 1165 2622 V 16 w(status\))117 2672 y
Ft(in)14 b Fu(count)675 b Ft(lists)14 b(length)g(\(in)o(teger\))p
eop
%%Page: 16 16
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(16)117 45 y Ft(in)14 b Fu(array)p 275 45 14
2 v 15 w(of)p 334 45 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 90 y(out)f Fu(flag)673
b Ft(\(logical\))117 135 y(out)14 b Fu(array)p 299 135 V 14
w(of)p 357 135 V 16 w(status)445 b Ft(arra)o(y)13 b(of)g(status)g(ob)r(jects)
158 211 y Fx(Returns)19 b Fu(flag)i(=)g(true)d Fx(if)f(all)g(comm)o(unicati)o
(ons)f(asso)q(ciated)i(with)g(handles)g(in)g(the)h(arra)o(y)e(ha)o(v)o(e)h
(com-)75 261 y(pleted.)32 b(In)19 b(this)f(case,)i(eac)o(h)f(status)g(en)o
(try)h(is)e(set)h(to)f(the)h(status)h(of)d(the)j(corresp)q(onding)f(comm)o
(unicatio)o(n.)75 311 y(Otherwise,)e Fu(flag)k(=)g(false)14
b Fx(is)i(returned)h(and)e(the)h(v)n(alues)f(of)f(the)i(status)g(en)o(tries)h
(are)e(unde\014ned.)24 b(This)15 b(is)g(a)75 361 y(non)o(blo)q(c)o(king)d(op)
q(eration)i(that)f(returns)i(immediatl)o(y;)10 b(if)j(one)h(busy)f(w)o(aits)g
(with)h Fu(MPI)p 1434 361 V 15 w(TESTALL)p Fx(,)d(and)i(all)g(op)q(era-)75
411 y(tions)h(in)f(the)i(list)e(b)q(ecome)h(enabled,)g(then)g
Fu(MPI)p 842 411 V 15 w(TESTALL)f Fx(will)f(ev)o(en)o(tually)h(return)i
Fu(flag)21 b(=)h(true)p Fx(.)158 510 y(Example:)140 640 y Fu(CALL)f
(MPI_COMM_RANK\(comm,)d(rank,)j(ierr\))140 690 y(IF\(rank)g(<)g(2\))206
740 y(THEN)249 790 y(CALL)g(MPI_ISEND\(handle,)e(a,)i(n,)g(MPI_REAL,)f(2,)i
(tag,)f(comm,)f(ierr\))249 840 y(****)h(do)h(some)f(computation)e(to)j(mask)f
(latency)f(****)249 889 y(CALL)h(MPI_WAIT\(handle,)e(status,)h(ierr\))206
939 y(ELSE)249 989 y(CALL)h(MPI_IRECV\(handle_li)o(st\(0\))o(,)e(a,)i(n,)h
(MPI_REAL,)e(0,)h(tag,)g(comm,)g(ierr\))249 1039 y(CALL)g
(MPI_IRECV\(handle_li)o(st\(1\))o(,)e(b,)i(n,)h(MPI_REAL,)e(1,)h(tag,)g
(comm,)g(ierr\))249 1089 y(****)g(do)h(some)f(computation)e(to)j(mask)f
(latency)f(****)249 1139 y(CALL)h(MPI_WAITANY\(2,)e(handle_list,)h(index,)g
(status,)g(ierr\))249 1188 y(IF\(index.EQ.0\))293 1238 y(THEN)337
1288 y(****)g(handle)h(message)f(from)h(process)g(0)g(****)337
1338 y(CALL)f(MPI_WAIT\(handle_list)o(\(1\),)e(status,)j(ierr\))337
1388 y(****)f(handle)h(message)f(from)h(process)g(1)g(****)293
1437 y(ELSE)337 1487 y(****)f(handle)h(message)f(from)h(process)g(1)g(****)
337 1537 y(CALL)f(MPI_WAIT\(handle_list)o(\(0\),)e(status,)j(ierr\))337
1587 y(****)f(handle)h(message)f(from)h(process)g(0)g(****)271
1637 y(END)g(IF)140 1686 y(END)h(IF)158 1767 y Fx(The)c(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 1817 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 1866 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 1916 y(The)e Fu(status)f Fx(argumen)o(t)f(in)h Fu(MPI)p
682 1916 V 16 w(WAITANY)f Fx(and)h Fu(MPI)p 1006 1916 V 15
w(WAITALL)g Fx(and)g(the)h Fu(array)p 1443 1916 V 15 w(of)p
1502 1916 V 15 w(status)f Fx(argumen)o(t)f(in)75 1966 y Fu(MPI)p
144 1966 V 15 w(WAITALL)i Fx(and)h Fu(MPI)p 471 1966 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 2016 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 2016 V 14 w(of)p 1233 2016 V 16 w(handles)f Fx(are)i(send)h(op)q
(erations,)f(then)75 2066 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 2066
V 15 w(of)p 1240 2066 V 15 w(status)p Fx(\))13 b(argumen)o(t.)158
2194 y Fo(Discussion:)158 2244 y Ft(Is)g(that)g(agreed?)75
2463 y Fw(1.9)59 b(Prob)r(e)20 b(and)f(Cancel)75 2554 y Fx(The)h
Fu(MPI)p 235 2554 V 15 w(PROBE)e Fx(and)h Fu(MPI)p 530 2554
V 15 w(IPROBE)f Fx(op)q(eration)h(allo)o(ws)f(incoming)f(messages)j(to)f(b)q
(e)h(c)o(hec)o(k)o(ed)g(for,)g(without)75 2604 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)75 2654
y(returned)g(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 2704 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.)p
eop
%%Page: 17 17
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(17)158 45 y(The)13 b Fu(MPI)p 311 45 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
95 y(clean)o(up.)20 b(P)o(osting)14 b(a)h(send)g(or)g(a)f(receiv)o(e)i(ties)f
(user)g(resources)i(\(send)f(or)e(receiv)o(e)i(bu\013ers\),)g(and)e(a)h
(cancel)g(ma)o(y)75 145 y(b)q(e)g(needed)g(to)f(free)g(these)i(resources)g
(gracefully)m(.)158 273 y Fo(Discussion:)158 323 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 373 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 423 y(function.)75 602 y Fu(MPI)p 144
602 V 15 w(IPROBE\(source,)19 b(tag,)i(comm,)g(flag,)f(status\))117
652 y Ft(in)14 b Fu(source)653 b Ft(source)13 b(rank,)h(or)f
Fm(MPI)p 1273 652 12 2 v 13 w(ANY)p 1346 652 V 13 w(SOURCE)d
Ft(\(in)o(teger\))117 698 y(in)k Fu(tag)719 b Ft(tag)13 b(v)n(alue)h(or)f
Fm(MPI)p 1221 698 V 13 w(ANY)p 1294 698 V 13 w(TAG)f Ft(\(in)o(teger\))117
743 y(in)i Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)117
789 y(out)h Fu(flag)673 b Ft(\(logical\))117 835 y(out)14 b
Fu(status)629 b Ft(status)13 b(ob)r(ject)158 911 y Fu(MPI)p
227 911 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 961 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 1011 y(If)k Fu(MPI)p 186 1011 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 1060 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 1060 V 15 w(RECV)75 1110 y Fx(executed)k(at)e(the)g(same)f(p)q
(oin)o(t)g(in)h(the)g(program.)158 1160 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 1210 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 1260 y(The)20 b(call)e(to)h Fu(MPI)p
455 1260 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
1310 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 1359 y(the)j(length)f(of)g(the)h(prob)q(ed)g
(message,)f(and)g Fu(MPI)p 870 1359 V 15 w(GET)p 951 1359 V
15 w(LEN)g Fx(cannot)g(bb)q(e)h(used)h(after)e(a)g(call)g(to)g
Fu(MPI)p 1701 1359 V 15 w(PROBE)f Fx(to)75 1409 y(query)g(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 1459 y(dep)q(end)g(on)f(the)h(t)o
(yp)q(es)g(of)f(these)i(elemen)o(ts.\))i(Instead,)d(a)f(di\013eren)o(t)h
(status)g(deco)q(ding)g(function)e(that)i(pro)o(vides)75 1509
y(the)f(datat)o(yp)q(e)h(as)f(argumen)o(t)e(can)i(b)q(e)h(used)g(in)e(this)h
(case.)75 1606 y Fu(MPI)p 144 1606 V 15 w(PROBE)p 269 1606
V 15 w(LEN\(status,)19 b(datatype,)h(count\))117 1656 y Ft(in)14
b Fu(status)653 b Ft(status)13 b(ob)r(ject)117 1701 y(in)h
Fu(datatype)609 b Ft(message)13 b(datat)o(yp)q(e)117 1747 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 1823 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 1873 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 2001
y Fo(Discussion:)158 2047 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 2093 y(message)14 b(is)g(merely)h(a)f(string)g(of)g(b)o
(ytes)g(and)g(the)g(in)o(terpretation)i(of)d(these)h(b)o(ytes)g(in)o(to)h(a)e
(sequence)i(of)e(t)o(yp)q(ed)i(elemen)o(ts)75 2138 y(is)g(done)g(using)h(the)
f(datat)o(yp)q(e)h(information)g(pro)o(vided)h(b)o(y)e(the)f(lo)q(cal)i(comm)
o(unication)i(call.)k(The)15 b(abilit)o(y)i(to)d(use)h(suc)o(h)75
2184 y(implemen)o(tation)21 b(strategy)e(is)g(deemed)g(to)f(b)q(e)g(an)h(imp)
q(ortan)o(t)g(goal.)33 b(In)19 b(suc)o(h)f(implemen)o(tation)q(,)k(when)c(a)g
(message)75 2230 y(arriv)o(es,)c(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 2275 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
2321 y(incoming)18 b(message)e(can)g(b)q(e)g(computed)h(b)o(y)f
Fm(MPI)p 818 2321 12 2 v 13 w(PROBE)p 931 2321 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
2367 y(datat)o(yp)q(e)e(parameter.)158 2412 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 2458 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 2504 y Fo(Need)h(b)q(e)h(discussed)g(b)o(y)g(MPIF)158
2549 y Ft(W)m(e)f(ma)o(y)g(w)o(an)o(t)f(a)h(call)h(to)e Fm(MPI)p
616 2549 V 13 w(PROBE)p 729 2549 V 12 w(LEN)g Ft(to)g(b)q(e)h(signi\014can)o
(t)i(not)e(just)g(after)f(prob)q(e,)i(but)f(also)g(after)g(receiv)o(e,)g(for)
75 2595 y(consistency)h(reasons.)p eop
%%Page: 18 18
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(18)158 45 y Ft(It's)13 b(tempting)i(to)f(merge)g
Fm(MPI)p 615 45 12 2 v 13 w(GET)p 688 45 V 13 w(LEN)e Ft(and)j
Fm(MPI)p 909 45 V 13 w(PROBE)p 1022 45 V 12 w(LEN)d Ft(in)o(to)j(one)f(call.)
21 b(E.g.,)13 b(alw)o(a)o(ys)i(pro)o(vide)g(a)f(datat)o(yp)q(e)75
91 y(argumen)o(t,)f(ev)o(en)g(though)g(it)g(is)g(redundan)o(t)h(after)e(a)g
(receiv)o(e.)18 b(But)13 b(then)f(w)o(e)g(imp)q(ose)i(an)f(additional)i
(burden)f(on)e(regular)75 136 y(receiv)o(es.)158 269 y Fx(A)i(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 319 y(call)f(to)h
Fu(MPI)p 271 319 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 369 y(receiv)o(e)d(o)q(ccurred)g(after)f(the)g(prob)q(e.)18
b(If)10 b(the)h(receiving)g(pro)q(cess)i(is)d(m)o(ultithreaded,)g(it)g(is)h
(the)g(user)g(resp)q(onsibilit)o(y)75 418 y(to)j(ensure)h(that)f(the)h(last)e
(condition)g(holds.)158 547 y Fo(Discussion:)158 592 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
638 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 684 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 684 12 2 v 13 w(PROBE)10 b
Ft(returns)j(information)h(on)f(the)75 729 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
775 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 775 V 13 w(PROBE)p
Ft(.)75 955 y Fu(MPI)p 144 955 14 2 v 15 w(PROBE\()21 b(source,)f(tag,)h
(comm,)g(datatype,)f(status\))117 1005 y Ft(in)14 b Fu(source)653
b Ft(source)13 b(rank,)h(or)f Fm(MPI)p 1273 1005 12 2 v 13
w(ANY)p 1346 1005 V 13 w(SOURCE)d Ft(\(in)o(teger\))117 1050
y(in)k Fu(tag)719 b Ft(tag)13 b(v)n(alue,)h(or)f Fm(MPI)p 1232
1050 V 13 w(ANY)p 1305 1050 V 13 w(TAG)e Ft(\(in)o(teger\))117
1096 y(in)j Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)117
1142 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 1187 y(out)g Fu(status)629 b Ft(status)13
b(ob)r(ject)158 1264 y Fu(MPI)p 227 1264 14 2 v 15 w(PROBE)g
Fx(b)q(eha)o(v)o(es)i(lik)o(e)f Fu(MPI)p 663 1264 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 1313 y(matc)o(hing)e(message)i(has)g(b)q(een)h(found.)
158 1442 y Fo(Discussion:)158 1487 y(CANCEL)f(has)h(b)q(een)g(c)o(hanged)f
(since)h(last)h(draft)75 1667 y Fu(MPI)p 144 1667 V 15 w(CANCEL\(handle\))117
1717 y Ft(in)e Fu(handle)653 b Ft(handle)14 b(to)f(comm)o(unication)j(ob)r
(ject)158 1793 y Fx(A)g(call)f(to)g Fu(MPI)p 404 1793 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 1843 y(\(send)i(or)f(receiv)o
(e\).)21 b(The)14 b(cancel)h(call)e(is)h(non-blo)q(c)o(king,)f(and)h(lo)q
(cal.)k(It)c(returns)i(immedia)o(tly)m(,)10 b(p)q(ossibly)k(b)q(efore)75
1893 y(the)g(comm)o(unication)d(is)j(actually)f(cancelled.)158
1943 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
1992 y(call)f(to)h Fu(MPI)p 267 1992 V 15 w(WAIT)f Fx(or)g
Fu(MPI)p 495 1992 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 2042 y(then)f(information)d(ab)q(out)j(that)g(will)e(b)q(e)i(returned)i
(in)d(the)h(status)h(argumen)o(t)d(of)h(the)i(op)q(eration)e(that)h
(completes)75 2092 y(the)17 b(comm)o(unicatio)o(n.)22 b(If)16
b(a)g(comm)o(unication)d(is)j(mark)o(ed)f(for)h(cancellation,)f(then)i(a)f
Fu(MPI)p 1539 2092 V 15 w(WAIT)g Fx(call)f(for)h(that)75 2142
y(comm)o(unication)f(is)j(guaran)o(teed)h(to)g(return,)h(irresp)q(ectiv)o(e)g
(of)e(the)h(status)g(of)f(other)h(pro)q(cesses;)k(similarly)16
b(if)75 2192 y Fu(MPI)p 144 2192 V 15 w(TEST)11 b Fx(is)h(rep)q(eatedly)i
(called)e(in)f(a)h(busy)h(w)o(ait)e(lo)q(op)g(for)h(a)g(cancelled)h(comm)o
(unicati)o(on,)c(then)k Fu(MPI)p 1699 2192 V 15 w(TEST)e Fx(will)75
2241 y(ev)o(en)o(tually)i(b)q(e)i(successful.)158 2291 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 2341 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 2391 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 2441
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)75 2491 y(receiv)o(e)k(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 2540 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 2590 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 2640 y(another)f(receiv)o(e.)p eop
%%Page: 19 19
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(19)75 45 y Fu(MPI)p 144 45 14 2 v 15 w(IS)p
203 45 V 15 w(CANCELLED\(status,)19 b(flag\))117 95 y Ft(in)14
b Fu(status)653 b Ft(return)13 b(status)h(ob)r(ject)117 140
y(in)g Fu(flag)697 b Ft(\(logical\))158 216 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
266 y(celled)h(successfully)m(.)24 b(In)16 b(suc)o(h)g(case,)h(all)e(other)h
(\014elds)g(of)f Fu(status)f Fx(\(suc)o(h)j(as)f Fu(length)e
Fx(or)i Fu(tag)p Fx(\))f(are)h(unde\014ned.)75 316 y(Returns)h
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
366 y Fu(MPI)p 144 366 V 15 w(IS)p 203 366 V 15 w(CANCELLED)11
b Fx(\014rst,)j(to)f(c)o(hec)o(k)h(whether)g(the)g(op)q(eration)f(w)o(as)f
(cancelled,)i(b)q(efore)g(c)o(hec)o(king)f(on)g(the)g(other)75
415 y(v)n(alues)h(of)f(the)h(return)h(status.)158 544 y Fo(Implemen)o(tation)
e(note:)158 589 y Ft(The)g(cancel)h(op)q(eration)h(ma)o(y)e(b)q(e)g(exp)q
(ensiv)o(e)j(to)c(implemen)o(t)j(on)f(some)f(systems.)75 809
y Fw(1.10)59 b(P)n(ersistent)19 b(comm)n(un)o(ication)e(objects)75
978 y Fo(Discussion:)158 1028 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 1161 y Fx(Often)o(times)i(a)g
(comm)o(uni)o(cation)d(with)j(the)h(same)e(parameter)h(list)g(is)g(rep)q
(eatedly)h(executed)h(within)d(the)75 1210 y(inner)f(lo)q(op)e(of)h(a)f
(parallel)g(computation.)18 b(In)c(suc)o(h)h(situation,)e(it)h(ma)o(y)e(b)q
(e)j(p)q(ossible)f(to)g(optimize)f(the)i(comm)o(u-)75 1260
y(nication)g(b)o(y)h(binding)g(once)h(the)f(list)g(of)g(comm)o(unicatio)o(n)e
(parameters)i(to)g(the)h(comm)o(unicatio)o(n)d(ob)r(ject)j(and,)75
1310 y(then,)f(using)e(rep)q(eatedly)i(the)g(comm)o(unication)c(handle)j(to)f
(initiate)h(and)f(complete)h(messages.)21 b(The)16 b(comm)o(u-)75
1360 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 1410 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 1459 y(send)i(p)q(ort)g(to)f(the)h(receiv)o(e)h(p)q
(ort:)25 b(this)17 b(construct)i(allo)o(w)d(to)h(reduce)i(the)f(o)o(v)o
(erhead)g(of)e(the)i(comm)o(unication)75 1509 y(b)q(et)o(w)o(een)e(pro)q
(cessor)h(and)e(comm)o(unicatio)o(n)d(con)o(troller,)j(but)g(not)g(the)h(o)o
(v)o(erhead)f(of)f(comm)o(unication)e(b)q(et)o(w)o(een)75 1559
y(one)i(comm)o(unication)d(con)o(troller)i(and)h(another.)158
1609 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 1659 y(comm)o(unication.)158 1709 y(The)k(function)f
Fu(MPI)p 478 1709 V 15 w(CREATE)p 625 1709 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 1758 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 1855 y Fu(MPI)p 144 1855 V 15 w(CREATE)p
291 1855 V 15 w(SEND\(handle,)k(start,)h(count,)h(datatype,)f(dest,)h(tag,)g
(comm\))117 1905 y Ft(out)14 b Fu(handle)629 b Ft(handle)14
b(to)f(comm)o(unication)j(ob)r(ject)117 1950 y(in)e Fu(start)675
b Ft(initial)16 b(address)e(of)e(send)i(bu\013er)g(\(c)o(hoice\))117
1995 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 2040 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 2085 y(in)h Fu(dest)697 b Ft(rank)13
b(of)g(destination)j(\(in)o(teger\))117 2130 y(in)e Fu(tag)719
b Ft(message)13 b(tag)h(\(in)o(teger\))117 2175 y(in)g Fu(comm)697
b Ft(handle)14 b(to)f(comm)o(unicator)i(ob)r(ject)158 2251
y Fx(The)h Fu(handle)e Fx(parameter)i(should)f(b)q(e)h(n)o(ull)f(when)h(the)g
(call)f(is)g(executed.)25 b(The)16 b(call)f(asso)q(ciates)i(it)e(to)g(the)75
2301 y(newly)f(created)h(comm)o(unication)c(ob)r(ject.)158
2430 y Fo(Discussion:)158 2475 y Ft(Tw)o(o)h(c)o(hanges:)158
2521 y(1.)29 b Fm(buffer)p 339 2521 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 2567 y(prop)q(osal.)158
2612 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 2658
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 2704 y(used)f(to)f(de\014ne)h(the)f(other)g(comm)o(unication)j(functions.)
p eop
%%Page: 20 20
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(20)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)f(function)g Fu(MPI)p 475 591 V 15 w(CREATE)p
622 591 V 14 w(SSEND)f Fx(creates)i(a)f(comm)o(unicati)o(on)d(ob)r(ject)j
(for)g(a)f(sync)o(hon)o(uous)h(mo)q(de)f(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)j(need)h(b)q(e)f(explicitly)f(deallo)q(cated)g(b)o(y)h(a)f
(call)g(to)g(the)h(function)f Fu(MPI)p 1336 2604 V 15 w(COMM)p
1439 2604 V 15 w(FREE)p Fx(,)g(b)q(elo)o(w.)34 b(W)m(e)20 b(th)o(us)75
2654 y(ha)o(v)o(e)e(t)o(yp)q(e)h(t)o(yp)q(es)g(of)e(comm)o(unication)e(ob)r
(jects:)27 b Fv(p)q(ersisten)o(t)15 b Fx(ob)r(jects,)20 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(,)i(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: 21 21
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(21)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)19 b(call)f(is)h(non)o(blo)q(c)o(king,)f
(and)h(the)h(ob)r(ject)f(mna)o(y)e(not)i(b)q(e)h(deallo)q(cated)e(when)i(the)
f(call)f(returns.)35 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)158 833 y Fx(If)e(the)h(same)f
(comm)o(unicatio)o(n)e(ob)r(ject)j(is)f(used)i(in)e(sev)o(eral)h(concurren)o
(t)h(threads,)f(it)f(is)h(the)g(user)g(resp)q(onsi-)75 883
y(bilit)o(y)e(to)i(co)q(ordinate)g(calls)g(so)g(that)g(the)g(correct)i
(sequence)g(is)e(ob)q(ey)o(ed.)158 932 y(A)k(send)h(op)q(eration)f(initiated)
f(with)h Fu(MPI)p 834 932 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 982 y(lik)o(ewise,)f(a)g
(receiv)o(e)h(op)q(eration)f(initiated)g(with)g Fu(MPI)p 946
982 V 15 w(START)f Fx(can)h(receiv)o(e)i(messages)e(generate)h(b)o(y)f(an)o
(y)g(send)75 1032 y(op)q(eration.)75 1169 y Fw(1.11)59 b(Send-receive)75
1339 y Fo(Discussion:)158 1389 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 1521 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 1571 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 1621 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 1671
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 1720 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 1770 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 1820 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 1870 y(comm)o(unication)g
(subsystem)20 b(tak)o(es)f(care)h(of)e(these)i(issues.)35 b(Also,)19
b(a)g(send-receiv)o(e)i(op)q(eration)d(is)h(useful)g(to)75
1920 y(implemen)o(t)11 b(remote)j(pro)q(cedure)h(calls.)158
1969 y(A)i(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 2019 y(op)q(eration,)c(and)h(vice)g(v)o(ersa.)75
2116 y Fu(MPI)p 144 2116 V 15 w(SENDRECV\(send)p 445 2116 V
13 w(start,)21 b(send)p 699 2116 V 14 w(count,)g(send)p 954
2116 V 15 w(type,)g(dest,)f(recv)p 1318 2116 V 15 w(start,)h(recv)p
1574 2116 V 15 w(count,)f(recv)p 1829 2116 V 15 w(type,)75
2166 y(source,)g(tag,)h(comm,)g(status\))117 2216 y Ft(in)14
b Fu(send)p 253 2216 V 15 w(start)572 b Ft(initial)16 b(address)e(of)e(send)i
(bu\013er)g(\(c)o(hoice\))117 2262 y(in)g Fu(send)p 253 2262
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 2307 y(in)g Fu(send)p 253 2307
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 2353 y(in)h Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))
117 2399 y(out)e Fu(recv)p 277 2399 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
2444 y(in)g Fu(recv)p 253 2444 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
2490 y(in)g Fu(recv)p 253 2490 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 2536 y(in)g
Fu(source)653 b Ft(rank)13 b(of)g(source)h(\(in)o(teger\))117
2581 y(in)g Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
2627 y(in)g Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)117
2673 y(out)h Fu(status)629 b Ft(status)13 b(ob)r(ject)p eop
%%Page: 22 22
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(22)158 45 y(Execute)17 b(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 95 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 145 y(di\013eren)o(t)15
b(length)f(and)f(di\013eren)o(t)i(datat)o(yp)q(es.)158 273
y Fo(Discussion:)158 319 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 364 y(pro)q(cedure)i(call,)g
(the)g(additional)i(freedom)d(mak)o(es)h(sense.)75 544 y Fu(MPI)p
144 544 14 2 v 15 w(EXCHANGE\(start,)19 b(count,)h(datatype,)g(dest,)h
(source,)f(tag,)h(comm,)g(status\))117 594 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 640 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 685 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
731 y(in)g Fu(dest)697 b Ft(rank)13 b(of)g(destination)j(\(in)o(teger\))117
777 y(in)e Fu(source)653 b Ft(rank)13 b(of)g(source)h(\(in)o(teger\))117
822 y(in)g Fu(tag)719 b Ft(message)13 b(tag)h(\(in)o(teger\))117
868 y(in)g Fu(comm)697 b Ft(handle)14 b(to)f(comm)o(unicator)117
914 y(out)h Fu(status)629 b Ft(status)13 b(ob)r(ject)158 990
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
1040 y(receiv)o(e.)158 1168 y Fo(Discussion:)158 1214 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 1259 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 1392 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
1442 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 1491 y(threads.)26 b(A)16 b(send-receiv)o(e)j(cannot)d
(b)q(e)h(implem)o(en)o(ted)e(a)h(blo)q(c)o(king)f(send)i(follo)o(w)o(ed)d(b)o
(y)i(a)g(blo)q(c)o(king)f(receiv)o(e)j(or)75 1541 y(a)e(blo)q(c)o(king)e
(receiv)o(e,)k(follo)o(w)o(ed)c(b)o(y)i(a)f(blo)q(c)o(king)g(send.)25
b(Consider)16 b(the)h(follo)o(wing)c(co)q(de,)k(where)g(t)o(w)o(o)e(pro)q
(cesses)75 1591 y(exc)o(hange)g(messages:)75 1682 y Fu(CALL)21
b(MPI_COMM_RANK\(com)o(m,)e(rank,)i(ierr\))75 1732 y(IF)g(\(rank.EQ.0\))42
b(THEN)140 1782 y(CALL)21 b(MPI_SENDRECV\(send_b)o(uff,)d(count,)j(MPI_REAL,)
f(0,)h(recv_buff,)f(count,)h(MPI_REAL,)271 1832 y(1,)h(tag,)e(comm,)h
(status,)g(ierr\))424 1882 y(ELSE)140 1931 y(CALL)g(MPI_SENDRECV\(send_b)o
(uff,)d(count,)j(MPI_REAL,)f(1,)h(recv_buff,)f(count,)h(MPI_REAL,)271
1981 y(0,)h(tag,)e(comm,)h(status,)g(ierr\))158 2073 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 2122 y(receiv)o(e,)j(follo)o(w)o(ed)e(b)o(y)h(blo)q(c)o
(king)f(send,)i(then)g(the)g(co)q(de)g(will)e(deadlo)q(c)o(k.)17
b(On)c(the)g(other)f(hand,)g(send-receiv)o(e)j(can)75 2172
y(b)q(e)g(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 2222 y(for)9 b(a)h(correct)h(implemen)o(tatio)o(n)c(of)i
Fu(MPI)p 703 2222 V 15 w(EXCHANGE)p Fx(.)f(\(Consider)i(the)g(last)f
(example,)g(with)g(send-receiv)o(e)j(replaced)75 2272 y(b)o(y)i(exc)o
(hange.\))75 2409 y Fw(1.12)59 b(Null)21 b(p)n(ro)r(cesses)75
2583 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: 23 23
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(23)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(noncircular)e
(shift)g(done)g(with)f(calls)h(to)g(send-receiv)o(e.)158 195
y(The)d(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)k(is)g(required)h(in)f
(a)g(call.)k(A)c(comm)o(unication)d(with)j(pro)q(cess)i Fu(MPI)p
1300 244 V 15 w(PROCNULL)c Fx(has)j(no)f(e\013ect:)20 b(a)14
b(send)75 294 y(to)k Fu(MPI)p 199 294 V 15 w(PROCNULL)e Fx(succeeds)k(and)d
(returns)j(asap.)29 b(A)18 b(receiv)o(e)h(from)d Fu(MPI)p 1287
294 V 15 w(PROCNULL)g Fx(succeeds)k(and)d(returns)75 344 y(asap)e(with)h(no)f
(mo)q(di\014cations)f(to)h(the)h(receiv)o(e)h(bu\013er.)24
b(When)16 b(a)f(receiv)o(e)i(with)e Fu(source)21 b(=)g(MPI)p
1645 344 V 15 w(PROCNULL)14 b Fx(is)75 394 y(executed)i(then)e(the)h(status)g
(ob)r(ject)f(returns)i Fu(source)k(=)i(MPI)p 1070 394 V 15
w(PROCNULL)p Fx(,)12 b Fu(tag=MPI)p 1439 394 V 14 w(ANY)p 1519
394 V 15 w(TAG)h Fx(and)h Fu(count=0)p Fx(.)158 522 y Fo(Discussion:)158
568 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 568 12 2 v 13 w(PROCNULL)d Ft(\\equiv)n(alenced")16 b(to)d(-1)g(and)g(to)
g(group)p 1393 568 V 15 w(size,)h(so)f(that,)f(when)i(a)f(shift)g(is)75
613 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
659 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 659 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 705 y(then)13 b(lo)q(ose)i(some)e
(error)g(catc)o(hing)i(capabilit)o(y)m(.)158 750 y(Another)f(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
796 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 842 y(m)o(yrank=0)c(then)g(m)o(yneigh)o(b)q
(or=mpi)p 640 842 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
887 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 1106 y
Fw(1.13)59 b(Derived)19 b(datat)n(yp)r(es)75 1275 y Fo(Discussion:)158
1321 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 1453 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
1503 y(sequence)c(of)d(elemen)o(ts)g(of)g(the)i(same)d(t)o(yp)q(e.)18
b(This)12 b(is)f(to)q(o)h(constraining)f(on)g(t)o(w)o(o)h(accoun)o(ts:)17
b(One)c(often)e(w)o(an)o(ts)h(to)75 1553 y(pass)h(messages)g(that)f(con)o
(tain)g(v)n(alues)h(with)f(di\013eren)o(t)i(datat)o(yp)q(es)f(\(e.g.,)e(an)i
(in)o(teger)g(coun)o(t,)f(follo)o(w)o(ed)f(b)o(y)i(coun)o(t)75
1603 y(real)h(n)o(um)o(b)q(ers\);)g(and)f(one)i(often)f(w)o(an)o(ts)g(to)g
(send)h(noncon)o(tiguous)f(data)f(\(e.g.)19 b(a)14 b(subblo)q(c)o(k)g(of)f(a)
h(matrix\).)j(One)75 1653 y(solution)12 b(is)h(to)g(pro)o(vide)g(functions)g
(that)g(pac)o(k)g(noncon)o(tiguous)f(data)h(in)o(to)f(a)h(con)o(tiguous)g
(bu\013er)h(at)f(the)g(sender)75 1702 y(site)k(and)f(unpac)o(k)g(it)g(bac)o
(k)g(at)h(the)g(receiv)o(er)g(site.)26 b(This)16 b(has)h(the)g(disadv)n(an)o
(tage)e(of)h(requiring)g(an)g(additional)75 1752 y(memory)h(to)h(memory)f
(cop)o(y)i(op)q(eration)g(at)g(b)q(oth)g(sites,)i(ev)o(en)f(when)f(the)h
(comm)o(unicatio)o(n)c(subsystem)k(has)75 1802 y(scatter-gather)d
(capabilities.)k(Instead,)16 b(MPI)f(pro)o(vides)g(mec)o(hanisms)e(to)i(sp)q
(ecify)h(more)e(general,)h(mixed)f(and)75 1852 y(noncon)o(tiguous)d(comm)o
(unication)d(bu\013ers.)19 b(It)12 b(is)f(up)h(to)f(the)h(implemen)o(tation)c
(to)k(decide)g(whether)h(data)e(should)75 1902 y(b)q(e)h(\014rst)g(pac)o(k)o
(ed)g(in)f(a)g(con)o(tiguous)g(bu\013er)h(b)q(efore)g(b)q(een)g(transmitted,)
f(or)h(whether)g(it)f(can)h(b)q(e)g(collected)g(directly)75
1951 y(from)g(where)j(it)f(resides.)158 2001 y(The)j(general)g(mec)o(hanisms)
d(pro)o(vided)j(here)g(allo)o(w)e(to)i(transfer)g(directly)m(,)g(without)f
(cop)o(ying,)g(ob)r(jects)i(of)75 2051 y(v)n(arious)11 b(shap)q(e)h(and)g
(size.)18 b(It)11 b(is)h(not)f(assumed)h(that)f(the)h(MPI)g(library)f(is)h
(cognizan)o(t)f(of)g(the)h(ob)r(jects)h(declared)f(in)75 2101
y(the)h(host)g(language;)e(th)o(us,)i(if)f(one)h(w)o(an)o(ts)f(to)g(transfer)
i(a)e(structure,)j(or)d(an)g(arra)o(y)h(section,)g(it)f(will)f(b)q(e)i
(necessary)75 2151 y(to)e(pro)o(vide)g(in)g(MPI)h(a)f(de\014nition)f(of)h(a)g
(comm)o(unication)d(bu\013er)k(that)f(mimic)o(ks)e(the)i(de\014nition)g(of)g
(the)h(structure)75 2201 y(or)e(arra)o(y)g(section)g(in)g(question.)17
b(These)11 b(facilities)e(can)i(b)q(e)f(used)h(b)o(y)f(library)f(designers)i
(to)f(de\014ne)h(comm)o(unication)75 2250 y(functions)16 b(that)g(can)g
(transfer)h(ob)r(jects)g(de\014ned)g(in)e(the)h(host)h(language)e({)g(b)o(y)h
(deco)q(ding)g(their)g(de\014nitions)g(as)75 2300 y(a)o(v)n(ailable)f(in)i(a)
g(sym)o(b)q(ol)e(table)j(or)f(a)g(dop)q(e)h(v)o(ector.)29 b(Suc)o(h)17
b(higher-lev)o(el)g(comm)o(unication)d(functions)j(are)h(not)75
2350 y(part)c(of)f(MPI.)158 2400 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 2450 y(used)c(so)f(far,)f(with)h(deriv)o(ed)g
(datat)o(yp)q(es,)h(that)f(are)g(constructed)i(from)c(basic)i(datat)o(yp)q
(es)h(using)e(the)i(constructors)75 2499 y(describ)q(ed)f(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
2549 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 2624 y Fn(\017)21
b Fx(A)14 b(sequence)i(of)d(basic)h(t)o(yp)q(es)137 2704 y
Fn(\017)21 b Fx(A)14 b(sequence)i(of)d(in)o(teger)h(\(b)o(yte\))h
(displacemen)o(ts)p eop
%%Page: 24 24
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(24)158 45 y(The)18 b(displacemen)o(ts)f(are)h(not)f(required)h
(to)g(b)q(e)g(p)q(ositiv)o(e,)f(nor)h(are)f(they)h(required)h(to)e(b)q(e)h
(in)f(increasing)75 95 y(order;)d(the)h(order)f(of)g(items)e(ma)o(y)g(not)i
(coincide)g(to)g(their)g(order)h(in)e(storage.)158 145 y(Let)179
228 y Fj(D)q(ataty)q(pe)g Fx(=)f Fn(f)p Fx(\()p Fj(ty)q(pe)519
234 y Fi(0)538 228 y Fj(;)7 b(disp)633 234 y Fi(0)651 228 y
Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)833 234 y Fh(n)p Fk(\000)p
Fi(1)897 228 y Fj(;)g(disp)992 234 y Fh(n)p Fk(\000)p Fi(1)1057
228 y Fx(\))p Fn(g)p Fj(;)75 311 y Fx(b)q(e)17 b(suc)o(h)g(general)g(datat)o
(yp)q(e,)g(where)h Fj(ty)q(pe)764 317 y Fh(i)795 311 y Fx(are)f(basic)f(t)o
(yp)q(es,)i(and)e Fj(disp)1257 317 y Fh(i)1288 311 y Fx(are)h(displacemen)o
(ts.)25 b(This)17 b(general)75 361 y(datat)o(yp)q(e,)11 b(together)f(with)g
(an)g(base)g(address)i Fu(start)p Fx(,)d(sp)q(eci\014es)j(a)d(comm)o
(unication)e(bu\013er:)17 b(the)10 b(comm)o(unication)75 410
y(bu\013er)k(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 416 y Fh(i)1529 410 y Fx(and)12 b(has)h(t)o(yp)q(e)g
Fj(ty)q(pe)1849 416 y Fh(i)1863 410 y Fx(.)75 460 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 510 y(v)n(alue)d
Fj(i)h Fx(has)g(t)o(yp)q(e)g Fj(ty)q(pe)461 516 y Fh(i)476
510 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
560 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
610 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 659 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 659 14 2 v 15 w(SEND\(start,)h(1,)
j(datatype,...\))75 709 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 759 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
809 y Fu(MPI)p 144 809 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 859 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 909 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 958
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 1008 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 1058
y(datat)o(yp)q(e.)h(Th)o(us,)15 b Fu(MPI)p 455 1058 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 1108 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
1158 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 1207 y(b)o(y)h(en)o(tries)h(in)e(this)h(datat)o(yp)q
(e,)g(rounded)g(to)g(satisfy)g(alignmen)o(t)d(requiremen)o(ts.)18
b(I.e.,)13 b(if)179 1290 y Fj(D)q(ataty)q(pe)g Fx(=)f Fn(f)p
Fx(\()p Fj(ty)q(pe)519 1296 y Fi(0)538 1290 y Fj(;)7 b(disp)633
1296 y Fi(0)651 1290 y Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)833
1296 y Fh(n)p Fk(\000)p Fi(1)897 1290 y Fj(;)g(disp)992 1296
y Fh(n)p Fk(\000)p Fi(1)1057 1290 y Fx(\))p Fn(g)p Fj(;)75
1373 y(disp)151 1379 y Fh(r)181 1373 y Fx(=)12 b(min)294 1379
y Fh(j)319 1373 y Fj(disp)395 1379 y Fh(j)426 1373 y Fx(and)i
Fj(disp)583 1379 y Fh(s)612 1373 y Fx(=)e(max)733 1379 y Fh(j)758
1373 y Fj(disp)834 1379 y Fh(j)865 1373 y Fx(then)179 1465
y Fj(extent)p Fx(\()p Fj(D)q(ataty)q(pe)p Fx(\))h(=)f Fj(disp)631
1471 y Fh(s)658 1465 y Fx(+)e Fj(siz)r(eof)t Fx(\()p Fj(ty)q(pe)909
1471 y Fh(s)930 1465 y Fx(\))f Fn(\000)h Fj(disp)1073 1471
y Fh(r)1091 1465 y Fx(;)-1028 b(\(1.1\))75 1556 y(if)8 b(furthermore,)i
Fj(ty)q(pe)422 1562 y Fh(r)451 1556 y Fx(requires)g(alignmen)o(t)d(to)i(a)g
(b)o(yte)h(address)h(that)e(is)g(is)g(a)g(m)o(ultiple)e(of)i(2)1509
1541 y Fh(k)1529 1556 y Fx(,)h(then)g Fj(extent)p Fx(\()p Fj(D)q(ataty)q(pe)p
Fx(\))75 1606 y(is)k(rounded)g(up)g(to)g(the)g(next)h(m)o(ultiple)c(of)j(2)
785 1591 y Fh(k)805 1606 y Fx(.)158 1656 y(Example:)j(Assume)c(that)179
1739 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 1822 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 1872 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 1921
y(this)f(datat)o(yp)q(e)g(is)g(16)f(\(9)h(rounded)g(to)g(the)h(next)f(m)o
(ultiple)e(of)h(8\).)75 2038 y Fs(1.13.1)49 b(Datat)o(yp)q(e)17
b(constructo)o(rs)75 2114 y Fx(The)h(simplest)f(datat)o(yp)q(e)i(constructor)
g(is)f Fu(MPI)p 847 2114 V 15 w(TYPE)p 950 2114 V 15 w(CONTIGUOUS)e
Fx(whic)o(h)i(allo)o(ws)f(to)g(replicate)i(a)f(datat)o(yp)q(e)75
2164 y(in)o(to)13 b(con)o(tiguous)h(lo)q(cations.)75 2261 y
Fu(MPI)p 144 2261 V 15 w(TYPE)p 247 2261 V 15 w(CONTIGUOUS\(count,)k
(oldtype,)i(newtype\))117 2311 y Ft(in)14 b Fu(count)675 b
Ft(replication)16 b(coun)o(t)d(\(in)o(teger\))117 2357 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
2402 y(out)g Fu(newtype)607 b Ft(handle)14 b(to)f(output)h(datat)o(yp)q(e)g
(ob)r(ject)158 2479 y Fu(newtype)e 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 2528 y(added)i(to)g(satisfy)g
(alignemen)o(t)e(requiremen)o(ts)i(of)f(the)i(underlying)e(arc)o(hitecture.)
158 2578 y(Example:)k(let)d Fu(oldtype)e Fx(b)q(e)i(a)g(handle)g(to)f(the)i
(datat)o(yp)q(e)179 2661 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(;)p eop
%%Page: 25 25
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(25)75 45 y(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 128 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 211 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 261 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 344 y Fn(f)p
Fx(\()p Fj(ty)q(pe)292 350 y Fi(0)311 344 y Fj(;)7 b(disp)406
350 y Fi(0)425 344 y Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)607
350 y Fh(n)p Fk(\000)p Fi(1)671 344 y Fj(;)g(disp)766 350 y
Fh(n)p Fk(\000)p Fi(1)830 344 y Fx(\))p Fn(g)p Fj(;)75 427
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
518 y Fn(f)p Fx(\()p Fj(ty)q(pe)292 524 y Fi(0)311 518 y Fj(;)7
b(disp)406 524 y Fi(0)425 518 y Fx(\))p Fj(;)g(:::;)g Fx(\()p
Fj(ty)q(pe)607 524 y Fh(n)p Fk(\000)p Fi(1)671 518 y Fj(;)g(disp)766
524 y Fh(n)p Fk(\000)p Fi(1)830 518 y Fx(\))p Fj(;)g Fx(\()p
Fj(ty)q(pe)957 524 y Fi(0)977 518 y Fj(;)g(disp)1072 524 y
Fi(0)1099 518 y Fx(+)j Fj(extent)p Fx(\))p Fj(;)d(:::;)g Fx(\()p
Fj(ty)q(pe)1440 524 y Fh(n)p Fk(\000)p Fi(1)1504 518 y Fj(;)g(disp)1599
524 y Fh(n)p Fk(\000)p Fi(1)1673 518 y Fx(+)j Fj(extent)p Fx(\))p
Fj(;)d(:::;)179 610 y Fx(\()p Fj(ty)q(pe)271 616 y Fi(0)291
610 y Fj(;)g(disp)386 616 y Fi(0)413 610 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 616 y Fh(n)p Fk(\000)p Fi(1)1061 610
y Fj(;)g(disp)1156 616 y Fh(n)p Fk(\000)p Fi(1)1230 610 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 701 y Fu(MPI)p 227 701 14 2 v 15 w(TYPE)p 330
701 V 15 w(VECTOR)g Fx(is)i(a)g(more)e(general)i(constructor)i(that)e(allo)o
(ws)e(to)i(replicate)g(a)f(datat)o(yp)q(e)h(in)o(to)f(lo)q(cations)75
751 y(that)j(consists)h(of)e(equally)g(spaced)i(con)o(tiguous)f(blo)q(c)o(ks)
g(of)f(equal)g(size)i({)f(blo)q(c)o(k)f(sizes)i(and)f(blo)q(c)o(k)f
(displacemen)o(ts)75 801 y(are)i(all)f(m)o(ultiples)f(of)h(the)i(old)e(t)o
(yp)q(e)h(exten)o(t.)75 898 y Fu(MPI)p 144 898 V 15 w(TYPE)p
247 898 V 15 w(VECTOR\()20 b(count,)h(oldtype,)f(stride,)g(blocklen,)g
(newtype\))117 947 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 993 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
1039 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
1084 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
1130 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 1206 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 1289
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 1372 y Fx(with)j(exten)o(t)h(16.)16
b(A)10 b(call)f(to)h Fu(MPI)p 588 1372 V 15 w(TYPE)p 691 1372
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 1455 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 1547 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 1638 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 1688 y(A)h(call)f(to)h Fu(MPI)p 399 1688
V 15 w(TYPE)p 502 1688 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 1771 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
1854 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 1937 y Fn(f)p Fx(\()p Fj(ty)q(pe)292
1943 y Fi(0)311 1937 y Fj(;)7 b(disp)406 1943 y Fi(0)425 1937
y Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)607 1943 y Fh(n)p
Fk(\000)p Fi(1)671 1937 y Fj(;)g(disp)766 1943 y Fh(n)p Fk(\000)p
Fi(1)830 1937 y Fx(\))p Fn(g)p Fj(;)75 2020 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 2070 y(en)o(tries:)179 2153
y Fn(f)p Fx(\()p Fj(ty)q(pe)292 2159 y Fi(0)311 2153 y Fj(;)7
b(disp)406 2159 y Fi(0)425 2153 y Fx(\))p Fj(;)g(:::;)g Fx(\()p
Fj(ty)q(pe)607 2159 y Fh(n)p Fk(\000)p Fi(1)671 2153 y Fj(;)g(disp)766
2159 y Fh(n)p Fk(\000)p Fi(1)830 2153 y Fx(\))p Fj(;)179 2244
y Fx(\()p Fj(ty)q(pe)271 2250 y Fi(0)291 2244 y Fj(;)g(disp)386
2250 y Fi(0)413 2244 y Fx(+)j Fj(extent)p Fx(\))p Fj(;)d(:::;)g
Fx(\()p Fj(ty)q(pe)754 2250 y Fh(n)p Fk(\000)p Fi(1)818 2244
y Fj(;)g(disp)913 2250 y Fh(n)p Fk(\000)p Fi(1)987 2244 y Fx(+)i
Fj(extent)p Fx(\))p Fj(;)e(:::;)179 2336 y Fx(\()p Fj(ty)q(pe)271
2342 y Fi(0)291 2336 y Fj(;)g(disp)386 2342 y Fi(0)413 2336
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 2342 y Fh(n)p
Fk(\000)p Fi(1)1126 2336 y Fj(;)g(disp)1221 2342 y Fh(n)p Fk(\000)p
Fi(1)1295 2336 y Fx(+)i(\()p Fu(blocklen)f Fn(\000)i Fx(1\))f
Fn(\001)g Fj(extent)p Fx(\))p Fj(;)179 2427 y Fx(\()p Fj(ty)q(pe)271
2433 y Fi(0)291 2427 y Fj(;)e(disp)386 2433 y Fi(0)413 2427
y Fx(+)j Fu(stride)e Fn(\001)g Fj(extent)p Fx(\))p Fj(;)f(:::;)g
Fx(\()p Fj(ty)q(pe)914 2433 y Fh(n)p Fk(\000)p Fi(1)979 2427
y Fj(;)g(disp)1074 2433 y Fh(n)p Fk(\000)p Fi(1)1148 2427 y
Fx(+)i Fu(stride)f Fn(\001)h Fj(extent)p Fx(\))p Fj(;)e(:::;)179
2518 y Fx(\()p Fj(ty)q(pe)271 2524 y Fi(0)291 2518 y Fj(;)g(disp)386
2524 y Fi(0)413 2518 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
2609 y Fx(\()p Fj(ty)q(pe)271 2615 y Fh(n)p Fk(\000)p Fi(1)337
2609 y Fj(;)g(disp)432 2615 y Fh(n)p Fk(\000)p Fi(1)506 2609
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 2701 y Fx(\()p
Fj(ty)q(pe)271 2707 y Fi(0)291 2701 y Fj(;)g(disp)386 2707
y Fi(0)413 2701 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(:::;)p
eop
%%Page: 26 26
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(26)179 45 y(\()p Fj(ty)q(pe)271 51 y Fh(n)p
Fk(\000)p Fi(1)337 45 y Fj(;)7 b(disp)432 51 y Fh(n)p Fk(\000)p
Fi(1)506 45 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
136 y Fx(\()p Fj(ty)q(pe)271 142 y Fi(0)291 136 y Fj(;)g(disp)386
142 y Fi(0)413 136 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 228 y Fx(\()p
Fj(ty)q(pe)271 234 y Fh(n)p Fk(\000)p Fi(1)337 228 y Fj(;)g(disp)432
234 y Fh(n)p Fk(\000)p Fi(1)506 228 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 398
y Fo(Discussion:)158 443 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
489 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 535
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 539 y Ff(0)649 535 y Fg(;)6 b(:::;)f(b)731 539 y Fe(n)p
Fd(\000)p Ff(1)792 535 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
580 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 584 y Ff(0)796 580 y Fg(;)6 b(b)829 584 y Ff(1)847
580 y Fg(;)g(::::)p Ft(.)158 626 y(W)m(e)16 b(lo)q(ose)h(the)g(abilit)o(y)h
(to)e(use)h Fm(MPI)p 699 626 12 2 v 13 w(TYPE)p 792 626 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 672 y Fm(MPI)p 137 672 V 13 w(TYPE)p
230 672 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 717 y(calls.)158 763 y(Oppinions?)158 895 y Fx(A)d(call)f(to)h
Fu(MPI)p 399 895 14 2 v 15 w(TYPE)p 502 895 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
945 y Fu(MPI)p 144 945 V 15 w(TYPE)p 247 945 V 15 w(VECTOR\(oldtype,)19
b(count,)h(1,)i(1,)f(newtype\))p Fx(.)158 995 y(The)16 b(function)f
Fu(MPI)p 478 995 V 15 w(TYPE)p 581 995 V 15 w(HVECTOR)f Fx(is)h(iden)o(tical)
g(to)h Fu(MPI)p 1095 995 V 15 w(TYPE)p 1198 995 V 15 w(VECTOR)p
Fx(,)d(except)k(that)f Fu(stride)e Fx(is)h(giv)o(en)75 1045
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 1095 y(Section)d(1.13.4.)i(\()p Fu(H)e
Fx(is)g(used)h(for)e(\\heterogeneous"\).)75 1192 y Fu(MPI)p
144 1192 V 15 w(TYPE)p 247 1192 V 15 w(HVECTOR\()20 b(count,)h(oldtype,)f
(stride,)g(blocklen,)g(newtype\))117 1242 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
1287 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 1333 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 1378 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 1424 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 1500 y Fu(MPI)p 227 1500 V
15 w(TYPE)p 330 1500 V 15 w(INDEXED)9 b Fx(is)i(a)f(more)f(general)i
(function)g(that)f(allo)o(ws)g(to)g(replicate)h(an)g(old)e(t)o(yp)q(e)j(in)o
(to)d(a)i(sequence)75 1550 y(of)e(con)o(tiguous)h(blo)q(c)o(ks,)g(where)h
(blo)q(c)o(k)f(lengths)g(and)g(blo)q(c)o(k)f(displacemen)o(ts)h(can)g(all)f
(di\013er)h({)g(but)g(are)g(all)f(m)o(ultiples)75 1600 y(of)k(the)i(old)e(t)o
(yp)q(e)h(exten)o(t.)75 1697 y Fu(MPI)p 144 1697 V 15 w(TYPE)p
247 1697 V 15 w(INDEXED\()20 b(count,)h(oldtype,)f(array)p
917 1697 V 14 w(of)p 975 1697 V 16 w(indices,)g(array)p 1297
1697 V 14 w(of)p 1355 1697 V 16 w(blocklen,)g(newtype\))117
1747 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 1793 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 1838 y(in)g Fu(array)p
275 1838 V 15 w(of)p 334 1838 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 1888 y(ten)o(t)k(\(arra)o(y)h(of)e(in)o(teger\))117
1934 y(in)i Fu(array)p 275 1934 V 15 w(of)p 334 1934 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 1979 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 2056 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
2139 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 2222 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 2222 V 15 w(TYPE)p 1449 2222 V 15 w(INDEXED\(2,)20
b(oldtype,)75 2272 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 2355
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 2446 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(:)75 2537
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 2587 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 2670 y Fn(f)p
Fx(\()p Fj(ty)q(pe)292 2676 y Fi(0)311 2670 y Fj(;)7 b(disp)406
2676 y Fi(0)425 2670 y Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)607
2676 y Fh(n)p Fk(\000)p Fi(1)671 2670 y Fj(;)g(disp)766 2676
y Fh(n)p Fk(\000)p Fi(1)830 2670 y Fx(\))p Fn(g)p Fj(;)p eop
%%Page: 27 27
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(27)75 45 y(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 45
14 2 v 15 w(of)p 875 45 V 15 w(blocklen)e Fx(parameter)h(and)g
Fu(I)g Fx(b)q(e)h(the)g Fu(array)p 1652 45 V 14 w(of)p 1710
45 V 15 w(indices)75 102 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 71 y Fc(P)1517 81 y Fu(count)o Fk(\000)p
Fi(1)1517 115 y Fh(i)p Fi(=0)1678 102 y Fu(B)p Fx([)p Fu(i)p
Fx(])f(en)o(tries)179 185 y Fn(f)p Fx(\()p Fj(ty)q(pe)292 191
y Fi(0)311 185 y Fj(;)d(disp)406 191 y Fi(0)434 185 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 191 y Fh(n)p Fk(\000)p Fi(1)935 185
y Fj(;)g(disp)1030 191 y Fh(n)p Fk(\000)p Fi(1)1104 185 y Fx(+)j
Fu(I)p Fx([)p Fu(0)p Fx(])e Fn(\001)g Fj(extent)p Fx(\))p Fj(;)f(:::;)179
277 y Fx(\()p Fj(ty)q(pe)271 283 y Fi(0)291 277 y Fj(;)g(disp)386
283 y Fi(0)413 277 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 283 y Fh(n)p
Fk(\000)p Fi(1)1136 277 y Fj(;)g(disp)1231 283 y Fh(n)p Fk(\000)p
Fi(1)1305 277 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 368 y Fx(\()p Fj(ty)q(pe)271 374 y
Fi(0)291 368 y Fj(;)g(disp)386 374 y Fi(0)413 368 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 374
y Fh(n)p Fk(\000)p Fi(1)1074 368 y Fj(;)g(disp)1169 374 y Fh(n)p
Fk(\000)p Fi(1)1243 368 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
459 y Fx(\()p Fj(ty)q(pe)271 465 y Fi(0)291 459 y Fj(;)g(disp)386
465 y Fi(0)413 459 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
551 y Fx(\()p Fj(ty)q(pe)271 557 y Fh(n)p Fk(\000)p Fi(1)337
551 y Fj(;)g(disp)432 557 y Fh(n)p Fk(\000)p Fi(1)506 551 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 642
y Fx(A)15 b(call)e(to)i Fu(MPI)p 401 642 V 15 w(TYPE)p 504
642 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 692 y(a)g(call)f(to)75 742
y Fu(MPI)p 144 742 V 15 w(TYPE)p 247 742 V 15 w(INDEX\(count,)19
b(oldtype,)h(I,)i(B,)f(newtype\))12 b Fx(where)179 825 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 908 y Fx(and)179 991 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 1074 y Fx(The)k(function)g Fu(MPI)p
473 1074 V 15 w(TYPE)p 576 1074 V 15 w(HINDEXED)e Fx(is)h(iden)o(tical)g(to)h
Fu(MPI)p 1100 1074 V 15 w(TYPE)p 1203 1074 V 15 w(INDEXED)p
Fx(,)e(except)j(that)f(blo)q(c)o(k)f(displace-)75 1123 y(men)o(ts)h(in)h
Fu(array)p 358 1123 V 14 w(of)p 416 1123 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 1221 y Fu(MPI)p 144 1221
V 15 w(TYPE)p 247 1221 V 15 w(HINDEXED\()20 b(count,)g(oldtype,)h(array)p
939 1221 V 14 w(of)p 997 1221 V 15 w(indices,)g(array)p 1319
1221 V 14 w(of)p 1377 1221 V 16 w(blocklen,)e(newtype\))117
1270 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 1316 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 1362 y(in)g Fu(array)p
275 1362 V 15 w(of)p 334 1362 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 1407 y(in)h Fu(array)p 275 1407 V 15 w(of)p 334
1407 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
1453 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 1529 y Fu(MPI)p 227 1529 V 15 w(TYPE)p 330 1529
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
1579 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
1676 y Fu(MPI)p 144 1676 V 15 w(TYPE)p 247 1676 V 15 w(STRUCT\(count,)k
(array)p 677 1676 V 15 w(of)p 736 1676 V 15 w(types,)i(array)p
1014 1676 V 14 w(of)p 1072 1676 V 15 w(indices,)g(array)p 1394
1676 V 14 w(of)p 1452 1676 V 16 w(blocklen,)e(newtype\))117
1726 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 1772 y(in)f Fu(array)p 275 1772 V 15 w(of)p
334 1772 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
1821 y(jects\))117 1867 y(in)c Fu(array)p 275 1867 V 15 w(of)p
334 1867 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 1913 y(in)h
Fu(array)p 275 1913 V 15 w(of)p 334 1913 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 1958 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
2035 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 2118 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 2201
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 2201 V 15 w(FLOAT,)g(type1,)f(MPI)p 1742
2201 V 16 w(BYTE\))p Fx(.)75 2251 y(Then)11 b(a)f(call)f(to)h
Fu(MPI)p 399 2251 V 15 w(TYPE)p 502 2251 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 2334 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 2417
y(t)o(w)o(o)17 b(copies)h(of)e Fu(MPI)p 402 2417 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
2466 y(three)g(copies)g(of)e Fu(MPI)p 420 2466 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.\))158 2516 y(In)g(general,)g
(let)g Fu(T)f Fx(b)q(e)i(the)f Fu(array)p 701 2516 V 15 w(of)p
760 2516 V 15 w(types)f Fx(parameter,)g(where)i Fu(T[i])e Fx(is)h(a)f(handle)
h(to)179 2599 y Fj(ty)q(pe)255 2605 y Fh(i)281 2599 y Fx(=)e
Fn(f)p Fx(\()p Fj(ty)q(pe)438 2582 y Fh(i)438 2610 y Fi(0)458
2599 y Fj(;)7 b(disp)553 2582 y Fh(i)553 2610 y Fi(0)571 2599
y Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)753 2582 y Fh(i)753
2610 y(n)774 2614 y Fb(i)787 2599 y Fj(;)g(disp)882 2582 y
Fh(i)882 2610 y(n)903 2614 y Fb(i)918 2599 y Fx(\))p Fn(g)p
Fj(;)p eop
%%Page: 28 28
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(28)75 45 y(with)15 b(exten)o(t)i Fj(extent)417
51 y Fh(i)431 45 y Fx(.)24 b(Let)16 b Fu(B)g Fx(b)q(e)g(the)g
Fu(array)p 825 45 14 2 v 15 w(of)p 884 45 V 15 w(blocklen)e
Fx(parameter)i(and)f Fu(I)h Fx(b)q(e)g(the)h Fu(array)p 1652
45 V 14 w(of)p 1710 45 V 15 w(indices)75 102 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
71 y Fc(P)1398 81 y Fu(count)o Fk(\000)p Fi(1)1398 115 y Fh(i)p
Fi(=0)1559 102 y Fu(B)p Fx([)p Fu(i)p Fx(])5 b Fn(\001)i Fj(extent)1768
108 y Fh(i)1794 102 y Fx(with)75 152 y(en)o(tries)179 235 y
Fn(f)p Fx(\()p Fj(ty)q(pe)292 218 y Fi(0)292 245 y(0)311 235
y Fj(;)g(disp)406 218 y Fi(0)406 245 y(0)434 235 y Fx(+)i Fu(I)p
Fx([)p Fu(0)p Fx(])o(\))p Fj(;)e(:::;)g Fx(\()p Fj(ty)q(pe)724
218 y Fi(0)724 245 y Fh(n)745 249 y Fr(0)762 235 y Fj(;)g(disp)857
218 y Fi(0)857 245 y Fh(n)878 249 y Fr(0)904 235 y Fx(+)j Fu(I)p
Fx([)p Fu(0)p Fx(])o(\))p Fj(;)d(:::;)179 331 y Fx(\()p Fj(ty)q(pe)271
314 y Fi(0)271 341 y(0)291 331 y Fj(;)g(disp)386 314 y Fi(0)386
341 y(0)413 331 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
337 y Fi(0)908 331 y Fx(\))p Fj(;)f(:::;)g Fx(\()p Fj(ty)q(pe)1090
314 y Fi(0)1090 341 y Fh(n)1111 345 y Fr(0)1128 331 y Fj(;)g(disp)1223
314 y Fi(0)1223 341 y Fh(n)1244 345 y Fr(0)1271 331 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 337 y Fi(0)1767
331 y Fx(\))p Fj(;)e(:::;)179 432 y Fx(\()p Fj(ty)q(pe)271
414 y Fu(count)p Fk(\000)p Fi(1)271 443 y(0)425 432 y Fj(;)g(disp)520
414 y Fu(count)o Fk(\000)p Fi(1)520 443 y(0)683 432 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 415 y Fu(count)n Fk(\000)p Fi(1)1133
442 y Fh(n)1154 455 y Fu(count)m Fa(\000)p Fr(1)1302 432 y
Fj(;)g(disp)1397 415 y Fu(count)o Fk(\000)p Fi(1)1397 442 y
Fh(n)1418 455 y Fu(count)n Fa(\000)p Fr(1)1576 432 y Fx(+)j
Fu(I)p Fx([)p Fu(count)d Fn(\000)j Fu(1)p Fx(])o(\))p Fj(;)d(:::;)179
545 y Fx(\()p Fj(ty)q(pe)271 527 y Fu(count)p Fk(\000)p Fi(1)271
556 y(0)425 545 y Fj(;)g(disp)520 527 y Fu(count)o Fk(\000)p
Fi(1)520 556 y(0)683 545 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 554
y Fu(count)o Fk(\000)p Fi(1)1632 545 y Fx(\))p Fj(;)e(:::;)179
643 y Fx(\()p Fj(ty)q(pe)271 626 y Fu(count)p Fk(\000)p Fi(1)271
653 y Fh(n)292 666 y Fu(count)o Fa(\000)p Fr(1)442 643 y Fj(;)g(disp)537
626 y Fu(count)o Fk(\000)p Fi(1)537 653 y Fh(n)558 666 y Fu(count)n
Fa(\000)p Fr(1)716 643 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 652
y Fu(count)o Fk(\000)p Fi(1)1667 643 y Fx(\))p Fn(g)158 744
y Fx(A)14 b(call)f(to)h Fu(MPI)p 399 744 V 15 w(TYPE)p 502
744 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 794 y Fu(MPI)p
144 794 V 15 w(TYPE)p 247 794 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 922 y Fo(Discussion:)158
968 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 1167 y Fs(1.13.2)49 b(Additional)19
b(functions)75 1243 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 1293 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 1343 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 1343 V 15 w(BOTTOM)p Fx(.)75 1393 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 1443 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 1443 V 15 w(BOTTOM)p Fx(.)158 1492 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 1492 V 15 w(ADDRESS)p Fx(.)75 1590
y Fu(MPI)p 144 1590 V 15 w(ADDRESS\(location,)k(address\))117
1639 y Ft(in)c Fu(location)609 b Ft(lo)q(cation)15 b(in)f(caller)g(memory)g
(\(c)o(hoice\))117 1685 y(out)g Fu(address)607 b Ft(address)14
b(of)f(lo)q(cation)i(\(in)o(teger\))158 1761 y Fx(Returns)g(the)f(\(b)o
(yte\))h(address)g(of)e Fu(location)p Fx(.)158 1811 y(Another)f(useful)g
(auxiliary)d(function)j(is)f Fu(MPI)p 874 1811 V 15 w(EXTENT)p
Fx(,)f(that)h(returns)i(the)f(exetend)h(of)e(a)g(datat)o(yp)q(e)h({)f(where)
75 1861 y(exten)o(t)k(is)f(as)g(de\014ned)h(in)e(Eq.)g(1.1.)75
1958 y Fu(MPI)p 144 1958 V 15 w(TYPE)p 247 1958 V 15 w(EXTENT\(datatype,)18
b(extent\))117 2008 y Ft(in)c Fu(datatype)609 b Ft(handle)14
b(to)f(datat)o(yp)q(e)h(ob)r(ject)117 2053 y(out)g Fu(extent)629
b Ft(datat)o(yp)q(e)14 b(exten)o(t)f(\(in)o(teger\))158 2130
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 2180 y(b)o(yte.)j(It)c(is)f(often)g(con)o(v)o(enien)o(t)h(to)
f(de\014ne)h(a)f(datat)o(yp)q(e)g(that)h(has)f(a)g(\\hole")f(at)i(its)f(b)q
(egining)f(and/or)h(its)g(end;)h(or)75 2229 y(a)f(datat)o(yp)q(e)g(with)g(en)
o(tries)h(that)f(extend)h(b)q(ey)o(ond)f(the)h(datat)o(yp)q(e)f(\\exten)o
(t".)18 b(This)13 b(allo)o(ws)f(to)g(use)i(the)g(functions)75
2279 y Fu(MPI)p 144 2279 V 15 w(TYPE)p 247 2279 V 15 w(CONTIGUOUS)p
Fx(,)g Fu(MPI)p 574 2279 V 16 w(TYPE)p 678 2279 V 14 w(VECTOR)p
Fx(,)i(or)h Fu(MPI)p 972 2279 V 15 w(TYPE)p 1075 2279 V 15
w(INDEX)f Fx(to)h(replicate)g(a)g(more)f(general)i(pattern;)75
2329 y(examples)h(of)f(suc)o(h)j(usage)f(are)f(pro)o(vided)h(in)f(Section)h
(1.13.4.)33 b(T)m(o)18 b(ac)o(hiev)o(e)i(this,)h(w)o(e)e(add)h(t)o(w)o(o)f
(additional)75 2379 y(\\pseudo-datat)o(yp)q(es")f Fu(MPI)p
518 2379 V 15 w(LB)p Fx(,)e(and)h Fu(MPI)p 755 2379 V 15 w(UB)g
Fx(that)g(can)h(b)q(e)g(used,)g(resp)q(ectiv)o(ely)m(,)h(to)e(mark)e(the)j
(lo)o(w)o(er)f(b)q(ound)75 2429 y(or)j(the)h(upp)q(er)h(b)q(ound)e(of)g(a)g
(datat)o(yp)q(e.)38 b(these)22 b(pseudo-datat)o(yp)q(es)g(o)q(ccup)o(y)f(no)f
(space)i(\()p Fj(extent)p Fx(\()p Fu(MP)p 1748 2429 V 16 w(LB)o
Fx(\))h(=)75 2478 y Fj(extent)p Fx(\()p Fu(MP)p 255 2478 V
16 w(UB)o Fx(\))d(=)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
2528 y(Ho)o(w)o(ev)o(er,)12 b(they)h(do)f(a\013ect)g(the)h(de\014nition)f(of)
f(the)i(exten)o(t)g(of)e(a)h(datat)o(yp)q(e)g(and,)g(therefore,)h(a\013ects)g
(the)g(outcome)75 2578 y(of)g(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.)158 2628 y(Example:)i(Let)e
Fu(I)21 b(=)h(\(-3,)f(0,)g(6\))p Fx(;)12 b Fu(T)22 b(=)g(\(MPI)p
928 2628 V 14 w(LB,)g(MPI)p 1096 2628 V 15 w(INT,)f(MPI)p 1286
2628 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 2678 y(a)22 b(call)g(to)g Fu(MPI)p 331 2678
V 15 w(TYPE)p 434 2678 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)p
eop
%%Page: 29 29
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(29)75 45 y(9)20 b(\(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 95 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 145 y Fu(MPI)p 144 145 14 2 v 15 w(TYPE)p 247
145 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
195 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 244 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
294 y(In)f(general,)g(if)179 377 y Fj(D)q(ataty)q(pe)f Fx(=)f
Fn(f)p Fx(\()p Fj(ty)q(pe)519 383 y Fi(0)538 377 y Fj(;)7 b(disp)633
383 y Fi(0)651 377 y Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)833
383 y Fh(n)p Fk(\000)p Fi(1)897 377 y Fj(;)g(disp)992 383 y
Fh(n)p Fk(\000)p Fi(1)1057 377 y Fx(\))p Fn(g)p Fj(;)75 460
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 566 y Fj(l)q(b)p Fx(\()p
Fj(D)q(ataty)q(pe)p Fx(\))f(=)469 507 y Fc(\032)521 541 y Fx(min)590
547 y Fh(j)614 541 y Fj(disp)690 547 y Fh(j)1036 541 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 547 y Fh(j)1618
541 y Fx(=)e Fu(lb)521 590 y Fx(min)n Fn(f)p Fj(disp)687 596
y Fh(j)730 590 y Fx(:)25 b Fj(ty)q(pe)843 596 y Fh(j)873 590
y Fx(=)12 b Fu(lb)o Fn(g)41 b Fx(otherwise)158 671 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 777 y Fj(ub)p Fx(\()p Fj(D)q(ataty)q(pe)p
Fx(\))f(=)479 719 y Fc(\032)531 752 y Fx(max)609 758 y Fh(j)633
752 y Fj(disp)709 758 y Fh(j)736 752 y Fx(+)c Fj(siz)r(eof)t
Fx(\()p Fj(ty)r(pe)987 758 y Fh(j)1007 752 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
758 y Fh(j)1660 752 y Fx(=)e Fu(ub)531 802 y Fx(max)o Fn(f)p
Fj(disp)706 808 y Fh(j)748 802 y Fx(:)25 b Fj(ty)q(pe)861 808
y Fh(j)891 802 y Fx(=)12 b Fu(ub)p Fn(g)65 b Fx(otherwise)158
883 y(Then)179 966 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(\))p Fj(:)158
1049 y Fx(The)j(formal)c(de\014nitions)j(giv)o(en)g(for)g(the)h(v)n(arious)e
(datat)o(yp)q(e)i(constructors)h(apply)d(no)o(w,)h(with)g(the)h(amended)75
1099 y(de\014nition)h(of)h Fj(extent)p Fx(.)158 1148 y(A)i(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
1198 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 1248 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 1298 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 1348 y(most)f(con)o(v)o(enien)o(t)h(transfer)h(mec)o
(hanism.)75 1445 y Fu(MPI)p 144 1445 V 15 w(TYPE)p 247 1445
V 15 w(COMMIT\(intype,)k(outtype\))117 1494 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(commited)117
1540 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 1616 y Fx(There)h(is)f(no)g(need)h(to)f(commit)e(basic)i
(datat)o(yp)q(es;)g(they)h(are)g(\\precommited".)h(They)f(are)f(the)h
(exception)75 1666 y(to)f(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
1795 y Fo(Discussion:)158 1840 y Ft(1.)j(Do)c(w)o(e)g(really)i(need)e(a)g
(commit)h(here?)158 1886 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
1932 y(3.)h(Are)11 b(committed)h(and)g(uncommited)h(ob)r(jects)e(of)g(the)h
(same)f(t)o(yp)q(e?)17 b(\(The)11 b(answ)o(er)g(m)o(ust)h(b)q(e)f(y)o(es,)h
(if)f(it)g(is)h(an)g(inout)75 1977 y(argumen)o(t.\))158 2027
y(4.)18 b(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 2077 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
2127 y(ob)r(ject,)i(can)g(w)o(e)g(con)o(tin)o(ue)h(to)f(use)h(it?)75
2306 y Fu(MPI)p 144 2306 V 15 w(TYPE)p 247 2306 V 15 w(FREE\(datatype\))117
2356 y Ft(inout)h Fu(datatype)553 b Ft(handle)14 b(to)f(datat)o(yp)q(e)h(ob)r
(ject)158 2433 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 2482 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 2532 y Fx(b)q(ecomes)h(n)o(ull.)158
2661 y Fo(Discussion:)p eop
%%Page: 30 30
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(30)158 45 y Ft(If)13 b(w)o(e)g(ha)o(v)o(e)h(di\013eren)o(t)h
(datat)o(yp)q(es)g(for)e(commited)i(and)f(uncommited,)i(then)e(w)o(e)f(ha)o
(v)o(e)h(2)f(free)h(functions)h(\(or)e(nev)o(er)75 91 y(free)g(uncommited)h
(datat)o(yp)q(e\))75 290 y Fs(1.13.3)49 b(Use)16 b(of)h(general)f(datat)o(yp)
q(es)g(in)h(comm)n(unication)75 366 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 416 y(is)i(required.)23
b(A)16 b(call)e(of)h(the)h(form)d Fu(MPI)p 715 416 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 466 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
516 y(b)o(y)h(the)i(sequence)h Fn(f)p Fx(\()p Fj(ty)q(pe)492
522 y Fi(0)511 516 y Fj(;)7 b(disp)606 522 y Fi(0)625 516 y
Fx(\))p Fj(;)g(:::;)g Fx(\()p Fj(ty)q(pe)807 522 y Fh(n)p Fk(\000)p
Fi(1)870 516 y Fj(;)g(disp)965 522 y Fh(n)p Fk(\000)p Fi(1)1030
516 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 566 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 572 y Fh(i)838 566 y Fx(,)e(at)g(addresses)j
Fu(start)6 b Fx(+)h Fj(disp)1324 572 y Fh(i)1338 566 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 615 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
621 y Fi(0)1139 615 y Fj(;)7 b(:::;)g(ty)q(pe)1289 621 y Fh(n)p
Fk(\000)p Fi(1)1353 615 y Fx(.)17 b(The)c(receiv)o(e)g(bu\013er)h(for)e(a)g
(call)75 665 y Fu(MPI)p 144 665 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 715 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 765 y(A)h(datat)o(yp)q(e)g(used)h(in)e(a)h
(receiv)o(e)h(op)q(eration)f(ma)o(y)e(not)h(ha)o(v)o(e)h(o)o(v)o(erlaping)f
(en)o(tries;)h(otherwise)h(the)g(outcome)75 815 y(of)f(the)i(receiv)o(e)g(op)
q(eration)f(is)f(unde\014ned.)158 864 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 914 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
964 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 1014 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 1064 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 1113 y(Th)o(us,)17 b(t)o(yp)q(e)h(matc)o(hing)d(is)h
(de\014ned)i(b)o(y)f(the)g(\\\015at")f(structure)j(of)d(a)h(datat)o(yp)q(e,)g
(and)g(do)q(es)g(not)g(dep)q(end)h(of)e(its)75 1163 y(de\014ning)e
(expresssion.)158 1213 y(Example:)75 1296 y Fu(...)75 1346
y(MPI_TYPE_CONTIGUO)o(US\()19 b(MPI_REAL,)h(2,)h(type2\))75
1396 y(MPI_TYPE_CONTIGUO)o(US\()e(MPI_REAL,)h(4,)h(type4\))75
1446 y(MPI_TYPE_CONTIGUO)o(US\()e(type2,)h(2,)i(type22\))158
1529 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 1578 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 1628 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 1678
y Fu(byte)p Fx(.)158 1728 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 1778 y(deco)q(ded)f(b)o(y)f(the)g(function)g
Fu(MPI)p 608 1778 V 15 w(GET)p 689 1778 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 1827 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 1877 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 1927 y(will)g(b)q(e)j(four.)158
2055 y Fo(Discussion:)158 2101 y Ft(An)f(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 2147 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
2192 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 2238 y(of)h(the)h(receiv)o(ed)h(message)
g(is)f(t)o(w)o(o.)j(With)e(suc)o(h)g(de\014nition,)h(it)e(is)g(required)h
(that)f(the)g(arriving)i(message)e(\014lls)i(an)e(in)o(teger)75
2284 y(n)o(um)o(b)q(er)h(of)f(subunits.)158 2329 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 2375 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)75
2421 y(the)i(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 2466 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 2512
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
2558 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 2603 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 2649 y(Oppinions?)p eop
%%Page: 31 31
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(31)158 45 y(A)19 b(call)e(of)h(the)i(form)c
Fu(MPI)p 588 45 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
95 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 145 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 145
V 15 w(CONTIGUOUS\(count,)k(datatype,)i(newtype\))p Fx(,)75
195 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 244 y(a)i(datat)o(yp)q(e)g(argumen)o(t.)75
361 y Fs(1.13.4)49 b(Examples)75 437 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
537 y(First)g(example:)j(extract)e(a)f(section)g(of)f(a)h(3D)f(matrix.)206
620 y Fu(REAL)21 b(a\(100,100,100\),)d(e\(9,9,9\))206 670 y(INTEGER)i
(oneslice,)g(twoslice,)g(threeslice,)f(finaltype,)h(sizeofreal)75
769 y(C)131 b(extract)20 b(the)h(section)f(a\(1:17:2,)g(3:11,)h(2:10\))75
819 y(C)131 b(and)21 b(store)f(it)i(in)f(e\(*,*,*\).)206 919
y(CALL)g(MPI_TYPE_EXTENT\()d(MPI_REAL,)i(sizeofreal,)g(ierr\))75
1018 y(C)109 b(create)20 b(datatype)g(for)i(a)f(1D)h(section)206
1068 y(CALL)f(MPI_TYPE_VECTOR\()d(9,)k(MPI_REAL,)41 b(2,)22
b(1,)f(oneslice,)f(ierr\))75 1168 y(C)109 b(create)20 b(datatype)g(for)i(a)f
(2D)h(section)206 1218 y(CALL)f(MPI_TYPE_HVECTOR)o(\()e(9,)i(oneslice,)42
b(100*sizeofreal,)19 b(1,)i(twoslice,)f(ierr\))75 1317 y(C)109
b(create)20 b(datatype)g(for)i(the)f(entire)f(section)206 1367
y(CALL)h(MPI_TYPE_HVECTOR)o(\()e(9,)i(twoslice,)42 b(100*100*sizeofreal)o(,)
19 b(1,)467 1417 y(threeslice,)h(ierr\))206 1516 y(CALL)h(MPI_TYPE_COMMIT\()d
(threeslice,)i(finaltype,)f(ierr\))206 1566 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 1616
y(MPI_REAL,)e(MPI_ME,)h(0,)g(MPI_ALL,)f(status,)g(ierr\))158
1699 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 1782 y Fu(REAL)21
b(a\(100,100\),)e(b\(100,100\))206 1832 y(INTEGER)42 b(index\(100\),)19
b(blocklen\(100\),)g(ltype,)i(finaltype)75 1932 y(C)109 b(copy)21
b(lower)f(triangular)g(part)h(of)h(array)e(a)75 1981 y(C)109
b(onto)21 b(lower)f(triangular)g(part)h(of)h(array)e(b)75 2081
y(C)109 b(compute)20 b(start)h(and)g(size)g(of)g(each)g(column)206
2131 y(DO)g(i=1,)g(100)249 2181 y(index\(i\))f(=)i(100*\(i-1\))e(+)i(i)249
2230 y(block\(i\))e(=)i(100-i)206 2280 y(END)f(DO)75 2380 y(C)109
b(create)20 b(datatype)g(for)i(lower)e(triangular)g(part)206
2430 y(CALL)h(MPI_TYPE_INDEX\()d(MPI_REAL,)i(100,)h(index,)g(block,)f(ltype,)
h(ierr\))206 2529 y(CALL)g(MPI_TYPE_COMMIT\()o(ltype)o(,)e(finaltype,)h
(ierr\))206 2579 y(CALL)h(MPI_SENDRECV\()e(a,)i(1,)h(finaltype,)d(MPI_ME,)i
(b,)g(1,)424 2629 y(finaltype,)e(MPI_ME,)i(0,)g(MPI_ALL,)f(status,)h(ierr\))p
eop
%%Page: 32 32
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(32)158 145 y(Third)14 b(example:)i(T)m(ransp)q(ose)f(a)f
(matrix)206 212 y Fu(REAL)21 b(a\(100,100\),)e(b\(100,100\))206
261 y(INTEGER)h(row,)h(xpose,)g(finaltype,)e(sizeofreal)75
361 y(C)109 b(transpose)20 b(matrix)g(a)i(onto)f(b)206 510
y(CALL)g(MPI_TYPE_EXTENT\()d(MPI_REAL,)i(sizeofreal,)g(ierr\))75
610 y(C)109 b(create)20 b(datatype)g(for)i(one)f(row)206 660
y(CALL)g(MPI_TYPE_VECTOR\()d(100,)j(MPI_REAL,)f(100,)h(1,)g(row,)g(ierr\))75
760 y(C)109 b(create)20 b(datatype)g(for)i(matrix)e(in)i(row-major)d(order)
206 809 y(CALL)i(MPI_TYPE_HVECTOR)o(\()e(100,)i(row,)g(sizeofreal,)e(1,)j
(xpose,)e(ierr\))206 909 y(CALL)h(MPI_TYPE_COMMIT\()d(xpose,)j(finaltype,)e
(ierr\))75 1009 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 1058 y(CALL)g(MPI_SENDRECV\()e(a,)
i(1,)h(finaltype,)d(MPI_ME,)i(b,)g(100*100,)424 1108 y(MPI_REAL,)f(MPI_ME,)g
(0,)h(MPI_ALL,)f(status,)h(ierr\))158 1275 y Fx(Another)15
b(approac)o(h)f(to)f(the)i(transp)q(ose)g(problem:)206 1342
y Fu(REAL)21 b(a\(100,100\),)e(b\(100,100\))206 1391 y(INTEGER)42
b(index\(2\),)20 b(blen\(2\),)g(type\(2\),)g(row,)h(row1,)g(finaltype,)f
(sizeofreal)75 1541 y(C)109 b(transpose)20 b(matrix)g(a)i(onto)f(b)206
1690 y(CALL)g(MPI_TYPE_EXTENT\()d(MPI_REAL,)i(sizeofreal,)g(ierr\))75
1790 y(C)109 b(create)20 b(datatype)g(for)i(one)f(row)206 1840
y(CALL)g(MPI_TYPE_VECTOR\()d(MPI_REAL,)i(100,)h(100,)g(1,)g(row,)g(ierr\))75
1939 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 1989 y(index\(1\))f(=)h(0)206
2039 y(index\(2\))f(=)h(sizeofreal)206 2089 y(type\(1\))42
b(=)21 b(row)206 2139 y(type\(2\))42 b(=)21 b(MPI_UB)206 2188
y(blen\(1\))42 b(=)21 b(1)206 2238 y(blen\(2\))42 b(=)21 b(1)206
2288 y(CALL)g(MPI_TYPE_STRUC\()d(2,)k(type,)f(index,)f(blen,)h(row1\))206
2388 y(CALL)g(MPI_TYPE_COMMIT\()d(row1,)j(finaltype,)f(ierr\))75
2487 y(C)109 b(send)21 b(100)g(rows)g(and)g(receive)f(in)i(column)e(major)h
(order)206 2537 y(CALL)g(MPI_SENDRECV\()e(a,)i(100,)g(finaltype,)f(MPI_ME,)g
(b,)i(100*100,)424 2587 y(MPI_REAL,)e(MPI_ME,)g(0,)h(MPI_ALL,)f(status,)h
(ierr\))p eop
%%Page: 33 33
bop 75 -100 a Fq(SECTION)15 b(1.)26 b(POINT)15 b(TO)f(POINT)h(COMMUNICA)m
(TION)736 b Fx(33)158 45 y(F)m(ourth)14 b(example:)j(manipulate)11
b(an)j(arra)o(y)g(of)f(structures.)75 113 y Fu(struct)21 b(Partstruct)140
163 y({)140 213 y(int)h(index;)85 b(/*)22 b(particle)e(type)h(*/)140
263 y(double)g(d[6])43 b(/*)21 b(particle)f(coordinates)g(*/)140
313 y(char)h(b[7])87 b(/*)21 b(some)g(additional)f(information)f(*/)140
362 y(};)75 462 y(struct)i(Partstruct)e(particle[1000];)315
562 y(/*)i(build)g(datatype)f(describing)g(first)g(array)h(entry)g(*/)75
661 y(MPI_datatype)e(Particletype;)75 711 y(MPI_datatype)g(stype[3])h(=)i
({MPI_int,)e(MPI_double,)f(MPI_char};)75 761 y(int)217 b(sblock[3])20
b(=)i({1,)f(6,)g(7};)75 811 y(int)217 b(sindex[3];)75 910 y(MPI_address\()19
b(\(void)i(*\)particle,)f(sindex\);)75 960 y(MPI_address\()f(\(void)i
(*\)particle[0].d,)e(sindex+1\);)75 1010 y(MPI_address\()g(\(void)i
(*\)particle[0].b,)e(sindex+2\);)75 1060 y(MPI_type_struc\()g(3,)i(stype,)g
(sindex,)f(sblock,)g(Particletype\);)75 1110 y(/*)h(Particletype)f(describes)
g(first)g(array)h(entry)g(--)g(using)g(absolute)140 1159 y(addresses)f(*/)249
1309 y(/*)i(4.1:)f(send)g(the)g(entire)f(array)h(*/)75 1408
y(MPI_datatype)e(Type1;)75 1458 y(MPI_commit\()h(Particletype,)f(Type1\);)75
1508 y(MPI_send\()h(MPI_BOTTOM,)f(1000,)i(Type1,)g(dest,)g(tag,)f(comm\);)249
1658 y(/*)i(4.2:)f(send)g(the)g(entries)f(with)h(index)g(value)g(zero)g(*/)75
1757 y(MPI_datatype)e(Zparticles;)63 b(/*)22 b(datatype)e(describing)g(all)h
(particles)860 1807 y(with)g(index)f(zero)h(\(needs)g(to)g(be)h(recomputed)
860 1857 y(if)f(indices)f(change\))h(*/)75 1907 y(MPI_datatype)e(Type2;)75
2006 y(int)i(zindex[1000],)e(zblock[1000],)g(i,)j(j,)f(k;)75
2106 y(/*)g(compute)g(indices)f(of)h(particles)f(with)h(index)g(zero)g(*/)75
2156 y(j)h(=)f(0;)75 2205 y(for\(i=0;)f(i)i(<)f(1000;)g(i++\))119
2255 y(if)g(\(particle[i].inde)o(x==0\))d(then)184 2305 y({)184
2355 y(zindex[j])i(=)h(i;)184 2405 y(zblock[i])f(=)h(1;)184
2455 y(j++;)184 2504 y(})75 2604 y(/*)g(create)g(datatype)f(for)h(particles)f
(with)h(index)g(zero)g(*/)75 2654 y(MPI_type_index\()e(j,)i(Particletype,)41
b(zindex,)20 b(zblock,)h(Zparticles\);)75 2704 y(MPI_type_commit\()d
(Zparticles,)i(Type2\);)p eop
%%Page: 34 34
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(34)75 95 y Fu(MPI_send\()20 b(MPI_BOTTOM,)f(1,)j(Type2,)e
(dest,)h(tag,)g(comm\);)249 244 y(/*)h(A)f(possibly)f(more)h(efficient)f(way)
i(of)f(defining)f(Zparticles)g(*/)75 344 y(/*)h(consecutive)f(particles)g
(with)h(index)g(zero)g(are)g(handled)f(as)h(one)h(block)e(*/)75
394 y(j=0;)75 444 y(for)h(\(i=0;)g(i)h(<)f(1000;)g(i++\))119
493 y(if)g(\(particle[i].inde)o(x==0\))d(then)162 543 y({)162
593 y(for)j(\(k=i+1;)g(\(k)g(<)h(1000\)&&\(particle)o([k].i)o(ndex)c(==)k
(0\))f(;)h(k++\);)162 643 y(zindex[j])e(=)i(i;)162 693 y(zblock[j])e(=)i
(k-i;)162 742 y(j++;)162 792 y(i)g(=)f(k;)162 842 y(})75 892
y(MPI_type_index\()e(j,)i(Particletype,)e(zindex,)i(zblock,)f(Zparticles\);)
249 1041 y(/*)i(4.3:)f(send)g(the)g(first)g(two)g(coordinates)e(of)j(all)f
(entries)f(*/)75 1141 y(MPI_datatype)f(Allpairs;)129 b(/*)22
b(datatype)e(for)h(all)g(pairs)g(of)g(coordinates)f(*/)75 1191
y(MPI_datatype)f(Type3;)75 1290 y(int)217 b(sizeofentry;)75
1390 y(MPI_extent\()20 b(Particletype,)f(sizeofentry\);)184
1490 y(/*)i(sizeofentry)f(can)h(also)g(be)g(computed)g(by)g(subtracting)e
(the)j(address)249 1539 y(of)g(particle[0])d(from)i(the)g(address)g(of)g
(particle[1])f(*/)75 1639 y(MPI_type_hvector\()e(1000,)j(MPI_real,)f
(sizeofentry,)f(2,)j(Allpairs\);)75 1689 y(MPI_type_commit\()c(Allpairs,)i
(Type3\);)75 1739 y(MPI_send\()g(particle.d,)f(1,)j(Type3,)e(dest,)h(tag,)g
(comm\);)206 1838 y(/*)g(an)h(alternative)d(solution)h(to)i(4.3)f(*/)75
1938 y(MPI_datatype)e(Onepair;)64 b(/*)21 b(datatype)g(for)g(one)g(pair)g(of)
g(coordinates,)f(with)642 1988 y(the)h(extent)f(of)i(one)f(particle)f(entry)h
(*/)75 2038 y(MPI_datatype)e(Type4;)75 2137 y(int)i(indexp[3];)75
2187 y(int)g(typep[3])f(=)i({MPI_lb,)e(MPI_double,)g(MPI_ub};)75
2237 y(int)h(blockp[3])f(=)i({1,)f(2,)g(1};)75 2337 y(MPI_address\()e(\(void)
i(*\)particle,)f(indexp\);)75 2386 y(MPI_address\()f(\(void)i
(*\)particle[0].d,)e(indexp+1\);)75 2436 y(MPI_address\()g(\(void)i
(*\)\(particle+1\),)e(indexp+2\);)75 2536 y(MPI_type_struc\()g(3,)i(typep,)g
(indexp,)f(blockp,)g(Onepair\);)75 2586 y(MPI_commit\()g(Onepair,)g(Type4\);)
75 2635 y(MPI_send\()g(MPI_bottom,)f(1000,)i(Type4,)g(dest,)g(tag,)f(comm\);)
p eop
%%Page: 35 35
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(35)75 45 y Fs(1.13.5)49 b(Co)o(rrect)15 b(use)h(of)g
(addresses)75 122 y Fx(Successiv)o(ely)i(declared)g(v)n(ariables)f(in)f(C)h
(or)g(F)m(ortran)g(are)g(not)g(secessarily)h(stored)g(at)f(con)o(tiguous)g
(lo)q(cations.)75 172 y(Th)o(us,)f(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 221 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 271 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 321 y Fu(MPI)p
144 321 14 2 v 15 w(BOTTOM)p Fx(,)12 b(has)i(to)g(b)q(e)g(restricted.)158
371 y(V)m(alid)e(addresses)k(are)f(de\014ned)g(recursiv)o(ely)g(as)f(follo)o
(ws:)126 459 y(1.)20 b(The)15 b(function)f Fu(MPI)p 497 459
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 509 y(v)n(ariable.)126
590 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
640 y(as)f(argumen)o(t)f(a)g(host)h(program)f(v)n(ariable.)126
722 y(3.)20 b(If)13 b Fu(v)g Fx(is)g(a)g(v)n(alid)f(address,)i(and)f
Fu(i)g Fx(is)g(an)g(in)o(teger,)g(then)h Fu(v+i)f Fx(is)g(a)g(v)n(alid)f
(address,)i(pro)o(vided)f(that)h Fu(v+i)e Fx(do)q(es)179 772
y(not)i(exten)o(t)g(b)q(ey)o(ond)h(the)f(outermost)f(arra)o(y)h(or)g
(structure)i(that)e(con)o(tains)g Fu(v)p Fx(.)126 853 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 853 V 15 w(BOTTOM)21 b(+)h(v)13 b Fx(is)h(a)f(v)n(alid)g(address.)158
942 y(A)e(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
991 y(bu\013ers.)29 b(F)m(urthermore,)18 b(if)e Fu(u)h Fx(and)g
Fu(v)g Fx(are)g(t)o(w)o(o)g(v)n(alid)f(addresses,)j(then)f(the)g(\(in)o
(teger\))g(di\013erence)h Fu(u)i(-)h(v)17 b Fx(can)75 1041
y(b)q(e)h(computed)g(only)f(if)g(b)q(oth)h Fu(u)f Fx(and)h
Fu(v)g Fx(are)g(comp)q(onen)o(ts)f(within)g(the)i(same)e(arra)o(y)g(or)h
(structure;)k(no)17 b(other)75 1091 y(arithmetic)c(op)q(erations)h(can)g(b)q
(e)g(meaningfully)d(executed)16 b(on)e(addresses.)158 1141
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 1191 y(addresses;)16 b(it)d(is)h Fv(relativ)o(e)d
Fx(otherwise.)158 1240 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
1328 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 1328 V 16 w(TYPE)p 932 1328 V 14 w(CONTIGUOUS,)20
b(MPI)p 1274 1328 V 15 w(TYPE)p 1377 1328 V 15 w(VECTOR,)g(MPI)p
1632 1328 V 15 w(TYPE)p 1735 1328 V 15 w(HVECTOR,)179 1378
y(MPI)p 248 1378 V 15 w(TYPE)p 351 1378 V 15 w(INDEX)12 b Fx(or)i
Fu(MPI)p 605 1378 V 15 w(TYPE)p 708 1378 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
1428 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
1478 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 1560 y Fn(\017)21 b
Fx(If)12 b(all)e(en)o(tries)k(of)d(the)i Fu(array)p 634 1560
V 14 w(of)p 692 1560 V 16 w(types)e Fx(argumen)o(t)g(of)g Fu(MPI)p
1124 1560 V 15 w(TYPE)p 1227 1560 V 15 w(STRUC)g Fx(are)i(absolute)f
(addresses)i(\(com-)179 1609 y(puted)j(b)o(y)f Fu(MPI)p 428
1609 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
1659 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
1709 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 1791 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 1841 y(MPI)p 248 1841 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
1890 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
1940 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 2107 y Fo(Discussion:)158 2153 y Ft(It)d(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 2198 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 2244 y(arra)o(ys)f(and)f(records)h(in)g(the)f(host)g(program.)75
2463 y Fw(1.14)59 b(Universal)20 b(comm)m(unica)o(tion)d(functions)75
2554 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 2604 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 2654 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 2704 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)p eop
%%Page: 36 36
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(36)75 45 y(the)15 b(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 95 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
145 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 195 y(memory)e(for)j(new)g(v)n(ariables.)158
244 y(W)m(e)d(assume)f(that)h(the)h(function)f Fu(MPI)p 752
244 14 2 v 15 w(TYPE)p 855 244 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 294
y(but)j(merely)f(creates)j(a)d(new)i(cop)o(y)f(of)f(it.)158
344 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
394 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 444 y Fx(argumen)o(t)14 b(that)i(is)f(not)g
Fu(MPI)p 541 444 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 444 V 15
w(BOTTOM)14 b Fx(b)o(y)75 493 y(creating)g(a)g(suitable)g(displaced)g(new)g
(datat)o(yp)q(e.)k(Th)o(us:)158 543 y Fu(MPI)p 227 543 V 15
w(SEND\()j(start,)f(count,)h(datatype,)f(dest,)h(tag,)g(comm\))12
b Fx(is)75 626 y Fu(Type[1])20 b(=)i(datatype)75 676 y(MPI_ADDRESS\()d
(start,)i(Index[1]\);)75 726 y(Block[1])f(=)i(count;)75 776
y(MPI_TYPE_STRUCT\()c(1,)k(Type,)f(Index,)f(Block,)h(Newtype\))75
826 y(MPI_TYPE_COMMIT\()d(Newtype,)j(datatype1\))75 875 y(MPI_SEND\()f
(MPI_BOTTOM,)f(1,)j(datatype1,)e(dest,)g(tag,)h(comm\))158
958 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 1008 y Fu(datatype)p Fx(.)k(W)m(e)10 b(shall)g(henceforw)o(ard)h
(restrict)h(ourselv)o(es)g(to)e(comm)o(unication)d(that)k(in)o(v)o(olv)o(es)e
(only)h(one)g(elemen)o(t)75 1058 y(with)k(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 1058 V 15 w(BOTTOM)p Fx(\).)158 1108 y(\(If)15 b(the)h(op)q(eration)f
Fu(MPI)p 546 1108 V 15 w(TYPE)p 649 1108 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 1158 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 1158 V 15
w(TYPE)p 1425 1158 V 15 w(COMMIT)p Fx(,)f(to)i(our)g(list,)g(and)75
1207 y(in)o(tro)q(duces)f(small)d(c)o(hanges)i(in)g(the)g(construction.\))158
1257 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 1307 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 1307 V 16 w(COMM)p 1575 1307 V 14 w(FREE)h Fx(op)q(eration.)75
1357 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 1407 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 1456
y(The)h(function)g Fu(MPI)p 475 1456 V 15 w(COMM)p 578 1456
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 1554 y Fu(MPI)p
144 1554 V 15 w(COMM)p 247 1554 V 15 w(INIT\(handle,)19 b(datatype,)h
(source-dest,)f(tag,)i(comm,)g(op-mode,)f(persistence\))117
1603 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 1649 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
1695 y(in)h Fu(source-dest)543 b Ft(rank)13 b(of)g(destination)j(or)d(source)
g(\(in)o(teger\))117 1740 y(in)h Fu(tag)719 b Ft(message)13
b(tag)h(\(in)o(teger\))117 1786 y(in)g Fu(comm)697 b Ft(comm)o(unication)15
b(ob)r(ject)117 1832 y(in)f Fu(op-mode)631 b Ft(one)19 b(of)g
Fm(MPI)p 1135 1832 12 2 v 13 w(STANDARD)p Ft(,)d Fm(MPI)p 1395
1832 V 13 w(READY)p Ft(,)g Fm(MPI)p 1595 1832 V 13 w(SYNCHRONOU)o(S)g
Ft(or)905 1881 y Fm(MPI)p 967 1881 V 13 w(RECV)117 1927 y Ft(in)e
Fu(persistence)543 b Ft(one)13 b(of)g Fm(MPI)p 1123 1927 V
13 w(PERSISTEN)o(T)d Ft(or)j Fm(MPI)p 1452 1927 V 13 w(EPHEMERAL)158
2003 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 2120 y Fs(1.14.1)49
b(P)o(ersistent)14 b(comm)o(unication)g(objects)75 2196 y Fu(MPI)p
144 2196 14 2 v 15 w(CREATE)p 291 2196 V 15 w(SEND\(handle,)19
b(MPI)p 655 2196 V 15 w(BOTTOM,)h(1,)i(datatype,)e(dest,)g(tag,)h(comm\))13
b Fx(is)75 2288 y Fu(MPI_COMM_INIT\(han)o(dle,)18 b(datatype,)i(dest,)h(tag,)
g(comm,)g(MPI_STANDARD,)e(MPI_PERSISTENT\))158 2379 y Fx(The)14
b(functions)g Fu(MPI)p 491 2379 V 15 w(CREATE)p 638 2379 V
15 w(RSEND)p Fx(,)e Fu(MPI)p 853 2379 V 15 w(CREATE)p 1000
2379 V 14 w(RSEND)h Fx(and)h Fu(MPI)p 1284 2379 V 15 w(CREATE)p
1431 2379 V 14 w(RECV)f Fx(are)h(dealt)g(in)f(a)h(sim-)75 2429
y(ilar)f(manner.)158 2479 y(The)h(functions)g Fu(MPI)p 491
2479 V 15 w(START)f Fx(and)h Fu(MPI)p 776 2479 V 15 w(COMM)p
879 2479 V 15 w(FREE)f Fx(are)h(primitiv)o(e.)p eop
%%Page: 37 37
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(37)75 45 y Fs(1.14.2)49 b(Nonblo)q(cking)19
b(comm)n(unication)14 b(initiation)75 122 y Fu(MPI)p 144 122
14 2 v 15 w(ISEND\(handle,)19 b(MPI)p 530 122 V 15 w(BOTTOM,)i(1,)g
(datatype,)f(dest,)h(tag,)g(comm\))12 b Fx(is)75 213 y Fu(MPI_COMM_INIT\(han)
o(dle,)18 b(datatype,)i(dest,)h(tag,)g(comm,)g(MPI_STANDARD,)e
(MPI_EPHEMERAL\))75 263 y(MPI_START\(handle\))158 354 y Fx(The)14
b(functions)g Fu(MPI)p 491 354 V 15 w(IRSEND)p Fx(,)f Fu(MPI)p
729 354 V 15 w(ISSEND)f Fx(and)i Fu(MPI)p 1035 354 V 15 w(IRECV)f
Fx(are)h(handled)g(in)f(a)h(similar)d(manner.)75 470 y Fs(1.14.3)49
b(Comm)o(unication)14 b(completion)75 547 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 547 V
15 w(WAITANY)e Fx(and)i Fu(MPI)p 1297 547 V 15 w(TESTALL)p
Fx(.)158 597 y(The)c(function)f Fu(MPI)p 466 597 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 597 V 15 w(WAITANY)f Fx(with)h(an)g Fu(array-of-handles)75
647 y Fx(argumen)o(t)k(of)g(length)h(one.)158 696 y(The)j(function)e
Fu(MPI)p 479 696 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 696 V 15 w(WAIT)h Fx(call)f(is)h
(executed)75 746 y(for)e(eac)o(h)g(successiv)o(e)i(handle)e(in)f(the)i
Fu(array-of-handles)o Fx(.)158 796 y(The)d(function)e Fu(MPI)p
469 796 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 796 V 15 w(TESTALL)f Fx(with)g(an)h Fu(array-ofhandles)75
846 y Fx(of)i(length)h(one.)158 896 y(The)j(function)e Fu(MPI)p
479 896 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 896 V 15 w(TEST)h Fx(call)f(is)h(executed)75
946 y(for)e(eac)o(h)g(successiv)o(e)i(handle)e(in)f(the)i Fu(array-of-handle)
p Fx(.)75 1062 y Fs(1.14.4)49 b(Blo)q(cking)18 b(comm)o(unication)75
1138 y Fu(MPI)p 144 1138 V 15 w(SEND\(MPI)p 335 1138 V 14 w(BOTTOM,)i(1,)i
(datatype,)e(dest,)h(tag,)f(comm\))13 b Fx(is)75 1230 y Fu
(MPI_COMM_INIT\(han)o(dle,)18 b(datatype,)i(dest,)h(tag,)g(comm,)g
(MPI_STANDARD,)e(MPI_EPHEMERAL\))75 1279 y(MPI_START\(handle\))75
1329 y(MPI_WAIT\(handle,)f(dontcarestatus\))158 1421 y Fx(The)c(functions)g
Fu(MPI)p 491 1421 V 15 w(RSEND)f Fx(and)h Fu(MPI)p 776 1421
V 15 w(SSEND)f Fx(are)h(handled)g(in)f(a)h(similar)d(manner.)158
1470 y Fu(MPI)p 227 1470 V 15 w(RECV\(MPI)p 418 1470 V 14 w(BOTTOM,)20
b(1,)i(datatype,)e(source,)g(tag,)h(comm\))13 b Fx(is)75 1562
y Fu(MPI_COMM_INIT\(han)o(dle,)18 b(datatype,)i(dest,)h(tag,)g(comm,)g
(MPI_RECV,)f(MPI_EPHEMERAL\))75 1612 y(MPI_START\(handle\))75
1661 y(MPI_WAIT\(handle,)e(status\))75 1778 y Fs(1.14.5)49
b(Prob)q(e)17 b(and)f(cancel)75 1854 y Fx(The)e(functions)g
Fu(MPI)p 408 1854 V 15 w(PROBE)f Fx(and)h Fu(MPI)p 693 1854
V 15 w(CANCEL)f Fx(are)h(primitiv)o(e.)75 1970 y Fs(1.14.6)49
b(Return)16 b(status)75 2047 y Fx(The)e(functions)g Fu(MPI)p
408 2047 V 15 w(GET)p 489 2047 V 15 w(SOURCE)p Fx(,)e Fu(MPI)p
726 2047 V 15 w(GET)p 807 2047 V 15 w(TAG)p Fx(,)g Fu(MPI)p
978 2047 V 15 w(GET)p 1059 2047 V 15 w(LEN)p Fx(,)h Fu(MPI)p
1231 2047 V 15 w(PROBE)p 1356 2047 V 15 w(LEN)p Fx(,)f(and)i
Fu(MPI)p 1608 2047 V 15 w(IS)p 1667 2047 V 15 w(CANCELLED)75
2097 y Fx(are)g(primitiv)o(e.)158 2147 y(These)h(functions)f(are)g(simple)f
(macros)g(that)h(access)h(records)h(in)d(a)h(structure.)75
2263 y Fs(1.14.7)49 b(send-receive)15 b(and)i(exchange)75 2339
y Fu(MPI)p 144 2339 V 15 w(SENDRECV\()j(send)p 465 2339 V 15
w(start,)g(send)p 720 2339 V 15 w(count,)h(send)p 976 2339
V 15 w(type,)f(dest,)h(recv)p 1340 2339 V 15 w(start,)g(recv)p
1596 2339 V 14 w(count,)g(recv)p 1851 2339 V 15 w(type,)75
2389 y(source,)f(tag,)h(comm,)g(status\))12 b Fx(is)75 2481
y Fu(MPI_ISEND\(handle[)o(0],)19 b(send_start,)g(send_count,)h(send_type,)f
(dest,)i(tag,)g(comm\))75 2530 y(MPI_IRECV\(handle[)o(1],)e(recv_start,)g
(recv_count,)h(recv_type,)f(source,)i(tag,)g(comm\))75 2580
y(MPI_WAITALL\(2,)e(handle,)h(status_array\))75 2630 y(status)h(=)g
(status_array[1])p eop
%%Page: 38 38
bop 75 -100 a Fq(SECTION)15 b(1.)31 b(POINT)15 b(TO)f(POINT)g(COMMUNICA)m
(TION)732 b Fx(38)158 45 y(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 95 y(The)17 b(function)f Fu(MPI)p 480
95 14 2 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 145
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 195 y(function)g Fu(MPI)p 307 195 V 15 w(TYPE)p 410
195 V 15 w(EXTENT)p Fx(.)75 311 y Fs(1.14.8)49 b(Derived)16
b(datat)o(yp)q(es)75 387 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 437 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 487 y Fu(MPI)p 144
487 V 15 w(TYPE)p 247 487 V 15 w(STRUC)p Fx(;)12 b(the)j(functions)f
Fu(MPI)p 713 487 V 15 w(TYPE)p 816 487 V 15 w(FREE)p Fx(,)e
Fu(MPI)p 1009 487 V 15 w(TYPE)p 1112 487 V 15 w(EXTENT)h Fx(and)g
Fu(MPI)p 1418 487 V 16 w(ADDRESS)f Fx(are)i(primitiv)o(e.)75
603 y Fs(1.14.9)49 b(Summ)o(a)o(r)o(y)75 680 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 730
y(those)i(are)f(trivial)e(macros:)126 821 y(1.)20 b Fu(MPI)p
248 821 V 15 w(COMM)p 351 821 V 15 w(INIT)126 904 y Fx(2.)g
Fu(MPI)p 248 904 V 15 w(START)126 987 y Fx(3.)g Fu(MPI)p 248
987 V 15 w(WAITALL)126 1070 y Fx(4.)g Fu(MPI)p 248 1070 V 15
w(TESTANY)126 1153 y Fx(5.)g Fu(MPI)p 248 1153 V 15 w(PROBE)126
1236 y Fx(6.)g Fu(MPI)p 248 1236 V 15 w(CANCEL)126 1319 y Fx(7.)g
Fu(MPI)p 248 1319 V 15 w(GET)p 329 1319 V 15 w(SOURCE)126 1402
y Fx(8.)g Fu(MPI)p 248 1402 V 15 w(GET)p 329 1402 V 15 w(TAG)126
1485 y Fx(9.)g Fu(MPI)p 248 1485 V 15 w(GET)p 329 1485 V 15
w(LEN)105 1568 y Fx(10.)g Fu(MPI)p 248 1568 V 15 w(PROBE)p
373 1568 V 15 w(LEN)105 1651 y Fx(11.)g Fu(MPI)p 248 1651 V
15 w(IS)p 307 1651 V 15 w(CANCELLED)105 1734 y Fx(12.)g Fu(MPI)p
248 1734 V 15 w(TYPE)p 351 1734 V 15 w(STRUC)105 1817 y Fx(13.)g
Fu(MPI)p 248 1817 V 15 w(TYPE)p 351 1817 V 15 w(EXTENT)105
1900 y Fx(14.)g Fu(MPI)p 248 1900 V 15 w(ADDRESS)105 1983 y
Fx(15.)g Fu(MPI)p 248 1983 V 15 w(TYPE)p 351 1983 V 15 w(FREE)105
2066 y Fx(16.)g Fu(MPI)p 248 2066 V 15 w(COMM)p 351 2066 V
15 w(FREE)158 2158 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 2207 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