From: "Marc Snir" <[email-masked]>
Date: Wed, 14 Apr 93 18:19:01 EDT

%!PS-Adobe-2.0
%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
%%Title: PT2PT-V2.DVI.*
%%Pages: 30 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 8 56 df<EAFFF0A3EAE000B3B3B3B3B3B3AAEAFF
F0A30C7C758118>34 D<EAFFF0A3EA0070B3B3B3B3B3B3AAEAFFF0A30C7C808118>I<EAFFFCA3
EAE000B3B3B3B10E4A73801C>50 D<EAFFFCA3EA001CB3B3B3B10E4A80801C>I<12E0B3B3B3B1
EAFFFCA30E4A73811C>I<131CB3B3B3B1EAFFFCA30E4A80811C>I<12E0B3A9031B73801C>I<12
E0B3A9031B75801C>I E /Fb 1 4 df<1207A3EAE738EAFFF8EA7FF0EA1FC0A2EA7FF0EAFFF8EA
E738EA0700A30D0E7E8E12>3 D E /Fc 2 36 df<1506A28116801501ED00E0B712F816F0C912
E0ED0180150316001506A2250E7E902A>33 D<1203B3ABEAC30CEAF33CEA3B70EA1FE0EA0780A2
EA03007E0E257D9C15>35 D E /Fd 2 63 df<127012F8A3127005057C840D>58
D<12E01278121EEA0780EA01E0EA0078131C130FEB03C0EB00F0143C140FEC03C0A2EC0F00143C
14F0EB03C0010FC7FC131C1378EA01E0EA0780001EC8FC127812E01A1A7C9723>62
D E /Fe 4 107 df<B612C0A21A027C8B23>0 D<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA8EA7FFE
A2EA3FFCEA1FF8EA07E010127D9317>15 D<12C012F0123C120FEA03C0EA00F0133C130E6D7EEB
01E0EB0078141EEC0780EC01C0EC0780EC1E001478EB01E0EB0780010EC7FC133C13F0EA03C000
0FC8FC123C12F012C0C9FCA7B612C0A21A247C9C23>21 D<12C0B3B3A9022D7BA10D>106
D E /Ff 32 122 df<1238127C127EA2123E120E121E123C127C12F81260070B798416>44
D<127012F8A312700505788416>46 D<EA03E0EA0FF8487EEA1E3CEA380EEA780FEA7007A238E0
0380A8EAF00700701300A2EA780FEA3C1E6C5AEA1FFC6C5AEA03E011197E9816>48
D<EA018012031207A2121F127F12FF12731203AEEA7FF813FC13F80E197C9816>I<13E0487EA2
13B0A2EA03B8A31318EA071CA5EA0E0EA2EA0FFEA2487EEA1C07A3387F1FC000FF13E0007F13C0
13197F9816>65 D<EA7FF8EAFFFE6C7EEA1C0FEB07801303A313071400EA1FFF5BA2EA1C1FEB03
8014C01301A41303EB0780EA7FFFB51200EA7FFC12197F9816>I<3801F180EA07FF5AEA1F0FEA
3C0712781303127000F0C7FC5AA77E387003801278A2EA3C07381F0F00EA0FFE6C5AEA01F01119
7E9816>I<EA7FF8EAFFFE6C7EEA1C0FEB0780EB03C01301A214E01300A8EB01C0A21303EB0780
130F387FFF00485AEA7FF81319809816>I<387FFFC0B5FC7EEA1C01A490C7FCA2131CA2EA1FFC
A3EA1C1CA290C7FC14E0A5EA7FFFB5FC7E13197F9816>I<B512E0A3EA1C00A41400A2131CA2EA
1FFCA3EA1C1CA290C7FCA6B47E7F5B13197F9816>I<EA03E348B4FC121FEA3E1FEA3C0F12787F
127000F0C7FC5AA4EB3F80EB7FC0EB3F8038F007001270EA780FA2123CEA3E1F6CB4FC1207EA03
E712197E9816>I<EAFFFEA3EA0380B3EAFFFEA30F197D9816>73 D<EAFFC0A3001CC7FCAE1440
14E0A4B5FCA313197F9816>76 D<38FC07E0EAFE0FA2383A0B80EA3B1BA413BBA2EA39B3A413F3
EA38E3A21303A538FE0FE0A313197F9816>I<387E1FC038FF3FE0387F1FC0381D07001387A313
C7A2121CA213E7A31367A21377A21337A31317EA7F1FEAFF9FEA7F0F13197F9816>I<EA1FFC48
7E487EEA780F38F00780EAE003AEEAF007A238780F00EA7FFF6C5A6C5A11197E9816>I<EA7FF8
EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005B13F8001CC7FCA7127F487E6C
C7FC12197F9816>I<EA7FE0EAFFF86C7EEA1C1E7F7FA45B131EEA1FFC5B7FEA1C3E130EA41420
1470A2387F0FF038FF87E0387F03C014197F9816>82 D<EA07E3EA1FFF127FEA781F487E487EA2
90C7FC7E1278EA7F80EA1FF0EA07FCC67E130FEB07801303A212E0A2EAF00738F80F00EAFFFE5B
EAC7F011197E9816>I<387FFFE0B5FCA2EAE0E0A400001300AFEA07FC487E6C5A13197F9816>I<
387F07F038FF8FF8387F07F0381C01C0B0EA1E03000E1380EA0F8F3807FF006C5AEA00F8151980
9816>I<38FC07E0EAFE0FEAFC07387001C0A300301380EA3803A313E3EA39F3A213B300191300
A61313EA1B1BEA0F1EA2EA0E0E13197F9816>87 D<38FE0FE0EAFF1FEAFE0F381C0700A2EA0E0E
A26C5AA3EA03B8A2EA01F0A26C5AA8EA03F8487E6C5A13197F9816>89 D<EAFFF0A3EAE000B3A8
EAFFF0A30C20789C16>91 D<EAFFF0A3EA0070B3A8EAFFF0A30C207F9C16>93
D<EA1FE0EA7FF87FEA783CEA301EEA000E133EEA07FE123FEA7FCEEAF80E12E0A2EAF01EEAF83E
387FFFE0EA3FF7EA0FC313127E9116>97 D<EA07E0EA0FF8EA1FFCEA3C3EEA780EEA700FEAF007
B5FCA3EAE0007EEA70071278EA3E1FEA1FFEEA0FFCEA03F010127D9116>101
D<EA0180EA03C0A2EA0180C7FCA4EA7FC0A31201ACEA7FFFB5FC7E101A7D9916>105
D<EA7E7CB5FC6C1380EA0F871303A2120EA9387FC7F038FFE7F8387FC7F01512809116>110
D<EA7E3E38FEFF80007F13C0380F83E01301EB00F0120E1470A4000F13F014E01381EB83C013FF
000E1300137C90C7FCA6EA7FC0487E6C5A141B809116>112 D<12035AA4EA7FFFB5FCA20007C7
FCA75BEB0380A2130713873803FF005BEA00F811177F9616>116 D<387F1FC038FF9FE0387F1F
C0381C0700120E130EA212075BA2EA039CA21398EA01B8A2EA00F0A35BA3485A1279127BEA7F80
6CC7FC123C131B7F9116>121 D E /Fg 53 122 df<90380FE0FE90387FF3FF9039F87F8F8039
01E0FF1F000313FEEA07C091387E0F00023EC7FCA5B612F0A22607C03EC7FCB0393FF9FFE0A221
20809F1E>11 D<EB0FFE137FEBF87E3801E0FE12033807C07EA2143EA5B512FEA23807C03EB039
3FF9FFC0A21A20809F1D>13 D<1318137013E0EA01C0EA0380A2EA0700120EA2121E121C123CA2
5AA412F85AA97E1278A47EA2121C121E120EA27EEA0380A2EA01C0EA00E0137013180D2D7DA114
>40 D<12C012707E7E7EA27EEA0380A213C0120113E0A2EA00F0A413F81378A913F813F0A4EA01
E0A213C012031380A2EA0700120EA25A5A5A12C00D2D7DA114>I<1238127C12FE12FFA2127F12
3B1203A21206A2120E120C12181270122008107C860F>44 D<EAFFF0A40C047F8B11>I<123812
7C12FEA3127C123807077C860F>I<EA07F8EA1FFE38381F80EA780F00FC13C0A3127838301F80
00001300133E5B13705BA25BA690C7FCA4EA01C0EA07F0A5EA01C012207D9F19>63
D<14E0A2497EA3497EA2497EA2497E130CA2EB187FA201307F143F01707FEB601FA201C07F140F
48B57EA2EB800748486C7EA20006801401000E803AFFE01FFFE0A2231F7E9E28>65
D<B512FEECFFC03907E007E0EC03F0EC01F815FCA515F8140315F0EC0FE090B5128015E09038E0
03F0EC01F815FC140015FEA515FC140115F8EC07F0B612E015001F1F7E9E25>I<903807FC0290
383FFF0E9038FE03DE3903F000FE4848133E4848131E485A48C7120EA2481406127EA200FE1400
A7127E1506127F7E150C6C7E6C6C13186C6C13386C6C13703900FE01C090383FFF80903807FC00
1F1F7D9E26>I<B512FEECFFC03907F007F0EC01F86E7E157E81A2ED1F80A316C0A91680A3ED3F
00A2157E5D4A5AEC07F0B612C04AC7FC221F7E9E28>I<B612E0A23807F0071401140015601570
1530A21460A21500A2EBF1E013FFA213F1EBF060A2150CA214001518A31538157815F8EC03F0B6
FCA21E1F7E9E22>I<B612E0A23807F00714011400156015701530A21460A21500A2EBF1E013FF
A213F1EBF060A491C7FCA8B512C0A21C1F7E9E21>I<903807FC0290383FFF0E9038FE03DE3903
F000FE4848133E4848131E485A48C7120EA2481406127EA200FE91C7FCA591387FFFE0A2007E90
3800FE00A2127F7EA26C7E6C7E6C7E3803F0013900FE03BE90383FFF1E903807FC06231F7D9E29
>I<B5389FFFF0A23A07F000FE00AC90B5FCA2EBF000ADB5389FFFF0A2241F7E9E29>I<B51280A2
3807F000B3A9B51280A2111F7F9E14>I<B512C0A2D807F0C7FCB115C0A31401A3EC0380A21407
141FB6FCA21A1F7E9E1F>76 D<D8FFF0EC7FF86D14FF00071600D806FCEB01BFA3017EEB033FA2
6D1306A290381F800CA390380FC018A2903807E030A2903803F060A3903801F8C0A2903800FD80
A2EC7F00A2143EA33BFFF01C07FFF8A22D1F7E9E32>I<D8FFF8EBFFF0A2D807FCEB06007F7F00
061380137FEB3FC0EB1FE0EB0FF014F8EB07FC1303EB01FEEB00FFEC7F8615C6EC3FE6141FEC0F
F6EC07FE1403A214011400157E153E151EA2D8FFF0130E1506241F7E9E29>I<EB1FF890B5FC39
01F81F803907E007E0390FC003F0391F8001F890C7FC4814FC4814FE007E147EA200FE147FA900
7E147E007F14FEA26C14FCEB8001001F14F8390FC003F03907E007E03901F81F806CB51200EB1F
F8201F7D9E27>I<B512FEECFF803907F00FE0EC03F0EC01F8A215FCA515F8A2EC03F0EC0FE090
B51280ECFE0001F0C7FCACB57EA21E1F7E9E24>I<EB1FF890B5FC3901F81F803907E007E0390F
C003F0391F8001F8A248C712FC4814FEA2007E147E00FE147FA9007E147EA2007F14FE6C14FCEB
87C1391F8FF1F8390FDC3BF03907F83FE0D801FC13806CB5120090381FFE03EB001F1587EC0FFF
A215FE140715FC1403EC00F020287D9E27>I<B512F814FF3907F01FC0EC07E06E7EA281A45DA2
4A5AEC1FC090B5C7FC5C9038F03F806E7E81140FA61630A2EDF070913807F860B53881FFE09138
807F80241F7E9E27>I<3803FC08380FFF38381E03F8EA3C00481378143812F814187E1400B4FC
13F86CB4FC14C06C13E06C13F06C13F8120338001FFC13011300A200C0137CA36C1378A200F813
F038FE01E038E7FFC000811300161F7D9E1D>I<007FB512FCA2397C0FE07C0070141C0060140C
A200E0140E00C01406A400001400B10007B512C0A21F1E7E9D24>I<B53881FFE0A23A07F0000C
00B3A3151C000314186D1338000114306C6C137090387F03E090381FFF80D903FCC7FC231F7E9E
28>I<B5EB3FF8A2D807F0EB038016006D5B000314066D130E0001140C7F00005C7F6D5BA26D6C
5AA2ECC0E0011F5B14E1010F5B14F1D907F3C7FC14FBEB03FEA36D5AA26D5AA21470A2251F7F9E
28>I<B53A1FFFC0FFE0A23C0FE001FC000E00D807F0150C81EBF80000035E816D1538000149EB
803015BFD800FE5D9138031FC001FF15E0017F6E5AEC060FD93F86EBE180028E13F1ECCC07011F
02F3C7FC9138D803FB02F813FF010F5CECF00101075CECE000A201035C4A1378010114704A1330
331F7F9E36>I<B5380FFF80A23A07F800F00000035C6D485AD801FE5B6C6C48C7FC5CEB7F8EEB
3FCC14D8EB1FF86D5A1307806D7E80A2EB06FF90380E7F80131C9038183FC0496C7E1370496C7E
496C7E3801800300038000076D7E3AFFF81FFFE0A2231F7E9E28>I<B5EB3FF8A2D80FF8EB0380
0007EC07006C6C13065D6C6C131C6C6C13185D90387F807090383FC0605DEB1FE190380FF18002
F3C7FC6DB4FC6D5A5C1301AB90383FFFE0A2251F7F9E28>I<EA07FCEA1FFF383F0F80EB07C0EB
03E0A2120C1200EA01FF120FEA3F83EA7E03127C12F8A3EAFC07EA7E0D383FF9FE3807E07E1714
7F9319>97 D<B4FCA2121FAAEB1FC0EB7FF0EBE0F8EB807CEB007E143EA2143FA6143EA2147C13
80381EC1F8381C7FE038181F8018207E9F1D>I<EA01FE3807FF80381F0FC0123EA2127CEB0300
00FCC7FCA6127C127E003E1360003F13C0EA1F813807FF00EA01FC13147E9317>I<EB07F8A213
00AAEA01F8EA0FFEEA1F83EA3E01EA7E00127CA212FCA6127CA2127EEA3E01EA1F07380FFEFFEA
03F818207E9F1D>I<EA01FE3807FF80381F83E0383F01F0EA7E0014F85AA2B5FCA200FCC7FCA3
127C127E003E1318003F1338380F80703807FFE0C6138015147F9318>I<EB1F80EBFFC03801F3
E0EA03E713C71207EBC3C0EBC000A5EAFFFCA2EA07C0B0EA3FFCA213207F9F10>I<3801FC3C38
07FFFE380F07DEEA1E03003E13E0A5001E13C0380F0780EBFF00EA19FC0018C7FCA2121C381FFF
8014F06C13F8003F13FC387C007C0070133E00F0131EA30078133CA2383F01F8380FFFE0000113
00171E7F931A>I<B4FCA2121FAAEB0FC0EB3FE0EB61F0EBC0F813801300AD38FFE3FFA218207D
9F1D>I<121C123F5AA37E121CC7FCA6B4FCA2121FB0EAFFE0A20B217EA00E>I<B4FCA2121FAAEB
01FEA2EB00F0EB01C0EB0380EB0700131E1338137C13FE7F131F381E0F80EB07C014E0EB03F013
01EB00F838FFC3FFA218207E9F1C>107 D<B4FCA2121FB3AAEAFFE0A20B207E9F0E>I<3AFE0FE0
3F8090393FF0FFC03A1E70F9C3E09039C07F01F0381F807EA2EB007CAC3AFFE3FF8FFEA227147D
932C>I<38FE0FC0EB3FE0381E61F0EBC0F8EA1F801300AD38FFE3FFA218147D931D>I<48B4FC00
0713C0381F83F0383E00F8A248137CA200FC137EA6007C137CA26C13F8A2381F83F03807FFC000
01130017147F931A>I<38FF1FC0EB7FF0381FE1F8EB80FCEB007EA2143E143FA6143E147E147C
EB80FCEBC1F8EB7FE0EB1F8090C7FCA7EAFFE0A2181D7E931D>I<EAFE3EEB7F80381ECFC0EA1F
8FA3EB030090C7FCABEAFFF0A212147E9316>114 D<EA0FE6EA3FFEEA701EEA600EEAE006A2EA
F800EAFFC0EA7FF8EA3FFCEA1FFE1203EA001FEAC007A212E0EAF006EAF81EEAFFFCEAC7F01014
7E9315>I<EA0180A31203A31207120F123FEAFFFCA2EA0F80AA1386A5EA07CCEA03F8EA01F00F
1D7F9C14>I<38FF07F8A2EA1F00AD1301A2EA0F073807FEFFEA03F818147D931D>I<39FFE07F80
A2391F001C00380F8018A26C6C5AA26C6C5AA26C6C5AA213F900005B13FF6DC7FCA2133EA2131C
A219147F931C>I<38FFE1FFA2380F80706C6C5A6D5A3803E180EA01F36CB4C7FC137E133E133F
497E136FEBC7C0380183E0380381F0380701F8380E00FC39FF81FF80A219147F931C>120
D<39FFE07F80A2391F001C00380F8018A26C6C5AA26C6C5AA26C6C5AA213F900005B13FF6DC7FC
A2133EA2131CA21318A2EA783012FC5BEAC0E0EAE1C0EA7F80001EC8FC191D7F931C>I
E /Fh 28 86 df<1230127812F81278127005057C840D>46 D<130C131C13FCEA0FF813381200
A41370A613E0A6EA01C0A61203EA7FFE12FF0F1E7C9D17>49 D<133FEBFFC03801C1E0380300F0
00061378A2000F137C1380A2EB00781206C712F814F0130114E0EB03C0EB0780EB0F00131C5B5B
13C0485A380300601206001C13C05AEA7FFFB51280A2161E7E9D17>I<137F3801FFC0380383E0
EA0701EB00F05A1301A2000013E0A2EB03C0EB0780EB0F0013FE13F8130E7F1480EB03C0A3EA30
07127812F8A238F00F8000C01300EA601EEA383CEA1FF8EA07E0141F7D9D17>I<EB01C01303A2
EB0780130F131B133B13731363EBC700EA0187EA03071207120E120CEA180E1230126012E0B512
F0A238001C00A6133C3803FFC0A2141E7D9D17>I<00031370EBFFF014E01480EBFE000006C7FC
A6EA0C7CEA0DFF380F8780EA0E03380C01C0A2000013E0A4387003C012F0A21480EAC00700E013
00EA600EEA383CEA1FF0EA0FC0141F7D9D17>I<133FEBFF803801C1E0EA038038070070120EA3
14E0120FEB81C0EBC3803807F700EA03FC120148B4FC380F3F80EA1C0F383807C01303EA7001A2
12E0A3EB0380007013005BEA3C1CEA1FF8EA07E0141F7D9D17>56 D<137E48B4FC380383803807
01C0120E121E001C13E0123CA21278A41303A2383807C0A2EA1C0FEA1FFB380FE380EA0007A214
00130E1260EAF01C5B485A5BEA7FC06CC7FC131F7C9D17>I<14181438A21478147C14FCA2EB01
BCA2EB033C143EEB061EA2130CA21318141F497EA21360EB7FFF90B5FCEBC00F3901800780A2EA
0300A21206A2001F14C039FFC07FFCA21E207E9F22>65 D<0007B5FC15C039003C01E015F09038
7800F8A515F0EBF001EC03E0EC07C0EC0F809038FFFE00ECFF803901E007C0EC03E0A21401A215
F0D803C013E01403A2EC07C0A2EC0F800007EB3F00387FFFFEB512F01D1F7E9E20>I<903803F8
0890380FFE1890383F073890387801F83801F000D803C013F0000714705B48C7FC5A121E003E14
60123C007C1400A45AA415C01278EC0180127C003CEB0300A26C13065C6C6C5A3807E0703801FF
C06C6CC7FC1D217B9F21>I<0007B5FC15E039003C01F0EC00F849137C153C151EA3151F5BA648
48131E153EA3153C157C4848137815F0A2EC01E0EC03C0EC0F800007EB3F00387FFFFCB512E020
1F7E9E23>I<0007B512F8A238003C001578491338A5EC0C30EBF0181500A21438EBFFF8A23801
E0701430A2151815301400485A1560A215E0EC01C014030007130F007FB51280B6FC1D1F7E9E1F
>I<0007B512F8A238003C001578491338A5EC0C30EBF0181500A21438EBFFF8A23801E0701430
A491C7FC485AA61207EA7FFE12FF1D1F7E9E1E>I<903801FC0490380FFF0C90383F039C903878
00FC5BD803E013785B4848133848C7FC5A121E003E1430A2481400A45AA2EC7FFCA2EC01E01278
EC03C0127C123CA27E6C13073907800F803803E0393801FFF039003F80001E217B9F24>I<3A07
FFC7FFC0A23A003C007800A2495BA649485AA490B5FCA23901E003C0A64848485AA60007130F39
7FFCFFF8485A221F7E9E22>I<3807FFE0A238003C00A25BA65BA6485AA6485AA61207EAFFFCA2
131F7F9E10>I<EBFFFC14F8EB07C01303EB0780A6EB0F00A6131EA65B1230127812F81338EAF0
78EAC0F0EA61E0EA3FC06CC7FC16207D9E17>I<3A07FFE0FFE0A23A003C003E001538495B5DEC
01804AC7FC14065C495A5C5CEBF1F013F3EBF778EA01EC13F8497E13E080A248487EA36E7EA26E
7E0007497E397FFC1FFC00FF133F231F7E9E23>I<3807FFF0A2D8003CC7FCA25BA65BA6485AA3
EC0180A2EC0300EA03C0A25C1406140E141E0007137E387FFFFCB5FC191F7E9E1C>I<D807FCEC
FFC05DD8003EECF800ED0378016E5C1506A2150C1367151801C7EB19E01531A21561EBC38015C1
D80183EBC3C0EC8183A2903881C303A214C6D80301495A14CCA2EB00F8A24813F0D80F80130F3A
7FF0E0FFF800FF13E12A1F7E9E2A>I<3A07FC03FFC0A23A003E007C001538016F1330A3EB6780
A2EB63C001C35BA2EBC1E0A2EBC0F0A2D801805B1478A2143CA33903001F80A2140FA3481307D8
0F8090C7FC387FF00312FF221F7E9E22>I<EB03F8EB1FFEEB3C1F9038F007803901E003C03903
C001E0EA0780000FEB00F090C7FC5A001E14F8123E123C127CA448EB01F0A4EC03E01278EC07C0
127CEC0F80003C1400003E131E001E5B6C5B3807C1F03803FFC0C648C7FC1D217B9F23>I<0007
B5FC15C039003C03E0EC01F0EB780015F8A59038F001F0A215E0EC03C0EC0F809038FFFE004813
F801E0C7FCA5485AA61207EA7FFC12FF1D1F7E9E1F>I<3807FFFC14FF39003C07C0EC03E0EB78
0115F0A415E0EBF00315C0EC0780EC1F00EBFFFC14F03801E038143C141CA2141EA23803C03EA4
1506A20007140C397FFC1F1800FFEB0FF8C7EA03E01F207E9E21>82 D<EB3F04EB7FCC3801E0FC
3803807CEB003C48133800061318120EA31400120FA213E0EA07FE3803FF806C13C038007FE013
071301130014F0A2006013E0A4387001C01480EAF80338FE0F00EAC7FCEA81F816217D9F19>I<
001FB512F8A2381E03C000381438EB078012300070141812601538153038C00F0000001400A513
1EA65BA6137C381FFFF05A1D1F7B9E21>I<39FFFC7FF8A23907800F80EC0700380F0006A6001E
5BA6485BA600385BA35C003C5B121C381E0180D80F07C7FCEA07FCEA01F81D20799E22>I
E /Fi 73 126 df<127012F8B012701200A5127012F8A31270051C779B18>33
D<EA03C0487E487EEA1E78EA1C38A4EB7BF013F3EA1EE3380FE780EBC70013875BEA1F0EEA3F8E
EA7B9EEA73DC12F1EAE1FCEAE0F8EB7870EAF0F8EA71FE387FFFF0383FCFE0381F03C0141C7F9B
18>38 D<137013F01201EA03C0EA0780EA0F00121E121C123C123812781270A212F05AA87E1270
A212781238123C121C121E7EEA0780EA03C0EA01F0120013700C24799F18>40
D<126012F012787E7E7EEA0780120313C0120113E01200A213F01370A813F013E0A2120113C012
0313801207EA0F00121E5A5A5A12600C247C9F18>I<EA01C0A438C1C180EAF1C7EAF9CF387FFF
00EA1FFCEA07F0A2EA1FFCEA7FFF38F9CF80EAF1C7EAC1C13801C000A411147D9718>I<136013
F0A7387FFFC0B512E0A26C13C03800F000A7136013147E9718>I<123C127E127FA3123F120F12
0E121E127C12F81270080C788518>I<EA7FFFB51280A26C130011047D8F18>I<127812FCA41278
0606778518>I<EA01F0EA07FC487EEA1F1FEA1C0738380380007813C0EA7001A238E000E0A9EA
F001007013C0A2EA780300381380381C0700EA1F1FEA0FFE6C5AEA01F0131C7E9B18>48
D<EA018012031207A2120F123F12FF12FB12631203B0EA7FFCEAFFFEEA7FFC0F1C7B9B18>I<EA
07F8EA1FFE487E387C0F80387003C038F001E01300A3C7FCA2130114C01303EB0780EB0F00131E
5B5B5BEA03E0485A485A381E00E05AEA7FFFB5FC7E131C7E9B18>I<EA07F8EA1FFE487E387C0F
80387803C01301123012001303EB0780130F3803FF005B7F38000F80EB03C0130114E01300A212
F0130114C01303387C0F80383FFF006C5AEA07F8131C7E9B18>I<131F5B5B137713F7EA01E713
C71203EA07871307120E121E123C1238127812F0B512F8A338000700A6EB7FF0EBFFF8EB7FF015
1C7F9B18>I<381FFF805AA20038C7FCA8EA3BFCEA3FFE7F383E0780381803C0380001E01300A2
126012F0130100E013C0EAF003387C0F80383FFF006C5AEA07F8131C7E9B18>I<137E48B4FC00
071380380FC3C0EA1F03123C383801800078C7FC1270A2EAF3F8EAEFFEB5FC38FE0F8038F803C0
EAF00114E01300A312701301007813C0EA3C03381E0F80380FFF006C5AEA03F8131C7E9B18>I<
12E0B512E0A338E003C0EB078038000F00130E131E131C133C5B1370A213F05BA212015BA31203
5BA7131D7E9C18>I<EA03F8EA0FFE487E383E0F80EA3803387001C0A438380380EA3C07381FFF
00EA07FC487EEA1F1F383C0780387001C000F013E0EAE000A4387001C0EA7803383E0F80381FFF
006C5AEA03F8131C7E9B18>I<EA03F8EA0FFC487EEA3E0F3878078038F003C0EAE001A214E0A3
12F0EA7803EA3E0FEA1FFFEA0FFEEA03F8EA000114C0A2130300301380EA7807EB0F00133EEA3F
FC6C5AEA0FE0131C7E9B18>I<123C127EA4123C1200A81238127C127EA3123E120E121E123C12
7812F01260071A789318>59 D<387FFFC0B512E0A3C8FCA4B512E0A36C13C0130C7E9318>61
D<137013F8A213D8A2EA01DCA3138CEA038EA41306EA0707A4380FFF80A3EA0E03A2381C01C0A2
387F07F038FF8FF8387F07F0151C7F9B18>65 D<EAFFFC13FF1480381C03C01301EB00E0A41301
14C01307381FFF80140014C0EA1C03EB00E014F01470A414F014E01303B512C01480EBFE00141C
7F9B18>I<3801FCE0EA03FEEA07FFEA0F07EA1E03EA3C01EA78001270A200F013005AA87E0070
13E0A21278EA3C01001E13C0EA0F073807FF806C1300EA01FC131C7E9B18>I<EA7FF8EAFFFE6C
7E381C0F80EB03C0A2EB01E01300A214F01470A814F014E0A2130114C01303EB0F80387FFF0048
5AEA7FF8141C7F9B18>I<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA214
38A5B512F8A3151C7F9B18>I<B512E0A3EA1C00A41400A2131CA3EA1FFCA3EA1C1CA390C7FCA7
EAFFC0A3131C7E9B18>I<3801F9C0EA07FF5AEA1F0FEA1C03123CEA78011270A200F0C7FC5AA5
EB0FF0131F130F38F001C0127013031278123CEA1C07EA1F0FEA0FFFEA07FDEA01F9141C7E9B18
>I<387F07F038FF8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0
151C7F9B18>I<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>I<387F07
F038FF87F8387F07F0381C03C0EB078014005B131E5B133813785B121D7F121F13BC131CEA1E1E
130EEA1C0F7F1480130314C01301387F03F038FF87F8387F03F0151C7F9B18>75
D<EA7FE012FF127F000EC7FCB11470A5387FFFF0B5FC7E141C7F9B18>I<38FC01F8EAFE03A238
3B06E0A4138EA2EA398CA213DCA3EA38D8A213F81370A21300A638FE03F8A3151C7F9B18>I<38
7E07F038FF0FF8387F07F0381D81C0A313C1121CA213E1A313611371A213311339A31319A2131D
130DA3EA7F07EAFF87EA7F03151C7F9B18>I<EA0FF8EA3FFE487EEA780FEA700700F01380EAE0
03B0EAF00700701300EA780FEA7FFF6C5AEA0FF8111C7D9B18>I<EAFFFEEBFF8014C0EA1C03EB
01E013001470A514E01301EB03C0EA1FFF1480EBFE00001CC7FCA8B47EA3141C7F9B18>I<EA0F
F8EA3FFE487EEA780FEA700700F01380EAE003AEEAE1E3A2EAF0E73870F700EA787FEA7FFF6C5A
EA0FFCEA001C131E130E130F7FA211227D9B18>I<EA7FF8EAFFFE6C7E381C0F80130314C01301
A313031480130F381FFF005BA2EA1C0FEB07801303A5149CA3007F13FC38FF81F8387F00F0161C
7F9B18>I<3807F380EA1FFF5AEA7C1FEA7007EAF00312E0A290C7FC7E1278123FEA1FF0EA0FFE
EA01FF38001F80EB03C0EB01E01300A2126012E0130100F013C0EAFC07B512801400EAE7FC131C
7E9B18>I<387FFFF8B5FCA238E07038A400001300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C
0070B2001E13F0000E13E0EA0F013807C7C03803FF806C1300EA007C171C809B18>I<38FF07F8
A3381C01C0A4380E0380A4EA0F0700071300A4EA038EA4EA018C13DCA3EA00D813F8A21370151C
7F9B18>I<38FE03F8A338700070A36C13E0A513F8A2EA39DCA2001913C0A3138CEA1D8DA4000D
13801305EA0F07A2EA0E03151C7F9B18>I<387F8FE0139F138F380E0700120FEA070E138EEA03
9C13DCEA01F8A26C5AA2137013F07F120113DCEA039E138EEA070F7F000E13801303001E13C038
7F07F038FF8FF8387F07F0151C7F9B18>I<38FF07F8A3381C01C0EA1E03000E1380EA0F070007
1300A2EA038EA2EA01DCA213FC6C5AA21370A9EA01FC487E6C5A151C7F9B18>I<EAFFF8A3EAE0
00B3ACEAFFF8A30D24779F18>91 D<EAFFF8A3EA0038B3ACEAFFF8A30D247F9F18>93
D<EA7FFFB51280A26C130011047D7F18>95 D<EA1FE0EA3FF8487EEA783EEA300FC67EA248B4FC
120F123FEA7F07127812F012E0A26C5AEA783F387FFFF0EA3FFBEA0FE114147D9318>97
D<127E12FE127E120EA5133EEBFF80000F13C0EBE3E0EB80F0EB00701478000E1338A5120F1478
1470EB80F0EBC3E0EBFFC0000E138038067E00151C809B18>I<EA01FEEA07FF001F1380EA3F07
383C030048C7FC127012F05AA47E1270387801C0123CEA3F07381FFF8000071300EA01FC12147D
9318>I<EB1F80133F131F1303A5EA03F3EA0FFBEA1FFFEA3E1FEA780FEA700712F0EAE003A513
0712F01270EA780FEA3E3F381FFFF0380FFBF83803E3F0151C7E9B18>I<EA03F0EA0FFC487EEA
3E1F38780780EA700300F013C0EAE001A2B5FCA300F0C7FC1270387801C0123CEA3F07381FFF80
00071300EA01FC12147D9318>I<EB1FC0EB7FE013FFEA01F1EBC0C01400A3387FFFC0B5FCA238
01C000AEEA7FFFA3131C7F9B18>I<3803F1F03807FFF85A381E1F30383C0F00EA3807A5EA3C0F
EA1E1EEA1FFC485AEA3BF00038C7FC123CEA1FFF14C04813E0387801F038F00078481338A36C13
78007813F0EA7E03383FFFE0000F13803803FE00151F7F9318>I<127E12FE127E120EA5133FEB
FF80000F13C0EBE1E013801300A2120EAA387FC3FC38FFE7FE387FC3FC171C809B18>I<EA0380
487EA36C5AC8FCA4EA7FC012FF127F1201AEB5FC14801400111D7C9C18>I<12FEA3120EA5EB3F
F0137F133FEB0780EB0F00131E5B5B5BEA0FF87F139C131EEA0E0FEB0780130314C038FFC7F8A3
151C7F9B18>107 D<EA7FE012FF127F1200B3A4387FFFC0B512E06C13C0131C7E9B18>I<387DF1
F038FFFBF86CB47E381F1F1CEA1E1EA2EA1C1CAB387F1F1F39FFBFBF80397F1F1F001914819318
>I<EA7E3F38FEFF80007F13C0380FE1E013801300A2120EAA387FC3FC38FFE7FE387FC3FC1714
809318>I<EA01F0EA0FFE487E383E0F80EA3803387001C0A238E000E0A5EAF001007013C0EA78
03383C0780EA3E0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF80007F13C0380FE3E0
EB80F0EB00701478000E1338A5120F14781470EB80F0EBC3E0EBFFC0000E1380EB7E0090C7FCA7
EA7FC0487E6C5A151E809318>I<387F87E038FF9FF8EA7FBF3803FC78EBF030EBE0005BA35BA8
EA7FFEB5FC6C5A15147F9318>114 D<EA0FF7EA3FFF5AEAF81FEAE007A212F0007CC7FCEA7FF0
EA1FFCEA07FEEA001F38600780EAE00312F0130738FC0F00B5FC5BEAE7F811147D9318>I<487E
1203A4387FFFC0B5FCA238038000A9144014E0A21381EBC3C0EA01FF6C1380EB7E0013197F9818
>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F073807FFFC6C13FE3801FCFC1714809318>I<38
7F8FF000FF13F8007F13F0381E03C0000E1380A338070700A3EA038EA4EA01DCA3EA00F8A21370
15147F9318>I<387F8FF0139F138F38070700138EEA039EEA01DC13F81200137013F07FEA01DC
EA039E138EEA0707000F1380387F8FF000FF13F8007F13F015147F9318>120
D<387F8FF000FF13F8007F13F0380E01C0EB0380A21207EB0700A2EA03871386138EEA01CEA2EA
00CCA213DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>I<EB07E0133F
137FEBFC0013E0AB1201EA7FC0485AA26C7EEA01E01200AB13FCEB7FE0133F130713247E9F18>
123 D<126012F0B3B012600424769F18>I<127CB47E7FEA07E01200AB7FEB7FC0EB3FE0A2EB7F
C0EBF0005BAB1207B45A5B007CC7FC13247E9F18>I E /Fj 23 122 df<3801FFF0A238001E00
A35BA45BA45BA4485AA4485AA4485AA4EAFFF8A2141F7D9E12>73 D<48B4ECFFC0A2D8001F9038
01F800A2ED037801375C1506150CA20167EB19E0EB63801531A201C3495A15C3A2EC8183D80183
EB8780EC8307A214862703038C0FC7FCA21498EB01D80006EBF01EA214E0000E13C03AFFE1C3FF
E0D9C1835B2A1F7D9E29>77 D<48B5128015E039001E00F01578153849133CA4491378A2157015
E0EBF001EC078090B5120014F8D801E0C7FCA4485AA4485AA4EAFFF85B1E1F7D9E1F>80
D<EBF1803803FDC038078F80EA0E07121C123C14001278A3EAF00EA31430EB1C60133CEA707C38
78FCC0EA3FCF380F078014147C9317>97 D<137E48B4FC38038380EA0F07121E001C1300EA3C02
48C7FCA35AA5EA70021307EA381EEA1FF8EA07E011147C9315>99 D<1478EB03F814F0EB0070A3
14E0A4EB01C0A213F1EA03FD38078F80EA0E07121C123C14001278A3EAF00EA31430EB1C60133C
EA707C3878FCC0EA3FCF380F078015207C9F17>I<137C48B4FCEA0783380F0180121E123CEB03
00EA780EEA7FFC13E000F0C7FCA412701302EA7807EA3C1EEA1FF8EA07E011147C9315>I<14F8
EB01FCEB03BC143CEB07181400A2130EA53801FFE0A238001C00A35BA55BA65BA4485AA35B1233
127B00F3C7FC127E123C1629829F0E>I<EB3C60EBFF703801E3E0EA0381EA0701120F14C0121E
A3383C0380A4EB07005BEA1C1FEA1E3FEA0FFEEA03CEEA000EA25BA21230EA7838EAF0F0EA7FE0
EA3F80141D7E9315>I<EA01E0120F5B1201A3485AA448C7FCA2133E137F380EC380380F81C013
01120E381E0380121CA338380700A3EB0E1800701330A2EB1C60130C38E00FC03860078015207D
9F17>I<136013F0A213E01300A7120FEA1F80123113C0EA6380A212C3EA0700A3120EA3EA1C30
1360A2EA38C01218EA1F80EA0F000C1F7D9E0E>I<EA03C0121F13801203A3EA0700A4120EA45A
A45AA45AA3EA7180EAE300A312E6127E123C0A207C9F0C>108 D<391E07C0F8393F1FE1FC3933
B8730E3963E07607EBC03CEB803800C7EB780E38070070A3000E495AA3ED3860261C01C013C0A2
ED718015313A3803803F00D81801131E23147D9325>I<381E07C0383F1FE03833B870EA63E0EB
C038138000C71370EA0700A3000E13E0A3EB01C3001C13C6A2EB038C1301003813F8381800F018
147D931A>I<137C48B4FC38038380380F01C0121E001C13E0123C1278A338F003C0A3EB078014
00EA700F131EEA3838EA1FF0EA07C013147C9317>I<3803C1E03807E7F838067E3C380C7C1CEB
781E1370EA18E01200A33801C03CA314781203147014E0EBE3C038077F80EB1E0090C7FCA2120E
A45AEAFFC0A2171D809317>I<EA1E0F383F3F803833F1C0EA63C113C3138300C713800007C7FC
A3120EA45AA45A121812147D9313>114 D<13FCEA03FEEA0707EA0E0FA2130EEA1E00EA0F8013
F0EA07F8EA03FCEA003E131E1270EAF01CA2EAE038EA6070EA3FE0EA1F8010147D9313>I<EA01
8013C0EA0380A4EA0700A2EAFFF0A2EA0E00A45AA45AA31330EA7060A213C0EA7180EA3F00121E
0C1C7C9B0F>I<000F1360381F8070003113E013C0EA6380A238C381C0EA0701A3380E0380A314
8CEB0718A2130FEB1F303807F3F03803E1E016147D9318>I<380F01C0EA1F83003113E013C1EA
6380A200C313C0EA0700A3380E0180A3EB0300A21306A2EA0F0CEA07F8EA01E013147D9315>I<
38078780380FCFC03818F8E0EA3070EA6071A238C0E1C03800E000A3485AA30071136038F380C0
A238E3818038C7C300EA7CFEEA387C13147D9315>120 D<000F1360381F8070003113E013C0EA
6380A238C381C0EA0701A3380E0380A4EB0700A25B5BEA07FEEA03EEEA000EA25B12785BEA7070
EA60E0EA3FC06CC7FC141D7D9316>I E /Fk 40 122 df<1238127C12FEA3127C123807077C86
10>46 D<13181378EA01F812FFA21201B3A7387FFFE0A213207C9F1C>49
D<EA03FCEA0FFF383C1FC0387007E0007C13F0EAFE0314F8A21301127CEA3803120014F0A2EB07
E014C0EB0F80EB1F00133E13385BEBE018EA01C0EA0380EA0700000E1338380FFFF05A5A5AB5FC
A215207D9F1C>I<EA01FE3807FFC0380F07E0381E03F0123FEB01F813811301EA1F03000C13F0
120014E0EB07C0EB1F803801FE007F380007C0EB01F014F8EB00FCA214FE127CA212FEA214FCEA
7C01007813F8383C07F0380FFFC03803FE0017207E9F1C>I<14E013011303A21307130F131FA2
1337137713E7EA01C71387EA03071207120E120C12181238127012E0B512FEA2380007E0A7EBFF
FEA217207E9F1C>I<00101320381E01E0381FFFC0148014005B13F8EA1BC00018C7FCA4EA19FC
EA1FFF381E0FC0381807E01303000013F0A214F8A21238127C12FCA214F012F8386007E0003013
C0381C1F80380FFF00EA03F815207D9F1C>I<13FE3803FFC0380703E0380E00F05A1478123C12
3E123F1380EBE0F0381FF9E0EBFFC06C13806C13C06C13E04813F0381E7FF8383C1FFCEA7807EB
01FEEAF000143E141EA2141C7E007813387E381F01F0380FFFC00001130017207E9F1C>56
D<1470A214F8A3497EA2497EA3EB06FF80010E7FEB0C3FA201187F141F01387FEB300FA201607F
140701E07F90B5FCA239018001FCA200038090C7FCA20006147FA23AFFE00FFFF8A225227EA12A
>65 D<D903FE138090381FFF819038FF01E33901F8003FD803E0131F4848130F48481307121F48
C71203A2481401127EA200FE91C7FCA8127EED0180127F7E15036C6C1400120F6C6C1306D803F0
5B6C6C13386CB413F090381FFFC0D903FEC7FC21227DA128>67 D<B67E15F03907F003FCEC007E
81ED1F80ED0FC0ED07E0A216F01503A316F8A916F0A3ED07E0A2ED0FC0ED1F80ED3F00157EEC03
FCB612F0158025227EA12B>I<B612FCA23807F000153C151C150C150EA215061418A315001438
1478EBFFF8A2EBF07814381418A21503A214001506A3150EA2151E153EEC01FCB6FCA220227EA1
25>I<B612F8A23807F001EC007815381518151CA2150CA21418A21500A214381478EBFFF8A2EB
F07814381418A491C7FCA8B512E0A21E227EA123>I<B53883FFFEA23A07F0001FC0AD90B6FCA2
9038F0001FAFB53883FFFEA227227EA12C>72 D<D8FFF0EC0FFF6D5C000716E0D806FC1437A301
7E1467A26D14C7A290391F800187A290390FC00307A3903807E006A2903803F00CA2903801F818
A3903800FC30A2EC7E60A2EC3FC0A2EC1F80A3EC0F00D8FFF091B5FC140630227EA135>77
D<D8FFF8EB1FFE7F0007EC00C07FEA06FF6D7E6D7E6D7E130F806D7E6D7E6D7E130080EC7F80EC
3FC0EC1FE0EC0FF0140715F8EC03FCEC01FEEC00FF157FA2153F151F150F15071503A2D8FFF013
01150027227EA12C>I<EB07FC90383FFF809038FC07E03903F001F848486C7E4848137E48487F
A248C7EA1F80A24815C0007E140FA200FE15E0A9007E15C0007F141FA26C15806D133F001F1500
6C6C137E6C6C5B6C6C485A3900FC07E090383FFF80D907FCC7FC23227DA12A>I<B6FC15E03907
F007F0EC01FC1400157EA2157FA5157EA215FC1401EC07F090B512E0150001F0C7FCADB57EA220
227EA126>I<3801FC043807FF8C381F03FC383C007C007C133C0078131CA200F8130CA27E1400
B4FC13E06CB4FC14C06C13F06C13F86C13FC000313FEEA003FEB03FFEB007F143FA200C0131FA3
6C131EA26C133C12FCB413F838C7FFE00080138018227DA11F>83 D<007FB61280A2397E03F80F
00781407007014030060140100E015C0A200C01400A400001500B3A20003B512F8A222227EA127
>I<EA07FC381FFF80383F0FC0EB07E0130314F0121E1200A213FF1207EA1FC3EA3F03127E12FC
A4EA7E07EB1DF8381FF8FF3807E07F18167E951B>97 D<B47EA2121FABEB8FE0EBBFF8EBF07CEB
C01EEB801FEC0F80A215C0A81580141F1500EBC03EEB607C381E3FF8381C0FC01A237EA21F>I<
EBFF80000713E0380F83F0EA1F03123E127E387C01E090C7FC12FCA6127C127EA2003E13306C13
60380FC0E03807FF803800FE0014167E9519>I<EB03FEA2EB007EABEA01FCEA07FF380F81FEEA
1F00003E137E127E127C12FCA8127CA27E001E13FEEA0F833907FF7FC0EA01FC1A237EA21F>I<
13FE3807FF80380F87C0381E01E0003E13F0EA7C0014F812FCA2B5FCA200FCC7FCA3127CA2127E
003E13186C1330380FC0703803FFC0C6130015167E951A>I<EB3F80EBFFC03801F3E0EA03E7EA
07C7120FEBC3C0EBC000A6EAFFFCA2EA0FC0B2EA7FFCA213237FA211>I<3801FE1F0007B51280
380F87E7EA1F03391E01E000003E7FA5001E5BEA1F03380F87C0EBFF80D819FEC7FC0018C8FC12
1CA2381FFFE014F86C13FE80123F397C003F8048131F140FA3007CEB1F00007E5B381F80FC6CB4
5A000113C019217F951C>I<B47EA2121FABEB87E0EB9FF8EBB8FCEBE07CEBC07EA21380AE39FF
F1FFC0A21A237EA21F>I<120E121FEA3F80A3EA1F00120EC7FCA7EAFF80A2121FB2EAFFF0A20C
247FA30F>I<131C133E137FA3133E131C1300A7EA03FFA2EA003FB3A5127812FC133E137EEA78
FCEA7FF0EA1FC0102E83A311>I<EAFF80A2121FB3ADEAFFF0A20C237FA20F>108
D<3AFF87F00FE090399FFC3FF83A1FB87E70FC9039E03EC07C9039C03F807EA201801300AE3BFF
F1FFE3FFC0A22A167E952F>I<38FF87E0EB9FF8381FB8FCEBE07CEBC07EA21380AE39FFF1FFC0
A21A167E951F>I<13FE3807FFC0380F83E0381E00F0003E13F848137CA300FC137EA7007C137C
A26C13F8381F01F0380F83E03807FFC03800FE0017167E951C>I<38FF8FE0EBBFF8381FF07CEB
C03E497E1580A2EC0FC0A8EC1F80A2EC3F00EBC03EEBE0FCEBBFF8EB8FC00180C7FCA8EAFFF0A2
1A207E951F>I<EAFF1FEB3FC0381F67E013C7A3EB83C0EB8000ADEAFFF8A213167E9517>114
D<EA07F3EA1FFFEA780FEA7007EAF003A26CC7FCB4FC13F0EA7FFC6C7E6C7E120738003F80EAC0
0F130712E0A200F01300EAFC1EEAEFFCEAC7F011167E9516>I<13C0A41201A212031207120F12
1FB5FCA2EA0FC0ABEBC180A51207EBE300EA03FEC65A11207F9F16>I<38FF83FEA2381F807EAF
14FEA2EA0F833907FF7FC0EA01FC1A167E951F>I<39FFF01FE0A2390FC00600A2EBE00E000713
0CEBF01C0003131813F800015BA26C6C5AA2EB7EC0A2137F6D5AA26DC7FCA2130EA21B167F951E
>I<39FFF01FE0A2390FC00600A2EBE00E0007130CEBF01C0003131813F800015BA26C6C5AA2EB
7EC0A2137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC3813305BEA69C0EA7F80001FC8FC1B20
7F951E>121 D E /Fl 66 123 df<EB3F0F9038FFBF803903C3F3C0380703E3ECC180390E01C0
00A6B512FCA2380E01C0AE387F87FCA21A1D809C18>11 D<133FEBFF803803C1C0EA0703A2380E
018090C7FCA5B512C0A2EA0E01AE387F87F8A2151D809C17>I<EB3FC013FFEA03C3EA07031301
120EA6B5FCA2EA0E01AE387FCFF8A2151D809C17>I<90383F03F09038FFCFF83903C0FC1C3907
01F03CA2390E00E01892C7FCA5B612FCA2390E00E01CAE3A7FC7FCFF80A2211D809C23>I<EA70
70EAF8F8EAFCFCA2EA7C7CEA0C0CA3EA1818A2EA3030EA6060EA40400E0D7F9C15>34
D<127012F812FCA2127C120CA31218A2123012601240060D7D9C0C>39 D<13C0EA0180EA030012
06120E120C121C121812381230A21270A21260A212E0AC1260A21270A21230A212381218121C12
0C120E12067EEA0180EA00C00A2A7D9E10>I<12C012607E7E121C120C120E120612077EA21380
A21201A213C0AC1380A21203A21300A25A1206120E120C121C12185A5A5A0A2A7E9E10>I<1270
12F012F8A212781218A31230A2127012601240050D7D840C>44 D<EAFFE0A30B0380890E>I<12
7012F8A3127005057D840C>I<1303A213071306A2130E130C131C1318A213381330A213701360
A213E013C0A21201138012031300A25A1206A2120E120CA2121C1218A21238123012701260A212
E05AA210297E9E15>I<EA03C0EA0FF0EA1C38EA381CA2EA700EA3EAF00FADEA700EA3EA381CA2
EA1C38EA0FF0EA07E0101D7E9B15>I<12035A123FB4FC12C71207B3A3EAFFF8A20D1C7C9B15>I<
EA07C0EA1FF0EA3878EA603C131E12F0EAF80FA312701200130E131E131C133C1378137013E0EA
01C0EA0380EA0700EA0E03120C1218EA3006EA7FFE12FFA2101C7E9B15>I<EA07E0EA1FF0EA38
38EA301CEA781EA312381200133C13381370EA07E0A2EA0038131C131E130E130FA2127012F8A2
130EEAF01EEA601CEA3838EA1FF0EA07C0101D7E9B15>I<1260387FFF80A21400EA6003EAC006
5BA2C65A5BA25BA25BA21201A2485AA41207A76CC7FC111D7E9B15>55 D<EA03C0EA0FF0EA1C38
EA381C1278EA700E12F0A2130FA51270131F1278EA383FEA1FEFEA0FCFEA000EA3EA301C127813
38EA7030EA30F0EA3FC0EA0F80101D7E9B15>57 D<127012F8A312701200A8127012F8A3127005
127D910C>I<127012F8A312701200A8127012F012F8A212781218A31230A2127012601240051A
7D910C>I<EA0FE0EA3FF8EA703CEA601CEAF01EA31200133C137813E0EA01C0138012031300A5
1202C7FCA41207EA0F80A3EA07000F1D7E9C14>63 D<1306130FA3497EA4EB33C0A3EB61E0A3EB
C0F0A338018078A2EBFFF8487FEB003CA200067FA3001F131F39FFC0FFF0A21C1D7F9C1F>65
D<B512C014F0380F00F8143C141C141EA4141C143C1478EBFFF014E0EB00F8143C141EA2140FA5
141E143E147CB512F814C0181C7E9B1D>I<90381F8080EBFFE13803F0333807801B380F000F00
1E1307001C1303123C5A1401127012F091C7FCA70070EB01801278A27E001CEB0300121E6C1306
6C6C5A3803F0383800FFF0EB1F80191E7E9C1E>I<B512C014F0380F007C141E8080EC038015C0
A2140115E0A815C0A2140315801407EC0F00141E147CB512F014C01B1C7E9B20>I<B512FCA238
0F007C141C140C140E14061303A314005B13FFA213077FA21403A213001406A3140E141E147CB5
12FCA2181C7E9B1C>I<B512F8A2380F007814381418141C140CA21303A21400A25B13FFA21307
7FA490C7FCA6EAFFF8A2161C7E9B1B>I<90381F8080EBFFE13803F0333807801B380F000F001E
1307001C1303123C5A1401127012F091C7FCA5ECFFF0A20070EB07801278A27E121C121E7E3807
800F3803F0393800FFF090381FC0001C1E7E9C21>I<39FFF3FFC0A2390F003C00AAEBFFFCA2EB
003CAC39FFF3FFC0A21A1C7E9B1F>I<EAFFF0A2EA0F00B3A6EAFFF0A20C1C7F9B0F>I<B46CEBFF
806D5A000FECF800A2390DE00378A3380CF006A3EB780CA3EB3C18A3EB1E30A3EB0F60A3EB07C0
A3381E03803AFFC387FF80A2211C7E9B26>77 D<B4EBFFC07F000FEB1E00EBC00CA2EA0DE0EA0C
F0A21378A2133C131EA2130FA2EB078C14CC1303EB01ECA2EB00FCA2147C143CA2001E131CEAFF
C0140C1A1C7E9B1F>I<EB3F80EBFFE03803E0F83807803C380E000E001E130F48EB0780003813
03007814C0A20070130100F014E0A80078EB03C0A36CEB0780A26CEB0F006C131E6C6C5A3803E0
F83800FFE0EB3F801B1E7E9C20>I<B5128014E0380F00F01438143C141EA6143C143814F0EBFF
E0148090C7FCAAEAFFF0A2171C7E9B1C>I<EB3F80EBFFE03803E0F83807803C48487E001E7F48
EB078000381303007814C0A20070130100F014E0A8007014C000781303A2D8380E1380383C1F07
391E318F00380F30DE3807B0FC3803F0F83900FFE020133FEB0060EC7060EC78E0EC3FC0A2EC1F
80EC0F001B257E9C20>I<B5FC14E0380F00F01438143C80A55C143814F0EBFFE05CEB01E06D7E
1478A71530143839FFF03C60EC1FE0C7EA07C01C1D7E9B1F>I<3807E080EA1FF9EA3C1FEA7007
130312E01301A36CC7FCA2127CEA7FC0EA3FF8EA1FFEEA07FFC61380130FEB03C0A2130112C0A3
00E01380130300F01300EAFC0EEACFFCEA83F8121E7E9C17>I<007FB512C0A238780F03007013
010060130000E014E000C01460A400001400B03803FFFCA21B1C7F9B1E>I<3AFFE0FFE1FFA23A
1F001E007C6C1530143FA20180147000079038678060A32603C0E713C0ECC3C0A2D801E0EBC180
9038E181E1A3D800F3EBF3001400A2017B13F6017E137EA3013C133CA3011C133801181318281D
7F9B2B>87 D<EA0808EA1818EA3030EA6060A2EAC0C0A3EAF8F8EAFCFCA2EA7C7CEA38380E0D7B
9C15>92 D<EA0FE0EA1FF8EA3C3C7FEA180E1200131EEA07FE121FEA3E0E127812F01460A2131E
EA783E383FFFC0381F878013127F9115>97 D<12FCA2121CA9137EEA1DFF381F8780381E01C000
1C13E0130014F0A614E01301001E13C0381F07803819FF00EA187C141D7F9C17>I<EA03F0EA0F
F8EA1E3C1238EA7818EA700012F0A612781306123CEA1E0CEA0FF8EA03E00F127F9112>I<EB1F
80A21303A9EA03E3EA0FFBEA1E0FEA3807EA7803127012F0A612701278EA3807EA1E1F380FFBF0
EA07E3141D7F9C17>I<EA03E0EA0FF0EA1C38EA381CEA781EEA700EEAFFFEA2EAF000A41270EA
7806123CEA1E0CEA0FF8EA03E00F127F9112>I<1378EA01FCEA039EEA071EEA0E0C1300A6EAFF
E0A2EA0E00AEEA7FE0A20F1D809C0D>I<EB03803807E7C0EA0FFDEA3C3D38381C00EA781EA4EA
381CEA3C3CEA3FF0EA37E00070C7FCA21230EA3FFC6CB4FC481380EA700738E001C0A438700380
383C0F00EA1FFEEA07F8121C7F9215>I<12FCA2121CA9137CEA1DFFEA1F07381E0380A2121CAB
38FF9FF0A2141D7F9C17>I<1218123C127C123C1218C7FCA612FCA2121CAEEAFF80A2091D7F9C
0C>I<EA01C0EA03E0A3EA01C0C7FCA6EA0FE0A21200B31260EAF1C0A2EA7F80EA3E000B25839C
0D>I<12FCA2121CA9EB7FC0A2EB3E0013185B5B5BEA1DE0121FEA1E70EA1C781338133C131C7F
130F38FF9FE0A2131D7F9C16>I<12FCA2121CB3A7EAFF80A2091D7F9C0C>I<39FC7E07E039FDFF
9FF8391F83B838391E01E01CA2001C13C0AB3AFF8FF8FF80A221127F9124>I<EAFC7CEAFDFFEA
1F07381E0380A2121CAB38FF9FF0A214127F9117>I<EA03F0EA0FFCEA1E1EEA380700781380EA
700300F013C0A600701380EA780700381300EA1E1EEA0FFCEA03F012127F9115>I<EAFC7EEAFD
FF381F8780381E03C0381C01E0A2EB00F0A6EB01E0A2381E03C0381F0780381DFF00EA1C7C90C7
FCA6B47EA2141A7F9117>I<3803E180EA0FF9EA1E1FEA3C071278130312F0A612781307123CEA
1E1FEA0FFBEA07E3EA0003A6EB1FF0A2141A7F9116>I<EAFDE0EAFFF0EA1F78121E1330EA1C00
ABEAFFC0A20D127F9110>I<EA1F90EA3FF0EA7070EAE030A3EAF800EA7F80EA3FE0EA0FF0EA00
F8EAC038A212E0A2EAF070EADFE0EA8FC00D127F9110>I<120CA5121CA2123CEAFFE0A2EA1C00
A81330A5EA1E60EA0FC0EA07800C1A7F9910>I<38FC1F80A2EA1C03AC1307EA0C0F380FFBF0EA
03E314127F9117>I<38FF0FE0A2381C0780EB0300EA0E06A36C5AA2131CEA0398A213F86C5AA2
6C5AA313127F9116>I<39FF3FCFE0A2391C0F0780EC0300131F380E1B061486A2EB318E000713
CCA213603803E0F8A33801C070A31B127F911E>I<387F8FF0A2380F078038070600EA038EEA01
DC13D8EA00F01370137813F8EA01DCEA038E130EEA0607380F038038FF8FF8A21512809116>I<
38FF0FE0A2381C0780EB0300EA0E06A36C5AA2131CEA0398A213F86C5AA26C5AA35BA3EAF180A2
00C7C7FC127E123C131A7F9116>I<EA7FFCA2EA7838EA7070EA60F013E0EA61C01263EA0380EA
070C120F120EEA1C1CEA3C181238EA7078EAFFF8A20E127F9112>I E /Fm
18 118 df<1238127C12FEA3127C12381200A41238127C12FEA3127C123807127D910D>58
D<EA0FF0EA3FFCEA703EEAF03F12F8A3EA203EEA007C13F813F0EA01C0A21380A5C7FCA4EA0380
EA07C0EA0FE0A3EA07C0EA0380101D7D9C17>63 D<B512F814FF390FC01FC0EC07E0EC03F0EC01
F8A2EC00FCA315FEA815FCA3EC01F8A2EC03F0EC07E0EC1FC0B6120014F81F1C7E9B25>68
D<B5FCA2EA07E0B3A6B5FCA2101C7F9B12>73 D<D8FFC0EB03FF6D5B000F15F0D80DF0130DA3D8
0CF81319A2017C1331A26D1361A26D13C1A390380F8181A2903807C301A2EB03E6A2EB01FCA3EB
00F8A23AFFC0701FFFA2281C7E9B2D>77 D<EA0FF8EA1FFE383E1F80130714C0121C1200EA03FF
121FEA3F87EA7E0712FCA3130FEA7E1F383FFBF8EA0FE115127F9117>97
D<EA03FCEA0FFEEA1F1F123E127C130E00FCC7FCA6127C387E0180EA3E03381F0700EA0FFEEA03
F811127E9115>99 D<EA01FCEA0FFF381F0F80383E07C0EA7C0314E012FCB5FCA200FCC7FCA312
7C007E1360003E13C0EA1F81380FFF00EA01FC13127F9116>101 D<3803F0F0380FFFF8383E1F
38383C0F30007C1380A4003C1300EA3E1FEA1FFCEA33F00030C7FC12707EEA3FFF14C06C13E048
13F0387801F838F00078A3007813F0383E03E0381FFFC03803FE00151B7F9118>103
D<121E123FA25A7EA2121EC7FCA5B4FCA2121FAEEAFFE0A20B1E7F9D0E>105
D<B4FCA2121FB3A7EAFFE0A20B1D7F9C0E>108 D<39FF1FC0FE90387FE3FF3A1FE1F70F809039
80FC07C0A2EB00F8AB3AFFE7FF3FF8A225127F9128>I<38FF1FC0EB7FE0381FE1F0EB80F8A213
00AB38FFE7FFA218127F911B>I<EA01FC380FFF80381F07C0383E03E0387C01F0A200FC13F8A6
007C13F0A2383E03E0381F07C0380FFF803801FC0015127F9118>I<38FF1FC0EBFFE0381FC1F8
130014FC147C147EA6147C14FCEB80F8EBC1F0EB7FE0EB1F8090C7FCA6EAFFE0A2171A7F911B>
I<EA1FD8EA3FF8EA7038EAE018A2EAF000EAFF80EA7FE013F0EA1FF8EA07FCEA007CEAC01CA212
E0EAF038EAFFF0EACFC00E127E9113>115 D<1203A35AA25AA2123FEAFFFCA2EA1F00A9130CA4
EA0F98EA07F0EA03E00E1A7F9913>I<38FF07F8A2EA1F00AC1301EA0F03EBFEFFEA03F818127F
911B>I E /Fn 43 122 df<903901FF81FF011F01EF13C0903A7F80FF87E0D9FE01EB0FF03903
FC03FE13F8D807F013FCA2EE07E0020190C7FCA6B712F8A32707F001FCC7FCB3A33A7FFF1FFFE0
A32C2A7FA928>11 D<121C127FEAFF80A5EA7F00121C09097B8813>46 D<EB3F803801FFF03807
E0FC380FC07E48487EA2393F001F80A24814C0A44814E0AF6C14C0A46C1480A2391F803F00A238
0FC07E6C6C5A3801FFF038003F801B277DA622>48 D<13075B137FEA07FFB5FCA212F8C6FCB3AB
007F13FEA317277BA622>I<EBFF80000713F0001F13FC383F03FFD87C001380007FEB7FC0EAFF
80EC3FE0A3141FEA7F00001C133FC7FC15C0A2EC7F80A2ECFF00495A5CEB03F0495A495A495A90
383E00E05B13789038F001C0EA01C0EA038048B5FC5A5A5A481480B6FCA31B277DA622>I<EB7F
803801FFF0000713FC380F81FE381F80FF487E9038E07F80A5381FC0FFD807001300C7FC495AEB
03F8495AEBFFC014F0EB01FC6DB4FCEC7F8015C0143F15E0121EEA7F80A2EAFFC0A315C0147FD8
7F801380387E00FF6C481300380FFFFC000313F0C613801B277DA622>I<14075C5C5C5C5CA25B
5B497E130F130E131C1338137013F013E0EA01C0EA0380EA07005A120E5A5A5A5AB612F8A3C713
00A7017F13F8A31D277EA622>I<000C1303380F803FEBFFFEA25C5C14E05C49C7FC000EC8FCA6
EB7FC0380FFFF8EB80FC380E007F000C1480C7123F15C0A215E0A2123E127FEAFF80A315C01300
007E137F007814806CEBFF00381F01FE380FFFF8000313E0C690C7FC1B277DA622>I<EB07F0EB
3FFCEBFFFE3801FC0F3807F01F390FE03F80EBC07F121FEA3F80A2007FEB3F00EB001E91C7FCA2
5AEB0FC0EB3FF8EB70FEEBE03F01C013809038801FC0A3010013E0A47EA4D83F8013C0A2001FEB
3F80EA0FC03907E0FF003803FFFCC613F0EB3FC01B277DA622>I<1238123E003FB512F0A315E0
4814C01580A215003870001E5C5C48137014F0495AC6485A13075C130F91C7FC5B5BA3137EA213
FEA41201A86C5A13781C297CA822>I<EB3FC03801FFF04813FC380FC07EEB003F001E7F158000
3E130FA2123F1380EBE01F01F81300EBFE3F381FFF7E14F86C5B6C13FC6C7F6C7F00071480D81F
9F13C0EA3F07D87E0313E0EA7C0000FC133F48131F1407A21403A26C14C0007C1307007E14806C
130F391FC03F00380FFFFC000313F038007FC01B277DA622>I<EB7F803801FFF000077F380FE0
FE381FC07E48487ED87F001380A248EB1FC0A415E0A46C133FA3383F807F001F13FF380FE1DF38
03FF9F38007E1F130015C0A2120F381F803FD83FC01380A2EC7F00A2EB80FE381F01FC495A380F
FFE06C1380D801FEC7FC1B277DA622>I<B612FCEDFF8016E03A03FC001FF0ED07F8821503A282
1501A315035EA24B5A4B5A4B5AED7FC090B6C7FC16E09039FC0007F0ED03FC6F7EA26F7EA21780
A617005D4B5A15074B5AB712F016C04BC7FC29297DA831>66 D<91393FF00180903903FFFE0701
0FEBFF8F90393FF007FF9038FF80014848C7127FD807FC143F49141F4848140F485A003F15075B
007F1503A3484891C7FCAB6C7EEE0380A2123F7F001F15076C6C15006C6C5C6D141ED801FE5C6C
6C6C13F890393FF007F0010FB512C0010391C7FC9038003FF829297CA832>I<B612F8EDFF8016
E03A03FE001FF8ED07FCED01FE6F7EEE7F80EE3FC0161F17E0A2EE0FF0A417F8AA17F0A3EE1FE0
A217C0163FEE7F801700ED01FE4B5AED1FF8B712E0168003FCC7FC2D297DA835>I<B512FEA300
011300B3B1B512FEA317297FA81A>73 D<B592383FFFC0A26E5C0003EFF000A2D9BFC014EFA2D9
9FE0EB01CFA2D98FF0EB038FA3D987F8EB070FA2D983FC130EA2D981FE131CA3D980FF1338A291
387F8070A291383FC0E0A391381FE1C0A291380FF380A2913807FF00A36E5AA26E5AA26E5AD8FF
FE0203B512C0A215703A297DA841>77 D<B5ECFFFE80A200036DEB03808080EBBFF8EB9FFC138F
EB87FE8001831380018113C01380EC7FE015F0EC3FF8EC1FFCEC0FFE1407EC03FF16836E13C36E
13E3157FED3FF3ED1FFB16FF81818181A281167F163F161F160FEAFFFE160716032F297DA836>
I<ECFFE0010713FC90393FC07F8090397F001FC0D801FCEB07F048486D7E48486D7E000F814848
6D7EA24848EC7F80A2007F16C049143FA300FF16E0AA007F16C06D147FA2003F1680A26C6CECFF
00A26C6C495A00075D6C6C495A6C6C495A6CB4EB1FE090393FC07F8090260FFFFEC7FC010013E0
2B297CA834>I<B612F815FF16C03A03FE003FE0ED0FF0ED07F816FC150316FEA716FC150716F8
ED0FF0ED3FE090B61280EDFE0049C8FCB0B512F8A327297DA82F>I<B612E015FE6F7E3A03FE00
7FE0ED0FF06F7E82150382A65E4B5AA2ED1FE0ED7FC090B500FEC7FC5D9038FE01FF9138007FC0
82153F82151FA81707A2ED0FF8170FB539F807FE1E923801FFFC9238003FF030297DA834>82
D<90387F80603903FFF0E0000F13FF381F807F383F001F003E1307007E1303127C00FC1301A214
007E7E6D130013F8EBFF806C13F814FE6C7F6C14C07E6C14E0000114F0EA003F010113F8EB001F
1407A200E013031401A37E15F06C13036C14E0B413079038E01FC090B5120000E05B38C01FF01D
297CA826>I<007FB712C0A39039807FC03FD87C00140700781503A20070150100F016E0A24815
00A5C71500B3A490B612E0A32B287EA730>I<48B47E000F13F0381F81FC486C7E147FA2EC3F80
A2EA0F00C7FCA2EB0FFF90B5FC3807FC3FEA1FE0EA3F80127F130012FEA3147F7E6CEBFFC0393F
83DFFC380FFF0F3801FC031E1B7E9A21>97 D<EAFFE0A3120FACEBE1FE9038E7FF809038FE07E0
9038F803F8496C7E496C7EA2157FA21680A916005D5D7F4A5A6D485A90389E07E090380FFF8026
0E01FCC7FC212A7EA926>I<EB1FF0EBFFFE3803F03F390FE07F80EA1FC0EA3F80A2127F903800
1E004890C7FCA97E7F003FEB01C013C0001F1303390FE007803903F01F003800FFFCEB1FE01A1B
7E9A1F>I<EC3FF8A31403ACEB1FE3EBFFFB3803F03F380FE00F381FC007383F8003A2127F1300
5AA97EA2EA3F801407381FC00F380FE01F3A03F03FFF803800FFF3EB3FC3212A7EA926>I<EB3F
E03801FFF83803F07E380FE03F391FC01F80393F800FC0A2EA7F00EC07E05AA390B5FCA290C8FC
A47E7F003F14E01401D81FC013C0380FE0033903F81F803900FFFE00EB1FF01B1B7E9A20>I<90
38FF81F00003EBE7FC390FC1FE7C391F80FCFC003FEBFE7C9038007E3848EB7F00A66C137EEB80
FE001F5B380FC1F8381FFFE0001813800038C8FC123CA2123E383FFFF814FF6C14C06C14E06C14
F0121F397E0007F8007C13015A1400A36C1301007EEB03F06CEB07E0390FC01F803903FFFE0038
007FF01E287E9A22>103 D<1207EA1FC013E0123FA3121F13C0EA0700C7FCA7EAFFE0A3120FB3
A3EAFFFEA30F2B7DAA14>105 D<EB0380EB0FE0EB1FF0A5EB0FE0EB038090C7FCA7EBFFF0A313
07B3A9127E12FFA2EB0FE0A2EB1FC0387E3F80383FFE00EA07F0143785AA15>I<EAFFE0A3120F
ACEC1FFCA3EC07C0EC0F80EC1E00147C5CEBE1F0EBE3E0EBE7C0EBEFE0EBFFF0A280EBF3FCEBE1
FE13C080EC7F80143F15C0EC1FE0EC0FF039FFFC3FFEA31F2A7EA924>I<EAFFE0A3120FB3B2EA
FFFEA30F2A7DA914>I<3BFFC07F800FF0903AC1FFE03FFC903AC783F0F07E3B0FCE03F9C07F90
3ADC01FB803F01F8D9FF00138001F05BA301E05BAF3CFFFE1FFFC3FFF8A3351B7D9A3A>I<38FF
C07F9038C1FFC09038C787E0390FCE07F09038DC03F813F813F0A313E0AF3AFFFE3FFF80A3211B
7D9A26>I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0003F14E0EB00074814F0A34814
F8A86C14F0A2393F800FE0A2001F14C0390FC01F803907F07F003801FFFC38003FE01D1B7E9A22
>I<38FFE1FE9038E7FF809038FE07E0390FF803F8496C7E01E07F140081A2ED7F80A9EDFF00A2
5DEBF0014A5A01F85B9038FE0FE09038EFFF80D9E1FCC7FC01E0C8FCA9EAFFFEA321277E9A26>
I<38FFC3F0EBCFFCEBDC7E380FD8FF13F85BA3EBE03C1400AFB5FCA3181B7E9A1C>114
D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E6C1300EAFFE013FE387FFFC06C13E06C
13F0000713F8C613FC1303130000E0137C143C7EA26C13787E38FF01F038F7FFC000C11300161B
7E9A1B>I<1370A413F0A312011203A21207381FFFF0B5FCA23807F000AD1438A73803F8700001
13F03800FFE0EB1F8015267FA51B>I<39FFE03FF8A3000F1303B11407A2140F0007131F3A03F0
3BFF803801FFF338003FC3211B7D9A26>I<3AFFFE03FF80A33A07F0007000A26D13F000035CEB
FC0100015CA26C6C485AA2D97F07C7FCA2148FEB3F8E14DEEB1FDCA2EB0FF8A36D5AA26D5AA26D
5A211B7F9A24>I<3AFFFE03FF80A33A07F0007000A26D13F000035CEBFC0100015CA26C6C485A
A2D97F07C7FCA2148FEB3F8E14DEEB1FDCA2EB0FF8A36D5AA26D5AA26D5AA2495AA2EA3807007C
90C8FCEAFE0F130E131E5BEA7C78EA3FE0EA0FC021277F9A24>121 D E
/Fo 73 124 df<90380FC3E090387FEFF09038E07C783801C0F8D8038013303907007000A7B612
80A23907007000B0387FE3FFA21D20809F1B>11 D<EB1F80EB7FC03801E0E0EA0381A2EA070190
C7FCA6B512E0A2EA0700B0387FC3FEA21720809F19>I<EB1FE0137FEA01E1EA03811380EA0700
A7B5FCA2EA0700B0387FE7FEA21720809F19>I<90380F80F890387FE7FE9038E06E063901C0FC
0F380380F8380700F00270C7FCA6B7FCA23907007007B03A7FE3FE3FF0A22420809F26>I<EA70
38EAF87CEAFC7EA2EA7C3EEA0C06A3EA180CA2EA381CEA3018EA6030EA40200F0E7E9F17>34
D<127012F812FCA2127C120CA31218A21238123012601240060E7C9F0D>39
D<136013C0EA0180EA03005A12065A121C12181238A212301270A31260A212E0AC1260A21270A3
12301238A21218121C120C7E12077EEA0180EA00C013600B2E7DA112>I<12C012607E7E121C12
0C7E12077E1380A2120113C0A31200A213E0AC13C0A21201A313801203A213005A12065A121C12
185A5A5A0B2E7DA112>I<127012F812FCA2127C120CA31218A21238123012601240060E7C840D>
44 D<EAFFC0A30A037F8A0F>I<127012F8A3127005057C840D>I<1303A213071306A2130E130C
A2131C1318A213381330A213701360A213E013C0A212011380A312031300A25A1206A2120E120C
A2121C1218A212381230A212701260A212E05AA2102D7DA117>I<EA03F0EA0FFCEA1E1EEA1C0E
487E00781380EA7003A300F013C0AD00701380A3EA780700381300EA1C0EEA1E1EEA0FFCEA03F0
121F7E9D17>I<EA01801203121F12FF12E31203B3A5EAFFFEA20F1E7C9D17>I<EA03F0EA0FFCEA
183EEA300F00601380EAC00700F013C012F81303A21220EA00071480A2EB0F00130E5B5B5B5B48
5A485A90C7FC000613C05A5A38300180EA7FFFB5FCA2121E7E9D17>I<EA03F0EA0FFCEA1C1EEA
300F00781380A21307EA380F12001400A2131E5BEA03F85BEA001C7F130FEB0780A214C0122012
F8A300F01380EA600F00701300EA3C1EEA1FFCEA03F0121F7E9D17>I<130EA2131E133EA2136E
13EE13CEEA018E1203130E1206120E120C121812381230126012E0B512F0A238000E00A7EBFFE0
A2141E7F9D17>I<EA3803EA3FFF5B13F813E00030C7FCA6EA31F0EA37FCEA3E0EEA3C07003813
80EA3003120014C0A3126012F0A21480EAC00700601300EA700EEA3C1EEA0FF8EA07E0121F7E9D
17>I<137CEA01FEEA0783380E0380EA0C07121C3838030090C7FC12781270A2EAF3F8EAF7FEEA
FC0E487EEB0380A200F013C0A51270A214801238EB0700121CEA0E1EEA07FCEA01F0121F7E9D17
>I<1260387FFFC0A21480EA600138C003001306A2C65A5BA25B5BA213E05B1201A3485AA41207
A76CC7FC121F7D9D17>I<EA03F0EA0FFCEA1E1EEA3807123038700380A438780700123EEA3F0E
EA1FDCEA0FF81203487EEA1E7EEA383F38700F80130738E003C01301A400F01380EA7003383807
00EA1E0EEA0FFCEA03F0121F7E9D17>I<EA03F0487EEA1E1CEA380E7F1270EB038012F0A214C0
A5EA7007A2EA380F121CEA1FFBEA07F338000380A2130714001230EA780EA2EA701CEA3078EA1F
F0EA0FC0121F7E9D17>I<127012F8A312701200AA127012F8A3127005147C930D>I<127012F8A3
12701200AA127012F8A312781218A41230A21260A21240051D7C930D>I<007FB512E0B612F0C9
FCA8B612F06C14E01C0C7D9023>61 D<EB0380A3497EA3EB0DE0A3EB18F0A3EB3078A3497EA3EB
E01E13C0EBFFFE487FEB800FA200031480EB0007A24814C01403EA0F8039FFE03FFEA21F207F9F
22>65 D<B512E014F83807803E80801580A515005C143E5CEBFFF880EB801E801580140715C0A5
1580140FEC1F00143EB512FC14F01A1F7E9E20>I<90381FC04090387FF0C03801F8393803C00D
38078007380F0003121E003E1301123C127C1400127812F81500A8007814C0127CA2123C003EEB
0180121E6CEB0300EA07803803C00E3801F81C38007FF0EB1FC01A217D9F21>I<B512E014FC38
07803E140FEC0780EC03C015E0140115F01400A215F8A915F0A2140115E0A2EC03C0EC0780EC0F
00143EB512FC14E01D1F7E9E23>I<B6FCA23807801F140780A215801401A214C1A2ECC000A213
8113FFA213811380A21560A2140015C0A31401A21403EC0F80B6FCA21B1F7E9E1F>I<B6FCA238
07801F140780A215801401A214C1A2ECC000A2138113FFA213811380A491C7FCA8EAFFFEA2191F
7E9E1E>I<90380FC02090387FF8603901F81CE03803E00638078003380F0001121E14005A127C
1560127812F81500A6EC7FFCA20078EB01E0127CA2123C7EA27E38078003EA03E03901F80E6039
007FFC2090380FE0001E217D9F24>I<39FFF8FFF8A23907800F00AC90B5FCA2EB800FAD39FFF8
FFF8A21D1F7E9E22>I<EAFFFCA2EA0780B3A9EAFFFCA20E1F7F9E10>I<EAFFFEA2EA0780B11406
A4140EA2140C141C143C14FCB5FCA2171F7E9E1C>76 D<B46CEB1FF86D133F00071500A2D806E0
136FA3017013CFA3903838018FA390381C030FA3EB0E06A3EB070CA3EB0398A3EB01F0A3380F00
E03AFFF0E1FFF8A2251F7E9E2A>I<39FF807FF813C00007EB07809038E00300A2EA06F0A21378
133CA2131EA2130FA2EB078314C31303EB01E3A2EB00F3A2147BA2143F80A280A2000F7FEAFFF0
801D1F7E9E22>I<EB1F80EBFFF03801E0783807C03E48487E497E001EEB078048EB03C0A2007C
14E0A20078130100F814F0A9007814E0007C1303A2003C14C0003E1307001E14806CEB0F006D5A
3807C03E3801F0F86CB45AEB1F801C217D9F23>I<B512E014F83807807C141E141F801580A515
005C141E147CEBFFF814E00180C7FCACEAFFFCA2191F7E9E1F>I<B57E14F0380780F8143C143E
141E141FA4141E143E143C14F8EBFFF01480EB81C0EB80E01470A21478A3147CA3150C147E143E
39FFFC1F18EC0FF0C7EA03E01E207E9E21>82 D<3807E080EA0FF9EA1C1FEA300FEA7007EA6003
12E01301A36CC7FCA21278127FEA3FF0EA1FFC6C7EEA03FF38001F801307EB03C0A2130112C0A4
00E01380EAF00338F80700EAFE0EEACFFCEA81F812217D9F19>I<007FB512E0A238780F010070
130000601460A200E0147000C01430A400001400B23807FFFEA21C1F7E9E21>I<39FFFC7FF8A2
3907800780EC0300B3A300031302EBC006A200015B6C6C5AEB7830EB3FE0EB0FC01D207E9E22>
I<3BFFF07FF83FF0A23B0F0007800F80EE0300A23A07800FC006A3913819E00ED803C0140CA214
393A01E030F018A33A00F0607830A3ECE07C903978C03C60A390393D801EC0A390383F000F6D5C
A3010E6DC7FCA32C207F9E2F>87 D<397FF83FF8A23907C00F800003EB06003801E00EEBF00C00
005BEB7838EB7C30EB3C70EB3E60EB1EC0130F5C13078080130DEB1DF0EB18F8EB3878EB307CEB
603CEBE01EEBC01F48487E0003EB0780010013C0EA0F8039FFE01FFEA21F1F7F9E22>I<EA0804
EA180CEA3018EA7038EA6030A2EAC060A3EAF87CEAFC7EA2EA7C3EEA381C0F0E7B9F17>92
D<EA1FE0487EEA78387FEA300E1200A3EA03FE121FEA3E0E127812F800F01330A3131E38783F70
383FEFE0380F878014147E9317>97 D<120E12FEA2120EA9133FEBFF80380FC3C0EB00E0000E13
F014701478A7147014F0120FEB01E0EBC3C0380CFF80EB3E0015207F9F19>I<EA03F8EA0FFCEA
1E1E123CEA380CEA7800127012F0A612701278EA3803123CEA1F0EEA0FFCEA03F010147E9314>
I<EB0380133FA21303A9EA03E3EA0FFBEA1E0FEA3C07EA7803A2127012F0A61270A2EA78071238
EA1E1F380FFBF8EA03E315207E9F19>I<EA03F0EA0FFCEA1E1E487EEA380712783870038012F0
B5FCA200F0C7FCA31270127838380180EA1C03380F0700EA07FEEA01F811147F9314>I<133C13
FEEA01CFEA038F1306EA0700A7EAFFF0A2EA0700B0EA7FF0A21020809F0E>I<EB01E03803E3F0
380FFF70EA1C1C383C1E00EA380EEA780FA4EA380EEA3C1EEA1C1CEA3FF8EA33E00030C7FCA212
38EA3FFE381FFF804813C0387003E0EB00F0481370A36C13F0387801E0383E07C0380FFF00EA03
FC141F7F9417>I<120E12FEA2120EA9133E13FF380FC380EB01C0A2120EAD38FFE7FCA216207F
9F19>I<121C121E123E121E121CC7FCA6120E127EA2120EAFEAFFC0A20A1F809E0C>I<13E0EA01
F0A3EA00E01300A61370EA07F0A212001370B3A21260EAF0E0EAF1C0EA7F80EA3E000C28829E0E
>I<120E12FEA2120EA9EB1FF0A2EB0F80EB0E00130C5B5B137013F0EA0FF81338EA0E1C131E13
0E7F1480130314C038FFCFF8A215207F9F18>I<120E12FEA2120EB3A9EAFFE0A20B20809F0C>I<
390E3F03F039FEFF8FF839FFC1DC1C390F80F80EEB00F0000E13E0AD3AFFE7FE7FE0A223147F93
26>I<EA0E3EEAFEFF38FFC380380F01C0A2120EAD38FFE7FCA216147F9319>I<EA01F8EA07FE38
1E0780383C03C0EA3801387000E0A200F013F0A6007013E0EA7801003813C0EA3C03381E078038
07FE00EA01F814147F9317>I<EA0E3F38FEFF8038FFC3C0380F01E0380E00F0A21478A7147014
F0120FEB01E0EBC3C0380EFF80EB3E0090C7FCA7EAFFE0A2151D7F9319>I<3803E180EA0FF9EA
1E1FEA3C0712781303127012F0A6127012781307EA3C0FEA1E1FEA0FF3EA03E3EA0003A7EB3FF8
A2151D7E9318>I<EA0E78EAFEFCEAFF9EEA0F1E130C1300120EACEAFFE0A20F147F9312>I<EA1F
90EA3FF0EA7070EAE030A3EAF0001278EA7F80EA3FE0EA0FF01200EAC0781338A212E0A2EAF070
EADFE0EA8F800D147E9312>I<1206A4120EA2121E123EEAFFF8A2EA0E00AA1318A5EA073013E0
EA03C00D1C7F9B12>I<380E01C0EAFE1FA2EA0E01AC1303A2EA070FEBFDFCEA01F116147F9319>
I<38FF87F8A2381E01E0000E13C01480A238070300A3EA0386A2138EEA01CCA213FC6C5AA21370
A315147F9318>I<39FF9FF3FCA2391C0780F01560ECC0E0D80E0F13C0130C14E00007EBE180EB
186114713903987300EBB033A2143F3801F03EEBE01EA20000131CEBC00C1E147F9321>I<387F
C7FCA2380703E0148038038300EA01C7EA00EE13EC13781338133C137C13EEEA01C71387380303
80380701C0000F13E038FF87FEA21714809318>I<38FF87F8A2381E01E0000E13C01480A23807
0300A3EA0386A2138EEA01CCA213FC6C5AA21370A31360A35B12F0EAF18012F3007FC7FC123C15
1D7F9318>I<EA3FFFA2EA380EEA301CEA703CEA6038137013F0EA01E013C0EA0380EA0783EA0F
03120EEA1C07EA3C061238EA701EEAFFFEA210147F9314>I<B512FCA21602808C17>I
E /Fp 10 118 df<DC7FFE140E030FB500E0133E92B600F8137E020303FE13FE021FEDFF81027F
D9F80113E391B53980003FF7010301FCC7EA07FF4901F08049491400490180157F4990C9123F49
48161F4948160F485B4818074A1603485B481801A2485B1900A2485B1A7E5AA391CCFCA2B5FCAD
7EA2801A3EA27EA26C7FA21A7E6C6D177CA26C19FC6C6D17F86E16016CF003F06C7F6D6CEE07E0
6D6CEE0FC06D6DED1F806D01E0ED7F006D6D15FE6D01FCEC03FC0100D9FF80EB0FF86E01F8EBFF
F0021F90B612C0020393C7FC020015FC030F14E09226007FFEC8FC474979C756>67
D<B97E18FC18FF19C019F0D8001F902680000F13FC05017F716C7E7213807213C0841AE0A27213
F0A31AF8A81AF0A34E13E0A21AC04E1380604E13004D485A050F13F892B75A19C04EC7FC18F003
C0CAFCB3A9B712F8A545477CC651>80 D<903807FFFE017FEBFFE048B612F84815FE489039001F
FF8003077F48D980017F6F7FA2707EA2707E6C90C7FC6C5A6C5AC9FCA40207B5FC91B6FC130F01
3FEBF03F3901FFFE004813F04813C04890C7FC485A485A485AA212FF5BA3167FA26D14FF6C6CEB
01EF003F140301FF90380FCFFF6C9026C07F8F13F8000790B5000713FC6CECFC03C66CEBF00101
07903980007FF8362E7DAD3A>97 D<91381FFFC049B512FC010714FF011F158090267FFC0113C0
EBFFF048D9C00313E04813804813005A485AA248486D13C06F1380007FED7F0093C7FC5BA212FF
AA127F7FA3123F6D15F8121F16016C6C15F06C6D13036C6DEB07E06C6DEB0FC06C01F8EB3F8090
3A7FFE01FF00011FB55A010714F8010114E0D9001F90C7FC2D2E7CAD35>99
D<13FCEA03FF4813804813C014E05AA67E14C06C13806C1300EA00FC90C7FCABEB7FC0B5FCA512
037EB3B0B6FCA518497CC820>105 D<90287FC001FFC0ECFFE0B5010F01F8010713FC033F01FE
011F13FF92B6017F809126C1FE07902680FF037F9126C3F0039026C1F8017F00039026C7C00190
26E3E0007F6CD9CF00ECE78002DE03EFC7FC02DC6D01FE6E7E14FC4A5DA24A5DA24A5DB3A8B6D8
C07F9026FFE03FB512F0A55C2E7CAD63>109 D<903A7FC001FFC0B5010F13F8033F13FE92B6FC
9126C1FE077F9126C3F0037F00039026C7C0017F6CEBCF0014DE02DC6D7F14FC5CA25CA25CB3A8
B6D8C07FEBFFE0A53B2E7CAD42>I<EC0FFF91B512F0010714FE011F6E7E90263FFC037F903AFF
E0007FF0480180EB1FF84890C76C7E48486E7E000F824980001F1780003F17C04980A2007F17E0
A300FF17F0AA007F17E0A46C6C4A13C0A2001F17806D5C000F17006C6C4A5A6C6D495A6C6D495A
6C6D495A903A7FFC03FFE0011FB6128001074AC7FC010014F0020F90C8FC342E7DAD3B>I<EB01
F0A61303A31307A3130FA2131F133FA2137FEA01FF5A000F90B512C0B7FCA4C601F0C7FCB3A5ED
01F0A91503D97FF813E01507D93FFC13C090391FFE1F806DB5FC6D1400010113FC9038003FF024
427EC12E>116 D<D97FE0EC3FF0B5EC7FFFA5000315016C81B3A85EA35E5E6CED0F7F6E131F01
7F023E7F90273FFE01FCEBFFE06DB512F86D14F0010314C09039003FFE003B2E7CAD42>I
E /Fq 8 117 df<140F5C147FEB03FF131FB6FCA313E7EA0007B3B3A7007FB612E0A4233879B7
32>49 D<DB1FFE14E00203B5EAC001021FECF803027FECFE07903B01FFFC00FF0F010701C0EB1F
DF4990C7EA07FFD93FFC804948804948804849157F4849153F4849151FA24890C9120FA2484816
07A2485AA2007F1703A34993C7FC12FFAD127F7FF001E0A2123FA26C7E18036C6C17C018076C7F
F00F806C7F6C6DED1F006C6D153E6D6C5D6D6C5DD90FFFEC03F06D01E0EB0FE0010101FCEB7FC0
6D6CB6C7FC021F14FC020314E09126001FFEC8FC3B3D7ABB48>67 D<EB1FFF48B512F0000714FC
390FF807FF001F01017F6D6C7F6F7EA282153F6C5A6C5AEA01C0C8FCA2EC07FF0103B5FC131F90
B5123F000313C0000F1300EA1FFC485A485A5B12FF5BA3157FA26C6C13FF6D5A6C6C4813FC3B1F
FC0FDFFFF00007B5120F0001EBFC0739003FF0012C267DA530>97 D<903801FFC0011F13F8017F
13FE9038FFC1FF00039038007F80D807FCEB1FC0484814E0ED0FF0485A003FEC07F8A2485AED03
FCA212FFA290B6FCA301E0C8FCA5127FA27F003F153CA26C6C147C000F15786C6C14F86C6CEB01
F06C6CEB07E06C9038E03FC0013FB51200010F13FC010013E026267DA52D>101
D<13FFB5FCA412077EB0ED7FC0913803FFF8020F13FE91381F03FFEC3C01027814804A7E4A14C0
5CA25CA291C7FCB3A4B5D8FC3F13FFA4303C7CBB37>104 D<9039FF01FF80B5000F13F0023F13
FC9138FE03FFDAF00113C000039039E0007FE0028014F0EE3FF891C7121F17FC160F17FEA3EE07
FFAAEE0FFEA3EE1FFCA217F86EEB3FF06E137F6EEBFFE06E481380DAFC07130091383FFFFC020F
13F0020190C7FC91C9FCADB512FCA430377DA537>112 D<9038FE03F000FFEB0FFE91383FFF80
91387C7FC014F00007ECFFE06C6C5A5CA25CED7FC0ED3F80ED0E0091C8FCB3A3B512FEA423267D
A529>114 D<EB0780A5130FA4131FA2133FA2137F13FF5A1207001FEBFFF8B6FCA30001EB8000
B3153CA86C147814C0017F13F8ECE1F090381FFFE0010713C0010113001E377EB627>116
D E /Fr 36 119 df<EB078090391FE003809038387007EB703001E0130301C014000001137090
3880F0061203EC600C48C75A5D15E090383C01F09038FE03B89038C30618EB830C903803181C39
0F06300CEA1F86381DFC36393CF03F183838001F0078130E1400A200705C12F000705C12785D00
38495A003C49C7FC6C130E380F807C3803FFF038007F8021257BA325>38
D<127012F8A212F012E005057A840F>46 D<14035CA25C1580141FA214371477146714C7A2EB01
87A2EB0307A21306130E130C1318A2133090383FFFC05BEB600313C012011380EA0300A21206A2
121E39FFC03FFC13801E237DA224>65 D<90B512E015F890380F003C151E131E150E150FA24913
0E151EA2153C49137815F0EC01E090387FFFC090B5FC9038F003E0EC00F01578485A1538153CA2
48481378A315F039078001E01403EC07C0EC1F00B512FE14F020227DA122>I<90B512F015FC90
380F003E150F011EEB0780150316C015015B16E0A35BA449EB03C0A44848EB0780A216005D4848
130E5D153C5D48485B4A5AEC0780021FC7FCB512FC14F023227DA125>68
D<91387E0180903903FF810090380F80C390383E00670178133F49133ED801C0131E485A120748
C7121C120E121E5A15185A92C7FCA25AA4EC3FFC5AEC01E0A26C495AA312700078495A1238003C
130F6C131B260FC0F3C7FC3803FFC1C690C8FC212479A226>71 D<EBFFF8A2EB0F00A2131EA45B
A45BA45BA4485AA4485AA4485AA4EAFFF8A215227DA113>73 D<903807FFC04913809038003C00
A25CA45CA4495AA4495AA4495AA449C7FCA212381278EAF81EA2485AEA6078EA70F0EA3FE0EA1F
801A237CA11A>I<9039FFF80FFCA290390F0007C01600011E130E5D5D1560495B4A5A4AC7FC14
0E495A5C147814FCEBF1BCEBF33CEBFE1E13FC3801F01F497EA2813803C007A26E7EA2EA07806E
7EA28139FFF80FFEA226227DA125>I<EBFFFCA2010FC7FCA2131EA45BA45BA45BA4485A1560A2
15C0485AA2EC0180A238078003EC07005C147FB512FEA21B227DA11F>I<D9FFC0EB0FFCA2010F
EC1F801637011BEC3F00166FA216CF0133EB019EA2ED031EEB31E00161EB063CA2150C151801C1
5C1530A21560D80181495AA2ECE180EB80F13A0300F301E014F6A214FC00064A5A14F8A2001F13
F03AFFE0E07FFCA22E227DA12C>I<01FFEB1FFC1480010FEB03C01680D91BC01300A3EB19E001
311306A2EB30F0A201605B1478A3496C5AA3141ED801805BA2140FA2D803005BEC07E0A300065C
1403A2121F39FFE00180A226227DA124>I<14FE903807FF8090380F03E090383C00F001701378
4913384848133C4848131C48C7FC48141E121EA25AA25AA348143CA31578A34814F0A26CEB01E0
15C01403EC07800078EB0F00141E6C5B6C13F8380F83E03807FF80D801FCC7FC1F2479A225>I<
90B512C015F090380F0078153C011E131E150EA349131EA3153C491338157815F0EC03C090B512
005CEBF00FEC07803901E003C0A43903C00780A43907800F001503A2EC0706D8FFF8138EEC03FC
C7EA01F020237DA124>82 D<903801F06090380FFC4090381E0EC0EB3807EB700301E0138013C0
1201A2D803801300A26DC7FCA27FEA01F813FF6C13E06D7EEB1FF8EB03FCEB007C143C80A30030
131CA31418007013385C00781360387C01C038EF0380D8C7FFC7FCEA81FC1B247DA21B>I<001F
B512F8A2391E03C07800381438EB0780123000601430A2EB0F0012C0A3D8001E1300A45BA45BA4
5BA4485AA31203B57E91C7FC1D2277A123>I<393FFE07FFA23903C000F015E0484813C0A4390F
000180A4001EEB0300A4481306A4485BA4485BA25C12705C5C6C485A49C7FCEA1E0EEA0FFCEA03
F0202377A124>I<3BFFF03FF81FF8D9E07FEB3FF03B1F0007800780001E010FEB03001606141F
5E14375E14675E14C75E381F0187000F5DEB0307ED818013060383C7FC130C158613180138138C
0130139C0160139815B801C013B015E013805D13005D120E92C8FC120C2D2376A131>87
D<39FFF003FFA2000FC712F015E090388001C000071480EC0300EBC0060003130E5CEBE0180001
5B5CEBF0E000005BEBF18001FBC7FC13FF137E137C1378A45BA4485AA4EA3FFE5B202276A124>
89 D<EBF8C0EA01FDEA078F380F0780120E121CEA3C03383807001278A3EAF00EA214101418EB
1C30EA703C137C3838FC60383FCFC0380F078015157B9419>97 D<137E48B4FC3803C380EA0703
EA0E07121C003CC7FC12381278A35AA45BEA7003130EEA383CEA1FF0EA0FC011157B9416>99
D<143CEB03F8A2EB0038A21470A414E0A4EB01C013F9EA01FDEA078F380F0780120E121CEA3C03
383807001278A3EAF00EA214101418EB1C30EA703C137C3838FC60383FCFC0380F078016237BA2
19>I<13F8EA03FCEA0F0EEA1E06123C1238EA780CEAF038EAFFF01380EAF0005AA413021306EA
701C1378EA3FE0EA0F800F157A9416>I<143C147F14CF1301EB03861480A3EB0700A5130EEBFF
F0A2EB0E00A25BA55BA55BA55BA45B1201A2EA718012F390C7FC127E123C182D82A20F>I<EB1F
18EB3FB8EBF1F83801E0F013C0EA038000071370EB00E05AA3381E01C0A4EB0380EA0E07130FEA
071FEBFF00EA01E7EA0007A2130EA3EA701CEAF0385BEA7FE0EA3F80151F7E9416>I<136013F0
13E0A21300A8120EEA1F801233126312C3A3EA0700A2120EA35A13201330EA3860A213C01239EA
1F80EA0E000C217CA00F>105 D<13F0EA0FE0A21200A2485AA4485AA448C7FCEB01E0EB07F0EB
0E30380E1870EB30F01360EBC060381D8000121F13E0EA1CF0EA3838133CEB1C20143038703860
A21440EB18C038E01F8038600F0014237DA216>107 D<EA01E0EA1FC0A21201A2EA0380A4EA07
00A4120EA45AA45AA45AA212711380EAE300A312E6127E123C0B237CA20C>I<381E0780383F1F
E0EA63B8EBE070EAC3C0A21380000713E01300A3380E01C0A214C2EB0383001C1386EB0706140C
EB0318003813F0381801E018157C941B>110 D<137E48B4FC3803C380380701C0120E001C13E0
123CA21278A338F003C0A21480130700701300130E5B6C5AEA1FF0EA07C013157B9419>I<3803
C1F03807E3F8380C761C137C3818781E1370A2EA00E0A43801C03CA314780003137014F014E0EB
E3C038077F80EB1E0090C7FCA2120EA45AA2EAFFC0A2171F7F9419>I<381E0F80383F1FC03863
B0E013E0EAC3C1A2EB80C00007130090C7FCA3120EA45AA45A121813157C9415>114
D<13FC48B4FC38038380EA0703EA0E07A2EB0200000FC7FC13F0EA07FC6C7EEA007E130FA2EA70
07EAF00EA2485AEA7038EA3FF0EA1FC011157D9414>I<13C01201A4EA0380A4EA0700EAFFF8A2
EA0700120EA45AA45AA213101318EA7030A21360EA71C0EA3F80EA1E000D1F7C9E10>I<000F13
30381F8070EA31C0006113E012C1EAC380A2380381C0EA0701A3380E0380A214841486EB070CA2
130FEB1F183807F3F03803E1E017157C941A>I<380F01C0381F83E0EA31C3EA61C1EAC1C0EAC3
80A2000313C0EA0700A3380E0180A3EB0300A213061304EA0F1CEA07F8EA01E013157C9416>I
E /Fs 54 122 df<ECC018A301011338EC8030A301031370EC0060A34913E001065BA3EB0E0101
0C5BB712C0A226001803C7FCA3EB3807EB3006A4B712C0A22600600CC7FCEBE01CEBC018A30001
1338EB8030A300031370EB0060A34813E000065BA2222D7DA229>35 D<127012F812FCA2127C12
0CA41218A21230A212601240060F7C840E>44 D<EAFFE0A30B037F8B10>I<127012F8A3127005
057C840E>I<EA01F0EA07FCEA0E0E487E38380380A2007813C0EA7001A300F013E0AE007013C0
A3EA780300381380A2381C0700EA0E0EEA07FCEA01F013227EA018>48 D<EA01801203120F12FF
12F31203B3A8EAFFFEA20F217CA018>I<EA03F0EA0FFCEA1C1F38300F80EA6007EB03C012C000
F013E0EAF801A3EA2003120014C0A2EB0780A2EB0F00131E131C5B5B5B485A485A38070060120E
120C4813E04813C0EA7FFFB5FCA213217EA018>I<EA03F0EA0FFCEA1C1F383007801270007813
C0A21303EA380712001480A2EB0F00130E133CEA03F8A2EA001E7FEB078014C0130314E0122012
7012F8A200F013C01260EB07801230381C1F00EA0FFCEA03F013227EA018>I<00101380EA1C07
381FFF005B5B13F00018C7FCA613F8EA1BFEEA1F0F381C0780EA180314C0EA000114E0A4126012
F0A214C0EAC0031260148038300700EA1C1EEA0FFCEA03F013227EA018>53
D<137E48B4FC3803C180380701C0EA0E03121CEB018048C7FCA2127812701320EAF1FCEAF3FEEA
F60738FC038000F813C0130112F014E0A51270A3003813C0130300181380381C0700EA0E0EEA07
FCEA01F013227EA018>I<EA01F0EA07FCEA0E0F38180780EA3803383001C01270A31278EB0380
123E383F0700EA1FCEEA0FFCEA03F87FEA0F7F381C3F80EA380F387007C0130338E001E01300A5
387001C0A238380380381E0F00EA0FFEEA03F013227EA018>56 D<EA01F0EA07FCEA0E0E487E38
3803801278127038F001C0A314E0A5127013031278EA3807EA1C0DEA0FF9EA07F1380081C01301
13031480A2383007001278130EEA701C6C5AEA1FF0EA0FC013227EA018>I<497E497EA3497EA3
497E130CA2EB1CF8EB1878A2EB383C1330A2497EA3497EA348B51280A2EB800739030003C0A300
06EB01E0A3000EEB00F0001F130139FFC00FFFA220237EA225>65 D<B512F814FE3907800F80EC
07C0EC03E0140115F0A515E01403EC07C0EC0F8090B512005C9038801F80EC07C0EC03E0EC01F0
140015F8A6EC01F0140315E0EC0FC0B6120014FC1D227EA123>I<90380FE01090383FF8309038
F81C703801E0063903C003F03807800148C7FC121E003E1470123C127C15301278A212F81500A7
00781430A2127CA2003C1460123E121E6C14C06C7E3903C001803901E003003800F80EEB3FF8EB
0FE01C247DA223>I<B512F014FE3807801FEC07C01403EC01E0EC00F015F81578157C153CA315
3EA9153CA2157C1578A215F0EC01E01403EC07C0EC1F00B512FE14F81F227EA125>I<B612C0A2
3807800F14031401140015E0A21560A21460A21500A214E0138113FFA2138113801460A491C7FC
A8EAFFFEA21B227EA120>70 D<903807F00890383FFC189038FC0E383801E0033903C001F83807
800048C71278121E15385AA2007C14181278A212F81500A6EC1FFF1278007CEB0078A2123CA27E
A27E6C7E6C6C13F83801F0013900FC079890383FFE08903807F80020247DA226>I<39FFFC3FFF
A239078001E0AD90B5FCA2EB8001AF39FFFC3FFFA220227EA125>I<3803FFF0A238000F00B3A6
127012F8A3EAF01EEA601CEA3878EA1FF0EA07C014237EA119>74 D<39FFFC07FFA239078001F0
15C05D4AC7FC14065C5C14385C5CEB81C0EB8380EB87C080138DEB98F013B0EBE078497E138080
80A26E7E8114036E7EA26E7E4A7E3AFFFC07FF80A221227EA126>I<EAFFFEA2EA0780B3EC0180
A41403A215005CA25C143FB6FCA219227EA11E>I<D8FFC0EB03FF6D5B000715E0A2D806F0130D
A301781319A36D1331A36D1361A36D13C1A29038078181A3903803C301A3EB01E6A3EB00FCA314
78EA1F80D8FFF0EB3FFF143028227EA12D>I<39FF800FFF13C00007EB01F89038E000607F1206
1378A27F133E131E7FA2EB078014C01303EB01E0A2EB00F01478A2143CA2141E140FA2EC07E0A2
14031401A2381F8000EAFFF0156020227EA125>I<EB0FE0EB7FFCEBF83E3903E00F8039078003
C0390F0001E0A2001EEB00F0003E14F8003C1478007C147CA20078143CA200F8143EA9007C147C
A3003C1478003E14F8001E14F06CEB01E0EB80033907C007C03903E00F803900F83E00EB7FFCEB
0FE01F247DA226>I<B512F014FC3807803FEC0F801407EC03C0A215E0A515C0A2EC0780140FEC
3F00EBFFFC14F00180C7FCADEAFFFCA21B227EA121>I<B512E014F83807803E140F6E7E816E7E
A64A5A5D4AC7FC143EEBFFF85CEB80788080140E140FA481A3ED818015C114073AFFFC03E300EC
01FEC8127C21237EA124>82 D<3803F020380FFC60381C0EE0EA3803EA7001A2EAE000A21460A3
6C1300A21278127FEA3FF0EA1FFE6C7E0003138038003FC0EB07E01301EB00F0A2147012C0A46C
136014E06C13C0EAF80138EF038038C7FF00EA81FC14247DA21B>I<007FB512F8A2387C078000
70143800601418A200E0141C00C0140CA500001400B3A20003B5FCA21E227EA123>I<3BFFF03F
FC07FEA23B0F0007C001F00203EB00E01760D807806D13C0A33B03C007F001801406A216032701
E00C781300A33A00F0183C06A3903978383E0CEC301EA2161C90393C600F18A390391EC007B0A3
010F14E0EC8003A36D486C5AA32F237FA132>87 D<387FFFFEA2EB003C007C137C0070137814F8
4813F0EB01E0EAC00314C01307148038000F005B131E133E133C5B13F85B0001130313E0EA03C0
12071380000F13071300001E1306003E130E003C131E007C133E007813FEB5FCA218227DA11E>
90 D<EA0FE0EA1FF8EA3C1C7FEA18071200A25BEA03FF120FEA3F07127C127812F01418A2130F
1278387C3FB8383FF3F0380FC3C015157E9418>97 D<120E12FEA2121E120EAAEB1F80EB7FE038
0FC0F0EB0078000E1338143C141C141EA7141C143C000F1338EB8070EBC1F0380C7FC0EB1F0017
237FA21B>I<EA01FEEA07FF380F0780121C383803000078C7FC127012F0A7127814C07E381E01
80380F0300EA07FEEA01F812157E9416>I<14E0130FA213011300AAEA03F0EA07FEEA1F07EA3C
01EA38001278127012F0A712701278EA3801EA3C03381E0EF0380FFCFEEA03F017237EA21B>I<
EA01FCEA07FF380F0780381C03C0EA3801007813E0EA7000B5FCA200F0C7FCA5127814607E6C13
C0380F83803807FF00EA00FC13157F9416>I<133C13FEEA01CFEA038FA2EA0700A9EAFFF8A2EA
0700B1EA7FF8A2102380A20F>I<14F03801F1F83807FFB8380F1F38381E0F00EA1C07003C1380
A5001C1300EA1E0FEA0F1EEA1FFCEA19F00018C7FCA2121CEA1FFF6C13C04813E0383801F03870
0070481338A400701370007813F0381E03C0380FFF803801FC0015217F9518>I<120E12FEA212
1E120EAAEB1F80EB7FC0380FC1E0EB80F0EB0070120EAE38FFE7FFA218237FA21B>I<121C121E
123E121E121CC7FCA8120E12FEA2121E120EAFEAFFC0A20A227FA10E>I<EA01C0EA03E0A3EA01
C0C7FCA8EA01E0120FA212011200B3A4EA60C012F11380EA7F00123E0B2C82A10F>I<120E12FE
A2121E120EAAEB0FFCA2EB07E0EB0380EB0700130E13185B137813F8EA0F9C131EEA0E0E7F1480
EB03C0130114E014F038FFE3FEA217237FA21A>I<120E12FEA2121E120EB3ABEAFFE0A20B237F
A20E>I<390E1FC07F3AFE7FE1FF809039C0F303C03A1F807E01E0390F003C00000E1338AE3AFF
E3FF8FFEA227157F942A>I<380E1F8038FE7FC038FFC1E0381F80F0380F0070120EAE38FFE7FF
A218157F941B>I<EA01FCEA07FF380F0780381C01C0383800E0007813F00070137000F01378A7
00701370007813F0003813E0381C01C0380F07803807FF00EA01FC15157F9418>I<380E1F8038
FE7FE038FFC1F0380F0078120E143CA2141EA7143CA2000F1378EB8070EBC1F0380E7FC0EB1F00
90C7FCA8EAFFE0A2171F7F941B>I<EA0E3CEAFEFEEAFFCFEA1F8FEA0F061300120EADEAFFF0A2
10157F9413>114 D<EA0F88EA3FF8EA7078EAE0381318A3EAF000127FEA3FE0EA1FF0EA01F8EA
003CEAC01CA212E0A2EAF018EAF878EADFF0EA8FC00E157E9413>I<1206A5120EA3121E123EEA
FFF8A2EA0E00AA130CA51308EA0718EA03F0EA01E00E1F7F9E13>I<000E137038FE07F0A2EA1E
00000E1370AC14F01301380703783803FE7FEA01F818157F941B>I<38FFC3FEA2381E00F8000E
1360A26C13C0A338038180A213C300011300A2EA00E6A3137CA31338A217157F941A>I<39FF8F
F9FFA2391E01C07CD81C031338000EEBE030A2EB06600007EB7060A2130E39038C30C01438139C
3901D81980141DA2EBF00F00001400A2497EEB600620157F9423>I<38FFC3FEA2381E00F8000E
1360A26C13C0A338038180A213C300011300A2EA00E6A3137CA31338A21330A213701360A2EAF0
C012F1EAF380007FC7FC123E171F7F941A>121 D E /Ft 20 118 df<B51280A311037F9016>
45 D<B612E015FC3907E0007F0003EC0F806F7EED01E06F7E1678167C82A282A2EE0F80A217C0
A21607A217E0AB17C0A3160F1780A3EE1F00A2163E5E167816F84B5AED07E0ED0F800007027FC7
FCB612FC15E02B317CB033>68 D<B51280A23807F0006C5AB3B3A7487EB51280A211317DB017>
73 D<D8FFF0ED7FF86D15FF0007170000035E017CEC01BEA36DEC033EA36D1406A36D6C130CA3
6D6C1318A36D6C1330A36D6C1360A216C06D7EA291387C0180A391383E0300A3EC1F06A3EC0F8C
A3EC07D8A3EC03F0A3486C6C5AD80FC0157FD8FFFC91380FFFF8EC00C035317CB03D>77
D<B612C015F83907E000FE0003141FED0F80ED07C0ED03E016F01501A216F8A616F0A2150316E0
ED07C0ED0F80ED1F0015FE90B512F815C001E0C8FCB3A2487EB57EA225317CB02D>80
D<90387F80203901FFE0603807C0F8390F001CE0001E130F481307003813030078130112701400
12F0A21560A37E1500127C127E7E13C0EA1FF86CB47E6C13F86C7FC613FF010F1380010013C0EC
1FE01407EC03F01401140015F8A200C01478A57E15706C14F015E07E6CEB01C06CEB038039E780
070038C1F01E38C07FFC38800FF01D337CB125>83 D<EA01FE380FFFC0381C03E0383C00F0003E
137880141C0008131EC7FCA4EB01FE133F3801FF1EEA07F0EA0F80EA1F00123E5AA248140CA314
3EA2007C137E6CEBDF1C391F038FB8390FFF07F03903F803C01E1F7D9E21>97
D<EB3FC0EBFFF83803E01C3807801E380F003E121EA2481308007C1300A2127812F8A9127CA36C
1303121E001F1306380F800E3807C01C3803F0383800FFE0EB3F80181F7D9E1D>99
D<EC01E0143FA214031401AFEB3F81EBFFE13803E0793807800D380F0007001E130314015A127C
A2127812F8A91278127CA2123C003E1303001E13076C130F3807801D3903E071F03901FFE1FF38
003F0120327DB125>I<EB3F80EBFFE03803E0F83807803C48487E121E805A127C158000781307
12F8B6FCA200F8C8FCA61278127C123CEC01807E6CEB0300EB80063807C00E3801F03C3800FFF0
EB1FC0191F7E9E1D>I<EB03E0EB1FF8EB3C38EB707C13F0EA01E014383803C000ACB512C0A238
03C000B3A8487EEA7FFFA216327FB114>I<15F090387F03F83901FFCF1C3803C1FC390780F818
390F00780048137C001E133C003E133EA7001E133C001F137C6C13786C6C5A380FC1E0380DFFC0
D81C7FC7FC0018C8FCA2121CA2121E380FFFF814FF6C14804814C0391E0007E00038EB01F048EB
00701578481438A500701470007814F06CEB01E06CEB03C03907C01F003801FFFC38003FE01E2F
7E9F21>I<1207EA0F80121FA2120FEA0700C7FCABEA078012FFA2120F1207B3A6EA0FC0EAFFF8
A20D307EAF12>105 D<260781FEEB3FC03BFF87FF80FFF0903A8E07C1C0F83B0F9803E3007C27
07B001E6133C9026E000FC7F495BA3495BB3486C486C133F3CFFFC1FFF83FFF0A2341F7E9E38>
109 D<380781FE39FF87FF8090388E07C0390F9803E03807B0019038E000F05BA35BB3486C487E
3AFFFC1FFF80A2211F7E9E25>I<EB1FC0EBFFF83801E03C3807800F390F000780001EEB03C0A2
48EB01E0A248EB00F0A300F814F8A8007814F0007C1301003C14E0A26CEB03C0A26CEB07803907
C01F003801F07C6CB45AEB1FC01D1F7E9E21>I<380783E038FF8FF8EB9C7CEA0FB0EA07F0EBE0
38EBC000A35BB3487EEAFFFEA2161F7E9E19>114 D<3801FC10380FFF30381E03F0EA38004813
705A1430A37E6C1300127EEA3FF06CB4FC6C1380000313E038003FF0EB03F8EB007800C0133CA2
141C7EA27E14186C13386C137038EF01E038C3FFC03880FE00161F7E9E1A>I<13C0A51201A312
03A21207120F121FB512E0A23803C000B01430A83801E060A23800F0C0EB7F80EB1F00142C7FAB
19>I<D8078013F000FF131FA2000F130100071300B31401A2140300031307EBC00E3901F03CF8
3A00FFF0FF80EB3FC0211F7E9E25>I E /Fu 5 85 df<1630167016F0A21501A21503A2150715
0FA2151B821531A2156115E115C1EC0181A2EC0301A21406A2140C141C14181430A202607FA2EC
C000A249B5FC5B91C7FC1306A25BA25BA25B1370136013E01201000381D80FF01301D8FFFE9038
3FFFF0A22C337CB235>65 D<010FB6FC17C0903A003F8007F0EE01F892C7127C177E4A143E8314
7E188002FE140FA24A15C0A21301A25CA21303171F5CA2130718804A143FA2130F18004A5CA201
1F157E17FE4A5CA2013F4A5A5F91C712034C5A495D160F017E4A5A4CC7FC01FE147E16F849495A
ED07E00001EC3F80B600FEC8FC15F032317CB036>68 D<010FB612FEA29039003F8000173E92C7
121EA24A140CA2147EA214FEA25CA20101151CEEC0184A1400A201031301A202F05B1503010713
0F91B5FC93C7FCECE00F010F7FA2ECC006A2011F130EA2EC800C92C8FC133FA291C9FCA25BA213
7EA213FEA25BA21201B512FCA22F317CB02F>70 D<010FB512F816FF903A003F801FC0EE07E092
380003F0EE01F84AEB00FCA2147EA214FE16015CA2010115F816034A14F0EE07E01303EE0F804A
EB3F00167E0107EB03F891B512E016809138E007C0010FEB03F015014A6C7EA2011F80A25CA201
3F1301A21400A249495AA2137E170601FE150E170C5B171C000102011338B539F000FC70EE7FE0
C9EA1F802F327CB034>82 D<0007B712F8A23A0FE007F00101801400D80E00491370121E001C13
0F121800385CA20030011F1460127000605CA2023F14E000E016C0C790C8FCA25CA2147EA214FE
A25CA21301A25CA21303A25CA21307A25CA2130FA25CA2131FA25C133F497E007FB512C0A22D31
74B033>84 D E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300
TeXDict begin
%%EndSetup
%%Page: 0 1
bop 795 695 a Fu(D)26 b(R)g(A)f(F)h(T)225 787 y Ft(Do)r(cumen)n(t)20
b(for)i(a)f(Standard)g(Message-P)n(assing)f(In)n(terface)685
981 y Fs(Scott)c(Berryman,)e Fr(Y)l(ale)19 b(Univ)700 1039
y Fs(James)c(Co)o(wnie,)h Fr(Meiko)i(Ltd)474 1098 y Fs(Jac)o(k)e(Dongarra,)i
Fr(Univ.)23 b(of)17 b(T)l(ennesse)n(e)j(and)d(ORNL)801 1156
y Fs(Al)f(Geist,)f Fr(ORNL)795 1214 y Fs(Bill)f(Gropp,)j Fr(ANL)767
1272 y Fs(Rolf)f(Hemp)q(el,)e Fr(GMD)762 1330 y Fs(Bob)i(Knigh)o(ten,)g
Fr(Intel)786 1388 y Fs(Rust)o(y)g(Lusk,)h Fr(ANL)614 1446 y
Fs(Stev)o(e)e(Otto,)h Fr(Or)n(e)n(gon)h(Gr)n(aduate)g(Inst)578
1504 y Fs(T)l(on)o(y)g(Skjellum,)c Fr(Missisippi)j(State)j(Univ)653
1562 y Fs(Marc)d(Snir,)g Fr(IBM)h(T.)g(J.)g(Watson)744 1621
y Fs(Da)o(vid)f(W)l(alk)o(er,)f Fr(ORNL)626 1679 y Fs(Stev)o(e)g(Zenith,)g
Fr(Kuck)k(&)f(Asso)n(ciates)811 1803 y Fs(Marc)o(h)e(25,)g(1993)87
1861 y(This)g(w)o(ork)g(w)o(as)h(supp)q(orted)g(b)o(y)f(ARP)l(A)g(and)g(NSF)g
(under)g(con)o(tract)g(n)o(um)o(b)q(er)f(###,)g(b)o(y)g(the)192
1919 y(National)h(Science)f(F)l(oundation)i(Science)e(and)i(T)l(ec)o(hnology)
f(Cen)o(ter)f(Co)q(op)q(erativ)o(e)650 1977 y(Agreemen)o(t)f(No.)21
b(CCR-8809615.)p eop
%%Page: 1 2
bop 75 357 a Fq(Chapter)32 b(1)75 565 y Fp(P)m(oin)m(t)41 b(to)f(P)m(oin)m(t)
h(Comm)m(unication)876 788 y Fo(Marc)14 b(Snir)656 845 y(William)j(Gropp)e
(and)g(Ewing)h(Lusk)75 992 y Fn(1.1)70 b(In)n(tro)r(duction)75
1095 y Fo(This)19 b(section)f(is)h(a)f(draft)f(of)h(the)g(curren)o(t)g(prop)q
(osal)g(for)g(p)q(oin)o(t-to-p)q(oin)o(t)g(comm)o(unication.)30
b(It)18 b(do)q(es)75 1151 y(not)d(y)o(et)g(include)i(a)e(description)i(of)d
(the)i(F)l(ortran)e(77)g(and)i(C)f(bindings.)166 1208 y(I)g(ha)o(v)o(e)f
(tried)i(to)e(indicate,)i(wherev)o(er)e(appropriate,)h(gaps)f(and)h(unresolv)
o(ed)h(issues,)f(using)g(small)75 1265 y(t)o(yp)q(e.)166 1398
y Fm(Discussion:)45 b Fl(The)17 b(follo)o(wing)d(sections)k(of)e(the)h(in)o
(tro)q(duction)g(con)o(tain)f(general)h(information)d(on)i(the)75
1448 y(design)g(of)f(MPI)h(pro)q(cedures.)27 b(The)16 b(material)e(should)h
(b)q(e)i(mo)o(v)o(ed)d(to)i(a)g(general)g(in)o(tro)q(duction)f(for)h(the)g
(en)o(tire)75 1497 y(do)q(cumen)o(t.)21 b(The)15 b(actual)g(binding)f(of)g
(these)i(ob)r(jects)g(in)f(F)m(ortran)g(and)f(C)h(will)f(b)q(e)h(discussed)i
(in)d(the)i(language)75 1547 y(binding)d(sub)q(committee.)75
1777 y Fn(1.2)70 b(Data)23 b(T)n(yp)r(es)75 1881 y Fk(1.2.1)55
b(Handle)75 1968 y Fo(MPI)16 b(pro)q(cedures)h(use)f(at)f(v)m(arious)h
(places)h Fj(hand)r(les)p Fo(.)22 b(Handles)17 b(are)e(used)i(to)e(access)h
(opaque)g(ob)s(jects.)75 2025 y(Suc)o(h)j(ob)s(ject)e(can)h(b)q(e)h(created,)
g(up)q(dated)f(and)h(destro)o(y)o(ed)e(only)i(b)o(y)f(b)o(y)g(calling)i
(suitable)f(MPI)f(pro-)75 2081 y(cedures,)i(and)f(pro)o(viding)g(the)g
(handle)h(as)e(parameter.)29 b(Opaque)20 b(ob)s(jects)e(hide)i(from)d(the)i
(user)g(the)75 2138 y(in)o(ternal)e(represen)o(tation)e(used)i(for)e(v)m
(arious)h(MPI)f(ob)s(jects,)g(th)o(us)h(allo)o(wing)g(to)f(ha)o(v)o(e)h
(similar)g(calls)h(in)75 2194 y(C)i(and)g(F)l(ortran,)g(allo)o(wing)h(to)f(o)
o(v)o(ercome)f(problems)i(with)f(the)g(t)o(yping)h(rules)g(in)g(these)f
(languages,)75 2251 y(and)c(allo)o(wing)g(for)g(future)f(extension)i(of)e
(their)h(functionalit)o(y)l(.)21 b(The)15 b(mec)o(hanism)h(for)e(opaque)h(ob)
s(jects)75 2307 y(used)h(here)f(lo)q(osely)i(follo)o(ws)e(the)g(POSIX)h(F)l
(ortran)e(binding)k(standard.)166 2364 y(An)h(opaque)h(ob)s(ject)e(can)i(b)q
(e)f Fj(p)n(ersistent)f Fo(or)h Fj(ephemer)n(al)p Fo(.)32 b(A)19
b(p)q(ersisten)o(t)h(ob)s(ject)e(p)q(ersists)i(un)o(til)75
2421 y(destro)o(y)o(ed)c(b)o(y)h(an)g(explicit)i(op)q(eration.)25
b(An)17 b(ephemeral)h(ob)s(ject)f(is)g(go)q(o)q(d)g(for)f(a)g(single)j(use;)e
(th)o(us)g(an)75 2477 y(ephemeral)c(ob)s(ject)d(asso)q(ciated)i(with)g(a)f
(comm)o(unication)h(op)q(eration)g(disapp)q(ears)g(once)g(this)g(op)q
(eration)75 2534 y(is)g(completed)g(\(or)f(once)g(this)h(ob)s(ject)f(is)h
(not)f(needed)i(an)o(ymore)d(for)h(the)h(completion)g(of)f(the)g(op)q
(eration\).)166 2591 y(Opaque)21 b(ob)s(ject)e(are)h(created)g(b)o(y)g(calls)
h(that)f(are)f(sp)q(eci\014c)j(to)e(eac)o(h)g(ob)s(ject)f(t)o(yp)q(e.)35
b(They)20 b(are)75 2647 y(destro)o(y)o(ede)g(b)o(y)h(a)g(call)g(to)g
Fi(MPI)p 642 2647 15 2 v 16 w(FREE)p Fo(.)f(Additional)j(MPI)d(functions)i
(are)e(a)o(v)m(ailable)j(to)d(access)h(and)75 2704 y(up)q(date)16
b(sp)q(eci\014c)h(opaque)e(ob)s(jects.)964 2828 y(1)p eop
%%Page: 2 3
bop 75 -100 a Fo(2)631 b Fh(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)166 45 y Fg(MPI)p 275 45 16 2 v 18 w(FREE\(handle\))75
187 y(IN)h(handle)24 b Fo(handle)16 b(to)f(ob)s(ject)166 294
y(Mark)e(the)g(handle)i(for)e(destruction.)20 b(The)14 b(ob)s(ject)f(can)h
(destro)o(y)o(ed)f(as)g(so)q(on)g(as)h(there)f(there)h(is)g(no)75
351 y(p)q(ending)k(op)q(eration)e(that)f(is)h(using)h(this)f(ob)s(ject.)22
b(This)16 b(is)g(equiv)m(alen)o(t)i(to)d(c)o(hanging)i(the)e(p)q(ersistence)
75 407 y(of)h(the)h(handle)h(from)e Fi(persistent)f Fo(to)h
Fi(ephemeral)p Fo(.)23 b(F)l(or)16 b(example,)i(if)f(a)f(comm)o(unication)h
(ob)s(ject)f(is)75 463 y(freed,)e(after)e(the)i(comm)o(unication)g(started)f
(but)g(b)q(efore)h(it)g(completed,)g(then)g(the)g(p)q(ending)h(op)q(eration)
75 520 y(is)i(not)e(a\013ected;)h(one)g(can)h(use)f(the)g(handle)i(in)f
(calls)g(to)e Fi(MPI)p 1147 520 15 2 v 17 w(WAIT)g Fo(or)h
Fi(MPI)p 1404 520 V 17 w(STATUS)p Fo(.)f(Ho)o(w)o(ev)o(er,)g(once)75
576 y(the)e(op)q(eration)h(completes,)g(it)g(is)g(erroneous)f(to)g(reuse)g
(the)h(freed)g(handle)g(for)f(a)g(new)h(comm)o(unication.)166
712 y Fm(Discussion:)166 765 y Fl(An)f(alternativ)o(e)f(design)g(p)q(oin)o(t)
g(w)o(as)h(discussed,)h(whereb)o(y)f(it)f(is)h(the)g(user)g(resp)q(onsibilit)
o(y)f(to)h(free)g(a)f(handle)75 815 y(only)e(if)h(there)h(are)g(no)f(p)q
(ending)g(op)q(erations)h(on)f(this)g(handle.)17 b(The)12 b(curren)o(t)g
(design)g(w)o(as)f(deemed)g(more)f(elegan)o(t.)75 865 y(Note)17
b(that)g(it)f(is)h(not)f(necessary)j(to)d(destro)o(y)i(the)f(handle)f(as)h
(so)q(on)g(as)f(it)h(is)f(not)h(needed)h(an)o(ymore.)25 b(A)17
b(v)n(alid)75 915 y(implemen)o(tatio)o(n)11 b(ma)o(y)h(just)i(mark)f(freed)h
(handles)h(and)e(garbage)h(collect)g(them)f(p)q(erio)q(dically)m(.)166
968 y(On)18 b(the)h(other)g(hand,)g(some)e(ob)r(jects,)j(suc)o(h)f(as)f
(bu\013er)i(descriptor)f(ob)r(jects,)h(can)f(b)q(e)f(used)h(b)o(y)f(sev)o
(eral)75 1017 y(distinct)c(concurren)o(t)i(comm)o(unicati)o(on)11
b(op)q(erations.)18 b(Th)o(us,)c(to)g(\014nd)g(out)g(whether)h(suc)o(h)f(ob)r
(ject)h(can)f(b)q(e)h(freed,)75 1067 y(one)e(w)o(ould)f(need)i(a)e(reference)
k(coun)o(t)d(of)f(p)q(ending)h(op)q(erations.)18 b(This)12
b(complication)f(w)o(as)i(not)f(observ)o(ed)i(at)f(our)75 1117
y(last)h(meeting,)e(and)i(ma)o(y)e(b)q(e)i(a)g(go)q(o)q(d)f(argumen)o(t)g(to)
h(reconsider)h(the)g(curren)o(t)g(de\014nition)f(of)f Ff(MPI)p
1635 1117 14 2 v 15 w(FREE)p Fl(.)166 1295 y Fg(MPI)p 275 1295
16 2 v 18 w(ASSOCIA)l(TED\(handle,)18 b(t)o(yp)q(e\))75 1437
y(IN)f(handle)24 b Fo(handle)16 b(to)f(ob)s(ject)75 1544 y
Fg(OUT)j(t)o(yp)q(e)23 b Fo(state)166 1651 y(Returns)17 b(the)g(t)o(yp)q(e)g
(of)f(the)h(ob)s(ject)g(the)g(handle)h(is)f(curren)o(tly)g(asso)q(ciated)g
(with,)h(if)f(suc)o(h)g(exists.)75 1707 y(Returns)d(the)f(sp)q(ecial)i(t)o
(yp)q(e)e Fi(MPI)p 643 1707 15 2 v 17 w(NULL)f Fo(if)i(the)f(handle)h(is)g
(not)f(curren)o(tly)g(asso)q(ciated)h(with)f(an)o(y)g(ob)s(ject.)166
1767 y(MPI)19 b(ma)o(y)g(pro)o(vide)h(prede\014ned)h(opaque)f(ob)s(jects)f
(and)g(prede\014ned,)j(static)d(handles)i(to)e(these)75 1823
y(ob)s(jects.)g(Suc)o(h)d(ob)s(jects)f(ma)o(y)f(not)h(b)q(e)h(destro)o(y)o
(ed.)75 1963 y Fk(1.2.2)55 b(Arra)n(y)19 b(of)g(handles)75
2055 y Fo(An)j(MPI)f(call)i(ma)o(y)e(need)i(a)e(parameter)g(that)g(is)h(an)f
Fj(arr)n(ay)i(of)f(hand)r(les)p Fo(.)39 b(The)22 b(arra)o(y-of-handles)75
2112 y(ob)s(ject)16 b(is)g(not)g(self-delimitin)q(g;)j(it)d(do)q(es)h(not)f
(carry)f(information)i(on)f(the)g(n)o(um)o(b)q(er)g(of)g(en)o(tries)h(in)g
(the)75 2168 y(arra)o(y)l(.)29 b(This)19 b(information)g(has)f(to)g(b)q(e)h
(pro)o(vided)h(b)o(y)e(an)h(additional)h Fi(len)e Fo(parameter,)g(whenev)o
(er)h(a)75 2225 y(list-of-handles)e(parameter)e(is)g(used.)166
2361 y Fm(Discussion:)166 2414 y Fl(The)i(reason)h(for)f(not)g(ha)o(ving)f
(self-delimiting)e(arra)o(ys)k(is)f(that)g(records)h(are)g(not)f
(\014rst-class)h(citizens)g(in)75 2463 y(F)m(ortran)13 b(and)g(that)g(ha)o
(ving)f(an)h(arra)o(y)g(where)h(one)f(en)o(try)h(enco)q(des)h(length,)e
(whereas)h(the)g(other)f(en)o(tries)i(enco)q(de)75 2513 y(handles)j(w)o(as)f
(deemed)g(to)g(b)q(e)h(to)q(o)f(error-prone.)30 b(This)17 b(line)g(of)g
(argumen)o(tation)e(really)i(implies)e(that)j(w)o(e)f(do)75
2563 y(not)e(view)g(arra)o(y-of-handles)g(as)g(an)g(opaque)g(ob)r(ject,)h
(and)f(that)h(w)o(e)f(exp)q(ect)i(the)f(user)g(to)g(build)e(these)j(ob)r
(jects)75 2613 y(explicitly)m(,)12 b(not)i(via)f(MPI)h(calls.)p
eop
%%Page: 3 4
bop 75 -100 a Fh(1.3.)34 b(PR)o(OCESSES)1403 b Fo(3)75 45 y
Fk(1.2.3)55 b(State)75 133 y Fo(MPI)15 b(pro)q(cedures)h(use)g(at)e(v)m
(arious)i(places)g(argumen)o(ts)f(with)g Fj(state)g Fo(t)o(yp)q(es.)20
b(The)c(v)m(alues)g(of)f(suc)o(h)h(data)75 190 y(t)o(yp)q(e)i(are)h(all)g
(iden)o(ti\014ed)h(b)o(y)f(names,)f(and)h(no)f(op)q(eration)h(is)g(de\014ned)
h(on)e(them.)29 b(F)l(or)18 b(example,)i(the)75 246 y Fi(MPI)p
150 246 15 2 v 17 w(APPEND)14 b Fo(routine)i(has)f(a)g(state)f(t)o(yp)q(e)h
(parameter)g(with)g(v)m(alues)i Fi(MPI)p 1343 246 V 16 w(INT,)24
b(MPI)p 1551 246 V 17 w(REAL,)14 b Fo(etc.)75 376 y Fk(1.2.4)55
b(Named)18 b(constan)n(ts)75 464 y Fo(MPI)11 b(pro)q(cedures)h(sometimes)f
(assign)g(a)g(sp)q(ecial)i(meaning)f(to)e(a)h(sp)q(ecial)i(v)m(alue)f(of)f(a)
g(basic)g(t)o(yp)q(e)g(param-)75 520 y(eter;)17 b(e.g.)24 b
Fi(tag)17 b Fo(is)g(an)g(in)o(teger)g(v)m(alued)h(parameter)e(of)g(p)q(oin)o
(t-to-p)q(oin)o(t)i(comm)o(unication)f(op)q(erations,)75 577
y(with)f(a)f(sp)q(ecial)i Fi(DONTCARE)d Fo(v)m(alue.)22 b(Suc)o(h)16
b(parameters)e(will)j(ha)o(v)o(e)e(a)g(range)g(of)g(regular)h(v)m(alues,)g
(whic)o(h)75 633 y(is)h(a)f(prop)q(er)h(subrange)f(of)g(the)h(range)f(of)g(v)
m(alues)h(of)f(the)h(corresp)q(onding)g(basic)g(t)o(yp)q(e;)g(sp)q(ecial)h(v)
m(alues)75 690 y(\(suc)o(h)e(as)g(DONTCARE\))g(will)i(b)q(e)f(outside)g(the)g
(regular)f(range.)23 b(The)16 b(range)g(of)g(regular)g(v)m(alues)i(can)75
746 y(b)q(e)d(queried,)g(and)f(sometimes)g(set,)g(using)h(en)o(vironmen)o(t)f
(inquiry)i(or)e(en)o(vironmen)o(t)g(setting)g(functions)75
803 y(\(Section)i Fg(??)p Fo(\).)166 937 y Fm(Discussion:)166
988 y Fl(Need)f(to)f(agree)g(on)g(a)f(language)g(mec)o(hanism)f(for)h(named)g
(constan)o(ts.)166 1039 y(Implemen)o(ters)h(should)g(detect,)j(whenev)o(er)f
(p)q(ossible,)f(illegal)e(uses)j(of)e(\\sp)q(ecial)h(v)n(alues".)21
b(Th)o(us,)15 b(the)g(use)75 1089 y(of)e(the)i Ff(DONTCARE)d
Fl(v)n(alue)h(to)h(tag)f(a)h(message)g(sen)o(t)g(will)f(b)q(e)h(\015agged)g
(as)g(an)g(error.)75 1301 y Fk(1.2.5)55 b(Choice)75 1389 y
Fo(MPI)16 b(functions)g(sometimes)g(use)g(parameters)f(with)h(a)g
Fj(choic)n(e)f Fo(\(or)g(union\))i(data)e(t)o(yp)q(e.)21 b(I.e.,)16
b(distinct)75 1445 y(calls)i(to)e(the)h(same)f(routine)h(ma)o(y)f(pass)h(b)o
(y)f(reference)i(actual)e(parameters)g(of)g(di\013eren)o(t)h(t)o(yp)q(es.)25
b(The)75 1502 y(mec)o(hanism)16 b(for)e(pro)o(viding)j(suc)o(h)e(parameters)f
(will)j(di\013er)f(from)e(language)i(to)e(language.)166 1636
y Fm(Discussion:)166 1687 y Fl(The)j(F)m(ortran)g(77)g(standard)g(sp)q
(eci\014es)i(that)e(the)h(t)o(yp)q(e)f(of)f(actual)h(argumen)o(ts)f(need)i
(to)f(agree)h(with)e(the)75 1737 y(t)o(yp)q(e)f(of)f(dumm)o(y)d(argumen)o
(ts;)i(no)i(construct)h(equiv)n(alen)o(t)d(to)i(C)f(p)q(oin)o(ters)h(is)f(a)o
(v)n(ailable.)j(Th)o(us,)e(it)f(w)o(ould)f(seem)75 1786 y(that)19
b(there)i(is)e(no)g(standard)h(conforming)d(mec)o(hanism)g(to)i(supp)q(ort)h
(c)o(hoice)f(parameters.)35 b(Ho)o(w)o(ev)o(er,)20 b(most)75
1836 y(F)m(ortran)g(compiler)e(either)j(don't)e(c)o(hec)o(k)i(t)o(yp)q(e)f
(consistency)h(of)e(calls)h(to)f(external)i(routines,)g(or)f(supp)q(ort)g(a)
75 1886 y(sp)q(ecial)d(mec)o(hanism)d(to)j(link)e(foreign)h(\(e.g.,)g(C\))h
(routines.)27 b(I)17 b(suggest)g(that)g(w)o(e)g(accept)g(this)g(nonconformit)
o(y)75 1936 y(with)12 b(F)m(ortran)h(77)f(standard.)19 b(I.e.,)12
b(w)o(e)h(accept)h(that)f(the)g(same)f(routine)h(ma)o(y)e(b)q(e)i(passed)h
(an)f(actual)f(parameter)75 1986 y(of)h(a)h(di\013eren)o(t)h(t)o(yp)q(e)f(at)
g(distinct)g(calls.)166 2037 y(Generic)j(routines)g(can)f(b)q(e)h(used)h(in)d
(F)m(ortran)i(90)e(to)h(pro)o(vide)h(a)f(standard)g(conforming)f(solution.)24
b(This)75 2087 y(solution)13 b(will)f(b)q(e)j(consisten)o(t)g(with)f(our)f
(nonstandard)i(conforming)c(F)m(ortran)j(77)f(solution.)75
2320 y Fn(1.3)70 b(Pro)r(cesses)75 2507 y Fm(Discussion:)15
b Fl(This)f(material)e(b)q(elongs)i(to)g(an)f(in)o(tro)q(duction)h(or)g(en)o
(vironmen)o(t)f(section)166 2647 y Fo(An)i(MPI)f(program)g(is)h(executed)h(b)
o(y)e(sev)o(eral)h(autonomous)f(pro)q(cesses)h(that)e(execute)j(eac)o(h)e
(their)75 2704 y(o)o(wn)19 b(co)q(de,)h(in)g(a)e(MIMD)h(st)o(yle.)31
b(The)19 b(co)q(des)h(executed)g(b)o(y)f(eac)o(h)g(pro)q(cess)g(need)h(not)f
(b)q(e)g(iden)o(tical.)p eop
%%Page: 4 5
bop 75 -100 a Fo(4)631 b Fh(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)75 45 y Fo(The)k(pro)q(cesses)g(comm)o(unicate)g(via)g
(calls)g(to)f(MPI)h(comm)o(unication)g(primitiv)o(es.)35 b(T)o(ypically)l(,)
22 b(eac)o(h)75 102 y(pro)q(cessor)17 b(executes)i(in)f(its)g(o)o(wn)f
(address)g(space,)h(although)g(shared-memory)g(implemen)o(tations)g(of)75
158 y(MPI)12 b(are)g(p)q(ossible.)21 b(This)13 b(do)q(cumen)o(t)f(sp)q
(eci\014es)i(the)f(b)q(eha)o(vior)f(of)g(a)g(parallel)i(program)d(assuming)i
(that)75 214 y(only)h(MPI)g(calls)h(are)e(used)i(for)e(comm)o(unication.)20
b(The)14 b(in)o(teraction)g(of)f(an)h(MPI)g(program)e(with)i(other)75
271 y(p)q(ossible)i(means)e(of)g(comm)o(unication)g(\(e.g.,)f(shared)h
(memory\))g(is)g(not)g(sp)q(eci\014ed.)22 b(In)14 b(particular,)h(it)f(is)75
327 y(assumed)h(that)g(message)g(bu\013ers)g(at)f(distinct)j(pro)q(cessors)e
(are)f(disjoin)o(t.)166 386 y(MPI)d(do)q(es)g(not)g(sp)q(ecify)h(the)f
(execution)h(mo)q(del)g(for)e(eac)o(h)h(pro)q(cess.)19 b(A)11
b(pro)q(cess)g(can)h(b)q(e)f(sequen)o(tial,)75 442 y(or)h(can)g(b)q(e)h(m)o
(ultithreaded,)g(with)g(threads)f(p)q(ossibly)h(executing)h(concurren)o(tly)l
(.)19 b(Care)12 b(has)g(b)q(een)h(tak)o(en)75 499 y(to)i(mak)o(e)f(MPI)h
(\\thread-safe",)f(b)o(y)i(a)o(v)o(oiding)f(the)g(use)h(of)f(implicit)i
(global)f(states.)166 557 y(The)d(initial)h(allo)q(cation)g(of)e(pro)q
(cesses)g(to)g(an)g(MPI)h(computation)f(and)h(their)g(binding)h(to)e(ph)o
(ysical)75 614 y(pro)q(cessors)17 b(is)i(not)e(sp)q(eci\014ed)j(b)o(y)d(the)h
(program)f(itself.)28 b(It)18 b(is)g(exp)q(ected)h(that)e(v)o(endors)g(will)i
(pro)o(vide)75 670 y(mec)o(hanisms)g(to)g(do)f(so)h(either)h(at)e(load)h
(time)g(or)f(at)h(run)g(time.)31 b(Suc)o(h)20 b(mec)o(hanisms)f(will)i(allo)o
(w)e(to)75 727 y(sp)q(ecify)i(the)f(initial)i(n)o(um)o(b)q(er)e(of)f
(required)i(pro)q(cesses,)g(the)f(co)q(de)g(to)f(b)q(e)i(executed)f(b)o(y)g
(eac)o(h)g(initial)75 783 y(pro)q(cess,)j(and)f(the)g(allo)q(cation)g(of)g
(pro)q(cesses)g(to)f(pro)q(cessors.)38 b(Also,)24 b(the)d(curren)o(t)h(prop)q
(osal)g(do)q(es)75 839 y(not)16 b(pro)o(vide)h(for)f(dynamic)h(creation)f(or)
g(deletion)i(of)e(pro)q(cesses)h(during)g(program)e(execution)j(\(total)75
896 y(n)o(um)o(b)q(er)e(of)e(pro)q(cesses)i(is)g(\014xed\),)f(although)g(it)h
(is)g(in)o(tended)g(to)f(b)q(e)h(consisten)o(t)f(with)h(suc)o(h)g(extension.)
75 952 y(Finally)l(,)i(the)e(curren)o(t)g(prop)q(osal)g(do)q(es)g(not)g(sp)q
(ecify)h(a)f(naming)g(sc)o(heme)h(for)e(pro)q(cesses.)23 b(W)l(e)16
b(prop)q(ose)75 1009 y(to)g(alw)o(a)o(ys)g(iden)o(tify)i(pro)q(cesses)f
(according)g(to)f(their)h(relativ)o(e)g(rank)f(in)i(a)e(con)o(text)g
(\(group\),)g(so)g(that,)75 1065 y(e\013ectiv)o(ely)l(,)g(pro)q(cesses)g(are)
e(iden)o(ti\014ed)k(b)o(y)d(consecutiv)o(e)h(in)o(tegers.)75
1198 y Fk(1.3.1)55 b(Error)18 b(Handling)75 1371 y Fm(Discussion:)51
b Fl(Material)18 b(of)f(this)i(section)g(should)f(b)q(e)g(mo)o(v)o(ed)f(to)h
(a)g(general)g(in)o(tro)q(duction)g(section.)32 b(This)75 1427
y(material)12 b(has)i(not)g(y)o(et)g(b)q(een)h(app)q(oriv)o(ed)f(b)o(y)f
(MPIF)166 1568 y Fo(MPI)18 b(pro)o(vides)g(the)h(user)f(with)g(reliable)i
(message)e(transmission:)26 b(A)18 b(message)f(sen)o(t)h(is)h(alw)o(a)o(ys)75
1625 y(receiv)o(ed)f(correctly)l(,)f(and)h(the)f(user)g(do)q(es)g(not)f(need)
i(to)e(c)o(hec)o(k)i(for)e(transmission)h(errors,)f(time-outs,)75
1681 y(or)i(other)g(error)f(conditions.)31 b(In)19 b(other)f(w)o(ords,)g(MPI)
g(do)q(es)h(not)f(pro)o(vide)h(mec)o(hanisms)g(for)f(dealing)75
1738 y(with)i(failures)h(in)g(the)f(comm)o(unication)h(system.)34
b(Where)20 b(the)g(MPI)g(implemen)o(tation)h(is)g(built)g(on)75
1794 y(an)h(unreliable)i(underlying)g(mec)o(hanism,)f(then)g(it)f(is)g(the)g
(job)f(of)h(the)g(implemen)o(ter)h(of)e(the)h(MPI)75 1851 y(subsystem)16
b(to)g(insulate)i(the)e(user)h(from)f(this)h(unreliabilit)o(y)l(,)i(or)d(to)g
(re\015ect)h(unreco)o(v)o(erable)g(errors)e(as)75 1907 y(global)20
b(program)e(failures.)34 b(Similarly)21 b(MPI)f(itself)g(pro)o(vides)g(no)f
(mec)o(hanisms)h(for)f(handling)i(no)q(de)75 1964 y(failures.)166
2022 y(Of)16 b(course,)h(MPI)f(programs)f(ma)o(y)h(still)i(b)q(e)f
(erroneous.)23 b(A)16 b Fg(program)i(error)d Fo(can)i(o)q(ccur)f(when)75
2079 y(an)i(MPI)f(call)i(is)f(called)h(with)f(an)g(incorrect)g(parameter)f
(\(non-existing)h(destination)h(in)f(a)g(send)g(op-)75 2135
y(eration,)i(bu\013er)g(to)q(o)f(small)h(in)h(a)e(receiv)o(e)i(op)q(eration,)
f(etc.\))33 b(This)20 b(t)o(yp)q(e)g(of)f(error)g(w)o(ould)h(o)q(ccur)g(in)75
2191 y(an)o(y)e(implemen)o(tation.)29 b(In)19 b(addition,)g(a)f
Fg(resource)i(error)c Fo(ma)o(y)i(o)q(ccur)g(when)g(a)g(program)f(exceeds)75
2248 y(the)k(amoun)o(t)f(of)g(a)o(v)m(ailable)i(system)f(resources)f(\(n)o
(um)o(b)q(er)h(of)f(p)q(ending)j(messages,)e(system)f(bu\013ers,)75
2304 y(etc.\).)29 b(The)19 b(o)q(ccurrence)g(of)f(this)h(t)o(yp)q(e)g(of)f
(error)f(dep)q(ends)j(on)f(the)f(amoun)o(t)g(of)g(a)o(v)m(ailable)i
(resources)75 2361 y(in)d(the)f(system)g(and)g(the)g(resource)g(allo)q
(cation)h(mec)o(hanism)g(used;)g(this)f(ma)o(y)f(di\013er)i(from)e(system)h
(to)75 2417 y(system.)j(The)13 b(recommended)i(implemen)o(tation)f(pro\014le)
h(pro)o(vides)e(sev)o(eral)h(mec)o(hanisms)g(to)f(alleviate)75
2474 y(the)19 b(p)q(ortabilit)o(y)h(problem)g(this)f(represen)o(ts.)31
b(One)20 b(can)f(also)g(write)g Fg(safe)g Fo(programs,)f(that)h(are)f(not)75
2530 y(sub)s(ject)d(to)g(resource)g(errors.)166 2589 y(All)f(MPI)f(pro)q
(cedure)h(calls)g(return)f(an)g(error)f(parameter)g(that)g(indicates)j
(successful)f(completion)75 2645 y(of)h(the)g(op)q(eration,)g(or)g(the)g
(error)g(condition)h(that)f(o)q(ccurred,)g(otherwise.)166 2704
y(The)21 b(recommended)h(implemen)o(tation)g(pro\014le)g(in)g(a)f(POSIX)h(en)
o(vironmen)o(t)f(is)h(for)e(an)o(y)h(MPI)p eop
%%Page: 5 6
bop 75 -100 a Fh(1.4.)34 b(MESSA)o(GES)1423 b Fo(5)75 45 y(routine)14
b(that)f(encoun)o(ters)h(a)g(reco)o(v)o(erable)f(error)g(to)h(generate)f(an)h
Fj(MPI)g(err)n(or)h(signal)p Fo(,)d(using)j(a)e(sp)q(ecial)75
102 y(signal)20 b(v)m(alue.)31 b(The)19 b(default)h(handler)g(for)e(this)h
(signal)h(terminates)e(the)h(execution)h(of)e(all)i(in)o(v)o(olv)o(ed)75
158 y(pro)q(cesses,)i(with)f(a)f(suitable)i(error)e(message)g(b)q(eing)i
(returned)f(to)f(the)g(user.)37 b(Ho)o(w)o(ev)o(er,)20 b(the)h(user)75
214 y(can)d(pro)o(vide)h(his)g(or)f(her)h(o)o(wn)f(signal)h(handling)h
(routine.)30 b(In)19 b(particular,)g(the)g(user)f(can)h(sp)q(ecify)g(a)75
271 y(\\no)q(op")d(signal)i(handler,)g(th)o(us)f(relegating)g(all)h(error)e
(handling)j(to)d(the)h(user)g(co)q(de,)g(using)h(the)f(error)75
327 y(parameters)d(returned)i(b)o(y)f(the)g(MPI)h(calls.)166
384 y(MPI)d(calls)h(ma)o(y)f(initiate)h(op)q(erations)g(that)e(con)o(tin)o
(ue)i(async)o(hronously)g(after)e(the)i(call)g(returned.)75
440 y(Th)o(us,)22 b(the)g(op)q(eration)f(ma)o(y)g(return)g(with)h(a)f(co)q
(de)h(indicating)h(successful)g(completion,)g(y)o(et)e(later)75
497 y(cause)15 b(an)g(error)g(exception)h(to)e(b)q(e)i(raised.)k(If)15
b(there)g(is)h(a)f(subsequen)o(t)g(call)h(that)f(relates)g(to)f(the)h(same)75
553 y(op)q(eration)f(\(e.g.,)f(a)g(call)i(that)e(v)o(eri\014es)i(that)e(an)h
(async)o(hronous)f(op)q(eration)h(has)g(completed\))h(then)f(the)75
610 y(error)f(parameter)g(asso)q(ciated)h(with)g(this)g(call)h(will)g(b)q(e)g
(used)f(to)f(indicate)i(the)f(nature)g(of)f(the)h(error.)k(In)75
666 y(a)c(few)h(cases,)f(the)g(error)g(ma)o(y)g(o)q(ccur)h(after)f(all)h
(calls)h(that)d(relate)i(to)f(the)h(op)q(eration)f(ha)o(v)o(e)g(completed,)75
723 y(so)g(that)g(no)g(error)g(parameter)g(can)g(b)q(e)i(used)f(to)e
(indicate)k(the)d(nature)g(of)g(the)h(error)f(\(e.g.,)f(an)h(error)g(in)75
779 y(a)e(send)i(with)f(the)g(ready)g(mo)q(de\).)19 b(In)13
b(suc)o(h)g(cases,)g(an)g(error)f(will)i(b)q(e)g(undetected,)g(if)f(the)g
(user)g(disabled)75 835 y(the)i(MPI)g(error)g(signal.)166 968
y Fm(Discussion:)34 b Fl(The)14 b(alternativ)o(e)g(c)o(hoice)g(is)g(to)g(ha)o
(v)o(e)f(fatal)g(and)h(non-fatal)e(signals.)166 1018 y(One)j(migh)o(t)c(w)o
(an)o(t)j(di\013eren)o(t)h(signals)e(for)g(di\013eren)o(t)i(mo)q(dules.)166
1074 y(The)f(details)g(of)f(suc)o(h)i(prop)q(osal)e(need)i(b)q(e)g(elab)q
(orated)f(in)f(an)h(appropriate)g(\\pro\014le")f(sub)q(committee.)75
1299 y Fn(1.4)70 b(Messages)75 1401 y Fo(A)15 b(message)g(consists)g(of)g(an)
g Fj(envelop)n(e)f Fo(and)i Fj(data)p Fo(.)75 1521 y Fk(1.4.1)55
b(Data)75 1607 y Fo(The)19 b(data)f(part)g(of)g(a)h(message)f(consists)h(of)f
(a)h(sequence)g(of)g(v)m(alues,)h(eac)o(h)f(of)f(a)h(basic)g(datat)o(yp)q(e)f
(in)75 1664 y(the)d(host)f(language.)20 b(Th)o(us,)14 b(in)i(F)l(ortran)d
(77,)h(a)h(message)f(consists)h(of)f(a)g(sequence)i(of)e(v)m(alues)i(that)e
(are)75 1720 y(eac)o(h)20 b(of)g(t)o(yp)q(e)h Fi(INTEGER)p
Fo(,)e Fi(REAL)p Fo(,)g Fi(DOUBLE)k(PRECISION)p Fo(,)c Fi(COMPLEX)p
Fo(,)g Fi(DOUBLE)k(PRECISION)f(COMPLEX)p Fo(,)75 1776 y Fi(LOGICAL)p
Fo(,)12 b(or)h(\(length)h(1\))f Fi(CHARACTER)p Fo(.)e(A)j(message)f(ma)o(y)f
(also)i(con)o(tain)f(a)h(v)m(alue)g(of)f(t)o(yp)q(e)h Fi(BYTE)p
Fo(,)e(whic)o(h)75 1833 y(consists)19 b(of)g(8)f(binary)i(digits.)31
b(A)19 b(b)o(yte)g(is)g(di\013eren)o(t)g(from)f(a)h(c)o(haracter.)30
b(Diferen)o(t)19 b(mac)o(hines)h(ma)o(y)75 1889 y(ha)o(v)o(e)e(di\013eren)o
(t)h(represen)o(tations)g(for)f(the)h(same)f(c)o(haracter,)h(or)f(ma)o(y)g
(use)h(more)g(than)f(one)h(b)o(yte)g(to)75 1946 y(reprensen)o(t)j(a)g(c)o
(haracter.)40 b(On)23 b(the)f(other)g(hand,)i(a)d(b)o(yte)h(has)g(the)g(same)
g(binary)h(v)m(alue)g(on)f(an)o(y)75 2002 y(mac)o(hine.)f(A)15
b(message)g(ma)o(y)f(mix)i(v)m(alues)g(of)f(di\013eren)o(t)g(t)o(yp)q(es.)166
2135 y Fm(Missing:)166 2185 y Fl(Need)e(to)f(agree)h(on)e(the)i(C)f(t)o(yp)q
(es)h(\(including)e(handling)g(of)h(signed/unsigned\),)g(and)g(on)g(F)m
(ortran)g(90)f(t)o(yp)q(es)75 2234 y(\(including)i(handling)g(of)g(kinds\).)
75 2438 y Fk(1.4.2)55 b(En)n(v)n(elop)r(e)75 2524 y Fo(The)15
b(follo)o(wing)h(information)g(is)f(asso)q(ciated)h(with)f(eac)o(h)h
(message:)75 2612 y Fg(source)22 b Fo(The)16 b(rank)f(the)g(sending)h(pro)q
(cess)75 2704 y Fg(destination)25 b Fo(The)15 b(rank)g(of)g(the)g(receiving)i
(pro)q(cess)p eop
%%Page: 6 7
bop 75 -100 a Fo(6)631 b Fh(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)75 45 y Fg(tag)24 b Fo(User)15 b(de\014ned)75
154 y Fg(con)o(text)23 b Fo(handle)166 263 y(The)14 b(range)g(of)g(v)m(alid)h
(v)m(alues)h(for)d(the)h Fg(source)g Fo(and)g Fg(destination)i
Fo(\014elds)g(is)e Fi(0)24 b(...)47 b(n-1)p Fo(,)14 b(where)75
320 y Fi(n)g Fo(is)h(the)f(n)o(um)o(b)q(er)h(of)f(pro)q(cesses)g(in)h(the)g
(sp)q(eci\014ed)h(con)o(text.)j Fi(source)k(=)h(destination)13
b Fo(is)h(allo)o(w)o(ed:)20 b(a)75 376 y(pro)q(cess)15 b(can)h(send)g(a)e
(message)h(to)g(itself.)166 437 y(The)h(ranges)f(of)h(v)m(alid)h(v)m(alues)g
(for)e Fi(tag)h Fo(is)g(implemen)o(tation)h(dep)q(enden)o(t,)g(and)f(can)g(b)
q(e)h(found)f(b)o(y)75 493 y(calling)h(a)e(suitable)h(query)g(function,)f(as)
g(describ)q(ed)i(in)f(Section)g Fg(??)p Fo(.)166 553 y(The)f
Fi(tag)g Fo(\014eld)h(can)f(b)q(e)h(arbitrarily)g(set)f(b)o(y)g(the)g
(application,)h(and)g(can)f(b)q(e)h(used)f(to)g(distinguish)75
610 y(di\013eren)o(t)g(messages.)166 670 y Fi(Context)f Fo(should)i(b)q(e)g
(a)f(con)o(text)g(shared)g(b)o(y)g(b)q(oth)g(source)h(and)f(destination.)166
730 y(The)e(actual)h(mec)o(hanism)g(used)f(to)g(asso)q(ciate)g(an)g(en)o(v)o
(elop)q(e)i(with)e(a)g(message)g(is)h(implemen)o(tation)75
787 y(dep)q(enden)o(t;)k(some)e(of)g(the)g(information)g(\(e.g.,)f
Fg(sender)g Fo(or)h Fg(receiv)o(er)p Fo(\))f(ma)o(y)g(b)q(e)i(implicit,)i
(and)d(need)75 843 y(not)f(b)q(e)h(explicitly)i(carried)d(b)o(y)h(a)e
(message.)75 1008 y Fn(1.5)70 b(Comm)n(unication)20 b(Bu\013ers)75
1117 y Fo(The)f(basic)h(p)q(oin)o(t)g(to)e(p)q(oin)o(t)i(comm)o(unication)g
(op)q(erations)f(are)g Fg(send)g Fo(and)g Fg(receiv)o(e)p Fo(.)31
b(A)19 b Fg(send)g Fo(op-)75 1174 y(eration)g(creates)g(a)f(message;)i(the)g
(message)e(data)g(is)i(tak)o(en)f(from)f(the)h Fg(send)i(bu\013er)p
Fo(.)32 b(A)19 b Fg(receiv)o(e)75 1230 y Fo(op)q(eration)i(consumes)h(a)f
(message;)i(the)e(message)g(data)f(is)i(put)f(in)o(to)g(the)g
Fg(receiv)o(e)j(bu\013er)p Fo(.)38 b(The)75 1287 y(sp)q(eci\014cation)17
b(of)e(send)h(or)e(receiv)o(e)i(bu\013ers)g(uses)f(the)g(same)g(syn)o(tax.)
166 1347 y(A)j(bu\013er)g(consists)h(of)e(a)h(sequence)h Fg(bu\013er)i(comp)q
(onen)o(ts)p Fo(.)29 b(Eac)o(h)18 b(comp)q(onen)o(t)g(consists)h(of)e(a)75
1403 y(sequence)h(of)f(\(not)g(necessarily)i(distinct\))f(v)m(ariables)g(of)f
(the)h(same)e(basic)i(datat)o(yp)q(e.)26 b(The)17 b(datat)o(yp)q(e)75
1460 y(of)k(suc)o(h)h(v)m(ariable)h(is)f(sp)q(eci\014ed)i(b)o(y)e(a)f(state)g
(parameter.)39 b(The)21 b(p)q(ossible)j(v)m(alues)f(for)e(F)l(ortran)f(are)75
1516 y Fi(MPI)p 150 1516 15 2 v 17 w(INT)p Fo(,)e Fi(MPI)p
342 1516 V 17 w(REAL)p Fo(,)h Fi(MPI)p 559 1516 V 16 w(DOUBLE)p
Fo(,)g Fi(MPI)p 823 1516 V 16 w(COMPLEX)p Fo(,)g Fi(MPI)p 1111
1516 V 16 w(DCOMPLEX)p Fo(,)f Fi(MPI)p 1422 1516 V 17 w(LOGICAL)p
Fo(,)g(MPI)p 1727 1516 14 2 v 17 w(CHAR)75 1573 y(and)k Fi(MPI)p
245 1573 15 2 v 17 w(BYTE)p Fo(,)f(corrsp)q(onding)i(to)f(datat)o(yp)q(es)g
Fi(INTEGER)p Fo(,)e Fi(REAL)p Fo(,)i Fi(DOUBLE)h(PRECISION)p
Fo(,)d Fi(COMPLEX)p Fo(,)75 1629 y Fi(DOUBLE)j(PRECISION)g(COMPLEX)p
Fo(,)13 b Fi(LOGICAL)p Fo(,)g Fi(CHARACTER)g Fo(and)i(to)f(un)o(t)o(yp)q(ed)h
Fi(BYTE)p Fo(.)f(The)h(p)q(ossible)h(v)m(al-)75 1686 y(ues)10
b(for)g(C)g(are)g Fi(MPI)p 402 1686 V 17 w(CHAR)p Fo(,)f Fi(MPI)p
609 1686 V 16 w(SHORT)p Fo(,)h Fi(MPI)p 840 1686 V 16 w(INT)p
Fo(,)g Fi(MPI)p 1023 1686 V 16 w(LONG)p Fo(,)g Fi(MPI)p 1230
1686 V 16 w(FLOAT)p Fo(,)f Fi(MPI)p 1460 1686 V 17 w(DOUBLE)g
Fo(and)i Fi(MPI)p 1786 1686 V 17 w(BYTE)p Fo(.)166 1822 y Fm(Discussion:)166
1876 y Fl(Ma)o(y)17 b(need)i(to)f(tak)o(e)g(care)h(of)e(kinds)h(in)g(F)m
(ortran)f(90)h(and)g(of)f(signed/unsigned)h(in)g(C.)f(More)i(elab)q(orate)75
1926 y(de\014nitions)14 b(b)q(elong)f(to)h(the)h(language)e(binding.)166
2069 y Fo(There)i(are)g(\014v)o(e)h(kinds)g(of)f(bu\013er)g(comp)q(onen)o
(ts:)75 2210 y Fg(Con)o(tiguous)46 b Fo(A)15 b(sequence)h(of)f(con)o(tiguous)
g(v)m(alues)i(of)e(the)g(same)g(basic)h(t)o(yp)q(e,)e(sp)q(eci\014ed)k(b)o(y)
75 2320 y Fg(start)23 b Fo(Initial)17 b(elemen)o(t)75 2429
y Fg(len)23 b Fo(Num)o(b)q(er)16 b(of)f(elemen)o(ts)h(\()p
Fi(len)11 b Fe(\025)i Fi(0)p Fo(\))75 2538 y Fg(datat)o(yp)q(e)24
b Fo(T)o(yp)q(e)15 b(of)g(elemen)o(ts)166 2647 y(Th)o(us,)e(if)h
Fi(A)e Fo(is)i(an)f(arra)o(y)f(of)h(in)o(tegers,)g(then)g Fi(A\(1\),)24
b(4,)f(MPI)p 1210 2647 V 17 w(INT)13 b Fo(is)g(the)g(bu\013er)g(comp)q(onen)o
(t)h(with)75 2704 y(en)o(tries)i Fi(A\(1\),)23 b(A\(2\),)g(A\(3\),)g(A\(4\))p
Fo(.)p eop
%%Page: 7 8
bop 75 -100 a Fh(1.5.)34 b(COMMUNICA)l(TION)16 b(BUFFERS)1023
b Fo(7)75 45 y Fg(V)l(ector)45 b Fo(A)19 b(sequence)h(of)f(equally)h(spaced)g
(and)f(equally)i(sized)f(blo)q(c)o(ks)g(of)f(elemen)o(ts)g(of)g(the)g(same)75
102 y(basic)d(t)o(yp)q(e,)f(sp)q(eci\014ed)i(b)o(y)75 196 y
Fg(start)23 b Fo(Initial)17 b(elemen)o(t)75 291 y Fg(len)23
b Fo(Num)o(b)q(er)16 b(of)f(elemen)o(ts)h(\()p Fi(len)11 b
Fe(\025)i Fi(0)p Fo(\))75 386 y Fg(stride)23 b Fo(Num)o(b)q(er)15
b(of)g(elemen)o(ts)h(b)q(et)o(w)o(een)f(the)h(start)e(of)g(eac)o(h)i(blo)q(c)
o(k)75 481 y Fg(len)o(blk)23 b Fo(Num)o(b)q(er)16 b(of)e(elemen)o(ts)i(in)g
(eac)o(h)g(blo)q(c)o(k)f(\()p Fi(lenblk)d Fd(>)h Fi(0)p Fo(\))75
576 y Fg(datat)o(yp)q(e)24 b Fo(T)o(yp)q(e)15 b(of)g(elemen)o(ts)166
671 y(Assume)c(that)f(an)h(elemen)o(t)h(of)e(t)o(yp)q(e)h Fi(datatype)f
Fo(o)q(ccupies)i Fi(m)f Fo(b)o(ytes.)18 b(Then,)12 b(in)g(a)e(b)o(yte)h
(addressable)75 727 y(mac)o(hine,)k(the)g(bu\013er)g(comp)q(onen)o(t)g
(describ)q(ed)i(b)o(y)e(these)g(\014v)o(e)g(parameters)f(consists)h(of)f(the)
h Fi(len)f Fo(v)m(ari-)75 783 y(ables)i(at)e(addresses)i Fi(start,)23
b(start+m,)g(...)47 b(,)24 b(start+m*\(lenblk-1\),)d(start+m*stride,)75
840 y(start+m*\(stride+1\),)g(...,)j(start+m*\(stride+lenblk-)o(1\),)d(...)p
Fo(.)h(F)l(or)16 b(example,)h(if)f Fi(A)g Fo(is)h(an)75 896
y(arra)o(y)d(of)h(in)o(tegers,)g(then)143 991 y Fe(\017)23
b Fi(A\(1\),)g(5,)g(3,)h(2,)g(MPI)p 622 991 15 2 v 16 w(INT)17
b Fo(is)g(the)g(bu\013er)g(comp)q(onen)o(t)g(with)g(en)o(tries)g
Fi(A\(1\),)24 b(A\(2\),)f(A\(4\),)189 1048 y(A\(5\),)g(A\(7\))p
Fo(.)143 1142 y Fe(\017)g Fi(A\(1\),)g(5,)g(0,)h(2,)g(MPI)p
622 1142 V 16 w(INT)17 b Fo(is)g(the)g(bu\013er)g(comp)q(onen)o(t)g(with)g
(en)o(tries)g Fi(A\(1\),)24 b(A\(2\),)f(A\(1\),)189 1199 y(A\(2\),)g(A\(1\))p
Fo(.)143 1294 y Fe(\017)g Fi(A\(10\),)g(5,)g(-1,)h(2,)f(MPI)p
669 1294 V 17 w(INT)g Fo(is)h(the)g(bu\013er)g(comp)q(onen)o(t)g(with)g(en)o
(tries)g Fi(A\(10\),)f(A\(11\),)189 1350 y(A\(9\),)g(A\(10\),)g(A\(8\))p
Fo(.)166 1445 y Fi(Contiguous)18 b Fo(is)h(a)g(sp)q(ecial)i(case)e(of)g
Fi(vector)p Fo(.)30 b(A)19 b(v)o(ector)g(bu\013er)g(comp)q(onen)o(t)g(can)g
(b)q(e)h(used)g(to)75 1502 y(extract)14 b(an)i(arbitrary)e(submatrix)h(of)g
(a)g(t)o(w)o(o-dimensional)h(matrix.)75 1623 y Fg(Indexed)45
b Fo(A)15 b(sequence)i(of)d(elemen)o(ts)i(of)f(the)g(same)g(basic)h(t)o(yp)q
(e,)f(sp)q(eci\014ed)i(b)o(y)75 1718 y Fg(start)23 b Fo(initial)17
b(elemen)o(t)75 1813 y Fg(len)23 b Fo(Num)o(b)q(er)16 b(of)f(elemen)o(ts)h
(\()p Fi(len)11 b Fe(\025)i Fi(0)p Fo(\))75 1908 y Fg(arra)o(y)p
199 1908 16 2 v 18 w(of)p 259 1908 V 19 w(indices)23 b Fo(Arra)o(y)11
b(of)g(displacemen)o(ts)i(of)e(the)h(elemen)o(ts)g(in)g(the)g(bu\013er)f
(comp)q(onen)o(ts,)h(relativ)o(e)189 1964 y(to)i(the)h(initial)j(elemen)o(t.)
75 2059 y Fg(datat)o(yp)q(e)24 b Fo(T)o(yp)q(e)15 b(of)g(elemen)o(ts)166
2154 y(F)l(or)20 b(example,)i(if)f Fi(A)f Fo(is)h(an)g(arra)o(y)e(of)h(in)o
(tegers,)h(and)g Fi(I)f Fo(is)h(an)g(arra)o(y)e(with)i(v)m(alues)g
Fi(2,)j(-1,)f(2,)75 2210 y(1)c Fo(then)h Fi(A\(3\),)j(4,)h(I,)f(MPI)p
587 2210 15 2 v 17 w(INT)c Fo(is)h(the)f(bu\013er)h(comp)q(on)o(ten)o(t)f
(with)h(en)o(tries)f Fi(A\(5\),)24 b(A\(2\),)f(A\(5\),)75 2267
y(A\(4\))p Fo(.)166 2323 y Fi(Vector)14 b Fo(is)i(a)f(sp)q(ecial)i(case)e(of)
g Fi(indexed)p Fo(.)75 2445 y Fg(Heterogeneous)25 b(V)l(ector)g(\(h)o(v)o
(ector\))45 b Fo(Same)22 b(as)g Fi(vector)p Fo(,)h(except)g(that)e
Fi(stride)h Fo(is)g(giv)o(en)h(in)75 2501 y(m)o(ultiple)17
b(of)e(b)o(ytes,)f(rather)h(than)g(m)o(ultiples)i(of)e(elemen)o(ts:)75
2609 y Fg(start)23 b Fo(Initial)17 b(elemen)o(t)75 2704 y Fg(len)23
b Fo(Num)o(b)q(er)16 b(of)f(elemen)o(ts)h(\()p Fi(len)11 b
Fe(\025)i Fi(0)p Fo(\))p eop
%%Page: 8 9
bop 75 -100 a Fo(8)631 b Fh(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)75 45 y Fg(stride)23 b Fo(Num)o(b)q(er)15
b(of)g(b)o(ytes)g(b)q(et)o(w)o(een)h(the)f(start)f(of)h(eac)o(h)g(blo)q(c)o
(k)75 138 y Fg(len)o(blk)23 b Fo(Num)o(b)q(er)16 b(of)e(elemen)o(ts)i(in)g
(eac)o(h)g(blo)q(c)o(k)f(\()p Fi(lenblk)d Fd(>)h Fi(0)p Fo(\))75
231 y Fg(datat)o(yp)q(e)24 b Fo(T)o(yp)q(e)15 b(of)g(elemen)o(ts)166
334 y(Assume)h(that)f(an)h(elemen)o(t)g(of)f(t)o(yp)q(e)h Fi(datatype)f
Fo(o)q(ccupies)i Fi(m)f Fo(b)o(ytes.)21 b(Then,)16 b(in)h(a)e(b)o(yte)h
(address-)75 390 y(able)g(mac)o(hine,)g(the)g(bu\013er)f(comp)q(onen)o(t)h
(describ)q(ed)i(b)o(y)d(these)h(\014v)o(e)f(parameters)g(consists)h(of)f(the)
g Fi(len)75 447 y Fo(v)m(ariables)23 b(at)e(addresses)h Fi(start,)h(start+m,)
f(...)48 b(,)24 b(start+m*\(lenblk-1\),)d(start+stride,)75
503 y(start+stride+m,)h(...,)h(start+stride+m*\(lenblk-1\),)d(...)p
Fo(.)166 559 y(Consider)c(a)f(C)g(arra)o(y)e(declared)k(as)75
662 y Fi(struct)23 b({)147 719 y(char)g(info[3];)147 775 y(short)g(number;)
147 832 y(double)g(val;)242 888 y(})71 b(a[100])166 991 y Fo(Assume)11
b(that)f(all)i(structure)e(comp)q(onen)o(ts)h(are)f(b)o(yte)h(aligned,)i(a)d
Fi(short)g Fo(o)q(ccupies)i(t)o(w)o(o)e(b)o(ytes,)h(and)75
1047 y(a)h Fi(double)g Fo(o)q(ccupies)i(eigh)o(t)e(b)o(ytes.)19
b(Then)13 b(the)f(bu\013er)h(comp)q(onen)o(t)f Fi(&a,)24 b(100,)f(13,)g(2,)h
(MPI)p 1694 1047 15 2 v 17 w(CHAR)12 b Fo(ex-)75 1104 y(tracts)f(the)h
(\014rst)g(t)o(w)o(o)f(c)o(haracters)g(of)h(eac)o(h)g(structure.)19
b(The)12 b(bu\013er)g(comp)q(onen)o(t)g Fi(&\(a.number\),)23
b(100,)75 1160 y(13,)g(1,)h(MPI)p 317 1160 V 17 w(SHORT)19
b Fo(extracts)f(the)i Fi(short)f Fo(\014eld)h(of)f(eac)o(h)h(structure;)h
(and)f(the)f(bu\013er)h(comp)q(onen)o(t)75 1217 y Fi(&\(a.val\),)j(100,)g
(13,)g(1)18 b Fo(extracts)e(the)i Fi(double)f Fo(\014eld)i(of)e(eac)o(h)g
(structure.)27 b(Th)o(us,)18 b(heterogeneous)75 1273 y(v)o(ectors)c(can)i(b)q
(e)g(used)f(to)g(extract)f(v)o(ectors)h(of)g(homogeneous)g(v)m(alues)h(from)e
(heterogenous)i(data.)166 1330 y Fi(Vector)e Fo(is)i(a)f(sp)q(ecial)i(case)e
(of)g Fi(heterogenous)22 b(vector)p Fo(.)75 1449 y Fg(Heterogeneous)d
(indexed)g(\(hindexed\))46 b Fo(Same)16 b(as)g(indexed,)j(except)e(that)e
(displacemen)o(ts)j(are)75 1506 y(in)e(b)o(ytes,)f(rather)f(than)h(m)o
(ultiples)i(of)e(elemen)o(t)h(size.)75 1609 y Fg(start)23 b
Fo(initial)17 b(elemen)o(t)75 1701 y Fg(len)23 b Fo(Num)o(b)q(er)16
b(of)f(elemen)o(ts)h(\()p Fi(len)11 b Fe(\025)i Fi(0)p Fo(\))75
1794 y Fg(arra)o(y)p 199 1794 16 2 v 18 w(of)p 259 1794 V 19
w(indices)23 b Fo(Arra)o(y)17 b(of)g(b)o(yte)h(displacemen)o(ts)h(of)e(the)h
(elemen)o(ts)g(in)h(the)f(bu\013er)f(comp)q(onen)o(ts,)189
1851 y(relativ)o(e)e(to)g(the)g(initial)j(elemen)o(t.)75 1944
y Fg(datat)o(yp)q(e)24 b Fo(T)o(yp)q(e)15 b(of)g(elemen)o(ts)166
2046 y(F)l(or)21 b(example,)k(if)d Fi(a)g Fo(is)h(the)f(C)g(arra)o(y)e(of)i
(the)g(previous)h(example,)h(and)e Fi(I)g Fo(is)h(an)f(arra)o(y)f(with)75
2103 y(v)m(alues)14 b Fi(0,)24 b(13,)f(13,)h(27,)f(26)13 b
Fo(then)h Fi(&a,)23 b(5,)h(I,)f(MPI)p 1042 2103 15 2 v 17 w(CHAR)13
b Fo(is)g(the)h(bu\013er)f(comp)q(onen)o(t)g(with)h(en)o(tries)75
2159 y Fi(a[0].info[0],)22 b(a[1].info[0],)g(a[1].info[0],)g(a[1].info[1],)g
(a[1].info[0])p Fo(.)166 2216 y(Lik)o(e)d Fi(heterogenous)j(vector)p
Fo(,)17 b Fi(heterogenous)22 b(indexed)17 b Fo(extends)i(the)f
Fi(indexed)e Fo(facilit)o(y)j(so)75 2272 y(as)c(to)f(allo)o(w)i(the)f
(extraction)g(of)g(homogeneous)g(data)f(from)h(a)g(heterogenous)g(la)o(y)o
(out.)166 2405 y Fm(Discussion:)166 2455 y Fl(The)10 b(use)g(of)f
(displacemen)o(ts)g(in)g(indexed)h(bu\013er)h(comp)q(onen)o(ts)e(has)h(the)g
(same)f(e\013ect)i(as)e(indirect)h(addressing)75 2504 y(in)o(to)j(an)g(arra)o
(y)h(with)f(initial)e(index)j(zero.)19 b(I.e.,)12 b(if)h Ff(a)h
Fl(is)f(an)g(arra)o(y)h(with)f(initial)f(index)h(zero,)h(then)g(a)g(bu\013er)
g(com-)75 2554 y(p)q(onen)o(t)j(de\014ned)h(b)o(y)e(parameters)g
Ff(a[0],)21 b(N,)h(i,)f(type)16 b Fl(extract)h(the)g(elemen)o(ts)g
Ff(a[i[0]],)j(a[i[1]],)g(...,)75 2604 y(a[i[n]])p Fl(.)25 b(This)16
b(\014ts)h(w)o(ell)f(C)h(usage)g(but)f(ill-\014ts)g(F)m(ortran)g(usage)h
(\(initial)e(index)i(one\).)26 b(W)m(e)16 b(to)q(ok)g(a)h(decision)75
2654 y(of)d(principle)h(to)f(force)h(\\start)g(from)e(zero")i(index)g
(arithmetic)e(on)i(F)m(ortran)f(users,)i(rather)f(than)g(ha)o(v)o(e)g
(diferen)o(t)75 2704 y(index)f(arithmetic)f(in)g(the)i(C)e(and)h(F)m(ortran)g
(binding)f(of)g(MPI.)p eop
%%Page: 9 10
bop 75 -100 a Fh(1.5.)34 b(COMMUNICA)l(TION)16 b(BUFFERS)1023
b Fo(9)166 45 y Fl(The)15 b(use)h(of)e(b)q(oth)h(bu\013er)h(comp)q(onen)o(ts)
f(with)g(b)o(yte)g(and)g(elemen)o(t)f(size)i(displacemen)o(ts)e(is)h(motiv)n
(ated)e(b)o(y)75 95 y(the)j(observ)n(ation)f(that)g(some)g(applications)f
(require)i(the)g(more)f(general)g(b)o(yte)h(displacemen)o(t,)e(but)i(that)f
(most)75 145 y(applications)d(w)o(ould)h(use)i(elemen)o(t)e(size)h
(displacemen)o(t,)e(whic)o(h)i(is)f(m)o(uc)o(h)f(more)h(natural)g(and)g(con)o
(v)o(enien)o(t)h(\(and)75 195 y(mac)o(hine)i(indep)q(enden)o(t\).)29
b(Th)o(us,)18 b(rather)g(than)f(forcing)f(all)g(users)j(to)e(do)f(b)o(yte)i
(arithemetic,)f(w)o(e)g(decided)h(to)75 244 y(pro)o(vide)c(separately)g(the)h
(more)e(adv)n(anced)h(function)f(to)h(\\exp)q(ert)h(programmers".)166
384 y Fo(A)g(bu\013er)h(is)g(describ)q(ed)h(b)o(y)e(an)h(opaque)f(ob)s(ject)g
(accessed)h(via)g(a)f Fg(bu\013er)j(handle)p Fo(.)j(Suc)o(h)c(ob)s(ject)75
440 y(is)k(created)g(b)o(y)f Fi(MPI)p 434 440 15 2 v 17 w(CREATE)p
595 440 V 16 w(BUFFER)p Fo(.)f(It)i(is)g(asso)q(ciated)g(with)f(successiv)o
(e)i(bu\013er)e(comp)q(onen)o(ts)h(b)o(y)75 497 y(calling)c(in)g(succession)f
(one)g(of)f(the)g(functions)i Fi(MPI)p 974 497 V 16 w(APPEND)p
1134 497 V 17 w(xxx)p Fo(,)d(where)i Fi(xxx)f Fo(iden)o(ti\014es)i(the)f(t)o
(yp)q(e)f(of)75 553 y(bu\013er)i(comp)q(onen)o(t)h(app)q(ended)h(to)d(the)i
(bu\013er.)26 b(It)18 b(b)q(ecomes)g(a)o(v)m(ailable)h(for)d(use)i(in)g(comm)
o(unication)75 610 y(op)q(erations)h(once)h(committed)f(b)o(y)g(the)g
(function)h Fi(MPI)p 1045 610 V 17 w(COMMIT)p Fo(.)d(A)i(bu\013er)g
(descriptor)h(is)f(destro)o(y)o(ed)75 666 y(after)13 b(the)h(completion)h(of)
f(the)g(\014rst)f(comm)o(unication)i(op)q(eration)f(that)f(uses)h(it,)h(if)f
(it)g(is)h(ephemeral,)f(or)75 723 y(after)h(it)g(is)h(freed)g(b)o(y)f(a)g
(call)i(to)d Fi(MPI)p 702 723 V 17 w(FREE)h Fo(and)g(an)o(y)g(p)q(ending)i
(comm)o(unication)f(op)q(eration)g(that)f(uses)75 779 y(it)i(has)f
(completed,)h(if)g(it)f(is)h(p)q(ersisten)o(t.)24 b(After)16
b(the)g(bu\013er)h(descriptor)f(ob)s(ject)g(has)g(b)q(een)i(destro)o(y)o(ed,)
75 836 y(the)d(handle)i(is)e(unde\014ned.)166 928 y Fg(MPI)p
275 928 16 2 v 18 w(CREA)l(TE)p 510 928 V 19 w(BUFFER\()j(bu\013er,)f(p)q
(ersistence)h(\))166 1020 y Fo(Create)d(a)f(new)i(bu\013er)f(descriptor)h(ob)
s(ject.)j(The)c(parameters)g(are:)75 1116 y Fg(OUT)j(bu\013er)23
b Fo(bu\013er)15 b(handle)75 1212 y Fg(IN)i(p)q(ersistence)23
b Fo(bu\013er)g(p)q(ersistence)h(\(state)e(t)o(yp)q(e)h(with)g(p)q(ossible)h
(v)m(alues)g Fi(MPI)p 1559 1212 15 2 v 17 w(PERSISTENT)d Fo(or)189
1269 y Fi(MPI)p 264 1269 V 16 w(EPHEMERAL)p Fo(\).)166 1441
y Fm(Discussion:)166 1491 y Fl(Ma)o(y)d(w)o(an)o(t)g(to)h(pro)o(vide)f
(information)e(on)i(maxim)n(um)c(ob)r(ject)20 b(size,)g(and)e(p)q(erhaps)i
(user)g(space)f(for)f(the)75 1541 y(ob)r(ject.)166 1716 y Fg(MPI)p
275 1716 16 2 v 18 w(APPEND)p 520 1716 V 18 w(CONTIGUOUS\()h(bu\013er,)e
(start,)g(len,)g(datat)o(yp)q(e\))166 1808 y Fo(App)q(end)g(a)e(blo)q(c)o(k)g
(comp)q(onen)o(t)h(to)e(bu\013er.)20 b(The)c(parameters)e(are:)75
1904 y Fg(INOUT)k(bu\013er)23 b Fo(bu\013er)15 b(handle)75
2000 y Fg(IN)i(start)23 b Fo(bu\013er)15 b(comp)q(onen)o(t)h(initial)h
(elemen)o(t)f(\(c)o(hoice\))75 2096 y Fg(IN)h(len)23 b Fo(Num)o(b)q(er)16
b(of)f(elemen)o(ts)h(\(in)o(teger\))75 2192 y Fg(IN)h(datat)o(yp)q(e)24
b Fo(datat)o(yp)q(e)15 b(iden)o(ti\014er)h(\(status\))166 2323
y Fg(MPI)p 275 2323 V 18 w(APPEND)p 520 2323 V 18 w(VEC\()h(bu\013er,)g(len,)
h(stride,)f(len)o(blk,)g(datat)o(yp)q(e)i(\))166 2416 y Fo(App)q(end)e(a)e(v)
o(ector)f(bu\013er)h(comp)q(onen)o(t)g(to)g(bu\013er.)20 b(The)15
b(parameters)g(are:)75 2512 y Fg(INOUT)j(bu\013er)23 b Fo(bu\013er)15
b(handle)75 2608 y Fg(IN)i(start)23 b Fo(bu\013er)15 b(comp)q(onen)o(t)h
(initial)h(elemen)o(t)f(\(c)o(hoice\))75 2704 y Fg(IN)h(len)23
b Fo(Num)o(b)q(er)16 b(of)f(elemen)o(ts)h(\(in)o(teger\))p
eop
%%Page: 10 11
bop 75 -100 a Fo(10)608 b Fh(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 45 y Fg(IN)h(stride)23 b
Fo(Num)o(b)q(er)16 b(of)e(elemen)o(ts)i(b)q(et)o(w)o(een)g(the)f(start)f(of)h
(eac)o(h)g(blo)q(c)o(k)h(\(in)o(teger\))75 136 y Fg(IN)h(len)o(blk)23
b Fo(Num)o(b)q(er)16 b(of)e(elemen)o(ts)i(in)g(eac)o(h)g(blo)q(c)o(k)g(\(in)o
(teger\))75 228 y Fg(IN)h(datat)o(yp)q(e)24 b Fo(datat)o(yp)q(e)15
b(iden)o(ti\014er)h(\(status\))166 350 y Fg(MPI)p 275 350 16
2 v 18 w(APPEND)p 520 350 V 18 w(INDEXED\()i(bu\013er,)f(start,)g(len,)h
(arra)o(y)p 1352 350 V 17 w(of)p 1411 350 V 19 w(indices,)g(datat)o(yp)q(e\))
166 442 y Fo(App)q(end)f(an)e(indexed)i(bu\013er)e(comp)q(onen)o(t)g(to)g
(bu\013er.)20 b(The)15 b(parameters)f(are:)75 530 y Fg(INOUT)k(bu\013er)23
b Fo(bu\013er)15 b(handle)75 621 y Fg(IN)i(start)23 b Fo(initial)17
b(p)q(osition)g(for)d(indexing)j(\(c)o(hoice\))75 712 y Fg(IN)g(len)23
b Fo(Num)o(b)q(er)16 b(of)f(elemen)o(ts)h(\(in)o(teger\))75
803 y Fg(IN)h(arra)o(y)p 277 803 V 18 w(of)p 337 803 V 19 w(indices)24
b Fo(arra)o(y)14 b(of)g(displacemen)o(ts)j(of)e(en)o(tries)g(relativ)o(e)h
(to)f(start)f(\(arra)o(y)f(of)i(in)o(tegers\))75 894 y Fg(IN)i(datat)o(yp)q
(e)24 b Fo(datat)o(yp)q(e)15 b(iden)o(ti\014er)h(\(status\))166
1017 y Fg(MPI)p 275 1017 V 18 w(APPEND)p 520 1017 V 18 w(HVEC\()h(bu\013er,)g
(len,)h(stride,)f(len)o(blk,)g(datat)o(yp)q(e)h(\))166 1109
y Fo(App)q(end)f(a)e(heterogenous)g(v)o(ector)f(bu\013er)h(comp)q(onen)o(t)h
(to)e(bu\013er.)20 b(The)15 b(parameters)g(are:)75 1196 y Fg(INOUT)j
(bu\013er)23 b Fo(bu\013er)15 b(handle)75 1288 y Fg(IN)i(start)23
b Fo(bu\013er)15 b(comp)q(onen)o(t)h(initial)h(elemen)o(t)f(\(c)o(hoice\))75
1379 y Fg(IN)h(len)23 b Fo(Num)o(b)q(er)16 b(of)f(elemen)o(ts)h(\(in)o
(teger\))75 1470 y Fg(IN)h(stride)23 b Fo(Num)o(b)q(er)16 b(of)e(b)o(ytes)h
(b)q(et)o(w)o(een)h(the)f(start)f(of)h(eac)o(h)g(blo)q(c)o(k)h(\(in)o
(teger\))75 1561 y Fg(IN)h(len)o(blk)23 b Fo(Num)o(b)q(er)16
b(of)e(elemen)o(ts)i(in)g(eac)o(h)g(blo)q(c)o(k)g(\(in)o(teger\))75
1653 y Fg(IN)h(datat)o(yp)q(e)24 b Fo(datat)o(yp)q(e)15 b(iden)o(ti\014er)h
(\(status\))166 1775 y Fg(MPI)p 275 1775 V 18 w(APPEND)p 520
1775 V 18 w(HINDEXED\()h(bu\013er,)g(start,)g(len,)g(arra)o(y)p
1391 1775 V 18 w(of)p 1451 1775 V 19 w(indices,)h(datat)o(yp)q(e\))166
1924 y Fo(App)q(end)f(an)e(heterogenous)g(indexed)i(bu\013er)e(comp)q(onen)o
(t)g(to)g(bu\013er.)20 b(The)15 b(parameters)f(are:)75 2011
y Fg(INOUT)k(bu\013er)23 b Fo(bu\013er)15 b(handle)75 2102
y Fg(IN)i(start)23 b Fo(initial)17 b(p)q(osition)g(for)d(indexing)j(\(c)o
(hoice\))75 2194 y Fg(IN)g(len)23 b Fo(Num)o(b)q(er)16 b(of)f(elemen)o(ts)h
(\(in)o(teger\))75 2285 y Fg(arra)o(y)p 199 2285 V 18 w(of)p
259 2285 V 19 w(indices)23 b Fo(arra)o(y)12 b(of)h(b)o(yte)g(displacemen)o
(ts)i(of)e(en)o(tries)g(relativ)o(e)h(to)f(start)f(\(arra)o(y)f(of)i(in)o
(tegers\))75 2376 y Fg(IN)k(datat)o(yp)q(e)24 b Fo(datat)o(yp)q(e)15
b(iden)o(ti\014er)h(\(status\))166 2499 y Fg(MPI)p 275 2499
V 18 w(COMMIT)p 526 2499 V 18 w(BUFFER\()j(bu\013erin)f(\))166
2591 y Fo(Commit)h(a)g(bu\013er)g(descriptor)h(ob)s(ject.)31
b(The)19 b(ob)s(ject)g(cannot)g(b)q(e)h(c)o(hanged)g(an)o(ymore)e(after)h(it)
75 2647 y(is)h(committed.)31 b(A)19 b(bu\013er)g(descriptor)g(ob)s(ject)g
(can)g(b)q(e)h(used)f(for)g(comm)o(unication)g(only)h(after)e(it)h(is)75
2704 y(committed.)h(The)15 b(parameters)g(are:)p eop
%%Page: 11 12
bop 75 -100 a Fh(1.5.)34 b(COMMUNICA)l(TION)16 b(BUFFERS)1001
b Fo(11)75 45 y Fg(INOUT)18 b(bu\013er)23 b Fo(bu\013er)15
b(descriptor)h(handle)166 216 y Fm(Discussion:)166 267 y Fl(The)j(commit)d
(function)j(ma)o(y)e(do)h(prepro)q(cessing)j(of)d(the)i(bu\013er)g
(descriptor)g(to)f(simplify)d(its)i(use)i(and)75 316 y(commit)12
b(resources)17 b(in)d(the)i(comm)o(uni)o(cation)c(subsystem)j(for)f(its)h
(use.)21 b(The)16 b(commit)11 b(function)k(ma)o(y)e(generate)75
366 y(a)h(new)g(ob)r(ject)h(and,)e(hence,)i(mo)q(dify)c(the)k(ob)r(ject)f
(handle.)166 506 y Fo(Consider,)h(for)g(example,)h(the)f(follo)o(wing)h
(fragmen)o(t)e(of)h(F)l(ortran)f(co)q(de)75 614 y Fi(DOUBLE)23
b(PRECISION)g(A\(10,20\))75 671 y(INTEGER)g(B,)g(C\(5,10\))75
727 y(INTEGER)g(BH)75 784 y(...)75 840 y(CALL)g(MPI_CREATE_BUFFER\(BH,)e
(MPI_PERSISTENT\))75 897 y(CALL)i(MPI_APPEND_BLOCK)f(\(BH,)h(B,)h(1,)f
(MPI_INT\))75 953 y(CALL)g(MPI_APPEND_VEC)f(\(BH,)i(A\(1,3\),)e(11,)i(4,)g
(2,)f(MPI_DOUBLE\))75 1009 y(CALL)g(MPI_APPEND_INDEX\(BH,)e(C\(3,7\),)i
(\(4,2,1\),)g(MPI_INT\))166 1118 y Fo(Then)16 b(the)f(bu\013er)g(asso)q
(ciated)g(with)h(the)f(handle)i Fi(BH)e Fo(consists)g(of)g(the)g(sequence)h
(of)f(v)m(ariables)166 1174 y Fi(B,)23 b(A\(1,3\),)g(A\(2,3\),)g(A\(5,3\),)g
(A\(6,3\),)g(A\(9,3\),)g(A\(10,3\),)g(A\(3,4\),)g(A\(4,4\),)g(A\(7,4\),)75
1231 y(A\(8,4\),)g(A\(1,5\),)g(C\(2,8\),)g(C\(5,7\),)g(C\(4,7\))p
Fo(.)166 1288 y(A)17 b(message)g(created)g(from)f(this)i(bu\013er)f(will)i
(consist)e(of)g(a)g(sequence)h(of)f(one)g(in)o(teger,)h(follo)o(w)o(ed)75
1344 y(b)o(y)d(elev)o(en)h(double)h(precision)g(reals,)e(follo)o(w)o(ed)g(b)o
(y)g(three)h(in)o(tegers.)166 1401 y(A)h(bu\013er)g(handle)h(can)f(b)q(e)h
(used)g(for)e(comm)o(unication,)i(ev)o(en)f(if)g(it)h(is)f(not)g(asso)q
(ciated)g(with)g(an)o(y)75 1457 y(v)m(ariables)i(\(i.e.,)f(ev)o(en)g(if)g(it)
g(w)o(as)f(not)g(set)g(b)o(y)h(an)o(y)f Fi(MPI)p 1046 1457
15 2 v 17 w(ADD)p 1135 1457 V 17 w(xxx)g Fo(call\).)28 b(Suc)o(h)19
b(handle)g(is)f(asso)q(ciated)75 1514 y(with)e(an)f(empt)o(y)g(bu\013er,)f
(and)i(a)f(message)f(created)i(from)e(it)h(con)o(tains)h(no)f(data.)166
1571 y(The)d(same)g(en)o(try)g(ma)o(y)g(app)q(ears)g(more)g(than)g(once)g(in)
h(a)f(bu\013er)h(comp)q(onen)o(t,)f(and)h(distinct)g(bu\013er)75
1627 y(comp)q(onen)o(ts)j(ma)o(y)f(o)o(v)o(erlap.)23 b(If)16
b(a)g(bu\013er)g(descriptor)g(with)h(replicated)g(en)o(tries)g(is)f(used)h
(to)e(receiv)o(e)i(a)75 1684 y(message,)12 b(then)h(the)g(\014nal)g(v)m(alue)
h(of)e(an)g(en)o(try)g(that)g(o)q(ccurs)h(more)f(than)g(once)h(in)g(the)g
(bu\013er)g(descriptor)75 1740 y(is)j(unde\014ned.)166 1873
y Fm(Discussion:)166 1923 y Fl(It)g(is)g(not)g(clear)h(to)e(me)h(that)g(o)o
(v)o(erlaps)g(ha)o(v)o(e)f(an)o(y)h(useful)g(purp)q(ose,)i(and)d(they)i(ma)o
(y)d(complicate)h(imple-)75 1973 y(men)o(tation.)h(But)f(w)o(e)f(had)g(an)f
(o)o(v)o(erwhelming)f(v)o(ote)i(in)f(fa)o(v)o(or)g(of)h(this)g(feature.)75
2179 y Fk(1.5.1)55 b(T)n(yp)r(e)18 b(Matc)n(hing)i(and)f(Data)g(Con)n(v)n
(ersion)75 2266 y Fo(One)d(can)f(think)h(of)f(message)g(transmission)g(as)g
(consisting)h(of)f(three)g(phases:)131 2361 y(1.)22 b(Data)14
b(is)h(pulled)j(out)d(of)f(the)i(send)f(bu\013er)h(and)f(a)g(message)g(is)g
(assem)o(bled)131 2457 y(2.)22 b(A)15 b(message)g(is)g(transfered)g(from)g
(sender)g(to)g(receiv)o(er)131 2552 y(3.)22 b(Data)14 b(is)h(pulled)j(from)c
(the)h(incoming)i(message)e(and)g(disassem)o(bled)i(in)o(to)e(the)g(receiv)o
(e)h(bu\013er)166 2647 y(T)o(yp)q(e)k(matc)o(hing)f(has)h(to)e(b)q(e)j
(observ)o(ed)e(at)g(eac)o(h)g(of)h(these)f(three)h(phases:)29
b(The)19 b(t)o(yp)q(e)h(of)f(eac)o(h)75 2704 y(v)m(ariable)d(in)f(the)f
(sender)h(bu\013er)f(has)g(to)f(matc)o(h)h(the)g(t)o(yp)q(e)h(of)e(the)i
(corresp)q(onding)g(en)o(try)f(in)h(the)f(bu\013er)p eop
%%Page: 12 13
bop 75 -100 a Fo(12)608 b Fh(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 45 y Fo(descriptor;)d(the)g(t)o(yp)q(e)f
(of)g(an)g(en)o(try)g(in)h(the)g(bu\013er)f(descriptor)h(used)f(to)g(send)h
(a)f(message)g(has)g(to)g(matc)o(h)75 102 y(the)19 b(t)o(yp)q(e)f(of)g(the)h
(corresp)q(onding)g(en)o(try)f(in)h(the)g(bu\013er)f(descriptor)h(used)g(to)f
(receiv)o(e)h(the)g(message;)75 158 y(and)g(the)f(t)o(yp)q(e)g(of)g(eac)o(h)h
(v)m(ariable)h(in)f(the)f(receiv)o(e)h(bu\013er)g(has)f(to)g(matc)o(h)g(the)g
(corresp)q(onding)h(en)o(try)75 214 y(in)d(the)g(bu\013er)f(descriptor)h(for)
f(this)h(bu\013er.)21 b(A)15 b(program)g(that)g(fails)h(to)f(observ)o(e)g
(these)h(three)f(rules)h(is)75 271 y(erroneous.)166 328 y(T)l(o)f(de\014ne)i
(more)e(precisely)i(t)o(yp)q(e)f(matc)o(hing,)f(w)o(e)g(need)h(to)f(deal)i
(with)e(t)o(w)o(o)g(issues:)21 b(matc)o(hing)15 b(of)75 385
y(t)o(yp)q(es)h(of)g(the)h(host)f(language)g(with)h(bu\013er)g(descriptor)f
(t)o(yp)q(es;)h(and)g(matc)o(hing)f(of)g(bu\013er)h(descriptor)75
441 y(t)o(yp)q(es)e(at)f(sender)h(and)f(receiv)o(er.)21 b(W)l(e)14
b(restrict)h(ourselv)o(es)g(to)f(the)g(case)h(where)g(sending)h(and)e
(receiving)75 498 y(program)g(are)h(written)g(in)h(the)f(same)g(language.)166
555 y(The)e(t)o(yp)q(e)g(of)f(an)h(en)o(try)f(in)h(the)g(sender)g(bu\013er)g
(descriptor)g(matc)o(hes)g(the)f(t)o(yp)q(e)h(of)f(an)h(en)o(try)f(in)i(the)
75 612 y(receiv)o(er)f(bu\013er)g(descriptor)g(is)h(they)e(ha)o(v)o(e)h(iden)
o(tical)h(names:)19 b Fi(MPI)p 1234 612 15 2 v 17 w(INT)12
b Fo(matc)o(hes)g Fi(MPI)p 1580 612 V 17 w(INT)p Fo(,)g Fi(MPI)p
1766 612 V 17 w(REAL)75 668 y Fo(matc)o(hes)j Fi(MPI)p 326
668 V 17 w(REAL)p Fo(,)f(and)h(so)g(on.)166 725 y(The)k(t)o(yp)q(e)h(of)f(a)g
(v)m(ariable)i(in)f(a)f(host)g(program)f(matc)o(hes)h(the)g(t)o(yp)q(e)h(of)e
(the)i(en)o(try)f(in)h(a)f(bu\013er)75 782 y(descriptor)e(if)f(the)h(name)f
(of)g(the)g(bu\013er)h(descriptor)f(en)o(try)g(t)o(yp)q(e)h(corresp)q(onds)f
(to)g(the)g(basic)h(t)o(yp)q(e)f(of)75 838 y(the)i(host)f(program)f(en)o
(try:)24 b(an)17 b(en)o(try)g(with)h(t)o(yp)q(e)g(name)f Fi(MPI)p
1177 838 V 17 w(INT)g Fo(matc)o(hes)g(a)g(F)l(ortran)g(v)m(ariable)h(of)75
895 y(t)o(yp)q(e)c Fi(INTEGER)p Fo(,)f(an)h(en)o(try)f(with)i(t)o(yp)q(e)f
(name)g Fi(MPI)p 948 895 V 16 w(REAL)g Fo(matc)o(hes)f(a)h(F)l(ortran)f(v)m
(ariable)i(of)f(t)o(yp)q(e)g Fi(REAL)p Fo(,)75 951 y(and)g(so)g(on.)20
b(There)14 b(is)h(one)f(exception)h(to)f(this)h(last)f(rule:)20
b(An)15 b(en)o(try)e(with)i(t)o(yp)q(e)f(name)g Fi(MPI)p 1683
951 V 17 w(BYTE)g Fo(can)75 1008 y(b)q(e)j(used)g(to)f(matc)o(h)g(an)o(y)g(b)
o(yte)g(of)g(storage)f(\(on)i(a)f(b)o(yte-addressable)h(mac)o(hine\),)g
(irresp)q(ectiv)o(e)h(of)e(the)75 1064 y(datat)o(yp)q(e)d(of)h(the)g(v)m
(ariable)h(that)e(con)o(tains)h(this)g(b)o(yte.)19 b(The)c(v)m(alue)g(of)e
(the)h(message)f(en)o(try)h(will)h(b)q(e)g(the)75 1121 y(binary)h(v)m(alue)g
(of)f(the)g(corresp)q(onding)h(b)o(yte)f(in)h(memory)l(.)166
1178 y(These)g(t)o(yp)q(e)g(matc)o(hing)g(rules)h(imply)g(that)f(no)g(t)o(yp)
q(e)g(con)o(v)o(ersion)g(o)q(ccur)g(during)h(the)f(MPI)g(com-)75
1235 y(m)o(unication.)21 b(If)15 b(a)f(v)m(alue)i(transfered)e(in)i(a)e
(message)g(is)h(t)o(yp)q(ed)g(\(i.e.)20 b(of)14 b(a)h(t)o(yp)q(e)f
(di\013eren)o(t)h(from)f Fi(BYTE)p Fo(\),)75 1291 y(then)g(the)g(t)o(yp)q(e)g
(of)g(the)g(v)m(ariable)h(the)f(v)m(alue)h(is)f(read)g(from,)f(the)h(t)o(yp)q
(e)g(of)g(the)g(v)m(alue)h(transferred)e(in)i(the)75 1347 y(message,)i(and)h
(the)f(t)o(yp)q(e)g(of)g(the)h(v)m(ariable)g(where)g(the)f(v)m(alue)i(is)f
(stored)f(at)f(the)i(receiv)o(er)g(all)g(matc)o(h,)75 1404
y(and)h(matc)o(h)e(the)i(t)o(yp)q(es)f(of)g(the)h(corresp)q(onding)g(en)o
(tries)g(in)g(the)g(bu\013er)f(descriptors)h(at)f(sender)h(and)75
1460 y(receiv)o(er.)h(The)13 b(v)m(alue)g(stored)g(at)f(the)g(receiv)o(er)i
(will)g(b)q(e)f(the)g(v)m(alue)h(loaded)f(from)f(the)h(sender.)19
b(If)13 b(sender)75 1517 y(and)h(receiv)o(er)g(run)g(in)h(an)f(iden)o(tical)h
(en)o(vironmen)o(t)f(\(same)f(no)q(de)i(arc)o(hitecture,)f(same)f(compiler,)i
(etc.\),)75 1573 y(then)i(the)f(binary)h(represen)o(tation)f(of)g(the)h(data)
e(stored)h(at)g(the)g(receiv)o(er)h(is)g(iden)o(tical)h(to)e(the)g(binary)75
1630 y(represen)o(tation)g(of)g(the)h(data)e(loaded)i(from)f(the)g(sender.)24
b(Ho)o(w)o(ev)o(er,)15 b(if)i(sender)g(and)f(receiv)o(er)h(ha)o(v)o(e)f(a)75
1686 y(di\013eren)o(t)j(en)o(vironmen)o(t,)h(then)f(the)g(binary)g(represen)o
(tation)g(of)f(the)h(v)m(alue)h(sen)o(t)e(will)j(b)q(e)e(con)o(v)o(erted)75
1743 y(to)g(the)h(binary)g(represen)o(tation)g(of)g(that)f(same)g(v)m(alue)i
(in)g(the)f(receiv)o(er)g(en)o(vironmen)o(t.)34 b(Th)o(us,)21
b(if)f(a)75 1799 y(F)l(ortran)c(real)h(v)m(alue)h(is)f(transferred)g(\(from)f
(a)g(v)m(ariable)j(of)d(t)o(yp)q(e)h Fi(REAL)f Fo(to)h(a)f(v)m(ariable)i(of)f
(t)o(yp)q(e)g Fi(REAL)p Fo(,)75 1856 y(using)g(bu\013er)f(descriptor)h(en)o
(tries)g(with)f(t)o(yp)q(e)h(state)e Fi(MPI)p 1082 1856 V 17
w(REAL)g Fo(at)h(sender)h(and)f(receiv)o(er\))h(from)f(a)g(64)75
1912 y(bit)g(mac)o(hine)g(to)e(a)h(32)f(bit)i(mac)o(hine,)g(then)f(the)g
(binary)h(represen)o(tation)f(of)g(the)g(\015oating)g(p)q(oin)o(t)h(v)m(alue)
75 1968 y(sen)o(t)i(will)i(b)q(e)e(con)o(v)o(erted)g(from)f(64)h(bits)g(to)g
(32)f(bits.)29 b(Suc)o(h)19 b(con)o(v)o(ersions)f(ma)o(y)f(in)o(tro)q(duce)i
(rounding)75 2025 y(error)14 b(and)i(cause)f(o)o(v)o(er\015o)o(ws)f(or)h
(under\015o)o(w)g(conditions.)166 2082 y(If)j(a)f(v)m(alue)h(sen)o(t)g(in)g
(a)f(message)g(is)h(un)o(t)o(yp)q(ed)g(\(i.e.,)f(of)g(t)o(yp)q(e)h
Fi(BYTE)p Fo(\),)e(then)i(it)g(m)o(ust)f(b)q(e)h(declared)75
2139 y(so)h(in)g(the)g(bu\013er)g(descriptor)h(of)e(b)q(oth)h(sender)h(and)f
(receiv)o(er.)32 b(A)19 b(b)o(yte)g(is)g(mo)o(v)o(ed)g(from)f(sender)i(to)75
2195 y(receiv)o(er;)k(the)e(binary)f(represen)o(tation)h(of)e(the)i(b)o(yte)e
(stored)h(at)g(the)g(receiv)o(er)h(is)f(iden)o(tical)i(to)e(the)75
2252 y(binary)14 b(represen)o(tation)f(of)f(the)h(b)o(yte)g(loaded)h(at)e
(the)h(sender.)20 b(This)13 b(holds)h(true,)f(whether)g(sender)h(and)75
2308 y(receiv)o(er)i(run)f(in)h(the)g(same)f(or)f(in)i(distinct)h(en)o
(vironmen)o(ts.)166 2366 y(Consider)f(the)f(follo)o(wing)h(examples.)75
2478 y Fi(!)48 b(FIRST)23 b(EXAMPLE)75 2534 y(INTEGER)g(A\(100\))75
2591 y(...)75 2647 y(CALL)g(MPI_CREATE_BUFFER\(BH,)e(MPI_PERSISTENT\))75
2704 y(CALL)i(MPI_ADD_CONTIGUOUS)f(\(BH,)h(A\(1\),)g(1,)h(MPI_CHAR\))p
eop
%%Page: 13 14
bop 75 -100 a Fh(1.5.)34 b(COMMUNICA)l(TION)16 b(BUFFERS)1001
b Fo(13)166 45 y(This)16 b(program)f(is)i(erroneous,)e(since)j(the)e(t)o(yp)q
(e)g(of)f(the)h(bu\013er)g(descriptor)h(do)q(es)f(not)f(matc)o(h)h(the)75
102 y(t)o(yp)q(e)f(of)g(the)g(v)m(ariable)h(in)g(the)f(bu\013er.)20
b(The)15 b(b)q(eha)o(vior)h(or)e(this)i(program)e(is)h(unde\014ned.)22
b(A)15 b(desireable)75 158 y(b)q(eha)o(vior)e(is)h(for)e(that)g(error)g(to)h
(b)q(e)g(detected)h(\(at)e(compile)i(time)f(or)g(run)g(time\))g(and)g(result)
g(in)h(an)f(error)75 214 y(condition.)75 320 y Fi(!)48 b(SECOND)23
b(EXAMPLE)75 376 y(INTEGER)g(A\(100\))75 433 y(...)75 489 y(CALL)g
(MPI_CREATE_BUFFER\(BH,)e(MPI_PERSISTENT\))75 546 y(CALL)i
(MPI_ADD_CONTIGUOUS)f(\(BH,)h(A\(1\),)g(1,)h(MPI_BYTE\))166
651 y Fo(This)16 b(program)f(is)h(correct.)k(The)c(b)o(yte)g(that)e(will)k(b)
q(e)e(transmitted)f(in)i(a)e(message)g(created)h(with)75 708
y(this)i(bu\013er)g(descriptor)g(is)g(the)g(\014rst)g(b)o(yte)f(in)i(the)e
(storage)g(o)q(ccupied)j(b)o(y)d Fi(A\(1\))p Fo(.)27 b(The)18
b(v)m(alue)h(of)f(this)75 764 y(b)o(yte)d(is)h(implemen)o(tation)h(dep)q
(enden)o(t,)f(and)g(will)h(v)m(ary)e(according)h(to)f(the)g(n)o(um)o(b)q(er)h
(of)f(b)o(ytes)g(used)h(to)75 821 y(store)e(F)l(ortran)h(v)m(ariables)h(of)f
(t)o(yp)q(e)g Fi(INTEGER)f Fo(and)i(the)f(b)o(yte)g(ordering)g(on)h(the)f
(host)g(mac)o(hine.)75 926 y Fi(!)48 b(THIRD)23 b(EXAMPLE)75
983 y(INTEGER)g(A\(100\))75 1039 y(...)75 1096 y(CALL)g
(MPI_CREATE_BUFFER\(BH1,)e(MPI_PERSISTENT\))75 1152 y(CALL)i
(MPI_ADD_CONTIGUOUS)f(\(BH1,)h(A\(1\),)g(1,)h(MPI_INTEGER\))75
1208 y(...)75 1265 y(CALL)f(MPI_CREATE_BUFFER\(BH2,)e(MPI_PERSISTENT\))75
1321 y(CALL)i(MPI_ADD_CONTIGUOUS)f(\(BH2,)h(A\(1\),)g(4,)h(MPI_BYTE\))166
1427 y Fo(Consider)16 b(the)f(follo)o(wing)h(three)f(cases:)131
1520 y(1.)22 b(A)d(message)g(is)h(sen)o(t)f(using)h(bu\013er)f(descriptor)h
(handle)h Fi(BH1)e Fo(and)g(receiv)o(ed)i(using)f(bu\013er)f(de-)189
1577 y(scriptor)e(handle)h Fi(BH2)p Fo(.)25 b(The)18 b(program)e(is)h
(erroneous,)h(since)g(the)f(sender)h(and)f(receiv)o(er)h(bu\013er)189
1633 y(descriptors)g(don't)g(matc)o(h.)28 b(The)19 b(b)q(eha)o(vior)f(of)g
(the)h(program)e(is)h(unde\014ned,)j(and)d(a)g(p)q(ossible)189
1690 y(\(desireable)e(but)g(unlik)o(ely\))h(b)q(eha)o(vior)e(is)h(for)f(an)g
(error)f(condition)j(to)d(o)q(ccur.)131 1783 y(2.)22 b(Both)17
b(sender)h(and)g(receiv)o(er)g(use)g(bu\013er)g(descriptor)g(handle)h
Fi(BH1)p Fo(.)26 b(The)18 b(program)f(is)h(correct,)189 1840
y(and)h(an)f(in)o(teger)h(v)m(alue)h(is)f(transmitted)g(from)f(sender)h(to)f
(receiv)o(er.)31 b(The)19 b(v)m(alue)h(assigned)g(to)189 1896
y Fi(A\(1\))e Fo(at)g(the)g(receiv)o(er)i(is)f(iden)o(tical)h(to)e(the)h(v)m
(alue)h(of)e Fi(A\(1\))g Fo(at)g(the)g(sender,)i(but)f(the)f(binary)189
1953 y(represen)o(tation)g(of)g(this)g(v)m(alue)i(ma)o(y)d(b)q(e)i
(di\013eren)o(t,)g(if)f(sender)h(and)f(receiv)o(er)h(run)g(in)g(di\013eren)o
(t)189 2009 y(en)o(vironmen)o(ts.)131 2103 y(3.)j(Both)17 b(sender)h(and)g
(receiv)o(er)g(use)g(bu\013er)g(descriptor)g(handle)h Fi(BH2)p
Fo(.)26 b(The)18 b(program)f(is)h(correct.)189 2159 y(Assume)13
b(that)f(b)q(oth)h(sender)h(and)f(receiv)o(er)h(use)f(four)g(b)o(ytes)f(to)h
(store)f(in)o(tegers.)19 b(Then)14 b(the)f(v)m(alue)189 2215
y(stored)h(in)i Fi(A\(1\))e Fo(at)h(the)g(receiv)o(er)h(has)e(the)i(same)e
(binary)i(represen)o(tation)f(as)g(the)g(v)m(alue)h(of)e Fi(A\(1)189
2272 y Fo(at)i(the)i(sender.)26 b(If)18 b(the)f(same)g(b)o(yte)g(ordering)h
(and)g(the)f(same)g(enco)q(ding)i(of)e(in)o(teger)g(v)m(alues)h(is)189
2328 y(used)d(at)g(b)q(oth)g(ends)h(then)f Fi(A\(1\))f Fo(at)h(the)g(receiv)o
(er)h(is)f(set)g(to)g(the)g(v)m(alue)h(of)f Fi(A\(1\))f Fo(at)h(the)g
(sender;)189 2385 y(otherwise)g(the)g(same)g(32)g(bits)g(ma)o(y)g(enco)q(de)h
(di\013eren)o(t)g(v)m(alues.)166 2554 y Fm(Implemen)o(tati)o(on)c(note:)166
2604 y Fl(The)i(curren)o(t)h(de\014nition)e(do)q(es)h(not)g(require)g
(messages)g(to)f(carry)i(t)o(yp)q(e)f(information.)h(A)e(message)h(can)f(b)q
(e)75 2654 y(comp)q(osed)h(and)h(sen)o(t)h(using)e(only)g(the)h(information)d
(in)i(the)i(sender)g(bu\013er)g(descriptor,)g(and)e(can)h(b)q(e)h(receiv)o
(ed)75 2704 y(and)c(stored)h(using)f(only)g(the)h(information)c(in)j(the)h
(receiv)o(er)h(bu\013er)f(descriptor.)19 b(If)11 b(messages)i(are)f(sen)o(t)i
(b)q(et)o(w)o(een)p eop
%%Page: 14 15
bop 75 -100 a Fo(14)608 b Fh(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 45 y Fl(di\013eren)o(t)e(mac)o(hines)f
(then)g(one)h(can)f(either)h(use)g(a)f(\\univ)o(ersal")g(data)g(enco)q(ding)g
(for)g(messages,)g(use)h(kno)o(wledge)75 95 y(of)g(the)i(receiv)o(er)h(en)o
(vironmen)o(t)d(in)g(order)i(to)f(con)o(v)o(ert)h(data)e(at)h(the)h(sender,)h
(or)e(use)g(kno)o(wledge)g(of)g(the)g(sender)75 145 y(en)o(vironmen)o(t)f(in)
g(order)i(to)f(con)o(v)o(ert)g(data)g(at)g(the)g(receiv)o(er.)23
b(In)15 b(either)h(case)g(the)f(lo)q(cal)g(bu\013er)g(descriptor)i(can)75
195 y(b)q(e)e(used)g(to)f(deriv)o(e)h(the)g(t)o(yp)q(es)g(of)f(the)g(v)n
(alues)g(transferred.)21 b(Ho)o(w)o(ev)o(er,)15 b(additional)d(t)o(yp)q(e)j
(information)c(carried)75 244 y(b)o(y)j(messages)g(can)g(pro)o(vide)f(b)q
(etter)j(error)f(detection.)166 295 y(There)i(is)e(no)h(agreemen)o(t)f(y)o
(et)h(on)g(the)g(need)h(for)e(a)g(de\014nition)h(and,)f(if)g(needed,)i(on)f
(the)g(righ)o(t)f(de\014nition)75 344 y(of)j(t)o(yp)q(e)i(matc)o(hing)d(and)i
(con)o(v)o(ersion)g(b)q(et)o(w)o(een)i(programs)d(written)h(in)g(di\013eren)o
(t)h(languages.)33 b(The)19 b(natural)75 394 y(in)o(terpretation)f(of)g
(\\send)h(from)d(C)i(and)g(receiv)o(e)h(in)e(F)m(ortran")h(is)g(either)h
(\\send)g(from)d(C,)h(receiv)o(e)j(in)d(C)h(and)75 444 y(con)o(v)o(ert)11
b(to)g(F)m(ortran",)f(or)h(\\con)o(v)o(ert)g(to)f(F)m(ortran,)h(send)h(from)c
(F)m(ortran)j(and)f(receiv)o(e)i(in)f(F)m(ortran".)16 b(Ho)o(w)o(ev)o(er,)11
b(the)75 494 y(corresp)q(ondence)j(b)q(et)o(w)o(een)e(F)m(ortran)e(t)o(yp)q
(es)i(and)e(C)h(t)o(yp)q(es)g(is)g(implemen)o(tatio)o(n)d(dep)q(enden)o(t.)19
b(Th)o(us,)11 b(the)g(diagram)75 544 y(sho)o(wn)k(b)q(elo)o(w)f(is)h(not)f
(comm)o(utativ)o(e,)e(and)j(the)g(t)o(w)o(o)f(in)o(terpretations)i(of)e(C)g
(to)h(F)m(ortran)g(comm)o(unicati)o(on)d(ma)o(y)75 593 y(lead)i(to)f
(di\013eren)o(t)i(results.)251 633 y(mac)o(hine)d(1)300 b(mac)o(hine)13
b(2)544 683 y(send)244 732 y(C)h(program)121 b Fc(!)i Fl(C)14
b(program)332 832 y Fc(#)463 b(#)544 882 y Fl(send)191 932
y(F)m(ortran)14 b(program)67 b Fc(!)j Fl(F)m(ortran)13 b(program)166
980 y(A)19 b(go)q(o)q(d)f(solution)g(w)o(ould)f(mak)o(e)g(this)i(diagram)d
(comm)o(utativ)o(e.)29 b(Otherwise,)21 b(one)e(needs)h(to)e(pic)o(k)h(one)75
1030 y(of)c(the)i(t)o(w)o(o)e(paths)h(as)g(the)h(canonical)e(de\014nition)g
(of)h(in)o(terlanguage)f(comm)o(unicatio)o(n.)21 b(If)16 b(the)g(upp)q(er)h
(path)f(is)75 1080 y(c)o(hosen,)d(the)f(receiv)o(er)h(of)e(a)h(message)f
(needs)i(to)f(kno)o(w)f(the)h(language)f(the)h(message)g(w)o(as)f(sen)o(t)i
(from;)d(if)h(the)h(lo)o(w)o(er)75 1129 y(path)k(is)h(c)o(hosen,)g(the)g
(sender)h(needs)g(to)e(kno)o(w)g(the)g(language)g(the)h(message)f(is)g
(receiv)o(ed)i(in)o(to.)24 b(Rather)17 b(than)75 1179 y(struggling)c(with)h
(these)i(issues)g(it)e(migh)o(t)e(b)q(e)j(simpler)e(to)h(let)g(the)h(b)q(eha)
o(vior)f(of)g(C)g(to)g(F)m(ortran)g(comm)o(unication)75 1229
y(b)q(e)19 b(unde\014ned.)31 b(The)19 b(user)g(can)f(alw)o(a)o(ys)f(matc)o(h)
g(language)g(at)h(sending)h(and)e(receiving)i(end)f(if)g(he)g(or)g(she)h(is)
75 1279 y(willing)12 b(to)h(struggle)i(with)e(the)i(issue)f(of)g(calling)e
(MPI)i(C)g(functions)g(from)e(F)m(ortran)i(or)g(vice-v)o(ersa.)75
1507 y Fn(1.6)70 b(Receiv)n(e)20 b(Criteria)75 1609 y Fo(The)14
b(selection)h(of)e(a)g(message)g(b)o(y)g(a)h(receiv)o(e)g(op)q(eration)g(is)g
(done)g(uniquely)h(according)f(to)f(the)h(v)m(alue)g(of)75
1665 y(the)e(message)g(en)o(v)o(elop)q(e.)20 b(The)13 b(receiv)o(e)g(op)q
(eration)f(sp)q(eci\014es)j(an)d Fg(en)o(v)o(elop)q(e)i(pattern)p
Fo(;)f(a)f(message)g(can)75 1722 y(b)q(e)17 b(receiv)o(ed)g(b)o(y)e(that)h
(receiv)o(e)g(op)q(eration)g(only)h(if)f(its)g(en)o(v)o(elop)q(e)h(matc)o
(hes)f(that)f(pattern.)21 b(A)16 b(pattern)75 1778 y(sp)q(eci\014es)e(v)m
(alues)f(for)e(the)h Fi(source)p Fo(,)f Fi(tag)g Fo(and)h Fi(context)f
Fo(\014elds)i(of)f(the)g(message)f(en)o(v)o(elop)q(e.)20 b(In)12
b(addition,)75 1835 y(the)17 b(v)m(alue)h(for)f(the)g Fi(dest)g
Fo(\014eld)h(is)f(set,)g(implicitl)q(y)l(,)j(to)c(b)q(e)i(equal)g(to)e(the)h
(receiving)i(pro)q(cess)e(id.)27 b(The)75 1891 y(receiv)o(er)13
b(ma)o(y)e(sp)q(ecify)i(a)f Fi(DONTCARE)e Fo(v)m(alue)j(for)f
Fi(source)p Fo(,)f(or)g Fi(tag)p Fo(,)h(indicating)i(that)d(an)o(y)h(source)g
(and/or)75 1948 y(tag)k(are)h(acceptable.)26 b(It)17 b(cannot)g(sp)q(ecify)h
(a)f(DONTCARE)g(v)m(alue)h(for)e Fi(context)g Fo(or)h Fi(dest)p
Fo(.)24 b(Th)o(us,)17 b(a)75 2004 y(message)d(can)h(b)q(e)h(receiv)o(ed)f(b)o
(y)g(a)f(receiv)o(e)i(op)q(eration)f(only)g(if)g(it)g(is)h(addressed)f(to)f
(the)h(receiving)h(task,)75 2061 y(has)h(a)g(matc)o(hing)g(con)o(text,)g(has)
g(matc)o(hing)g(source)g(unless)i(source=DONTCARE)f(in)g(the)f(pattern,)75
2117 y(and)g(has)f(a)g(matc)o(hing)g(tag)g(unless)h(tag=DONTCARE)f(in)h(the)g
(pattern.)22 b(DONTCARE)17 b(v)m(alues)h(for)75 2174 y(source)d(or)f(tag)f
(are)h(sp)q(eci\014ed)j(via)e(a)f(named)h(constan)o(t)f(for)f(source)i(don)o
(tcare)f(and)h(a)f(named)h(constan)o(t)75 2230 y(for)g(tag)f(don)o(tcare.)166
2287 y(The)21 b(length)g(of)f(the)h(receiv)o(ed)h(message)e(m)o(ust)h(b)q(e)g
(less)g(or)f(equal)i(the)f(length)g(of)f(the)h(receiv)o(e)75
2343 y(bu\013er.)31 b(I.e.,)19 b(all)g(incoming)h(data)e(m)o(ust)h(\014t,)g
(without)f(truncation,)i(in)o(to)f(the)f(receiv)o(e)i(bu\013er.)31
b(It)18 b(is)75 2400 y(erroneous)e(to)f(receiv)o(e)h(a)g(message)f(whic)o(h)i
(length)f(exceed)h(the)f(receiv)o(e)h(bu\013er,)e(and)h(the)g(outcome)f(of)75
2456 y(program)f(where)i(this)f(o)q(ccurs)h(is)f(undetermined.)75
2601 y Fn(1.7)70 b(Comm)n(unication)20 b(Mo)r(de)75 2704 y
Fo(A)15 b(send)h(op)q(eration)f(can)h(o)q(ccur)f(in)h(one)g(of)f(three)g(mo)q
(des:)p eop
%%Page: 15 16
bop 75 -100 a Fh(1.8.)34 b(COMMUNICA)l(TION)16 b(OBJECTS)1004
b Fo(15)75 45 y Fg(ST)l(AND)o(ARD)22 b Fo(The)15 b(send)h(ma)o(y)e(start)g
(whether)i(or)e(not)h(a)g(matc)o(hing)g(receiv)o(e)h(has)f(b)q(een)i(p)q
(osted.)75 140 y Fg(READ)o(Y)22 b Fo(The)15 b(send)h(ma)o(y)f(start)f(only)h
(if)h(a)f(matc)o(hing)g(receiv)o(e)h(has)f(b)q(een)i(p)q(osted.)75
236 y Fg(SECURE)24 b Fo(The)19 b(send)h(op)q(eration)f(will)i(not)e(complete)
h(successfully)h(un)o(til)g(it)e(is)h(guaran)o(teed)f(that)189
292 y(the)c(message)g(sen)o(t)g(will)h(b)q(e)g(receiv)o(ed.)166
387 y(A)i Fg(ready)j(send)d Fo(can)h(start)e(only)i(if)g(a)f(matc)o(hing)h
(receiv)o(e)g(is)g(already)g(p)q(osted;)h(otherwise)f(the)75
444 y(op)q(eration)g(is)g(erroneous)g(and)g(its)g(outcome)f(is)h
(unde\014ned.)33 b(In)19 b(some)f(systems,)h(this)g(will)i(allo)o(w)e(to)75
500 y(optimize)d(comm)o(unication)g(and)g(a)o(v)o(oid)f(a)f(hand-shaking)j
(op)q(eration)e(that)g(is)g(otherwise)h(required.)166 557 y(A)d
Fg(secure)h(send)f Fo(will)i(complete)e(if)h(a)f(matc)o(hing)g(receiv)o(e)h
(is)f(p)q(osted,)g(and)h(the)f(receiv)o(e)h(op)q(eration)75
613 y(is)k(committed)g(to)g(receiv)o(e)g(the)g(message)g(sen)o(t)f(b)o(y)h
(the)g(secure)g(send.)29 b(\(E.g.,)17 b(the)h(send)g(and)g(receiv)o(e)75
670 y(op)q(erations)12 b(ha)o(v)o(e)g(already)g(b)q(een)h(matc)o(hed,)f(the)g
(receiv)o(e)h(op)q(eration)f(has)g(already)g(started)f(and)h(cannot)75
726 y(b)q(e)k(cancelled)h(an)o(ymore.\))166 783 y(A)d(receiv)o(e)i(op)q
(eration)e(can)h(o)q(ccur)g(in)g(one)f(of)g(t)o(w)o(o)f(mo)q(des:)20
b Fg(ST)l(AND)o(ARD)13 b Fo(and)i Fg(SECURE)p Fo(.)g(A)75 840
y(secure)g(send)g(can)g(b)q(e)g(matc)o(hed)f(only)h(b)o(y)f(a)g
Fg(secure)i(receiv)o(e)p Fo(;)e(a)g(program)f(where)i(a)f(secure)h(send)g
(can)75 896 y(b)q(e)j(matc)o(hed)g(b)o(y)g(a)f(standard)h(receiv)o(e)g(is)h
(erroneous)e(and)h(its)g(b)q(eha)o(vior)h(is)f(unde\014ned.)29
b(The)18 b(secure)75 953 y(receiv)o(e)e(can)f(b)q(e)h(p)q(osted)g(either)g(b)
q(efore)f(or)g(after)f(the)i(matc)o(hing)f(send.)166 1009 y(A)f(standard)g
(send)h(and)g(a)f(ready)g(send)h(can)f(b)q(oth)h(b)q(e)g(matc)o(hed)f(only)h
(b)o(y)f(a)g Fg(standard)j(receiv)o(e)p Fo(;)75 1066 y(a)c(program)g(where)h
(a)g(secure)g(receiv)o(e)h(can)f(matc)o(h)f(a)g(nonsecure)i(send)f(is)h
(erroneous)e(and)h(its)g(b)q(eha)o(vior)75 1122 y(is)j(unde\014ned.)25
b(The)17 b(receiv)o(e)g(has)f(to)g(b)q(e)h(p)q(osted)f(ahead)h(of)f(the)g
(send)h(for)f(a)g(ready)g(send)h(and)g(can)f(b)q(e)75 1179
y(p)q(osted)f(either)h(b)q(efore)g(or)f(after)f(the)h(send)h(is)g(p)q(osted)f
(for)g(a)g(standard)f(send.)166 1312 y Fm(Implemen)o(tati)o(on)e(note:)166
1362 y Fl(The)18 b(curren)o(t)g(de\014nition)f(assumes)g(it)g(si)g(the)h
(user)h(resp)q(onsibilit)o(y)e(to)g(prev)o(en)o(t)h(matc)o(hing)d(of)i(a)g
(regular)75 1412 y(send)12 b(with)f(a)f(secure)j(receiv)o(e)f(and)f(vice-v)o
(ersa.)18 b(Otherwise,)13 b(messages)e(need)h(b)q(e)f(tagged)g(as)g(standard)
g(or)g(secure.)166 1462 y(Assume)18 b(an)f(implemen)o(tation)e(of)i(MPI)h
(comm)o(unication)d(that)j(a)o(v)o(oids)f(retries.)31 b(What)18
b(proto)q(cols)g(can)75 1512 y(b)q(e)f(used?)27 b(Since)17
b(a)g(receiv)o(e)h(ma)o(y)c(ha)o(v)o(e)j(a)f(wildcard)g(source)i(\014eld,)f
(the)g(\014rst)g(step)h(in)e(the)h(proto)q(col)g(m)o(ust)e(b)q(e)75
1561 y(executed)h(b)o(y)d(the)i(sender.)166 1612 y(F)m(or)e(a)h(ready)g
(send,)h(this)f(\014rst)g(step)h(ma)o(y)d(in)o(v)o(olv)o(e)h(sending)h(the)h
(data,)e(since)i(the)f(receiv)o(er)i(is)d(guaran)o(teed)75
1661 y(to)h(ha)o(v)o(e)f(space)i(to)f(store)h(it.)j(The)c(proto)q(col)g(is)f
(send,)i(p)q(ossibly)e(follo)o(w)o(ed)g(b)o(y)g(an)h(ac)o(k-send.)166
1712 y(The)h(proto)q(col)g(for)g(secure)i(send)f(is)f(lik)o(ely)f(to)h(b)q(e)
h(the)f(follo)o(wing:)j(The)e(sender)h(sends)f(a)f(request-to-send)75
1761 y(message.)j(The)13 b(receiv)o(er)i(stores)g(this)e(request)i(\(whic)o
(h)f(con)o(tains)f(a)g(cop)o(y)g(of)g(the)h(message)f(en)o(v)o(elop)q(e\).)19
b(When)13 b(a)75 1811 y(matc)o(hing)g(receiv)o(e)k(is)e(p)q(osted,)h(the)g
(receiv)o(er)g(sends)h(bac)o(k)e(an)g(ac)o(kno)o(wledge,)g(and)g(the)g
(sender)i(no)o(w)e(sends)h(the)75 1861 y(message.)i(The)c(proto)q(col)g(is)g
(\(req,)g(ac)o(k-req,)f(send\),)i(p)q(ossibly)e(follo)o(w)o(ed)g(b)o(y)g(an)h
(ac)o(k-send.)166 1911 y(What)f(proto)q(col)f(is)h(used)h(for)f(standard)h
(sends?)19 b(Either)14 b(the)f(second)h(proto)q(col)f(\(req,)h(ac)o(k-req,)f
(send\))h(or)f(a)75 1961 y(mix)f(of)h(the)i(\014rst)f(and)g(the)h(second)g
(\(e.g.)i(\014rst)e(used)g(for)e(short)i(messages,)e(second)i(for)f(long)f
(messages\).)166 2011 y(When)j(the)g(receiv)o(er)h(do)q(es)g(not)e(wildcard)h
(the)g(source)h(\014eld)f(then)g(the)g(proto)q(col)g(can)g(b)q(e)g(rev)o
(ersed:)24 b(The)75 2061 y(receiv)o(er)15 b(sends)h(a)d(clear-to-send)i
(message,)e(and)h(the)g(sender)i(can)e(pro)q(ceed)h(with)f(the)g(short)h
(proto)q(col)e(if)g(it)h(has)75 2111 y(a)g(clear-to-send)g(when)h(the)f(send)
h(is)f(executed.)166 2161 y(What)f(do)f(w)o(e)i(gain)e(from)f(the)j(\\secure)
h(receiv)o(e"?)j(Some)12 b(optimizations)f(for)i(regular)g(receiv)o(es)i
(\(e.g.,)d(in)g(a)75 2211 y(regular)i(receiv)o(e)i(of)e(a)g(short)g(message)g
(the)h(receiv)o(er)h(kno)o(ws)e(the)h(short)g(proto)q(col)f(will)f(b)q(e)i
(used,)g(and)f(need)h(not)75 2261 y(c)o(hec)o(k)g(for)e(a)h
(request-to-send\).)20 b(Q:)14 b(is)g(that)g(enough)g(justi\014cation)f(for)h
(the)g(secure)i(receiv)o(e?)75 2489 y Fn(1.8)70 b(Comm)n(unication)20
b(Ob)t(jects)75 2591 y Fo(An)g(opaque)g(comm)o(unication)h(ob)s(ject)e(iden)o
(ti\014es)i(v)m(arious)g(prop)q(erties)f(of)g(a)f(comm)o(unication)i(op)q
(er-)75 2647 y(ation,)i(suc)o(h)f(as)f(the)h(bu\013er)g(descriptor)g(that)f
(is)h(asso)q(ciated)g(with)g(it,)h(its)f(con)o(text,)g(the)g(tag)f(and)75
2704 y(destination)16 b(parameters)f(to)g(b)q(e)h(used)g(for)e(a)h(send,)h
(or)f(the)g(tag)g(and)h(source)f(parameters)g(to)f(b)q(e)i(used)p
eop
%%Page: 16 17
bop 75 -100 a Fo(16)608 b Fh(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 45 y Fo(for)g(a)g(receiv)o(e.)24
b(In)17 b(addition,)g(this)g(ob)s(ject)f(stores)g(information)g(ab)q(out)g
(the)h(status)e(of)h(the)h(last)f(com-)75 102 y(m)o(unication)g(op)q(eration)
g(that)e(w)o(as)h(p)q(erformed)g(with)h(this)g(ob)s(ject.)j(This)d(ob)s(ject)
f(is)g(accessed)h(using)g(a)75 158 y(comm)o(unication)g(handle.)166
214 y(One)g(can)f(consider)h(comm)o(unication)g(op)q(erations)f(to)f(consist)
i(of)f(the)g(follo)o(wing)g(sub)q(op)q(erations:)75 315 y Fg(INIT\(op)q
(eration,)k(params,)d(handle\))24 b Fo(Pro)q(cess)15 b(pro)o(vides)f(all)i
(relev)m(an)o(t)e(parameters)g(for)g(its)g(par-)189 371 y(ticipation)k(in)g
(the)g(comm)o(unication)g(op)q(eration)f(\(t)o(yp)q(e)g(of)g(op)q(eration,)h
(data)e(bu\013er,)i(tag,)e(par-)189 428 y(ticipan)o(ts,)f(etc.\).)k(An)d(ob)s
(ject)e(is)i(created)f(that)g(iden)o(ti\014es)i(the)e(op)q(eration.)75
520 y Fg(ST)l(AR)l(T\(handle\))24 b Fo(The)16 b(comm)o(unication)g(op)q
(eration)f(is)h(started)75 612 y Fg(COMPLETE\(handle\))25 b
Fo(The)16 b(comm)o(unication)g(op)q(eration)f(is)h(completed.)75
704 y Fg(FREE\(handle\))25 b Fo(The)16 b(comm)o(unication)g(ob)s(ject,)e(and)
h(asso)q(ciated)h(resources)f(are)g(freed.)75 804 y(Correct)f(in)o(v)o(o)q
(cation)i(of)f(these)g(sub)q(op)q(erations)h(is)g(a)f(sequence)h(of)f(the)g
(form)551 901 y Fg(INIT)i Fo(\()p Fg(ST)l(AR)l(T)g(COMPLETE)p
Fo(\))1208 882 y Fb(\003)1246 901 y Fg(FREE)p Fd(:)75 998 y
Fo(I.e.,)12 b(an)g(ob)s(ject)g(needs)h(b)q(e)f(created)h(b)q(efore)f(comm)o
(unication)h(o)q(ccurs;)g(it)f(can)g(b)q(e)h(reused)g(only)g(after)e(the)75
1054 y(previous)16 b(use)f(has)f(completed;)i(and)f(it)g(needs)h(to)e(b)q(e)h
(freed)h(ev)o(en)o(tually)f(\(of)g(course,)f(one)h(can)g(assume)75
1111 y(that)f(all)j(ob)s(jects)d(are)h(freed)h(at)e(program)g(termination,)h
(b)o(y)h(default\).)166 1167 y(The)h(ab)q(o)o(v)o(e)f(scenario)i(p)q(ertains)
f(to)f Fj(p)n(ersistent)g Fo(ob)s(jects.)24 b(One)18 b(can)f(also)f(create)h
Fj(ephemer)n(al)g Fo(ob-)75 1223 y(jects.)23 b(Suc)o(h)17 b(ob)s(ject)e(p)q
(ersists)i(only)g(un)o(til)g(the)f(comm)o(unication)h(op)q(eration)g(is)f
(completed,)i(at)d(whic)o(h)75 1280 y(p)q(oin)o(t)i(it)g(is)g(destro)o(y)o
(ed.)24 b(Th)o(us,)16 b(correct)h(in)o(v)o(o)q(cation)g(of)f(sub)q(op)q
(erations)h(with)g(an)g(ephemeral)h(ob)s(ject)75 1336 y(is)e
Fg(INIT)h(ST)l(AR)l(T)g(COMPLETE)p Fo(.)166 1393 y(A)i(user)h(ma)o(y)e
(directly)j(in)o(v)o(ok)o(es)e(these)g(sub)q(op)q(erations.)33
b(This)20 b(w)o(ould)g(allo)o(w)f(to)g(amortize)g(the)75 1449
y(o)o(v)o(erhead)h(of)h(setting)f(up)i(a)e(comm)o(unication)h(o)o(v)o(er)f
(man)o(y)h(successiv)o(e)h(uses)f(of)f(the)h(same)f(handle,)75
1506 y(and)h(allo)o(ws)h(to)e(o)o(v)o(erlap)h(comm)o(unication)h(and)f
(computation.)38 b(Simpler)23 b(comm)o(unication)f(op)q(era-)75
1562 y(tions)c(com)o(bine)h(sev)o(eral)g(of)e(these)i(sub)q(op)q(erations)g
(in)o(to)f(one)g(op)q(eration,)h(th)o(us)f(simplifying)i(the)f(use)75
1619 y(of)f(comm)o(unication)i(primitiv)o(es.)32 b(Th)o(us,)20
b(one)f(only)g(needs)h(to)e(sp)q(ecify)j(precisely)f(the)f(seman)o(tics)g(of)
75 1675 y(these)14 b(sub)q(op)q(erations)g(in)h(order)e(to)g(sp)q(ecify)i
(the)f(seman)o(tics)f(of)h(MPI)f(p)q(oin)o(t)h(to)f(p)q(oin)o(t)h(comm)o
(unication)75 1732 y(op)q(erations.)166 1788 y(W)l(e)22 b(sa)o(y)g(that)f(a)h
(comm)o(unication)h(op)q(eration)f(\(send)h(or)e(receiv)o(e\))i(is)g
Fg(p)q(osted)f Fo(once)h(a)f Fg(start)75 1844 y Fo(sub)q(op)q(eration)d(w)o
(as)d(in)o(v)o(ok)o(ed;)j(the)f(op)q(eration)g(is)g Fg(completed)g
Fo(once)g(the)g Fg(complete)g Fo(sub)q(op)q(eration)75 1901
y(completes.)29 b(A)18 b(send)h(and)f(a)f(receiv)o(e)i(op)q(eration)g
Fg(matc)o(h)f Fo(if)g(the)g(receiv)o(e)h(pattern)f(sp)q(eci\014ed)i(b)o(y)e
(the)75 1957 y(receiv)o(e)e(matc)o(hes)f(the)g(message)g(en)o(v)o(elop)q(e)h
(created)f(b)o(y)h(the)f(send.)75 2078 y Fk(1.8.1)55 b(Comm)n(unication)21
b(Ob)s(ject)d(Creation)75 2247 y Fm(Discussion:)34 b Fl(This)14
b(section)g(has)g(not)g(y)o(et)g(b)q(een)h(appro)o(v)o(ed)166
2386 y Fo(An)j(ob)s(ject)e(for)h(a)g(send)h(op)q(eration)g(is)g(created)f(b)o
(y)g(a)g(call)i(to)e Fg(MPI)p 1373 2386 16 2 v 18 w(INIT)p
1508 2386 V 18 w(SEND)p Fo(.)h(A)f(call)i(to)75 2442 y Fg(MPI)p
184 2442 V 18 w(INIT)p 319 2442 V 19 w(RECV)e Fo(is)i(similarly)h(used)e(for)
f(creating)h(an)g(ob)s(ject)g(for)f(a)h(receiv)o(e)g(op)q(eration.)29
b(The)75 2499 y(creation)11 b(of)g(a)g(comm)o(unication)h(ob)s(ject)e(is)i(a)
f(lo)q(cal)h(op)q(eration)f(that)g(need)h(not)f(in)o(v)o(olv)o(e)g(comm)o
(unication)75 2555 y(with)16 b(a)e(remote)h(pro)q(cess.)166
2647 y Fg(MPI)p 275 2647 V 18 w(INIT)p 410 2647 V 19 w(SEND)k(\(handle,)h
(bu\013er)p 931 2647 V 19 w(handle,)g(dest,)e(tag,)i(con)o(text,)f(mo)q(de,)g
(p)q(ersis-)75 2704 y(tence\))p eop
%%Page: 17 18
bop 75 -100 a Fh(1.8.)34 b(COMMUNICA)l(TION)16 b(OBJECTS)1004
b Fo(17)166 45 y(Creates)14 b(a)h(send)h(comm)o(unication)g(ob)s(ject.)j(P)o
(arameters)14 b(are)75 142 y Fg(OUT)k(handle)24 b Fo(message)11
b(handle.)20 b(The)12 b(handle)h(should)f(not)f(b)q(e)i(asso)q(ciated)f(with)
f(an)o(y)h(ob)s(ject)f(b)q(efore)189 198 y(the)k(call.)75 295
y Fg(IN)i(bu\013er)p 290 295 16 2 v 19 w(handle)24 b Fo(handle)16
b(to)f(send)h(bu\013er)f(descriptor)75 392 y Fg(IN)i(dest)23
b Fo(rank)15 b(in)h(con)o(text)e(of)h(destination)h(\(in)o(teger\))75
489 y Fg(IN)h(tag)24 b Fo(user)15 b(tag)f(for)h(messages)g(sen)o(t)g(with)g
(this)h(handle)g(\(in)o(teger\))75 586 y Fg(IN)h(con)o(text)23
b Fo(con)o(text)15 b(of)f(messages)h(sen)o(t)g(with)h(this)f(handle)75
683 y Fg(IN)i(mo)q(de)23 b Fo(send)11 b(mo)q(de)f(\(state)f(t)o(yp)q(e,)i
(with)g(three)f(v)m(alues:)18 b Fi(MPI)p 1186 683 15 2 v 17
w(STANDARD)p Fo(,)9 b Fi(MPI)p 1489 683 V 16 w(READY)h Fo(and)g
Fi(MPI)p 1790 683 V 17 w(SECURE)p Fo(\))75 780 y Fg(IN)17 b(p)q(ersistence)23
b Fo(handle)h(p)q(ersistence)g(\(state)d(t)o(yp)q(e,)j(with)f(t)o(w)o(o)e(v)m
(alues:)35 b Fi(MPI)p 1527 780 V 17 w(PERSISTENT)21 b Fo(and)189
836 y Fi(MPI)p 264 836 V 16 w(EPHEMERAL)p Fo(\))166 969 y Fg(MPI)p
275 969 16 2 v 18 w(INIT)p 410 969 V 19 w(RECV)d(\(handle,)i(bu\013er)p
937 969 V 19 w(handle,)g(source,)e(tag,)h(con)o(text,)g(mo)q(de,)g(p)q(er-)75
1025 y(sistence\))166 1118 y Fo(Create)c(a)f(receiv)o(e)i(handle.)22
b(P)o(arameters)13 b(are)75 1215 y Fg(OUT)18 b(handle)24 b
Fo(message)11 b(handle.)20 b(The)12 b(handle)h(should)f(not)f(b)q(e)i(asso)q
(ciated)f(with)f(an)o(y)h(ob)s(ject)f(b)q(efore)189 1271 y(the)k(call.)75
1368 y Fg(IN)i(bu\013er)p 290 1368 V 19 w(handle)24 b Fo(handle)16
b(to)f(receiv)o(e)h(bu\013er)f(descriptor.)75 1465 y Fg(IN)i(source)22
b Fo(rank)15 b(in)h(con)o(text)f(of)g(source,)g(or)f Fi(MPI)p
974 1465 15 2 v 17 w(ANY)p 1063 1465 V 17 w(SOURCE)g Fo(\(in)o(teger\).)75
1562 y Fg(IN)j(tag)24 b Fo(user)15 b(tag)f(for)h(messages)g(receiv)o(ed)h
(with)g(this)f(handle,)h(or)f Fi(MPI)p 1341 1562 V 17 w(ANY)p
1430 1562 V 16 w(TAG)g Fo(\(in)o(teger\).)75 1659 y Fg(IN)i(con)o(text)23
b Fo(con)o(text)15 b(of)f(messages)h(receiv)o(ed)h(with)g(this)g(handle.)75
1756 y Fg(IN)h(mo)q(de)23 b Fo(receiv)o(e)16 b(mo)q(de)g(\(state)e(t)o(yp)q
(e,)h(with)g(t)o(w)o(o)f(v)m(alues:)21 b Fi(MPI)p 1233 1756
V 17 w(STANDARD)p Fo(,)13 b(and)j Fi(MPI)p 1629 1756 V 17 w(SECURE)p
Fo(\))75 1853 y Fg(IN)h(p)q(ersistence)23 b Fo(handle)h(p)q(ersistence)g
(\(state)d(t)o(yp)q(e,)j(with)f(t)o(w)o(o)e(v)m(alues:)35 b
Fi(MPI)p 1527 1853 V 17 w(PERSISTENT)21 b Fo(and)189 1909 y
Fi(MPI)p 264 1909 V 16 w(EPHEMERAL)p Fo(\))166 2006 y(See)16
b(Section)g(1.4.2)d(for)i(a)g(discussion)i(of)d(source,)h(tag)g(and)g(con)o
(text.)166 2139 y Fm(Discussion:)33 b Fl(I)13 b(ha)o(v)o(e)h(not)f(included)g
(prop)q(osals)h(for)f(partially)e(sp)q(eci\014ed)k(message)e(handles,)g(that)
h(some)75 2189 y(p)q(eoples)h(seem)e(to)h(desire.)166 2240
y(I)g(ha)o(v)o(e)f(merged)h(all)f(handle)g(setup)i(in)o(to)e(one)h(call.)75
2449 y Fk(1.8.2)55 b(Comm)n(unication)21 b(Start)75 2571 y
Fg(MPI)p 184 2571 16 2 v 18 w(ST)l(AR)l(T\(handle\))75 2704
y(IN)c(handle)24 b Fo(comm)o(unication)16 b(handle)p eop
%%Page: 18 19
bop 75 -100 a Fo(18)608 b Fh(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 45 y Fo(The)i Fi(MPI)p
337 45 15 2 v 17 w(START)g Fo(function)h(starts)e(the)h(execution)i(of)d(a)h
(comm)o(unication)h(op)q(eration)g(\(send)f(or)75 102 y(receiv)o(e\).)i(A)13
b(sender)h(should)g(not)f(up)q(date)h(the)g(send)g(bu\013er)f(after)g(a)g
(send)g(op)q(eration)h(has)f(started)g(and)75 158 y(un)o(til)g(it)f(is)g
(completed.)20 b(A)12 b(receiv)o(er)g(should)h(not)e(access)h(the)g(receiv)o
(e)h(bu\013er)f(after)f(a)g(receiv)o(e)i(op)q(eration)75 214
y(w)o(as)18 b(started)g(and)h(un)o(til)h(it)f(is)h(completed.)32
b(A)19 b(program)e(that)i(do)q(es)g(not)f(satisfy)h(this)g(condition)h(is)75
271 y(erroneous)15 b(and)g(its)h(outcome)f(is)g(undetermined.)75
395 y Fk(1.8.3)55 b(Comm)n(unication)21 b(Completion)75 517
y Fg(MPI)p 184 517 16 2 v 18 w(W)-6 b(AIT)17 b(\()h(handle,)g(return)p
730 517 V 18 w(status)p 884 517 V 19 w(handle\))75 647 y(IN)f(handle)24
b Fo(comm)o(unication)16 b(handle)75 743 y Fg(OUT)i(return)p
357 743 V 19 w(handle)23 b Fo(handle)17 b(that)d(is)i(asso)q(ciated)f(with)h
(return)f(status)f(ob)s(ject.)166 838 y(A)i(call)i(to)e Fg(MPI)p
467 838 V 18 w(W)-6 b(AIT)16 b Fo(returns)g(when)h(the)f(send)h(op)q(eration)
g(iden)o(ti\014ed)h(b)o(y)f Fi(handle)e Fo(is)i(com-)75 894
y(plete.)24 b(The)17 b(completion)g(of)f(a)g(send)h(op)q(eration)g(indicates)
h(that)d(the)i(sender)g(is)f(no)o(w)g(free)h(to)e(up)q(date)75
951 y(the)i(lo)q(cations)h(in)g(the)f(send)g(bu\013er,)h(or)e(an)o(y)h(other)
f(lo)q(cation)i(that)e(can)i(b)q(e)f(referenced)h(b)o(y)f(the)g(send)75
1007 y(op)q(eration.)j(Ho)o(w)o(ev)o(er,)13 b(it)i(do)q(es)g(not)f(indicate)i
(that)d(the)i(message)f(has)g(b)q(een)i(receiv)o(ed;)f(rather)f(it)h(ma)o(y)
75 1064 y(ha)o(v)o(e)g(b)q(een)h(bu\013ered)g(b)o(y)f(the)g(comm)o(unication)
h(subsystem.)166 1120 y(The)g(completion)g(of)g(a)f(receiv)o(e)h(op)q
(eration)g(indicates)h(that)e(the)h(receiv)o(er)g(is)g(no)o(w)f(free)h(to)f
(access)75 1177 y(the)d(lo)q(cations)h(in)g(the)f(receiv)o(e)i(bu\013er,)e
(whic)o(h)h(con)o(tain)f(the)h(receiv)o(ed)g(message,)f(or)g(an)o(y)f(other)h
(lo)q(cation)75 1233 y(that)g(can)g(b)q(e)h(referenced)h(b)o(y)e(the)h
(receiv)o(e)g(op)q(eration.)19 b(It)13 b(do)q(es)g(not)f(indicate)i(that)d
(the)i(matc)o(hing)f(send)75 1290 y(op)q(eration)j(has)g(completed.)166
1347 y(The)i(call)g(returns)g(a)f(handle)i(to)e(an)g(opaque)h(ob)s(ject)f
(that)g(con)o(tains)g(information)h(on)f(the)h(com-)75 1403
y(pleted)f(op)q(eration)g({)f(the)g Fg(return)i(status)e Fo(ob)s(ject.)166
1495 y Fg(MPI)p 275 1495 V 18 w(ST)l(A)l(TUS)i(\(handle,)h(\015ag,)g(return)p
974 1495 V 18 w(handle\))75 1626 y(IN)f(handle)24 b Fo(comm)o(unication)16
b(handle)75 1721 y Fg(OUT)i(\015ag)24 b Fo(logical)75 1817
y Fg(OUT)18 b(return)p 357 1817 V 19 w(handle)23 b Fo(handle)17
b(that)d(is)i(asso)q(ciated)f(with)h(return)f(status)f(ob)s(ject.)166
1912 y(A)21 b(call)h(to)f Fg(MPI)p 481 1912 V 18 w(ST)l(A)l(TUS)g
Fo(returns)g Fi(flag=true)f Fo(if)h(the)g(op)q(eration)h(iden)o(ti\014ed)h(b)
o(y)e Fi(handle)75 1968 y Fo(is)i(complete,)i(In)e(suc)o(h)g(case,)h(the)f
(return)g(handle)h(p)q(oin)o(ts)f(to)f(an)g(opaque)h(ob)s(ject)f(that)g(con)o
(tains)75 2025 y(information)14 b(on)f(the)h(completed)h(information.)k(It)14
b(returns)f Fi(flag=false)p Fo(,)g(otherwise.)19 b(In)14 b(suc)o(h)g(case,)75
2081 y(the)h(v)m(alue)i(of)d(the)i(return)f(handle)h(is)g(unde\014ned.)166
2138 y(A)e(call)i(to)e Fi(MPI)p 427 2138 15 2 v 16 w(WAIT)g
Fo(blo)q(c)o(ks)h(only)g(the)g(executing)g(thread.)20 b(If)14
b(the)h(executing)g(pro)q(cess)g(is)g(m)o(ulti-)75 2194 y(threaded,)g(then)h
(other)e(threads)h(within)i(the)e(pro)q(cess)h(can)f(b)q(e)h(sc)o(heduled)h
(for)d(execution.)166 2251 y(The)21 b(use)h(of)f(a)f(blo)q(c)o(king)j(receiv)
o(e)f(op)q(eration)f(\()p Fi(MPI)p 1095 2251 V 17 w(WAIT)p
Fo(\))f(allo)o(ws)h(the)h(op)q(erating)f(system)g(to)75 2308
y(desc)o(hedule)e(the)e(blo)q(c)o(k)o(ed)i(thread)e(and)g(sc)o(hedule)i
(another)d(thread)h(for)g(execution,)h(if)g(suc)o(h)f(is)h(a)o(v)m(ail-)75
2364 y(able.)k(The)16 b(use)g(of)f(a)g(non)o(blo)q(c)o(king)i(receiv)o(e)g
(op)q(eration)e(\()p Fi(MPI)p 1152 2364 V 17 w(STATUS)p Fo(\))f(allo)o(ws)i
(the)g(user)f(to)g(sc)o(hedule)75 2421 y(alternativ)o(e)g(activities)i
(within)f(a)f(single)i(thread)e(of)f(execution.)166 2477 y(The)h(in)o(tended)
h(implemen)o(tation)g(of)e Fi(MPI)p 894 2477 V 17 w(STATUS)g
Fo(is)h(for)f(that)g(op)q(eration)h(to)f(return)h(as)f(so)q(on)g(as)75
2534 y(p)q(ossible.)22 b(Ho)o(w)o(ev)o(er,)14 b(if)i(rep)q(eatedly)h(called)g
(for)d(an)i(op)q(eration)f(that)g(is)h(enabled,)h(it)e(m)o(ust)g(ev)o(en)o
(tually)75 2590 y(succeed.)166 2647 y(The)23 b(return)f(status)f(ob)s(ject)h
(for)g(a)g(send)h(op)q(eration)g(carries)f(no)h(information.)41
b(The)23 b(return)75 2704 y(status)17 b(ob)s(ject)h(for)f(a)h(receiv)o(e)h
(op)q(eration)g(carries)f(information)g(on)g(the)g(source,)h(tag)e(and)i
(length)f(of)p eop
%%Page: 19 20
bop 75 -100 a Fh(1.8.)34 b(COMMUNICA)l(TION)16 b(OBJECTS)1004
b Fo(19)75 45 y(the)20 b(receiv)o(ed)h(message.)34 b(These)20
b(\014elds)h(are)e(required)i(b)q(ecause)g(the)f(receiv)o(e)h(op)q(eration)f
(ma)o(y)f(ha)o(v)o(e)75 102 y(sp)q(eci\014ed)i Fi(DONTCARE)d
Fo(in)i(either)f(source)g(or)g(tag)f(\014eld,)i(and)f(the)g(message)g(ma)o(y)
f(ha)o(v)o(e)h(b)q(een)h(shorter)75 158 y(than)15 b(the)g(receiv)o(e)h
(bu\013er.)166 250 y Fg(MPI)p 275 250 16 2 v 18 w(QUER)l(Y\()i(handle,)g
(len,)f(source,)g(tag\))75 362 y(IN)g(handle)24 b Fo(handle)16
b(to)f(return)g(status)f(ob)s(ject)75 448 y Fg(OUT)k(len)24
b Fo(n)o(um)o(b)q(er)15 b(of)g(elemen)o(ts)h(receiv)o(ed.)75
535 y Fg(OUT)i(source)23 b Fo(rank)14 b(of)h(message)g(sender)h(in)g(message)
f(con)o(text)f(\(in)o(teger\).)75 622 y Fg(OUT)k(tag)24 b Fo(tag)14
b(of)h(receiv)o(ed)h(message)f(\(in)o(teger\).)166 734 y Fg(MPI)p
275 734 V 18 w(CREA)l(TE)p 510 734 V 19 w(ST)l(A)l(T\()i(handle\))166
825 y Fo(Creates)d(a)h(new)h(return)f(status)f(ob)s(ject.)75
902 y Fg(OUT)k(handle)24 b Fo(handle)16 b(to)f(return)g(status)g(ob)s(ject.)
166 1054 y Fm(Discussion:)166 1104 y Fl(The)e(use)g(of)f(a)h(return)g(status)
h(ob)r(ject,)f(rather)g(than)g(a)f(list)g(of)g(parameters)h(ma)o(y)d
(simplify)g(the)j(use)h(of)e(MPI)75 1154 y(routines,)17 b(if)f(the)g(v)n
(alues)g(stored)i(in)e(the)h(ob)r(ject)g(are)f(seldom)f(c)o(hec)o(k)o(ed.)27
b(A)16 b(prede\014ned)j(return)e(status)g(ob)r(ject)75 1203
y(should)d(b)q(e)h(pro)o(vided,)f(to)g(ease)h(programming.)h(The)f(main)d
(reason)j(for)f(the)h(use)g(of)f(a)g(return-status)i(ob)r(ject)f(is)75
1253 y(that)f(one)h(w)o(an)o(ts)f(to)g(b)q(e)g(able)g(to)g(use)h(the)g(same)e
Ff(MPI)p 923 1253 14 2 v 15 w(WAIT)g Fl(and)h Ff(MPI)p 1186
1253 V 15 w(STATUS)f Fl(calls)h(for)g(c)o(hec)o(king)g(on)g(di\013eren)o(t)75
1303 y(t)o(yp)q(es)h(of)f(op)q(erations,)f(e.g.)19 b(b)q(oth)14
b(sends)i(and)d(receiv)o(es,)j(and)e(p)q(erhaps)h(new)g(op)q(erations)f(in)g
(the)g(future.)20 b(These)75 1353 y(di\013eren)o(t)12 b(op)q(erations)g
(return)g(di\013eren)o(t)g(information)c(\(alb)q(eit)j(w)o(e)h(could)f
(decree)i(that)e(a)g(send)h(returns)h(the)f(same)75 1403 y(information)f(as)j
(a)g(receiv)o(e\).)166 1453 y(The)i(issue)h(of)e(memory)f(allo)q(cation)g
(for)i(return)p 939 1453 13 2 v 16 w(status)h(handles)f(is)g(not)g(y)o(et)g
(solv)o(ed.)24 b(There)17 b(is)f(a)g(desire)75 1502 y(that)e(the)g(user)h
(will)e(b)q(e)h(able)g(to)g(allo)q(cate)f(space)i(for)f(them)f(\(e.g.,)f(on)i
(the)h(stac)o(k\).)166 1552 y(W)m(e)i(return)i(n)o(um)o(b)q(er)d(of)h(elemen)
o(ts)g(receiv)o(ed,)j(rather)e(than)f(b)o(ytes)i(receiv)o(ed)f(b)q(ecause)h
(\\n)o(um)o(b)q(er)e(of)g(ele-)75 1602 y(men)o(ts")g(is)h(closer)h(to)e(the)i
(application)d(seman)o(tic)i(lev)o(el)f(\(user)i(do)q(es)g(not)f(need)h(to)f
(b)q(e)g(a)o(w)o(are)g(of)f(the)i(size)g(of)75 1652 y(elemen)o(ts\),)g(and)f
(is)f(more)h(in)o(v)n(arian)o(t.)28 b(The)19 b(return)g(status)g(ob)r(ject)g
(returns)h(the)e(n)o(um)o(b)q(er)g(of)f Fm(elemen)o(ts)e Fl(re-)75
1702 y(ceiv)o(ed.)k(If)14 b(there)h(w)o(as)f(no)g(truncation,)g(then)h(this)f
(is)g(equal)g(to)f(the)i(n)o(um)o(b)q(er)e(of)h(elemen)o(ts)g(sen)o(t.)19
b(On)c(the)f(other)75 1751 y(hand,)k(the)f(n)o(um)o(b)q(er)g(of)g(b)o(ytes)h
(collected)g(form)d(the)j(sender)h(memory)m(,)c(the)j(n)o(um)o(b)q(er)e(of)h
(b)o(ytes)h(sen)o(t)g(o)o(v)o(er)f(the)75 1801 y(wire,)12 b(and)g(the)g(n)o
(um)o(b)q(er)f(of)g(b)o(ytes)i(stored)f(in)g(the)g(receiv)o(er)h(memory)d(ma)
o(y)g(all)g(b)q(e)i(di\013eren)o(t,)h(in)e(a)h(heterogeneous)75
1851 y(en)o(vironmen)o(t.)23 b(The)17 b(n)o(um)o(b)q(er)e(of)g(elemen)o(ts)h
(sen)o(t)h(can)f(b)q(e)g(computed)g(form)e(the)j(send)g(bu\013er)g
(descriptor;)g(the)75 1901 y(n)o(um)o(b)q(er)c(of)g(elemen)o(ts)h(receiv)o
(ed)h(can)f(b)q(e)h(computed)e(form)g(the)h(receiv)o(e)h(bu\013er)g
(descriptor)g(and)f(the)g(length)g(\(in)75 1951 y(b)o(ytes\))h(of)e(the)i
(receiv)o(ed)g(message.)75 2152 y Fk(1.8.4)55 b(Multiple)20
b(Completions)75 2238 y Fo(It)c(is)h(con)o(v)o(enien)o(t)f(to)g(b)q(e)g(able)
h(to)f(w)o(ait)f(for)h(the)g(completion)h(of)e(an)o(y)h(or)g(all)h(the)f(op)q
(erations)g(in)h(a)f(set,)75 2294 y(rather)g(than)g(ha)o(ving)h(to)e(w)o(ait)
h(for)g(sp)q(eci\014c)i(message.)23 b(A)16 b(call)i(to)e Fi(MPI)p
1318 2294 15 2 v 16 w(WAITANY)g Fo(or)f Fi(MPI)p 1646 2294
V 17 w(STATUSANY)75 2350 y Fo(can)c(b)q(e)h(used)g(to)e(w)o(ait)h(for)f(the)i
(completion)g(of)e(one)i(out)e(of)h(sev)o(eral)g(op)q(erations;)i(a)d(call)j
(to)d Fi(MPI)p 1694 2350 V 17 w(WAITALL)75 2407 y Fo(can)15
b(b)q(e)h(used)g(to)f(w)o(ait)f(for)h(all)h(p)q(ending)h(op)q(erations)e(in)h
(a)f(list.)166 2499 y Fg(MPI)p 275 2499 16 2 v 18 w(W)-6 b(AIT)l(ANY)16
b(\()i(list)p 677 2499 V 19 w(of)p 738 2499 V 19 w(handles,)g(len,)f(index,)g
(return)p 1362 2499 V 19 w(handle\))166 2591 y Fo(Blo)q(c)o(ks)h(un)o(til)g
(one)g(of)f(the)g(op)q(erations)h(asso)q(ciated)g(with)f(the)h(comm)o
(unication)g(handles)h(in)f(the)75 2647 y(arra)o(y)13 b(has)i(completed.)21
b(Returns)15 b(the)g(index)h(of)e(that)g(handle)i(in)f(the)g(arra)o(y)l(,)f
(and)g(returns)h(the)g(status)75 2704 y(of)g(that)f(op)q(eration)i(in)g(the)f
(ob)s(ject)g(asso)q(ciated)g(with)h(the)f(return)p 1223 2704
14 2 v 16 w(handle.)21 b(The)16 b(parameters)e(are:)p eop
%%Page: 20 21
bop 75 -100 a Fo(20)608 b Fh(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 45 y Fg(IN)h(list)p 225
45 16 2 v 20 w(of)p 287 45 V 19 w(handles)23 b Fo(list)16 b(of)f(handles)h
(to)f(comm)o(unication)h(ob)s(jects.)75 144 y Fg(IN)h(len)23
b Fo(list)16 b(length)g(\(in)o(teger\))75 243 y Fg(OUT)i(index)23
b Fo(index)17 b(of)d(handle)j(for)d(op)q(eration)i(that)e(completed)i(\(in)o
(teger\).)75 341 y Fg(OUT)i(return)p 357 341 V 19 w(handle)23
b Fo(handle)c(that)e(is)i(asso)q(ciated)f(with)g(return)g(status)f(ob)s
(ject.)27 b(Set)18 b(to)f(return)189 398 y(status)d(of)h(op)q(eration)g(that)
g(completed.)166 510 y(The)d(successful)i(execution)f(of)f
Fi(MPI)p 784 510 15 2 v 16 w(WAITANY\(list)p 1088 510 V 16
w(of)p 1152 510 V 17 w(handles,)23 b(index,)g(return)p 1695
510 V 16 w(handle\))75 567 y Fo(has)15 b(the)g(same)g(e\013ect)g(as)g(the)h
(successful)g(execution)h(of)d Fi(MPI)p 1139 567 V 17 w(WAIT\(handle[i],)22
b(return)p 1682 567 V 16 w(handle\))p Fo(,)75 623 y(where)17
b Fi(i)g Fo(is)g(the)g(v)m(alue)h(returned)f(b)o(y)g Fi(index)f
Fo(and)g Fi(handle[i])g Fo(is)h(the)g Fi(i)p Fo(-th)g(handle)h(in)f(the)g
(list,)h(and)75 679 y(the)d(cancelation)i(of)d(all)j(remaining)f(w)o(ait)f
(op)q(erations.)166 737 y(If)21 b(more)g(then)g(one)g(op)q(eration)h(is)f
(enabled)i(and)e(can)g(terminate,)h(one)f(is)h(arbitrarily)g(c)o(hosen)75
794 y(\(sub)s(ject)15 b(to)f(the)i(restrictions)f(on)g(op)q(eration)h
(termination)f(order,)g(and)g(fairness,)g(see)h(Section)g(1.13\).)166
851 y Fi(MPI)p 241 851 V 17 w(WAITANY)23 b(\()g(list)p 592
851 V 17 w(of)p 657 851 V 17 w(handles,)g(len,)g(index,)g(return)p
1319 851 V 16 w(status)p 1479 851 V 17 w(handle\))14 b Fo(is)147
951 y Fi({MPI_WAIT)22 b(\(handle[0],)h(return_handle\);)e(index)j(=)f(0})h
(||)f(...)75 1008 y(||)147 1064 y({MPI_WAIT)f(\(handle[len-1],)g
(return_handle\);)g(index)h(=)h(len-1})166 1163 y Fo(\(\\)p
Fe(jj)p Fo(")13 b(indicates)k(c)o(hoice;)f(one)f(of)g(the)g(alternativ)o(es)h
(is)f(c)o(hosen,)g(nondeterministically)m(.\))166 1256 y Fg(MPI)p
275 1256 16 2 v 18 w(ST)l(A)l(TUSANY)h(\()i(list)p 739 1256
V 20 w(of)p 801 1256 V 19 w(handles,)f(len,)h(index,)f(return)p
1425 1256 V 18 w(handle\))166 1349 y Fo(Causes)12 b(either)h(one)f(or)g(none)
h(of)f(the)g(op)q(erations)g(asso)q(ciated)h(with)f(the)h(comm)o(unication)g
(handles)75 1406 y(to)i(return.)23 b(In)17 b(the)f(former)f(case,)h(it)g(has)
g(the)g(same)g(return)g(seman)o(tics)g(as)g(a)g(call)h(to)e
Fi(MPI)p 1664 1406 15 2 v 17 w(WAIT)p 1777 1406 V 17 w(ANY)p
Fo(.)75 1462 y(In)j(the)g(later)g(case,)f(it)h(returns)g(a)f(v)m(alue)i(of)e
(-1)g(in)i Fi(index)e Fo(and)h Fi(return)p 1343 1462 V 16 w(handle)f
Fo(is)h(unde\014ned.)29 b(The)75 1518 y(parameters)14 b(are:)75
1631 y Fg(IN)j(list)p 225 1631 16 2 v 20 w(of)p 287 1631 V
19 w(handles)23 b Fo(list)16 b(of)f(handles)h(to)f(comm)o(unication)h(ob)s
(jects.)75 1730 y Fg(IN)h(len)23 b Fo(list)16 b(length)g(\(in)o(teger\))75
1828 y Fg(OUT)i(index)23 b Fo(index)18 b(of)e(handle)h(for)f(op)q(eration)h
(that)e(completed,)j(or)e(-1)g(if)h(none)f(completed)i(\(in)o(te-)189
1885 y(ger\).)75 1983 y Fg(OUT)g(return)p 357 1983 V 19 w(handle)23
b Fo(handle)c(that)e(is)i(asso)q(ciated)f(with)g(return)g(status)f(ob)s
(ject.)27 b(Set)18 b(to)f(return)189 2040 y(status)d(of)h(op)q(eration)g
(that)g(completed,)g(if)h(an)o(y;)f(unde\014ned)i(when)e Fi(index)24
b(=)f(-1)p Fo(.)166 2188 y Fg(MPI)p 275 2188 V 18 w(W)-6 b(AIT)l(ALL\(list)p
624 2188 V 20 w(of)p 686 2188 V 19 w(handles,)18 b(len,)f(list)p
1077 2188 V 20 w(of)p 1139 2188 V 19 w(return)p 1304 2188 V
18 w(handles\))166 2281 y Fo(Blo)q(c)o(ks)c(un)o(til)h(all)g(comm)o
(unication)g(op)q(erations)f(asso)q(ciated)g(with)g(handles)h(in)g(the)f
(list)h(complete,)75 2337 y(and)h(return)h(the)f(status)f(of)h(all)h(these)f
(op)q(erations.)20 b(The)c(parameters)e(are:)75 2450 y Fg(IN)j(list)p
225 2450 V 20 w(of)p 287 2450 V 19 w(handles)23 b Fo(list)16
b(of)f(handles)h(to)f(comm)o(unication)h(ob)s(jects.)75 2548
y Fg(IN)h(len)23 b Fo(lists)16 b(length)g(\(in)o(teger\))75
2647 y Fg(OUT)i(list)p 280 2647 V 20 w(of)p 342 2647 V 19 w(return)p
507 2647 V 18 w(handles)24 b Fo(Must)18 b(ha)o(v)o(e)h(the)g(same)g(length)g
(as)g(the)g(\014rst)g(list.)32 b(Eac)o(h)19 b(return)189 2704
y(status)12 b(ob)s(ject)g(is)i(set)e(to)h(the)g(return)f(status)h(of)f(the)h
(corresp)q(onding)h(op)q(eration)f(in)h(the)f(\014rst)g(list.)p
eop
%%Page: 21 22
bop 75 -100 a Fh(1.9.)34 b(BLOCKING)17 b(COMMUNICA)l(TION)966
b Fo(21)166 45 y Fm(Discussion:)166 96 y Fl(The)14 b(fairness)f(requiremen)o
(t)g(giv)o(en)g(in)g(Section)g(1.13)f(implies)g(that)h(the)h(use)g(of)e
Ff(WAIT)p 1525 96 14 2 v 15 w(ANY)h Fl(cannot)g(lead)g(to)75
145 y(starv)n(ation:)21 b(If)15 b(the)h(sending)g(pro)q(cess)h(has)f(issued)g
(a)f(send)i(complete)d(op)q(eration,)i(and)f(the)h(receiving)g(pro)q(cess)75
195 y(rep)q(eatedly)21 b(p)q(ost)f(a)g(receiv)o(e)h(for)e(the)h(message)g
(sen)o(t,)h(then)g(that)e(message)h(m)o(ust)f(b)q(e)h(ev)o(en)o(tually)f
(receiv)o(ed.)75 245 y(Section)c(1.13)e(has)i(not)f(y)o(et)h(b)q(een)h
(discussed.)21 b(The)15 b(fairness)g(requiremen)o(t)g(can)f(b)q(e)i(attac)o
(k)o(ed)e(either)i(for)e(b)q(eing)75 295 y(to)q(o)j(w)o(eak)h(\(ev)o(en)o
(tually)f(is)g(not)g(go)q(o)q(d)g(enough\),)h(or)g(to)q(o)f(strong)h(\(hard)f
(to)g(implemen)o(t\).)26 b(In)18 b(the)g(later)f(case,)75 345
y(if)d(the)h(requiremen)o(t)g(of)f(fairness)h(is)g(drop)q(ed)h(from)d(MPI)i
(implem)o(en)o(tations,)d(then)j(some)f(mec)o(hanism)f(need)i(b)q(e)75
394 y(pro)o(vided)k(to)g(the)g(user)h(to)f(ac)o(hiev)o(e)g(fairness)h(b)o(y)e
(his)h(or)g(her)h(o)o(wn)e(devices.)35 b(One)19 b(suc)o(h)h(prop)q(osal)f(is)
g(to)f(b)q(e)75 444 y(able)c(to)g(sp)q(ecify)g(a)g(rotating)g(priorit)o(y)f
(order)i(on)f(the)g(op)q(erations)h(p)q(osted)g(b)o(y)f(a)f
Ff(MPI)p 1431 444 V 15 w(WAITANY)p Fl(:)g(searc)o(h)i(the)f(list)75
494 y(sequen)o(tially)m(,)e(starting)i(form)e(a)i(user)h(sp)q(eci\014ed)g(p)q
(osition.)75 724 y Fn(1.9)70 b(Blo)r(c)n(king)21 b(Comm)n(unication)75
827 y Fo(Blo)q(c)o(king)g(send)e(and)h(receiv)o(e)g(op)q(erations)f(com)o
(bine)h(all)h(comm)o(unication)f(sub)q(op)q(erations)g(in)o(to)f(one)75
883 y(call.)h(The)12 b(op)q(eration)h(returns)f(only)g(when)h(the)f(comm)o
(unication)h(completes)g(and)f(no)g(comm)o(unication)75 940
y(ob)s(ject)19 b(p)q(ersists)i(after)e(the)i(call)g(completed.)35
b(Ho)o(w)o(ev)o(er,)20 b(the)g(bu\013er)g(descriptor)h(ob)s(ject)e(needs)i(b)
q(e)75 996 y(created)15 b(ahead)h(of)e(the)i(call.)166 1053
y(W)l(e)f(use)h(the)f(follo)o(wing)h(naming)g(con)o(v)o(en)o(tion)f(for)f
(suc)o(h)i(op)q(erations:)782 1116 y Fa(2)782 1189 y(6)782
1216 y(4)833 1156 y Fe(\000)831 1213 y Fg(R)836 1269 y(S)891
1116 y Fa(3)891 1189 y(7)891 1216 y(5)926 1141 y(")975 1185
y Fg(SEND)971 1241 y(RECV)1143 1141 y Fa(#)166 1375 y Fo(The)i(\014rst)f
(letter)h(\(v)o(oid,)g Fg(R)g Fo(or)g Fg(S)p Fo(\))f(indicates)j(the)d(start)
g(mo)q(de)h(\(standard,)g(ready)l(,)g(or)f(secure\).)75 1432
y(Only)f(t)o(w)o(o)e(of)h(the)g(com)o(binations)h(\(standard)f(and)g
(secure\))g(are)g(meaningful)i(for)d(receiv)o(es.)166 1524
y Fg(MPI)p 275 1524 16 2 v 18 w(SEND)k(\(bu\013er)p 609 1524
V 19 w(handle,)g(dest,)f(tag,)h(con)o(text\))d Fo(is)75 1657
y Fi(MPI_INIT_SEND\(handle,)21 b(buffer_handle,)h(dest,)h(tag,)g(context,)g
(MPI_REGULAR,)f(MPI_EPHEMERAL\))75 1713 y(MPI_START\(handle\))75
1770 y(MPI_WAIT\(handle,)g(null\))166 1902 y Fg(MPI)p 275 1902
V 18 w(RSEND)c(\(bu\013er)p 648 1902 V 19 w(handle,)g(dest,)f(tag,)h(con)o
(text\))d Fo(is)75 2034 y Fi(MPI_INIT_SEND\(handle,)21 b(buffer_handle,)h
(dest,)h(tag,)g(context,)g(MPI_READY,)g(MPI_EPHEMERAL\))75
2091 y(MPI_START\(handle\))75 2147 y(MPI_WAIT\(handle,)f(null\))166
2279 y Fg(MPI)p 275 2279 V 18 w(SSEND)c(\(bu\013er)p 638 2279
V 19 w(handle,)g(dest,)f(tag,)h(con)o(text\))d Fo(is)75 2412
y Fi(MPI_INIT_SEND\(handle,)21 b(buffer_handle,)h(dest,)h(tag,)g(context,)g
(MPI_SECURE,)g(MPI_EPHEMERAL\))75 2468 y(MPI_START\(handle\))75
2525 y(MPI_WAIT\(handle,)f(null\))166 2657 y Fg(MPI)p 275 2657
V 18 w(RECV\(bu\013er)p 598 2657 V 19 w(handle,)c(source,)e(tag,)i(con)o
(text,)f(return)p 1427 2657 V 19 w(handle\))f Fo(is)p eop
%%Page: 22 23
bop 75 -100 a Fo(22)608 b Fh(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 45 y Fi(MPI_INIT_RECV\(handle,)21
b(buffer_handle,)h(source,)h(tag,)g(context,)g(MPI_STANDARD,)f
(MPI_EPHEMERAL\))75 102 y(MPI_START\(handle\))75 158 y
(MPI_WAIT\(handle,return_han)o(dle\))166 288 y Fg(MPI)p 275
288 16 2 v 18 w(SRECV\(bu\013er)p 627 288 V 19 w(handle,)c(source,)e(tag,)i
(con)o(text,)f(return)p 1456 288 V 19 w(handle\))f Fo(is)75
417 y Fi(MPI_INIT_RECV\(handle,)21 b(buffer_handle,)h(source,)h(tag,)g
(context,)g(MPI_SECURE,)f(MPI_EPHEMERAL\))75 474 y(MPI_START\(handle\))75
530 y(MPI_WAIT\(handle,return_han)o(dle\))166 700 y Fm(Implemen)o(tati)o(on)
12 b(note:)166 750 y Fl(While)f(these)i(functions)f(can)h(b)q(e)f(implemen)o
(ted)e(via)h(calls)h(to)f(functions)h(that)g(implemen)o(t)e(sub)q(op)q
(erations,)75 800 y(as)k(describ)q(ed)h(in)e(this)g(subsection,)i(an)e
(e\016cien)o(t)h(implemen)o(tatio)o(n)d(ma)o(y)g(optimize)h(a)o(w)o(a)o(y)h
(these)i(m)o(ultiple)c(calls,)75 850 y(pro)o(vided)j(it)f(do)q(es)i(not)f(c)o
(hange)g(the)g(b)q(eha)o(vior)g(of)f(correct)j(programs.)75
1076 y Fn(1.10)70 b(Non)n(blo)r(c)n(king)22 b(Comm)n(unication)75
1178 y Fo(Non)o(blo)q(c)o(king)f(send)f(and)f(receiv)o(e)i(op)q(erations)f
(com)o(bine)g(the)g(\014rst)f(t)o(w)o(o)f(sub)q(op)q(erations)i(\()p
Fi(INIT)f Fo(and)75 1234 y Fi(START)p Fo(\))c(in)o(to)g(one)h(call.)22
b(They)16 b(use)g(ephemeral)h(comm)o(unication)f(ob)s(jects,)f(so)g(that)g
(the)h(op)q(eration)f(is)75 1291 y(completed,)g(and)g(the)g(asso)q(ciated)f
(resources)h(are)f(freed,)h(b)o(y)f(using)h(one)g(of)f(the)h(functions)g
Fi(MPI)p 1742 1291 15 2 v 17 w(WAIT,)75 1347 y(MPI)p 150 1347
V 17 w(STATUS,)23 b(MPI)p 430 1347 V 16 w(WAITANY,)g(MPI)p
733 1347 V 17 w(STATUSANY)p Fo(,)c(or)i Fi(MPI)p 1132 1347
V 17 w(WAITALL)p Fo(.)e(Here,)j(to)q(o,)g(a)f(bu\013er)g(ob)s(ject)75
1403 y(has)15 b(to)g(b)q(e)g(created)h(ahead)f(of)g(the)g(comm)o(unication)h
(initiation)h(op)q(eration.)166 1460 y(W)l(e)d(use)h(the)f(same)g(naming)g
(con)o(v)o(en)o(tion)g(as)g(for)f(blo)q(c)o(king)j(op)q(erations:)j(a)14
b(pre\014x)h(of)e Fg(R)i Fo(\()p Fg(S)p Fo(\))e(indi-)75 1516
y(cates)h(the)g Fi(READY)g Fo(\()p Fg(SECURE)p Fo(\))g(mo)q(de.)20
b(In)15 b(addition,)g(a)f(pre\014x)h(of)f Fg(I)g Fo(is)g(used)h(to)f
(indicate)i Fj(imme)n(diate)75 1573 y Fo(\(i.e.,)f(non)o(blo)q(c)o(king\))h
(execution.)166 1665 y Fg(MPI)p 275 1665 16 2 v 18 w(ISEND)i(\(handle,)g
(bu\013er)p 812 1665 V 19 w(handle,)g(dest,)f(tag,)g(con)o(text\))f
Fo(is)75 1794 y Fi(MPI_INIT_SEND\(handle,)21 b(buffer_handle,)h(dest,)h(tag,)
g(context,)g(MPI_STANDARD,)f(MPI_EPHEMERAL\))75 1851 y(MPI_START\(handle\))
166 1980 y Fg(MPI)p 275 1980 V 18 w(IRSEND)c(\(handle,)g(bu\013er)p
851 1980 V 19 w(handle,)g(dest,)f(tag,)h(con)o(text\))d Fo(is)75
2110 y Fi(MPI_INIT_SEND\(handle,)21 b(buffer_handle,)h(dest,)h(tag,)g
(context,)g(MPI_READY,)g(MPI_EPHEMERAL\))75 2167 y(MPI_START\(handle\))166
2296 y Fg(MPI)p 275 2296 V 18 w(ISSEND)18 b(\(handle,)g(bu\013er)p
841 2296 V 19 w(handle,)g(dest,)f(tag,)g(con)o(text\))f Fo(is)75
2426 y Fi(MPI_INIT_SEND\(handle,)21 b(buffer_handle,)h(dest,)h(tag,)g
(context,)g(MPI_SECURE,)g(MPI_EPHEMERAL\))75 2482 y(MPI_START\(handle\))166
2612 y Fg(MPI)p 275 2612 V 18 w(IRECV\(handle,)13 b(bu\013er)p
796 2612 V 19 w(handle,)g(source,)f(tag,)h(con)o(text,)g(return)p
1607 2612 V 18 w(status)p 1761 2612 V 19 w(handle\))75 2668
y Fo(is)p eop
%%Page: 23 24
bop 75 -100 a Fh(1.11.)34 b(CONTIGUOUS)16 b(BLOCK)g(SENDING)g(OPERA)l(TIONS)
586 b Fo(23)75 45 y Fi(MPI_INIT_RECV\(handle,)21 b(buffer_handle,)h(source,)h
(tag,)g(context,)g(MPI_STANDARD,)f(MPI_EPHEMERAL\))75 102 y
(MPI_START\(handle\))166 238 y Fg(MPI)p 275 238 16 2 v 18 w(ISRECV\(handle,)
13 b(bu\013er)p 825 238 V 19 w(handle,)g(source,)f(tag,)h(con)o(text,)g
(return)p 1636 238 V 18 w(status)p 1790 238 V 19 w(handle\))75
294 y Fo(is)75 432 y Fi(MPI_INIT_RECV\(handle,)21 b(buffer_handle,)h(source,)
h(tag,)g(context,)g(MPI_SECURE,)f(MPI_EPHEMERAL\))75 488 y
(MPI_START\(handle\))75 641 y Fn(1.11)70 b(Con)n(tiguous)23
b(Blo)r(c)n(k)f(Sending)h(Op)r(erations)75 746 y Fo(The)e(most)f(frequen)o(t)
h(t)o(yp)q(e)f(of)h(bu\013er)g(used)g(is)g(a)g(bu\013er)f(with)h(one)g(con)o
(tiguous)g(comp)q(onen)o(t.)37 b(W)l(e)75 802 y(sp)q(ecialize)17
b(the)d(functions)h(in)g(the)f(t)o(w)o(o)f(previous)i(subsections)g(to)f
(this)g(case,)g(th)o(us)g(a)o(v)o(oiding)h(the)f(need)75 859
y(for)h(the)g(creation)h(of)f(a)g(bu\013er)g(descriptor)h(ob)s(ject.)k(W)l(e)
c(use)f(the)h(same)f(naming)h(sc)o(heme)g(used)g(in)g(the)75
915 y(previous)g(subsections,)g(and)f(app)q(end)h(a)f Fg(C)g
Fo(in)h(the)g(function)g(name,)e(for)h Fi(CONTIGUOUS)p Fo(.)166
1009 y Fg(MPI)p 275 1009 V 18 w(SENDC)i(\(start,)h(len,)f(t)o(yp)q(e,)g
(dest,)g(tag,)h(con)o(text\))e Fo(is)75 1146 y Fi
(MPI_CREATE_BUFFER\(buffer_h)o(andle,)k(MPI_EPHEMERAL\))75
1203 y(MPI_ADD\(buffer_handle,)h(start,)i(len,)g(type\))75
1259 y(MPI_SEND)g(\(buffer_handle,)f(len,)h(dest,)g(tag,)g(context\))166
1395 y Fg(MPI)p 275 1395 V 18 w(RSENDC)18 b(\(handle,)g(start,)f(len,)h(t)o
(yp)q(e,)e(dest,)h(tag,)h(con)o(text\))e Fo(is)75 1533 y Fi
(MPI_CREATE\(buffer_handle,)k(MPI_BUFFER,)j(MPI_EPHEMERAL\))75
1590 y(MPI_ADD\(buffer_handle,)e(start,)i(len,)g(type\))75
1646 y(MPI_RSEND)g(\(buffer_handle,)e(len,)j(dest,)f(tag,)g(context\))166
1782 y Fg(MPI)p 275 1782 V 18 w(SSENDC)18 b(\(handle,)g(start,)f(len,)g(t)o
(yp)q(e,)g(dest,)g(tag,)h(con)o(text\))e Fo(is)75 1920 y Fi
(MPI_CREATE\(buffer_handle,)k(MPI_BUFFER,)j(MPI_EPHEMERAL\))75
1976 y(MPI_ADD\(buffer_handle,)e(start,)i(len,)g(type\))75
2033 y(MPI_SSEND)g(\(buffer_handle,)e(len,)j(dest,)f(tag,)g(context\))166
2169 y Fg(MPI)p 275 2169 V 18 w(RECV)o(C)18 b(\(start,)i(len,)g(t)o(yp)q(e,)f
(source,)g(tag,)h(con)o(text,)f(return)p 1533 2169 V 19 w(status)p
1688 2169 V 19 w(handle\))75 2225 y Fo(is)75 2363 y Fi
(MPI_CREATE\(buffer_handle,)h(MPI_BUFFER,)j(MPI_EPHEMERAL\))75
2419 y(MPI_ADD\(buffer_handle,)e(start,)i(len,)g(type\))75
2476 y(MPI_RECV\(buffer_handle,)e(source,)i(tag,)g(context,)g
(return_status_handle\))166 2612 y Fg(MPI)p 275 2612 V 18 w(SRECV)o(C)14
b(\(start,)i(len,)f(t)o(yp)q(e,)g(source,)g(tag,)h(con)o(text,)f(return)p
1533 2612 V 19 w(status)p 1688 2612 V 19 w(handle\))75 2668
y Fo(is)p eop
%%Page: 24 25
bop 75 -100 a Fo(24)608 b Fh(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 45 y Fi(MPI_CREATE\(buffer_handle,)k
(MPI_BUFFER,)j(MPI_EPHEMERAL\))75 102 y(MPI_ADD\(buffer_handle,)e(start,)i
(len,)g(type\))75 158 y(MPI_SRECV\(buffer_handle,)e(source,)h(tag,)i
(context,)f(return_status_handle\))166 281 y Fg(MPI)p 275 281
16 2 v 18 w(ISENDC)17 b(\(handle,)i(start,)e(len,)g(t)o(yp)q(e,)g(dest,)g
(tag,)h(con)o(text\))d Fo(is)75 404 y Fi(MPI_CREATE\(buffer_handle,)20
b(MPI_BUFFER,)j(MPI_EPHEMERAL\))75 460 y(MPI_ADD\(buffer_handle,)e(start,)i
(len,)g(type\))75 517 y(MPI_ISEND\(handle,)f(buffer_handle,)f(dest,)j(tag,)f
(context\))166 640 y Fg(MPI)p 275 640 V 18 w(IRSENDC)17 b(\(handle,)i(start,)
e(len,)g(t)o(yp)q(e,)g(dest,)g(tag,)h(con)o(text\))e Fo(is)75
763 y Fi(MPI_CREATE\(buffer_handle,)k(MPI_BUFFER,)j(MPI_EPHEMERAL\))75
819 y(MPI_ADD\(buffer_handle,)e(start,)i(len,)g(type\))75 876
y(MPI_IRSEND\(handle,)e(buffer_handle,)h(dest,)i(tag,)f(context\))166
999 y Fg(MPI)p 275 999 V 18 w(ISSENDC)17 b(\(handle,)i(start,)e(len,)g(t)o
(yp)q(e,)g(dest,)g(tag,)h(con)o(text\))d Fo(is)75 1121 y Fi
(MPI_CREATE\(buffer_handle,)20 b(MPI_BUFFER,)j(MPI_EPHEMERAL\))75
1178 y(MPI_ADD\(buffer_handle,)e(start,)i(len,)g(type\))75
1234 y(MPI_ISSEND\(handle,)e(buffer_handle,)h(dest,)i(tag,)f(context\))166
1357 y Fg(MPI)p 275 1357 V 18 w(IRECV)o(C\(handle,)12 b(start,)h(len,)g(t)o
(yp)q(e,)f(source,)g(tag,)h(con)o(text,)f(return)p 1670 1357
V 19 w(status)p 1825 1357 V 19 w(handle\))75 1414 y Fo(is)75
1537 y Fi(MPI_CREATE\(buffer_handle,)20 b(MPI_BUFFER,)j(MPI_EPHEMERAL\))75
1593 y(MPI_ADD\(buffer_handle,)e(start,)i(len,)g(type\))75
1650 y(MPI_IRECV\(handle,)f(buffer_handle,)f(source,)i(tag,)h(context\))166
1773 y Fg(MPI)p 275 1773 V 18 w(ISRECV)o(C\(handle,)13 b(start,)f(len,)h(t)o
(yp)q(e,)f(source,)g(tag,)h(con)o(text,)g(return)p 1700 1773
V 18 w(status)p 1854 1773 V 19 w(handle\))75 1829 y Fo(is)75
1952 y Fi(MPI_CREATE\(buffer_handle,)20 b(MPI_BUFFER,)j(MPI_EPHEMERAL\))75
2008 y(MPI_ADD\(buffer_handle,)e(start,)i(len,)g(type\))75
2065 y(MPI_ISRECV\(handle,)e(buffer_handle,)h(source,)h(tag,)h(context\))75
2207 y Fn(1.12)70 b(Prob)r(e)23 b(and)h(Cancel)75 2308 y Fo(The)14
b Fi(MPI)p 242 2308 15 2 v 16 w(PROBE)f Fo(op)q(eration)g(allo)o(ws)h(to)e(c)
o(hec)o(k)i(for)f(incoming)h(messages,)f(without)g(actually)h(receiving)75
2365 y(them.)20 b(The)c(user)f(can)h(then)f(decide)i(where)f(to)f(receiv)o(e)
h(them,)f(based)g(on)h(the)f(information)h(returned)75 2421
y(b)o(y)f(the)f(prob)q(e)h(\(basically)l(,)h(the)f(information)g(on)f(the)h
(message)f(en)o(v)o(elop)q(e\).)21 b(An)14 b(additional)i(function,)75
2478 y Fi(MPI)p 150 2478 V 17 w(GET)p 239 2478 V 17 w(LEN)d
Fo(allo)o(ws)h(to)f(compute)h(the)g(amoun)o(t)f(of)h(storage)e(needed)j(to)e
(receiv)o(e)i(the)f(message,)f(when)75 2534 y(this)j(length)g(is)f(not)g
(readily)h(computed)g(from)e(the)i(information)f(returned)h(b)o(y)f
Fi(MPI)p 1544 2534 V 17 w(PROBE)p Fo(.)166 2591 y(The)g Fi(MPI)p
334 2591 V 17 w(CANCEL)f Fo(op)q(eration)i(allo)o(ws)f(to)g(cancel)h(p)q
(ending)h(comm)o(unications.)j(This)c(is)g(required)75 2647
y(for)f(clean)o(up.)22 b(P)o(osting)16 b(a)f(send)h(or)f(a)h(receiv)o(e)g
(ties)g(user)g(resources)g(\(send)g(or)f(receiv)o(e)h(bu\013ers\),)f(and)h(a)
75 2704 y(cancel)g(ma)o(y)f(b)q(e)h(needed)g(to)f(free)g(these)g(resources)h
(gracefully)l(.)p eop
%%Page: 25 26
bop 75 -100 a Fh(1.12.)34 b(PR)o(OBE)16 b(AND)f(CANCEL)1138
b Fo(25)166 45 y Fg(MPI)p 275 45 16 2 v 18 w(PR)o(OBE\()18
b(source,)e(tag,)i(con)o(text,)f(\015ag,)h(t)o(yp)q(e,)f(return)p
1388 45 V 18 w(status\))75 190 y(IN)g(source)22 b Fo(rank)15
b(in)h(con)o(text)f(of)g(source,)g(or)f Fi(MPI)p 974 190 15
2 v 17 w(ANY)p 1063 190 V 17 w(SOURCE)g Fo(\(in)o(teger\).)75
286 y Fg(IN)j(tag)24 b Fo(user)15 b(tag)f(for)h(messages)g(receiv)o(ed)h
(with)g(this)f(handle,)h(or)f Fi(MPI)p 1341 286 V 17 w(ANY)p
1430 286 V 16 w(TAG)g Fo(\(in)o(teger\).)75 382 y Fg(IN)i(con)o(text)23
b Fo(con)o(text)15 b(of)f(messages)h(receiv)o(ed)h(with)g(this)g(handle.)75
479 y Fg(OUT)i(\015ag)24 b Fo(\(logical\))75 575 y Fg(IN)17
b(t)o(yp)q(e)23 b Fo(assumed)15 b(t)o(yp)q(e)g(of)g(data)g(in)h(message)e
(\(status)g(v)m(ariable\).)75 671 y Fg(OUT)k(return)p 357 671
16 2 v 19 w(handle)23 b Fo(handle)17 b(that)d(is)i(asso)q(ciated)f(with)h
(return)f(status)f(ob)s(ject.)166 781 y Fi(MPI)p 241 781 15
2 v 17 w(PROBE)h Fo(returns)g Fi(flag)24 b(=)f(true)15 b Fo(if)i(a)e(there)h
(is)g(a)f(message)h(that)f(can)h(b)q(e)g(receiv)o(ed)h(and)f(that)75
837 y(matc)o(hes)k(the)g(pattern)g(sp)q(eci\014ed)j(b)o(y)d(the)g(parameters)
g Fi(source)p Fo(,)g Fi(tag)p Fo(,)h(and)f Fi(context)p Fo(.)35
b(It)20 b(returns)75 894 y Fi(flag)j(=)h(false)p Fo(,)15 b(otherwise.)21
b(If)15 b Fi(MPI)p 731 894 V 17 w(PROBE)g Fo(returns)g Fi(flag)24
b(=)f(true)p Fo(,)15 b(then)h(the)f(length,)h(source)g(and)75
950 y(tag)g(of)g(the)h(message)g(matc)o(hed)g(are)f(returned)h(in)h(the)f
(return)g(status)f(ob)s(ject.)24 b(These)18 b(are)e(the)h(same)75
1007 y(v)m(alues)i(that)d(w)o(ould)i(ha)o(v)o(e)f(b)q(een)i(returned)f(b)o(y)
f(a)h(call)g(to)f Fi(MPI)p 1176 1007 V 17 w(RECV)g Fo(or)g(to)g
Fi(MPI)p 1494 1007 V 16 w(SRECV)g Fo(executed)i(at)75 1063
y(the)d(same)f(p)q(oin)o(t)h(in)h(the)f(program)e(\(with)i(a)f(ca)o(v)o(eat)g
(concerning)i(length;)f(see)g(b)q(elo)o(w\).)22 b(These)16
b(v)m(alues)75 1119 y(can)j(b)q(e)h(deco)q(ded)g(from)e(the)h(return)g
(status)f(ob)s(ject)g(using)i(the)f Fi(MPI)p 1302 1119 V 16
w(RETURN)p 1462 1119 V 17 w(STAT)f Fo(function.)32 b(The)75
1176 y(v)m(alue)16 b(returned)g(in)g(the)f(return)g(status)g(ob)s(ject)f(is)i
(unde\014ned)h(if)f Fi(flag=false)p Fo(.)166 1233 y(The)21
b(length)g(v)m(alue)h(returned)g(b)o(y)e(the)h(return)g(status)f(ob)s(ject)g
(is)h(\(correctly\))f(the)h(n)o(um)o(b)q(er)g(of)75 1289 y(elemen)o(ts)14
b(in)h(the)f(message,)f(pro)o(vided)i(that)e(all)h(elemen)o(ts)h(in)f(the)g
(message)f(are)h(of)f(the)h(t)o(yp)q(e)g(sp)q(eci\014ed)75
1346 y(b)o(y)h(the)g Fi(type)g Fo(parameter;)f(otherwise)h(the)h(length)g(v)m
(alue)g(returned)g(is)f(unde\014ned.)166 1403 y(A)e(subsequen)o(t)i(receiv)o
(e)f(executed)g(with)g(the)g(same)f(con)o(text,)g(and)g(the)h(source)f(and)h
(tag)f(returned)75 1459 y(b)o(y)f(the)g(call)i(to)d Fi(MPI)p
418 1459 V 17 w(PROBE)g Fo(will)j(receiv)o(e)f(the)g(message)e(that)h(w)o(as)
f(matc)o(hed)h(b)o(y)g(the)h(prob)q(e,)g(if)f(no)g(other)75
1516 y(in)o(terv)o(ening)k(receiv)o(e)g(o)q(ccurred)f(after)f(the)h(prob)q
(e.)21 b(If)15 b(the)g(receiving)h(pro)q(cess)f(is)h(m)o(ultithreaded,)f(it)g
(is)75 1572 y(the)g(user)h(resp)q(onsibilit)o(y)h(to)e(ensure)h(that)e(the)h
(last)h(condition)g(holds.)166 1705 y Fm(Discussion:)166 1756
y Fl(Do)g(w)o(e)g(w)o(an)o(t)g Ff(MPI)p 471 1756 14 2 v 15
w(PROBE)f Fl(to)i(return)g(mo)q(de)e(\(standard)i(or)g(secure\)?)27
b(If)16 b(y)o(es,)h(w)o(e)g(need)g(to)f(carry)h(mo)q(de)75
1806 y(information)c(with)i(messages)g(\(it's)g(deja)h(vu)f(all)f(o)o(v)o(er)
i(again\).)21 b(If)15 b(not,)h(then)g(it)f(is)g(up)g(to)h(the)g(user)g(to)g
(enco)q(de)75 1856 y(this)e(information)d(\(in)i(the)i(tag\))f(so)g(that)g
(receiv)o(er)h(can)f(decide)h(whether)g(to)f(use)h(a)e(secure)j(or)e
(standard)g(send.)166 1906 y(MPI)h(guaran)o(tees)g(that)g(successiv)o(e)i
(messages)e(sen)o(t)h(from)d(a)h(source)i(to)f(a)f(destination)h(within)e
(the)j(same)75 1956 y(con)o(text)21 b(are)g(receiv)o(ed)h(in)e(the)h(order)g
(they)g(are)g(sen)o(t.)39 b(Th)o(us,)22 b(MPI)e(m)o(ust)g(supp)q(ort,)i
(either)g(explicitly)d(or)75 2006 y(implicitly)l(,)13 b(a)i(FIF)o(O)h
(structure)i(to)d(manage)f(messages)i(b)q(et)o(w)o(een)h(eac)o(h)f(pair)f(of)
g(messages,)g(for)h(eac)o(h)g(con)o(text.)75 2055 y Ff(MPI)p
144 2055 V 15 w(PROBE)h Fl(returns)i(information)c(on)j(the)h(\014rst)f(matc)
o(hing)e(message)i(in)f(this)h(FIF)o(O;)g(this)g(will)f(also)g(b)q(e)h(the)75
2105 y(message)i(receiv)o(ed)i(b)o(y)e(the)h(\014rst)h(subsequen)o(t)g
(receiv)o(e)g(with)e(the)h(same)e(source,)k(tag)d(and)h(con)o(text)g(as)f
(the)75 2155 y(message)14 b(matc)o(hed)f(b)o(y)g Ff(MPI)p 528
2155 V 16 w(PROBE)p Fl(.)166 2205 y(Message)g(passing)f(in)g(MPI)g(can)h(b)q
(e)g(implem)o(en)o(ted)d(without)i(app)q(ending)g(t)o(yp)q(e)h(information)c
(to)j(messages.)75 2255 y(A)h(message)h(is)f(merely)f(a)h(string)h(of)f(b)o
(ytes)h(and)f(the)h(in)o(terpretation)g(of)e(these)j(b)o(ytes)f(in)o(to)f(a)g
(sequence)j(of)c(t)o(yp)q(ed)75 2305 y(elemen)o(ts)18 b(is)g(done)g(using)g
(the)g(information)d(in)j(the)g(bu\013er)h(descriptors)h(at)e(eac)o(h)g(end.)
31 b(The)18 b(abilit)o(y)e(to)i(use)75 2355 y(suc)o(h)g(implem)o(en)o(tation)
c(strategy)j(is)g(deemed)g(to)g(b)q(e)g(an)g(imp)q(ortan)o(t)e(goal.)25
b(In)17 b(suc)o(h)h(implemen)o(tatio)o(n,)c(when)75 2405 y(a)j(message)g
(arriv)o(es,)h(it)f(is)g(not)g(b)q(e)g(kno)o(wn)g(ho)o(w)g(man)o(y)e(elemen)o
(ts)i(it)g(con)o(tains,)h(or)f(ev)o(en)h(ho)o(w)f(m)o(uc)o(h)f(storage)75
2455 y(is)e(needed)h(to)f(receiv)o(e)h(that)f(message)f(\(b)q(ecause)j(of)d
(p)q(ossible)h(represen)o(tation)i(con)o(v)o(ersion)e(in)f(a)h(heterogeneous)
75 2504 y(en)o(vironmen)o(t\).)i(The)c(prob)q(e)f(function)g(cannot)g(use)h
(a)f(bu\013er)h(descriptor;)h(this)e(defeats)h(the)g(purp)q(ose)g(of)f
(probing)75 2554 y(in)k(order)h(to)g(decide)g(where)h(to)e(receiv)o(e)i(a)e
(message.)23 b(Therefore,)17 b(prob)q(e)f(cannot,)g(in)f(general,)h(return)g
(correct)75 2604 y(length)i(information.)29 b(Still,)18 b(it)g(is)g(often)h
(the)g(case)g(that)g(prob)q(e)g(is)f(used)h(to)g(decide)g(ho)o(w)f(m)o(uc)o
(h)f(storage)i(to)75 2654 y(allo)q(cate)14 b(in)g(order)h(to)f(receiv)o(e)i
(a)e(message.)20 b(Enco)q(ding)14 b(suc)o(h)h(information)d(in)i(the)h
(message)f(tag)g(is)h(deemed)f(to)75 2704 y(b)q(e)d(to)q(o)f(akw)o(ard,)g
(and)g(it)g(is)g(deemed)g(imp)q(ortan)o(t)e(for)i Ff(MPI)p
971 2704 V 15 w(PROBE)g Fl(to)g(return)h(some)e(useful)i(size)g(information.)
j(The)p eop
%%Page: 26 27
bop 75 -100 a Fo(26)608 b Fh(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 45 y Fl(curren)o(t)d(de\014nition)e(of)f
Ff(MPI)p 512 45 14 2 v 15 w(PROBE)g Fl(is)i(a)e(compromise)f(b)q(et)o(w)o
(een)k(these)g(t)o(w)o(o)e(goals.)16 b(F)m(or)11 b(the)h(most)e(common)e
(case)75 95 y(of)13 b(messages)g(where)i(all)d(en)o(tries)j(ha)o(v)o(e)e(the)
h(same)f(t)o(yp)q(e)h Ff(MPI)p 1039 95 V 15 w(PROBE)f Fl(returns)i(the)f
(correct)h(length)e(information;)75 145 y(the)h(more)f(esoteric)i(case)f(is)g
(handled)f(b)o(y)g(the)i Ff(MPI)p 883 145 V 15 w(GET)p 964
145 V 15 w(LEN)e Fl(that)g(is)h(describ)q(ed)h(b)q(elo)o(w.)j(The)c(curren)o
(t)h(solution)75 195 y(sa)o(v)o(es)h(us)f(the)h(need)g(for)f(one)g
(additional)f(w)o(ord)h(p)q(er)h(message)f(that)g(w)o(ould)f(otherwise)j(b)q
(e)e(needed)i(to)e(transfer)75 244 y(the)f(message)g(length)g(\(in)f(elemen)o
(ts\))h(with)g(the)g(message.)166 426 y Fg(MPI)p 275 426 16
2 v 18 w(GET)p 404 426 V 20 w(LEN\()k(len,)f(return)p 813 426
V 19 w(status,)g(bu\013er)p 1134 426 V 19 w(descriptor\))166
524 y Fo(Computes)g(the)h(n)o(um)o(b)q(er)h(of)e(elemen)o(ts)i(that)e(w)o
(ould)h(b)q(e)h(receiv)o(ed,)g(if)f(the)g(message)g(that)f(is)h(as-)75
580 y(so)q(ciated)e(with)h(the)f(return)f(status)g(handle)i(w)o(ould)g(b)q(e)
f(receiv)o(ed)h(in)g(the)f(bu\013er)g(asso)q(ciated)g(with)g(the)75
637 y(bu\013er)f(descriptor)h(handle.)75 757 y Fg(OUT)i(len)24
b Fo(n)o(um)o(b)q(er)15 b(of)g(elemen)o(ts)h(that)e(w)o(ould)i(b)q(e)g
(receiv)o(ed)g(\(in)o(teger\))75 877 y Fg(IN)h(return)p 302
877 V 18 w(status)23 b Fo(handle)17 b(to)d(return)i(status)e(descriptor)75
998 y Fg(IN)j(bu\013er)p 290 998 V 19 w(descriptor)23 b Fo(handle)16
b(to)f(bu\013er)g(descriptor)166 1194 y Fm(Discussion:)166
1250 y Fl(In)f(order)g(to)g(supp)q(ort)g(this)g(function,)f(and)h(additional)
e(\014eld)i(is)f(needed)j(to)d(in)h(the)g(return)h(status)g(ob)r(ject,)75
1300 y(e.g.,)10 b(n)o(um)o(b)q(er)f(of)g(b)o(ytes)i(in)f(the)h(incoming)c
(message)j(matc)o(hed)g(b)o(y)g(prob)q(e,)h(or)f(v)n(alue)f(of)h(t)o(yp)q(e)g
(parameter)g(pro)o(vided)75 1350 y(b)o(y)k(prob)q(e)g(\(unless)h(w)o(e)f(add)
g(this)g(parameter)f(to)h(the)h Ff(MPI)p 1001 1350 14 2 v 15
w(GET)p 1082 1350 V 15 w(LEN)e Fl(function,)g(whic)o(h)h(is)g(to)q(o)f(ugly)g
(to)h(b)q(ear\).)166 1531 y Fg(MPI)p 275 1531 16 2 v 18 w(CANCEL\()j(handle,)
h(\015ag\))75 1706 y(IN)f(handle)24 b Fo(handle)16 b(to)f(comm)o(unication)h
(ob)s(ject)75 1826 y Fg(OUT)i(\015ag)24 b Fo(\(logical\))166
1966 y(A)19 b(call)i(to)e Fi(MPI)p 442 1966 15 2 v 17 w(CANCEL)f
Fo(cancels)j(a)e(p)q(ending)i(comm)o(unication)f(op)q(eration)g(\(send)g(or)f
(receiv)o(e\).)75 2022 y(The)14 b(call)h(returns)e Fi(flag)23
b(=)h(true)13 b Fo(if)h(the)g(cancel)h(op)q(eration)f(succeeeded,)h
Fi(flag)23 b(=)h(false)13 b Fo(otherwise.)75 2079 y(It)j(m)o(ust)f(b)q(e)i
(the)f(case)g(that)f(either)i(the)f(cancel)h(op)q(eration)f(succeeds)h(or)e
(that)g(the)h(p)q(ending)i(comm)o(u-)75 2135 y(nication)g(op)q(eration)e
(completes)i(\(but)e(not)g(b)q(oth\).)24 b(If)17 b(a)f(comm)o(unication)h(op)
q(eration)g(w)o(as)f(cancelled)75 2191 y(successfully)l(,)k(the)d(e\013ect)h
(is)f(as)h(if)f(this)h(op)q(eration)g(w)o(as)f(nev)o(er)g(executed.)28
b(If)17 b(a)g(send)i(w)o(as)d(canceleed)75 2248 y(successfully)22
b(then)e(the)g(message)f(sen)o(t)g(will)j(not)d(b)q(e)h(receiv)o(ed,)i(the)e
(receiv)o(e)g(bu\013er)g(of)f(an)o(y)h(p)q(osted)75 2304 y(receiv)o(e)g(for)f
(that)g(message)g(will)i(not)e(b)q(e)h(altered,)g(and)g(an)o(y)f(suc)o(h)h
(receiv)o(e)g(has)f(to)g(b)q(e)h(satis\014ed)g(b)o(y)75 2361
y(another)15 b(send;)g(if)g(a)g(receiv)o(e)h(w)o(as)e(cancelled)j
(successfully)l(,)g(then)e(the)g(reciev)o(e)h(bu\013er)f(p)q(osted)g(will)h
(not)75 2417 y(b)q(e)g(altered,)f(and)h(an)o(y)e(send)i(matc)o(hing)f(this)h
(receiv)o(e)g(has)f(to)g(b)q(e)h(satis\014ed)f(b)o(y)h(another)e(receiv)o(e.)
166 2556 y Fm(Implemen)o(tati)o(on)e(note:)166 2613 y Fl(There)j(is)f(not)f
(exp)q(ectation)i(that)f(a)g(cancel)g(op)q(eration)g(will)e(b)q(e)j(fast.)p
eop
%%Page: 27 28
bop 75 -100 a Fh(1.13.)34 b(CORRECTNESS)1280 b Fo(27)75 45
y Fn(1.13)70 b(Correctness)75 234 y Fm(Discussion:)17 b Fl(The)d(material)f
(in)h(this)g(section)h(has)g(not)f(y)o(et)h(b)q(een)h(discussed)g(b)o(y)e
(MPIF.)g(Some)g(or)g(all)f(of)h(it)g(is)75 291 y(lik)o(ely)f(to)g(mo)o(v)o(e)
g(to)g(Section)i Fm(??)p Fl(.)i(It)d(is)f(incorp)q(orated)i(here)g(for)e
(completeness.)75 510 y Fk(1.13.1)55 b(Order)75 601 y Fo(MPI)17
b(preserv)o(es)f(the)h(order)g(of)f(messages)g(b)q(et)o(w)o(een)h(an)o(y)g
(\014xed)g(pair)g(of)g(pro)q(cesses.)24 b(In)18 b(other)e(w)o(ords,)75
657 y(if)22 b(pro)q(cess)f(A)h(executes)f(t)o(w)o(o)f(successiv)o(e)j(send)f
Fi(start)e Fo(sub)q(op)q(erations,)j(pro)q(cess)f(B)f(executes)h(t)o(w)o(o)75
713 y(successiv)o(e)e(receiv)o(e)g Fi(start)e Fo(op)q(erations,)i(and)f(b)q
(oth)h(receiv)o(es)f(matc)o(h)g(either)h(sends,)g(then)f(the)g(\014rst)75
770 y(receiv)o(e)f(will)h(receiv)o(e)g(the)e(message)g(sen)o(t)g(b)o(y)h(the)
f(\014rst)g(send,)i(and)e(the)h(second)g(receiv)o(e)g(will)h(receiv)o(e)75
826 y(the)f(message)f(sen)o(t)h(b)o(y)g(the)g(second)g(send.)29
b(Th)o(us,)18 b(if)h(a)e(t)o(w)o(o)g(messages)g(from)g(the)h(same)g(source)g
(can)75 883 y(satisfy)g(a)g(p)q(ending)i(receiv)o(e,)g(the)e(\014rst)g
(message)g(sen)o(t)g(is)g(accepted;)i(if)f(a)f(message)g(can)g(satisfy)g(t)o
(w)o(o)75 939 y(p)q(ending)f(receiv)o(es,)f(the)f(\014rst)g(receiv)o(e)h(p)q
(osted)f(is)h(satis\014ed.)166 998 y(The)c(last)f(paragraph)g(assumes)g(that)
g(the)h(send)g Fi(start)e Fo(op)q(erations)i(are)f(ordered)h(b)o(y)f(the)h
(program)75 1055 y(order)20 b(at)f(pro)q(cess)h(A,)g(and)g(the)g(receiv)o(e)h
Fi(start)e Fo(op)q(erations)h(are)f(ordered)i(b)o(y)e(the)h(program)f(order)
75 1111 y(at)h(pro)q(cess)h(B.)g(If)g(a)g(pro)q(cess)g(is)g(m)o(ultithreaded)
h(and)f(the)g(op)q(erations)h(are)e(executed)i(b)o(y)f(distinct)75
1168 y(threads,)d(then)g(the)g(seman)o(tics)f(of)h(the)f(threaded)h(system)g
(ma)o(y)f(not)g(de\014ne)i(an)e(order)h(b)q(et)o(w)o(een)g(the)75
1224 y(t)o(w)o(o)c(op)q(erations,)h(in)h(whic)o(h)g(case)f(the)g(condition)i
(is)f(v)o(oid.)75 1361 y Fk(1.13.2)55 b(Progress)19 b(and)g(F)-5
b(airness)75 1451 y Fo(W)l(e)20 b(can)g(mo)q(del)g(the)g(execution)h(of)e
(MPI)h(programs)e(as)h(an)h(in)o(teraction)g(b)q(et)o(w)o(een)g(executing)h
(pro-)75 1508 y(cesses)d(that)f(execute)h(eac)o(h)g(their)g(o)o(wn)f
(program,)g(and)g(the)h Fg(comm)o(unication)j(subsystem)p Fo(.)26
b(The)75 1564 y(comm)o(unication)16 b(subsystem)g(ma)o(y)f(ha)o(v)o(e)g(v)m
(arious)h(constrain)o(ts)g(on)f(the)h(amoun)o(t)f(of)g(resources)h(it)g(can)
75 1621 y(use.)k(E.g.:)166 1680 y(Bounds)e(on)f(the)g(n)o(um)o(b)q(er)h(and)f
(total)g(sizes)h(of)f(activ)o(e)h(comm)o(unication)g(ob)s(jects.)25
b(Suc)o(h)18 b(b)q(ound)75 1736 y(can)d(b)q(e)h(global,)g(p)q(er)f(no)q(de,)h
(or)e(p)q(er)i(pair)g(of)e(comm)o(unicating)i(no)q(des.)166
1795 y(Bounds)e(on)g(the)g(n)o(um)o(b)q(er)g(and)h(total)e(sizes)i(of)e
(messages)g(bu\013ered)i(in)f(the)g(system.)19 b(Suc)o(h)c(b)q(ound)75
1852 y(can,)k(again,)g(b)q(e)g(global,)g(p)q(er)g(no)q(de,)g(or)f(p)q(er)h
(pair)f(of)g(comm)o(unicating)h(no)q(de.)30 b(In)19 b(addition,)h(a)e(mes-)75
1908 y(sage)f(ma)o(y)g(b)q(e)h(bu\013ered)g(at)f(the)g(sender,)i(at)d(the)i
(receiv)o(er,)g(at)f(b)q(oth,)h(or)f(p)q(erhaps)h(at)f(another)g(place)75
1965 y(altogether.)166 2024 y(Th)o(us,)i(it)g(will)i(b)q(e)e(di\016cult)h(to)
e(set)h(rules)g(on)g(resource)g(managemen)o(t)f(of)g(the)h(comm)o(unication)
75 2080 y(subsystem.)29 b(Ho)o(w)o(ev)o(er,)17 b(it)i(is)g(generally)g(exp)q
(ected)g(that)f(implemen)o(ters)h(will)h(pro)o(vide)f(information)75
2136 y(on)c(the)g(mec)o(hanism)g(used)h(for)e(resource)h(allo)q(cation,)h
(and)f(that)f(query)i(and)f(set)f(functions)i(will)h(allo)o(w)75
2193 y(to)e(query)g(and)g(p)q(ossibly)i(con)o(trol)e(the)g(amoun)o(t)g(of)f
(a)o(v)m(ailable)j(resources.)166 2252 y(W)l(e)g(pro)o(vide)h(in)g(this)f
(section)h(a)f(set)g(of)g(minimal)h(requiremen)o(ts)g(on)f(the)h(comm)o
(unication)f(sub-)75 2308 y(system.)26 b(Programs)15 b(that)i(execute)h(on)f
(an)o(y)g(subsystem)g(that)f(ful\014ls)j(these)f(minimal)g(requiremen)o(ts)75
2365 y(are)12 b Fg(safe)h Fo(and)g(will)h(p)q(ort)f(to)f(an)o(y)g(MPI)h
(implemen)o(tation.)21 b Fg(Unsafe)13 b Fo(programs)e(ma)o(y)h(execute)i(on)e
(some)75 2421 y(MPI)k(implemen)o(tations,)h(dep)q(ending)h(on)e(the)g(amoun)o
(t)f(of)g(a)o(v)m(ailable)j(resources)e(and)g(the)g(implemen-)75
2478 y(tation)k(used)g(for)g(the)g(MPI)g(comm)o(unication)h(subsystem.)34
b(Finally)22 b Fg(erroneous)d Fo(programs)g(nev)o(er)75 2534
y(execute)e(correctly)l(.)22 b(\(While)17 b(it)f(is)g(desirable)i(to)d
(detect)h(erroneous)g(programs,)e(it)i(is)h(not)e(p)q(ossible)j(to)75
2591 y(do)c(so)h(at)e(compile)j(time,)f(and)g(often)f(prohibitiv)o(e)i(to)e
(do)h(so)f(a)g(run)h(time.)20 b(Th)o(us,)14 b(the)h(do)q(cumen)o(t)g(do)q(es)
75 2647 y(not)f(sp)q(ecify)h(a)f(b)q(eha)o(vior)h(for)f(erroneous)g
(programs,)f(although)h(the)g(desired)i(b)q(eha)o(vior)f(is)f(to)g(return)g
(a)75 2704 y(useful)i(error)f(message.\))p eop
%%Page: 28 29
bop 75 -100 a Fo(28)613 b Fh(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)131 45 y Fo(1.)22 b(If)15 b(a)g(pro)q(cess)g
(executes)h(an)f Fi(INIT)f Fo(op)q(eration,)h(then)g(the)h(op)q(eration)f(ev)
o(en)o(tually)h(succeeds,)g(or)e(a)189 102 y Fj(r)n(esour)n(c)n(e)f(exc)n
(eption)f Fo(o)q(ccurs.)19 b(The)13 b(standard)f(do)q(es)g(not)h(sp)q(ecify)g
(when)g(a)f(resource)h(exception)g(is)189 158 y(allo)o(w)o(ed)h(to)g(o)q
(ccur.)20 b(It)14 b(is)h(exp)q(ected)h(that)d(an)h(op)q(erational)h
(de\014nition)h(will)g(b)q(e)f(made)g(a)o(v)m(ailable,)189
214 y(in)20 b(the)g(form)e(of)h(test)g(programs)g(that)f(ha)o(v)o(e)h(to)g
(execute)h(with)g(no)g(resource)f(exceptions.)34 b(It)189 271
y(is)21 b(highly)i(desirable)f(to)f(ha)o(v)o(e)f(generous)h(b)q(ounds)h(on)f
(the)g(n)o(um)o(b)q(er)h(of)e(concurren)o(tly)i(activ)o(e)189
327 y(comm)o(unication)17 b(ob)s(jects)f(eac)o(h)g(pro)q(cess)h(ma)o(y)f(ha)o
(v)o(e,)g(so)g(that,)g(in)i(practice,)f Fi(INIT)f Fo(op)q(erations)189
384 y(will)g(alw)o(a)o(ys)f(b)q(e)h(guaran)o(teed)f(to)f(succeed.)131
480 y(2.)22 b(Eac)o(h)16 b(pro)q(cess)g(can)h(initiate)h(a)e(comm)o
(unication)h(op)q(eration)g(for)e(eac)o(h)i(activ)o(e)f(comm)o(unication)189
536 y(ob)s(ject.)j(I.e.)h(correct)15 b Fi(START)f Fo(op)q(erations)i(alw)o(a)
o(ys)e(succeed)i(\(ev)o(en)o(tually\).)131 632 y(3.)22 b(A)e(send)h(op)q
(eration)f(is)h Fg(enabled)h Fo(if)e(the)h(sending)g(pro)q(cess)g(has)f
(issued)i(a)e Fi(COMPLETE)f Fo(op)q(era-)189 689 y(tion)f(and)g(the)f
(receiving)j(pro)q(cess)e(has)g(issued)g(a)g Fi(START)f Fo(op)q(eration)h
(for)f(a)h(matc)o(hing)f(receiv)o(e.)189 745 y(Symmetrically)l(,)k(a)d
(receiv)o(e)i(op)q(eration)f(is)g Fg(enabled)g Fo(if)h(the)e(receiving)j(pro)
q(cess)e(has)f(issued)i(a)189 802 y Fi(COMPLETE)10 b Fo(op)q(eration)i(and)f
(the)h(sending)g(pro)q(cess)g(has)f(issued)i(a)e Fi(START)g
Fo(op)q(eration)g(for)g(a)g(matc)o(h-)189 858 y(ing)19 b(send.)31
b(An)19 b(enabled)h(op)q(eration)e(ma)o(y)g(b)q(ecome)i Fg(disabled)f
Fo(either)h(b)q(ecause)f(it)g(completes)189 914 y(successfully)e(or,)e(in)h
(the)f(case)h(of)f(a)g(receiv)o(e,)h(b)q(ecause)g(the)g(matc)o(hing)f
(message)g(is)h(successfully)189 971 y(receiv)o(ed)g(b)o(y)f(another)g
(receiv)o(e)g(op)q(eration)h(or,)e(in)i(the)f(case)g(of)g(a)f(send,)i(b)q
(ecause)g(the)f(matc)o(hing)189 1027 y(receiv)o(e)h(successfully)h(receiv)o
(es)f(another)f(message.)189 1104 y Fg(An)24 b(enabled)j(op)q(eration)f
(either)g(completes)f(successfully)h(or)e(b)q(ecomes)i(p)q(erma-)189
1160 y(nen)o(tly)17 b(disabled.)189 1236 y Fo(I.e.,)d(an)h(enabled)i(op)q
(eration)e(either)h(ev)o(en)o(tually)g(succeeds,)g(or)e(b)q(ecomes)i
(disabled)h(\(progress\);)189 1293 y(and)i(an)g(op)q(eration)g(cannot)g(b)q
(e)h(enabled)h(in\014nitely)g(man)o(y)e(times)g(without)g(ev)o(er)g
(succeeding)189 1349 y(\(fairness\).)131 1445 y(4.)j(A)15 b
Fi(FREE)f Fo(op)q(eration)i(alw)o(a)o(ys)e(succeeds)j(\(ev)o(en)o(tually\).)
166 1554 y(The)i(four)f(conditions)i(guaran)o(tee)d(progress)h(in)i(the)e
(comm)o(unication)i(subsystem.)30 b(The)18 b(third)75 1610
y(condition)e(guaran)o(tee)f(\(w)o(eak\))f(fairness)h(among)g(comp)q(eting)h
(comm)o(unication)g(requests.)166 1667 y(Examples)g(\(in)o(v)o(olving)g(t)o
(w)o(o)e(pro)q(cessors)h(with)g(ranks)g(0)g(and)g(1\))166 1724
y(The)g(follo)o(wing)h(program)e(is)i(safe,)f(and)g(should)h(alw)o(a)o(ys)f
(succeed.)75 1877 y Fi(CALL)23 b(MPI_RANK\(rank,)f(context\))75
1934 y(IF)i(\(rank.EQ.0\))e(THEN)147 1990 y(CALL)h(MPI_SENDB\(sendbuf,)e
(len,)j(1,)f(tag,)h(context\))147 2047 y(CALL)f(MPI_RECVB\(recvbuf,)e(len,)j
(1,)f(tag,)h(context\))75 2103 y(ELSE)95 b(!)24 b(rank.EQ.1)147
2160 y(CALL)f(MPI_RECVB\(recvbuf,)e(len,)j(0,)f(tag,)h(context\))147
2216 y(CALL)f(MPI_SENDB\(sendbuf,)e(len,)j(0,)f(tag,)h(context\))75
2272 y(END)f(IF)166 2368 y Fo(The)15 b(follo)o(wing)h(program)e(is)i
(erroneous,)f(and)g(should)h(alw)o(a)o(ys)f(fail.)75 2534 y
Fi(CALL)23 b(MPI_RANK\(rank,)f(context\))75 2591 y(IF)i(\(rank.EQ.0\))e(THEN)
147 2647 y(CALL)h(MPI_RECVB\(recvbuf,)e(len,)j(1,)f(tag,)h(context\))147
2704 y(CALL)f(MPI_SENDB\(sendbuf,)e(len,)j(1,)f(tag,)h(context\))p
eop
%%Page: 29 30
bop 75 -100 a Fh(1.14.)34 b(MISSING)1432 b Fo(29)75 45 y Fi(ELSE)95
b(!)24 b(rank.EQ.1)147 102 y(CALL)f(MPI_RECVB\(recvbuf,)e(len,)j(0,)f(tag,)h
(context\))147 158 y(CALL)f(MPI_SENDB\(sendbuf,)e(len,)j(0,)f(tag,)h
(context\))75 214 y(END)f(IF)166 321 y Fo(The)15 b(receiv)o(e)g(op)q(eration)
g(of)f(the)h(\014rst)f(pro)q(cess)h(m)o(ust)f(complete)i(b)q(efore)f(its)f
(send,)h(and)g(can)g(com-)75 377 y(plete)j(only)g(if)g(the)f(matc)o(hing)g
(send)h(of)f(the)g(second)h(pro)q(cessor)f(is)h(executed;)g(the)g(receiv)o(e)
g(op)q(eration)75 434 y(of)c(the)h(second)g(pro)q(cess)g(m)o(ust)f(complete)h
(b)q(efore)g(its)f(send)i(and)e(can)h(complete)g(only)g(if)g(the)g(matc)o
(hing)75 490 y(send)h(of)f(the)g(\014rst)g(pro)q(cess)g(is)h(executed.)21
b(This)15 b(program)f(will)j(deadlo)q(c)o(k.)166 547 y(The)10
b(follo)o(wing)h(program)f(is)g(unsafe,)h(and)g(ma)o(y)e(succeed)j(or)e
(fail,)h(dep)q(ending)i(on)d(implemen)o(tation.)75 709 y Fi(CALL)23
b(MPI_RANK\(rank,)f(context\))75 766 y(IF)i(\(rank.EQ.0\))e(THEN)147
822 y(CALL)h(MPI_SENDB\(sendbuf,)e(len,)j(1,)f(tag,)h(context\))147
879 y(CALL)f(MPI_RECVB\(recvbuf,)e(len,)j(1,)f(tag,)h(context\))75
935 y(ELSE)95 b(!)24 b(rank.EQ.1)147 992 y(CALL)f(MPI_SENDB\(sendbuf,)e(len,)
j(0,)f(tag,)h(context\))147 1048 y(CALL)f(MPI_RECVB\(recvbuf,)e(len,)j(0,)f
(tag,)h(context\))75 1104 y(END)f(IF)166 1267 y Fo(The)11 b(message)g(sen)o
(t)g(b)o(y)g(eac)o(h)g(pro)q(cess)g(has)g(to)f(b)q(e)i(copied)g(out)f(b)q
(efore)g(the)g(send)h(op)q(eration)f(returns)75 1324 y(and)k(the)g(receiv)o
(e)h(op)q(eration)f(starts.)k(F)l(or)14 b(the)h(program)f(to)g(complete,)h
(it)h(is)f(necessary)g(that)g(at)f(least)75 1380 y(one)i(of)g(the)h(t)o(w)o
(o)e(messages)g(sen)o(t)h(is)h(bu\013ered)g(out)f(of)f(either)i(pro)q
(cesses')g(address)f(space.)23 b(Th)o(us,)17 b(this)75 1437
y(program)c(can)i(succeed)g(only)g(if)g(the)f(comm)o(unication)h(system)f
(has)g(su\016cien)o(t)h(bu\013er)g(space)f(to)g(bu\013er)75
1493 y Fi(len)h Fo(w)o(ords)f(of)h(data.)166 1549 y(If)g(additional)h
(requiremen)o(ts)f(will)i(b)q(ecome)e(part)f(of)h(the)g(standard)f(\(e.g.,)f
(b)q(ounds)j(on)f(the)f(mini-)75 1606 y(mal)i(n)o(um)o(b)q(er)f(of)g
(concurren)o(tly)h(activ)o(e)f(handles)i(that)e(need)h(b)q(e)g(supp)q(orted,)
f(then)h(further)f(programs)75 1662 y(b)q(ecome)h(safe.)75
1806 y Fn(1.14)70 b(Missing)143 1907 y Fe(\017)23 b Fo(send-receiv)o(e)143
2001 y Fe(\017)g Fo(Send)16 b(and)f(receiv)o(e)h(from)f(same)g(bu\013er)p
eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF