From: "Marc Snir" <[email-masked]>
Date: Mon, 15 Mar 93 17:04:31 EST

%!PS-Adobe-2.0
%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
%%Title: PT2PT_1.DVI.*
%%Pages: 35 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 2 36 df<EAFFF0A3EAE000B3B3B3B3B3B3AAEAFF
F0A30C7C758118>34 D<EAFFF0A3EA0070B3B3B3B3B3B3AAEAFFF0A30C7C808118>I
E /Fb 1 4 df<1207A3EAE738EAFFF8EA7FF0EA1FC0A2EA7FF0EAFFF8EAE738EA0700A30D0E7E
8E12>3 D E /Fc 1 16 df<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA8EA7FFEA2EA3FFCEA1FF8EA
07E010127D9317>15 D E /Fd 4 111 df<127012F8A3127005057C840E>58
D<15181578EC01E0EC0780EC1E001478EB03E0EB0F80013CC7FC13F0EA03C0000FC8FC123C12F0
A2123C120FEA03C0EA00F0133CEB0F80EB03E0EB0078141EEC0780EC01E0EC007815181D1C7C99
26>60 D<12C012F0123C120FEA03C0EA00F0133EEB0F80EB01E0EB0078141EEC0780EC01E0EC00
78A2EC01E0EC0780EC1E001478EB01E0EB0F80013EC7FC13F0EA03C0000FC8FC123C12F012C01D
1C7C9926>62 D<381E03E0383F0FF038639838EBB01CEAC3E013C0138000075B1300A3000E5BA2
ECE08015C048EBE180EB01C1ECC300EB00E74813FE001813781A157F941D>110
D E /Fe 5 107 df<B612FCA21E027C8C27>0 D<EA03F0EA0FFC487E487E481380A2B512C0A86C
1380A26C13006C5A6C5AEA03F012147D9519>15 D<150C153C15F0EC03C0EC0F00143C14F0EB07
C0011FC7FC1378EA01E0EA0780001EC8FC127812E01278121EEA0780EA01E0EA0078131FEB07C0
EB00F0143C140FEC03C0EC00F0153C150C1500A8B612FCA21E277C9F27>20
D<12C012F0123C120FEA03C0EA00F0133CEB0F80EB03E0EB0078141EEC0780EC01E0EC0078151C
1578EC01E0EC0780EC1E001478EB03E0EB0F80013CC7FC13F0EA03C0000FC8FC123C12F012C0C9
FCA8B612FCA21E277C9F27>I<12C0B3B3AD02317AA40E>106 D E /Ff 26
121 df<137013F8A213D8A2EA01DCA3138CEA038EA41306EA0707A4380FFF80A3EA0E03A2381C
01C0A2387F07F038FF8FF8387F07F0151C7F9B18>65 D<EAFFFC13FF1480381C03C01301EB00E0
A4130114C01307381FFF80140014C0EA1C03EB00E014F01470A414F014E01303B512C01480EBFE
00141C7F9B18>I<3801FCE0EA03FEEA07FFEA0F07EA1E03EA3C01EA78001270A200F013005AA8
7E007013E0A21278EA3C01001E13C0EA0F073807FF806C1300EA01FC131C7E9B18>I<EA7FF8EA
FFFE6C7E381C0F80EB03C0A2EB01E01300A214F01470A814F014E0A2130114C01303EB0F80387F
FF00485AEA7FF8141C7F9B18>I<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7
FCA21438A5B512F8A3151C7F9B18>I<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300
111C7D9B18>73 D<EA7FE012FF127F000EC7FCB11470A5387FFFF0B5FC7E141C7F9B18>76
D<38FC01F8EAFE03A2383B06E0A4138EA2EA398CA213DCA3EA38D8A213F81370A21300A638FE03
F8A3151C7F9B18>I<387E07F038FF0FF8387F07F0381D81C0A313C1121CA213E1A313611371A2
13311339A31319A2131D130DA3EA7F07EAFF87EA7F03151C7F9B18>I<EA0FF8EA3FFE487EEA78
0FEA700700F01380EAE003B0EAF00700701300EA780FEA7FFF6C5AEA0FF8111C7D9B18>I<EAFF
FEEBFF8014C0EA1C03EB01E013001470A514E01301EB03C0EA1FFF1480EBFE00001CC7FCA8B47E
A3141C7F9B18>I<EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005BA2
EA1C0FEB07801303A5149CA3007F13FC38FF81F8387F00F0161C7F9B18>82
D<387FFFF8B5FCA238E07038A400001300B2EA07FFA3151C7F9B18>84 D<38FF83FEA3381C0070
B2001E13F0000E13E0EA0F013807C7C03803FF806C1300EA007C171C809B18>I<387F8FE0139F
138F380E0700120FEA070E138EEA039C13DCEA01F8A26C5AA2137013F07F120113DCEA039E138E
EA070F7F000E13801303001E13C0387F07F038FF8FF8387F07F0151C7F9B18>88
D<EA1FE0EA3FF8487EEA783EEA300FC67EA248B4FC120F123FEA7F07127812F012E0A26C5AEA78
3F387FFFF0EA3FFBEA0FE114147D9318>97 D<127E12FE127E120EA5133EEBFF80000F13C0EBE3
E0EB80F0EB00701478000E1338A5120F14781470EB80F0EBC3E0EBFFC0000E138038067E00151C
809B18>I<EA01FEEA07FF001F1380EA3F07383C030048C7FC127012F05AA47E1270387801C012
3CEA3F07381FFF8000071300EA01FC12147D9318>I<EA03F0EA0FFC487EEA3E1F38780780EA70
0300F013C0EAE001A2B5FCA300F0C7FC1270387801C0123CEA3F07381FFF8000071300EA01FC12
147D9318>101 D<12FEA3120EA5EB3FF0137F133FEB0780EB0F00131E5B5B5BEA0FF87F139C13
1EEA0E0FEB0780130314C038FFC7F8A3151C7F9B18>107 D<EA7FE012FF127F1200B3A4387FFF
C0B512E06C13C0131C7E9B18>I<EA7E3F38FEFF80007F13C0380FE1E013801300A2120EAA387F
C3FC38FFE7FE387FC3FC1714809318>110 D<EA01F0EA0FFE487E383E0F80EA3803387001C0A2
38E000E0A5EAF001007013C0EA7803383C0780EA3E0F381FFF006C5AEA01F013147E9318>I<38
7F87E038FF9FF8EA7FBF3803FC78EBF030EBE0005BA35BA8EA7FFEB5FC6C5A15147F9318>114
D<487E1203A4387FFFC0B5FCA238038000A9144014E0A21381EBC3C0EA01FF6C1380EB7E001319
7F9818>116 D<387F8FF0139F138F38070700138EEA039EEA01DC13F81200137013F07FEA01DC
EA039E138EEA0707000F1380387F8FF000FF13F8007F13F015147F9318>120
D E /Fg 72 126 df<127012F8B212701200A5127012F8A31270051E769D1A>33
D<1338137813F8EA01E0EA03C0EA0780EA0F00121E121C123C123812781270A312F05AA87E1270
A312781238123C121C121E7EEA0780EA03C0EA01E0EA00F8137813380D2878A21A>40
D<126012F012787E7E7EEA0780EA03C0120113E0120013F01370A313781338A813781370A313F0
13E0120113C01203EA0780EA0F00121E5A5A5A12600D287CA21A>I<13E0A40040134038F0E1E0
EAF8E3387EEFC0381FFF00EA07FC6C5A487EEA1FFF387EEFC038F8E3E0EAF0E13840E040000013
00A413157D991A>I<123C127E127FA3123F1207120F120E123E12FC12F812E0080D77851A>44
D<387FFFC0B512E0A26C13C013047D901A>I<127812FCA41278060676851A>I<EA01F0EA07FC48
7EEA1F1FEA1C0738380380A2387001C0A338E000E0A9EAF001007013C0A2EA780300381380EA3C
07001C1300EA1F1FEA0FFE6C5AEA01F0131E7D9D1A>48 D<13C012011203A21207120F127F12FD
12791201B2EA7FFFA3101E7B9D1A>I<EA07F8EA0FFE487E383C0F80387803C0EAF00100E013E0
EAF000A21260C7FCA2130114C01303EB0780EB0F00130E133E5B5BEA01E0485A485A48C7FC001E
13E05AEA7FFFB5FC7E131E7D9D1A>I<EA03FCEA0FFF481380383E07C0383C01E01300A21218C7
FC1301EB03C0EB0F803801FF00148014C0380007E0EB00F0147014781438A2126012F014784813
7000F813F0387E07E0383FFFC0000F13803803FC00151E7E9D1A>I<EB0F80131F133F133B1373
13F313E3EA01C3120313831207EA0F03120E121E123C1238127812F0B512FEA338000380A6EB3F
F8EB7FFCEB3FF8171E7F9D1A>I<383FFFC05AA20070C7FCA8EA73F8EA7FFE7F387E0F80387803
C0EA3001000013E01300A3126012F01301EB03C038700780EA7C1F383FFF00EA1FFCEA07F0131E
7D9D1A>I<137F3801FF804813C03807C1E0EA0F01121E383C00C0003813001278127012F0EAE3
F8EAEFFEB5FC38FE0F8038F803C0EAF00114E01300A31270A2EA7801003813C0EA3C03381F0F80
380FFF006C5AEA01F8131E7D9D1A>I<12E0B512F8A338E001E014C0EA0003EB0780EB0F00130E
131E5B133813781370A213F05BA212015BA312035BA7151F7E9E1A>I<EA01FCEA07FF001F13C0
1307383C01E0387800F000701370A3007813F0003813E0381E03C0380FFF803803FE00487E381F
8FC0383C01E0387800F000701370481338A46C137800701370007813F0383E03E0381FFFC00007
1300EA01FC151E7E9D1A>I<EA03F8EA0FFC487EEA3E0F38780780EA700300F013C0EAE001A214
E0A312F01270EA7803EA3E0FEA1FFFEA0FFEEA03F8EA000114C0A213033860078000F01300131F
133EEA7FFCEA3FF06C5A131E7D9D1A>I<123C127EA4123C1200A9123C127C127EA3123E120E12
1E121C123C12F812F012E0071C77941A>59 D<387FFFF0B512F8A26C13F0C8FCA4387FFFF0B512
F8A26C13F0150C7E941A>61 D<1338137CA2136C13EEA313C6A2EA01C7A438038380A4380701C0
A213FFA24813E0EA0E00A4481370387F01FC38FF83FE387F01FC171E7F9D1A>65
D<EAFFFEEBFF8014C0381C03E0130014F01470A414E01301EB07C0381FFF80A214C0381C01E0EB
00F014701438A5147814F01301B512E014C01400151E7E9D1A>I<EBFE383803FFB84813F8EA0F
83EA1E00001C1378123C4813381270A200F013005AA87E00701338A212786C1378001C1370001E
13F0380F83E03807FFC06C13803800FE00151E7E9D1A>I<EA7FFEB5FC6C1380381C07C0EB01E0
EB00F0147014781438A2143C141CA8143C1438A21478147014F0EB01E0EB07C0EA7FFFB512006C
5A161E7F9D1A>I<B512F8A3381C0038A41400A3130EA3EA1FFEA3EA1C0EA390C7FCA3141CA5B5
12FCA3161E7E9D1A>I<387FFFFCB5FC7E380E001CA41400A3EB0380A3EA0FFFA3EA0E03A390C7
FCA8EA7FE012FF127F161E7F9D1A>I<3801F8E0EA03FEEA07FFEA0F0FEA1E03EA3C011238EA78
001270A200F013005AA5EB0FF8A338F000E01270130112781238EA3C03121EEA0F0FEA07FFEA03
FEEA01F8151E7E9D1A>I<38FF83FEA3381C0070AA381FFFF0A3381C0070AB38FF83FEA3171E7F
9D1A>I<B51280A33801C000B3A6B51280A3111E7C9D1A>I<387F03F838FF87FC387F03F8381C01
E0EB03C014801307EB0F00131E131C133C5B5B7FEA1DFC121F139E130E130FEA1E07001C138013
0314C0EB01E0A2EB00F01470007F13FC38FF81FE387F00FC171E7F9D1A>75
D<EA7FE0487E6C5A000EC7FCB3141CA5387FFFFCB5FC7E161E7F9D1A>I<007E133FB4EB7F806C
1400381D80DCA313C1A2001C139CA213E3A2EB631C1377A21336A2133E131CA21300A7007F137F
39FF80FF80397F007F00191E809D1A>I<38FE03FE12FFA2381D8070A213C0121CA213E0A21360
1370A213301338A21318131CA2130C130EA21306A213071303A238FF81F0A21380171E7F9D1A>
I<EA0FFE383FFF804813C0EA7C07EA700100F013E0EAE000B1EAF001A2007013C0EA7C07EA7FFF
6C1380380FFE00131E7D9D1A>I<EAFFFEEBFF8014C0381C03E0EB00F0147014781438A4147814
7014F0EB03E0381FFFC01480EBFE00001CC7FCA9B47EA3151E7E9D1A>I<EA0FFE383FFF804813
C0EA7C07EA700100F013E0EAE000B0137013F0EAF079007013C0EA7C3FEA7FFF6C1380380FFE00
EA000F7F1480130314C01301A213257D9D1A>I<EAFFFC13FF1480381C07C0EB01E0EB00F01470
A414F0EB01E0EB07C0381FFF8014001480381C07C0EB01E01300A514E214E7A338FF80FF147E14
3C181E7F9D1A>I<3807F1C0EA1FFDEA3FFFEA7C1FEA7007EAF003EAE001A390C7FC7E1278123F
EA1FF8EA0FFEEA01FF38000F80EB03C0130114E01300126012E0A2EAF001EB03C038FE0780B5FC
EBFE00EAE3FC131E7D9D1A>I<387FFFFEB5FCA238E0380EA400001300B3A23803FF80A3171E7F
9D1A>I<38FF83FEA3381C0070B3A2001E13F0000E13E0EA0F013807C7C03803FF806C1300EA00
7C171E7F9D1A>I<38FF01FEA3381C0070A3001E13F0000E13E0A3380701C0A438038380A43801
C700A4EA00C613EEA3136C137CA21338171E7F9D1A>I<00FE13FEEAFF01EAFE000070131C0078
133C00381338A7137C001C137013EEA513C6A2380DC760A31383A3000F13E0A2380701C0171E7F
9D1A>I<387F87F8A3380F01C03807038013833803870013C7EA01CE13EEEA00FCA21378A3137C
A213FE13EEEA01CF13C7380387801383380703C01301380E00E0A2387F01FC38FF83FE387F01FC
171E7F9D1A>I<38FF01FEA3381C00706C13E0A2380701C0A213830003138013C700011300A2EA
00EEA2137CA21338AA48B4FCA3171E7F9D1A>I<383FFFF85AA23870007014F0EB01E014C0EA00
03EB0780EB0F00130E131E5B133813785B5B1201485A5B120748C7FC001E1338121C123C5A1270
B512F8A3151E7E9D1A>I<EAFFF8A3EAE000B3AFEAFFF8A30D2776A21A>I<EAFFF8A3EA0038B3AF
EAFFF8A30D277EA21A>93 D<387FFFC0B512E0A26C13C013047D7E1A>95
D<EA1FF0EA3FFC487EEA781F38300780EA0003A213FF1207121FEA3F83EA7C0312F012E0A3EAF0
07EA7C1F383FFFFCEA1FFDEA07F016157D941A>97 D<12FEA3120EA6133FEBFFC0000F13E0EBE1
F0EB8070EB00781438000E133C141CA5000F133C14381478EB80F0EBC3E0EBFFC0000E13803806
7E00161E7F9D1A>I<3801FF80000713C04813E0EA1F01383C00C0481300127012F05AA57E1270
007813707E381F01F0380FFFE06C13C00001130014157D941A>I<EB1FC0A31301A6EA01F9EA07
FDEA0FFFEA1F0FEA3C07EA78031270EAF00112E0A5EAF0031270EA78071238EA3E1F381FFFFCEA
0FFDEA03F1161E7E9D1A>I<EA01FCEA07FF481380381F07C0383C01E0EA7800007013F000F013
705AB512F0A300E0C7FC7E1270007813707E381F01F0380FFFE06C13C00001130014157D941A>
I<EB0FF0EB1FF8133FEB7878EBF030EBE000A4387FFFF0B5FCA23800E000AF383FFF804813C06C
1380151E7F9D1A>I<3801F8FC3807FFFE5A381F0F8C381C0380003C13C0EA3801A3EA3C03001C
1380EA1F0FEBFF00485AEA39F80038C7FC123C121C381FFF8014F04813F8387C00FC0070131C00
F0131E48130EA36C131E0078133C383F01F8381FFFF06C13E00001130017217F941A>I<12FEA3
120EA6133FEBFF80000F13C0EBE1E013801300A2120EAB38FFE3FE13E713E3171E7F9D1A>I<EA
01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>I<12FEA3120E
A6EB0FFCEB1FFEEB0FFCEB03C0EB0780EB0F00131E5B5B13FC120F13DE138F380E0780EB03C0A2
EB01E0EB00F038FFE3FE14FF14FE181E7F9D1A>107 D<EAFFE0A31200B3A6B512E0A3131E7D9D
1A>I<387DF1F038FFFBF86CB47E381F1F1CEA1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F
00191580941A>I<EAFE3FEBFF80B512C0380FE1E013801300A2120EAB38FFE3FE13E713E31715
7F941A>I<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0A6EAF001007013
C0EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<EAFE3FEBFFC0B512E0380F
E1F0EB8070EB00781438000E133C141CA5000F133C14381478EB80F0EBC3E0EBFFC0000E1380EB
7E0090C7FCA8EAFFE0A316207F941A>I<387F87F038FF9FFCEA7FBF3803FC3CEBF018EBE000A2
5BA25BA9EA7FFFB5FC7E16157E941A>114 D<380FFB80EA3FFF5AEAF80FEAE003A300F8C7FCEA
7FC0EA3FFCEA0FFF38007F80EB07C0EA600112E012F0130338FC0F80B512005BEAE7F812157C94
1A>I<13C01201A6387FFFE0B5FCA23801C000AA1470A314F0EBE1E0EA00FFEB7FC0EB3F00141C
7F9B1A>I<38FE0FE0A3EA0E00AC1301A2EA0F073807FFFE7EEA01FC17157F941A>I<387F83FC38
FFC7FE387F83FC380E00E0A3380701C0A338038380A33801C700A3EA00EEA3137CA2133817157F
941A>I<387FC7F8EBCFFCEBC7F8380703C038038380EBC700EA01EFEA00FE137C13781338137C
13EE120113C738038380000713C0EA0F01387FC7FC00FF13FE007F13FC17157F941A>120
D<387FC3FC38FFC7FE387FC3FC380E00E0A27EEB01C013811203EB838013C31201EBC700EA00E7
A213E61366136E133CA31338A35BA21230EA78E01271EA7FC06C5A001EC7FC17207F941A>I<EB
07E0131F133FEB7C0013F05BAB1201EA07C0B45A90C7FC7FEA07C0EA01E01200AB7F137CEB3FE0
131F130713277DA21A>123 D<126012F0B3B31260042775A21A>I<127CB4FC7FEA07C0EA01E012
00AB7F137CEB3FE0131F133FEB7C0013F05BAB1201EA07C0B45A90C7FC127C13277DA21A>I
E /Fh 22 121 df<EBFFF8A2EB0F00A2131EA45BA45BA45BA4485AA4485AA4485AA4EAFFF8A215
227DA113>73 D<D9FFC0EB0FFCA2010FEC1F801637011BEC3F00166FA216CF0133EB019EA2ED03
1EEB31E00161EB063CA2150C151801C15C1530A21560D80181495AA2ECE180EB80F13A0300F301
E014F6A214FC00064A5A14F8A2001F13F03AFFE0E07FFCA22E227DA12C>77
D<90B512E015F890380F003C151E011E130FA21507A249130FA3150E49131E153C153815F09038
F003E090B51280ECFE0001F0C7FC485AA4485AA4485AA4EAFFF8A220227DA121>80
D<EBF8C0EA01FDEA078F380F0780120E121CEA3C03383807001278A3EAF00EA214101418EB1C30
EA703C137C3838FC60383FCFC0380F078015157B9419>97 D<137E48B4FC3803C380EA0703EA0E
07121C003CC7FC12381278A35AA45BEA7003130EEA383CEA1FF0EA0FC011157B9416>99
D<143CEB03F8A2EB0038A21470A414E0A4EB01C013F9EA01FDEA078F380F0780120E121CEA3C03
383807001278A3EAF00EA214101418EB1C30EA703C137C3838FC60383FCFC0380F078016237BA2
19>I<13F8EA03FCEA0F0EEA1E06123C1238EA780CEAF038EAFFF01380EAF0005AA413021306EA
701C1378EA3FE0EA0F800F157A9416>I<143C147F14CF1301EB03861480A3EB0700A5130EEBFF
F0A2EB0E00A25BA55BA55BA55BA45B1201A2EA718012F390C7FC127E123C182D82A20F>I<EB1F
18EB3FB8EBF1F83801E0F013C0EA038000071370EB00E05AA3381E01C0A4EB0380EA0E07130FEA
071FEBFF00EA01E7EA0007A2130EA3EA701CEAF0385BEA7FE0EA3F80151F7E9416>I<13F0EA0F
E0A21200A2485AA4485AA448C7FC131FEB7F80EBE1C0380F80E0A21300120E381E01C0121CA338
380380A21484EB07060070130C130E1418EB063038E007E0386003C017237DA219>I<136013F0
13E0A21300A8120EEA1F801233126312C3A3EA0700A2120EA35A13201330EA3860A213C01239EA
1F80EA0E000C217CA00F>I<EA01E0EA1FC0A21201A2EA0380A4EA0700A4120EA45AA45AA45AA2
12711380EAE300A312E6127E123C0B237CA20C>108 D<391E07C07C393F1FE1FE3963B8738790
39E03E038012C3EBC03CEB803800079038780700EB0070A3000EEBE00EA21610ED1C18261C01C0
133015381660ED18C03A3803801F80D81801EB0F0025157C9428>I<381E0780383F1FE0EA63B8
EBE070EAC3C0A21380000713E01300A3380E01C0A214C2EB0383001C1386EB0706140CEB031800
3813F0381801E018157C941B>I<137E48B4FC3803C380380701C0120E001C13E0123CA21278A3
38F003C0A21480130700701300130E5B6C5AEA1FF0EA07C013157B9419>I<3803C1F03807E3F8
380C761C137C3818781E1370A2EA00E0A43801C03CA314780003137014F014E0EBE3C038077F80
EB1E0090C7FCA2120EA45AA2EAFFC0A2171F7F9419>I<381E0F80383F1FC03863B0E013E0EAC3
C1A2EB80C00007130090C7FCA3120EA45AA45A121813157C9415>114 D<13FC48B4FC38038380
EA0703EA0E07A2EB0200000FC7FC13F0EA07FC6C7EEA007E130FA2EA7007EAF00EA2485AEA7038
EA3FF0EA1FC011157D9414>I<13C01201A4EA0380A4EA0700EAFFF8A2EA0700120EA45AA45AA2
13101318EA7030A21360EA71C0EA3F80EA1E000D1F7C9E10>I<000F1330381F8070EA31C00061
13E012C1EAC380A2380381C0EA0701A3380E0380A214841486EB070CA2130FEB1F183807F3F038
03E1E017157C941A>I<380F01C0381F83E0EA31C3EA61C1EAC1C0EAC380A2000313C0EA0700A3
380E0180A3EB0300A213061304EA0F1CEA07F8EA01E013157C9416>I<3803C1C0380FE7E0381C
7E3038303C70EB38F01260146038007000A45BA214200070133038F1C060A200E113C038E3E180
387E7F00EA3C3E14157D9416>120 D E /Fi 65 123 df<903807F83F017FB512C03A01FC0FE3
E03903F01FC7EA07E0D80FC01387ED83C0ED8000A6B612FCA2390FC01F80B2397FF8FFF8A22323
7FA221>11 D<EB0FFF137F3801FC3FEA03F0EA07E0EA0FC0A8B6FCA2380FC03FB2397FF9FFE0A2
1B237FA21F>13 D<13181330136013C01201EA0380120713005A121EA2123E123CA2127CA31278
12F8AD1278127CA3123CA2123E121EA27E7E13801203EA01C012001360133013180D317BA416>
40 D<12C012607E7E121C7E120F7E1380EA03C0A213E01201A213F0A3120013F8AD13F01201A3
13E0A2120313C0A2EA078013005A120E5A12185A5A5A0D317DA416>I<1238127C12FE12FFA212
7F123B1203A212071206A2120C121C12181270122008117C8610>44 D<EAFFFCA50E057F8D13>
I<1238127C12FEA3127C123807077C8610>I<13181378EA01F812FFA21201B3A7387FFFE0A213
207C9F1C>49 D<EA03FCEA0FFF383C1FC0387007E0007C13F0EAFE0314F8A21301127CEA380312
0014F0A2EB07E014C0EB0F80EB1F00133E13385BEBE018EA01C0EA0380EA0700000E1338380FFF
F05A5A5AB5FCA215207D9F1C>I<EA01FE3807FFC0380F07E0381E03F0123FEB01F813811301EA
1F03000C13F0120014E0EB07C0EB1F803801FE007F380007C0EB01F014F8EB00FCA214FE127CA2
12FEA214FCEA7C01007813F8383C07F0380FFFC03803FE0017207E9F1C>I<14E013011303A213
07130F131FA21337137713E7EA01C71387EA03071207120E120C12181238127012E0B512FEA238
0007E0A7EBFFFEA217207E9F1C>I<00101320381E01E0381FFFC0148014005B13F8EA1BC00018
C7FCA4EA19FCEA1FFF381E0FC0381807E01303000013F0A214F8A21238127C12FCA214F012F838
6007E0003013C0381C1F80380FFF00EA03F815207D9F1C>I<EB1F80EBFFE03803F0703807C0F0
380F01F8121F123EA2387E00F0007C1300A2EAFC08EB7FC0EBFFE038FD80F038FF00F848137CA2
48137EA4127CA3003C137C123E001E13F86C13F0380783E03803FFC0C6130017207E9F1C>I<EA
01FE3807FF80380F83E0381E01F0EA3E004813F8147800FC137CA3147EA4007C13FEA2EA3E0138
1E037EEA0FFEEA07FCEA0020EB007CA2121E003F13F8A214F0EB01E0381E03C0381C0F80380FFE
00EA03F817207E9F1C>57 D<1238127C12FEA3127C12381200A81238127C12FEA3127C12380716
7C9510>I<EA07FCEA1FFF38380F80387007C000F813E012FCA3127838000FC0EB1F801400133C
5B13705BA25BA690C7FCA5EA01C0487E487EA36C5A6C5A13237DA21A>63
D<1470A214F8A3497EA2497EA3EB06FF80010E7FEB0C3FA201187F141F01387FEB300FA201607F
140701E07F90B5FCA239018001FCA200038090C7FCA20006147FA23AFFE00FFFF8A225227EA12A
>65 D<B67E15E03907F001F86E7E157EA2157FA5157E15FE5DEC03F890B55AA29038F001FCEC00
7E811680151F16C0A6ED3F80A2ED7F00EC01FEB612F815C022227EA128>I<D903FE138090381F
FF819038FF01E33901F8003FD803E0131F4848130F48481307121F48C71203A2481401127EA200
FE91C7FCA8127EED0180127F7E15036C6C1400120F6C6C1306D803F05B6C6C13386CB413F09038
1FFFC0D903FEC7FC21227DA128>I<B67E15F03907F003FCEC007E81ED1F80ED0FC0ED07E0A216
F01503A316F8A916F0A3ED07E0A2ED0FC0ED1F80ED3F00157EEC03FCB612F0158025227EA12B>
I<B612FCA23807F000153C151C150C150EA215061418A3150014381478EBFFF8A2EBF078143814
18A21503A214001506A3150EA2151E153EEC01FCB6FCA220227EA125>I<B612F8A23807F001EC
007815381518151CA2150CA21418A21500A214381478EBFFF8A2EBF07814381418A491C7FCA8B5
12E0A21E227EA123>I<D903FE134090391FFFC0C090387F00F1D801F8133F4848130FD807C013
07000F1403485A48C71201A2481400127EA200FE1500A791380FFFFC127E007F9038001FC0A27E
A26C7E6C7E6C7E6C7ED801FC133F39007F80E790381FFFC30103130026227DA12C>I<B53883FF
FEA23A07F0001FC0AD90B6FCA29038F0001FAFB53883FFFEA227227EA12C>I<B512E0A23803F8
00B3ACB512E0A213227FA115>I<B538803FFCA23A07F0000380ED0700150E15185D15E04A5A4A
5A4AC7FC140E1418143814FCEBF1FE13F3EBF77F01FE7FEBF83F496C7E81140F6E7E8114036E7E
816E7E811680ED3FC0B53883FFFCA226227EA12C>75 D<B512E0A2D807F0C7FCB31518A41538A2
1570A215F014011407B6FCA21D227EA122>I<D8FFF0EC0FFF6D5C000716E0D806FC1437A3017E
1467A26D14C7A290391F800187A290390FC00307A3903807E006A2903803F00CA2903801F818A3
903800FC30A2EC7E60A2EC3FC0A2EC1F80A3EC0F00D8FFF091B5FC140630227EA135>I<D8FFF8
EB1FFE7F0007EC00C07FEA06FF6D7E6D7E6D7E130F806D7E6D7E6D7E130080EC7F80EC3FC0EC1F
E0EC0FF0140715F8EC03FCEC01FEEC00FF157FA2153F151F150F15071503A2D8FFF01301150027
227EA12C>I<EB07FC90383FFF809038FC07E03903F001F848486C7E4848137E48487FA248C7EA
1F80A24815C0007E140FA200FE15E0A9007E15C0007F141FA26C15806D133F001F15006C6C137E
6C6C5B6C6C485A3900FC07E090383FFF80D907FCC7FC23227DA12A>I<B6FC15E03907F007F0EC
01FC1400157EA2157FA5157EA215FC1401EC07F090B512E0150001F0C7FCADB57EA220227EA126
>I<B512FEECFFC03907F007F0EC01F86E7E157E157FA6157E5D4A5AEC07F090B512C05D9038F0
0FE06E7E6E7E6E7EA81606EC00FEEDFF0CB538803FF8ED0FF027227EA12A>82
D<3801FC043807FF8C381F03FC383C007C007C133C0078131CA200F8130CA27E1400B4FC13E06C
B4FC14C06C13F06C13F86C13FC000313FEEA003FEB03FFEB007F143FA200C0131FA36C131EA26C
133C12FCB413F838C7FFE00080138018227DA11F>I<007FB61280A2397E03F80F007814070070
14030060140100E015C0A200C01400A400001500B3A20003B512F8A222227EA127>I<B538803F
FCA23A07F0000180B3A60003EC03007F000114066C6C130E017E5B90383F80F890380FFFE00101
90C7FC26227EA12B>I<B538800FFEA2D807F0C712C07F0003EC0180A26C6CEB0300A26D5B0000
14067F6D5B1480013F5BA2ECC038011F133014E0010F5B14F001075BA214F901035B14FD6DB4C7
FCA26D5AA3147CA21438A227227FA12A>I<B53A0FFFF01FFEA2260FF00090C712E000076E14C0
A26C6C9138800180153F6D1503000103C01300A26C6C90387FE006156F7F6D9038C7F00CA20280
EBF81C90263F81831318A2D91FC36D5A150114E3903A0FE600FE60A202F6EBFFE0D907FC6D5AA2
01035D4A133FA26D486DC7FCA20100141E4A130EA237227FA13A>I<3A7FFFC1FFF0A23A03FC00
0C006C6C5B000014386D5B90387F8060013F5B14C190381FE380010F90C7FC14F7EB07FE6D5AA2
6D7E13008081497F14BF9038031FE0496C7E130E90380C07F8496C7E133890383001FE496C7E13
E04848EB7F8049EB3FC03AFFFC03FFFEA227227FA12A>I<B538800FFEA2D807F8C712C015016C
6C14806C6CEB03005D6C6C13065D90387F801C90383FC0185D90381FE07090380FF06015E06D6C
5A903803FD8014FF6D90C7FC5C1300AC90381FFFF0A227227FA12A>I<003FB512E0A29038801F
C0383E003F003C14800038EB7F00485B5C1301386003FC5C130700005B495A131F5C133F495A91
C7FC5B491360485A12035B000714E0485A5B001FEB01C013C0383F8003007F1307EB003FB6FCA2
1B227DA122>I<EA07FC381FFF80383F0FC0EB07E0130314F0121E1200A213FF1207EA1FC3EA3F
03127E12FCA4EA7E07EB1DF8381FF8FF3807E07F18167E951B>97 D<B47EA2121FABEB8FE0EBBF
F8EBF07CEBC01EEB801FEC0F80A215C0A81580141F1500EBC03EEB607C381E3FF8381C0FC01A23
7EA21F>I<EBFF80000713E0380F83F0EA1F03123E127E387C01E090C7FC12FCA6127C127EA200
3E13306C1360380FC0E03807FF803800FE0014167E9519>I<EB03FEA2EB007EABEA01FCEA07FF
380F81FEEA1F00003E137E127E127C12FCA8127CA27E001E13FEEA0F833907FF7FC0EA01FC1A23
7EA21F>I<13FE3807FF80380F87C0381E01E0003E13F0EA7C0014F812FCA2B5FCA200FCC7FCA3
127CA2127E003E13186C1330380FC0703803FFC0C6130015167E951A>I<EB3F80EBFFC03801F3
E0EA03E7EA07C7120FEBC3C0EBC000A6EAFFFCA2EA0FC0B2EA7FFCA213237FA211>I<3801FE1F
0007B51280380F87E7EA1F03391E01E000003E7FA5001E5BEA1F03380F87C0EBFF80D819FEC7FC
0018C8FC121CA2381FFFE014F86C13FE80123F397C003F8048131F140FA3007CEB1F00007E5B38
1F80FC6CB45A000113C019217F951C>I<B47EA2121FABEB87E0EB9FF8EBB8FCEBE07CEBC07EA2
1380AE39FFF1FFC0A21A237EA21F>I<120E121FEA3F80A3EA1F00120EC7FCA7EAFF80A2121FB2
EAFFF0A20C247FA30F>I<131C133E137FA3133E131C1300A7EA03FFA2EA003FB3A5127812FC13
3E137EEA78FCEA7FF0EA1FC0102E83A311>I<B47EA2121FABECFF80A2EC38005C14C0EB838001
87C7FC138E139E13BE13FFEBDF80EB8FC0A2EB87E0EB83F0A2EB81F8EB80FC147E39FFF1FFC0A2
1A237EA21E>I<EAFF80A2121FB3ADEAFFF0A20C237FA20F>I<3AFF87F00FE090399FFC3FF83A1F
B87E70FC9039E03EC07C9039C03F807EA201801300AE3BFFF1FFE3FFC0A22A167E952F>I<38FF
87E0EB9FF8381FB8FCEBE07CEBC07EA21380AE39FFF1FFC0A21A167E951F>I<13FE3807FFC038
0F83E0381E00F0003E13F848137CA300FC137EA7007C137CA26C13F8381F01F0380F83E03807FF
C03800FE0017167E951C>I<38FF8FE0EBBFF8381FF07CEBC03E497E1580A2EC0FC0A8EC1F80A2
EC3F00EBC03EEBE0FCEBBFF8EB8FC00180C7FCA8EAFFF0A21A207E951F>I<EAFF1FEB3FC0381F
67E013C7A3EB83C0EB8000ADEAFFF8A213167E9517>114 D<EA07F3EA1FFFEA780FEA7007EAF0
03A26CC7FCB4FC13F0EA7FFC6C7E6C7E120738003F80EAC00F130712E0A200F01300EAFC1EEAEF
FCEAC7F011167E9516>I<13C0A41201A212031207120F121FB5FCA2EA0FC0ABEBC180A51207EB
E300EA03FEC65A11207F9F16>I<38FF83FEA2381F807EAF14FEA2EA0F833907FF7FC0EA01FC1A
167E951F>I<39FFF01FE0A2390FC00600A2EBE00E0007130CEBF01C0003131813F800015BA26C
6C5AA2EB7EC0A2137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFE3FF87F8A23A1F807C00C0
D80FC0EB0180147E13E0000790387F030014DF01F05B00031486EBF18FD801F913CC13FB9038FF
07DC6C14F8EBFE03017E5BA2EB7C01013C5BEB380001185B25167F9528>I<39FFF07FC0A2390F
C01C006C6C5A6D5A6C6C5A00015B3800FD80017FC7FCA27F6D7E497E80EB67F013E33801C1F838
0381FC48C67E000E137E39FF81FFE0A21B167F951E>I<39FFF01FE0A2390FC00600A2EBE00E00
07130CEBF01C0003131813F800015BA26C6C5AA2EB7EC0A2137F6D5AA26DC7FCA2130EA2130CA2
5B1278EAFC3813305BEA69C0EA7F80001FC8FC1B207F951E>I<387FFFF0A2387C07E038700FC0
EA601F00E0138038C03F005B13FEC65A1201485AEBF0301207EA0FE0EBC070EA1F80003F1360EB
00E0EA7E03B5FCA214167E9519>I E /Fj 64 123 df<90380FC3E090387FEFF09038E07C7838
01C0F8D8038013303907007000A7B61280A23907007000B0387FE3FFA21D20809F1B>11
D<EB1F80EB7FC03801E0E0EA0381A2EA070190C7FCA6B512E0A2EA0700B0387FC3FEA21720809F
19>I<EB1FE0137FEA01E1EA03811380EA0700A7B5FCA2EA0700B0387FE7FEA21720809F19>I<90
380F80F890387FE7FE9038E06E063901C0FC0F380380F8380700F00270C7FCA6B7FCA239070070
07B03A7FE3FE3FF0A22420809F26>I<EA7038EAF87CEAFC7EA2EA7C3EEA0C06A3EA180CA2EA38
1CEA3018EA6030EA40200F0E7E9F17>34 D<127012F812FCA2127C120CA31218A2123812301260
1240060E7C9F0D>39 D<136013C0EA0180EA03005A12065A121C12181238A212301270A31260A2
12E0AC1260A21270A312301238A21218121C120C7E12077EEA0180EA00C013600B2E7DA112>I<
12C012607E7E121C120C7E12077E1380A2120113C0A31200A213E0AC13C0A21201A313801203A2
13005A12065A121C12185A5A5A0B2E7DA112>I<127012F812FCA2127C120CA31218A212381230
12601240060E7C840D>44 D<EAFFC0A30A037F8A0F>I<127012F8A3127005057C840D>I<1303A2
13071306A2130E130CA2131C1318A213381330A213701360A213E013C0A212011380A312031300
A25A1206A2120E120CA2121C1218A212381230A212701260A212E05AA2102D7DA117>I<EA03F0
EA0FFCEA1E1EEA1C0E487E00781380EA7003A300F013C0AD00701380A3EA780700381300EA1C0E
EA1E1EEA0FFCEA03F0121F7E9D17>I<130EA2131E133EA2136E13EE13CEEA018E1203130E1206
120E120C121812381230126012E0B512F0A238000E00A7EBFFE0A2141E7F9D17>52
D<1260387FFFC0A21480EA600138C003001306A2C65A5BA25B5BA213E05B1201A3485AA41207A7
6CC7FC121F7D9D17>55 D<EA03F0487EEA1E1CEA380E7F1270EB038012F0A214C0A5EA7007A2EA
380F121CEA1FFBEA07F338000380A2130714001230EA780EA2EA701CEA3078EA1FF0EA0FC0121F
7E9D17>57 D<127012F8A312701200AA127012F8A3127005147C930D>I<127012F8A312701200
AA127012F8A312781218A41230A21260A21240051D7C930D>I<EA0FC0EA3FF0EA7078EA6038EA
E03C12F0A212601200137813F013E0EA01C0138012031300A7C7FCA51207EA0F80A3EA07000E20
7D9F15>63 D<EB0380A3497EA3EB0DE0A3EB18F0A3EB3078A3497EA3EBE01E13C0EBFFFE487FEB
800FA200031480EB0007A24814C01403EA0F8039FFE03FFEA21F207F9F22>65
D<B512E014F83807803E80801580A515005C143E5CEBFFF880EB801E801580140715C0A5158014
0FEC1F00143EB512FC14F01A1F7E9E20>I<90381FC04090387FF0C03801F8393803C00D380780
07380F0003121E003E1301123C127C1400127812F81500A8007814C0127CA2123C003EEB018012
1E6CEB0300EA07803803C00E3801F81C38007FF0EB1FC01A217D9F21>I<B512E014FC3807803E
140FEC0780EC03C015E0140115F01400A215F8A915F0A2140115E0A2EC03C0EC0780EC0F00143E
B512FC14E01D1F7E9E23>I<B6FCA23807801F140780A215801401A214C1A2ECC000A2138113FF
A213811380A21560A2140015C0A31401A21403EC0F80B6FCA21B1F7E9E1F>I<B6FCA23807801F
140780A215801401A214C1A2ECC000A2138113FFA213811380A491C7FCA8EAFFFEA2191F7E9E1E
>I<90380FC02090387FF8603901F81CE03803E00638078003380F0001121E14005A127C156012
7812F81500A6EC7FFCA20078EB01E0127CA2123C7EA27E38078003EA03E03901F80E6039007FFC
2090380FE0001E217D9F24>I<39FFF8FFF8A23907800F00AC90B5FCA2EB800FAD39FFF8FFF8A2
1D1F7E9E22>I<EAFFFCA2EA0780B3A9EAFFFCA20E1F7F9E10>I<EAFFFEA2EA0780B11406A4140E
A2140C141C143C14FCB5FCA2171F7E9E1C>76 D<B46CEB1FF86D133F00071500A2D806E0136FA3
017013CFA3903838018FA390381C030FA3EB0E06A3EB070CA3EB0398A3EB01F0A3380F00E03AFF
F0E1FFF8A2251F7E9E2A>I<39FF807FF813C00007EB07809038E00300A2EA06F0A21378133CA2
131EA2130FA2EB078314C31303EB01E3A2EB00F3A2147BA2143F80A280A2000F7FEAFFF0801D1F
7E9E22>I<EB1F80EBFFF03801E0783807C03E48487E497E001EEB078048EB03C0A2007C14E0A2
0078130100F814F0A9007814E0007C1303A2003C14C0003E1307001E14806CEB0F006D5A3807C0
3E3801F0F86CB45AEB1F801C217D9F23>I<B512E014F83807807C141E141F801580A515005C14
1E147CEBFFF814E00180C7FCACEAFFFCA2191F7E9E1F>I<3807E080EA0FF9EA1C1FEA300FEA70
07EA600312E01301A36CC7FCA21278127FEA3FF0EA1FFC6C7EEA03FF38001F801307EB03C0A213
0112C0A400E01380EAF00338F80700EAFE0EEACFFCEA81F812217D9F19>83
D<007FB512E0A238780F010070130000601460A200E0147000C01430A400001400B23807FFFEA2
1C1F7E9E21>I<3BFFF07FF83FF0A23B0F0007800F80EE0300A23A07800FC006A3913819E00ED8
03C0140CA214393A01E030F018A33A00F0607830A3ECE07C903978C03C60A390393D801EC0A390
383F000F6D5CA3010E6DC7FCA32C207F9E2F>87 D<397FF83FF8A23907C00F800003EB06003801
E00EEBF00C00005BEB7838EB7C30EB3C70EB3E60EB1EC0130F5C13078080130DEB1DF0EB18F8EB
3878EB307CEB603CEBE01EEBC01F48487E0003EB0780010013C0EA0F8039FFE01FFEA21F1F7F9E
22>I<EA0804EA180CEA3018EA7038EA6030A2EAC060A3EAF87CEAFC7EA2EA7C3EEA381C0F0E7B
9F17>92 D<EA1FE0487EEA78387FEA300E1200A3EA03FE121FEA3E0E127812F800F01330A3131E
38783F70383FEFE0380F878014147E9317>97 D<120E12FEA2120EA9133FEBFF80380FC3C0EB00
E0000E13F014701478A7147014F0120FEB01E0EBC3C0380CFF80EB3E0015207F9F19>I<EA03F8
EA0FFCEA1E1E123CEA380CEA7800127012F0A612701278EA3803123CEA1F0EEA0FFCEA03F01014
7E9314>I<EB0380133FA21303A9EA03E3EA0FFBEA1E0FEA3C07EA7803A2127012F0A61270A2EA
78071238EA1E1F380FFBF8EA03E315207E9F19>I<EA03F0EA0FFCEA1E1E487EEA380712783870
038012F0B5FCA200F0C7FCA31270127838380180EA1C03380F0700EA07FEEA01F811147F9314>
I<133C13FEEA01CFEA038F1306EA0700A7EAFFF0A2EA0700B0EA7FF0A21020809F0E>I<EB01E0
3803E3F0380FFF70EA1C1C383C1E00EA380EEA780FA4EA380EEA3C1EEA1C1CEA3FF8EA33E00030
C7FCA21238EA3FFE381FFF804813C0387003E0EB00F0481370A36C13F0387801E0383E07C0380F
FF00EA03FC141F7F9417>I<120E12FEA2120EA9133E13FF380FC380EB01C0A2120EAD38FFE7FC
A216207F9F19>I<121C121E123E121E121CC7FCA6120E127EA2120EAFEAFFC0A20A1F809E0C>I<
13E0EA01F0A3EA00E01300A61370EA07F0A212001370B3A21260EAF0E0EAF1C0EA7F80EA3E000C
28829E0E>I<120E12FEA2120EA9EB1FF0A2EB0F80EB0E00130C5B5B137013F0EA0FF81338EA0E
1C131E130E7F1480130314C038FFCFF8A215207F9F18>I<120E12FEA2120EB3A9EAFFE0A20B20
809F0C>I<390E3F03F039FEFF8FF839FFC1DC1C390F80F80EEB00F0000E13E0AD3AFFE7FE7FE0
A223147F9326>I<EA0E3EEAFEFF38FFC380380F01C0A2120EAD38FFE7FCA216147F9319>I<EA01
F8EA07FE381E0780383C03C0EA3801387000E0A200F013F0A6007013E0EA7801003813C0EA3C03
381E07803807FE00EA01F814147F9317>I<EA0E3F38FEFF8038FFC3C0380F01E0380E00F0A214
78A7147014F0120FEB01E0EBC3C0380EFF80EB3E0090C7FCA7EAFFE0A2151D7F9319>I<3803E1
80EA0FF9EA1E1FEA3C0712781303127012F0A6127012781307EA3C0FEA1E1FEA0FF3EA03E3EA00
03A7EB3FF8A2151D7E9318>I<EA0E78EAFEFCEAFF9EEA0F1E130C1300120EACEAFFE0A20F147F
9312>I<EA1F90EA3FF0EA7070EAE030A3EAF0001278EA7F80EA3FE0EA0FF01200EAC0781338A2
12E0A2EAF070EADFE0EA8F800D147E9312>I<1206A4120EA2121E123EEAFFF8A2EA0E00AA1318
A5EA073013E0EA03C00D1C7F9B12>I<380E01C0EAFE1FA2EA0E01AC1303A2EA070FEBFDFCEA01
F116147F9319>I<38FF87F8A2381E01E0000E13C01480A238070300A3EA0386A2138EEA01CCA2
13FC6C5AA21370A315147F9318>I<39FF9FF3FCA2391C0780F01560ECC0E0D80E0F13C0130C14
E00007EBE180EB186114713903987300EBB033A2143F3801F03EEBE01EA20000131CEBC00C1E14
7F9321>I<387FC7FCA2380703E0148038038300EA01C7EA00EE13EC13781338133C137C13EEEA
01C7138738030380380701C0000F13E038FF87FEA21714809318>I<38FF87F8A2381E01E0000E
13C01480A238070300A3EA0386A2138EEA01CCA213FC6C5AA21370A31360A35B12F0EAF18012F3
007FC7FC123C151D7F9318>I<EA3FFFA2EA380EEA301CEA703CEA6038137013F0EA01E013C0EA
0380EA0783EA0F03120EEA1C07EA3C061238EA701EEAFFFEA210147F9314>I
E /Fk 37 121 df<1318137013E0EA01C0EA0380A2EA0700120EA2121E121C123CA25AA412F85A
A97E1278A47EA2121C121E120EA27EEA0380A2EA01C0EA00E0137013180D2D7DA114>40
D<12C012707E7E7EA27EEA0380A213C0120113E0A2EA00F0A413F81378A913F813F0A4EA01E0A2
13C012031380A2EA0700120EA25A5A5A12C00D2D7DA114>I<1238127C12FE12FFA2127F123B12
03A21206A2120E120C12181270122008107C860F>44 D<1238127C12FEA3127C12381200A61238
127C12FEA3127C123807147C930F>58 D<EA07F8EA1FFE38381F80EA780F00FC13C0A312783830
1F8000001300133E5B13705BA25BA690C7FCA4EA01C0EA07F0A5EA01C012207D9F19>63
D<14E0A2497EA3497EA2497EA2497E130CA2EB187FA201307F143F01707FEB601FA201C07F140F
48B57EA2EB800748486C7EA20006801401000E803AFFE01FFFE0A2231F7E9E28>65
D<903807FC0290383FFF0E9038FE03DE3903F000FE4848133E4848131E485A48C7120EA2481406
127EA200FE1400A7127E1506127F7E150C6C7E6C6C13186C6C13386C6C13703900FE01C090383F
FF80903807FC001F1F7D9E26>67 D<B512FEECFFC03907F007F0EC01F86E7E157E81A2ED1F80A3
16C0A91680A3ED3F00A2157E5D4A5AEC07F0B612C04AC7FC221F7E9E28>I<B612E0A23807F007
14011400156015701530A21460A21500A2EBF1E013FFA213F1EBF060A2150CA214001518A31538
157815F8EC03F0B6FCA21E1F7E9E22>I<B51280A23807F000B3A9B51280A2111F7F9E14>73
D<D8FFF0EC7FF86D14FF00071600D806FCEB01BFA3017EEB033FA26D1306A290381F800CA39038
0FC018A2903807E030A2903803F060A3903801F8C0A2903800FD80A2EC7F00A2143EA33BFFF01C
07FFF8A22D1F7E9E32>77 D<D8FFF8EBFFF0A2D807FCEB06007F7F00061380137FEB3FC0EB1FE0
EB0FF014F8EB07FC1303EB01FEEB00FFEC7F8615C6EC3FE6141FEC0FF6EC07FE1403A214011400
157E153E151EA2D8FFF0130E1506241F7E9E29>I<EB1FF890B5FC3901F81F803907E007E0390F
C003F0391F8001F890C7FC4814FC4814FE007E147EA200FE147FA9007E147E007F14FEA26C14FC
EB8001001F14F8390FC003F03907E007E03901F81F806CB51200EB1FF8201F7D9E27>I<B512FE
ECFF803907F00FE0EC03F0EC01F8A215FCA515F8A2EC03F0EC0FE090B51280ECFE0001F0C7FCAC
B57EA21E1F7E9E24>I<B512F814FF3907F01FC0EC07E06E7EA281A45DA24A5AEC1FC090B5C7FC
5C9038F03F806E7E81140FA61630A2EDF070913807F860B53881FFE09138807F80241F7E9E27>
82 D<3803FC08380FFF38381E03F8EA3C00481378143812F814187E1400B4FC13F86CB4FC14C0
6C13E06C13F06C13F8120338001FFC13011300A200C0137CA36C1378A200F813F038FE01E038E7
FFC000811300161F7D9E1D>I<007FB512FCA2397C0FE07C0070141C0060140CA200E0140E00C0
1406A400001400B10007B512C0A21F1E7E9D24>I<B5380FFF80A23A07F800F00000035C6D485A
D801FE5B6C6C48C7FC5CEB7F8EEB3FCC14D8EB1FF86D5A1307806D7E80A2EB06FF90380E7F8013
1C9038183FC0496C7E1370496C7E496C7E3801800300038000076D7E3AFFF81FFFE0A2231F7E9E
28>88 D<EA07FCEA1FFF383F0F80EB07C0EB03E0A2120C1200EA01FF120FEA3F83EA7E03127C12
F8A3EAFC07EA7E0D383FF9FE3807E07E17147F9319>97 D<EA01FE3807FF80381F0FC0123EA212
7CEB030000FCC7FCA6127C127E003E1360003F13C0EA1F813807FF00EA01FC13147E9317>99
D<EB07F8A21300AAEA01F8EA0FFEEA1F83EA3E01EA7E00127CA212FCA6127CA2127EEA3E01EA1F
07380FFEFFEA03F818207E9F1D>I<EA01FE3807FF80381F83E0383F01F0EA7E0014F85AA2B5FC
A200FCC7FCA3127C127E003E1318003F1338380F80703807FFE0C6138015147F9318>I<EB1F80
EBFFC03801F3E0EA03E713C71207EBC3C0EBC000A5EAFFFCA2EA07C0B0EA3FFCA213207F9F10>
I<B4FCA2121FAAEB0FC0EB3FE0EB61F0EBC0F813801300AD38FFE3FFA218207D9F1D>104
D<121C123F5AA37E121CC7FCA6B4FCA2121FB0EAFFE0A20B217EA00E>I<B4FCA2121FAAEB01FE
A2EB00F0EB01C0EB0380EB0700131E1338137C13FE7F131F381E0F80EB07C014E0EB03F01301EB
00F838FFC3FFA218207E9F1C>107 D<B4FCA2121FB3AAEAFFE0A20B207E9F0E>I<3AFE0FE03F80
90393FF0FFC03A1E70F9C3E09039C07F01F0381F807EA2EB007CAC3AFFE3FF8FFEA227147D932C
>I<38FE0FC0EB3FE0381E61F0EBC0F8EA1F801300AD38FFE3FFA218147D931D>I<48B4FC000713
C0381F83F0383E00F8A248137CA200FC137EA6007C137CA26C13F8A2381F83F03807FFC0000113
0017147F931A>I<38FF1FC0EB7FF0381FE1F8EB80FCEB007EA2143E143FA6143E147E147CEB80
FCEBC1F8EB7FE0EB1F8090C7FCA7EAFFE0A2181D7E931D>I<EAFE3EEB7F80381ECFC0EA1F8FA3
EB030090C7FCABEAFFF0A212147E9316>114 D<EA0FE6EA3FFEEA701EEA600EEAE006A2EAF800
EAFFC0EA7FF8EA3FFCEA1FFE1203EA001FEAC007A212E0EAF006EAF81EEAFFFCEAC7F010147E93
15>I<EA0180A31203A31207120F123FEAFFFCA2EA0F80AA1386A5EA07CCEA03F8EA01F00F1D7F
9C14>I<38FF07F8A2EA1F00AD1301A2EA0F073807FEFFEA03F818147D931D>I<3AFFE7FE1FE0A2
3A1F00F007006E7ED80F801306A23907C1BC0CA214BE3903E31E18A23901F60F30A215B03900FC
07E0A290387803C0A3903830018023147F9326>119 D<38FFE1FFA2380F80706C6C5A6D5A3803
E180EA01F36CB4C7FC137E133E133F497E136FEBC7C0380183E0380381F0380701F8380E00FC39
FF81FF80A219147F931C>I E /Fl 73 124 df<90380F83E090387FE7F09038F07E783801C0F8
EA0380EC7000EA0700A8B612C0A23907007000B1397FE3FF80A21D2380A21C>11
D<EB0FC0EB3FE0EBF0703801C03838038078A23807003091C7FCA7B512F8A2380700781438B039
7FE1FF80A2192380A21B>I<EB0FF8133FEBF078EA01C0EA03801438EA0700A8B512F8A2380700
38B1397FF3FF80A2192380A21B>I<903807E03F90393FF0FF809039F03BC1C03A01C01F00E039
03803E01A23A07001C00C01600A7B712E0A23907001C011500B03A7FF1FFCFFEA2272380A229>
I<EA7038EAF87CEAFC7EA2EA7C3EEA0C06A4EA180CA2EA3018A2EA6030EA40200F0F7EA218>34
D<127012F812FCA2127C120CA41218A21230A212601240060F7CA20E>39
D<1330136013C0EA0180EA03005A1206120E120C121C12181238A212301270A3126012E0AE1260
1270A312301238A21218121C120C120E120612077EEA0180EA00C0136013300C327DA413>I<12
C012607E7E7E120E120612077E1380120113C0A2120013E0A313601370AE136013E0A313C01201
A21380120313005A1206120E120C5A5A5A5A0C327DA413>I<127012F812FCA2127C120CA41218
A21230A212601240060F7C840E>44 D<EAFFE0A30B037F8B10>I<127012F8A3127005057C840E>
I<EB0180A213031400A25B1306A2130E130CA2131C1318A313381330A213701360A213E05BA212
015BA2120390C7FCA25A1206A2120E120CA3121C1218A212381230A212701260A212E05AA21131
7DA418>I<EA01F0EA07FCEA0E0E487E38380380A2007813C0EA7001A300F013E0AE007013C0A3
EA780300381380A2381C0700EA0E0EEA07FCEA01F013227EA018>I<EA01801203120F12FF12F3
1203B3A8EAFFFEA20F217CA018>I<EA03F0EA0FFCEA1C1F38300F80EA6007EB03C012C000F013
E0EAF801A3EA2003120014C0A2EB0780A2EB0F00131E131C5B5B5B485A485A38070060120E120C
4813E04813C0EA7FFFB5FCA213217EA018>I<EA03F0EA0FFCEA1C1F383007801270007813C0A2
1303EA380712001480A2EB0F00130E133CEA03F8A2EA001E7FEB078014C0130314E01220127012
F8A200F013C01260EB07801230381C1F00EA0FFCEA03F013227EA018>I<130EA2131EA2133EA2
136E13EE13CE1201138EEA030E12071206120E120C1218A212301270126012E0B512F8A238000E
00A73801FFF0A215217FA018>I<00101380EA1C07381FFF005B5B13F00018C7FCA613F8EA1BFE
EA1F0F381C0780EA180314C0EA000114E0A4126012F0A214C0EAC0031260148038300700EA1C1E
EA0FFCEA03F013227EA018>I<137E48B4FC3803C180380701C0EA0E03121CEB018048C7FCA212
7812701320EAF1FCEAF3FEEAF60738FC038000F813C0130112F014E0A51270A3003813C0130300
181380381C0700EA0E0EEA07FCEA01F013227EA018>I<12601270387FFFE0A214C0EA600038E0
018038C00300A21306C65AA25BA25BA25BA213E0A3485AA51203A86C5A13237DA118>I<EA01F0
EA07FCEA0E0F38180780EA3803383001C01270A31278EB0380123E383F0700EA1FCEEA0FFCEA03
F87FEA0F7F381C3F80EA380F387007C0130338E001E01300A5387001C0A238380380381E0F00EA
0FFEEA03F013227EA018>I<EA01F0EA07FCEA0E0E487E383803801278127038F001C0A314E0A5
127013031278EA3807EA1C0DEA0FF9EA07F1380081C0130113031480A2383007001278130EEA70
1C6C5AEA1FF0EA0FC013227EA018>I<127012F8A312701200AB127012F8A3127005157C940E>I<
127012F8A312701200AB127012F8A312781218A41230A3126012E01240051F7C940E>I<B612FE
A2C9FCA8B612FEA21F0C7D9126>61 D<497E497EA3497EA3497E130CA2EB1CF8EB1878A2EB383C
1330A2497EA3497EA348B51280A2EB800739030003C0A30006EB01E0A3000EEB00F0001F130139
FFC00FFFA220237EA225>65 D<B512F814FE3907800F80EC07C0EC03E0140115F0A515E01403EC
07C0EC0F8090B512005C9038801F80EC07C0EC03E0EC01F0140015F8A6EC01F0140315E0EC0FC0
B6120014FC1D227EA123>I<90380FE01090383FF8309038F81C703801E0063903C003F0380780
0148C7FC121E003E1470123C127C15301278A212F81500A700781430A2127CA2003C1460123E12
1E6C14C06C7E3903C001803901E003003800F80EEB3FF8EB0FE01C247DA223>I<B512F014FE38
07801FEC07C01403EC01E0EC00F015F81578157C153CA3153EA9153CA2157C1578A215F0EC01E0
1403EC07C0EC1F00B512FE14F81F227EA125>I<B612C0A23807800F14031401140015E0A21560
1460A3150014E0138113FFA2138113801460A21518A214001530A4157015F01401EC07E0B6FCA2
1D227EA121>I<B612C0A23807800F14031401140015E0A21560A21460A21500A214E0138113FF
A2138113801460A491C7FCA8EAFFFEA21B227EA120>I<903807F00890383FFC189038FC0E3838
01E0033903C001F83807800048C71278121E15385AA2007C14181278A212F81500A6EC1FFF1278
007CEB0078A2123CA27EA27E6C7E6C6C13F83801F0013900FC079890383FFE08903807F8002024
7DA226>I<39FFFC3FFFA239078001E0AD90B5FCA2EB8001AF39FFFC3FFFA220227EA125>I<EAFF
FCA2EA0780B3ACEAFFFCA20E227EA112>I<EAFFFEA2EA0780B3EC0180A41403A215005CA25C14
3FB6FCA219227EA11E>76 D<D8FFC0EB03FF6D5B000715E0A2D806F0130DA301781319A36D1331
A36D1361A36D13C1A29038078181A3903803C301A3EB01E6A3EB00FCA31478EA1F80D8FFF0EB3F
FF143028227EA12D>I<39FF800FFF13C00007EB01F89038E000607F12061378A27F133E131E7F
A2EB078014C01303EB01E0A2EB00F01478A2143CA2141E140FA2EC07E0A214031401A2381F8000
EAFFF0156020227EA125>I<EB0FE0EB7FFCEBF83E3903E00F8039078003C0390F0001E0A2001E
EB00F0003E14F8003C1478007C147CA20078143CA200F8143EA9007C147CA3003C1478003E14F8
001E14F06CEB01E0EB80033907C007C03903E00F803900F83E00EB7FFCEB0FE01F247DA226>I<
B512F014FC3807803FEC0F801407EC03C0A215E0A515C0A2EC0780140FEC3F00EBFFFC14F00180
C7FCADEAFFFCA21B227EA121>I<B512E014F83807803E140F6E7E816E7EA64A5A5D4AC7FC143E
EBFFF85CEB80788080140E140FA481A3ED818015C114073AFFFC03E300EC01FEC8127C21237EA1
24>82 D<3803F020380FFC60381C0EE0EA3803EA7001A2EAE000A21460A36C1300A21278127FEA
3FF0EA1FFE6C7E0003138038003FC0EB07E01301EB00F0A2147012C0A46C136014E06C13C0EAF8
0138EF038038C7FF00EA81FC14247DA21B>I<007FB512F8A2387C07800070143800601418A200
E0141C00C0140CA500001400B3A20003B5FCA21E227EA123>I<39FFFC0FFFA239078001F8EC00
60B3A5000314406D13C0A20001EB01803900E00300EB7007EB3C1EEB1FF8EB07E020237EA125>
I<3BFFF03FFC07FEA23B0F0007C001F00203EB00E01760D807806D13C0A33B03C007F001801406
A216032701E00C781300A33A00F0183C06A3903978383E0CEC301EA2161C90393C600F18A39039
1EC007B0A3010F14E0EC8003A36D486C5AA32F237FA132>87 D<397FF807FFA23907E003F00003
EB01C000015C3800F00301F890C7FCEB7806EB7C0EEB3E0CEB1E18EB1F38EB0FB0EB07E0A21303
1301497E80EB0778EB0E7CEB0C3EEB1C1EEB181F496C7EEB700701607F496C7E0001130101807F
00031300D80FC07F3AFFE007FFC0A222227FA125>I<EA0804EA180CEA3018A2EA6030A2EAC060
A4EAF87CEAFC7EA2EA7C3EEA381C0F0F7AA218>92 D<EA0FE0EA1FF8EA3C1C7FEA18071200A25B
EA03FF120FEA3F07127C127812F01418A2130F1278387C3FB8383FF3F0380FC3C015157E9418>
97 D<120E12FEA2121E120EAAEB1F80EB7FE0380FC0F0EB0078000E1338143C141C141EA7141C
143C000F1338EB8070EBC1F0380C7FC0EB1F0017237FA21B>I<EA01FEEA07FF380F0780121C38
3803000078C7FC127012F0A7127814C07E381E0180380F0300EA07FEEA01F812157E9416>I<14
E0130FA213011300AAEA03F0EA07FEEA1F07EA3C01EA38001278127012F0A712701278EA3801EA
3C03381E0EF0380FFCFEEA03F017237EA21B>I<EA01FCEA07FF380F0780381C03C0EA38010078
13E0EA7000B5FCA200F0C7FCA5127814607E6C13C0380F83803807FF00EA00FC13157F9416>I<
133C13FEEA01CFEA038FA2EA0700A9EAFFF8A2EA0700B1EA7FF8A2102380A20F>I<14F03801F1
F83807FFB8380F1F38381E0F00EA1C07003C1380A5001C1300EA1E0FEA0F1EEA1FFCEA19F00018
C7FCA2121CEA1FFF6C13C04813E0383801F038700070481338A400701370007813F0381E03C038
0FFF803801FC0015217F9518>I<120E12FEA2121E120EAAEB1F80EB7FC0380FC1E0EB80F0EB00
70120EAE38FFE7FFA218237FA21B>I<121C121E123E121E121CC7FCA8120E12FEA2121E120EAF
EAFFC0A20A227FA10E>I<EA01C0EA03E0A3EA01C0C7FCA8EA01E0120FA212011200B3A4EA60C0
12F11380EA7F00123E0B2C82A10F>I<120E12FEA2121E120EAAEB0FFCA2EB07E0EB0380EB0700
130E13185B137813F8EA0F9C131EEA0E0E7F1480EB03C0130114E014F038FFE3FEA217237FA21A
>I<120E12FEA2121E120EB3ABEAFFE0A20B237FA20E>I<390E1FC07F3AFE7FE1FF809039C0F303
C03A1F807E01E0390F003C00000E1338AE3AFFE3FF8FFEA227157F942A>I<380E1F8038FE7FC0
38FFC1E0381F80F0380F0070120EAE38FFE7FFA218157F941B>I<EA01FCEA07FF380F0780381C
01C0383800E0007813F00070137000F01378A700701370007813F0003813E0381C01C0380F0780
3807FF00EA01FC15157F9418>I<380E1F8038FE7FE038FFC1F0380F0078120E143CA2141EA714
3CA2000F1378EB8070EBC1F0380E7FC0EB1F0090C7FCA8EAFFE0A2171F7F941B>I<3801F060EA
07FCEA1F06381C03E0EA3C01EA7800A25AA712781301123C1303EA1F0EEA0FFCEA03F0C7FCA8EB
0FFEA2171F7E941A>I<EA0E3CEAFEFEEAFFCFEA1F8FEA0F061300120EADEAFFF0A210157F9413>
I<EA0F88EA3FF8EA7078EAE0381318A3EAF000127FEA3FE0EA1FF0EA01F8EA003CEAC01CA212E0
A2EAF018EAF878EADFF0EA8FC00E157E9413>I<1206A5120EA3121E123EEAFFF8A2EA0E00AA13
0CA51308EA0718EA03F0EA01E00E1F7F9E13>I<000E137038FE07F0A2EA1E00000E1370AC14F0
1301380703783803FE7FEA01F818157F941B>I<38FFC3FEA2381E00F8000E1360A26C13C0A338
038180A213C300011300A2EA00E6A3137CA31338A217157F941A>I<39FF8FF9FFA2391E01C07C
D81C031338000EEBE030A2EB06600007EB7060A2130E39038C30C01438139C3901D81980141DA2
EBF00F00001400A2497EEB600620157F9423>I<387FC1FFA2380780F8000313E03801C1C01480
3800E3001377133E133C131C133E13771367EBC3803801C1C0380380E0380700F0EA0F8038FFC1
FFA2181580941A>I<38FFC3FEA2381E00F8000E1360A26C13C0A338038180A213C300011300A2
EA00E6A3137CA31338A21330A213701360A2EAF0C012F1EAF380007FC7FC123E171F7F941A>I<
383FFFC0A2383C038038380700EA300EEA701EEA603C13385BEA00F0485A3803C0C01380EA0700
5AEA1E01001C1380EA3803EA7007B5FCA212157F9416>I<B512FEA21702808D18>I
E /Fm 44 122 df<903901FF81FF011F01EF13C0903A7F80FF87E0D9FE01EB0FF03903FC03FE13
F8D807F013FCA2EE07E0020190C7FCA6B712F8A32707F001FCC7FCB3A33A7FFF1FFFE0A32C2A7F
A928>11 D<121C127FEAFF80A5EA7F00121C09097B8813>46 D<EB3F803801FFF03807E0FC380F
C07E48487EA2393F001F80A24814C0A44814E0AF6C14C0A46C1480A2391F803F00A2380FC07E6C
6C5A3801FFF038003F801B277DA622>48 D<13075B137FEA07FFB5FCA212F8C6FCB3AB007F13FE
A317277BA622>I<EBFF80000713F0001F13FC383F03FFD87C001380007FEB7FC0EAFF80EC3FE0
A3141FEA7F00001C133FC7FC15C0A2EC7F80A2ECFF00495A5CEB03F0495A495A495A90383E00E0
5B13789038F001C0EA01C0EA038048B5FC5A5A5A481480B6FCA31B277DA622>I<EB7F803801FF
F0000713FC380F81FE381F80FF487E9038E07F80A5381FC0FFD807001300C7FC495AEB03F8495A
EBFFC014F0EB01FC6DB4FCEC7F8015C0143F15E0121EEA7F80A2EAFFC0A315C0147FD87F801380
387E00FF6C481300380FFFFC000313F0C613801B277DA622>I<14075C5C5C5C5CA25B5B497E13
0F130E131C1338137013F013E0EA01C0EA0380EA07005A120E5A5A5A5AB612F8A3C71300A7017F
13F8A31D277EA622>I<000C1303380F803FEBFFFEA25C5C14E05C49C7FC000EC8FCA6EB7FC038
0FFFF8EB80FC380E007F000C1480C7123F15C0A215E0A2123E127FEAFF80A315C01300007E137F
007814806CEBFF00381F01FE380FFFF8000313E0C690C7FC1B277DA622>I<EB07F0EB3FFCEBFF
FE3801FC0F3807F01F390FE03F80EBC07F121FEA3F80A2007FEB3F00EB001E91C7FCA25AEB0FC0
EB3FF8EB70FEEBE03F01C013809038801FC0A3010013E0A47EA4D83F8013C0A2001FEB3F80EA0F
C03907E0FF003803FFFCC613F0EB3FC01B277DA622>I<1238123E003FB512F0A315E04814C015
80A215003870001E5C5C48137014F0495AC6485A13075C130F91C7FC5B5BA3137EA213FEA41201
A86C5A13781C297CA822>I<EB3FC03801FFF04813FC380FC07EEB003F001E7F1580003E130FA2
123F1380EBE01F01F81300EBFE3F381FFF7E14F86C5B6C13FC6C7F6C7F00071480D81F9F13C0EA
3F07D87E0313E0EA7C0000FC133F48131F1407A21403A26C14C0007C1307007E14806C130F391F
C03F00380FFFFC000313F038007FC01B277DA622>I<EB7F803801FFF000077F380FE0FE381FC0
7E48487ED87F001380A248EB1FC0A415E0A46C133FA3383F807F001F13FF380FE1DF3803FF9F38
007E1F130015C0A2120F381F803FD83FC01380A2EC7F00A2EB80FE381F01FC495A380FFFE06C13
80D801FEC7FC1B277DA622>I<B612FCEDFF8016E03A03FC001FF0ED07F8821503A2821501A315
035EA24B5A4B5A4B5AED7FC090B6C7FC16E09039FC0007F0ED03FC6F7EA26F7EA21780A617005D
4B5A15074B5AB712F016C04BC7FC29297DA831>66 D<91393FF00180903903FFFE07010FEBFF8F
90393FF007FF9038FF80014848C7127FD807FC143F49141F4848140F485A003F15075B007F1503
A3484891C7FCAB6C7EEE0380A2123F7F001F15076C6C15006C6C5C6D141ED801FE5C6C6C6C13F8
90393FF007F0010FB512C0010391C7FC9038003FF829297CA832>I<B612F8EDFF8016E03A03FE
001FF8ED07FCED01FE6F7EEE7F80EE3FC0161F17E0A2EE0FF0A417F8AA17F0A3EE1FE0A217C016
3FEE7F801700ED01FE4B5AED1FF8B712E0168003FCC7FC2D297DA835>I<B512FEA300011300B3
B1B512FEA317297FA81A>73 D<B592383FFFC0A26E5C0003EFF000A2D9BFC014EFA2D99FE0EB01
CFA2D98FF0EB038FA3D987F8EB070FA2D983FC130EA2D981FE131CA3D980FF1338A291387F8070
A291383FC0E0A391381FE1C0A291380FF380A2913807FF00A36E5AA26E5AA26E5AD8FFFE0203B5
12C0A215703A297DA841>77 D<B5ECFFFE80A200036DEB03808080EBBFF8EB9FFC138FEB87FE80
01831380018113C01380EC7FE015F0EC3FF8EC1FFCEC0FFE1407EC03FF16836E13C36E13E3157F
ED3FF3ED1FFB16FF81818181A281167F163F161F160FEAFFFE160716032F297DA836>I<ECFFE0
010713FC90393FC07F8090397F001FC0D801FCEB07F048486D7E48486D7E000F8148486D7EA248
48EC7F80A2007F16C049143FA300FF16E0AA007F16C06D147FA2003F1680A26C6CECFF00A26C6C
495A00075D6C6C495A6C6C495A6CB4EB1FE090393FC07F8090260FFFFEC7FC010013E02B297CA8
34>I<B612F815FF16C03A03FE003FE0ED0FF0ED07F816FC150316FEA716FC150716F8ED0FF0ED
3FE090B61280EDFE0049C8FCB0B512F8A327297DA82F>I<B612E015FE6F7E3A03FE007FE0ED0F
F06F7E82150382A65E4B5AA2ED1FE0ED7FC090B500FEC7FC5D9038FE01FF9138007FC082153F82
151FA81707A2ED0FF8170FB539F807FE1E923801FFFC9238003FF030297DA834>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<39FFFC0FFFA33907F003C06C6C485AEA01FC6C6C48C7FCEBFF1E6D5AEB3FF8
6D5A130FA2130780497E497E131EEB3C7F496C7E496C7ED801E07FEBC00F00036D7E3AFFF01FFF
80A3211B7F9A24>120 D<3AFFFE03FF80A33A07F0007000A26D13F000035CEBFC0100015CA26C
6C485AA2D97F07C7FCA2148FEB3F8E14DEEB1FDCA2EB0FF8A36D5AA26D5AA26D5AA2495AA2EA38
07007C90C8FCEAFE0F130E131E5BEA7C78EA3FE0EA0FC021277F9A24>I
E /Fn 11 118 df<EB01E01303130F137FEA1FFFB5FCA213BFEAE03F1200B3B0007FB512F0A41C
2F7AAE29>49 D<913A03FF800380023FEBF00749B5EAFC0F0107ECFF1F011F9038803FBF903A3F
F80007FFD9FFE07F48497F48497F4890C8127F4848153F49151F121F49150F123F5B007F1607A3
4992C7FC12FFAB127F7FEF0780A2123F7F001F160F6D1600120F6D5D6C6C153E6C6D5C6C6D14FC
6C6D495AD93FF8495A903A1FFF801FC0010790B55A01014AC7FCD9003F13F80203138031337BB1
3C>67 D<B712E016FEEEFF8017E0C6D9C00013F0EE3FF8EE1FFC160F17FE160717FFA717FEA216
0F17FCEE1FF8EE3FF0EEFFE091B612C0170016F802C0C8FCB2B612C0A430317EB038>80
D<EB7FF80003B5FC000F14C0391FE01FF09038F007F88114036E7EEA0FE0EA07C0EA0100C7FCA2
EB01FF133F3801FFF13807FE01EA1FF0EA3FE0EA7FC0138012FF1300A3EB800314076C6C487E26
3FF03E13F8391FFFF87F0007EBF03FC6EB801F25207E9F28>97 D<EB07FF017F13E048B512F839
03FC03FC3807F807EA0FF0EA1FE0EA3FC0EC03F8007FEB01F0903880004000FF1400AA6C7EA200
3F141E7F001F143E6C6C137C6C6C13F83903FE03F06CB512E06C6C1380903807FC001F207D9F25
>99 D<EA03C0EA0FF0487EA37F5BA36C5AEA03C0C8FCA8EA01F812FFA4120F1207B3A4B51280A4
11337DB217>105 D<2703F007F8EB0FF000FFD93FFFEB7FFE4A6DB5FC903CF1F03FC3E07F8090
3CF3C01FE7803FC0260FF780EBEF0000079026000FFEEB1FE001FE5C495CA2495CB2B500C1B500
83B5FCA440207D9F45>109 D<3903F007F800FFEB3FFF4A7F9039F1F03FC09039F3C01FE0380F
F7800007496C7E13FE5BA25BB2B500C1B51280A429207D9F2E>I<EB07FE90383FFFC090B512F0
3903FC03FC3907F000FE4848137F4848EB3F80003F15C0A24848EB1FE0A300FF15F0A8007F15E0
A36C6CEB3FC0A26C6CEB7F80000F15003907F801FE3903FE07FC6CB55AD8003F13C0D907FEC7FC
24207E9F29>I<1378A513F8A41201A212031207120F381FFFFEB5FCA33807F800AF140FA7141F
3803FC1EEBFE3E3801FFFC38007FF0EB1FC0182E7EAD20>116 D<D801F8EB03F000FFEB01FFA4
000FEB001F0007140FB1151FA2153F157F6C6C497E903AFE03EFFF806CB512CF6C6C130FEB0FFC
29207D9F2E>I E /Fo 27 120 df<1238127C12FEA212FF127F123B1203A41206A2120CA21218
12381270122008137B8611>44 D<1318133813F8120712FF12F81200B3AD487E387FFFF0A21428
7CA71E>49 D<137F3801FFC0380781F0380E00F80018137C121E003F137EEB803EA3381F007E00
0E137CC7FCA25C5C495AEB07C001FFC7FCA2EB01E06D7E147C80A280A21580123C127EB4FCA315
00485B007C133E00305B001C5B380F01F06CB45AC690C7FC19297EA71E>51
D<00181318001F13F8EBFFF014E014C01400EA1BF80018C7FCA8137E3819FF80381F83C0381E01
E0381C00F0001813F8C71278147CA2147EA31238127C12FEA25A147C12F0006013F81270383001
F0381803E0380E07C03807FF00EA01FC17297DA71E>53 D<137F3801FFC03807C1E0380F007000
1E7F001C133C003C131C48131EA200F87FA41580A41278141F127C003C133F121C001E136F6C13
CF3807FF8F0001130FD8001013001300A2141EA2121E003F5BA25C1470003E5B381801C0380E07
80D807FEC7FCEA01F819297EA71E>57 D<B71280A23907F0003F00031407ED03C01501A21500A4
16601403A21600A35C5C90B5FCA2EBF00F8080A21630A391C7FC1660A416E0A215011503ED07C0
0007143FB7FCA224297EA829>69 D<02FF13100107EBE03090391FC0707090387E001C01F8EB0E
F048481303485A4848130148481300A248C812705A123E1630127E127CA200FC1500A84AB5FC12
7C007E90380007F01503123EA2123F7E6C7EA26C7E6C7E6C6C13076C7E017E131C90391FC07870
903907FFE0100100EB8000282B7DA92F>71 D<B512F0A2D807F8C7FC6C5AB3A41503A41506A415
0EA2151E153E157C0007EB03FCB6FCA220297EA825>76 D<D8FFF0913807FFC06D5C0007EEF800
00035E017C141BA36D1433A36D1463A26D6C13C3A3903907C00183A3903903E00303A2903801F0
06A3903800F80CA3EC7C18A3EC3E30A2EC1F60A3EC0FC0A33907800780D80FC04A7ED8FFFC91B5
12C06E5A32297EA837>I<EBFE013803FF83380781E7381E0077001C133F487F00787F127000F0
7FA280A27EA26C90C7FC127EEA7FC0EA3FFCEBFFC06C13F06C7F6C7F00017F38001FFF01011380
EB003F140F15C0140712C01403A37E1580A26C13076C14006C130E00EF5B38E3C07838C1FFF038
803FC01A2B7DA921>83 D<B53B83FFFC07FFC0A23D0FF0003FC000FE006C486D4813386C7E7013
30150F6D167000014A6C1360A27F00005FED33F0A2017E4B5AED61F8A26D4BC7FCEDE1FC15C002
805CD91F81EBFE06ED807E02C1140E010F150C9138C3003FA2D907E35C02E6EB1F98A2D903F614
B002FCEB0FF0A301015D4A1307A201005D4A1303A202705C026013013A2A7FA83D>87
D<EA07FC381FFF80383E07C0383F01E06D7E1478121EC7FCA3EB0FF8EA01FF3807F878EA1FC0EA
3F00127CA2481460A314F8A2EA7C01393F077CC0391FFE3F803907F01F001B1A7E991E>97
D<EB7FE03801FFF83807C07C380F00FC121E123E003C1378007C1300127812F8A8127CA2003C13
0C123E6C1318380F80303807E0603801FFC038007F00161A7E991B>99 D<140F49B4FCA2EB001F
80AC137E3801FFCF3807C0EF380F003F001E7F487FA2127C127812F8A81278127C123C5C6C5B6C
5B3907C1EF803903FF8FF83800FE0F1D2A7EA921>I<140F3901FC3F803907FF73C0380F07E338
1E03C3003EEBE180393C01E000007C7FA6003C5BEA3E03001E5B381F078001FFC7FCEA39FC0030
C8FCA21238123C383FFFC06C13F86C7F487F3838003F48130FEC0780481303A40070EB07000078
5B6C131E380F80F86CB45AC613801A287E9A1E>103 D<EA078012FFA2120F1207ACEB83F8EB8F
FCEB9C1EEBB00F9038E0078013C0A21380B139FFFCFFFCA21E2A7FA921>I<120FEA1F80A213C0
1380A2EA0F00C7FCA8EA0780127FA2120F1207B3A2EAFFF8A20D297FA811>I<EA078012FFA212
0F1207ACECFFF0A2EC3F80EC3C0014385C5CEB81800183C7FC1386138FEBBF8013F7EBE7C0EBC3
E0138180EB80F81478147C80141E141F158039FFFC7FF8A21D2A7FA920>107
D<EA078012FFA2120F1207B3B2EAFFFCA20E2A7FA911>I<3A0783F801FC3AFF8FFE07FF903A9C
0F0E07803B0FB0079803C03B07E003F001E001C013E0A2018013C0B13BFFFC7FFE3FFFA2301A7F
9933>I<380783F838FF8FFCEB9C1E380FB00F3907E0078013C0A21380B139FFFCFFFCA21E1A7F
9921>I<137F3801FFC03807C1F0380F0078001E7F487FA2487FA200F81480A800781400007C5B
003C131EA26C5B6C5B3807C1F03801FFC06C6CC7FC191A7E991E>I<380783F838FF8FFEEBBC1F
390FE00780D807C013C090388003E0140115F0A2EC00F8A8EC01F0A215E0EBC003EC07C09038E0
0F809038B83F00EB8FFCEB83F00180C7FCAAEAFFFCA21D267F9921>I<380787C038FF9FE0EBB9
F0EA0FF1EA07E1EBC0E01400A25BAF7FEAFFFEA2141A7F9917>114 D<3807F840381FFFC0EA3C
07EA7003EA6001EAE000A36C1300127EEA7FF0EA3FFC6CB4FC0007138038003FC0130738C001E0
13007EA36C13C0EAF80138FE078038C7FF00EA83F8131A7E9918>I<390780078000FF13FFA200
0F130F00071307AF140FA2141F0003133F9038E077C03900FFC7FCEB7F071E1A7F9921>117
D<3AFFF1FFC3FFA23A0F803E00FCD9001C13703807801E023E1360A22603C03F13C01467A2D801
E0EB818014C3A201F013C32600F1811300A201F913E790387B00E6A2017F13FE013E137CA3011E
1378011C1338A2281A7F992B>119 D E /Fp 10 118 df<DBFFC01360020701F813E0023F13FE
9139FFC01F01903A03FE0007C3D907F8EB01E7D91FE0EB00F74948143F4948141F49C8FC484815
0F48481507491503120748481501A2485A1700123F5B1860127FA348481600AD6C7E1860A2123F
A27F001F17E018C06C7E17016C6C1680000316037F6C6CED07006C6C150E6D6C141E6D6C5C6D6C
5CD907F85CD903FEEB03E0903A00FFC01F8091263FFFFEC7FC020713F8020013C0333D7BBB3E>
67 D<B712F016FF17C0C69039C0003FF06D48EB07F8707E707E707EEF7F80A218C0173F18E0A7
18C0A2177F1880A2EFFF004C5A4C5AEE0FF0EE3FE091B6128004FCC7FC0280C9FCB3A6497EB612
C0A3333B7EBA3B>80 D<EB3FC03801FFF83807C07E390E001F80001E6D7E393F8007E013C06E7E
A26E7EEA1F80EA0F00C7FCA4141FEB07FFEB3FF9EBFF01EA03F8EA07F0EA1FE013C0EA3F80EA7F
00A248150C5AA31403A26C13076C130E3A3F800C7C183A1FC03C7E383A0FE0703FF03A03FFE01F
E03A007F800F8026287CA62B>97 D<EB03FE90381FFFC090387E01F09038F800384848133C4848
13FE00071301EA0FC0EA1F80A2003FEB00FC90C71278481400A2127E12FEAA127E127FA215037E
6D1307001F14066C6C130E150C6C6C131C6C6C1338C66C13F090387E03C090381FFF00EB03FC20
287DA626>99 D<EA01C0EA07F0487EA56C5AEA01C0C8FCABEA01F8127FA312071201B3AB487EB5
12E0A3133A7FB917>105 D<2701F803F8EB03F800FFD91FFFEB1FFF913B7C0FC07C0FC0913BE0
07E0E007E03C07F9C003E1C0032601FB80D9F3807FD9FF00EBF70049D901FE6D7EA2495CA3495C
B3A4486C496C497EB500F0B500F0B512F0A344267EA549>109 D<3901F807F800FFEB1FFE9138
781F809138E00FC03A07F9C007E03801FB80EBFF00496D7EA25BA35BB3A4486C497EB500F1B512
E0A32B267EA530>I<EB01FE90380FFFC090383F03F09038F8007C48487F48487F4848EB0F8048
48EB07C0A248C7EA03E04815F0A3007EEC01F8A300FE15FCA9007E15F8A2007F14036C15F0A26C
15E06D1307000F15C06C6CEB0F806C6CEB1F006C6C133E6C6C5B90383F03F090380FFFC0D901FE
C7FC26287EA62B>I<1318A51338A41378A213F8A2120112031207001FB5FCB6FCA2D801F8C7FC
B2EC0180AA3800FC031500137CEB7E07EB3F0EEB0FFCEB03F019367EB421>116
D<D801F8EB03F000FFEB01FFA30007EB000F00011403B3A51507A3150F12006D131F017CEB3BFC
017E903873FFE090381F81E390380FFF83903A01FE03F0002B277EA530>I
E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300
TeXDict begin
%%EndSetup
%%Page: 1 1
bop 392 509 a Fp(P)n(oin)n(t)29 b(to)g(P)n(oin)n(t)g(Comm)n(unication)843
656 y Fo(Marc)20 b(Snir)554 731 y(William)d(Gropp)k(and)f(Ewing)f(Lusk)772
848 y(Marc)n(h)i(15,)e(1993)164 1068 y Fn(1)83 b(P)n(oin)n(t)27
b(to)h(P)n(oin)n(t)f(Comm)n(unication)164 1192 y Fm(1.1)70
b(In)n(tro)r(duction)164 1285 y Fl(This)15 b(section)f(is)h(a)g(draft)g(of)g
(the)g(curren)o(t)f(prop)q(osal)i(for)f(p)q(oin)o(t-to-p)q(oin)o(t)h(comm)o
(unic)o(a-)164 1345 y(tion.)21 b(It)15 b(do)q(es)h(not)g(y)o(et)f(include)f
(a)i(description)f(of)h(the)f(F)l(ortran)h(77)g(and)g(C)g(bindings.)237
1405 y(I)c(ha)o(v)o(e)g(tried)f(to)i(indicate,)e(wherev)o(er)g(appropriate,)j
(gaps)f(and)g(unresolv)o(ed)e(issues,)164 1465 y(using)17 b(small)d(t)o(yp)q
(e.)164 1646 y Fk(Discussion:)54 b Fj(The)19 b(follo)o(wing)h(subsections)f
(of)f(the)h(in)o(tro)q(duction)h(con)o(tain)f(general)g(in-)164
1706 y(formation)d(on)h(the)g(design)h(of)f(MPI)g(pro)q(cedures.)26
b(The)17 b(material)h(should)g(b)q(e)f(mo)o(v)o(ed)g(to)f(a)164
1766 y(general)g(in)o(tro)q(duction)g(for)e(the)i(en)o(tire)f(do)q(cumen)o
(t.)164 2031 y Fm(1.2)70 b(Data)23 b(T)n(yp)r(es)164 2123 y
Fi(1.2.1)55 b(Handle)164 2216 y Fl(MPI)19 b(pro)q(cedures)h(use)g(at)g(v)m
(arious)h(places)e Fh(hand)r(les)p Fl(.)34 b(Handles)19 b(are)h(used)g(to)g
(access)164 2276 y(opaque)c(ob)s(jects.)21 b(Suc)o(h)16 b(ob)s(ject)f(can)i
(b)q(e)f(created,)f(up)q(dated)i(and)f(destro)o(y)o(ed)g(only)f(b)o(y)164
2336 y(b)o(y)h(calling)f(suitable)h(MPI)g(pro)q(cedures,)g(and)h(pro)o
(viding)f(the)g(handle)h(as)g(parameter.)164 2396 y(Opaque)11
b(ob)s(jects)g(hide)g(from)f(the)h(user)g(the)g(in)o(ternal)f(represen)o
(tation)g(used)i(for)f(v)m(arious)164 2457 y(MPI)17 b(ob)s(jects,)h(th)o(us)f
(allo)o(wing)h(to)g(ha)o(v)o(e)f(similar)f(calls)h(in)g(C)h(and)h(F)l
(ortran,)f(allo)o(wing)961 2599 y(1)p eop
%%Page: 2 2
bop 164 307 a Fl(to)15 b(o)o(v)o(ercome)e(problems)g(with)i(the)g(t)o(yping)g
(rules)f(in)h(these)f(languages,)j(and)e(allo)o(wing)164 367
y(for)j(future)f(extension)g(of)g(their)g(functionalit)o(y)l(.)23
b(Handles)17 b(are)h(of)f(t)o(yp)q(e)g Fg(void)25 b(*)17 b
Fl(in)g(C)164 428 y(and)g(of)f(t)o(yp)q(e)g Fg(integer)e Fl(in)i(F)l(ortran.)
237 488 y(An)21 b(opaque)h(ob)s(ject)f(can)h(b)q(e)f Fh(p)n(ersistent)h
Fl(or)g Fh(ephemer)n(al)p Fl(.)37 b(A)21 b(p)q(ersisten)o(t)g(ob)s(ject)164
548 y(p)q(ersists)12 b(un)o(til)f(destro)o(y)o(ed)f(b)o(y)h(an)i(explicit)c
(op)q(eration.)21 b(An)11 b(ephemeral)e(ob)s(ject)i(is)h(go)q(o)q(d)164
608 y(for)17 b(a)g(single)g(use;)f(th)o(us)h(an)h(ephemeral)c(ob)s(ject)i
(asso)q(ciated)i(with)f(a)g(comm)o(unicati)o(on)164 668 y(op)q(eration)f
(disapp)q(ears)g(once)f(this)h(op)q(eration)g(is)f(completed)e(\(or)i(once)g
(this)g(ob)s(ject)g(is)164 729 y(not)i(needed)e(an)o(ymore)g(for)i(the)f
(completion)e(of)i(the)g(op)q(eration\).)237 789 y(An)j(opaque)g(ob)s(ject)f
(is)h(created)f(b)o(y)g(a)h(call)f(to)i Fg(MPI)p 1213 789 16
2 v 17 w(CREATE)p Fl(,)c(and)j(destro)o(y)o(ed)f(b)o(y)164
849 y(a)g(call)e(to)h Fg(MPI)p 437 849 V 18 w(FREE)p Fl(.)e(Additional)i(MPI)
f(functions)h(are)h(a)o(v)m(ailable)e(to)i(create,)e(access)164
909 y(and)h(up)q(date)g(sp)q(eci\014c)e(opaque)i(ob)s(jects.)164
1029 y Fi(MPI)p 279 1029 17 2 v 20 w(CREA)-5 b(TE\(handle,)20
b(t)n(yp)r(e,)d(p)r(ersistence\))164 1121 y(OUT)i(handle)25
b Fl(handle)16 b(to)h(ob)s(ject)164 1219 y Fi(IN)h(t)n(yp)r(e)24
b Fl(state)d(v)m(alue)f(that)h(iden)o(ti\014es)e(the)i(t)o(yp)q(e)f(of)g(ob)s
(ject)g(to)h(b)q(e)g(created)f(\(e.g.,)286 1279 y Fg(MPI)p
367 1279 16 2 v 17 w(COMMUNICATI)o(ON)o(,)j(MPI)p 847 1279
V 17 w(BUFFER,)g(MPI)p 1147 1279 V 18 w(CONTEXT)p Fl(,)13 b(etc.\).)164
1377 y Fi(IN)18 b(p)r(ersistence)24 b Fl(state)16 b(v)m(alue;)g(either)f
Fg(MPI)p 1020 1377 V 17 w(PERSISTENT)e Fl(or)j Fg(MPI)p 1447
1377 V 18 w(EPHEMERAL)o Fl(.)164 1529 y Fi(MPI)p 279 1529 17
2 v 20 w(FREE\(handle\))164 1620 y(IN)i(handle)26 b Fl(handle)16
b(to)g(ob)s(ject)237 1712 y(An)h(ob)s(ject)f(can)h(b)q(e)g(destro)o(y)o(ed)f
(only)h(if)f(there)h(is)f(no)i(p)q(ending)f(op)q(eration)h(that)f(is)164
1772 y(using)h(this)g(ob)s(ject;)f(after)h(successful)f(return)g(of)h(the)g
(routine,)f(the)h(handle)f(is)h(unde-)164 1832 y(\014ned.)164
1952 y Fi(MPI)p 279 1952 V 20 w(ASSOCIA)-5 b(TED\(handle,)21
b(t)n(yp)r(e\))164 2044 y(IN)d(handle)26 b Fl(handle)16 b(to)g(ob)s(ject)164
2142 y Fi(OUT)j(t)n(yp)r(e)k Fl(state)237 2233 y(Returns)16
b(the)g(t)o(yp)q(e)f(of)h(the)g(ob)s(ject)f(the)h(handle)f(is)h(curren)o(tly)
e(asso)q(ciated)j(with,)e(if)164 2293 y(suc)o(h)g(exists.)20
b(Returns)c(the)f(sp)q(ecial)g(t)o(yp)q(e)f Fg(MPI)p 1041 2293
16 2 v 18 w(NULL)g Fl(if)g(the)h(handle)h(is)f(not)h(curren)o(tly)164
2354 y(asso)q(ciated)h(with)f(an)o(y)g(ob)s(ject.)237 2414
y(MPI)h(ma)o(y)f(pro)o(vide)h(prede\014ned)h(opaque)g(ob)s(jects)f(and)h
(prede\014ned,)g(static)f(han-)164 2474 y(dles)f(to)g(these)g(ob)s(jects.)21
b(Suc)o(h)16 b(ob)s(jects)g(ma)o(y)f(not)h(b)q(e)h(destro)o(y)o(ed.)961
2599 y(2)p eop
%%Page: 3 3
bop 164 307 a Fi(List)13 b(of)g(handles)50 b Fl(An)11 b(MPI)g(call)f(ma)o(y)g
(need)h(a)g(parameter)f(that)i(is)f(a)h Fh(list)h(of)g(hand)r(les)p
Fl(.)164 367 y(In)k(C,)g(suc)o(h)g(list)g(will)f(b)q(e)h(a)h(record)f(with)g
(one)h(comp)q(onen)o(t)e(b)q(eing)h(the)g(length)h(of)f(the)164
428 y(list,)j(the)g(other)g(comp)q(onen)o(ts)f(b)q(eing)h(an)h(arra)o(y)f(of)
g(p)q(oin)o(ters.)33 b(In)20 b(F)l(ortran,)h(the)f(list)164
488 y(will)15 b(b)q(e)h(an)h(arra)o(y)g(of)f(in)o(tegers,)f(the)h(\014rst)h
(one)f(of)h(whic)o(h)e(is)h(the)g(length)g(of)h(the)f(list.)164
657 y Fk(Discussion:)54 b Fj(The)19 b(mec)o(hanism)h(for)e(opaque)h(ob)s
(jects)f(used)h(here)g(follo)o(ws)g(the)g(POSIX)164 714 y(F)l(ortran)14
b(binding)j(standard.)j(An)15 b(alternativ)o(e)h(c)o(hoice)g(is)g(to)f(ha)o
(v)o(e)f(di\013eren)o(t)i(t)o(yp)q(e)f(declara-)164 770 y(tions)g(for)f(eac)o
(h)h(t)o(yp)q(e)h(of)e(opaque)h(ob)s(ject.)k(Then,)d(opaque)f(ob)s(jects)f
(are)h(created/destro)o(y)o(ed)164 826 y(lik)o(e)e(regular)f(v)m(ariables,)h
(rather)f(than)f(b)o(y)h(MPI)g(calls;)i(they)e(are)f(still)j(accessed)e(and)g
(up)q(dated)164 883 y(only)k(via)f(MPI)g(functions.)164 1193
y Fi(1.2.2)55 b(State)164 1286 y Fl(MPI)12 b(pro)q(cedures)i(use)e(at)i(v)m
(arious)f(places)g(argumen)o(ts)f(with)h Fh(state)g Fl(t)o(yp)q(es.)20
b(The)13 b(v)m(alues)164 1346 y(of)j(suc)o(h)f(data)i(t)o(yp)q(e)e(are)g(all)
g(iden)o(ti\014ed)g(b)o(y)g(names,)f(and)i(no)g(op)q(eration)h(is)e
(de\014ned)g(on)164 1406 y(them.)k(F)l(or)14 b(example,)f(the)h
Fg(MPI)p 759 1406 16 2 v 17 w(CREATE)e Fl(routine)i(has)i(a)e(state)h(t)o(yp)
q(e)f(parameter)f(with)164 1466 y(v)m(alues)j Fg(MPI)p 390
1466 V 18 w(PERSISTEN)o(T)d Fl(and)k Fg(MPI)p 853 1466 V 17
w(EPHEMERAL)p Fl(.)237 1527 y(An)e Fg(enumeratio)o(n)d Fl(declared)j(in)g(an)
h(included)e(MPI.h)g(\014le)h(will)f(b)q(e)i(used)f(in)g(C)h(for)164
1587 y(state)g(datat)o(yp)q(es.)22 b(The)17 b(F)l(ortran)f(77)h(mec)o(hanism)
c(needs)j(to)h(b)q(e)f(decided.)164 1767 y Fk(Discussion:)67
b Fj(Named)22 b(in)o(teger)h(constan)o(ts)e(can)h(b)q(e)g(used)h(in)g(F)l
(ortran)d(90,)j(using)g(the)164 1827 y Ff(PARAMETER)17 b Fj(mec)o(hanism.)28
b(The)18 b(constan)o(t)f(declarations)i(can)f(b)q(e)g(made)g(a)o(v)m(ailable)
i(via)e(an)164 1888 y Ff(INCLUDE)e Fj(\014le.)25 b(F)l(ortran)16
b(77)g(do)q(es)h(not)f(seem)h(to)f(o\013er)g(an)o(y)h(con)o(v)o(enien)o(t)g
(mec)o(hanism.)25 b(One)164 1948 y(p)q(ossibilit)o(y)c(is)e(to)f(sp)q(ecify)j
(explicit)g(in)o(teger)e(v)m(alues,)h(and)f(allo)o(w)g(the)g(use)g(of)f
(named)i(con-)164 2008 y(stan)o(ts)15 b(with)i(those)f(F)l(ortran)f(77)h
(compilers)i(that)d(supp)q(ort)i(them)f(con)o(v)o(enien)o(tly)l(.)25
b(Another)164 2068 y(p)q(ossibilit)o(y)17 b(is)f(to)f(use)g(c)o(haracter)g
(strings,)f(rather)h(than)g(in)o(tegers.)164 2319 y Fi(1.2.3)55
b(Named)18 b(constan)n(ts)164 2411 y Fl(MPI)j(pro)q(cedures)i(sometime)o(s)c
(assign)k(a)g(sp)q(ecial)e(meaning)g(to)h(a)g(sp)q(ecial)g(v)m(alue)g(of)164
2471 y(a)f(basic)g(t)o(yp)q(e)f(parameter;)h(e.g.)34 b Fg(tag)20
b Fl(is)h(an)g(in)o(teger)e(v)m(alued)i(parameter)f(of)h(p)q(oin)o(t-)961
2599 y(3)p eop
%%Page: 4 4
bop 164 307 a Fl(to-p)q(oin)o(t)23 b(comm)o(unic)o(ation)d(op)q(erations,)25
b(with)d(a)h(sp)q(ecial)f Fg(DONTCARE)d Fl(v)m(alue.)39 b(Suc)o(h)164
367 y(parameters)14 b(will)f(ha)o(v)o(e)h(a)h(range)g(of)g(regular)f(v)m
(alues,)h(whic)o(h)f(is)g(a)h(prop)q(er)g(subrange)h(of)164
428 y(the)i(range)h(of)g(v)m(alues)f(of)h(the)f(corresp)q(onding)h(basic)f(t)
o(yp)q(e;)h(sp)q(ecial)f(v)m(alues)g(\(suc)o(h)g(as)164 488
y(DONTCARE\))d(will)e(b)q(e)i(outside)g(the)g(regular)g(range.)21
b(The)15 b(range)g(of)g(regular)g(v)m(alues)164 548 y(can)d(b)q(e)g(queried,)
f(and)h(sometimes)d(set,)j(using)g(en)o(vironmen)o(t)d(inquiry)i(or)h(en)o
(vironmen)o(t)164 608 y(setting)21 b(functions)g(\(Section)f
Fi(??)p Fl(\).)37 b(The)21 b(sp)q(ecial)f(v)m(alues)h(are)g(pro)o(vided)g(b)o
(y)f(named)164 668 y(constan)o(t,)c(that)h(are)f(made)f(a)o(v)m(ailable)h
(via)g(an)g(MPI.h)g(include)f(\014le)g(in)h(a)h(C)f(binding.)164
838 y Fk(Discussion:)237 894 y Fj(Need)e(to)e(agree)g(on)h(a)g(F)l(ortran)f
(mec)o(hanism)h(for)f(named)h(constan)o(ts)f(\(see)h(the)g(discussion)164
951 y(ab)q(o)o(v)o(e\).)237 1007 y(Implemen)o(ters)19 b(should)g(try)e(to)g
(detect)h(illegal)i(uses)e(of)g(\\sp)q(ecial)h(v)m(alues".)29
b(Th)o(us,)18 b(the)164 1064 y(use)e(of)e(the)i Ff(DONTCARE)e
Fj(v)m(alue)i(to)f(tag)f(a)h(message)g(sen)o(t)f(should)j(b)q(e)f(\015agged)f
(as)f(an)h(error.)164 1374 y Fi(1.2.4)55 b(Choice)164 1466
y Fl(MPI)13 b(functions)i(sometime)o(s)d(use)i(parameters)f(with)g(a)i
Fh(choic)n(e)f Fl(\(or)h(union\))f(data)h(t)o(yp)q(e.)164 1527
y(I.e.,)10 b(distinct)g(calls)g(to)i(the)e(same)g(routine)h(ma)o(y)e(pass)j
(b)o(y)f(reference)e(actual)i(parameters)164 1587 y(of)18 b(di\013eren)o(t)f
(t)o(yp)q(es.)25 b(The)17 b(mec)o(hanism)e(for)i(pro)o(viding)h(suc)o(h)f
(parameters)g(will)f(di\013er)164 1647 y(from)e(language)i(to)g(language.)22
b(In)15 b(C,)g(a)h(formal)e(parameter)g(of)i(t)o(yp)q(e)e Fg(void)25
b(*)15 b Fl(will)f(b)q(e)164 1707 y(used,)i(with)g(an)h(actual)f(p)q(oin)o
(ter)g(parameter.)k(in)c(F)l(ortran,)g(w)o(e)g(shall)g(c)o(heat.)164
1876 y Fk(Discussion:)237 1933 y Fj(The)i(F)l(ortran)e(77)h(standard)g(sp)q
(eci\014es)i(that)d(the)i(t)o(yp)q(e)f(of)g(actual)h(argumen)o(ts)e(need)i
(to)164 1989 y(agree)f(with)g(the)g(t)o(yp)q(e)h(of)e(dumm)o(y)h(argumen)o
(ts;)g(no)g(construct)g(equiv)m(alen)o(t)i(to)e(C)f(p)q(oin)o(ters)164
2046 y(is)e(a)o(v)m(ailable.)21 b(Th)o(us,)14 b(it)g(w)o(ould)g(seem)g(that)f
(there)g(is)i(no)e(standard)g(conforming)h(mec)o(hanism)164
2102 y(to)g(supp)q(ort)h(c)o(hoice)g(parameters.)k(Ho)o(w)o(ev)o(er,)14
b(most)g(F)l(ortran)f(compiler)j(either)f(don't)g(c)o(hec)o(k)164
2159 y(t)o(yp)q(e)i(consistency)h(of)f(calls)h(to)e(external)h(routines,)h
(or)e(supp)q(ort)h(a)g(sp)q(ecial)i(mec)o(hanism)e(to)164 2215
y(link)i(foreign)e(\(e.g.,)g(C\))f(routines.)27 b(I)18 b(suggest)e(that)h(w)o
(e)g(accept)h(this)f(nonconformit)o(y)h(with)164 2272 y(F)l(ortran)10
b(77)h(standard.)18 b(I.e.,)12 b(w)o(e)f(accept)h(that)f(the)g(same)h
(routine)g(ma)o(y)e(b)q(e)j(passed)e(an)h(actual)164 2328 y(parameter)i(of)h
(a)g(di\013eren)o(t)g(t)o(yp)q(e)h(at)e(distinct)j(calls.)237
2385 y(Generic)g(routines)g(can)f(b)q(e)h(used)f(in)h(F)l(ortran)e(90)g(to)h
(pro)o(vide)g(a)g(standard)g(conforming)164 2441 y(solution.)j(This)12
b(solution)g(will)g(b)q(e)g(consisten)o(t)f(with)g(our)g(nonstandard)g
(conforming)g(F)l(ortran)961 2599 y Fl(4)p eop
%%Page: 5 5
bop 164 307 a Fj(77)15 b(solution.)164 632 y Fm(1.3)70 b(Pro)r(cesses)164
725 y Fl(An)16 b(MPI)h(program)f(is)h(executed)e(b)o(y)h(sev)o(eral)g
(autonomous)h(pro)q(cesses)g(that)g(execute)164 785 y(eac)o(h)f(their)g(o)o
(wn)i(co)q(de,)e(in)h(a)g(MIMD)f(st)o(yle.)22 b(The)17 b(co)q(des)g(executed)
f(b)o(y)g(eac)o(h)g(pro)q(cess)164 845 y(need)21 b(not)h(b)q(e)f(iden)o
(tical.)35 b(The)21 b(pro)q(cesses)h(comm)o(unic)o(ate)d(via)i(calls)f(to)i
(MPI)f(com-)164 905 y(m)o(unication)13 b(primitiv)o(es.)18
b(T)o(ypically)l(,)13 b(eac)o(h)i(pro)q(cessor)h(executes)e(in)h(its)g(o)o
(wn)h(address)164 965 y(space,)i(although)g(shared-memory)e(implem)o(en)o
(tati)o(ons)g(of)i(MPI)f(are)h(p)q(ossible.)26 b(This)164 1025
y(do)q(cumen)o(t)20 b(sp)q(eci\014es)h(the)f(b)q(eha)o(vior)h(of)h(a)f
(parallel)g(program)g(assuming)g(that)g(only)164 1086 y(MPI)c(calls)f(are)i
(used)f(for)h(comm)o(uni)o(cation.)k(The)17 b(in)o(teraction)f(of)i(an)f(MPI)
g(program)164 1146 y(with)k(other)g(p)q(ossible)g(means)f(of)h(comm)o
(unication)d(\(e.g.,)j(shared)h(memory\))c(is)i(not)164 1206
y(sp)q(eci\014ed.)29 b(In)18 b(particular,)h(it)g(is)f(assumed)h(that)g
(message)f(bu\013ers)i(at)f(distinct)f(pro-)164 1266 y(cessors)f(are)f
(disjoin)o(t.)237 1326 y(MPI)k(do)q(es)g(not)h(sp)q(ecify)e(the)h(execution)f
(mo)q(del)g(for)h(eac)o(h)f(pro)q(cess.)34 b(A)19 b(pro)q(cess)164
1387 y(can)e(b)q(e)f(sequen)o(tial,)f(or)i(can)g(b)q(e)f(m)o(ultithreaded,)e
(with)i(threads)h(p)q(ossibly)g(executing)164 1447 y(concurren)o(tly)l(.)23
b(Care)18 b(has)g(b)q(een)f(tak)o(en)g(to)h(mak)o(e)d(MPI)i(\\thread-safe",)i
(b)o(y)d(a)o(v)o(oiding)164 1507 y(the)g(use)g(of)h(implici)o(t)d(global)i
(states.)237 1567 y(The)e(initial)e(allo)q(cation)h(of)h(pro)q(cesses)g(to)g
(an)g(MPI)e(computation)h(and)h(their)f(bind-)164 1627 y(ing)f(to)h(ph)o
(ysical)f(pro)q(cessors)h(is)g(not)g(sp)q(eci\014ed)e(b)o(y)h(the)h(program)f
(itself.)19 b(It)12 b(is)g(exp)q(ected)164 1688 y(that)17 b(v)o(endors)f
(will)g(pro)o(vide)g(mec)o(hanism)o(s)e(to)j(do)g(so)g(either)f(at)h(load)g
(time)d(or)j(at)g(run)164 1748 y(time.)26 b(Suc)o(h)18 b(mec)o(hanism)o(s)e
(will)i(allo)o(w)g(to)h(sp)q(ecify)e(the)i(initial)e(n)o(um)o(b)q(er)f(of)j
(required)164 1808 y(pro)q(cesses,)c(the)g(co)q(de)g(to)g(b)q(e)f(executed)g
(b)o(y)g(eac)o(h)g(initial)g(pro)q(cess,)h(and)g(the)g(allo)q(cation)164
1868 y(of)d(pro)q(cesses)h(to)g(pro)q(cessors.)21 b(Also,)12
b(the)g(curren)o(t)f(prop)q(osal)j(do)q(es)f(not)f(pro)o(vide)f(for)i(dy-)164
1928 y(namic)j(creation)h(or)g(deletion)g(of)g(pro)q(cesses)h(during)g
(program)f(execution,)f(although)164 1989 y(it)g(is)f(in)o(tended)g(to)i(b)q
(e)f(consisten)o(t)g(with)g(suc)o(h)f(extension.)21 b(Finally)l(,)14
b(the)i(curren)o(t)f(pro-)164 2049 y(p)q(osal)h(do)q(es)g(not)f(sp)q(ecify)f
(a)i(naming)e(sc)o(heme)e(for)k(pro)q(cesses.)21 b(W)l(e)15
b(prop)q(ose)h(to)f(alw)o(a)o(ys)164 2109 y(iden)o(tify)j(pro)q(cesses)j
(according)g(to)f(their)g(relativ)o(e)e(rank)j(in)f(a)g(con)o(text)g
(\(group\),)h(so)164 2169 y(that,)f(e\013ectiv)o(ely)l(,)d(pro)q(cesses)i
(are)h(iden)o(ti\014ed)d(b)o(y)i(consecutiv)o(e)f(in)o(tegers.)29
b(Absolute,)164 2229 y(system-wide)13 b(unique)h(pro)q(cess)h(id's)g(are)f
(\(will)g(b)q(e\))h(needed)f(only)g(if)g(dynamic)f(pro)q(cess)164
2290 y(creation)h(is)g(to)h(b)q(e)f(supp)q(orted)i(\(in)e(suc)o(h)g(ev)o(en)o
(tualit)o(y)e(w)o(e)h(prop)q(ose)j(to)f(use)f(handles)h(to)164
2350 y(opaque)i Fh(pr)n(o)n(c)n(ess)f(structur)n(es)g Fl(for)g(that)h(purp)q
(ose\).)961 2599 y(5)p eop
%%Page: 6 6
bop 164 307 a Fm(1.4)70 b(Con)n(texts)164 520 y Fk(Discussion:)46
b Fj(This)18 b(section)f(con)o(tains)g(a)f(prop)q(osal)h(for)f(use)i(of)e
(con)o(texts)g(that)g(will)i(sub-)164 580 y(sume)13 b(groups.)19
b(It)13 b(b)q(orro)o(ws)g(hea)o(vily)h(on)f(the)g(curren)o(t)g(group)g(prop)q
(osal.)20 b(This)14 b(prop)q(osal)f(has)164 640 y(not)i(y)o(et)g(b)q(een)h
(discussed)h(in)f(MPI)f(meetings.)237 821 y Fl(A)h Fi(con)n(text)f
Fl(consists)i(of:)237 923 y Fe(\017)24 b Fl(A)d(set)g(of)h(pro)q(cesses)g
(that)g(curren)o(tly)d(b)q(elong)j(to)g(the)f(con)o(text)g(\(p)q(ossibly)g
(all)286 983 y(pro)q(cesses,)16 b(or)h(a)g(prop)q(er)f(subset\).)237
1084 y Fe(\017)24 b Fl(A)19 b Fi(ranking)g Fl(of)h(the)f(pro)q(cesses)g
(within)g(that)g(con)o(text,)g(i.e.,)f(a)h(n)o(um)o(b)q(ering)f(of)286
1145 y(the)g(pro)q(cesses)g(in)g(that)g(con)o(text)g(from)f(0)h(to)g
Fd(n)13 b Fe(\000)f Fl(1,)18 b(where)g Fd(n)g Fl(is)g(the)g(n)o(um)o(b)q(er)
286 1205 y(of)e(pro)q(cesses)h(in)f(that)h(con)o(text.)237
1307 y(A)f(pro)q(cess)h(ma)o(y)e(b)q(elong)h(to)h(sev)o(eral)e(con)o(texts)h
(at)g(the)g(same)g(time.)237 1367 y(An)o(y)i(in)o(terpro)q(cess)f(comm)o
(unication)f(o)q(ccurs)i(within)g(a)h(con)o(text,)e(and)i(messages)164
1427 y(sen)o(t)i(within)f(one)h(con)o(text)f(can)h(b)q(e)g(receiv)o(ed)e
(only)i(within)f(the)h(same)f(con)o(text.)34 b(A)164 1487 y(con)o(text)13
b(is)h(sp)q(eci\014ed)g(using)h(a)f Fh(c)n(ontext)j(hand)r(le)f
Fl(\(i.e.,)d(a)h(handle)g(to)h(an)g(opaque)f(ob)s(ject)164
1547 y(that)23 b(iden)o(ti\014es)d(a)j(con)o(text\).)38 b(Con)o(text)22
b(handles)g(cannot)h(b)q(e)f(transferred)g(for)h(one)164 1608
y(pro)q(cess)18 b(to)g(another;)g(they)f(can)h(b)q(e)f(used)h(only)f(on)h
(the)f(pro)q(cess)h(where)f(they)g(where)164 1668 y(created.)237
1728 y(F)l(ollo)o(ws)f(examples)e(of)j(p)q(ossible)f(uses)h(for)f(con)o
(texts.)164 1858 y Fi(Lo)r(osely)h(sync)n(hronous)i(library)g(call)h(in)n
(terface)49 b Fl(Consider)16 b(the)f(case)h(where)g(a)164 1918
y(parallel)e(application)i(executes)e(a)h(\\parallel)g(call")g(to)h(a)f
(library)g(routine,)g(i.e.,)e(where)164 1978 y(all)i(pro)q(cesses)i(transfer)
f(con)o(trol)g(to)g(the)g(library)f(routine.)21 b(If)16 b(the)f(library)h(w)o
(as)g(dev)o(el-)164 2038 y(op)q(ed)k(separately)l(,)f(then)h(one)f(should)h
(b)q(ew)o(are)f(of)h(the)f(p)q(ossibilit)o(y)g(that)g(the)h(library)164
2099 y(co)q(de)12 b(ma)o(y)f(receiv)o(e)f(b)o(y)i(mistak)o(e)e(messages)h
(send)i(b)o(y)e(the)h(caller)f(co)q(de,)i(and)g(vice-v)o(ersa.)164
2159 y(T)l(o)19 b(prev)o(en)o(t)f(suc)o(h)g(o)q(ccurrence)h(one)g(migh)o(t)e
(use)i(a)g(barrier)f(sync)o(hronization)h(b)q(efore)164 2219
y(and)f(after)f(the)h(parallel)e(library)h(call.)24 b(Instead,)17
b(one)h(can)g(allo)q(cate)f(a)h(di\013eren)o(t)e(con-)164 2279
y(text)e(to)g(the)h(library)l(,)e(th)o(us)h(prev)o(en)o(ting)f(un)o(w)o(an)o
(ted)h(in)o(terference.)k(No)o(w,)d(the)f(transfer)164 2339
y(of)j(con)o(trol)e(to)i(the)f(library)g(need)f(not)i(b)q(e)f(sync)o
(hronized.)961 2599 y(6)p eop
%%Page: 7 7
bop 164 307 a Fi(F)-5 b(unctional)25 b(decomp)r(osition)e(and)g(mo)r(dular)g
(co)r(de)f(dev)n(elopmen)n(t)49 b Fl(Often,)164 367 y(a)18
b(parallel)f(application)g(is)h(dev)o(elop)q(ed)e(b)o(y)h(in)o(tegrating)h
(sev)o(eral)e(distinct)h(functional)164 428 y(mo)q(dules,)h(that)h(is)g(eac)o
(h)f(dev)o(elop)q(ed)g(separately)l(.)28 b(Eac)o(h)19 b(mo)q(dule)f(is)g(a)h
(parallel)f(pro-)164 488 y(gram)13 b(that)h(runs)g(on)g(a)g(dedicated)f(set)h
(of)g(pro)q(cesses,)g(and)g(the)g(computation)f(consists)164
548 y(of)j(phases)h(where)f(mo)q(dules)g(compute)e(separately)l(,)i(in)o
(termixe)o(d)e(with)i(global)g(phases)164 608 y(where)i(all)g(pro)q(cesses)h
(comm)o(unicate.)25 b(It)18 b(is)g(con)o(v)o(enien)o(t)f(to)i(allo)o(w)f(eac)
o(h)g(mo)q(dule)g(to)164 668 y(use)g(its)g(o)o(wn)g(priv)m(ate)g(pro)q(cess)h
(n)o(um)o(b)q(ering)d(sc)o(heme,)g(for)i(the)g(in)o(tramo)q(dule)f(compu-)164
729 y(tation.)27 b(This)18 b(is)f(ac)o(hiev)o(ed)g(b)o(y)g(using)h(a)h(priv)m
(ate)e(mo)q(dule)g(con)o(text)g(for)h(in)o(tramo)q(dule)164
789 y(computation,)d(and)i(a)g(global)f(con)o(text)g(for)g(in)o(termo)q(dule)
e(comm)o(unic)o(ation.)164 919 y Fi(Collectiv)n(e)f(comm)n(unication)51
b Fl(MPI)10 b(supp)q(orts)i(collectiv)o(e)c(comm)o(unic)o(ation)h(within)164
979 y(dynamically)h(created)i(groups)h(of)g(pro)q(cesses.)20
b(Eac)o(h)13 b(suc)o(h)f(group)h(can)g(b)q(e)f(represen)o(ted)164
1039 y(b)o(y)h(a)i(distinct)e(con)o(text.)19 b(This)c(pro)o(vides)e(a)h
(simple)e(mec)o(hanism)f(to)j(ensure)g(that)g(com-)164 1099
y(m)o(unication)20 b(that)i(p)q(ertains)g(to)g(collectiv)o(e)c(comm)o
(unication)h(within)i(one)h(group)g(is)164 1159 y(not)17 b(confused)f(with)g
(collectiv)o(e)e(comm)o(uni)o(cation)g(within)h(another)i(group.)164
1289 y Fi(Ligh)n(t)n(w)n(eigh)n(t)i(gang)f(sc)n(heduling)50
b Fl(Consider)15 b(an)g(en)o(vironmen)o(t)d(where)i(pro)q(cesses)164
1349 y(are)j(m)o(ultith)o(treaded.)k(Con)o(texts)c(can)h(b)q(e)f(used)g(to)h
(pro)o(vide)e(a)i(mec)o(hanism)c(whereb)o(y)164 1410 y(all)21
b(pro)q(cesses)i(are)f(time-shared)e(b)q(et)o(w)o(een)h(sev)o(eral)g
(parallel)g(executions,)h(and)h(can)164 1470 y(con)o(text)h(switc)o(h)h(from)
f(one)h(parallel)g(execution)f(to)h(another,)j(in)d(a)g(lo)q(osely)h(syn-)164
1530 y(c)o(hronous)d(manner.)39 b(A)22 b(thread)h(is)f(allo)q(cated)h(on)g
(eac)o(h)f(pro)q(cess)h(to)g(eac)o(h)f(parallel)164 1590 y(execution,)14
b(and)i(a)g(di\013eren)o(t)e(con)o(text)g(is)i(used)f(to)h(iden)o(tify)d(eac)
o(h)i(parallel)f(execution.)164 1650 y(Th)o(us,)f(tra\016c)g(from)e(one)i
(execution)f(cannot)i(b)q(e)f(confused)f(with)h(tra\016c)g(from)e(another)164
1711 y(execution.)31 b(The)20 b(blo)q(c)o(king)g(and)h(un)o(blo)q(c)o(king)e
(of)h(threads)h(due)f(to)g(comm)o(unicati)o(on)164 1771 y(ev)o(en)o(ts)14
b(pro)o(vide)g(a)i(\\lazy")f(con)o(text)f(switc)o(hing)h(mec)o(hanism)o(.)j
(This)d(can)h(b)q(e)f(extended)164 1831 y(to)j(the)f(case)g(where)g(the)h
(parallel)e(executions)h(are)g(spanning)i(distinct)d(pro)q(cess)i(sub-)164
1891 y(sets.)j(\(MPI)16 b(do)q(es)h(not)g(require)e(m)o(ultithreaded)e(pro)q
(cesses.\))164 2061 y Fk(Discussion:)39 b Fj(A)14 b(con)o(text)f(handle)i
(migh)o(t)f(b)q(e)g(implemen)o(ted)i(as)e(a)f(p)q(oin)o(ter)h(to)g(a)f
(structure)164 2117 y(that)f(consists)h(of)g(con)o(text)f(lab)q(el)j(\(that)d
(is)h(carried)h(b)o(y)f(messages)f(sen)o(t)h(within)h(this)g(con)o(text\))164
2173 y(and)20 b(a)g(con)o(text)g(mem)o(b)q(er)g(table,)i(that)d(translates)h
(pro)q(cess)h(ranks)e(within)j(a)e(con)o(text)f(to)164 2230
y(absolute)g(addresses)g(or)g(to)f(routing)h(information.)31
b(Of)19 b(course,)h(other)f(implemen)o(tations)164 2286 y(are)c(p)q(ossible,)
i(including)h(implemen)o(tations)e(that)f(do)g(not)g(require)h(eac)o(h)g(con)
o(text)f(mem)o(b)q(er)164 2343 y(to)g(store)f(a)h(full)h(list)g(of)f(the)g
(con)o(text)g(mem)o(b)q(ers.)237 2399 y(Con)o(texts)g(can)h(b)q(e)g(used)g
(only)h(on)e(the)h(pro)q(cess)g(where)g(they)g(w)o(ere)f(created.)22
b(Since)17 b(the)164 2456 y(con)o(text)e(carries)g(information)h(on)f(the)g
(group)g(of)g(pro)q(cesses)h(that)e(b)q(elong)i(to)f(this)h(con)o(text,)961
2599 y Fl(7)p eop
%%Page: 8 8
bop 164 307 a Fj(a)14 b(pro)q(cess)g(can)g(send)g(a)g(message)g(within)h(a)e
(con)o(text)h(only)g(to)g(other)f(pro)q(cesses)i(that)e(b)q(elong)164
364 y(to)i(that)g(con)o(text.)20 b(Th)o(us,)15 b(eac)o(h)h(pro)q(cess)f
(needs)i(to)e(k)o(eep)g(trac)o(k)g(only)h(of)f(the)h(con)o(texts)f(that)164
420 y(where)j(created)f(at)g(that)g(pro)q(cess;)h(the)g(total)f(n)o(um)o(b)q
(er)h(of)f(con)o(texts)f(p)q(er)i(pro)q(cess)g(is)g(lik)o(ely)164
477 y(to)d(b)q(e)g(small.)237 533 y(The)23 b(only)f(di\013erence)i(I)e(see)h
(b)q(et)o(w)o(een)f(this)h(curren)o(t)f(de\014nition)i(of)e(con)o(text,)h
(whic)o(h)164 589 y(subsumes)18 b(the)f(group)h(concept,)g(and)f(a)g(pared)h
(do)o(wn)f(de\014nition,)j(if)e(that)e(I)i(assume)f(here)164
646 y(that)g(pro)q(cess)g(n)o(um)o(b)q(ering)h(is)g(relativ)o(e)g(to)f(the)g
(con)o(text,)g(rather)g(then)g(b)q(eing)i(global,)f(th)o(us)164
702 y(requiring)f(a)e(con)o(text)g(mem)o(b)q(er)h(table.)22
b(I)16 b(argue)g(that)f(this)h(is)g(not)g(m)o(uc)o(h)f(added)i(o)o(v)o
(erhead,)164 759 y(and)e(giv)o(es)h(m)o(uc)o(h)f(additional)i(needed)f
(functionalit)o(y)l(.)239 853 y Fc(\017)24 b Fj(If)14 b(a)f(new)g(con)o(text)
g(is)h(created)g(b)o(y)f(cop)o(ying)h(a)f(previous)h(con)o(text,)f(then)h
(one)f(do)q(es)h(not)286 909 y(need)19 b(a)e(new)h(mem)o(b)q(er)g(table;)i
(rather,)d(one)h(needs)h(just)e(a)h(new)g(con)o(text)f(lab)q(el)j(and)286
966 y(a)e(new)h(p)q(oin)o(ter)g(to)e(the)i(same)f(old)h(con)o(text)f(mem)o(b)
q(er)g(table.)30 b(This)19 b(holds)g(true,)g(in)286 1022 y(particular,)c(for)
g(con)o(texts)f(that)h(include)j(all)e(pro)q(cesses.)239 1116
y Fc(\017)24 b Fj(A)13 b(con)o(text)g(mem)o(b)q(er)h(table)g(mak)o(es)f(sure)
h(that)f(a)g(message)g(is)h(sen)o(t)f(only)h(to)f(a)h(pro)q(cess)286
1172 y(that)f(can)h(execute)g(in)h(the)f(con)o(text)f(of)g(the)h(message.)19
b(The)14 b(alternativ)o(e)g(mec)o(hanism,)286 1229 y(whic)o(h)e(is)g(c)o(hec)
o(king)g(at)f(reception,)i(is)f(less)g(e\016cien)o(t,)g(and)g(requires)g
(that)f(eac)o(h)g(con)o(text)286 1285 y(lab)q(el)18 b(b)q(e)g(system-wide)f
(unique.)26 b(This)17 b(requires)g(that,)f(to)g(the)h(least,)g(all)g(pro)q
(cesses)286 1342 y(in)e(a)f(con)o(text)f(execute)i(a)f(collectiv)o(e)i
(agreemen)o(t)d(algorithm)i(at)e(the)h(creation)h(of)e(this)286
1398 y(con)o(text.)239 1492 y Fc(\017)24 b Fj(The)14 b(use)g(of)f(relativ)o
(e)h(addressing)g(within)h(eac)o(h)f(con)o(text)f(is)h(needed)h(to)e(supp)q
(ort)h(true)286 1548 y(mo)q(dular)19 b(dev)o(elopmen)o(t)g(of)f(sub)q
(computations)h(that)e(execute)i(on)f(a)g(subset)h(of)f(the)286
1605 y(pro)q(cesses.)h(There)14 b(is)f(also)g(a)g(big)h(adv)m(an)o(tage)e(in)
i(using)g(the)f(same)g(con)o(text)f(construct)286 1661 y(for)i(collectiv)o(e)
j(comm)o(unications)f(as)f(w)o(ell.)164 2009 y Fi(1.4.1)55
b(Con)n(text)19 b(Op)r(erations)164 2101 y Fl(A)h(global)i(con)o(text)e
Fi(ALL)g Fl(is)h(prede\014ned.)35 b(All)20 b(pro)q(cesses)h(b)q(elong)h(to)f
(this)g(con)o(text)164 2162 y(when)d(computation)g(starts.)28
b(MPI)18 b(do)q(es)h(not)g(sp)q(ecify)e(ho)o(w)i(pro)q(cesses)g(are)f
(initially)164 2222 y(rank)o(ed)h(within)f(the)h(con)o(text)f(ALL.)h(It)g(is)
g(exp)q(ected)f(that)h(the)g(start-up)h(pro)q(cedure)164 2282
y(used)d(to)g(initiate)f(an)i(MPI)e(program)h(\(at)g(load-time)f(or)h
(run-time\))e(will)h(pro)o(vide)g(in-)164 2342 y(formation)d(or)h(con)o(trol)
g(on)g(this)g(initial)e(ranking)j(\(e.g.,)e(b)o(y)g(sp)q(ecifying)g(that)h
(pro)q(cesses)164 2402 y(are)20 b(rank)o(ed)g(according)g(to)h(their)e
(pid's,)h(or)h(according)f(to)g(the)g(ph)o(ysical)f(addresses)961
2599 y(8)p eop
%%Page: 9 9
bop 164 307 a Fl(of)15 b(the)g(executing)f(pro)q(cessors,)i(or)f(according)g
(to)h(a)f(n)o(um)o(b)q(ering)e(sc)o(heme)g(sp)q(eci\014ed)i(at)164
367 y(load)i(time\).)164 548 y Fk(Discussion:)24 b Fj(If)17
b(w)o(e)g(think)h(of)f(adding)h(new)f(pro)q(cesses)h(at)e(run-time,)i(then)f
Ff(ALL)g Fj(con)o(v)o(eys)164 608 y(the)e(wrong)g(impression,)h(since)g(it)g
(is)f(just)g(the)g(initial)j(set)d(of)f(pro)q(cesses.)237 789
y Fl(The)i(follo)o(wing)g(op)q(erations)i(are)e(a)o(v)m(ailable)g(for)g
(creating)g(new)g(con)o(texts.)164 909 y Fi(MPI)p 279 909 17
2 v 20 w(COPY)p 461 909 V 22 w(CONTEXT\(new)n(con)n(text,)i(con)n(text\))237
969 y Fl(Create)f(a)g(new)f(con)o(text)g(that)h(includes)e(all)h(pro)q
(cesses)i(in)e(the)g(old)h(con)o(text.)k(The)164 1029 y(rank)c(of)f(the)g
(pro)q(cesses)h(in)f(the)h(previous)f(con)o(text)f(is)h(preserv)o(ed.)21
b(The)16 b(call)g(m)o(ust)f(b)q(e)164 1090 y(executed)j(b)o(y)i(all)f(pro)q
(cesses)i(in)e(the)h(old)g(con)o(text.)31 b(It)19 b(is)h(a)g(blo)q(c)o(king)f
(call:)28 b(No)20 b(call)164 1150 y(returns)c(un)o(til)f(all)h(pro)q(cesses)h
(ha)o(v)o(e)e(called)h(the)g(function.)21 b(The)16 b(parameters)f(are)164
1264 y Fi(OUT)k(new)n(con)n(text)24 b Fl(handle)12 b(to)h(newly)f(created)g
(con)o(text.)19 b(The)13 b(handle)f(should)h(not)286 1324 y(b)q(e)j(asso)q
(ciated)i(with)e(an)g(ob)s(ject)g(b)q(efore)g(the)g(call.)164
1426 y Fi(IN)i(con)n(text)24 b Fl(handle)16 b(to)h(old)f(con)o(text)164
1649 y Fk(Discussion:)35 b Fj(I)11 b(considered)h(adding)f(a)f(string)g
(parameter,)g(to)g(pro)o(vide)h(a)e(unique)j(iden)o(ti\014er)164
1706 y(to)j(the)h(next)f(con)o(text.)21 b(But,)15 b(in)i(an)e(en)o(vironmen)o
(t)h(where)g(pro)q(cesses)g(are)f(single)i(threaded,)164 1762
y(this)j(is)h(not)f(m)o(uc)o(h)g(help:)31 b(Either)20 b(all)h(pro)q(cesses)g
(agree)f(on)g(the)g(order)g(they)g(create)g(new)164 1819 y(con)o(texts,)15
b(or)h(the)g(application)i(deadlo)q(c)o(ks.)23 b(A)16 b(k)o(ey)g(ma)o(y)f
(help)i(in)g(an)f(en)o(vironmen)o(t)h(where)164 1875 y(pro)q(cesses)f(are)g
(m)o(ultithreaded,)h(to)e(distinguish)j(call)f(from)e(distinct)i(threads)f
(of)f(the)h(same)164 1932 y(pro)q(cess;)f(but)g(it)h(migh)o(t)f(b)q(e)h
(simpler)g(to)f(use)g(a)g(m)o(utex)g(algorithm)g(at)g(eac)o(h)g(pro)q(cess.)
237 1992 y Fk(Implemen)o(tation)23 b(note:)k Fj(No)19 b(comm)o(unication)h
(is)f(needed)i(to)d(create)h(a)f(new)i(con-)164 2052 y(text,)g(b)q(ey)o(ond)g
(a)f(barrier)h(sync)o(hronization;)i(all)e(pro)q(cesses)g(can)g(agree)f(to)g
(use)h(the)f(same)164 2112 y(naming)c(sc)o(heme)f(for)g(successiv)o(e)i
(copies)f(of)f(the)g(same)g(con)o(text.)19 b(Also,)c(no)f(new)g(rank)g(table)
164 2172 y(is)i(needed,)g(just)f(a)g(new)g(con)o(text)g(lab)q(el)h(and)g(a)f
(new)g(p)q(oin)o(ter)h(to)e(the)i(same)f(old)g(table.)164 2413
y Fi(MPI)p 279 2413 V 20 w(NEW)p 438 2413 V 20 w(CONTEXT\(new)n(con)n(text,)j
(con)n(text,)g(k)n(ey)-5 b(,)18 b(index\))961 2599 y Fl(9)p
eop
%%Page: 10 10
bop 164 307 a Fi(OUT)19 b(new)n(con)n(text)24 b Fl(handle)13
b(to)g(newly)g(created)f(con)o(text)g(at)i(calling)e(pro)q(cess.)21
b(This)286 367 y(handle)16 b(should)h(not)g(b)q(e)f(asso)q(ciated)h(with)f
(an)h(ob)s(ject)f(b)q(efore)g(the)g(call.)164 469 y Fi(IN)i(con)n(text)24
b Fl(handle)16 b(to)h(old)f(con)o(text)164 571 y Fi(IN)i(k)n(ey)24
b Fl(in)o(teger)164 672 y Fi(IN)18 b(index)25 b Fl(in)o(teger)237
787 y(A)20 b(new)g(con)o(text)f(is)g(created)h(for)g(eac)o(h)f(distinct)g(v)m
(alue)h(of)g Fg(key)p Fl(;)g(this)g(con)o(text)f(is)164 847
y(shared)e(b)o(y)g(all)f(pro)q(cesses)h(that)h(made)d(the)i(call)f(with)h
(this)g(k)o(ey)e(v)m(alue.)23 b(Within)16 b(eac)o(h)164 907
y(new)k(con)o(text)g(the)g(pro)q(cesses)h(are)g(rank)o(ed)f(according)h(to)g
(the)f(order)h(of)f(the)h Fg(index)164 967 y Fl(v)m(alues)16
b(they)g(pro)o(vided;)f(in)h(case)g(of)h(ties,)e(pro)q(cesses)i(are)f(rank)o
(ed)g(according)g(to)h(their)164 1027 y(rank)f(in)g(the)g(old)h(con)o(text.)
237 1088 y(This)e(call)e(is)h(blo)q(c)o(king:)20 b(No)14 b(call)f(returns)i
(un)o(til)e(all)h(pro)q(cesses)g(in)g(the)g(old)h(con)o(text)164
1148 y(executed)g(the)h(call.)237 1208 y(P)o(articular)g(uses)g(of)h(this)f
(function)g(are:)237 1268 y(\(i\))h(Reordering)h(pro)q(cesses:)25
b(All)16 b(pro)q(cesses)i(pro)o(vide)f(the)h(same)e Fg(key)h
Fl(v)m(alue,)g(and)164 1328 y(pro)o(vide)e(their)h(index)f(in)h(the)g(new)g
(order.)237 1389 y(\(ii\))e(Splitting)g(a)h(con)o(text)f(in)o(to)h(sub)q(con)
o(texts,)f(while)g(preserving)g(the)h(old)g(relativ)o(e)164
1449 y(order)23 b(among)f(pro)q(cesses:)35 b(All)21 b(pro)q(cesses)i(pro)o
(vide)f(the)g(same)g Fg(index)f Fl(v)m(alue,)i(and)164 1509
y(pro)o(vide)15 b(a)i(k)o(ey)e(iden)o(tifying)g(their)g(new)h(sub)q(con)o
(text.)164 1629 y Fi(MPI)p 279 1629 17 2 v 20 w(RANK\(rank,)i(con)n(text\))
164 1743 y(OUT)h(rank)24 b Fl(in)o(teger)164 1845 y Fi(IN)18
b(con)n(text)24 b Fl(con)o(text)15 b(handle)237 1959 y(Return)h(the)g(rank)h
(of)f(the)g(calling)g(pro)q(cess)g(within)g(the)g(sp)q(eci\014ed)g(con)o
(text.)164 2080 y Fi(MPI)p 279 2080 V 20 w(SIZE\(size,)j(con)n(text\))164
2194 y(OUT)g(size)24 b Fl(in)o(teger)164 2296 y Fi(IN)18 b(con)n(text)24
b Fl(con)o(text)15 b(handle)237 2410 y(Return)h(the)g(n)o(um)o(b)q(er)f(of)h
(pro)q(cesses)h(that)g(b)q(elong)f(to)h(the)f(sp)q(eci\014ed)g(con)o(text.)
949 2599 y(10)p eop
%%Page: 11 11
bop 164 307 a Fi(Usage)25 b(note)49 b Fl(Use)21 b(of)i(con)o(texts)e(for)i
(libraries:)32 b(Eac)o(h)22 b(library)f(ma)o(y)g(pro)o(vide)g(an)164
367 y(initialization)15 b(routine)i(that)g(is)g(to)g(b)q(e)g(called)f(b)o(y)h
(all)f(pro)q(cesses,)h(and)h(that)f(generate)164 428 y(a)g(con)o(text)e(for)i
(the)f(use)g(of)g(that)h(library)l(.)237 488 y(Use)11 b(of)h(con)o(texts)e
(for)i(functional)f(decomp)q(osition:)18 b(A)11 b(harness)h(program,)g
(running)164 548 y(in)18 b(the)g(con)o(text)g Fg(ALL)f Fl(generates)i(a)g
(sub)q(con)o(text)f(for)h(eac)o(h)f(mo)q(dule)f(and)i(then)f(starts)164
608 y(the)e(submo)q(dule)f(within)h(the)g(corresp)q(onding)h(con)o(text.)237
668 y(Use)k(of)g(con)o(texts)g(for)g(collectiv)o(e)e(comm)o(unic)o(ation:)29
b(A)21 b(con)o(text)f(is)h(created)g(for)164 729 y(eac)o(h)16
b(group)h(of)f(pro)q(cesses)h(where)f(collectiv)o(e)e(comm)o(uni)o(cation)g
(is)i(to)g(o)q(ccur.)237 789 y(Use)i(of)g(con)o(texts)g(for)g(con)o
(text-switc)o(hing)f(among)h(sev)o(eral)f(parallel)g(executions:)164
849 y(A)h(pream)o(ble)e(co)q(de)i(is)g(used)g(to)g(generate)g(a)h(di\013eren)
o(t)e(con)o(text)g(for)i(eac)o(h)e(execution;)164 909 y(this)j(pream)o(ble)d
(co)q(de)j(needs)g(to)g(use)f(a)i(m)o(utual)d(exclusion)g(proto)q(col)j(to)f
(mak)o(e)e(sure)164 969 y(eac)o(h)e(thread)g(claims)e(the)i(righ)o(t)g(con)o
(text.)164 1139 y Fk(Discussion:)59 b Fj(If)20 b(pro)q(cess)g(handles)h(are)e
(made)h(explicit)i(in)e(MPI,)g(then)g(an)f(additional)164 1195
y(function)c(needed)h(is)f Fk(MPI)p 646 1195 16 2 v 18 w(PR)o(OCESS\(pro)q
(cess,)i(con)o(text,)f(rank\))p Fj(,)e(whic)o(h)i(returns)e(a)164
1252 y(handle)i(to)f(the)g(pro)q(cess)h(iden)o(ti\014ed)h(b)o(y)e(the)g
Ff(rank)g Fj(and)g Ff(context)g Fj(parameters.)237 1312 y(A)10
b(p)q(ossible)i(addition)f(is)g(a)f(function)h(of)f(the)g(form)f
Fk(MPI)p 1199 1312 V 18 w(CREA)l(TE)p 1434 1312 V 19 w(CONTEXT\(new)o(con)o
(text,)164 1372 y(list)p 236 1372 V 20 w(of)p 298 1372 V 19
w(pro)q(cess)p 484 1372 V 18 w(handles\))19 b Fj(whic)o(h)g(creates)f(a)g
(new)h(con)o(text)e(out)h(of)g(an)g(explicit)i(list)f(of)164
1432 y(mem)o(b)q(ers)e(\(and)g(rank)g(them)g(in)h(their)g(order)f(of)g(o)q
(ccurrence)h(in)g(the)f(list\).)26 b(This,)18 b(coupled)164
1492 y(with)13 b(a)f(mec)o(hanism)h(for)e(requiring)j(the)e(spa)o(wning)h(of)
f(new)g(pro)q(cesses)h(to)f(the)g(computation,)164 1553 y(will)20
b(allo)o(w)e(to)g(create)g(a)g(new)g(all)h(inclusiv)o(e)i(con)o(text)c(that)h
(includes)i(the)e(additional)i(pro-)164 1613 y(cesses.)k(Ho)o(w)o(ev)o(er,)16
b(I)h(opp)q(ose)g(the)f(idea)h(of)g(requiring)g(dynamic)h(pro)q(cess)f
(creation)f(as)g(part)164 1673 y(of)f(MPI.)f(Man)o(y)h(implemen)o(ters)h(w)o
(an)o(t)e(to)g(run)i(MPI)f(in)h(an)f(en)o(vironmen)o(t)g(where)g(pro)q
(cesses)164 1733 y(are)g(statically)h(allo)q(cated)g(at)f(load-time.)164
1983 y Fi(1.4.2)55 b(Error)18 b(Handling)164 2076 y Fl(It)12
b(is)g(assumed)g(that)g(MPI)g(is)g(implem)o(en)o(te)o(d)e(on)i(top)h(of)g(an)
f(error-free)g(comm)o(unicati)o(on)164 2136 y(subsystem:)18
b(A)12 b(message)g(sen)o(t)g(is)g(alw)o(a)o(ys)g(receiv)o(ed)e(correctly)l(,)
i(and)h(the)f(user)g(do)q(es)h(not)164 2196 y(need)e(to)g(c)o(hec)o(k)e(for)i
(transmission)g(errors,)g(time-outs,)g(and)g(the)g(lik)o(es.)18
b(In)11 b(other)g(w)o(ords,)164 2256 y(MPI)21 b(do)q(es)h(not)g(pro)o(vide)e
(mec)o(hanisms)f(to)i(deal)g(with)h(failures)e(in)i(the)f(underlying)164
2316 y(comm)o(unic)o(ation)15 b(subsystem)g({)j(it)e(is)h(the)f(resp)q
(onsibilit)o(y)g(of)h(the)f(MPI)h(implem)o(en)n(ter)164 2377
y(to)i(insulate)g(the)g(user)f(from)g(suc)o(h)h(errors)g(\(or)g(to)h
(re\015ect)e(them)f(as)j(global)f(program)164 2437 y(failures\).)i(The)16
b(same)f(holds)i(true)f(for)g(no)q(de)h(failures.)949 2599
y(11)p eop
%%Page: 12 12
bop 237 307 a Fl(Of)15 b(course,)h(MPI)f(programs)g(ma)o(y)f(still)g(b)q(e)i
(erroneous.)21 b(A)15 b Fi(program)j(error)d Fl(can)164 367
y(o)q(ccur)i(when)h(an)f(MPI)g(call)g(is)g(called)f(with)h(an)h(incorrect)e
(parameter)g(\(non-existing)164 428 y(destination)f(in)g(a)h(send)g(op)q
(eration,)g(bu\013er)f(to)q(o)i(small)c(in)i(a)h(receiv)o(e)d(op)q(eration,)j
(etc.\))164 488 y(This)k(t)o(yp)q(e)g(of)h(error)f(w)o(ould)h(o)q(ccur)f(in)g
(an)o(y)g(impleme)o(n)o(tation.)31 b(In)20 b(addition,)h(a)g
Fi(re-)164 548 y(source)g(error)e Fl(ma)o(y)e(o)q(ccur)i(when)g(a)h(program)f
(exceeds)e(the)i(amoun)o(t)f(of)i(a)o(v)m(ailable)164 608 y(system)e
(resources)i(\(n)o(um)o(b)q(er)e(of)i(p)q(ending)h(messages,)f(system)e
(bu\013ers,)j(etc.\).)31 b(The)164 668 y(o)q(ccurrence)13 b(of)i(this)f(t)o
(yp)q(e)f(of)i(error)f(dep)q(ends)g(on)h(the)f(amoun)o(t)f(of)i(a)o(v)m
(ailable)e(resources)164 729 y(in)19 b(the)g(system)f(and)j(the)e(resource)g
(allo)q(cation)h(mec)o(hanism)c(used;)21 b(this)e(ma)o(y)f(di\013er)164
789 y(from)f(system)g(to)h(system.)26 b(The)18 b(recomme)o(nded)d(impleme)o
(n)o(tation)h(pro\014le)h(pro)o(vides)164 849 y(sev)o(eral)d(mec)o(hanism)o
(s)f(to)i(alleviate)e(the)i(p)q(ortabilit)o(y)f(problem)f(this)i(represen)o
(ts.)20 b(One)164 909 y(can)c(also)h(write)f Fi(safe)g Fl(programs,)g(that)h
(are)f(not)h(sub)s(ject)e(to)i(resource)f(errors.)237 969 y(All)21
b(MPI)g(pro)q(cedure)h(calls)f(return)h(an)h(error)e(parameter)g(that)h
(indicates)g(suc-)164 1029 y(cessful)g(completion)f(of)i(the)f(op)q(eration,)
j(or)e(the)f(error)h(condition)f(that)h(o)q(ccurred,)164 1090
y(otherwise.)237 1150 y(The)h(recommende)o(d)d(implem)o(en)o(tation)g
(pro\014le)j(in)f(a)h(POSIX)f(en)o(vironmen)o(t)e(is)164 1210
y(for)h(an)o(y)f(MPI)g(routine)g(that)g(encoun)o(ters)g(a)h(reco)o(v)o
(erable)e(error)h(to)h(store)f(an)h(error)164 1270 y(n)o(um)o(b)q(er)f(in)h
(a)h(global)g(v)m(ariable)f(\()p Fh(errno)h Fl(in)f(a)h(C)g(en)o(vironmen)o
(t\))d(and)j(generate)f(an)164 1330 y Fh(MPI)d(err)n(or)e(signal)p
Fl(,)i(using)g(a)f(sp)q(ecial)g(signal)g(v)m(alue.)27 b(The)18
b(default)g(handler)g(for)g(this)164 1391 y(signal)13 b(terminates)e(the)h
(execution)g(of)h(all)f(in)o(v)o(olv)o(ed)e(pro)q(cesses,)k(with)f(a)g
(suitable)f(error)164 1451 y(message)19 b(b)q(eing)i(returned)f(to)g(the)g
(user.)33 b(Ho)o(w)o(ev)o(er,)19 b(the)h(user)h(can)f(pro)o(vide)f(his)i(or)
164 1511 y(her)14 b(o)o(wn)g(signal)h(handling)f(routine.)20
b(In)14 b(particular,)g(the)g(user)g(can)g(sp)q(ecify)f(a)i(\\no)q(op")164
1571 y(signal)i(handler,)f(th)o(us)g(relegating)g(all)g(error)h(handling)f
(to)h(the)g(user)f(co)q(de,)g(using)h(the)164 1631 y(error)f(parameters)f
(returned)h(b)o(y)g(the)g(MPI)g(calls.)237 1692 y(MPI)f(calls)f(ma)o(y)g
(initiate)g(op)q(erations)i(that)g(con)o(tin)o(ue)e(async)o(hronously)h
(after)g(the)164 1752 y(call)k(returned.)30 b(Th)o(us,)20 b(the)f(op)q
(eration)i(ma)o(y)d(return)h(with)g(a)h(co)q(de)g(indicating)f(suc-)164
1812 y(cessful)14 b(completion,)e(y)o(et)i(later)g(cause)h(an)g(error)f
(exception)g(to)h(b)q(e)f(raised.)21 b(If)14 b(there)g(is)164
1872 y(a)i(subsequen)o(t)f(call)g(that)h(relates)f(to)g(the)h(same)e(op)q
(eration)i(\(e.g.,)f(a)h(call)e(that)i(v)o(eri\014es)164 1932
y(that)f(an)f(async)o(hronous)i(op)q(eration)f(has)g(completed\))d(then)i
(the)g(error)g(parameter)f(as-)164 1993 y(so)q(ciated)18 b(with)f(this)g
(call)g(will)f(b)q(e)i(used)f(to)h(indicate)e(the)h(nature)h(of)g(the)f
(error.)24 b(In)18 b(a)164 2053 y(few)13 b(cases,)h(the)g(error)f(ma)o(y)f(o)
q(ccur)i(after)g(all)f(calls)g(that)h(relate)f(to)h(the)f(op)q(eration)i(ha)o
(v)o(e)164 2113 y(completed,)e(so)k(that)g(no)f(error)g(parameter)f(can)h(b)q
(e)h(used)f(to)g(indicate)f(the)h(nature)h(of)164 2173 y(the)h(error)h
(\(e.g.,)f(an)h(error)f(in)h(a)g(send)f(with)h(the)f(ready)g(mo)q(de\).)28
b(In)18 b(suc)o(h)g(cases,)h(an)164 2233 y(error)d(will)f(b)q(e)i
(undetected,)e(if)g(the)h(user)h(disabled)e(the)h(MPI)g(error)g(signal.)164
2414 y Fk(Discussion:)40 b Fj(The)16 b(alternativ)o(e)f(c)o(hoice)h(is)g(to)f
(ha)o(v)o(e)f(fatal)h(and)h(non-fatal)f(signals.)949 2599 y
Fl(12)p eop
%%Page: 13 13
bop 164 452 a Fm(1.5)70 b(Messages)164 544 y Fl(A)16 b(message)f(consists)i
(of)g(an)f Fh(envelop)n(e)i Fl(and)f Fh(data)p Fl(.)164 674
y Fi(1.5.1)55 b(Data)164 766 y Fl(The)17 b(data)h(part)g(of)f(a)h(message)e
(consists)i(of)f(a)h(sequence)e(of)h(v)m(alues,)g(eac)o(h)g(of)g(a)h(basic)
164 826 y(datat)o(yp)q(e)k(in)f(the)g(host)h(language.)37 b(Th)o(us,)22
b(in)f(F)l(ortran,)i(a)f(message)e(consists)i(of)g(a)164 887
y(sequence)14 b(of)h(v)m(alues)h(that)f(are)g(eac)o(h)g(of)g(t)o(yp)q(e)g
Fg(INTEGER)p Fl(,)d Fg(REAL)p Fl(,)h Fg(DOUBLE)24 b(PRECISION)o
Fl(,)164 947 y Fg(COMPLEX)p Fl(,)16 b Fg(LOGICAL)p Fl(,)f(or)k(\(length)g
(1\))f Fg(CHARACTER)p Fl(.)d(A)k(message)e(ma)o(y)g(mix)g(v)m(alues)i(of)164
1007 y(di\013eren)o(t)c(t)o(yp)q(es.)164 1188 y Fk(Discussion:)40
b Fj(Ma)o(y)15 b(also)g(need)h Ff(DOUBLE)23 b(COMPLEX)14 b
Fj(in)i(F)l(ortran.)164 1438 y Fi(1.5.2)55 b(En)n(v)n(elop)r(e)164
1530 y Fl(The)16 b(follo)o(wing)g(information)f(is)h(asso)q(ciated)i(with)e
(eac)o(h)f(message:)164 1632 y Fi(source)24 b Fl(The)16 b(rank)h(the)f
(sending)g(pro)q(cess)164 1734 y Fi(destination)25 b Fl(The)17
b(rank)f(of)h(the)f(receiving)e(pro)q(cess)164 1835 y Fi(tag)24
b Fl(User)16 b(de\014ned)164 1937 y Fi(con)n(text)24 b Fl(handle)237
2039 y(The)15 b(range)g(of)g(v)m(alid)f(v)m(alues)h(for)g(the)f
Fi(source)g Fl(and)h Fi(destination)h Fl(\014elds)e(is)h Fg(0)25
b(...)164 2099 y(n-1)p Fl(,)16 b(where)h Fg(n)f Fl(is)h(the)g(n)o(um)o(b)q
(er)f(of)h(pro)q(cesses)h(in)f(the)g(curren)o(t)f(con)o(text.)23
b(The)17 b(ranges)164 2159 y(of)j(v)m(alid)g(v)m(alues)g(for)h
Fg(tag)e Fl(is)g(impleme)o(n)o(tation)e(dep)q(enden)o(t,)k(and)f(can)g(b)q(e)
h(found)f(b)o(y)164 2219 y(calling)13 b(a)h(suitable)g(query)f(function,)h
(as)g(describ)q(ed)g(in)f(Section)h Fi(??)p Fl(.)21 b Fg(Context)11
b Fl(should)164 2279 y(b)q(e)16 b(a)h(con)o(text)e(shared)i(b)o(y)f(b)q(oth)h
(source)f(and)h(destination.)237 2340 y(The)h Fg(tag)e Fl(\014eld)h(can)h(b)q
(e)g(arbitrarily)e(set)i(b)o(y)f(the)g(application,)g(and)h(can)g(b)q(e)g
(used)164 2400 y(to)f(distinguish)f(di\013eren)o(t)f(messages.)949
2599 y(13)p eop
%%Page: 14 14
bop 237 307 a Fl(The)12 b(actual)g(mec)o(hanism)d(used)j(to)g(asso)q(ciate)h
(an)f(en)o(v)o(elop)q(e)f(with)g(a)i(message)e(is)g(im-)164
367 y(plemen)o(tation)h(dep)q(enden)o(t;)i(some)f(of)i(the)f(information)f
(\(e.g.,)h Fi(sender)f Fl(or)i Fi(receiv)n(er)p Fl(\))164 428
y(ma)o(y)g(b)q(e)h(implicit,)c(and)17 b(need)f(not)h(b)q(e)f(explicitly)e
(carried)h(b)o(y)h(a)h(message.)164 572 y Fm(1.6)70 b(Data)23
b(Bu\013ers)164 664 y Fl(The)18 b(basic)h(p)q(oin)o(t)f(to)h(p)q(oin)o(t)f
(comm)o(unicati)o(on)e(op)q(erations)k(are)e Fi(send)g Fl(and)h
Fi(receiv)n(e)p Fl(.)164 724 y(A)13 b Fi(send)h Fl(op)q(eration)h(creates)f
(a)g(message;)g(the)f(message)h(data)g(is)g(assem)o(bled)e(from)h(the)164
785 y Fi(send)k(bu\013er)p Fl(.)j(A)14 b Fi(receiv)n(e)f Fl(op)q(eration)j
(consumes)d(a)i(message;)f(the)g(message)g(data)h(is)164 845
y(mo)o(v)o(ed)g(in)o(to)i(the)f Fi(receiv)n(e)j(bu\013er)p
Fl(.)k(The)17 b(sp)q(eci\014cation)g(of)g(send)g(or)h(receiv)o(e)c(bu\013ers)
164 905 y(uses)i(the)g(same)g(syn)o(tax.)237 965 y(A)j(bu\013er)g(consists)h
(of)g(a)f(sequence)f Fi(bu\013er)k(comp)r(onen)n(ts)p Fl(.)30
b(Eac)o(h)19 b(comp)q(onen)o(t)164 1025 y(consists)14 b(of)h(a)f(sequence)f
(v)m(ariables)h(of)h(the)f(same)f(basic)h(t)o(yp)q(e.)20 b(There)13
b(are)h(three)g(basic)164 1086 y(t)o(yp)q(es)i(of)h(bu\013er)f(comp)q(onen)o
(ts:)164 1199 y Fi(blo)r(c)n(k)25 b Fl(A)15 b(sequence)h(of)g(con)o(tiguous)h
(v)m(alues)f(of)h(the)f(same)f(basic)h(t)o(yp)q(e,)f(sp)q(eci\014ed)h(b)o(y)
286 1301 y Fi(start)24 b Fl(Initial)15 b(elemen)o(t)286 1382
y Fi(len)25 b Fl(Num)o(b)q(er)14 b(of)i(elemen)o(ts)e(\()p
Fg(len)f Fe(\025)g Fg(0)p Fl(\))286 1462 y Fi(datat)n(yp)r(e)24
b Fl(T)o(yp)q(e)16 b(of)g(elemen)o(ts)164 1564 y Fi(v)n(ector)24
b Fl(A)14 b(sequence)f(of)i(equally)f(spaced)h(and)g(equally)e(sized)h(blo)q
(c)o(ks)h(of)g(elemen)o(ts)d(of)286 1624 y(the)k(same)f(basic)h(t)o(yp)q(e,)g
(sp)q(eci\014ed)f(b)o(y)286 1726 y Fi(start)24 b Fl(Initial)15
b(elemen)o(t)286 1807 y Fi(len)25 b Fl(Num)o(b)q(er)14 b(of)i(elemen)o(ts)e
(\()p Fg(len)f Fe(\025)g Fg(0)p Fl(\))286 1887 y Fi(stride)24
b Fl(Num)o(b)q(er)15 b(of)h(elemen)o(ts)e(b)q(et)o(w)o(een)h(the)h(start)h
(of)f(eac)o(h)g(blo)q(c)o(k)286 1968 y Fi(len)n(blk)25 b Fl(Num)o(b)q(er)15
b(of)h(elemen)o(ts)e(in)h(eac)o(h)h(blo)q(c)o(k)g(\()p Fg(lenblk)c
Fe(\024)h Fg(stride)p Fl(\))286 2049 y Fi(datat)n(yp)r(e)24
b Fl(T)o(yp)q(e)16 b(of)g(elemen)o(ts)286 2151 y(Note)10 b(that)i(a)f
(constan)o(t)g(stride)f(b)q(ecomes)g(con)o(tiguous)h(when)g
Fg(stride)24 b(=)h(lenblk)p Fl(.)286 2211 y(A)c(v)o(ector)g(bu\013er)g(comp)q
(onen)o(t)g(can)h(b)q(e)f(an)h(arbitrary)g(submatrix)e(of)i(a)g(t)o(w)o(o-)
286 2271 y(dimensional)14 b(matrix.)164 2372 y Fi(indexed)24
b Fl(A)16 b(sequence)f(of)i(elemen)o(t)o(s)d(of)j(the)f(same)f(basic)h(t)o
(yp)q(e,)f(sp)q(eci\014ed)h(b)o(y)286 2474 y Fi(start)24 b
Fl(initial)15 b(elemen)o(t)949 2599 y(14)p eop
%%Page: 15 15
bop 286 307 a Fi(list)p 363 307 17 2 v 21 w(of)p 429 307 V
20 w(indices)26 b Fl(List)12 b(of)g(displacemen)o(ts)d(of)j(the)f(elemen)o
(ts)e(in)j(the)f(bu\013er)h(com-)393 367 y(p)q(onen)o(ts,)17
b(relativ)o(e)d(to)j(the)f(initial)f(elemen)n(t.)286 443 y
Fi(datat)n(yp)r(e)24 b Fl(T)o(yp)q(e)16 b(of)g(elemen)o(ts)237
534 y(F)l(or)f(example,)d(if)i(a)h(F)l(ortran)g(arra)o(y)g(is)f(declared)g
(as)h Fg(double)24 b(precision)e(a\(10\))p Fl(,)164 594 y(then)15
b(the)f(tuple)g Fd(<)p Fg(\(a\(3\),)24 b(\(0,3,6,2\))o(,)f(DOUBLE)p
Fd(>)12 b Fl(sp)q(eci\014es)j(a)g(bu\013er)g(comp)q(onen)o(t)164
655 y(with)h(en)o(tries)f Fg(a\(3\))24 b(a\(6\),)g(a\(9\),)g(a\(5\))p
Fl(.)164 824 y Fk(Discussion:)56 b Fj(Do)19 b(w)o(e)g(allo)o(w)g(en)o(tries)h
(to)f(b)q(e)h(rep)q(eated)f(in)h(an)g(indexed)g(bu\013er)g(comp)q(o-)164
880 y(nen)o(t?)237 937 y(Do)15 b(w)o(e)g(allo)o(w)g(di\013eren)o(t)g
(bu\013er)h(comp)q(onen)o(ts)f(to)f(o)o(v)o(erlap?)237 993
y(Do)e(w)o(e)g(require)h(in)g(an)f(v)o(ector)g(bu\013er)g(comp)q(onen)o(t)g
(that)g Ff(len)g Fj(b)q(e)g(a)g(m)o(ultiple)i(of)e Ff(lenblk)p
Fj(?)237 1234 y Fl(A)j(bu\013er)h(is)f(describ)q(ed)f(b)o(y)h(an)h(opaque)f
(ob)s(ject)g(accessed)g(via)g(a)h Fi(bu\013er)h(handle)p Fl(.)164
1294 y(Suc)o(h)f(ob)s(ject)g(is)g(created)f(and)i(destro)o(y)o(ed)f(via)g
(calls)f(to)i Fg(MPI)p 1292 1294 16 2 v 17 w(CREATE)e Fl(and)h
Fg(MPI)p 1652 1294 V 18 w(FREE)p Fl(.)164 1354 y(It)k(is)h(asso)q(ciated)h
(with)f(successiv)o(e)e(bu\013er)i(comp)q(onen)o(ts)f(b)o(y)g(calling)h(in)f
(succession)164 1415 y(one)f(of)g(the)g(functions)g Fg(MPI)p
695 1415 V 17 w(ADD)p 790 1415 V 18 w(BLOCK)p Fl(,)d Fg(MPI)p
1046 1415 V 18 w(ADD)p 1142 1415 V 17 w(VECTOR)h Fl(or)i Fg(MPI)p
1472 1415 V 17 w(ADD)p 1567 1415 V 18 w(INDEX)p Fl(,)d(in)164
1475 y(order)h(to)g(app)q(end)h(a)g(comp)q(onen)o(t)e(to)h(the)g(bu\013er)g
(asso)q(ciated)h(with)f(a)g(bu\013er)g(handle.)164 1535 y(A)f(bu\013er)h(ob)s
(ject)f(can)g(b)q(e)h(destro)o(y)o(ed)e(only)h(if)g(there)g(is)g(no)h(p)q
(ending)g(comm)o(unicati)o(on)164 1595 y(op)q(eration)j(using)g(it.)31
b(After)19 b(a)h(bu\013er)g(ob)s(ject)f(is)g(destro)o(y)o(ed)g(the)g(asso)q
(ciated)i(bu\013er)164 1655 y(handle)16 b(is)g(unde\014ned.)164
1776 y Fi(MPI)p 279 1776 17 2 v 20 w(ADD)p 427 1776 V 21 w(BLOCK\()i
(bu\013er,)g(start,)g(len,)h(datat)n(yp)r(e\))237 1896 y Fl(App)q(end)d(a)h
(blo)q(c)o(k)f(comp)q(onen)o(t)f(to)i(bu\013er.)k(The)16 b(parameters)g(are:)
164 1981 y Fi(INOUT)i(bu\013er)24 b Fl(bu\013er)17 b(handle)164
2077 y Fi(IN)h(start)25 b Fl(bu\013er)16 b(comp)q(onen)o(t)f(initial)g
(elemen)o(t)e(\(c)o(hoice\))164 2173 y Fi(IN)18 b(len)25 b
Fl(Num)o(b)q(er)14 b(of)j(elemen)o(ts)c(\(in)o(teger\))164
2269 y Fi(IN)18 b(datat)n(yp)r(e)24 b Fl(datat)o(yp)q(e)17
b(iden)o(ti\014er)d(\(status\))164 2414 y Fi(MPI)p 279 2414
V 20 w(ADD)p 427 2414 V 21 w(VEC\()19 b(bu\013er,)f(len,)g(stride,)g(len)n
(blk,)i(datat)n(yp)r(e)e(\))949 2599 y Fl(15)p eop
%%Page: 16 16
bop 237 307 a Fl(App)q(end)16 b(a)h(v)o(ector)e(bu\013er)i(comp)q(onen)o(t)e
(to)i(bu\013er.)k(The)c(parameters)e(are:)164 409 y Fi(INOUT)j(bu\013er)24
b Fl(bu\013er)17 b(handle)164 511 y Fi(IN)h(start)25 b Fl(bu\013er)16
b(comp)q(onen)o(t)f(initial)g(elemen)o(t)e(\(c)o(hoice\))164
612 y Fi(IN)18 b(len)25 b Fl(Num)o(b)q(er)14 b(of)j(elemen)o(ts)c(\(in)o
(teger\))164 714 y Fi(IN)18 b(stride)25 b Fl(Num)o(b)q(er)14
b(of)j(elemen)o(ts)c(b)q(et)o(w)o(een)i(the)h(start)h(of)g(eac)o(h)e(blo)q(c)
o(k)h(\(in)o(teger\))164 816 y Fi(IN)i(len)n(blk)26 b Fl(Num)o(b)q(er)14
b(of)j(elemen)o(ts)c(in)j(eac)o(h)g(blo)q(c)o(k)f(\(in)o(teger\))164
917 y Fi(IN)j(datat)n(yp)r(e)24 b Fl(datat)o(yp)q(e)17 b(iden)o(ti\014er)d
(\(status\))164 1079 y Fi(MPI)p 279 1079 17 2 v 20 w(ADD)p
427 1079 V 21 w(INDEX\()k(bu\013er,)g(start,)g(list)p 1077
1079 V 21 w(of)p 1143 1079 V 20 w(indices,)i(datat)n(yp)r(e\))237
1200 y Fl(App)q(end)c(an)h(indexed)e(bu\013er)i(comp)q(onen)o(t)e(to)i
(bu\013er.)k(The)c(parameters)e(are:)164 1301 y Fi(INOUT)j(bu\013er)24
b Fl(bu\013er)17 b(handle)164 1403 y Fi(start)24 b Fl(initial)15
b(p)q(osition)i(for)f(indexing)g(\(c)o(hoice\))164 1505 y Fi(list)p
241 1505 V 21 w(of)p 307 1505 V 20 w(indices)26 b Fl(list)15
b(of)i(relativ)o(e)d(indices)i(of)g(en)o(tries)f(\(arra)o(y)h(of)h(in)o
(tegers\))164 1606 y Fi(IN)h(datat)n(yp)r(e)24 b Fl(datat)o(yp)q(e)17
b(iden)o(ti\014er)d(\(status\))237 1708 y(Consider,)i(for)h(example,)c(the)j
(follo)o(wing)g(fragmen)o(t)f(of)i(F)l(ortran)g(co)q(de)164
1822 y Fg(DOUBLE)23 b(PRECISION)g(A\(10,20\))164 1883 y(INTEGER)g(B,)i
(C\(5,10\))164 1943 y(INTEGER)e(BH)164 2003 y(...)164 2063
y(CALL)h(MPI_CREATE)o(\(BH)o(,)f(MPI_BUFFE)o(R,)f(MPI_PERSIST)o(EN)o(T\))164
2123 y(CALL)i(MPI_ADD_BL)o(OCK)e(\(BH,)i(B,)h(1,)g(MPI_INT\))164
2183 y(CALL)f(MPI_ADD_VE)o(C)f(\(BH,)h(A\(1,3\),)f(11,)h(4,)h(2,)g
(MPI_DOUBLE\))164 2244 y(CALL)f(MPI_ADD_IN)o(DEX)o(\(BH)o(,)f(C\(3,7\),)g
(\(4,2,1\),)f(MPI_INT\))949 2599 y Fl(16)p eop
%%Page: 17 17
bop 237 307 a Fl(Then)15 b(the)g(bu\013er)g(asso)q(ciated)g(with)g(the)f
(handle)h Fg(BH)f Fl(consists)h(of)g(the)g(sequence)f(of)164
367 y(v)m(ariables)237 428 y Fg(B,)25 b(A\(1,3\),)e(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\),)164
488 y(A\(7,4\),)g(A\(8,4\),)g(A\(1,5\),)g(C\(2,8\),)g(C\(5,7\),)g(C\(4,7\))p
Fl(.)237 548 y(A)11 b(message)f(created)g(from)g(this)h(bu\013er)g(will)f
(consist)h(of)g(a)g(sequence)f(of)h(one)g(in)o(teger,)164 608
y(follo)o(w)o(ed)k(b)o(y)h(elev)o(en)e(double)j(precision)e(reals,)h(follo)o
(w)o(ed)f(b)o(y)h(three)f(in)o(tegers.)237 668 y(A)d(bu\013er)g(handle)g(can)
g(b)q(e)g(used)g(for)g(comm)o(unic)o(ation,)e(ev)o(en)h(if)g(it)h(is)g(not)g
(asso)q(ciated)164 729 y(with)i(an)o(y)f(v)m(ariables)h(\(i.e.,)e(ev)o(en)h
(if)g(it)h(w)o(as)g(not)g(set)g(b)o(y)g(an)o(y)f Fg(MPI)p 1354
729 16 2 v 18 w(ADD)p 1450 729 V 17 w(xxx)g Fl(call\).)19 b(Suc)o(h)164
789 y(handle)i(is)g(asso)q(ciated)h(with)e(an)i(empt)o(y)d(bu\013er,)j(and)f
(a)h(message)e(created)g(from)g(it)164 849 y(con)o(tains)c(no)h(data.)164
1018 y Fk(Discussion:)237 1075 y Fj(The)h(main)g(mo)q(di\014cations)h(w.r.t.)
25 b(the)18 b(prop)q(osal)f(of)g(Gropp)h(and)f(Lusk)h(is)g(measuring)164
1131 y(length)g(in)g(elemen)o(ts,)f(rather)g(than)g(b)o(ytes.)25
b(Seems)17 b(more)g(natural,)g(since)h(t)o(yp)q(e)f(is)g(kno)o(wn.)164
1188 y(Also,)k(ob)s(ject)e(creation)h(uses)f(a)h(generic)g(function,)i
(rather)d(than)g(a)g(function)i(sp)q(eci\014c)g(to)164 1244
y(bu\013er)c(descriptors.)28 b(As)17 b(result,)h(I)g(ga)o(v)o(e)f(up)h(on)f
(the)h(size)g(parameter.)26 b(This)18 b(ma)o(y)f(not)g(b)q(e)164
1301 y(suc)o(h)k(a)g(loss:)32 b(it)21 b(is)g(not)g(clear)h(that)e(sp)q
(ecifying)j(a)d(maxim)o(um)h(length)h(at)e(bu\013er)h(ob)s(ject)164
1357 y(creation)h(is)g(useful,)h(since)g(indices)g(of)e(arbitrary)g(size)i
(ma)o(y)d(need)j(to)d(b)q(e)j(stored)d(in)j(the)164 1413 y(ob)s(ject.)164
1724 y Fi(1.6.1)55 b(Data)19 b(Con)n(v)n(ersion)164 1816 y
Fl(The)d(t)o(yp)q(es)g(and)h(the)f(lo)q(cations)h(of)g(the)f(en)o(tries)f
(used)h(to)h(create)e(a)i(message)f(is)g(solely)164 1876 y(determined)f(from)
i(the)g(information)g(in)g(the)h(bu\013er)g(descriptor,)f(using)h(the)g
(storage)164 1937 y(asso)q(ciation)g(rules)e(sp)q(eci\014ed)g(b)o(y)g(the)g
(host)i(language)f(and)h(its)e(implem)o(en)n(tation;)e(the)164
1997 y(t)o(yp)q(e)22 b(and)h(the)g(lo)q(cations)g(of)g(these)g(en)o(tries)e
(do)i(not)h(dep)q(end)e(on)i(the)e(declaration)164 2057 y(for)g(the)g
(corresp)q(onding)g(v)m(ariables)g(in)g(the)f(calling)g(program.)38
b(It)21 b(is)h(not)g(required)164 2117 y(that)h(the)f(data)h(t)o(yp)q(es)f
(sp)q(eci\014ed)f(in)h(a)h(bu\013er)g(descriptor)e(matc)o(h)g(the)h(data)h(t)
o(yp)q(es)164 2177 y(of)h(the)f(corresp)q(onding)i(elemen)o(ts)20
b(in)j(the)h(host)g(program.)43 b(Ho)o(w)o(ev)o(er,)23 b(in)g(case)h(of)164
2238 y(mismatc)o(hes,)c(the)i(corresp)q(ondence)g(b)q(et)o(w)o(een)f(en)o
(tries)g(in)h(the)g(host)g(program)g(and)164 2298 y(en)o(tries)10
b(in)g(a)h(message)f(created)h(with)f(the)h(bu\013er)g(descriptor)g(ma)o(y)e
(b)q(e)i(implem)o(en)o(tati)o(on)164 2358 y(dep)q(enden)o(t.)34
b(No)20 b(data)h(con)o(v)o(ersion)f(o)q(ccurs)h(when)g(data)g(is)f(mo)o(v)o
(ed)f(from)g(a)i(sender)164 2418 y(bu\013er)c(in)o(to)e(a)i(message.)949
2599 y(17)p eop
%%Page: 18 18
bop 237 307 a Fl(Consider)17 b(the)f(follo)o(wing)g(fragmen)o(t)f(of)h(F)l
(ortran)h(co)q(de)164 421 y Fg(REAL)24 b(A\(100\))164 482 y(INTEGER)f(BH)164
542 y(...)164 602 y(CALL)h(MPI_CREATE)o(\(BH)o(,)f(MPI_BUFFE)o(R,)f
(MPI_PERSIST)o(EN)o(T\))164 662 y(CALL)i(MPI_ADD_BL)o(OCK)e(\(BH,)i(A\(1\),)g
(1,)h(MPI_REAL\))164 722 y(CALL)f(MPI_ADD_BL)o(OCK)e(\(BH,)i(A\(2\),)g(1,)h
(MPI_INT\))164 782 y(CALL)f(MPI_ADD_BL)o(OCK)e(\(BH,)i(A\(3\),)g(1,)h
(MPI_LOGICA)o(L\))164 843 y(CALL)f(MPI_ADD_BL)o(OCK)e(\(BH,)i(A\(4\),)g(1,)h
(MPI_COMPLE)o(X\))164 903 y(CALL)f(MPI_ADD_BL)o(OCK)e(\(BH,)i(A\(6\),)g(1,)h
(MPI_DOUBLE)o(\))164 963 y(CALL)f(MPI_ADD_BL)o(OCK)o(\(BH)o(,)f(A\(8\),)g(4,)
i(MPI_CHAR\))237 1077 y Fl(A)17 b(message)g(created)g(from)f(this)h(bu\013er)
h(will)f(consist)g(of)h(a)g(sequence)e(con)o(taining)164 1137
y(one)k(real,)f(one)h(in)o(teger,)f(one)h(logical,)f(one)h(complex,)e(one)i
(double,)g(and)g(four)g(c)o(har-)164 1198 y(acters.)31 b(No)19
b(data)i(con)o(v)o(ersion)d(o)q(ccurs)i(when)g(v)m(alues)f(are)h(copied)f
(from)f(the)h(sender)164 1258 y(bu\013er)e(to)g(the)f(message.)22
b(Th)o(us,)16 b(the)h(\014rst)g(en)o(try)e(in)i(the)f(message)g(is)g(a)h
(real)g(n)o(um)o(b)q(er)164 1318 y(equal)g(to)h Fg(A\(1\))p
Fl(;)f(the)h(second)g(en)o(try)f(is)g(an)i(in)o(teger)d(n)o(um)o(b)q(er)g
(that)j(happ)q(ens)g(to)f(ha)o(v)o(e)164 1378 y(the)13 b(same)f(binary)g
(represen)o(tation)h(as)g Fg(A\(2\))p Fl(;)g(the)f(third)h(en)o(try)f(is)h(a)
g(logical)g(v)m(alue)f(that)164 1438 y(happ)q(ens)k(to)f(ha)o(v)o(e)g(the)f
(same)g(binary)h(represen)o(tation)g(as)g Fg(A\(3\))p Fl(;)f(the)h(fourth)g
(en)o(try)f(in)164 1499 y(a)g(complex)e(n)o(um)o(b)q(er)g(with)h(a)i(binary)e
(represen)o(tation)g(iden)o(tical)f(to)j Fg(A\(4\),)23 b(A\(5\))p
Fl(;)13 b(the)164 1559 y(\014fth)k(en)o(try)f(is)h(a)g(double)g(precision)f
(v)m(alue)h(with)f(a)i(binary)e(represen)o(tation)h(iden)o(tical)164
1619 y(to)j Fg(A\(6\),)j(A\(7\))p Fl(;)c(and)h(if)f(w)o(ords)h(ha)o(v)o(e)f
(four)g(b)o(ytes)g(then)g(the)g(last)h(four)g(en)o(tries)e(are)164
1679 y(b)o(ytes)f(that)g(mak)o(e)f(the)h(binary)g(represen)o(tation)g(of)h
Fg(A\(8\))p Fl(,)d(in)i(the)h(b)o(yte)e(order)h(of)h(the)164
1739 y(executing)d(mac)o(hine.)237 1800 y(The)f(corresp)q(ondence)g(b)q(et)o
(w)o(een)g(the)g(\014rst)g(sev)o(en)f(en)o(tries)g(of)i(the)e(arra)o(y)i
Fg(A)e Fl(and)i(the)164 1860 y(\014rst)g(\014v)o(e)g(en)o(tries)f(of)h(the)g
(message)g(created)f(from)g(this)h(bu\013er)h(is)f(determined)d(b)o(y)j(the)
164 1920 y(rules)k(of)h(F)l(ortran)g(77)g(on)g(storage)h(asso)q(ciation:)29
b(Eac)o(h)19 b(v)m(ariable)g(of)h(t)o(yp)q(e)f Fg(INTEGER)p
Fl(,)164 1980 y Fg(REAL)p Fl(,)11 b(or)j Fg(LOGICAL)c Fl(o)q(ccup)o(y)j(one)g
Fh(numeric)i(stor)n(age)g(unit)p Fl(;)f(a)f(v)m(ariable)g(of)h(t)o(yp)q(e)e
Fg(DOUBLE)164 2040 y Fl(or)21 b Fg(COMPLEX)c Fl(o)q(ccup)o(y)j(t)o(w)o(o)g(n)
o(umeric)e(storage)j(units.)33 b(Th)o(us,)21 b(the)f(same)f(corresp)q(on-)164
2100 y(dence)c(will)f(hold)i(for)g(an)o(y)g(implem)o(e)o(n)o(tation.)i(Ho)o
(w)o(ev)o(er,)c(di\013eren)o(t)h(implem)o(en)n(tations)164
2161 y(ma)o(y)20 b(ha)o(v)o(e)g(di\013eren)o(t)g(binary)i(enco)q(dings)f(of)h
(in)o(teger,)f(real)g(and)h(logical)e(v)m(alues,)i(so)164 2221
y(that)17 b(the)f(actual)g(v)m(alues)g(transferred)g(b)o(y)g(the)g(message)g
(ma)o(y)e(di\013er.)237 2281 y(The)21 b(corresp)q(ondence)h(b)q(et)o(w)o(een)
e(the)h(en)o(try)f Fg(A\(8\))g Fl(of)h(the)g(arra)o(y)l(,)h(and)g(the)f(last)
164 2341 y(four)j(c)o(haracter)g(en)o(tries)e(in)i(the)f(message)g(is)h
(implem)o(en)o(tation)d(dep)q(enden)o(t,)k(since)164 2401 y(the)19
b(F)l(ortran)i(language)f(do)q(es)h(not)f(sp)q(ecify)f(a)h(corresp)q(ondence)
g(b)q(et)o(w)o(een)e(c)o(haracter)164 2462 y(storage)j(units)g(and)g(n)o
(umeric)d(storage)j(units)f(\(an)h(arra)o(y)g(of)g(c)o(haracters)f(cannot)h
(b)q(e)949 2599 y(18)p eop
%%Page: 19 19
bop 164 307 a Fl(equiv)m(alenced)16 b(with)i(an)g(arra)o(y)g(of)g(in)o
(tegers\).)26 b(Di\013eren)o(t)17 b(results)h(ma)o(y)e(o)q(ccur)i(in)g(big-)
164 367 y(endians)e(or)h(small-endians)e(mac)o(hines,)f(or)i(in)g(32)h(bit)f
(or)h(64)g(bit)f(mac)o(hines.)237 428 y(The)i(same)e(holds,)i(symmetri)o
(call)o(y)l(,)c(when)k(a)g(message)e(is)i(receiv)o(ed.)k(En)o(tries)17
b(are)164 488 y(mo)o(v)o(ed)i(from)g(the)i(message)f(in)o(to)h(the)f(receiv)o
(er)f(memory)f(according)j(to)g(the)g(infor-)164 548 y(mation)h(pro)o(vided)g
(b)o(y)g(the)g(bu\013er)i(descriptor,)f(with)g(no)g(regard)g(to)g(the)g(w)o
(a)o(y)f(the)164 608 y(corresp)q(onding)17 b(v)m(ariables)f(are)h(declared)e
(in)h(the)g(receiving)f(program.)237 668 y(When)c(data)h(is)f(mo)o(v)o(ed)e
(in)h(a)i(homogeneous)f(en)o(vironmen)o(t)d(b)q(et)o(w)o(een)i(no)q(des)i(ha)
o(ving)164 729 y(the)21 b(same)f(arc)o(hitecture,)g(then)h(no)g(data)h(con)o
(v)o(ersion)e(o)q(ccur)h(at)h(an)o(y)f(p)q(oin)o(t)g(during)164
789 y(data)16 b(transfer.)21 b(Assume,)13 b(in)i(the)g(previous)g(example,)d
(that)k(an)f(iden)o(tically)e(declared)164 849 y(bu\013er)j(descriptor)g(is)f
(used)h(to)g(receiv)o(e)e(data)i(in)o(to)g(an)g(iden)o(tically)e(declared)h
(arra)o(y)h(at)164 909 y(the)g(receiving)e(pro)q(cess.)21 b(Then,)16
b(when)g(these)f(t)o(w)o(o)h(no)q(des)g(comm)o(unicate,)c(the)k(v)m(alues)164
969 y(in)g(the)h(\014rst)g(eigh)o(t)f(en)o(tries)f(of)i(arra)o(y)g
Fg(A)f Fl(of)h(the)g(sender)f(will)g(b)q(e)h(copied)f(in)o(to)g(the)h
(\014rst)164 1029 y(eigh)o(t)e(en)o(tries)f(of)i(arra)o(y)g
Fg(A)f Fl(at)h(the)f(receiv)o(er)e(\(assuming)i(that)h(reals)f(o)q(ccup)o(y)h
(the)f(same)164 1090 y(storage)21 b(as)g(four)f(b)o(ytes\).)33
b(In)20 b(particular,)g(in)g(a)g(homogeneous)h(en)o(vironmen)o(t,)c(it)j(is)
164 1150 y(p)q(ossible)c(to)h(comm)o(unic)o(ate)d(using)i(only)g(c)o
(haracter)g(t)o(yp)q(ed)g(messages.)237 1210 y(When)22 b(data)g(is)f(mo)o(v)o
(ed)e(in)o(to)i(a)h(heterogeneous)g(en)o(vironmen)o(t)d(b)q(et)o(w)o(een)h
(no)q(des)164 1270 y(ha)o(ving)14 b(distinct)f(arc)o(hitectures,)g(data)i
(con)o(v)o(ersion)e(ma)o(y)g(o)q(ccur)h(during)g(the)g(transfer:)164
1330 y(Eac)o(h)21 b(en)o(try)e(is)i(con)o(v)o(erted)e(from)h(the)g(data)h
(represen)o(tation)f(used)h(on)g(the)g(sending)164 1391 y(no)q(de)c(to)f(the)
g(data)i(represen)o(tation)d(used)i(in)e(the)h(receiving)f(no)q(de.)237
1451 y(Consider)i(the)f(follo)o(wing)g(fragmen)o(t)f(of)h(F)l(ortran)h(co)q
(de.)164 1565 y Fg(REAL)24 b(X,)h(Y)164 1625 y(CHARACTER)d(\(4\))j(Z)164
1685 y(INTEGER)e(BH)164 1746 y(...)164 1806 y(CALL)h(MPI_CREATE)o(\(BH)o(,)f
(MPI_BUFFE)o(R,)f(MPI_PERSIST)o(EN)o(T\))164 1866 y(CALL)i(MPI_ADD_BL)o(OCK)e
(\(BH,)i(X,)h(1,)g(MPI_REAL\))164 1926 y(CALL)f(MPI_ADD_BL)o(OCK)e(\(BH,)i
(Y,)h(4,)g(MPI_CHAR\))164 1986 y(CALL)f(MPI_ADD_BL)o(OCK)e(\(BH,)i(Z,)h(4,)g
(MPI_CHAR\))237 2100 y Fl(Assume)11 b(that)i(the)g(same)e(arra)o(ys)i
Fg(X,)25 b(Y,)g(Z)12 b Fl(and)h(bu\013er)g(handle)g Fg(BH)f
Fl(are)g(created)h(at)164 2161 y(t)o(w)o(o)g(pro)q(cesses)h(A)e(and)i(B;)e
(this)h(handle)g(is)g(used)g(b)o(y)g(A)f(to)i(create)e(and)i(send)f(a)h
(message)164 2221 y(for)e(B,)f(b)o(y)h(B)f(to)i(receiv)o(e)c(this)j(message.)
19 b(F)l(urther)12 b(assume)f(that)i(b)q(oth)g(A)e(and)i(B)e(run)h(on)164
2281 y(distinct)g(no)q(des,)j(with)e(p)q(ossibly)g(di\013eren)o(t)g(32)h(bit)
f(arc)o(hitectures.)18 b(Then)c Fg(X)f Fl(at)g(pro)q(cess)164
2341 y(B)19 b(is)g(assigned)h(the)g(v)m(alue)f(of)g Fg(X)h
Fl(at)f(pro)q(cess)h(A)f(\(up)h(to)g(rounding)g(errors)g(that)f(ma)o(y)164
2401 y(o)q(ccur)12 b(during)g(con)o(v)o(ersion\);)f Fg(Z)h
Fl(on)g(pro)q(cess)g(B)f(is)h(assigned)g(the)f(c)o(haracter)g(string)h(v)m
(alue)164 2462 y(of)18 b Fg(Z)f Fl(on)h(pro)q(cess)g(A;)f(if)f(b)q(oth)j(no)q
(des)f(use)g(ASCI)q(I)f(enco)q(ding,)g(then)h(no)g(con)o(v)o(ersion)e(is)949
2599 y(19)p eop
%%Page: 20 20
bop 164 307 a Fl(required)14 b(for)h(the)g(c)o(haracters.)21
b(On)15 b(the)g(other)h(hand,)f(v)m(ariable)g Fg(Y)g Fl(on)h(pro)q(cess)g(B)e
(ma)o(y)164 367 y(b)q(e)19 b(allo)q(cated)g(a)g(v)m(alue)f(that)h(di\013ers)g
(from)f(the)g(v)m(alue)h(of)g(v)m(ariable)f Fg(Y)g Fl(on)h(pro)q(cess)h(A.)
164 428 y(This)12 b(ma)o(y)f(o)q(ccur)h(if)g(the)g(t)o(w)o(o)g(no)q(des)h
(use)f(a)h(di\013eren)o(t)e(b)o(yte)g(sequence)g(\(little-endian)g(vs)164
488 y(big-endian\),)i(or)g(use)f(a)h(di\013eren)o(t)e(binary)i(represen)o
(tation)e(for)i(reals)f(\(IEEE)h(vs)f(HEX\).)164 548 y(Th)o(us,)18
b(in)f(order)h(to)g(ensure)g(correct)f(execution)g(in)g(a)h(heterogeneous)g
(en)o(vironmen)o(t,)164 608 y(it)e(is)g(imp)q(ortan)o(t)g(that)g(the)h(t)o
(yp)q(es)f(of)g(v)m(alues)h(in)f(a)h(message)e(matc)o(h)g(the)h(t)o(yp)q(es)g
(of)h(the)164 668 y(corresp)q(onding)g(v)m(alues)f(in)g(the)g(sending)h(and)g
(in)f(the)g(receiving)e(program.)164 813 y Fm(1.7)70 b(Receiv)n(e)20
b(Criteria)164 905 y Fl(The)15 b(selection)f(of)h(a)g(message)f(b)o(y)h(a)g
(receiv)o(e)e(op)q(eration)i(is)g(done)g(uniquely)f(according)164
965 y(to)23 b(the)g(v)m(alue)g(of)g(the)g(message)f(en)o(v)o(elop)q(e.)40
b(The)22 b(receiv)o(e)f(op)q(eration)j(sp)q(eci\014es)e(an)164
1025 y Fi(en)n(v)n(elop)r(e)k(pattern)p Fl(;)g(a)d(message)f(can)h(b)q(e)h
(receiv)o(ed)c(b)o(y)j(that)g(receiv)o(e)e(op)q(eration)164
1086 y(only)c(if)f(its)h(en)o(v)o(elop)q(e)f(matc)o(hes)f(that)j(pattern.)24
b(A)17 b(pattern)g(sp)q(eci\014es)g(v)m(alues)g(for)g(the)164
1146 y Fg(source)p Fl(,)h Fg(tag)h Fl(and)h Fg(context)d Fl(\014elds)j(of)g
(the)g(message)f(en)o(v)o(elop)q(e.)30 b(In)20 b(addition,)g(the)164
1206 y(v)m(alue)15 b(for)h(the)f Fg(dest)e Fl(\014eld)i(is)g(set,)g
(implicitl)o(y)l(,)d(to)k(b)q(e)f(equal)g(to)h(the)f(receiving)e(pro)q(cess)
164 1266 y(id.)38 b(The)22 b(receiv)o(er)e(ma)o(y)g(sp)q(ecify)i(a)g
Fi(DONTCARE)g Fl(v)m(alue)g(for)g Fg(source)p Fl(,)f(or)h Fg(tag)p
Fl(,)164 1326 y(indicating)e(that)i(an)o(y)e(source)h(and/or)h(tag)g(are)f
(acceptable.)34 b(It)21 b(cannot)g(sp)q(ecify)g(a)164 1387
y(DONTCARE)d(v)m(alue)h(for)f Fg(context)e Fl(or)j Fg(dest)p
Fl(.)26 b(Th)o(us,)19 b(a)g(message)f(can)h(b)q(e)f(receiv)o(ed)164
1447 y(b)o(y)k(a)g(receiv)o(e)e(op)q(eration)j(only)e(if)h(it)f(is)h
(addressed)h(to)f(the)g(receiving)e(task,)k(has)f(a)164 1507
y(matc)o(hing)18 b(con)o(text,)h(has)h(matc)o(hing)e(source)h(unless)h
(source=DONTCARE)f(in)g(the)164 1567 y(pattern,)d(and)h(has)g(a)f(matc)o
(hing)f(tag)i(unless)f(tag=DONTCARE)h(in)f(the)g(pattern.)237
1627 y(The)k(length)f(of)h(the)g(receiv)o(ed)d(message)i(m)o(ust)f(b)q(e)i
(less)g(or)g(equal)f(the)g(length)h(of)164 1688 y(the)d(receiv)o(e)f
(bu\013er.)26 b(I.e.,)16 b(all)h(incoming)f(data)i(m)o(ust)f(\014t,)g
(without)h(truncation,)g(in)o(to)164 1748 y(the)f(receiv)o(e)f(bu\013er.)25
b(It)17 b(is)h(erroneous)g(to)g(receiv)o(e)d(a)j(message)f(whic)o(h)g(length)
g(exceed)164 1808 y(the)e(receiv)o(e)d(bu\013er,)j(and)g(the)g(outcome)e(of)j
(program)e(where)h(this)f(o)q(ccurs)h(is)g(undeter-)164 1868
y(mined.)164 2013 y Fm(1.8)70 b(Comm)n(unicati)o(on)21 b(Mo)r(de)164
2105 y Fl(A)16 b(sending)g(op)q(eration)h(can)g(o)q(ccur)f(in)g(one)g(of)h(t)
o(w)o(o)f(mo)q(des:)164 2207 y Fi(REGULAR)24 b Fl(The)e(send)g(ma)o(y)f
(start)i(whether)f(or)g(not)h(a)g(matc)o(hing)d(receiv)o(e)g(has)286
2267 y(b)q(een)c(p)q(osted.)164 2369 y Fi(READ)n(Y)25 b Fl(The)16
b(send)h(ma)o(y)d(start)j(only)f(if)g(a)g(matc)o(hing)f(receiv)o(e)f(has)j(b)
q(een)f(p)q(osted.)949 2599 y(20)p eop
%%Page: 21 21
bop 237 307 a Fl(A)21 b Fi(ready)k(send)c Fl(can)h(start)g(only)g(if)f(a)h
(matc)o(hing)e(receiv)o(e)g(is)h(already)h(p)q(osted;)164 367
y(otherwise)17 b(the)g(op)q(eration)i(is)e(erroneous)h(and)g(its)f(outcome)g
(is)g(unde\014ned.)25 b(In)17 b(some)164 428 y(systems,)12
b(this)g(will)g(allo)o(w)h(to)g(optimize)d(comm)o(unic)o(ation)h(and)i(a)o(v)
o(oid)f(a)h(hand-shaking)164 488 y(op)q(eration)k(that)g(is)f(otherwise)g
(required.)164 668 y Fk(Discussion:)28 b Fj(I)19 b(deleted)i(the)e(symmetric)
g(ready)g(receiv)o(e.)32 b(Will)21 b(reviv)o(e)f(it)f(if)g(there)h(is)f(a)164
729 y(requiremen)o(t)d(for)e(it.)164 993 y Fm(1.9)70 b(Comm)n(unicati)o(on)21
b(Ob)t(jects)164 1086 y Fl(An)13 b(opaque)i(comm)o(uni)o(cation)c(ob)s(ject)i
(iden)o(ti\014es)g(v)m(arious)h(prop)q(erties)g(of)g(a)g(comm)o(uni-)164
1146 y(cation)j(op)q(eration,)g(suc)o(h)g(as)g(the)g(bu\013er)g(descriptor)g
(that)g(is)g(asso)q(ciated)g(with)g(it,)f(its)164 1206 y(con)o(text,)e(the)g
(tag)h(and)g(destination)f(parameters)g(to)h(b)q(e)f(used)h(for)g(a)g(send,)f
(or)h(the)f(tag)164 1266 y(and)f(source)g(parameters)f(to)h(b)q(e)g(used)g
(for)h(a)f(receiv)o(e.)18 b(In)12 b(addition,)h(this)g(ob)s(ject)f(stores)164
1326 y(information)17 b(ab)q(out)h(the)g(status)g(of)g(the)g(last)f(comm)o
(unication)e(op)q(eration)j(that)g(w)o(as)164 1387 y(p)q(erformed)f(with)g
(this)h(ob)s(ject.)26 b(This)18 b(ob)s(ject)f(is)h(accessed)f(using)i(a)f
(comm)o(unicati)o(on)164 1447 y(handle.)237 1507 y(One)i(can)h(consider)f
(comm)o(uni)o(cation)e(op)q(erations)j(to)g(consist)g(of)f(the)g(follo)o
(wing)164 1567 y(sub)q(op)q(erations:)164 1681 y Fi(INIT\(op)r(eration,)d
(params,)i(handle\))25 b Fl(Pro)q(cess)15 b(pro)o(vides)f(all)f(relev)m(an)o
(t)g(parame-)286 1742 y(ters)18 b(for)g(its)g(participation)g(in)g(the)f
(comm)o(unication)e(op)q(eration)k(\(t)o(yp)q(e)f(of)g(op-)286
1802 y(eration,)e(data)i(bu\013er,)f(tag,)g(participan)o(ts,)f(etc.\).)21
b(An)c(ob)s(ject)f(is)g(created)g(that)286 1862 y(iden)o(ti\014es)f(the)h(op)
q(eration.)164 1964 y Fi(ST)-5 b(AR)g(T\(handle\))26 b Fl(The)16
b(comm)o(unic)o(ation)e(op)q(eration)j(is)f(started)164 2065
y Fi(COMPLETE\(handle\))25 b Fl(The)16 b(comm)o(unication)d(op)q(eration)k
(is)f(completed.)164 2167 y Fi(FREE\(handle\))24 b Fl(The)e(comm)o(unication)
d(ob)s(ject,)j(and)h(asso)q(ciated)g(resources)f(are)286 2227
y(freed.)164 2341 y(Correct)16 b(in)o(v)o(o)q(cation)g(of)g(these)g(sub)q(op)
q(erations)i(is)f(a)f(sequence)f(of)i(the)f(form)520 2451 y
Fi(INIT)i Fl(\()p Fi(ST)-5 b(AR)g(T)20 b(COMPLETE)p Fl(\))1224
2431 y Fb(\003)1263 2451 y Fi(FREE)p Fd(:)949 2599 y Fl(21)p
eop
%%Page: 22 22
bop 164 307 a Fl(I.e.,)10 b(an)i(ob)s(ject)f(needs)h(b)q(e)f(created)h(b)q
(efore)f(comm)o(unicati)o(on)f(o)q(ccurs;)j(it)e(can)g(b)q(e)h(reused)164
367 y(only)h(after)g(the)g(previous)g(use)g(has)h(completed;)d(and)j(it)f
(needs)g(to)g(b)q(e)h(freed)e(ev)o(en)o(tually)164 428 y(\(of)i(course,)g
(one)h(can)f(assume)f(that)i(all)e(ob)s(jects)h(are)g(freed)g(at)g(program)g
(termination,)164 488 y(b)o(y)i(default\).)237 548 y(The)21
b(ab)q(o)o(v)o(e)f(scenario)g(p)q(ertains)h(to)g Fh(p)n(ersistent)g
Fl(ob)s(jects.)33 b(One)20 b(can)h(also)g(create)164 608 y
Fh(ephemer)n(al)15 b Fl(ob)s(jects.)20 b(Suc)o(h)14 b(ob)s(ject)f(p)q
(ersists)i(only)f(un)o(til)f(the)h(comm)o(uni)o(cation)e(op)q(era-)164
668 y(tion)j(is)g(completed,)d(at)k(whic)o(h)e(p)q(oin)o(t)h(it)g(is)g
(destro)o(y)o(ed.)20 b(Th)o(us,)15 b(correct)f(in)o(v)o(o)q(cation)h(of)164
729 y(sub)q(op)q(erations)j(with)e(an)h(ephemeral)d(ob)s(ject)i(is)g
Fi(INIT)i(ST)-5 b(AR)g(T)19 b(COMPLETE)p Fl(.)237 789 y(A)i(user)g(ma)o(y)e
(directly)h(in)o(v)o(ok)o(es)f(these)i(sub)q(op)q(erations.)37
b(This)22 b(w)o(ould)f(allo)o(w)g(to)164 849 y(amortize)16
b(the)i(o)o(v)o(erhead)f(of)h(setting)g(up)g(a)g(comm)o(unication)d(o)o(v)o
(er)i(man)o(y)f(successiv)o(e)164 909 y(uses)23 b(of)h(the)e(same)g(handle,)i
(and)g(allo)o(ws)f(to)g(o)o(v)o(erlap)g(comm)o(uni)o(cation)d(and)k(com-)164
969 y(putation.)29 b(Simpler)16 b(comm)o(unication)g(op)q(erations)k(com)o
(bine)c(sev)o(eral)i(of)h(these)f(sub-)164 1029 y(op)q(erations)24
b(in)o(to)e(one)g(op)q(eration,)j(th)o(us)d(simplifying)e(the)i(use)g(of)h
(comm)o(unicati)o(on)164 1090 y(primitiv)o(e)o(s.)f(Th)o(us,)c(one)f(only)h
(needs)f(to)h(sp)q(ecify)e(precisely)g(the)h(seman)o(tics)f(of)h(these)164
1150 y(sub)q(op)q(erations)i(in)e(order)g(to)h(sp)q(ecify)e(the)h(seman)o
(tics)f(of)h(MPI)g(p)q(oin)o(t)g(to)h(p)q(oin)o(t)f(com-)164
1210 y(m)o(unication)d(op)q(erations.)237 1270 y(W)l(e)h(sa)o(y)f(that)h(a)g
(comm)o(unication)d(op)q(eration)j(\(send)g(or)g(receiv)o(e\))e(is)h
Fi(p)r(osted)g Fl(once)164 1330 y(a)23 b Fi(start)g Fl(sub)q(op)q(eration)i
(w)o(as)f(in)o(v)o(ok)o(ed;)g(the)f(op)q(eration)h(is)f Fi(completed)f
Fl(once)h(the)164 1391 y Fi(complete)17 b Fl(sub)q(op)q(eration)j(completes.)
k(A)17 b(send)h(and)h(a)f(receiv)o(e)e(op)q(eration)j Fi(matc)n(h)164
1451 y Fl(if)d(the)h(receiv)o(e)d(pattern)j(sp)q(eci\014ed)g(b)o(y)f(the)h
(receiv)o(e)d(matc)o(hes)i(the)g(message)g(en)o(v)o(elop)q(e)164
1511 y(created)g(b)o(y)f(the)h(send.)164 1640 y Fi(1.9.1)55
b(Comm)n(unication)21 b(Ob)s(ject)d(Creation)164 1733 y Fl(An)g(ob)s(ject)g
(for)g(a)h(send)f(op)q(eration)h(is)f(created)g(b)o(y)g(a)g(call)g(to)g
Fi(MPI)p 1452 1733 17 2 v 21 w(INIT)p 1598 1733 V 20 w(SEND)p
Fl(.)164 1793 y(A)g(call)g(to)g Fi(MPI)p 487 1793 V 21 w(INIT)p
633 1793 V 20 w(RECV)h Fl(is)f(similarly)d(used)k(for)g(creating)f(an)h(ob)s
(ject)f(for)h(a)164 1853 y(receiv)o(e)8 b(op)q(eration.)21
b(The)11 b(creation)f(of)h(a)g(comm)o(unication)d(ob)s(ject)i(is)h(a)g(lo)q
(cal)g(op)q(eration)164 1913 y(that)17 b(need)e(not)i(in)o(v)o(olv)o(e)d
(comm)o(unicati)o(on)g(with)i(a)h(remote)e(pro)q(cess.)164
2034 y Fi(MPI)p 279 2034 V 20 w(INIT)p 424 2034 V 20 w(SEND)g(\(handle,)g
(bu\013er)p 972 2034 V 20 w(handle,)h(dest,)f(tag,)g(con)n(text,)f(mo)r(de,)
164 2094 y(p)r(ersistence\))237 2214 y Fl(Creates)j(a)f(send)h(comm)o(uni)o
(cation)d(ob)s(ject.)20 b(P)o(arameters)15 b(are)164 2313 y
Fi(OUT)k(handle)25 b Fl(message)19 b(handle.)31 b(The)20 b(handle)f(should)i
(not)f(b)q(e)f(asso)q(ciated)i(with)286 2373 y(an)o(y)16 b(ob)s(ject)g(b)q
(efore)g(the)g(call.)164 2474 y Fi(IN)i(bu\013er)p 394 2474
V 20 w(handle)25 b Fl(handle)16 b(to)h(send)f(bu\013er)h(descriptor)949
2599 y(22)p eop
%%Page: 23 23
bop 164 307 a Fi(IN)18 b(dest)24 b Fl(rank)17 b(in)f(con)o(text)f(of)i
(destination)f(\(in)o(teger\))164 409 y Fi(IN)i(tag)25 b Fl(user)16
b(tag)h(for)g(messages)e(sen)o(t)h(with)g(this)g(handle)h(\(in)o(teger\))164
511 y Fi(IN)h(con)n(text)24 b Fl(handle)16 b(to)h(con)o(text)e(of)i(messages)
e(sen)o(t)h(with)g(this)h(handle)164 612 y Fi(IN)h(mo)r(de)24
b Fl(send)11 b(mo)q(de)f(\(state)h(t)o(yp)q(e,)g(with)f(t)o(w)o(o)h(v)m
(alues:)19 b Fg(MPI)p 1324 612 16 2 v 17 w(REGULAR)8 b Fl(and)k
Fg(MPI)p 1699 612 V 17 w(READY)p Fl(\))164 714 y Fi(IN)18 b(p)r(ersistence)24
b Fl(handle)10 b(p)q(ersistence)g(\(state)h(t)o(yp)q(e,)g(with)g(t)o(w)o(o)g
(v)m(alues:)18 b Fg(MPI)p 1623 714 V 18 w(PERSISTEN)o(T)286
774 y Fl(and)f Fg(MPI)p 462 774 V 17 w(EPHEMERAL)p Fl(\))164
936 y Fi(MPI)p 279 936 17 2 v 20 w(INIT)p 424 936 V 20 w(RECV)c(\(handle,)h
(bu\013er)p 975 936 V 19 w(handle,)g(source,)f(tag,)h(con)n(text,)e(p)r(er-)
164 996 y(sistence\))237 1117 y Fl(Create)k(a)h(receiv)o(e)d(handle.)21
b(P)o(arameters)15 b(are)164 1218 y Fi(OUT)k(handle)25 b Fl(message)19
b(handle.)31 b(The)20 b(handle)f(should)i(not)f(b)q(e)f(asso)q(ciated)i(with)
286 1279 y(an)o(y)16 b(ob)s(ject)g(b)q(efore)g(the)g(call.)164
1380 y Fi(IN)i(bu\013er)p 394 1380 V 20 w(handle)25 b Fl(handle)16
b(to)h(receiv)o(e)d(bu\013er)i(descriptor.)164 1482 y Fi(IN)i(source)24
b Fl(rank)17 b(in)f(con)o(text)f(of)i(source,)f(or)g(DONTCARE)g(\(in)o
(teger\).)164 1584 y Fi(IN)i(tag)25 b Fl(user)d(tag)h(for)f(messages)g
(receiv)o(ed)e(with)i(this)g(handle,)h(or)f(DONTCARE)286 1644
y(\(in)o(teger\).)164 1746 y Fi(IN)c(con)n(text)24 b Fl(handle)16
b(to)h(con)o(text)e(of)i(messages)e(receiv)o(ed)f(with)j(this)f(handle.)164
1847 y Fi(IN)i(p)r(ersistence)24 b Fl(handle)10 b(p)q(ersistence)g(\(state)h
(t)o(yp)q(e,)g(with)g(t)o(w)o(o)g(v)m(alues:)18 b Fg(MPI)p
1623 1847 16 2 v 18 w(PERSISTEN)o(T)286 1907 y Fl(and)f Fg(MPI)p
462 1907 V 17 w(EPHEMERAL)p Fl(\))237 2009 y(See)f(Section)g(1.5.2)g(for)h(a)
f(discussion)h(of)f(source,)g(tag)h(and)g(con)o(text.)164 2178
y Fk(Discussion:)48 b Fj(I)18 b(ha)o(v)o(e)f(not)f(included)k(prop)q(osals)e
(for)e(partially)i(sp)q(eci\014ed)i(message)d(han-)164 2235
y(dles,)f(that)e(some)h(p)q(eoples)i(seem)e(to)g(desire.)237
2291 y(I)h(ha)o(v)o(e)e(merged)i(all)g(handle)g(setup)g(in)o(to)f(one)g
(call.)949 2599 y Fl(23)p eop
%%Page: 24 24
bop 164 307 a Fi(1.9.2)55 b(Comm)n(unication)21 b(Start)164
460 y(MPI)p 279 460 17 2 v 20 w(ST)-5 b(AR)g(T\(handle\))164
561 y(IN)18 b(handle)26 b Fl(comm)o(uni)o(cation)14 b(handle)237
663 y(The)j Fg(MPI)p 419 663 16 2 v 17 w(START)f Fl(function)g(starts)i(the)f
(execution)e(of)j(a)f(comm)o(unic)o(ation)e(op)q(era-)164 723
y(tion)k(\(send)h(or)f(receiv)o(e\).)28 b(A)19 b(sender)g(should)h(not)g(up)q
(date)g(the)f(send)h(bu\013er)f(after)h(a)164 784 y(send)e(op)q(eration)g
(has)h(started)f(and)g(un)o(til)f(it)g(is)g(completed.)24 b(A)17
b(receiv)o(er)e(should)j(not)164 844 y(access)f(the)f(receiv)o(e)f(bu\013er)i
(after)f(a)h(receiv)o(e)e(op)q(eration)i(w)o(as)h(started)f(and)g(un)o(til)f
(it)g(is)164 904 y(completed.)21 b(A)16 b(program)h(that)g(do)q(es)h(not)f
(satisfy)g(this)g(condition)f(is)h(erroneous)g(and)164 964
y(its)f(outcome)f(is)h(undetermined.)164 1094 y Fi(1.9.3)55
b(Comm)n(unication)21 b(Completion)164 1247 y(MPI)p 279 1247
17 2 v 20 w(W)-6 b(AIT)19 b(\()f(handle,)h(return)p 864 1247
V 20 w(status)p 1030 1247 V 20 w(handle\))164 1348 y(IN)f(handle)26
b Fl(comm)o(uni)o(cation)14 b(handle)164 1450 y Fi(OUT)19 b(return)p
466 1450 V 19 w(handle)26 b Fl(handle)16 b(that)g(is)g(asso)q(ciated)i(with)e
(return)g(status)h(ob)s(ject.)237 1552 y(A)23 b(call)f(to)h
Fi(MPI)p 574 1552 V 21 w(W)-6 b(AIT)23 b Fl(returns)g(when)g(the)g(send)g(op)
q(eration)h(iden)o(ti\014ed)d(b)o(y)164 1612 y Fg(handle)16
b Fl(is)i(complete.)24 b(The)18 b(completion)e(of)i(a)g(send)h(op)q(eration)f
(indicates)g(that)g(the)164 1672 y(sender)h(is)g(no)o(w)h(free)e(to)i(up)q
(date)f(the)g(lo)q(cations)h(in)f(the)g(send)g(bu\013er,)h(or)g(an)o(y)f
(other)164 1732 y(lo)q(cation)e(that)f(can)h(b)q(e)f(referenced)f(b)o(y)h
(the)g(send)g(op)q(eration.)23 b(Ho)o(w)o(ev)o(er,)14 b(it)h(do)q(es)i(not)
164 1792 y(indicate)11 b(that)i(the)f(message)g(has)h(b)q(een)f(receiv)o(ed;)
f(rather)h(it)g(ma)o(y)f(ha)o(v)o(e)h(b)q(een)g(bu\013ered)164
1853 y(b)o(y)k(the)g(comm)o(uni)o(cation)e(subsystem.)237 1913
y(The)k(completion)e(of)h(a)i(receiv)o(e)c(op)q(eration)j(indicates)f(that)h
(the)g(receiv)o(er)d(is)j(no)o(w)164 1973 y(free)e(to)i(access)f(the)g(lo)q
(cations)h(in)f(the)g(receiv)o(e)e(bu\013er,)i(whic)o(h)g(con)o(tain)g(the)g
(receiv)o(ed)164 2033 y(message,)f(or)i(an)o(y)g(other)f(lo)q(cation)h(that)g
(can)f(b)q(e)h(referenced)e(b)o(y)h(the)g(receiv)o(e)e(op)q(era-)164
2093 y(tion.)21 b(It)16 b(do)q(es)h(not)g(indicate)e(that)i(the)f(matc)o
(hing)e(send)j(op)q(eration)g(has)g(completed.)237 2154 y(The)g(call)e
(returns)i(a)g(handle)f(to)h(an)g(opaque)g(ob)s(ject)f(that)h(con)o(tains)g
(information)164 2214 y(on)g(the)f(completed)e(op)q(eration)j({)g(the)f
Fi(return)i(status)e Fl(ob)s(ject.)164 2334 y Fi(MPI)p 279
2334 V 20 w(ST)-5 b(A)g(TUS)20 b(\(handle,)f(\015ag,)g(return)p
1029 2334 V 19 w(handle\))164 2436 y(IN)f(handle)26 b Fl(comm)o(uni)o(cation)
14 b(handle)949 2599 y(24)p eop
%%Page: 25 25
bop 164 307 a Fi(OUT)19 b(\015ag)25 b Fl(logical)164 409 y
Fi(OUT)19 b(return)p 466 409 17 2 v 19 w(handle)26 b Fl(handle)16
b(that)g(is)g(asso)q(ciated)i(with)e(return)g(status)h(ob)s(ject.)237
511 y(A)h(call)g(to)h Fi(MPI)p 561 511 V 20 w(ST)-5 b(A)g(TUS)20
b Fl(returns)f Fg(flag=true)c Fl(if)j(the)g(op)q(eration)h(iden)o(ti\014ed)
164 571 y(b)o(y)d Fg(handle)f Fl(is)i(complete,)e(In)h(suc)o(h)h(case,)g(the)
g(return)f(handle)h(p)q(oin)o(ts)h(to)f(an)h(opaque)164 631
y(ob)s(ject)h(that)h(con)o(tains)g(information)e(on)j(the)e(completed)e
(information.)31 b(It)19 b(returns)164 691 y Fg(flag=false)o
Fl(,)12 b(otherwise.)21 b(In)14 b(suc)o(h)h(case,)f(the)h(v)m(alue)g(of)g
(the)g(return)f(handle)h(is)g(unde-)164 751 y(\014ned.)237
812 y(Implem)o(en)o(tation)e(notes:)237 872 y(A)g(call)f(to)h
Fg(MPI)p 510 872 16 2 v 17 w(WAIT)f Fl(blo)q(c)o(ks)g(only)h(the)f(executing)
g(thread.)20 b(If)13 b(the)f(executing)g(pro-)164 932 y(cess)h(is)f(m)o
(ultithreaded,)f(then)i(other)g(threads)g(within)g(the)f(pro)q(cess)i(can)f
(b)q(e)g(sc)o(heduled)164 992 y(for)j(execution.)237 1052 y(The)h(use)h(of)f
(a)h(blo)q(c)o(king)f(receiv)o(e)e(op)q(eration)j(\()p Fg(MPI)p
1197 1052 V 17 w(WAIT)p Fl(\))e(allo)o(ws)h(the)g(op)q(erating)164
1112 y(system)k(to)h(desc)o(hedule)f(the)h(blo)q(c)o(k)o(ed)f(thread)i(and)f
(sc)o(hedule)f(another)i(thread)g(for)164 1173 y(execution,)c(if)h(suc)o(h)g
(is)g(a)o(v)m(ailable.)32 b(The)20 b(use)g(of)g(a)h(non)o(blo)q(c)o(king)e
(receiv)o(e)f(op)q(eration)164 1233 y(\()p Fg(MPI)p 264 1233
V 17 w(STATUS)p Fl(\))11 b(allo)o(ws)i(the)f(user)h(to)g(sc)o(hedule)f
(alternativ)o(e)g(activities)f(within)h(a)h(single)164 1293
y(thread)j(of)h(execution.)237 1353 y(The)h(in)o(tended)e(implem)o(en)o
(tation)f(of)j Fg(MPI)p 1027 1353 V 17 w(STATUS)d Fl(is)j(for)g(that)g(op)q
(eration)g(to)g(re-)164 1413 y(turn)e(as)g(so)q(on)h(as)g(p)q(ossible.)k(Ho)o
(w)o(ev)o(er,)14 b(if)h(rep)q(eatedly)g(called)g(for)h(an)g(op)q(eration)g
(that)164 1474 y(is)g(enabled,)f(it)h(m)o(ust)f(ev)o(en)o(tually)f(succeed.)
237 1534 y(The)g(return)f(status)h(ob)s(ject)f(for)g(a)h(send)g(op)q(eration)
g(carries)f(no)h(information.)19 b(The)164 1594 y(return)13
b(status)h(ob)s(ject)f(for)h(a)f(receiv)o(e)e(op)q(eration)j(carries)f
(information)f(on)i(the)f(source,)164 1654 y(tag)h(and)h(length)e(of)h(the)g
(receiv)o(ed)d(message.)20 b(These)14 b(\014elds)f(are)h(required)e(b)q
(ecause)i(the)164 1714 y(receiv)o(e)h(op)q(eration)j(ma)o(y)e(ha)o(v)o(e)h
(sp)q(eci\014ed)g Fg(DONTCARE)e Fl(in)i(either)f(source)i(or)g(tag)g
(\014eld,)164 1775 y(and)f(the)f(message)f(ma)o(y)g(ha)o(v)o(e)g(b)q(een)i
(shorter)f(than)h(the)f(receiv)o(e)e(bu\013er.)164 1895 y Fi(MPI)p
279 1895 17 2 v 20 w(RETURN)p 546 1895 V 20 w(ST)-5 b(A)g(T\()19
b(handle,)g(len,)g(source,)f(tag\))164 1997 y(IN)g(handle)26
b Fl(handle)16 b(to)g(return)g(status)h(ob)s(ject)164 2098
y Fi(OUT)i(len)24 b Fl(di\013erence)15 b(b)q(et)o(w)o(een)h(length)g(of)g
(receiv)o(e)e(bu\013er)i(and)h(length)f(of)g(receiv)o(ed)286
2159 y(message,)24 b(in)f(b)o(ytes.)42 b(Th)o(us,)25 b(the)e(v)m(alue)g
(returned)g(is)g(zero)g(if)g(the)g(receiv)o(ed)286 2219 y(message)11
b(matc)o(hes)g(the)g(the)h(receiv)o(e)e(bu\013er,)j(p)q(ositiv)o(e)e(if)h(it)
f(is)h(shorter)g(\(in)o(teger\).)164 2320 y Fi(OUT)19 b(source)24
b Fl(rank)16 b(of)h(message)e(sender)h(in)g(message)g(con)o(text)f(\(in)o
(teger\).)164 2422 y Fi(OUT)k(tag)24 b Fl(tag)17 b(of)g(receiv)o(ed)d
(message)h(\(in)o(teger\).)949 2599 y(25)p eop
%%Page: 26 26
bop 164 420 a Fk(Discussion:)237 477 y Fj(I)18 b(put)g(the)g(di\013erence)h
(b)q(et)o(w)o(een)f(message)f(bu\013er)h(and)g(message)f(length)h(as)g(the)g
(v)m(alue)164 533 y(returned,)e(rather)f(than)g(length)h(of)g(receiv)o(ed)g
(message,)f(so)h(that)e(it)i(migh)o(t)g(b)q(e)g(easy)f(to)g(test)164
589 y(for)g(exact)f(matc)o(h.)237 650 y(The)f(use)g(of)e(a)i(return)f(status)
f(ob)s(ject,)h(rather)g(than)h(a)f(list)h(of)f(parameters)f(ma)o(y)h
(simplify)164 710 y(the)k(use)g(of)g(MPI)f(routines,)i(if)f(the)g(v)m(alues)h
(stored)e(in)i(the)f(ob)s(ject)f(are)h(seldom)g(c)o(hec)o(k)o(ed.)23
b(A)164 770 y(prede\014ned)17 b(return)e(status)f(ob)s(ject)h(should)h(b)q(e)
g(pro)o(vided,)g(to)e(ease)h(programming.)164 1020 y Fi(1.9.4)55
b(Multiple)20 b(Completions)164 1113 y Fl(It)f(is)g(con)o(v)o(enien)o(t)e(to)
i(b)q(e)g(able)g(to)h(w)o(ait)e(for)i(the)f(completion)e(of)i(an)o(y)g(or)h
(all)e(the)h(op-)164 1173 y(erations)f(in)g(a)g(set,)g(rather)g(than)g(ha)o
(ving)g(to)g(w)o(ait)g(for)g(sp)q(eci\014c)g(message.)25 b(A)17
b(call)h(to)164 1233 y Fg(MPI)p 245 1233 16 2 v 17 w(WAITANY)g
Fl(or)j Fg(MPI)p 604 1233 V 17 w(STATUSANY)c Fl(can)k(b)q(e)f(used)h(to)f(w)o
(ait)h(for)f(the)g(completion)f(of)164 1293 y(one)e(out)g(of)f(sev)o(eral)g
(op)q(erations;)h(a)g(call)f(to)g Fg(MPI)p 1079 1293 V 18 w(WAITALL)e
Fl(can)i(b)q(e)h(used)g(to)f(w)o(ait)h(for)164 1353 y(all)f(p)q(ending)g(op)q
(erations)i(in)e(a)g(list.)164 1474 y Fi(MPI)p 279 1474 17
2 v 20 w(W)-6 b(AIT)h(ANY)20 b(\()e(list)p 710 1474 V 21 w(of)p
776 1474 V 21 w(handles,)h(index,)f(return)p 1338 1474 V 20
w(handle\))237 1594 y Fl(Blo)q(c)o(ks)k(un)o(til)g(one)g(of)h(the)g(op)q
(erations)h(asso)q(ciated)f(with)g(the)f(comm)o(unicati)o(on)164
1654 y(handles)16 b(in)f(the)g(arra)o(y)h(has)g(completed.)j(Returns)d(the)f
(index)g(of)g(that)h(handle)g(in)f(the)164 1715 y(arra)o(y)l(,)h(and)g
(returns)g(the)g(status)g(of)h(that)f(op)q(eration)h(in)e(the)h(ob)s(ject)f
(asso)q(ciated)i(with)164 1775 y(the)f(return)p 384 1775 15
2 v 17 w(handle.)21 b(The)c(parameters)e(are:)164 1889 y Fi(IN)j(list)p
324 1889 17 2 v 22 w(of)p 391 1889 V 20 w(handles)25 b Fl(list)16
b(of)g(handles)h(to)f(comm)o(unication)d(ob)s(jects.)164 1991
y Fi(OUT)19 b(index)24 b Fl(index)16 b(of)g(handle)g(for)h(op)q(eration)g
(that)g(completed)d(\(in)o(teger\).)164 2092 y Fi(OUT)19 b(return)p
466 2092 V 19 w(handle)26 b Fl(handle)19 b(that)g(is)g(asso)q(ciated)i(with)e
(return)g(status)h(ob)s(ject.)286 2153 y(Set)c(to)h(return)f(status)h(of)f
(op)q(eration)h(that)g(completed.)237 2267 y(The)11 b(successful)f(execution)
g(of)h Fg(MPI)p 892 2267 16 2 v 17 w(WAITANY\(lis)o(t)p 1220
2267 V 15 w(of)p 1287 2267 V 18 w(handles,)23 b(index,)g(return)p
1871 2267 V 17 w(handle\))164 2327 y Fl(is)11 b(equiv)m(alen)o(t)e(to)i(the)g
(successful)f(execution)g(of)h Fg(MPI)p 1127 2327 V 17 w(WAIT\(handl)o(e[i)o
(],)22 b(return)p 1710 2327 V 16 w(handle\))p Fl(,)164 2387
y(where)15 b Fg(i)g Fl(is)h(the)f(v)m(alue)g(returned)g(b)o(y)g
Fg(index)f Fl(and)i Fg(handle[i])d Fl(is)i(the)g Fg(i)p Fl(-th)h(handle)f(in)
164 2447 y(the)h(list.)949 2599 y(26)p eop
%%Page: 27 27
bop 237 307 a Fl(If)15 b(more)f(then)h(one)g(op)q(eration)i(is)e(enabled)g
(and)g(can)h(terminate,)d(one)i(is)g(arbitrar-)164 367 y(ily)20
b(c)o(hosen)i(\(sub)s(ject)f(to)g(the)h(restrictions)f(on)h(op)q(eration)g
(termination)e(order,)i(see)164 428 y(Section)16 b(1.13\).)164
548 y Fg(MPI)p 245 548 16 2 v 17 w(WAITANY)23 b(\()j(list)p
623 548 V 17 w(of)p 692 548 V 17 w(handles,)d(index,)g(return)p
1275 548 V 17 w(status)p 1448 548 V 16 w(handle\))164 608 y
Fl(is)241 690 y Fg({MPI_WAIT_)o(RE)o(CV)f(\(handle[1],)g(return_han)o(dle)o
(\);)g(index)i(=)h(0})g(||)g(...)164 750 y(||)241 810 y({MPI_WAIT_)o(RE)o(CV)
d(\(handle[n],)g(return_han)o(dle)o(\);)g(index)i(=)h(n-1})237
892 y Fl(\(\\)p Fe(jj)p Fl(")18 b(indicates)f(c)o(hoice;)f(one)i(of)f(the)g
(alternativ)o(es)g(is)g(c)o(hosen,)g(nondeterministi-)164 953
y(cally)l(.\))164 1073 y Fi(MPI)p 279 1073 17 2 v 20 w(ST)-5
b(A)g(TUSANY)21 b(\()d(list)p 777 1073 V 22 w(of)p 844 1073
V 20 w(handles,)h(index,)f(return)p 1405 1073 V 20 w(handle\))237
1193 y Fl(Causes)c(either)e(one)h(or)h(none)f(of)g(the)g(op)q(erations)h
(asso)q(ciated)g(with)f(the)g(comm)o(uni-)164 1254 y(cation)g(handles)f(to)h
(return.)20 b(In)12 b(the)g(former)g(case,)g(it)g(has)i(the)e(same)f(return)i
(seman)o(tics)164 1314 y(as)j(a)g(call)f(to)h Fg(MPI)p 492
1314 16 2 v 17 w(WAIT)p 613 1314 V 17 w(ANY)p Fl(.)e(In)i(the)f(later)g
(case,)g(it)g(returns)h(a)g(v)m(alue)f(of)h(-1)g(in)g Fg(index)164
1374 y Fl(and)h Fg(return)p 418 1374 V 16 w(handle)d Fl(is)i(unde\014ned.)21
b(The)c(parameters)e(are:)164 1462 y Fi(IN)j(list)p 324 1462
17 2 v 22 w(of)p 391 1462 V 20 w(handles)25 b Fl(list)16 b(of)g(handles)h(to)
f(comm)o(unication)d(ob)s(jects.)164 1557 y Fi(OUT)19 b(index)24
b Fl(index)e(of)h(handle)g(for)g(op)q(eration)h(that)g(completed,)d(or)j(-1)f
(if)g(none)286 1617 y(completed)14 b(\(in)o(teger\).)164 1712
y Fi(OUT)19 b(return)p 466 1712 V 19 w(handle)26 b Fl(handle)19
b(that)g(is)g(asso)q(ciated)i(with)e(return)g(status)h(ob)s(ject.)286
1772 y(Set)11 b(to)h(return)f(status)i(of)f(op)q(eration)g(that)g(completed,)
e(if)h(an)o(y;)h(unde\014ned)g(when)286 1833 y Fg(index)24
b(=)h(-1)p Fl(.)237 1920 y Fi(MPI)p 352 1920 V 21 w(W)-6 b(AIT)h(ALL\(list)p
728 1920 V 20 w(of)p 793 1920 V 21 w(handles,)19 b(list)p 1106
1920 V 21 w(of)p 1172 1920 V 20 w(return)p 1348 1920 V 20 w(handles\))237
2041 y Fl(Blo)q(c)o(ks)14 b(un)o(til)f(all)i(comm)o(uni)o(cation)d(op)q
(erations)k(asso)q(ciated)g(with)e(handles)h(in)f(the)164 2101
y(list)i(complete,)e(and)j(return)g(the)f(status)h(of)g(all)f(these)h(op)q
(erations.)23 b(The)17 b(parameters)164 2161 y(are:)164 2249
y Fi(IN)h(list)p 324 2249 V 22 w(of)p 391 2249 V 20 w(handles)25
b Fl(list)16 b(of)g(handles)h(to)f(comm)o(unication)d(ob)s(jects.)164
2344 y Fi(OUT)19 b(list)p 384 2344 V 21 w(of)p 450 2344 V 20
w(return)p 626 2344 V 20 w(handles)25 b Fl(Must)18 b(ha)o(v)o(e)f(the)h(same)
f(length)h(as)h(the)f(\014rst)g(list.)286 2404 y(Eac)o(h)11
b(return)g(status)g(ob)s(ject)g(is)g(set)f(to)i(the)e(return)h(status)h(of)f
(the)g(corresp)q(onding)286 2464 y(op)q(eration)17 b(in)f(the)g(\014rst)g
(list.)949 2599 y(27)p eop
%%Page: 28 28
bop 164 307 a Fm(1.10)70 b(Blo)r(c)n(king)22 b(Comm)n(unication)164
400 y Fl(Blo)q(c)o(king)d(send)h(and)h(receiv)o(e)d(op)q(erations)j(com)o
(bine)d(all)h(comm)o(unication)e(sub)q(op)q(er-)164 460 y(ations)k(in)o(to)f
(one)h(call.)32 b(The)21 b(op)q(eration)g(returns)f(only)g(when)h(the)f(comm)
o(unicati)o(on)164 520 y(completes)g(and)i(no)g(comm)o(unic)o(ation)e(ob)s
(ject)h(p)q(ersists)h(after)f(the)h(call)f(completed.)164 580
y(Ho)o(w)o(ev)o(er,)14 b(the)i(bu\013er)h(descriptor)e(ob)s(ject)h(needs)g(b)
q(e)h(created)e(ahead)i(of)g(the)f(call.)237 640 y(W)l(e)g(use)g(the)g(follo)
o(wing)g(naming)g(con)o(v)o(en)o(tion)f(for)h(suc)o(h)g(op)q(erations:)777
695 y Fa(")824 737 y Fe(\000)822 797 y Fi(R)885 695 y Fa(#)8
b(")966 737 y Fi(SEND)962 797 y(RECV)1145 695 y Fa(#)237 898
y Fl(The)16 b(\014rst)h(letter)e(\(v)o(oid)h(or)g Fi(R)p Fl(\))g(indicates)g
(the)g(start)h(mo)q(de)e(\(regular)h(or)h(ready\).)164 1018
y Fi(MPI)p 279 1018 17 2 v 20 w(SEND)i(\(bu\013er)p 639 1018
V 19 w(handle,)g(dest,)f(tag,)g(con)n(text\))164 1078 y Fl(is)164
1170 y Fg(MPI_INIT_S)o(END)o(\(h)o(and)o(le,)k(buffer_han)o(dl)o(e,)g(dest,)i
(tag,)g(context,)f(REGULAR,)g(EPHEMERAL)o(\))164 1231 y(MPI_START\()o(han)o
(dl)o(e\))164 1291 y(MPI_WAIT\(h)o(and)o(le)o(,)g(null\))164
1443 y Fi(MPI)p 279 1443 V 20 w(RSEND)c(\(bu\013er)p 681 1443
V 19 w(handle,)g(dest,)f(tag,)g(con)n(text\))164 1503 y Fl(is)164
1596 y Fg(MPI_INIT_S)o(END)o(\(h)o(and)o(le,)k(buffer_han)o(dl)o(e,)g(dest,)i
(tag,)g(context,)f(READY,)g(EPHEMERAL\))164 1656 y(MPI_START\()o(han)o(dl)o
(e\))164 1716 y(MPI_WAIT\(h)o(and)o(le)o(,)g(null\))164 1868
y Fi(MPI)p 279 1868 V 20 w(RECV\(bu\013er)p 626 1868 V 20 w(handle,)c
(source,)f(tag,)g(con)n(text,)g(return)p 1514 1868 V 19 w(handle\))164
1929 y Fl(is)164 2021 y Fg(MPI_INIT_R)o(ECV)o(\(h)o(and)o(le,)k(buffer_han)o
(dl)o(e,)g(source,)h(tag,)i(context,)d(EPHEMERAL\))164 2081
y(MPI_START\()o(han)o(dl)o(e\))164 2141 y(MPI_WAIT\(h)o(and)o(le)o(,re)o(tur)
o(n_h)o(an)o(dle)o(\))237 2233 y Fi(Implemen)n(tation)d(note:)237
2293 y Fl(While)k(these)g(functions)h(can)g(b)q(e)g(impleme)o(n)o(ted)d(via)i
(calls)g(to)i(functions)e(that)164 2354 y(implem)o(en)o(t)c(sub)q(op)q
(erations,)25 b(as)e(describ)q(ed)f(in)g(this)g(subsection,)h(an)g(e\016cien)
o(t)d(im-)164 2414 y(plemen)o(tation)d(ma)o(y)h(optimize)f(a)o(w)o(a)o(y)i
(these)g(m)o(ultiple)d(calls,)j(pro)o(vided)f(it)h(do)q(es)h(not)164
2474 y(c)o(hange)c(the)g(b)q(eha)o(vior)g(of)h(correct)e(programs.)949
2599 y(28)p eop
%%Page: 29 29
bop 164 307 a Fm(1.11)70 b(Non)n(blo)r(c)n(king)22 b(Comm)n(unication)164
400 y Fl(Non)o(blo)q(c)o(king)g(send)h(and)g(receiv)o(e)d(op)q(erations)k
(com)o(bine)d(the)h(\014rst)h(t)o(w)o(o)g(sub)q(op)q(era-)164
460 y(tions)d(\()p Fg(INIT)e Fl(and)i Fg(START)p Fl(\))e(in)o(to)h(one)h
(call.)30 b(They)19 b(use)h(ephemeral)d(comm)o(unicati)o(on)164
520 y(ob)s(jects,)e(so)h(that)f(the)g(op)q(eration)i(is)e(completed,)d(and)k
(the)f(asso)q(ciated)i(resources)e(are)164 580 y(freed,)g(b)o(y)h(using)h
(one)f(of)h(the)f(functions)g Fg(MPI)p 1014 580 16 2 v 17 w(WAIT,)24
b(MPI)p 1263 580 V 17 w(STATUS,)f(MPI)p 1563 580 V 18 w(WAITANY,)164
640 y(MPI)p 245 640 V 17 w(STATUSANY)p Fl(,)11 b(or)j Fg(MPI)p
656 640 V 17 w(WAITALL)p Fl(.)d(Here,)i(to)q(o,)i(a)g(bu\013er)f(ob)s(ject)f
(has)i(to)f(b)q(e)g(created)164 700 y(ahead)j(of)f(the)g(comm)o(unication)d
(initiation)j(op)q(eration.)237 761 y(W)l(e)h(use)g(the)f(same)g(naming)g
(con)o(v)o(en)o(tion)g(as)i(for)f(blo)q(c)o(king)f(op)q(erations:)24
b(a)17 b(pre\014x)164 821 y(of)f Fi(R)g Fl(indicates)g(the)f
Fg(READY)g Fl(mo)q(de.)20 b(In)c(addition,)g(a)g(pre\014x)g(of)g
Fi(I)g Fl(is)g(used)g(to)h(indicate)164 881 y Fh(imme)n(diate)f
Fl(\(i.e.,)e(non)o(blo)q(c)o(king\))i(execution.)164 1001 y
Fi(MPI)p 279 1001 17 2 v 20 w(ISEND)j(\(handle,)g(bu\013er)p
856 1001 V 19 w(handle,)g(dest,)f(tag,)g(con)n(text\))164 1062
y Fl(is)164 1163 y Fg(MPI_INIT_S)o(END)o(\(h)o(and)o(le,)k(buffer_han)o(dl)o
(e,)g(dest,)i(tag,)g(context,)f(REGULAR,)g(EPHEMERAL)o(\))164
1224 y(MPI_START\()o(han)o(dl)o(e\))164 1385 y Fi(MPI)p 279
1385 V 20 w(IRSEND)18 b(\(handle,)h(bu\013er)p 897 1385 V 20
w(handle,)g(dest,)f(tag,)g(con)n(text\))164 1446 y Fl(is)164
1547 y Fg(MPI_INIT_S)o(END)o(\(h)o(and)o(le,)k(buffer_han)o(dl)o(e,)g(dest,)i
(tag,)g(context,)f(READY,)g(EPHEMERAL\))164 1608 y(MPI_START\()o(han)o(dl)o
(e\))164 1769 y Fi(MPI)p 279 1769 V 20 w(IRECV\(handle,)15
b(bu\013er)p 839 1769 V 19 w(handle,)f(source,)f(tag,)g(con)n(text,)g(return)
p 1706 1769 V 19 w(status)p 1871 1769 V 21 w(handle\))164 1830
y Fl(is)164 1931 y Fg(MPI_INIT_R)o(ECV)o(\(h)o(and)o(le,)22
b(buffer_han)o(dl)o(e,)g(source,)h(tag,)i(context,)d(EPHEMERAL\))164
1991 y(MPI_START\()o(han)o(dl)o(e\))164 2136 y Fm(1.12)70 b(Blo)r(c)n(k)22
b(Sending)h(Op)r(erations)164 2228 y Fl(The)h(most)g(frequen)o(t)f(t)o(yp)q
(e)g(of)i(bu\013er)f(used)g(is)g(a)h(con)o(tiguous)g(bu\013er)f(of)h(n)o
(umeric)164 2288 y(storage)18 b(units,)f(i.e.,)f(a)h(con)o(tiguous)h
(bu\013er)g(of)f(w)o(ords)h(that)g(ma)o(y)d(con)o(tain)i(either)f(IN-)164
2349 y(TEGER,)23 b(REAL)g(or)h(LOGICAL)f(v)m(alues)g(\(in)g(F)o(OR)l(TRAN\).)
e(In)h(a)i(homogeneous)164 2409 y(en)o(vironmen)o(t)14 b(suc)o(h)j(messages)g
(can)g(b)q(e)g(used)h(to)f(send)h(arbitrary)f(sequences)f(of)h(con-)164
2469 y(tiguous)g(items,)d(where)i(eac)o(h)f(item)g(o)q(ccupies)h(an)g(in)o
(teger)g(n)o(um)o(b)q(er)e(of)j(w)o(ords.)949 2599 y(29)p eop
%%Page: 30 30
bop 237 307 a Fl(W)l(e)17 b(sp)q(ecialize)f(the)i(functions)f(in)g(the)h(t)o
(w)o(o)f(previous)g(subsections)h(to)g(this)f(case,)164 367
y(th)o(us)f(a)o(v)o(oiding)f(the)g(need)g(for)h(the)g(creation)f(of)h(a)g
(bu\013er)g(descriptor)f(ob)s(ject.)21 b(W)l(e)15 b(use)164
428 y(the)i(same)f(naming)g(sc)o(heme)f(used)i(in)g(the)f(previous)h
(subsections,)g(and)h(app)q(end)g(a)f Fi(B)164 488 y Fl(in)f(the)g(function)g
(name,)f(for)h Fg(BLOCK)p Fl(.)164 608 y Fi(MPI)p 279 608 17
2 v 20 w(SENDB)j(\(start,)f(len,)g(dest,)g(tag,)g(con)n(text\))164
668 y Fl(is)164 770 y Fg(MPI_CREATE)o(\(bu)o(ff)o(er_)o(han)o(dle)o(,)k
(MPI_BUFFER,)g(MPI_EPHEME)o(RAL)o(\))164 830 y(MPI_ADD\(bu)o(ffe)o(r_)o(han)o
(dle)o(,)h(start,)g(len,)h(MPI_REAL\))164 890 y(MPI_SEND)f(\(buffer_h)o(and)o
(le,)f(len,)i(dest,)g(tag,)g(context\))164 1052 y Fi(MPI)p
279 1052 V 20 w(RSENDB)18 b(\(bu\013er)p 720 1052 V 20 w(handle,)h(dest,)f
(tag,)g(con)n(text\))164 1112 y Fl(is)164 1214 y Fg(MPI_CREATE)o(\(bu)o(ff)o
(er_)o(han)o(dle)o(,)k(MPI_BUFFER,)g(MPI_EPHEME)o(RAL)o(\))164
1274 y(MPI_ADD\(bu)o(ffe)o(r_)o(han)o(dle)o(,)h(start,)g(len,)h(MPI_REAL\))
164 1335 y(MPI_RSEND)e(\(buffer_han)o(dle)o(,)g(len,)j(dest,)e(tag,)i
(context\))237 1436 y Fi(MPI)p 352 1436 V 21 w(RECVB\(bu\013er)p
740 1436 V 19 w(handle,)14 b(source,)f(tag,)g(con)n(text,)g(return)p
1607 1436 V 20 w(status)p 1773 1436 V 20 w(handle\))164 1496
y Fl(is)164 1598 y Fg(MPI_CREATE)o(\(bu)o(ff)o(er_)o(han)o(dle)o(,)22
b(MPI_BUFFER,)g(MPI_EPHEME)o(RAL)o(\))164 1658 y(MPI_ADD\(bu)o(ffe)o(r_)o
(han)o(dle)o(,)h(start,)g(len,)h(MPI_REAL\))164 1719 y(MPI_RECV\(b)o(uff)o
(er)o(_ha)o(ndl)o(e,)e(source,)h(tag,)h(context,)f(return_sta)o(tus)o(_ha)o
(nd)o(le\))164 1880 y Fi(MPI)p 279 1880 V 20 w(ISENDB)c(\(handle,)f(bu\013er)
p 895 1880 V 20 w(handle,)h(dest,)f(tag,)g(con)n(text\))164
1941 y Fl(is)164 2042 y Fg(MPI_CREATE)o(\(bu)o(ff)o(er_)o(han)o(dle)o(,)k
(MPI_BUFFER,)g(MPI_EPHEME)o(RAL)o(\))164 2103 y(MPI_ADD\(bu)o(ffe)o(r_)o(han)
o(dle)o(,)h(start,)g(len,)h(MPI_REAL\))164 2163 y(MPI_ISEND\()o(han)o(dl)o
(e,)e(buffer_hand)o(le,)g(dest,)i(tag,)g(context\))164 2325
y Fi(MPI)p 279 2325 V 20 w(IRSENDB)18 b(\(handle,)h(bu\013er)p
937 2325 V 20 w(handle,)g(dest,)f(tag,)g(con)n(text\))164 2385
y Fl(is)949 2599 y(30)p eop
%%Page: 31 31
bop 164 307 a Fg(MPI_CREATE)o(\(bu)o(ff)o(er_)o(han)o(dle)o(,)22
b(MPI_BUFFER,)g(MPI_EPHEME)o(RAL)o(\))164 367 y(MPI_ADD\(bu)o(ffe)o(r_)o(han)
o(dle)o(,)h(start,)g(len,)h(MPI_REAL\))164 428 y(MPI_IRSEND)o(\(ha)o(nd)o
(le,)e(buffer_han)o(dle)o(,)g(dest,)i(tag,)g(context\))164
587 y Fi(MPI)p 279 587 17 2 v 20 w(IRECVB\(handle,)14 b(bu\013er)p
878 587 V 20 w(handle,)g(source,)f(tag,)g(con)n(text,)g(return)p
1746 587 V 19 w(status)p 1911 587 V 21 w(handle\))164 647 y
Fl(is)164 746 y Fg(MPI_CREATE)o(\(bu)o(ff)o(er_)o(han)o(dle)o(,)22
b(MPI_BUFFER,)g(MPI_EPHEME)o(RAL)o(\))164 807 y(MPI_ADD\(bu)o(ffe)o(r_)o(han)
o(dle)o(,)h(start,)g(len,)h(MPI_REAL\))164 867 y(MPI_IRECV\()o(han)o(dl)o(e,)
e(buffer_hand)o(le,)g(source,)h(tag,)h(context\))164 1075 y
Fk(Discussion:)237 1132 y Fj(I)18 b(use)f(w)o(ord)g(coun)o(t,)g(rather)f
(than)h(b)o(yte)g(coun)o(t.)26 b(I)18 b(b)q(eliev)o(e)h(w)o(ord)d(messages)h
(are)g(m)o(uc)o(h)164 1188 y(more)e(prev)m(alen)o(t)g(than)g(b)o(yte)g
(messages,)f(and)h(it's)g(a)g(blessing)h(not)f(to)f(ha)o(v)o(e)h(to)f(m)o
(ultiply)j(b)o(y)164 1245 y(4)h(for)g(eac)o(h)h(message.)30
b(Byte)19 b(messages)f(are)g(still)j(a)o(v)m(ailable)f(the)f(hard)f(w)o(a)o
(y)l(.)30 b(Also,)20 b(w)o(ord)164 1301 y(messages)15 b(\014t)g(w)o(ell)h
(with)f(the)h(F)l(ortran)e(n)o(umeric)i(storage)e(unit)i(concept.)237
1357 y(If)21 b(w)o(e)f(are)g(to)g(add)h(more)f(functions,)j(m)o(y)d(next)g
(addition)i(w)o(ould)f(b)q(e)g(a)f(v)o(ector)g(send)164 1414
y(op)q(eration.)164 1739 y Fm(1.13)70 b(Correctness)164 1951
y Fk(Discussion:)27 b Fj(The)18 b(material)h(in)g(this)g(section)g(has)g(not)
f(y)o(et)g(b)q(een)h(discussed)h(b)o(y)f(MPIF.)164 2011 y(Some)d(or)g(all)h
(of)f(it)h(is)f(lik)o(ely)i(to)e(mo)o(v)o(e)g(to)f(Section)i
Fk(??)p Fj(.)23 b(It)16 b(is)h(incorp)q(orated)g(here)f(for)g(com-)164
2072 y(pleteness.)164 2322 y Fi(1.13.1)55 b(Order)164 2414
y Fl(MPI)15 b(preserv)o(es)g(the)h(order)g(of)g(messages)f(b)q(et)o(w)o(een)g
(an)o(y)h(\014xed)f(pair)h(of)h(pro)q(cesses.)k(In)164 2474
y(other)16 b(w)o(ords,)g(if)f(pro)q(cess)h(A)f(executes)f(t)o(w)o(o)i
(successiv)o(e)e(send)i Fg(start)d Fl(sub)q(op)q(erations,)949
2599 y(31)p eop
%%Page: 32 32
bop 164 307 a Fl(pro)q(cess)13 b(B)e(executes)g(t)o(w)o(o)h(successiv)o(e)e
(receiv)o(e)g Fg(start)g Fl(op)q(erations,)k(and)e(b)q(oth)h(receiv)o(es)164
367 y(matc)o(h)19 b(either)h(sends,)i(then)f(the)f(\014rst)h(receiv)o(e)e
(will)h(receiv)o(e)e(the)j(message)f(sen)o(t)g(b)o(y)164 428
y(the)g(\014rst)g(send,)h(and)g(the)f(second)g(receiv)o(e)e(will)h(receiv)o
(e)f(the)i(message)g(sen)o(t)f(b)o(y)h(the)164 488 y(second)h(send.)36
b(Th)o(us,)22 b(if)e(a)i(t)o(w)o(o)f(messages)f(from)g(the)h(same)f(source)h
(can)g(satisfy)h(a)164 548 y(p)q(ending)d(receiv)o(e,)c(the)j(\014rst)h
(message)e(sen)o(t)h(is)g(accepted;)g(if)g(a)g(message)g(can)g(satisfy)164
608 y(t)o(w)o(o)e(p)q(ending)h(receiv)o(es,)c(the)j(\014rst)h(receiv)o(e)d(p)
q(osted)j(is)f(satis\014ed.)237 668 y(The)h(last)g(paragraph)i(assumes)e
(that)g(the)g(send)g Fg(start)f Fl(op)q(erations)i(are)f(ordered)164
729 y(b)o(y)k(the)g(program)h(order)f(at)h(pro)q(cess)g(A,)f(and)h(the)f
(receiv)o(e)f Fg(start)f Fl(op)q(erations)k(are)164 789 y(ordered)f(b)o(y)f
(the)h(program)f(order)h(at)g(pro)q(cess)h(B.)e(If)g(a)h(pro)q(cess)h(is)e(m)
o(ultithreaded)164 849 y(and)f(the)f(op)q(erations)h(are)f(executed)f(b)o(y)g
(distinct)h(threads,)g(then)g(the)g(seman)o(tics)f(of)164 909
y(the)d(threaded)g(system)e(ma)o(y)h(not)h(de\014ne)g(an)g(order)h(b)q(et)o
(w)o(een)e(the)g(t)o(w)o(o)h(op)q(erations,)h(in)164 969 y(whic)o(h)g(case)g
(the)g(condition)g(is)g(v)o(oid.)164 1099 y Fi(1.13.2)55 b(Progress)19
b(and)g(F)-5 b(airness)164 1192 y Fl(W)l(e)22 b(can)h(mo)q(del)f(the)g
(execution)g(of)h(MPI)f(programs)h(as)h(an)f(in)o(teraction)f(b)q(et)o(w)o
(een)164 1252 y(executing)h(pro)q(cesses)h(that)g(execute)e(eac)o(h)h(their)g
(o)o(wn)h(program,)h(and)f(the)g Fi(com-)164 1312 y(m)n(unication)c
(subsystem)p Fl(.)g(The)c(comm)o(unic)o(ation)d(subsystem)i(ma)o(y)f(ha)o(v)o
(e)h(v)m(arious)164 1372 y(constrain)o(ts)h(on)h(the)f(amoun)o(t)g(of)g
(resources)g(it)g(can)h(use.)k(E.g.:)237 1432 y(Bounds)e(on)f(the)g(n)o(um)o
(b)q(er)e(and)i(total)h(sizes)e(of)h(activ)o(e)f(comm)o(unic)o(ation)f(ob)s
(jects.)164 1492 y(Suc)o(h)g(b)q(ound)h(can)g(b)q(e)f(global,)g(p)q(er)h(no)q
(de,)f(or)h(p)q(er)f(pair)g(of)h(comm)o(unic)o(ating)d(no)q(des.)237
1553 y(Bounds)g(on)g(the)f(n)o(um)o(b)q(er)f(and)i(total)g(sizes)f(of)h
(messages)f(bu\013ered)g(in)h(the)f(system.)164 1613 y(Suc)o(h)19
b(b)q(ound)h(can,)g(again,)g(b)q(e)g(global,)g(p)q(er)f(no)q(de,)h(or)g(p)q
(er)f(pair)h(of)f(comm)o(unicati)o(ng)164 1673 y(no)q(de.)j(In)16
b(addition,)f(a)i(message)e(ma)o(y)g(b)q(e)h(bu\013ered)g(at)g(the)g(sender,)
g(at)g(the)g(receiv)o(er,)164 1733 y(at)h(b)q(oth,)f(or)h(p)q(erhaps)g(at)g
(another)g(place)e(altogether.)237 1793 y(Th)o(us,)g(it)g(will)f(b)q(e)h
(di\016cult)e(to)j(set)f(rules)f(on)i(resource)e(managemen)o(t)f(of)i(the)g
(com-)164 1854 y(m)o(unication)g(subsystem.)21 b(Ho)o(w)o(ev)o(er,)15
b(it)h(is)g(generally)g(exp)q(ected)f(that)i(impleme)o(n)o(ters)164
1914 y(will)e(pro)o(vide)f(information)h(on)h(the)g(mec)o(hanism)c(used)k
(for)g(resource)g(allo)q(cation,)f(and)164 1974 y(that)22 b(query)g(and)g
(set)g(functions)g(will)f(allo)o(w)h(to)g(query)g(and)g(p)q(ossibly)g(con)o
(trol)g(the)164 2034 y(amoun)o(t)15 b(of)i(a)o(v)m(ailable)f(resources.)237
2094 y(W)l(e)d(pro)o(vide)f(in)g(this)h(section)g(a)g(set)g(of)g(minim)o(al)d
(requiremen)o(ts)g(on)j(the)g(comm)o(uni-)164 2155 y(cation)h(subsystem.)19
b(Programs)14 b(that)g(execute)e(on)j(an)o(y)e(subsystem)g(that)h(ful\014ls)f
(these)164 2215 y(minim)o(al)18 b(requiremen)o(ts)g(are)j Fi(safe)g
Fl(and)h(will)d(p)q(ort)j(to)f(an)o(y)g(MPI)f(impleme)o(n)o(tation.)164
2275 y Fi(Unsafe)h Fl(programs)h(ma)o(y)d(execute)h(on)i(some)e(MPI)h(implem)
o(e)o(n)o(tations,)f(dep)q(ending)164 2335 y(on)h(the)f(amoun)o(t)f(of)i(a)o
(v)m(ailable)e(resources)h(and)h(the)f(implem)o(en)o(tation)d(used)k(for)f
(the)164 2395 y(MPI)14 b(comm)o(unication)e(subsystem.)19 b(Finally)14
b Fi(erroneous)g Fl(programs)h(nev)o(er)e(execute)164 2456
y(correctly)l(.)19 b(\(While)14 b(it)g(is)g(desirable)g(to)g(detect)g
(erroneous)h(programs,)g(it)f(is)g(not)h(p)q(ossi-)949 2599
y(32)p eop
%%Page: 33 33
bop 164 307 a Fl(ble)13 b(to)g(do)h(so)g(at)g(compile)d(time,)h(and)i(often)f
(prohibitiv)o(e)f(to)i(do)f(so)i(a)e(run)h(time.)k(Th)o(us,)164
367 y(the)e(do)q(cumen)o(t)f(do)q(es)j(not)f(sp)q(ecify)e(a)i(b)q(eha)o(vior)
g(for)g(erroneous)g(programs,)f(although)164 428 y(the)g(desired)g(b)q(eha)o
(vior)g(is)g(to)g(return)g(a)h(useful)f(error)g(message.\))224
542 y(1.)24 b(If)15 b(a)h(pro)q(cess)h(executes)d(an)j Fg(INIT)d
Fl(op)q(eration,)i(then)g(the)f(op)q(eration)i(ev)o(en)o(tually)286
602 y(succeeds,)c(or)g(a)g Fh(r)n(esour)n(c)n(e)h(exc)n(eption)g
Fl(o)q(ccurs.)21 b(The)13 b(standard)h(do)q(es)g(not)g(sp)q(ecify)286
662 y(when)23 b(a)h(resource)g(exception)e(is)h(allo)o(w)o(ed)g(to)h(o)q
(ccur.)43 b(It)23 b(is)g(exp)q(ected)f(that)286 722 y(an)g(op)q(erational)h
(de\014nition)e(will)g(b)q(e)h(made)f(a)o(v)m(ailable,)h(in)f(the)h(form)f
(of)h(test)286 782 y(programs)14 b(that)f(ha)o(v)o(e)g(to)h(execute)e(with)h
(no)h(resource)g(exceptions.)19 b(It)13 b(is)g(highly)286 843
y(desirable)e(to)i(ha)o(v)o(e)e(generous)i(b)q(ounds)h(on)e(the)g(n)o(um)o(b)
q(er)f(of)h(concurren)o(tly)f(activ)o(e)286 903 y(comm)o(unic)o(ation)20
b(ob)s(jects)j(eac)o(h)f(pro)q(cess)h(ma)o(y)e(ha)o(v)o(e,)i(so)h(that,)g(in)
e(practice,)286 963 y Fg(INIT)15 b Fl(op)q(erations)i(will)e(alw)o(a)o(ys)h
(b)q(e)h(guaran)o(teed)f(to)h(succeed.)224 1065 y(2.)24 b(Eac)o(h)d(pro)q
(cess)g(can)g(initiate)f(a)h(comm)o(uni)o(cation)d(op)q(eration)k(for)f(eac)o
(h)f(activ)o(e)286 1125 y(comm)o(unic)o(ation)e(ob)s(ject.)32
b(I.e.)f(correct)20 b Fg(START)e Fl(op)q(erations)j(alw)o(a)o(ys)f(succeed)
286 1185 y(\(ev)o(en)o(tually\).)224 1287 y(3.)k(A)10 b(send)h(op)q(eration)h
(is)f Fi(enabled)g Fl(if)f(the)h(sending)g(pro)q(cess)g(has)h(issued)e(a)i
Fg(COMPLETE)286 1347 y Fl(op)q(eration)20 b(and)g(the)g(receiving)e(pro)q
(cess)i(has)g(issued)g(a)f Fg(START)f Fl(op)q(eration)j(for)286
1407 y(a)e(matc)o(hing)f(receiv)o(e.)28 b(Symmetri)o(call)o(y)l(,)16
b(a)k(receiv)o(e)d(op)q(eration)j(is)f Fi(enabled)g Fl(if)286
1467 y(the)h(receiving)e(pro)q(cess)j(has)f(issued)g(a)g Fg(COMPLETE)d
Fl(op)q(eration)k(and)g(the)f(send-)286 1528 y(ing)j(pro)q(cess)h(has)g
(issued)f(a)g Fg(START)f Fl(op)q(eration)i(for)f(a)h(matc)o(hing)d(send.)42
b(An)286 1588 y(enabled)19 b(op)q(eration)i(ma)o(y)d(b)q(ecome)g
Fi(disabled)j Fl(either)e(b)q(ecause)h(it)f(completes)286 1648
y(successfully)c(or,)h(in)g(the)g(case)g(of)h(a)g(receiv)o(e,)c(b)q(ecause)k
(the)f(matc)o(hing)f(message)286 1708 y(is)h(successfully)f(receiv)o(ed)f(b)o
(y)i(another)g(receiv)o(e)e(op)q(eration.)286 1789 y Fi(An)30
b(enabled)h(op)r(eration)f(either)f(completes)g(successfully)i(or)f(b)r(e-)
286 1849 y(comes)18 b(p)r(ermanen)n(tly)g(disabled.)224 1951
y Fl(4.)24 b(A)16 b Fg(FREE)f Fl(op)q(eration)i(alw)o(a)o(ys)f(succeeds)f
(\(ev)o(en)o(tually\).)237 2065 y(The)f(four)h(conditions)f(guaran)o(tee)h
(progress)g(in)e(the)h(comm)o(unication)d(subsystem.)164 2125
y(The)19 b(third)f(condition)h(guaran)o(tee)g(\(w)o(eak\))f(fairness)h(among)
f(comp)q(eting)g(comm)o(uni-)164 2186 y(cation)e(requests.)237
2246 y(Examples)f(\(in)o(v)o(olving)g(t)o(w)o(o)h(pro)q(cessors)h(with)f
(ranks)h(0)g(and)f(1\))237 2306 y(The)g(follo)o(wing)g(program)g(is)g(safe,)g
(and)h(should)g(alw)o(a)o(ys)f(succeed.)164 2468 y Fg(CALL)24
b(MPI_RANK\(r)o(ank)o(,)f(context\))949 2599 y Fl(33)p eop
%%Page: 34 34
bop 164 307 a Fg(IF)25 b(\(rank.EQ.0)o(\))d(THEN)241 367 y(CALL)i
(MPI_SENDB\()o(sen)o(dbu)o(f,)e(len,)i(1,)h(tag,)f(context\))241
428 y(CALL)g(MPI_RECVB\()o(rec)o(vbu)o(f,)e(len,)i(1,)h(tag,)f(context\))164
488 y(ELSE)101 b(!)25 b(rank.EQ.1)241 548 y(CALL)f(MPI_RECVB\()o(rec)o(vbu)o
(f,)e(len,)i(0,)h(tag,)f(context\))241 608 y(CALL)g(MPI_SENDB\()o(sen)o(dbu)o
(f,)e(len,)i(0,)h(tag,)f(context\))164 668 y(END)h(IF)237 765
y Fl(The)16 b(follo)o(wing)g(program)g(is)g(erroneous,)h(and)g(should)f(alw)o
(a)o(ys)g(fail.)164 934 y Fg(CALL)24 b(MPI_RANK\(r)o(ank)o(,)f(context\))164
994 y(IF)i(\(rank.EQ.0)o(\))d(THEN)241 1054 y(CALL)i(MPI_RECVB\()o(rec)o(vbu)
o(f,)e(len,)i(1,)h(tag,)f(context\))241 1114 y(CALL)g(MPI_SENDB\()o(sen)o
(dbu)o(f,)e(len,)i(1,)h(tag,)f(context\))164 1174 y(ELSE)101
b(!)25 b(rank.EQ.1)241 1235 y(CALL)f(MPI_RECVB\()o(rec)o(vbu)o(f,)e(len,)i
(0,)h(tag,)f(context\))241 1295 y(CALL)g(MPI_SENDB\()o(sen)o(dbu)o(f,)e(len,)
i(0,)h(tag,)f(context\))164 1355 y(END)h(IF)237 1463 y Fl(The)17
b(receiv)o(e)e(op)q(eration)j(of)f(the)f(\014rst)i(pro)q(cess)f(m)o(ust)f
(complete)e(b)q(efore)k(its)e(send,)164 1523 y(and)k(can)g(complete)e(only)h
(if)h(the)f(matc)o(hing)f(send)i(of)g(the)g(second)g(pro)q(cessor)h(is)e(ex-)
164 1584 y(ecuted;)24 b(the)e(receiv)o(e)f(op)q(eration)i(of)g(the)f(second)h
(pro)q(cess)g(m)o(ust)e(complete)f(b)q(efore)164 1644 y(its)f(send)h(and)g
(can)g(complete)d(only)j(if)f(the)g(matc)o(hing)f(send)i(of)g(the)f(\014rst)h
(pro)q(cess)g(is)164 1704 y(executed.)g(This)c(program)g(will)f(deadlo)q(c)o
(k.)237 1764 y(The)i(follo)o(wing)h(program)f(is)g(unsafe,)g(and)h(ma)o(y)e
(succeed)h(or)g(fail,)g(dep)q(ending)g(on)164 1824 y(implem)o(en)o(tati)o
(on.)164 1993 y Fg(CALL)24 b(MPI_RANK\(r)o(ank)o(,)f(context\))164
2053 y(IF)i(\(rank.EQ.0)o(\))d(THEN)241 2113 y(CALL)i(MPI_SENDB\()o(sen)o
(dbu)o(f,)e(len,)i(1,)h(tag,)f(context\))241 2173 y(CALL)g(MPI_RECVB\()o(rec)
o(vbu)o(f,)e(len,)i(1,)h(tag,)f(context\))164 2233 y(ELSE)101
b(!)25 b(rank.EQ.1)241 2293 y(CALL)f(MPI_SENDB\()o(sen)o(dbu)o(f,)e(len,)i
(0,)h(tag,)f(context\))241 2354 y(CALL)g(MPI_RECVB\()o(rec)o(vbu)o(f,)e(len,)
i(0,)h(tag,)f(context\))164 2414 y(END)h(IF)949 2599 y Fl(34)p
eop
%%Page: 35 35
bop 237 307 a Fl(The)19 b(message)f(sen)o(t)g(b)o(y)g(eac)o(h)h(pro)q(cess)g
(has)g(to)g(b)q(e)g(copied)f(out)i(b)q(efore)e(the)h(send)164
367 y(op)q(eration)d(returns)g(and)g(the)f(receiv)o(e)e(op)q(eration)j
(starts.)22 b(F)l(or)16 b(the)f(program)g(to)h(com-)164 428
y(plete,)i(it)h(is)g(necessary)g(that)h(at)f(least)g(one)h(of)f(the)g(t)o(w)o
(o)g(messages)g(sen)o(t)g(is)g(bu\013ered)164 488 y(out)e(of)g(either)f(pro)q
(cesses')h(address)g(space.)23 b(Th)o(us,)17 b(this)g(program)f(can)h
(succeed)f(only)164 548 y(if)h(the)g(comm)o(uni)o(cation)e(system)g(has)j
(su\016cien)o(t)e(bu\013er)i(space)f(to)h(bu\013er)f Fg(len)f
Fl(w)o(ords)164 608 y(of)h(data.)237 668 y(If)d(additional)h(requiremen)o(ts)
d(will)i(b)q(ecome)f(part)i(of)g(the)g(standard)h(\(e.g.,)e(b)q(ounds)164
729 y(on)23 b(the)f(minimal)d(n)o(um)o(b)q(er)i(of)i(concurren)o(tly)e(activ)
o(e)h(handles)g(that)h(need)f(b)q(e)h(sup-)164 789 y(p)q(orted,)16
b(then)g(further)g(programs)h(b)q(ecome)d(safe.)949 2599 y(35)p
eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF