Steve
----------------------------------------------------------------------
%!PS-Adobe-2.0
%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
%%Title: temp.dvi
%%Pages: 39
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
%%EndComments
%DVIPSCommandLine: dvips -o temp.ps temp
%DVIPSParameters: dpi=300, compressed, comments removed
%DVIPSSource: TeX output 1996.08.02:1255
%%BeginProcSet: texc.pro
/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /@landscape{/isls true 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 sub]/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}
{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
chg nd}{pop nd}]dup{bind pop}forall 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 /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
known{start-hook}if pop /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
65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}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
{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{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 /QV{gsave newpath transform
round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
rlineto rulex neg 0 rlineto fill grestore}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{SS restore}B end
%%EndProcSet
TeXDict begin 40258431 52099146 1000 300 300 (temp.dvi)
@start /Fa 15 118 df<13E01201EA0380EA0700120E5AA25AA25AA35AA91270A37EA2
7EA27E7EEA0380EA01E012000B217A9C16>40 D<12C07E12707E7E7EA27EA2EA0380A3EA
01C0A9EA0380A3EA0700A2120EA25A5A5A5A5A0A217B9C16>I<127012F8A312701200A8
127012F8A312700512789116>58 D<EA7FF8EAFFFE6C7EEA1C0FEB0780EB03C01301A214
E01300A8EB01C0A21303EB0780130F387FFF00485AEA7FF81319809816>68
D<EA7FFCEAFFFEEA7FFCEA0380B3EA7FFCEAFFFEEA7FFC0F197D9816>73
D<EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005B13F8001CC7
FCA7127F487E6CC7FC12197F9816>80 D<EA1FE0487E487EEA783CEA300E1200A2EA03FE
121FEA3E0E127012E0A3EA783E387FFFE0EA3FE7EA0F8313127E9116>97
D<133FA31307A4EA03C7EA0FF748B4FCEA3C1F487EEA700712E0A6EA700F12786C5A381F
FFE0EA0FF7EA07C713197F9816>100 D<EA03F0EA0FFC487EEA3C0F487E3870038012E0
B5FCA300E0C7FCA2387003801278EA3E07381FFF00EA07FEEA01F811127E9116>I<131E
137F3801FF8013C7380383001380A2EA7FFFB5FCA2EA0380ACEA7FFC487E6C5A11197F98
16>I<EA7FC012FF127F1201B3EA7FFFB512806C130011197E9816>108
D<387F0FC038FF3FE0EA7F7F3807F040EBC0005BA290C7FCA8EA7FFC12FF127F13127F91
16>114 D<EA0FECEA3FFC127FEAF03CEAE01CA2EA7000EA7F80EA1FF0EA07F8EA003CEA
600E12E012F0EAF81EEAFFFC13F8EAC7E00F127D9116>I<12035AA4EA7FFFB5FCA20007
C7FCA75BEB0380A3EB8700EA03FE6C5A6C5A11177F9616>I<EAFC3FA3EA1C07AB131F38
1FFFE0EA0FF7EA07C713127F9116>I E /Fb 41 121 df<EB0FE0EB7FF8EBF81C3801E0
7C1203EA07C0A2143891C7FCA3EBC1FEB5FCA23807C03EB0393FF9FFC0A21A20809F1D>
12 D<EAFFF0A40C047F8B11>45 D<1238127C12FEA3127C123807077C860F>I<137013F0
120712FF12F91201B3A4387FFFC0A2121D7D9C1A>49 D<133F3801FFC03807C0E0EA0F81
381F03F0121E123E127CEB01E090C7FCEAFC1013FF00FD13C0EB03E038FE01F0A200FC13
F8A4127CA3003C13F0123E381E03E0380F07C03807FF803801FE00151D7E9C1A>54
D<1238127C12FEA3127C12381200A61238127C12FEA3127C123807147C930F>58
D<EA07F8EA1FFE38381F80EA780F00FC13C0A3127838301F8000001300133E5B13705BA2
5BA690C7FCA4EA01C0487E487EA36C5A6C5A12207D9F19>63 D<14E0A2497EA3497EA2EB
06FCA2EB0EFEEB0C7EA2497EA201307F141F01707FEB600FA2496C7E90B5FC4880EB8003
000380EB0001A200066D7EA2000E803AFFE00FFFE0A2231F7E9E28>65
D<B512FEECFFC03907E007F0EC01F86E7E157E81A2ED1F80A316C0A91680A3ED3F00A215
7E5D4A5AEC07F0B612C04AC7FC221F7E9E28>68 D<B612E0A23807E00714011400156015
701530A21430A21500147014F013FFA213E014701430150CA214001518A31538157815F8
EC03F0B6FCA21E1F7E9E22>I<B612E0A23807E00714011400156015701530A21430A215
00147014F013FFA213E014701430A391C7FCA8B57EA21C1F7E9E21>I<903807FC029038
3FFF0E9038FE03DE3903F000FE4848133E4848131E485A48C7120EA2481406127EA200FE
91C7FCA591381FFFE0A2007E9038007E00A2127F7EA26C7E6C7E6C7E6C6C13FE3800FE01
90383FFF8E903807FC06231F7D9E29>I<B5380FFFF0A23A07E0007E00AC90B512FEA290
38E0007EADB5380FFFF0A2241F7E9E29>I<B5FCA2EA07E0B3A9B5FCA2101F7E9E14>I<B5
7EA2D807E0C7FCB115C0A31401A3EC0380A2140F141FB6FCA21A1F7E9E1F>76
D<D8FFE0EC3FF86D147F00071600D806F814DFA3017CEB019FA26DEB031FA26D1306A290
380F800CA2903807C018A3903803E030A2903801F060A2903800F8C0A2EC7D80A2EC3F00
A3141ED8FFF0903803FFF8140C2D1F7E9E32>I<D8FFE0EBFFF07F0007EC06007FEA06FC
137E7F1480131FEB0FC0EB07E0EB03F0EB01F814FC1300147E143FEC1F8615C6EC0FE614
07EC03F6EC01FE1400A2157E153E151E150ED8FFF01306A2241F7E9E29>I<B512FEECFF
803907E00FE0EC03F0EC01F8A215FCA515F8A2EC03F0EC0FE090B51280ECFE0001E0C7FC
ACB5FCA21E1F7E9E24>80 D<B512FCECFF803907E00FE0EC03F081140181A45D14035DEC
0FE090B5128002FCC7FCEBE03FEC0F8081140781A381A31630EC03F802011360B53800FF
C0ED3F80241F7E9E27>82 D<3803FC08380FFF38381E03F8EA3800481378143812F01418
A26C13007EEA7FC013FE383FFF806C13C06C13E06C13F0C613F81307EB00FC147C143C12
C0A36C1338147800F8137038FE01E038EFFFC000811300161F7D9E1D>I<007FB512FCA2
397C07E07C0070141C0060140CA200E0140E00C01406A400001400B10003B512C0A21F1E
7E9D24>I<B53801FFE0A23A07E0000C00B3A400035C6C7E5D6C6C5B90387E03C090381F
FF80D903FCC7FC231F7E9E28>I<EA07FC381FFF80383F07C0EB03E0EB01F0A2120C1200
133FEA07FDEA1F81EA3E01127C12F8A3EAFC02EA7E0C383FF87E380FE03E17147F9319>
97 D<B4FCA2121FAAEB1FC0EB7FF0EBE0F8EB807CEB007E143EA2143FA6143EA2147C13
80381EC1F8381C7FE038181F8018207E9F1D>I<EA01FE3807FF80381F0FC0123EA2127C
EB030000FCC7FCA6127C127E003E1360003F13C0EA1F813807FF00EA01FC13147E9317>
I<EB07F8A21300AAEA01F8EA07FEEA1F83EA3E01EA7E00127CA212FCA6127CA2127EEA3E
01EA1F07380FFEFFEA03F818207E9F1D>I<EA01FE3807FF80380F83C0381E01E0383E00
F05A14F812FCB5FCA200FCC7FCA3127CA26C1318121E380F80703807FFE0C6138015147F
9318>I<EB3F80EBFFC03803E3E0EA07C71387120FEB83C0EB8000A5EAFFFCA2EA0F80B0
EA7FF8A213207F9F10>I<B4FCA2121FAAEB0FC0EB3FE0EB61F0EBC0F813801300AD38FF
E7FFA218207D9F1D>104 D<121C123E127FA3123E121CC7FCA6B4FCA2121FB0EAFFE0A2
0B217EA00E>I<B4FCA2121FB3AAEAFFE0A20B207E9F0E>108 D<3AFE0FE03F8090391FF0
7FC03A1E70F9C3E09039407D01F0EB807E121FEB007CAC3AFFE3FF8FFEA227147D932C>
I<38FE0FC0EB3FE0381E61F0EBC0F81380EA1F00AD38FFE7FFA218147D931D>I<48B4FC
000713C0381F83F0383E00F8A248137CA200FC137EA6007C137CA26C13F8A2381F83F038
07FFC00001130017147F931A>I<38FF1FC0EB7FF0381FE1F8EB80FCEB007EA2143E143F
A6143E147E147CEB80FCEBC1F8EB7FE0EB1F8090C7FCA7EAFFE0A2181D7E931D>I<EAFE
3EEB7F80381ECFC0138FA2121FEB030090C7FCABEAFFF0A212147E9316>114
D<EA0FE6EA3FFEEA701EEA600EEAE006A2EAF800EAFFC0EA7FF8EA3FFCEA1FFE1203EA00
1FEAC007A212E0EAF006EAF81EEAFFFCEAC7F010147E9315>I<1203A45AA25AA2123FEA
FFFCA2EA1F00AA1306A5EA0F8CEA07F8EA03F00F1D7F9C14>I<38FF07F8A2EA1F00AD13
01A2EA0F063807FCFF6C5A18147D931D>I<3AFFC7FE1FE0A23A1F00F0030014F8D80F80
1306A29038C1BC0E0007140CEBC3BE3903E31E18A29038F60F380001143001FE13B03900
FC07E0A2EBF80301785BA2903830018023147F9326>119 D<38FFC0FFA2380F80703807
C0606D5A3803E180EA01F36CB4C7FC137E133E133F497E136FEBC7C0380183E0380381F0
48C67E000E7F39FF81FF80A219147F931C>I E /Fc 7 113 df<127012F012F8A2127812
08A31210A31220A21240050E7C840D>59 D<EC01C0EC0780EC1E001478EB01E0EB078001
0EC7FC133813F0EA03C0000FC8FC123C12F0A2123C120FEA03C0EA00F01338130E6D7EEB
01E0EB0078141EEC0780EC01C01A1A7C9723>I<12E01278121EEA0780EA01E0EA007813
1C1307EB03C0EB00F0143C140FEC03C0A2EC0F00143C14F0EB03C049C7FC131C1378EA01
E0EA0780001EC8FC127812E01A1A7C9723>62 D<EBF180380389C038070780EA0E03121C
123C383807001278A3EAF00EA31410EB1C20A2EA703CEB5C40EA308C380F078014147E93
18>97 D<13E01201A2EA00C01300A7120E1213EA23801243A3EA87001207A2120EA25AA2
1320EA3840A31380EA1900120E0B1F7E9E10>105 D<14C0EB01E0A214C090C7FCA7131E
1323EB43801383EA0103A2380207001200A3130EA45BA45BA45BA21230EA78E0EAF1C0EA
6380003EC7FC1328819E13>I<3803C1E038046218EB741CEA0878EB701EA2EA10E01200
A33801C03CA3143838038078147014E0EBC1C038072380EB1E0090C7FCA2120EA45AA2EA
FFC0171D819317>112 D E /Fd 27 122 df<EC3FE0ECE010903801803801031378A290
380700301500A3130EA390B512E0EB0E0090381C01C0A4EC03801338A3EC0700A2137801
701310EC0E20A313609038E00640EC038091C7FC5BA21201EA3180127948C8FC1262123C
1D29829F1A>12 D<EA7FF0EAFFE0127F0C037D8A10>45 D<127012F8A212F012E005057B
840E>I<14021406A2140E141EA2143F142F144F14CF148FEB010FA21302A213041308A2
0110138014071320EB3FFFEB40071380A2EA0100A2120212061204001E14C039FF807FF8
1D207E9F22>65 D<48B512FE39001E001C150C1504A25BA490387804081500A2140C495A
EBFFF8EBF018A23801E010A3EC001048481320A21540A248481380140115001407380F00
1FB512FE1F1F7D9E1F>69 D<90B5FC90381E03C0EC00E0157015785BA44913F0A2EC01E0
15C09038F00700141EEBFFF0EBF01C48487E140F8015803903C00F00A43807801E1508A2
1510000F130ED8FFF01320C7EA03C01D207D9E21>82 D<EBF180380389C038070780EA0E
03121C123C383807001278A3EAF00EA31420EB1C40A2EA703C135C38308C80380F070013
147C9317>97 D<137EEA01C138030080EA0E07121E001C1300EA3C0248C7FCA35AA5EA70
011302EA3004EA1838EA07C011147C9315>99 D<1478EB03F8EB0070A414E0A4EB01C0A2
13F1EA038938070780EA0E03121C123C383807001278A3EAF00EA31420EB1C40A2EA703C
135C38308C80380F070015207C9F17>I<137CEA01C2EA0701120E121C123CEA3802EA78
0CEA7BF0EA7C0012F0A4127013011302EA3804EA1838EA07C010147C9315>I<1478EB01
9CEB033CA2EB07181400A2130EA5EBFFE0EB1C00A45BA55BA55BA5485AA35B1231007BC7
FC12F31266123C1629829F0E>I<EB1E30EB7138EBE0F03801C070EA03801207EB00E05A
A3381E01C0A4EB0380A2EA0E07130B38061700EA01E7EA0007A2130EA21230EA781C485A
EA6070EA3FC0151D7F9315>I<EA01E0120FEA01C0A4485AA448C7FCA2131E1363380E81
80380F01C0120EA2381C0380A438380700A3EB0E1000701320A2131CEB0C4000E0138038
60070014207D9F17>I<13C0EA01E0A213C0C7FCA7120E12131223EA4380EA4700A21287
120EA35AA3EA38401380A21270EA31001232121C0B1F7C9E0E>I<EA03C0121FEA0380A4
EA0700A4120EA45AA45AA45AA3127112E2A4126412380A207C9F0C>108
D<391C0F80F0392630C318394740640C903880680EEB0070A2008E495A120EA34848485A
A3ED70803A3803807100A215E115623970070064D83003133821147C9325>I<381C0F80
382630C0384740601380EB0070A2008E13E0120EA3381C01C0A3EB038400381388A2EB07
08EB031000701330383001C016147C931A>I<137CEA01C338030180000E13C0121E001C
13E0123C1278A338F003C0A3EB07801400EA700F130EEA3018EA1870EA07C013147C9317
>I<3801C1E0380262183804741C1378EB701EA2EA08E01200A33801C03CA31438380380
78147014E0EBC1C038072380EB1E0090C7FCA2120EA45AA2B47E171D809317>I<EBF040
380388C038070580EA0E03121C123C383807001278A3EAF00EA45BA2EA703C135CEA30B8
EA0F381200A25BA45BA2EA0FFE121D7C9315>I<EA1C1EEA266138278380EA47871307EB
0300008EC7FC120EA35AA45AA45A123011147C9313>I<13FCEA0302EA0601EA0C031307
13061300EA0F8013F0EA07F8EA03FCEA003E130E1270EAF00CA2EAE008EA4010EA2060EA
1F8010147D9313>I<EA018013C0EA0380A4EA0700A2EAFFF0EA0700120EA45AA45AA313
20EA7040A21380A2EA3100121E0C1C7C9B0F>I<000E13C0001313E0382301C0EA4381EA
4701A238870380120EA3381C0700A31410EB0E201218A2381C1E40EA0C263807C3801414
7C9318>I<380E0380EA1307002313C0EA4383EA4701130000871380120EA3381C0100A3
1302A25BA25BEA0E30EA03C012147C9315>I<000EEBC1C0001313E3392301C3E0384381
C1384701C015603987038040120EA3391C070080A3EC0100A21306EB0F02000C5B380E13
083803E1F01B147C931E>I<000E13C0001313E0382301C0EA4381EA4701A23887038012
0EA3381C0700A4130E1218A2EA1C1EEA0C3CEA07DCEA001CA25B12F05BEAE060485AEA43
80003EC7FC131D7C9316>121 D E /Fe 1 16 df<EA03C0EA0FF0EA1FF8EA3FFCEA7FFE
A2B5FCA4EA7FFEA2EA3FFCEA1FF8EA0FF0EA03C010107E9115>15
D E /Ff 19 122 df<127812FCA412781200A6127812FCA4127806127D910D>58
D<EB0380A2497EA3497EA2497E131BEB3BF81331A2EB60FCA2EBE0FEEBC07EA248487E90
B5FC481480EB001F4814C00006130FA248EB07E0A239FF803FFEA21F1C7E9B24>65
D<B512F814FF390FC01FC0EC07E0EC01F015F8140015FC157CA2157EA8157CA315F8A2EC
01F0EC07E0EC1FC0B6120014F81F1C7E9B25>68 D<D8FFC0EB03FF6D5B000F15F0D80DF0
130DA3D80CF81319A2017C1331A26D1361A26D13C1A390380F8181A2903807C301A2EB03
E6A2EB01FCA3EB00F8A23AFFC0701FFFA2281C7E9B2D>77 D<EA0FF8EA1C1E383E0F8013
0714C0121C1200137FEA07E7EA1F07123C127C12F8A3EA780B383E13F8EA0FE115127F91
17>97 D<EA03FCEA0E0EEA1C1F123C1278130E00F8C7FCA61278EB0180123C381C0300EA
0E0EEA03F811127E9115>99 D<EA03FCEA0F07381C0380383C01C0127814E012F8A2B5FC
00F8C7FCA3127814607E6C13C0380F03803801FC0013127F9116>101
D<3803F0F0380E1F38EA3C0F3838073000781380A400381300EA3C0FEA1E1CEA33F00030
C7FCA3EA3FFF14C06C13E014F0387801F838F00078A300701370007813F0381E03C03807
FF00151B7F9118>103 D<121E123FA4121EC7FCA6127FA2121FAEEAFFC0A20A1E7F9D0E>
105 D<B4FCA2121FB3A7EAFFE0A20B1D7F9C0E>108 D<39FF0FC07E903831E18F3A1F40
F20780D980FC13C0A2EB00F8AB3AFFE7FF3FF8A225127F9128>I<38FF0FC0EB31E0381F
40F0EB80F8A21300AB38FFE7FFA218127F911B>I<EA01FC380F0780381C01C0003C13E0
387800F0A200F813F8A6007813F0A2383C01E0381E03C0380F07803801FC0015127F9118
>I<EAFE3E1347381E8F80A3381F070090C7FCAAEAFFE0A211127F9114>114
D<EA1FD8EA3078EA601812E0A2EAF000EAFF80EA7FE013F0EA1FF8EA07FCEA007CEAC01C
A212E01318EAF830EACFC00E127E9113>I<1203A45AA25AA2EA3FFC12FFEA1F00A9130C
A4EA0F08EA0798EA03F00E1A7F9913>I<38FF07F8A2EA1F00AC1301120F380786FFEA01
F818127F911B>I<38FFC1FCA2381F00601380000F13C0A23807C180A23803E300A213F7
EA01F613FE6C5AA21378A2133016127F9119>I<38FFC1FCA2381F00601380000F13C0A2
3807C180A23803E300A213F7EA01F613FE6C5AA21378A21330A25B1270EAF8E05BEAF980
0073C7FC123E161A7F9119>121 D E /Fg 84 126 df<127012F8B012701200A5127012
F8A31270051C779B18>33 D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA
3803387C0780A2EAEE0F1400A25B131EA2133EEA7C3CA2EA387CEA0078A213F85B12015B
A212035BA21207EB8380EB87C0120FEB0EE0A2121F121EA2123E383C07C0A23818038013
247E9F18>37 D<EA01C0EA07E0487EEA0E70487EA4EB73F813F313E3380FC1C0EBC38013
831303381F0700EA3F87EA7B8EEA71CEEAE1FC12E0137CEB7870A2EA70FE387FFFE0EA3F
C7380F03C0151C7F9B18>I<1238127CA2127E123E120EA3121CA2123812F812F012C007
0E789B18>I<137013F0EA01E0EA03C0EA0780EA0F00121E121C5AA25AA45AA81270A47E
A27E121E7EEA0780EA03C0EA01F0120013700C24799F18>I<126012F012787E7E7EEA07
801203EA01C0A2EA00E0A41370A813E0A4EA01C0A2EA03801207EA0F00121E5A5A5A1260
0C247C9F18>I<EA01C0A4EA41C138F1C780EAFDDF387FFF00EA1FFCEA07F0A2EA1FFCEA
7FFF38FDDF80EAF1C73841C100EA01C0A411147D9718>I<136013F0A7387FFFC0B512E0
A26C13C03800F000A7136013147E9718>I<121C123E127E127F123F121F1207120E121E
127C12F81260080C788518>I<387FFFC0B512E0A26C13C013047E8F18>I<1230127812FC
A2127812300606778518>I<1303EB0780A2130F14005B131EA2133E133C137C1378A213
F85B12015B12035BA212075B120F90C7FCA25A121E123E123CA2127C127812F85AA21260
11247D9F18>I<EA01F0EA07FC487EEA1F1FEA1C0738380380007813C0EA7001A238E000
E0A9EAF001007013C0A2EA780300381380381C0700EA1F1FEA0FFE6C5AEA01F0131C7E9B
18>I<EA01801203A21207120F123F12FF12FB12431203B0EA7FFCEAFFFEEA7FFC0F1C7B
9B18>I<EA03F0EA0FFEEA3FFF387C0F80387003C0EAE00138F000E0A21260C7FCA2EB01
C0A21303EB0780EB0F00131E5B5B5B485AEA07C0485A381E00E05AEA7FFFB5FC7E131C7E
9B18>I<EA07F8EA1FFE487E38780780EB03C0130112301200EB0380A2EB0F00EA03FF5B
7F38000780EB03C01301EB00E0A312F0A2EB01C01303387C0780383FFF006C5AEA03F813
1C7E9B18>I<131F5B1377A213E7120113C7EA038712071307120E121E123C1238127812
F0B512F8A338000700A6EB7FF0A3151C7F9B18>I<383FFF80A30038C7FCA8EA3BF8EA3F
FE7F383C0780383003C0EA0001EB00E0A2126012F0A238E001C0EA7003387C0F80383FFF
00EA1FFCEA03F0131C7E9B18>I<137E48B4FC00071380380F83C0EA1E03121C38380180
90C7FC5AA2EAE1F8EAE7FEB5FC38FE078038F803C0EAF001EB00E05A7E1270A3383801C0
EA3C03381E0780380FFF006C5AEA01F8131C7E9B18>I<12E0B512E0A214C038E00380EB
0700C65A131E131C5BA25B13F05BA2485AA3485AA448C7FCA7131D7E9C18>I<EA03F8EA
0FFE487E383E0F80EA3803387001C0A438380380EA3C07381FFF00EA07FC487EEA1F1F38
3C0780387001C000F013E0EAE000A4387001C0EA7803383E0F80381FFF006C5AEA03F813
1C7E9B18>I<EA03F0EA0FFC487EEA3C0F38780780EA700338E001C0A314E0A21270EA78
03EA3C0FEA1FFFEA0FFEEA03F0C7FCEB01C0A338300380EA7807EB0F00133EEA3FFCEA1F
F0EA07C0131C7E9B18>I<1230127812FCA2127812301200A81230127812FCA212781230
0614779318>I<1218123C127EA2123C12181200A81218123C127EA2123E121E120E121C
123C127812F01260071A789318>I<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07F0
485AEA3F8048C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E01303
EB00C013187E9918>I<387FFFC0B512E0A3C8FCA4B512E0A36C13C0130C7E9318>I<1260
12F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE00
485AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>I<EA0FF0EA3FFC48B4FCEA70
0F38F00380A2EA600738000F00133E5BEA01F05B485AA55BC8FCA5EA0380487EA36C5A11
1C7D9B18>I<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5380FFF80A3EA0E03
381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>65 D<EA7FFCB5FC6C1380381C03
C01301EB00E0A4130114C01307381FFF80140014C0EA1C03EB00E014F01470A414F014E0
1303387FFFC0B51280387FFE00141C7F9B18>I<EBF8E0EA03FEEA07FFEA0F07EA1E03EA
3C01EA38005AA214005AA8127014E0A27E123C381E01C0EA0F073807FF803803FE00EA00
F8131C7E9B18>I<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E01300A214F01470A814
F014E0A2130114C01303EB0F80387FFF00485AEA7FF8141C7F9B18>I<B512F0A3381C00
70A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18>I<B512
F8A3381C0038A41400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0A3151C7F9B18>I<
3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5EB0FF0131F130F38
7001C0A213031238A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B18>I<387F07F038
FF8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B
18>I<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>I<387F07F0
38FF87F8387F07F0381C03C0EB07801400130E131E5B13385B13F0121DA2EA1FB8A2131C
121EEA1C0EA27FA2EB0380A2EB01C0387F03F038FF87F8387F03F0151C7F9B18>75
D<EAFFC0A3001CC7FCB114E0A5B5FCA3131C7E9B18>I<38FC01F8EAFE03A2383B06E0A4
138EA2EA398CA213DCA3EA38D8A213F81370A21300A638FE03F8A3151C7F9B18>I<387E
07F038FF0FF8387F07F0381D81C0A313C1121CA213E1A313611371A213311339A31319A2
131D130DA3EA7F07EAFF87EA7F03151C7F9B18>I<EA0FFE383FFF804813C0EA7803EA70
0100F013E0EAE000B0EAF001007013C0EA7C07EA7FFF6C1380380FFE00131C7E9B18>I<
EAFFFEEBFF8014C0EA1C03EB01E013001470A514E01301EB03C0EA1FFF1480EBFE00001C
C7FCA8B47EA3141C7F9B18>I<EA0FFE383FFF804813C0EA7803EA700100F013E0EAE000
AE1370A2EAF079387039C0EA783FEA7FFF6C1380380FFE00EA000FEB0780A2EB03C01301
A213227E9B18>I<EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF
005BA2EA1C0F7FEB0380A5149CA3387F01F8EAFF81387F00F0161C7F9B18>I<3803F1C0
EA1FFF5AEA7C0FEA7003EAE001A390C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03
C01301EB00E0A2126012E0130100F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<
387FFFF8B5FCA238E07038A400001300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C00
70B36C13E0EA0F01380783C03803FF806C1300EA007C171C809B18>I<38FE03F8EAFF07
EAFE03383C01E0001C13C0A3EA1E03000E1380A438070700A4EA038EA4EA018C13DCA3EA
00D813F8A21370151C7F9B18>I<38FE03F8A338700070A36C13E0A513F8EA39FC13DCA2
001913C0A3138CA2EA1D8DA31305000D1380EA0F07A2EA0E03151C7F9B18>I<387F0FE0
139F130F380E0700120FEA070E138EEA039C13DCEA01F8A212005B137013F07F487E13DC
EA039E138EEA070F7F000E13801303001E13C0387F07F000FF13F8007F13F0151C7F9B18
>I<38FE03F8EAFF07EAFE03381C01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA
01DCA3EA00F8A21370A9EA01FC487E6C5A151C7F9B18>I<EAFFF8A3EAE000B3ACEAFFF8
A30D24779F18>91 D<EAFFF8A3EA0038B3ACEAFFF8A30D247F9F18>93
D<387FFFC0B512E0A26C13C013047E7F18>95 D<EA0FF0EA1FFC487EEA3C0FEA18073800
0380A213FF1207121FEA7F03127812E0A3EAF007EA780F383FFFF8EA1FFDEA07F015147E
9318>97 D<127E12FE127E120EA5133EEBFF80000F13C0EBC1E01380EB0070120E1438A6
000F1370A2EB80E013C1EBFFC0000E138038063E00151C809B18>I<EA01FEEA07FF001F
1380EA3E073838030048C7FCA25AA61270EB01C01238EA3E03381FFF8000071300EA01FC
12147D9318>I<EB1F80133F131F1303A5EA03E3EA0FFBEA1FFFEA3C1FEA380FEA700713
0312E0A6EA7007A2EA380FEA3C1F381FFFF0380FFBF83803E3F0151C7E9B18>I<EA01F0
EA07FCEA1FFEEA3E0F38380780EA7003A238E001C0A2B5FCA300E0C7FC1270EB01C01238
EA3E07381FFF8000071300EA01F812147D9318>I<EB1F80EB7FC0EBFFE013E13801C0C0
1400A3387FFFC0B5FCA23801C000AEEA7FFFA3131C7F9B18>I<3801E1F03807FFF85A38
1E1E30381C0E00487EA5EA1C0EEA1E1EEA1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813
E0387801F038700070481338A4007813F0EA7E03381FFFC06C13803801FC00151F7F9318
>I<127E12FE127E120EA5133EEBFF80000F13C013C1EB80E01300120EAB387FC7FC38FF
E7FE387FC7FC171C809B18>I<EA0380EA07C0A3EA0380C7FCA4EA7FC012FF127F1201AE
B5FCA3101D7C9C18>I<127E12FE127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0F
F87F139C130EEA0E0F7FEB038014C0387FC7F812FF127F151C7F9B18>107
D<EAFFC0A31201B3A4B51280A3111C7D9B18>I<38F9C1C038FFF7F013FF383E3E38EA3C
3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>I<EA7E3E38FEFF80007F13C0EA0F
C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC1714809318>I<EA01F0EA0FFE487E
383E0F80EA3803387001C0A238E000E0A5EAF001007013C0EA7803383C0780EA3E0F381F
FF006C5AEA01F013147E9318>I<EA7E3E38FEFF80007F13C0380FC1E01380EB0070120E
1438A6000F1370A2EB80E013C1EBFFC0000E1380EB3E0090C7FCA7EA7FC0487E6C5A151E
809318>I<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6EA7007A2EA380F
EA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38FF0FC0
EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E9318>I<EA07F7
EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA03FEEA001F38600780EAE003A212
F038F80F00B5FC13FCEAE7F011147D9318>I<487E1203A4387FFFC0B5FCA238038000A9
144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EAFE0FEA7E07EA0E
00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF000FF13F8007F13
F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A2137015147F9318
>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD000D1380A3138D
EA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA078EEA039EEA01DC
13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000FF13F8007F13F0
15147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207EB0700A2EA0387
A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC121E15
1E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B13F8485AEA03C0
485A380F0070121E5A5AB512F0A314147F9318>I<EB07E0131F137FEB780013E0AB1201
EA7FC0485AA26C7EEA01E01200AB1378EB7FE0131F130713247E9F18>I<126012F0B3B0
12600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005BAB
EA03C012FF90C7FC127C13247E9F18>I E /Fh 45 120 df<3801F1C012031207130112
0EA7EAFFF1A2EA0E01B0121D809C16>13 D<EA07C0EA1FF0EA3878EA701CEA601EEAE00E
EAC00F124013071200A2130F130E131E131C133C137813F0EA01E013C0EA0380EA070012
0E5A5A5AB5FCA2101C7E9B15>50 D<007FB512C0B612E0C9FCA8B612E06C14C01B0C7E8F
20>61 D<131C133EA2132E1367A2EBE78013C713C300017F1383138100037F1301486C7E
A21206000E1378380FFFF8A2381C003CA2121800387FA248131F80126000E0EB0780191D
7F9C1C>65 D<EAFFF813FF38F00F80EB03C0EB01E0EB00F0A5EB01E0EB07C0B51280EBFE
00EBFF8038F01FC0EB03E0EB01F013001478A514F0EB01E0EB07C0B51280EBFC00151D7C
9C1C>I<EB3FC03801FFF8EA03C03807801848C7FC121E5AA25AA35AA91278A37EA27E6C
1308380780183803C0783801FFF038003F80151F7D9D1B>I<EAFFFC13FF38F00F80EB03
E01301EB00F014781438143CA2141C141EA8143CA3147814F0A2EB03E0EB0FC0B5120013
FC171D7C9C1E>I<B512C0A200F0C7FCABB51280A200F0C7FCACB512C0A2121D7C9C19>I<
B51280A200F0C7FCABB5FCA200F0C7FCAE111D7C9C18>I<EB3FC0EBFFF83803E07C3807
801C380F000C001E1300121C123C12381278A25AA6EB03FCA2EB001C1278A21238123C12
1C121E7EEA07803803E07C3800FFF8EB3FC0161F7E9D1C>I<00F013F0ADB5FCA2EAF000
AE141D7C9C1D>I<12F0B3AB041D7C9C0C>I<00F0133C147814F0EB01E0EB03C0EB0780EB
0F00131E5B5B5B5BEAF1F012F3EAF778EAFE7CEAFC3C7FEAF81F487E14801307EB03C014
E01301EB00F0A21478147C161D7C9C1D>75 D<12F0B3A9B5FCA2101D7D9C16>I<00FCEB
07E0A300EE130DA300E71319A3EB803900E31331EBC071A200E11361A2EBE0E1A200E013
C113F1EB7181A3EB3B01A3131EA313001B1D7C9C24>I<00FC1370A27E12EE12EF12E7A2
138012E313C0A2EAE1E0A212E013F013701378A2133CA2131C131E130EA2130F130714F0
1303A2141D7C9C1D>I<133F3801FFE0487F3807C0F8380F807C381E001E003E131F003C
7F48EB0780A348EB03C0A86C130700781480A2007C130F003C1400003E5B6C133E6C6C5A
6C6C5A6CB45A6C5BD8003FC7FC1A1F7E9D1F>I<EAFFFC13FF38F00F80EB03C0EB01E0EB
00F0A6EB01E01303EB0FC0B51280EBFE0000F0C7FCAD141D7C9C1B>I<133F3801FFE048
7F3807C0F8380F807C48487E003E7F003C7F48EB0780A348EB03C0A90078EB0780A2130E
393C0F0F00383E079F381E03DE380F83FC6C6C5A6CB45A6C7F38003F78EB003C143E80EC
0F801A237E9D1F>I<EAFFF813FF38F00F80EB03C0EB01E0EB00F0A5EB01E01303EB0FC0
B51280140013F8EAF03C131C131E7FA2EB0780A2EB03C0A2EB01E0EB00F0A21478151D7C
9C1B>I<EA03F8EA0FFEEA1C0F487E487E0060C7FC12E0A47E1278127FEA3FE0EA1FFCEA
07FEEA01FF38001F801307EB03C0A21301A400C01380EAE00338F00700EA7C0EEA1FFCEA
07F0121F7E9D17>I<B61280A2D8001EC7FCB3A9191D7F9C1C>I<00F01370B3A5007813E0
A2383C01C0381E0380EA0F073807FE00EA01F8141E7C9C1D>I<00F0EB0380A200781400
5CA26C130EA2123E001E5BA26C5BA36C6C5AA23803C06014E0A26C6C5A13E1A23800F180
13F30173C7FCA2137B133EA2131C191D7F9C1C>I<00F001F81370A3007801B81360D901
9C13E0A3D83C03EB01C0141E140E001E15809038070F0313061407000F1500010E138713
0C0007EB0386A2019C138E019813CE0003EB01CCA339019000C801D013D801F013F85B00
001470241D7F9C27>I<00F8130E007C131E003C5B6C13386C13785C380781E03803C1C0
EA01C3EBE780D800F7C7FC137E133E133CA2137E1377EBE780EA01E33803C1C0EB81E048
C67E487F000E1378487F003C133E487F00707F00F01480191D7F9C1C>I<00F8EB01E000
7C14C06CEB0380001E1307001F1400380F800E0007131EEBC01C3803E03C000113386D5A
000013F0EB78E0EB7DC0133F6D5A91C7FC7FAC1B1D809C1C>I<387FFFF0A2380001E013
0314C013071480EB0F005B131E133E133C5B13F85B12015B485A12075B120F90C7FC121E
123E123C127C1278B512F0A2141D7E9C19>I<EA0FC0EA3FF0EA7FF8EA7038EA401C1200
A213FC120F123FEA781C12E0A3EAF07CEA7FFC13DCEA3F1C0E127E9114>97
D<EA03F0EA0FFCEA1FFEEA3C0EEA7802EA70005AA61270EA7802EA3C0EEA1FFEEA0FFCEA
03F00F127F9112>99 D<1307ABEA07C7EA1FF7EA3FFFEA3C1FEA7807127012E0A61270EA
780FEA3C1FEA3FFFEA1FF7EA07C7101D7F9C15>I<EA07E0EA0FF0EA3FF8EA3C3CEA700C
130EEAFFFEA3EAE000A31270EA7802EA3C0EEA1FFEEA0FFCEA03F00F127F9112>I<13FC
12011203EA0700120EA7EAFFE0A2EA0E00B00E1D809C0D>I<3807C3C0EA0FFF5A383838
00487EA56C5AEA3FF05BEA77C00070C7FCA2EA3FFC13FF481380EA700738E001C0A3EAF0
03387C0F80383FFF006C5AEA07F8121B7F9115>I<12E0ABEAE3E0EAEFF0EAFFF8EAF83C
EAF01C12E0AD0E1D7D9C15>I<12F0A41200A71270B2041D7E9C0A>I<12E0B3AB031D7D9C
0A>108 D<38E3F03F39EFF8FF80D8FFFD13C039F81F81E038F00F00EAE00EAD1B127D91
22>I<EAE3E0EAEFF0EAFFF8EAF83CEAF01C12E0AD0E127D9115>I<EA03F0EA0FFC487EEA
3C0F38780780EA700338E001C0A5EAF00300701380EA7807383C0F00EA1FFE6C5AEA03F0
12127F9115>I<EAE3E0EAEFF8EAFFFCEAF83EEAE01E130E1307A5130F130EEAF01EEAF8
7CEAFFF8EAEFF0EAE3E0EAE000A8101A7D9115>I<EAE38012E712EFEAFC005A5AA25AAB
09127D910E>114 D<EA1FC0EA3FF0127FEAF030EAE000A27E127FEA3FC0EA1FE0EA01F0
EA0038A21280EAF078EAFFF0EA7FE0EA1FC00D127F9110>I<121CA6EAFFE0A2EA1C00AC
1320EA1FF0120FEA07C00C187F970F>I<39E03E0380A3D870371300EB7707A213733838
E38EA33818E18C381CC1CC001D13DCA2380D80D8000F13F8A20007137019127F911C>
119 D E /Fi 68 124 df<EB7E1F3901C1B180390303E3C0000713C3000EEBC180903801
C000A6B512FC380E01C0B0387F87FC1A1D809C18>11 D<137E3801C180EA0301380703C0
120EEB018090C7FCA5B512C0EA0E01B0387F87F8151D809C17>I<EB7FC0EA01C1EA0303
1207EA0E01A7B5FCEA0E01B0387FCFF8151D809C17>I<EA6060EAF0F0EAF8F8EA6868EA
0808A3EA1010A2EA2020EA4040EA80800D0C7F9C15>34 D<126012F012F812681208A312
10A2122012401280050C7C9C0C>39 D<1380EA0100120212065AA25AA25AA35AA412E0AC
1260A47EA37EA27EA27E12027EEA0080092A7C9E10>I<7E12407E12307EA27EA27EA37E
A41380AC1300A41206A35AA25AA25A12205A5A092A7E9E10>I<126012F0A212701210A4
1220A212401280040C7C830C>44 D<EAFFE0A20B0280890E>I<126012F0A2126004047C
830C>I<130113031306A3130CA31318A31330A31360A213C0A3EA0180A3EA0300A31206
A25AA35AA35AA35AA35AA210297E9E15>I<EA03C0EA0C30EA1818EA300CA2EA700EEA60
06A2EAE007ADEA6006A2EA700EEA300CA2EA1818EA0C30EA07E0101D7E9B15>I<5A1207
123F12C71207B3A5EAFFF80D1C7C9B15>I<EA07C0EA1830EA201CEA400C130EEAF00F12
F81307A21270EA000F130EA2131CA213381370136013C0EA0180EA0300EA0601120C1218
EA1002EA3FFE127F12FF101C7E9B15>I<130CA2131C133CA2135C13DC139CEA011C1203
12021204120C1208121012301220124012C0B512C038001C00A73801FFC0121C7F9B15>
52 D<EA03E0EA0C30EA1008EA200C13061260A21270A2EA7C0CEA3E18EA3FB0EA1FE0EA
07F013F8EA18FCEA307EEA601E130FEAC0071303A4EA60021304EA300CEA1C10EA07E010
1D7E9B15>56 D<126012F0A212601200AA126012F0A2126004127C910C>58
D<126012F0A212601200AA126012F0A212701210A41220A212401280041A7C910C>I<00
7FB512C0B612E0C9FCA8B612E06C14C01B0C7E8F20>61 D<EA0FE0EA3038EA401CEAE00E
12F0A3EA000C131C1330136013C0138012011300A6C7FCA51203EA0780A2EA03000F1D7E
9C14>63 D<1306A3130FA3EB1780A2EB37C01323A2EB43E01341A2EB80F0A338010078A2
EBFFF83802003CA3487FA2000C131F80001E5BB4EBFFF01C1D7F9C1F>65
D<B512C0380F00788080140E140FA4140E141E5C14F8EBFFF0EB003C8080801580A5EC0F
00A2141E1478B512E0191C7F9B1D>I<90381F8080EBE0613801801938070007000E1303
5A14015A00781300A2127000F01400A8007014801278A212386CEB0100A26C13026C5B38
0180083800E030EB1FC0191E7E9C1E>I<B512C0380F00F0143C140E80A2EC038015C014
01A215E0A815C0A21403158014071500140E5C1470B512C01B1C7E9B20>I<B512FC380F
003C140C1404A214061402A213011400A35B13FF13037FA3140113001402A31406A2140C
143CB512FC181C7E9B1C>I<B512F8380F007814181408A2140C1404A213011400A35B13
FF13037FA490C7FCA8EAFFF8161C7E9B1B>I<39FFF0FFF0390F000F00AC90B5FCEB000F
AD39FFF0FFF01C1C7F9B1F>72 D<EAFFF0EA0F00B3A8EAFFF00C1C7F9B0F>I<EAFFF8EA
0F8090C7FCB01408A31418A2141014301470EB01F0B5FC151C7E9B1A>76
D<B46CEBFF80000FECF800A2390BC00178A33809E002A23808F004A3EB7808A3EB3C10A3
EB1E20A3EB0F40A2EB0780A3EB0300121C3AFF8307FF80211C7E9B26>I<B4EB1FF0390F
8003809038C00100120BEA09E0EA08F0A21378133C133E131E130F14811307EB03C1EB01
E114F113001479147D143D141FA2808080121CB46C7E1C1C7F9B1F>I<EB3F80EBE0E038
03803848487E000E7F487F003C148000381303007814C0A20070130100F014E0A8007014
C000781303A200381480003C1307001C14006C130E6C5B6C6C5A3800E0E0EB3F801B1E7E
9C20>I<B51280380F00E01478143C141C141EA5141C143C147814E0EBFF8090C7FCACEA
FFF0171C7E9B1C>I<EB3F80EBE0E03803803848487E000E7F487F003C14800038130300
7814C0A20070130100F014E0A8007014C000781303A200381480383C0E07D81C11130038
0E208E0007135C3803A0783900F0E020133FEB0060EC3060EC38E0EC3FC0A2EC1F80EC0F
001B257E9C20>I<B5FC380F01E0EB007880141C141EA4141C143C5CEB01E001FFC7FCEB
01E0EB0070147880A61510A2141CA239FFF00E20C7EA03C01C1D7E9B1F>I<3807E080EA
1C19EA30051303EA600112E01300A36C13007E127CEA7FC0EA3FF8EA1FFEEA07FFC61380
130FEB07C0130313011280A300C01380A238E00300EAD002EACC0CEA83F8121E7E9C17>
I<007FB512C038700F010060130000401440A200C014201280A300001400B1497E3803FF
FC1B1C7F9B1E>I<39FFF01FF0390F000380EC0100B3A26C1302138000035BEA01C03800
E018EB7060EB0F801C1D7F9B1F>I<3AFFE1FFC0FF3A1F003E003C001E013C13186C6D13
10A32607801F1320A33A03C0278040A33A01E043C080A33A00F081E100A39038F900F301
7913F2A2017E137E013E137CA2013C133C011C1338A20118131801081310281D7F9B2B>
87 D<39FFF003FC390F8001E00007EB00C06D13800003EB01006D5A000113026C6C5A13
F8EB7808EB7C18EB3C10EB3E20131F6D5A14C06D5AABEB7FF81E1C809B1F>89
D<EA0808EA1010EA2020EA4040A2EA8080A3EAB0B0EAF8F8EA7878EA30300D0C7A9C15>
92 D<EA1FC0EA3070EA78387F12301200A2EA01FCEA0F1C12381270126000E01340A3EA
603C38304E80381F870012127E9115>97 D<12FC121CAA137CEA1D87381E0180381C00C0
14E014601470A6146014E014C0381E018038190700EA10FC141D7F9C17>I<EA03F8EA0C
0CEA181E1230EA700CEA600012E0A61260EA70021230EA1804EA0C18EA03E00F127F9112
>I<EB1F801303AAEA03F3EA0E0BEA1807EA30031270126012E0A6126012701230EA1807
EA0E1B3803E3F0141D7F9C17>I<EA07E0EA0C30EA1818EA300CEA700EEA600612E0EAFF
FEEAE000A41260EA70021230EA1804EA0C18EA03E00F127F9112>I<13F8EA018CEA071E
1206EA0E0C1300A6EAFFE0EA0E00B0EA7FE00F1D809C0D>I<EB03803807C4C0EA1C7838
38388038301800EA701CA4EA3018EA38386C5AEA27C00020C7FCA21230EA3FF86CB4FC14
80EA2003386001C0EAC000A33860018038300300EA1C0EEA07F8121C7F9215>I<12FC12
1CAA137C1387EA1D03001E1380121CAD38FF9FF0141D7F9C17>I<1218123CA21218C7FC
A712FC121CB0EAFF80091D7F9C0C>I<13C0EA01E0A2EA00C01300A7EA07E01200B3A212
60EAF0C012F1EA6180EA3E000B25839C0D>I<12FC121CAAEB0FE0EB0780EB06005B1310
5B5B13E0121DEA1E70EA1C781338133C131C7F130F148038FF9FE0131D7F9C16>I<12FC
121CB3A9EAFF80091D7F9C0C>I<39FC7E07E0391C838838391D019018001EEBE01C001C
13C0AD3AFF8FF8FF8021127F9124>I<EAFC7CEA1C87EA1D03001E1380121CAD38FF9FF0
14127F9117>I<EA03F0EA0E1CEA1806487E00701380EA600100E013C0A600601380EA70
0300301300EA1806EA0E1CEA03F012127F9115>I<EAFC7CEA1D87381E0180001C13C0EB
00E0A21470A614E0A2EB01C0001E1380381D0700EA1CFC90C7FCA7B47E141A7F9117>I<
3803E080EA0E19EA1805EA3807EA7003A212E0A61270A2EA38071218EA0E1BEA03E3EA00
03A7EB1FF0141A7F9116>I<EAFCE0EA1D38EA1E78A2EA1C301300ACEAFFC00D127F9110>
I<EA1F90EA2070EA4030EAC010A212E0EAF800EA7F80EA3FE0EA0FF0EA00F8EA80381318
12C0A2EAE010EAD060EA8FC00D127F9110>I<1204A4120CA2121C123CEAFFE0EA1C00A9
1310A5120CEA0E20EA03C00C1A7F9910>I<38FC1F80EA1C03AD1307120CEA0E1B3803E3
F014127F9117>I<38FF07E0383C0380381C0100A2EA0E02A2EA0F06EA0704A2EA0388A2
13C8EA01D0A2EA00E0A3134013127F9116>I<39FF3FC7E0393C0703C0001CEB01801500
130B000E1382A21311000713C4A213203803A0E8A2EBC06800011370A2EB803000001320
1B127F911E>I<38FF0FE0381E0700EA1C06EA0E046C5AEA039013B0EA01E012007F1201
1338EA021C1204EA0C0E487E003C138038FE1FF014127F9116>I<38FF07E0383C038038
1C0100A2EA0E02A2EA0F06EA0704A2EA0388A213C8EA01D0A2EA00E0A31340A25BA212F0
00F1C7FC12F312661238131A7F9116>I<EA7FFCEA70381260EA407013F013E0EA41C012
031380EA0700EA0F04120E121CEA3C0CEA380812701338EAFFF80E127F9112>I<B512F0
1401808B15>I E /Fj 47 122 df<1478137C13FC12013803C0005B1207A838FFFC78A3
EA0780B3152480A31A>12 D<EAFFF8A30D03808C10>45 D<12F0A404047B830E>I<1340
EA01C0120712FFA212FB1203B3A7B5FCA310227CA118>49 D<EA03F0EA0FFC487EEA3C1F
38300780387003C0126000E013E0EAC0011240A21200A3EB03C0A2EB0780A2EB0F00131E
5B5B5B485A5B485A48C7FC120E5A5A5AB512E0A313227EA118>I<EA03F0EA07FCEA1FFF
EA3E0F38380780387003C01220A21200A3EB0780A2EB0F00133EEA03FC5B13FEEA000FEB
0780EB03C0A2EB01E0A5128038C003C012E038700780EA3C0F381FFF00EA0FFCEA03F013
237EA118>I<131FA2132FA2136F13EF13CF1201A2EA038FA21207130F120F120E121E12
3CA21278A212F0B512F8A338000F00A915217FA018>I<387FFF80A30078C7FCA9EA79F8
EA7BFCEA7FFFEB0F80EA7E07387C03C01278380001E0A7384003C0A212E038700780387C
1F00EA3FFEEA0FFCEA03F013227EA018>I<137E48B4FC5AEA07C148C7FC121EA25AA25A
A213F8EAF1FEEAF7FF38FF0F80EAFC0738F803C0A2130100F013E0A51270A21278EB03C0
1238003C1380EA1C07381F0F00EA0FFE6C5AEA01F013237EA118>I<B512E0A3C7FCEB01
C0EB038013071400130E131E131C133C13381378A25BA25B1201A3485AA5485AA713217E
A018>I<EB0F80A2497EA2131DEB3DE013391338EB78F0A2EB7070EBF078A213E000017F
A213C000037FA2138000077FA290B5FC481480A2380E0007001EEB03C0A24814E01401A2
4814F01400A24814F81D237FA220>65 D<EB0FF0EB7FFC90B5FC3801F01F3807C00749C7
FC48C8FC121E123E123CA25AA35AA91278A37EA2123E121E7E6C6C1380EBC0033801F00F
6CB51200EB7FFCEB0FF019257DA31F>67 D<EAFFFEEBFFC08038F003F0EB00F8147C8014
1E80A2EC0780A3EC03C0A915801407A3EC0F005C141E5C14F81303B512E05C49C7FC1A23
7BA223>I<B512F0A300F0C7FCACB512E0A300F0C7FCAEB512F8A315237BA21D>I<B512F0
A300F0C7FCADB512C0A300F0C7FCB014237BA21C>I<EB0FF0EB3FFE90B512803801F80F
3803E003D80780C7FC48C8FC121EA25AA25AA35AA6ECFFC0A300781303A37EA27EA27EEA
0780EA03E03801F8076CB5FC013F1300EB0FF81A257DA321>I<00F0131EAFB512FEA338
F0001EB117237BA222>I<12F0B3B104237CA20D>I<12F0B3AEB512C0A312237BA21A>76
D<00FC147E6C14FEA300F7EB01DEA3EB800300F3149EA2EBC007A200F1141EA2EBE00F00
F0130EA2EBF01EA2EB701CEB783CA2EB3838EB3C78A2EB1C70A2EB1EF0EB0EE0A2130FEB
07C0A390C7FC1F237BA22A>I<EAFFFEEBFF8014C038F003E0EB00F01478A2143CA61478
A214F0EB03E0B512C01480EBFE0000F0C7FCAF16237BA21F>80 D<EAFFFCEBFF8014C038
F003E0EB00F014781438143CA51438147814F0EB03E0B512C01480EBFE00EAF01E7FA2EB
0780130314C0EB01E0A2EB00F0A21478A2143C141EA2140F18237BA21F>82
D<B612F0A3D8000FC7FCB3AE1C237EA221>84 D<00F0133CB3A900781378A36C13F0381E
01E0EA1F87380FFFC000031300EA00FC16247BA221>I<EA07F0EA3FFC487EEA781FEA40
0F38000780A4137FEA07FF121FEA3E07127812F0A3130FEA7C1FEA7FFFEA3FF7EA1F8711
167E9517>97 D<12F0AD13F8EAF3FEB5FC38FE0F80EAF80738F003C0A2EB01E0A7130314
C0A238F80780EAFE1F38F7FF00EAF3FCEAF1F813237DA219>I<EA01FCEA07FF481380EA
1F03EA3C0148C7FCA2127012F0A61278A36C1340381F03C0EA0FFF6C13803801FC001216
7E9516>I<EB01E0ADEA03E1EA0FF9EA1FFFEA3F07EA3C03EA7801A212F0A81278130312
3CEA3E0FEA1FFDEA0FF9EA03E113237EA219>I<EA01F8EA07FE487E381F0780383C03C0
EA7801A2387000E0B5FCA300F0C7FCA312701278127C6C1340381F03C0EA0FFF6C138038
00FC0013167F9516>I<137FEA01FF5AEA07C013005AA8EAFFF8A3EA0F00B3102380A20F>
I<3803F078380FFFF85A383E1F00EA3C0F38780780A5383C0F00EA3E1FEA1FFE485AEA33
F00070C7FCA21278EA3FFEEBFFC06C13E04813F0EA780138F000F81478A4007813F0383E
03E0381FFFC06C13803801FC0015217F9518>I<12F0ADEAF1F8EAF3FCEAF7FEEAFE1EEA
F80FA212F0B010237CA219>I<12F0A41200A912F0B3A404237DA20B>I<12F0B3B104237D
A20B>108 D<39F0F807C039F3FE1FF039F7FF3FF839FE0F707800FCEBE07C39F807C03C
A200F01380AF1E167C9527>I<EAF1F8EAF3FCEAF7FEEAFE1EEAF80FA212F0B010167C95
19>I<EA01FCEA07FF481380381F07C0383C01E0387800F0A20070137000F01378A60078
13F0A2EA7C01383E03E0381F07C0380FFF806C1300EA01FC15167F9518>I<EAF0F8EAF3
FEB5FC38FE1F80EAF80738F003C0A214E01301A6130314C0130700F81380EAFE1F38F7FF
00EAF3FCEAF1F800F0C7FCAA13207D9519>I<3803E1E0EA07F9EA1FFD130FEA3C03127C
EA780112F812F0A612F812781303123CEA3F0FEA1FFDEA0FF9EA03E1EA0001AA13207E95
19>I<EAF0E012F312F7EAFF005A5A5AA25AAE0B167C9511>I<EA07F0EA1FFCEA3FFEEA3C
0EEA78061300A2127C123F13F0EA1FF8EA0FFCEA01FEEA001F130FA312C0EAF81EEAFFFE
EA3FFCEA0FF010167F9513>I<121EA6EAFFFCA3EA1E00AE1308EA1F1CEA0FFC13F8EA07
C00E1C7F9B12>I<EAF00FB1131FEAF83FEA7FFF13CFEA1F0F10167C9519>I<38F001E0A2
12F8387803C0A2003C13801307A2001E13005BA2EA0E0EEA0F1EA2EA071C139C13BCEA03
B8A213F86C5AA213167F9516>I<39F007803CEB0FC0A2D8780D1378131D14E0131CD83C
1813F0133814F0001C14E0001E137113701479000EEB39C01360000F133B00071480141B
EBC01FA2000314001E167F9521>I<007813F0387C01E0383E03C0EA1E07000F13803807
8F0013DEEA03FE6C5A6C5A137013F8487EEA03DC139EEA078F380F0780121EEB03C0383C
01E0387800F000F813F81516809516>I<38F001E0A2387803C0A2127C383C0780A2121E
EB0F00A2120F130E131E1207139C1203139813B8120113F01200A25BA212015BA2485A12
07007FC7FCA2127C13207F9516>I E /Fk 35 91 df<1230127812F81278127005057C84
0D>46 D<14011403A21406A2140CA214181430A21460A214C0A2EB0180A2EB0300A21306
A25B5BA25BA25BA25BA2485AA248C7FCA212065AA25AA25AA25AA25AA25A182D7FA117>
I<13181338EA01F8EA0E701200A513E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B
9D17>49 D<EB3F80EBC1E038010070000213785AA2000F137C1380A2EB00781206C712F8
14F0EB01E014C0EB0380EB0700130E5B5B13605B485A380300201206000813405A383FFF
C0481380B5FC161E7E9D17>I<137F380183C0380201E0EA0400000713F05A1301A20000
13E0A2EB03C0EB07801400131CEA01F8EA000E7F148014C0130313071230127812F8A200
F0138038800F00EA400E6C5AEA1078EA0FE0141F7D9D17>I<1460A214E0EB01C0130313
05130D13091311EB2380134313C31383EA010312023804070012081218121012201240B5
12F038000E00A55B131E3801FFC0141E7E9D17>I<380180303803FFE014C0140013FC00
02C7FCA25AA4137CEA0587380A0380EA0C01000813C0120014E0A4387003C012F812F000
E01380EA800700401300130E6C5AEA1070EA0FC0141F7D9D17>I<EB1F80EB7040EBC020
380180E0EA03011207380E00C0001E1300121C123C1238EA78F8EA790EEA7A07EA7C0300
F81380A200F013C0A4EB078012E0A214005BEA600EEA701CEA3018EA1870EA07C0131F7C
9D17>I<1220383FFFF04813E014C03840008038C0010012801302485A5B5B5BA25B13C0
485AA2120390C7FC5AA25A120EA2121EA35AA31218141F7A9D17>I<137EEA01C3380301
80000613C0120EEA1C00003C13E0A213011278A41303A2003813C01307EA1C0BEA0C1338
03E380EA0007A214005BEA600EEAF01C1318485AEA8060EA41C0003FC7FC131F7C9D17>
57 D<1408140C141C143CA2147C147E149EA2EB011EA21302801304A21308A201101380
14071320A2EB7FFF90384007C0EB8003A2EA0100A21202EC01E01206001F130339FF801F
FE1F207F9F22>65 D<0007B5FC3900F803C090387801E0EC00F04913F8A515F03801E001
EC03E015C0EC0F809038FFFE009038E00F803903C003C0EC01E015F0A21400A2485A1401
A215E01403EC07C0390F000F80EC3E00B512F01D1F7E9E20>I<ECFE0290380701869038
1C004E0170133E49131E4848131C4848130C120748C7FC5A121E003E1408003C1400127C
A45AA4127815101520A27E1540001C14806CEB01006C13023803800C3800E030EB3FC01F
217C9F21>I<0007B57E3900F801E0903878007081497F151E150E150FA348481480A648
4814005DA3151E153E4848133C5DA25D4A5A4A5A260F000FC7FC143CB512F0211F7E9E23
>I<0007B512FC3900F8007C0178131C150C5B1504A414043901E00800A31438EBFFF8EB
E0383803C010A4EC00081510485AA21520A2156015C0380F00011407B612801E1F7E9E1F
>I<0007B512F83900F800780178133815185B1508A53901E00800A314181438EBFFF838
03C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E>I<ECFE0290380701869038
1C004E0170133E49131E4848131C4848130C120748C7FC5A121E003E1408003C1400127C
A45AA2EC3FFEEC01F000781300A2EC01E0A27EA2121C6C13036CEB05C0380380083900E0
304090383FC0001F217C9F24>I<3A07FF83FFC03A00F8007C000178133CA2495BA64848
5BA490B5FCEBE0004848485AA64848485AA64848485A01807F39FFF07FF8221F7E9E22>
I<3807FF803800F8001378A25BA6485AA6485AA6485AA648C7FC7FEAFFF0111F7E9E10>
I<EB7FFCEB03E01301A2EB03C0A6EB0780A6EB0F00A6131E1230127812F8131CEAF03CEA
8038EA40706C5AEA1F8016207E9E17>I<3A07FF803FE03A00F8001F000178130C5D4913
205D5D4AC7FC1402140848485A5C146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E
141E141F48487E81140781140381380F00016D487E39FFF00FFE231F7E9E23>I<3807FF
E0D800FCC7FC1378A25BA6485AA6485AA41580EC0100EA0780A25C14021406140E380F00
1E147CB512FC191F7E9E1C>I<D807F8EC7FE00000ED7C00017814BCA2019C495AA21502
A2018E13041508D8010E5C1510A26D1320A215400002EC41E09038038081EC8101A21482
A23A0401C403C0A214C8A2EB00F0000C13E04B5A001E01C07FD8FFC0EB7FFC2B1F7E9E2A
>I<D807F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83C0D80103
5BEB01E0A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A21401000C5C
001E1300B47E221F7E9E22>I<EB01FCEB0E0790383801C090387000E0484813F0484813
78485A153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01F0007C14
E01403003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F801F217C9F
23>I<0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC01E0EC03
C0EC0F00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<EB01FCEB0E07
90383803C090387001E03901E000F048481378485A153C48C7FC5A001E143E123E123C12
7CA448147CA3157815F8127815F0EC01E0EA7C0F393C1083C0391C204780001EEB4F0038
0F405E3807A0783901E0E010EA007F9038006030EC702015E0147F15C0EC3F80A2EC1E00
1F297C9F23>I<3807FFFE3900F8078090387801E0EC00F05B15F8A415F03801E00115E0
EC03C0EC0780EC1E00EBFFF03803C03880141E140EA2140F48485AA51502D80F001304EB
800F39FFF00788C7EA01F01F207E9E21>I<EB1F82EB7066EBC01E3801800EEA03004813
0C00061304120EA3000F1300A27FEA07F013FF6C13C06C13E038003FF0EB03F813001478
143CA200401338A3143000601370146000F013C038E8018038C60300EA81FC17217E9F19
>I<003FB512F0383C078000301430126039400F0010A212C01280A3D8001E1300A65BA6
5BA65B7F383FFFE01C1F7A9E21>I<39FFF00FF8391F0003E06CEB01801400001EEB0100
A6481302A6485BA600705BA25CA200785B1238001813C06C48C7FCEA0706EA01F81D2079
9E22>I<3BFFF07FF81FF03B1F000FC007C0001E903907800380001FED01006C1502140F
5EEC17C002135B142301805C000713435E14C3913883E0401481D981015B13C1D803C213
E193C7FC13C415F2EBC80015F4EA01F015F85B5D5B15605B000014402C207A9E2F>87
D<3A03FFC0FFC03A007F003E00013C1318013E1310011E5B011F5B6D5B0281C7FCEB0783
14C2EB03C414E8EB01F0A2130080A2EB017CEB023CEB043EEB0C1EEB081F497E13200140
7FEB8007000180EB0003000780391F8007F039FFC01FFE221F7F9E22>I<39FFF001FF39
1F8000786CC712606D134000071480EBC00100031400EBE0025C12016D5A00005B6D5A13
78EB7C40EB3C80013FC7FC7F131EA3131C133CA513381378137C3807FF80201F7A9E22>
I<0003B512F09038F001E0EB8003010013C00006EB0780EC0F000004131E143E143C5CC7
5A495A13035C495A49C7FC131E133E133C4913805B3901E00100120313C048485A380F00
02001E1306003E130E003C131E4813FCB5FC1C1F7E9E1C>I E /Fl
64 123 df<14F013F8120112033807800090C7FC5AA738FFF8F0A3EA0F00B1142180A018
>12 D<EBF8F012011203EA078013005AA7EAFFF8A3EA0F00B11420809F18>I<13E0EA01
C0EA0380120713005A121EA2121C123CA212381278A3127012F0AE12701278A31238123C
A2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 D<12E012707E123C121C12
1E7EA27E1380A2120313C0A3120113E0AE13C01203A313801207A213005AA2121E121C12
3C12385A5A0B2E7EA112>I<1278A412181230A21260A212E0050A7D830D>44
D<EAFFF0A30C03808B0F>I<12F0A404047C830D>I<EA03F0487EEA1FFEEA1E1E487EEA38
0700781380A2EA700300F013C0AE38780780A300381300EA3C0FEA1E1EEA1FFE6C5AEA03
F012207E9E17>48 D<13C01201120712FFA212FB1203B3A4EAFFFEA30F1F7C9E17>I<EA
03F0EA0FFC487EEA383FEA700F3860078012E0EB03C01240A21200A3EB0780A2EB0F0013
0E5B133C5B13E0485A485A48C7FC120E5A5A5AB512C0A3121F7E9E17>I<12F0A41200AC
12F0A404147C930D>58 D<B612FCA2C9FCA8B612FCA21E0C7E9023>61
D<131FA2497E133BA2EB7BC013731371EBF1E013E113E000017FA213C000031378A21380
00077FA21300380FFFFEA2487F381E000FA24814801407A24814C01403A248EB01E01B20
7F9F1E>65 D<EAFFFCEBFF8014C038F007E0EB01F013001478A514F0EB01E0EB0FC0B512
80A214E038F003F0EB00F8143C141C141EA5143C14FCEB03F8B512F014C0EBFE0017207C
9F1E>I<EB1FC0EBFFF84813FC3803E03C3807800C48C7FC121E123E123C127C1278A35A
A81278A3127C123C123E121E6C13023807800E3803E03E3801FFFC6C13F0EB1FC017227D
A01D>I<B5FC14C08038F003F8EB00FC143E141E80A2EC0780A3EC03C0A815801407A2EC
0F00A2141E143E5CEB03F8B55A14C091C7FC1A207C9F21>I<B512F0A300F0C7FCABB512
C0A300F0C7FCACB512F0A314207C9F1B>I<B512E0A300F0C7FCABB51280A300F0C7FCAF
13207C9F1A>I<EB1FE0EBFFF84813FE3803E03E3807800E48C7FC121E123E123C5AA35A
A7EB03FEA33878001EA37E123E121E7EEA07803803E03E3801FFFE6C13F8EB1FC017227D
A01E>I<00F0131EAEB512FEA338F0001EAF17207C9F20>I<12F0B3AE04207C9F0D>I<00
F0EB1F801500143E5C5C495A495A495A495A49C7FC133E5B5B12F1EAF3FC12F7EAFF9E13
1F487E486C7E00F87FEAF0038013016D7E80147880143E141E80158019207C9F20>75
D<12F0B3ABB512C0A312207C9F19>I<00F8147E6C14FEA200F414DE00F61301A300F3EB
039EA2EB8007A200F1141EEBC00FA200F0130EEBE01EA2EB601CEB703CA2EB3038EB3878
A2EB1870EB1CF0A2EB0CE0A2EB07C0A390C7FC1F207C9F28>I<00FC131E7EA212F7A213
8012F3A2EAF1C0A213E012F013F013701378A2133CA2131C131E130E130F1307A2EB039E
A214DE1301A2EB00FEA2147E17207C9F20>I<EB1F80EBFFF0487F3803E07C3807801E48
487E001EEB078048EB03C0A248EB01E0A30070130000F014F0A86C1301007814E0A2007C
1303003C14C0003E1307001E14806CEB0F00EBC03F3807E07E3801FFF86C5BEB1F801C22
7EA021>I<EAFFFEEBFF8014E038F003F0130014781438143CA51438147814F01303B512
E01480EBFE0000F0C7FCAD16207C9F1D>I<EB1F80EBFFF0487F3803E07C3807801E4848
7E001EEB0780003E14C0003C130348EB01E0A30070130000F014F0A90078EB01E0A2130F
393C0783C0003E13C7D81E031380390F01EF00EB81FF3807E0FE3801FFF86C7FEB1FBCEB
003E80801580EC07C01C277EA021>I<EAFFFEEBFF8014E038F003F0EB00F81478143CA5
147814F8EB03F0B512E01480EBFE00EAF01E130E130FEB0780A2EB03C0A2EB01E0A2EB00
F014701478143CA2141E17207C9F1D>I<EA01FC3807FF80001F13C0EA3E03EA7C000078
13005AA57E127C127EEA3FE0EA1FFCEA07FF0001138038003FC0EB07E01303EB01F01300
A5EB01E012C038F003C0EAFC0F387FFF80381FFE00EA03F814227EA019>I<B612C0A3D8
001EC7FCB3AB1A207E9F1F>I<00F0133CB3A700781378A26C13F0EA3E01381F03E0380F
FFC000031300EA00FC16217C9F1F>I<00F0EB01E0A2007814C01403A26CEB0780A36CEB
0F00A36C131EA2138000075BA23803C0381478A23801E07014F0A26C6C5A13F1A2EB71C0
137BEB3B80A2133F6DC7FCA21B207F9F1E>I<00F0017C130F147EA20078016E130E02EE
131E14E7A26C153C0101138014C714C3001E1578010313C01483000E01811370000F15F0
010713E014010007010013E0018713E1018F13F1138E0003EC71C0A201CE1373D801DCEB
7B80153BA213D8D800F8EB1F00A328207F9F2B>I<0078EB0780007C130F6CEB1F00001E
131E001F133E6C6C5A000713786C6C5A13E13801F1E03800F3C0137F5C6DC7FC7F131E13
3F80497E13F33801F1E0EBE0F048487E00071378497E380F003E48131E001E7F48148000
7CEB07C0007813034814E01B207F9F1E>I<00F814F8007CEB01F0003C14E0003E13036C
14C06CEB0780EB800FD807C0130000035BEBE01E6C6C5A0000137CEB78785C133CEB1CE0
131F6D5A6D5AAE1D20809F1E>I<387FFFFEA3C7127C147814F8EB01F014E0130314C0EB
0780130F1400131E133E133C5B13F85B485A12035B485A120F90C7FC5A123E123C127CB5
12FEA317207E9F1C>I<EAFF80A3EAF000B3B3A3EAFF80A3092D7DA10D>I<EAFF80A31207
B3B3A312FFA3092D80A10D>93 D<EA07E0EA3FF8EA7FFCEA701EEA401FEA000FA3133FEA
07FF121FEA7E0F12F812F0A3EAF83FEA7FFFEA3FEFEA1F8F10147E9316>97
D<12F0ACEAF1F0EAF7FCB47EEAFC1F38F80F80EAF007A2EB03C0A6EB0780A238F80F00EA
FC3FEAFFFEEAF7FCEAF1F012207D9F17>I<EA01FCEA07FF001F1380EA3E07EA3C0148C7
FCA25AA61278A26C1380EA3E07EA1FFF00071300EA01F811147F9314>I<EB03C0ACEA03
E3EA0FFBEA1FFFEA3F0FEA7C031278A212F0A61278A2EA7C07EA3E0FEA1FFFEA0FFBEA03
E312207F9F17>I<EA03F0EA0FFC487EEA3E1FEA7C07127838700380B5FCA300F0C7FCA3
127012786C1380EA3E07EA1FFF00071300EA01F811147F9314>I<137EEA01FE1203EA07
8013005AA7EAFFF0A3EA0F00B10F20809F0E>I<3803E0F0EA0FFF5A383E3E00EA3C1E48
7EA5EA3C1EEA3E3EEA1FFC485AEA33E00030C7FC1238EA3FFEEBFF806C13C0007F13E038
7803F0EAF000A3EAF801387E07E0383FFFC0000F1300EA03FC141E7F9317>I<12F0ACEA
F1F8EAF3FCEAF7FEEAFC1FEAF80FA212F0AE10207D9F17>I<12F0A41200A812F0B3A204
207D9F0B>I<12F0AC131F131E5B5B5BEAF1E0EAF3C0EAF780B47EA27FEAF9F012F8487E
137CA27F131E131FEB0F8011207D9F16>107 D<12F0B3AE04207D9F0B>I<39F0FC07E039
F3FE1FF039F7FF3FF839FE0FF07C39F807C03CA200F01380AE1E147D9325>I<EAF1F8EA
F3FCEAF7FEEAFC1FEAF80FA212F0AE10147D9317>I<EA01F8EA07FE381FFF80383F0FC0
EA3C03387801E0A238F000F0A6387801E0A2383C03C0EA3F0F381FFF803807FE00EA01F8
14147F9317>I<EAF1F0EAF7FCB47EEAFC3F38F80F80EAF007A2EB03C0A6EB0780A238F8
0F00EAFC3FEAFFFEEAF7FCEAF1F000F0C7FCA9121D7D9317>I<3803E3C0EA0FFBEA1FFF
EA3F0FEA3C07EA7803A212F0A61278A2EA7C07EA3F0FEA1FFFEA0FFBEA03E3EA0003A912
1D7F9317>I<EAF0E012F312F7EAFF0012FCA25AA25AAC0B147D9310>I<EA0FF0EA3FFC12
7FEA780CEAF000A312FCEA7FE0EA3FF0EA1FF8EA03FCEA003E131EA212C0EAF03CEAFFFC
EA7FF8EA0FE00F147F9311>I<121EA6EAFFF0A3EA1E00AD1310EA0FF8A2EA07E00D1A7F
9910>I<EAF00FAF131F133FB5FCEA7FEFEA3F0F10147D9317>I<38F003C0A212F8387807
80A2383C0F00A3EA1E0E131EA2EA0F1C133CA2EA0738A213B8EA03F0A26C5A12147F9315
>I<D8F01F13F01480A239781B81E0133B14C11339393C31C3C0137114E3D81C701380EA
1E6014E713E0000EEB770013C0A20007137E143E13801C147F931F>I<387801E0387C03
C0383E0780EA1E0F000F1300EA079EEA03FC5B12016C5A12017F487EEA079EEA0F0F120E
381E0780383C03C0387801E000F813F01414809315>I<38F003C0A238780780A2127C38
3C0F00A2121E131EA2EA0F1CA2EA073C133813B8120313B0EA01F05B1200A2485AA21203
5B1207B4C7FC5A5A121D7F9315>I<EA7FFFA3EA003E133C137813F813F0EA01E01203EA
07C01380EA0F005A121E5A127CB5FCA310147F9314>I E /Fm 16
117 df<120412081210123012201260A2124012C0AA12401260A2122012301210120812
04061A7D920C>40 D<128012401220123012101218A21208120CAA12081218A212101230
122012401280061A7F920C>I<121FEA3180EA60C0EA4040EAC060A8EA4040EA60C0EA31
80EA1F000B107F8F0F>48 D<1218127812981218AC12FF08107D8F0F>I<121FEA6180EA
40C0EA806012C01200A213C0EA0180EA030012065AEA10201220EA7FC012FF0B107F8F0F
>I<121FEA2180EA60C0A212001380EA0100121FEA00801340136012C0A2EA8040EA6080
EA1F000B107F8F0F>I<EA0180A212031205120D121912111221124112C1EAFFE0EA0180
A4EA0FE00B107F8F0F>I<EA20C0EA3F80EA2E001220A3122FEA3080EA2040EA0060A312
C0EA80C0EA6180EA1F000B107F8F0F>I<EA0780EA1840EA30C0126013005A12CFEAF080
EAE040EAC060A31240EA60C0EA3080EA1F000B107F8F0F>I<1240EA7FF013E0EA8040A2
EA0080EA01001202A212061204A2120CA50C117F900F>I<121FEA3180EA60C0A3EA3180
EA3F00120EEA3380EA61C0EAC060A31340EA60C0EA1F000B107F8F0F>I<121FEA3180EA
60C0EAC0401360A3EA40E01221EA1E6012001340EA60C01380EA6300121E0B107F8F0F>
I<EA1F20EA60E0EA0060EA8020A213001260123EEA1F80EA01C0EA006013201280A2EAC0
40EAE0C0EA9F000B117E9011>83 D<121FEA3180EA60C012C012FFEAC000A3EA6040EA30
80EA1F000A0B7F8A0E>101 D<EAF7C0EA3860EA30301318A51330EA3860EA3780EA3000
A412FC0D107F8A11>112 D<1208A212181238B4FC1218A51380A4EA0F00090F808E0C>
116 D E /Fn 8 107 df<B612C0A21A027C8B23>0 D<EA03F0EA0FFC487E487E481380A2
B512C0A66C1380A26C13006C5A6C5AEA03F012127E9317>15 D<140CA21418A21430A214
60A214C0A2EB0180A3EB0300A21306A25BA25BA25BA25BA25BA2485AA248C7FCA21206A3
5AA25AA25AA25AA25A1240162C7AA000>54 D<B612F8A2D80006C7FCB3A913021D1E7D9D
23>62 D<13021306B3A9B612F8A21D1E7D9D23>I<130F1338136013E0EA01C0AFEA0380
EA0700121E12F8121E1207EA0380EA01C0AFEA00E013601338130F102D7DA117>102
D<12F8121E1207EA0380EA01C0AFEA00E013601338130F1338136013E0EA01C0AFEA0380
EA0700121E12F8102D7DA117>I<12C0B3B3A9022D7BA10D>106 D
E /Fo 54 123 df<12F8A505057B8410>46 D<140C141CA21438A31470A314E0A3EB01C0
A3EB0380A3EB0700A3130EA35BA35BA35BA35BA3485AA3485AA348C7FCA3120EA35AA35A
A35AA35AA25A163C7DAC1D>I<137E3801FF80000713E04813F0381FC3F81300003E137C
A2003C133C007C133EA20078131EA200F8131FAF0078131E007C133EA46C137C003F13FC
6C13F813C3380FFFF06C13E00001138038007E0018297EA71D>I<13301370EA01F0120F
12FFA212F11201B3ACB512E0A313287BA71D>I<13FE3803FF80000F13C04813E0EB07F0
383C01F8387800FC147C127000F0133EA212601220C7FCA3147CA2147814F8EB01F014E0
1303EB07C0EB0F80EB1F00133E5B5B485A485A5B485A48C7FC121E5A387FFFFEA417287E
A71D>I<137E3803FF804813E0001F13F0383F83F8EA3E0048137C123812301210C7FCA2
14F8A21301EB03F0EB0FE03801FFC0148014C014E0380001F8EB00FC147C143EA2141FA5
7E6C133E7E6C137E007C13FC383F01F8381FFFF06C13E0000313C03800FE0018297EA71D
>I<EB07E0130F130B131BA2133BA21373A213F3A2EA01E3A2120313C31207EA0F83A2EA
1F03A2123EA2127CA212F8B6FCA4380003E0AA18277EA61D>I<383FFFF8A4003EC7FCAA
133EEBFF80003F13E014F013C1EB00F8147C123EC7FC143EA712400060137C12E06C13F8
EA7801387F07F0383FFFE0000F13C06C1300EA01FC17287EA61D>I<EB0FE0EB3FF813FF
5A3803F0183807E000EA0F8090C7FC5A123EA2123C127C1302EB3FC038F8FFE000F913F0
00FB13F838FF80FC38FE007C143E5A143F141F5AA41278127CA2141E003C133E123E001E
137C001F13FC380FC1F83807FFF06C13E06C138038007E0018297EA71D>I<B6FCA4C712
0F141E143C147814F814F0EB01E0130314C0EB0780130F14005B131E133EA2133C137CA2
5BA35B1201A5485AA718277EA61D>I<137E3803FFC04813E04813F0381F81F8383F00FC
003E137C007E137E007C133EA56C137CA26C13F8380FC3F03807FFE06C13C0A2000F13F0
381F81F8383F00FC003E137C48133EA248131FA6007C133EA2007E137E6C13FC381F81F8
380FFFF06C13E06C13C038007E0018297EA71D>I<137E3801FF80000713C04813E0381F
83F0EB00F8003E137848137C143C0078133E12F8A2141E141FA4143F7E127C147F7E383F
01FF381FFFDF6C139F6C131F3803FC1E3800403E1300A2147CA214F8A2EB01F0381803E0
381E0FC0383FFF806C13006C5AEA03F818297EA71D>I<EB03F0A2497EA21478497EA3EB
1E3E141EA2EB3E1F133C90387C0F80A213789038F807C0A213F000016D7EA213E000036D
7EA213C000076D7E90B5FCA24880903880007C90C7FC4880A2121E003E80A2123C007CEC
0F80A24815C01507A2222A7EA927>65 D<EB03FF010F13E0013F13F890B5FC3801FE0139
03F80070D807E01310491300485A121F90C8FC123EA25AA45AAA127CA47EA27E7F120F6C
7E6D1308D803F813383901FE01F86CB5FC013F13F0010F13C0903803FE001D2C7CAA25>
67 D<B512E014FC14FF39F8007F80EC0FC06E7EEC01F06E7EA2157C81A2151E151FA281
1680AA16005DA3153EA25DA25D4A5A4A5AEC0FC0EC3F80B6C7FC14FC14E0212A7BA92A>
I<B612C0A400F8C8FCAEB6FCA400F8C8FCB0B612E0A41B2A7BA923>I<B61280A400F8C8
FCAFB512FCA400F8C8FCB3192A7BA921>I<EB03FE90380FFFC0013F13F84913FC3801FE
013903F8007CD807E01318491300485A121F90C8FC123EA2127E127CA35AA7EC3FFCA312
7CEC007CA2127E123EA27E7F120F6C7E7FEA03F83901FE01FC38007FFF6D13F8010F13C0
903803FE001E2C7CAA27>I<00F8147CB2B612FCA400F8C7127CB3A21E2A7BA929>I<12F8
B3B3A6052A7BA910>I<12F8B3B3A2B6FCA4182A7BA920>76 D<00FE15FFA36C5C00FB15
DF6D1303A3D8F9C0EB079FA36D130F00F8151FA26D131F0170131EA20178133E0138133C
013C137CA2011C1378011E13F8A2010E13F0EB0F01A2010713E01483A2010313C014C7A2
0101138014EFA20100130014FF147EA391C7FC282A7BA933>I<B4147CA27FA2EAFBC0A2
EAF9E0A27F12F8A27F1378137C133C133E131E131F7F1480A2EB07C0A2130314E0130114
F0130014F81478147C143CA2143E141EA2140FA2EC07FCA21403A21E2A7BA929>I<EB03
FCEB0FFF013F13C090B512F03901FE07F83903F801FC3907E0007E48487F497F48C7EA0F
80A2003EEC07C0A248EC03E0A30078140100F815F0AA007CEC03E0A3007E1407003E15C0
A26CEC0F806D131F000F15006D5B6C6C137E3903F801FC3901FE07F86CB55A013F13C06D
5BD903FCC7FC242C7DAA2B>I<B512C014F814FE38F8007FEC1F80EC07C0140315E01401
15F0A615E01403A2EC07C0EC1F80EC7F00B512FE5C14F000F8C8FCB21C2A7BA925>I<B5
12E014FC14FF39F8003F80EC0FC0EC03E0EC01F0A2EC00F8A6EC01F0A2EC03E0140FEC3F
C0B61280ECFE0014F814E0EAF801806D7EA2147C143C143E141E141FEC0F80A2EC07C0A2
EC03E0140115F0EC00F8A2157C1E2A7BA926>82 D<B712E0A4260001F0C7FCB3B3A2232A
7EA928>84 D<00F814F8B3AE007CEB01F0A36CEB03E06CEB07C0A2390FC01F803907F07F
003803FFFEC613F8EB1FC01D2B7BA928>I<007FB512F8A315F0C7120315E01407EC0FC0
1580141FEC3F00143E147E5C5C13015C1303495A5C130F495A91C7FC5B137E137C13FC5B
1201485A5B1207485A5B121F48C8FC123E127E007FB512F8B6FCA31D2A7DA924>90
D<EA01FC380FFF80003F13C014E0383C03F0EA3001000013F81300A4130113FF1207121F
EA3FC0EA7E005A5AA3EAFC01EA7E07EA7FFF7EEA1FFCEA0FE0151B7E9A1C>97
D<12F8AF133F38F9FFC000FB13E0B512F0EB07F8EAFC0138F800FC147CA2143EA8147E14
7CA26C13F8130138FF07F0EBFFE000FB13C000F9138038F87E00172A7CA91E>I<EB7F80
3801FFE0000713F85A381FC078383F0010003E13005AA35AA7127CA37E003F1318381FC0
78380FFFF87E000113E038007F80151B7E9A1A>I<143EAFEA01FCEA03FF000F13BE4813
FE13C1383F007E003E133E5AA212FC5AA77E127CA2007E137E6C13FEEA1FC113FF6C13BE
3803FE3EEA01F8172A7EA91E>I<13FCEA03FF4813804813C0381F87E0EA3F01383E00F0
5A1470481378B512F8A400F8C7FCA31278127CA27E003F1318381FC0F8EA0FFF7E000113
E038007F00151B7E9A1A>I<EB3FC013FF5A5A3807E0005B485AA9EAFFFEA3EA0F80B3A6
122A7FA912>I<90387C07803901FF3FC0000713FF5A903883E000381F01F0A2383E00F8
A56C485AA2380F83E013FF485B001D90C7FCEA1C7C003CC8FCA2123E381FFFE014F86C13
FE487F481480387E003F007CEB0FC0481307A46C130F007EEB1F80393F807F00381FFFFE
6C5B000313F038007F801A287F9A1D>I<12F8AF133FEBFFC000FB13E0B512F0138338FE
01F8EAFC00A35AB2152A7CA91E>I<12F8A51200AA12F8B3A9052A7CA90E>I<13F8A51300
AA13F8B3AF1240EAE3F012FF13E0EA7FC0EA1F800D3683A90F>I<12F8AFEB01F8EB03F0
EB07E0EB0FC01480EB1F00133E5B5BEAF9F012FB12FF7F7FA2EAFE7E487E12F8EB1F8013
0F14C0EB07E0A2EB03F0130114F8EB00FC162A7CA91C>I<12F8B3B3A6052A7CA90E>I<D8
F83F133F9039FFC0FFC000FB01E313E0B500F713F0018313833AFE01FE01F839FC00FC00
A3485BB2251B7C9A2E>I<EAF83FEBFFC000FB13E0B512F0138338FE01F8EAFC00A35AB2
151B7C9A1E>I<137E3801FF80000713E04813F0381F81F8383F00FC003E137C48133EA2
0078131E00F8131FA7007C133EA36C137C003F13FC381FC3F8380FFFF06C13E06C13C038
007E00181B7E9A1D>I<EAF83F38F9FFC000FB13E0B512F0EB07F8EAFC0138F800FCA214
7C147E143EA7147E147C14FC6C13F8130138FF07F0EBFFE000FB13C000F9138038F87E00
90C7FCAC17277C9A1E>I<EBFC3EEA03FF4813BE4813FEEA1FC1EA3F00003E137E007E13
3E127C12FC5AA77E127C127E147E6C13FEEA1FC113FF6C13BE3807FE3EEA01F8C7FCAC17
277E9A1E>I<EAF83C13FC12F912FBEAFFE0138013005A5AA35AB00E1B7C9A14>I<EA07F8
EA1FFF4813805AEA7C0738F8010090C7FCA37E127F13F0EA3FFC6C7EEA07FFC61380EB1F
C0130F1307A2124012E038FC1F80B5FC6C1300EA1FFEEA07F8121B7E9A16>I<EA0F80A7
B51280A3380F8000B2148013C33807FFC0A26C1300EA01F812227FA115>I<00F813F8B3
A213011303EAFC07B5FCEA7FFEEA3FF8EA1FC0151B7C9A1E>I<00F801F813F8130100FC
7F007C9038DC01F0A21303003E90389E03E0A21307149F001F90388F07C0140F130F000F
158090388F078FA2138ED8079E1400EC03CFA2D803DC13DEA2140113D8D801F813FCA214
00251B7F9A28>119 D<007CEB1F80007EEB3F006C133E6C5B380F80FC6C6C5AEBE1F038
03E3E0EA01F76CB45A6D5A91C7FC133EA2133F497E497E3801F3E0EA03E1803807C0F838
0F807C121F497E003E7F007E148048EB0FC01A1B809A1B>I<00F8131F7E007C133EA27E
147CA27E14F81380000F13F01381EA07C114E013C31203EBE3C0120113E71480EA00F714
001377A2137E133EA2133CA2137C1378A25BA21201EA7FE05B5B90C7FC18277F9A1B>I<
B512F8A314F0EA0003EB07E014C0130FEB1F801400133E137E5B5B1201485A5B485A120F
485A90C7FC5A127E387FFFF8B5FCA3151B7E9A19>I E /Fp 12 121
df<BA12FCA4D8001F90268000017FEF001F1807180318011800197E193E193F85A385A4
0578EB0780A496C7FCA217F8A316011603161F92B5FCA4ED801F160316011600A31778A2
1AF0A3F101E094C7FCA41903A21AC01907A3190F191FA2F13F80197F19FF1803180F95B5
FCBBFC1A00A344477CC64C>69 D<B712F0A4D8001FEB8000B3B3B3A9B712F0A424477DC6
2B>73 D<90380FFFF090B6FC000315C03A07F8007FF0486CEB1FFCED07FE486C6D7E8381
83816C48816C5A6C5AC9FCA5157F023FB5FC0103B6FC011F13F090387FFE003801FFE048
1380D80FFEC7FC485A5B123F485AA2485AA45DA26C6C5BED077F6C6C130F6C6C013E13F8
3C0FFF80F83FFFE000039038FFF01FC6ECC00F90390FFE0003332E7CAD38>97
D<91381FFFC049B512FC010714FF903A1FF8007F80D97FE0EBFFC0EBFF8048494813E048
5A1207485AA248486D13C0003FED7F80EE3F00007F92C7FC5BA312FFAA127FA27FA2123F
A26C6C15F0120F6DEC01E012076C6CEC03C06C6DEB07806C6DEB0F00D97FF0133E90391F
FC01FC0107B512F0010114C09026001FFCC7FC2C2E7CAD34>99 D<EC1FFC49B512C00107
14F090391FF80FFC90397FC001FE49486C7E4890C7EA7F804848EC3FC04848EC1FE0120F
484815F0160F003F16F8A25B007F150717FCA212FFA290B7FCA301F0C9FCA5127FA36C7E
A2001F163CA26C7E17786C6C15F86C6CEC01F06C6DEB03E06C6DEB07C0D93FE0EB1F8090
3A1FFC01FF000107B512FC010014E0020F90C7FC2E2E7DAD35>101
D<EDFFC0021F13F0027F13FC903901FFC0FE49EB01FF903807FC034948481380131FEB3F
F0137F14E001FF6D13006F5A6F5A163093C7FCABB612FEA4C601E0C8FCB3B3A2007FEBFF
F0A429487DC724>I<EB7FC0B5FCA412037EB3B3B3A8B61280A419487CC720>108
D<9039FF8007FEB590383FFFC04B13F0913981F81FF8913983C00FFC00039039870007FE
6C138E029C8002B87F188014F0A25CA35CB3A9B60081B6FCA4382E7BAD41>110
D<90397F803F80B5EBFFE0028113F8913883C3FC91388707FE0003138E6C90389C0FFF14
B8A214F0A2ED07FE9138E003FCED01F892C7FCA25CB3A8B612E0A4282E7DAD2F>114
D<90390FFE01C090B512C7000314FF3807F801390FC0007F48C7121F48140F007E1407A2
150312FEA27E7F01E090C7FC13F8387FFFC014FF6C14E015F86C806C14FF6C1580000115
C06C6C14E0131F010014F014039138007FF80070141F00F0140F15077E1503A26C15F0A2
7E6CEC07E07F6DEB0FC001F0EB1F80D8FEFCEBFF0039F87FFFFCD8F01F13F0D8E0031380
252E7CAD2E>I<EB01E0A61303A31307A3130FA2131F133FA2137FEA01FF5A000F90B512
C0B7FCA3C601E0C7FCB3A616F0A9017F14E0ECF001133FED03C0D91FF8138090390FFE0F
00903807FFFE01015B9038001FF024427EC12D>I<B500FE90381FFFFCA4C601E0903803
FE006EEB01F86D6C5C6D6C495A011F4A5A6D6C495A6E49C7FC6D6D5A6DEBC07E6D147C6D
6D5AEDF1F091387FFBE06EB45A806E5B93C8FC6E7F6E7F6E7FA24A7F4A7F8291380F9FFE
EC1F0F91383E07FF027C804A6C7F01016D7F49487E4A6D7E49488049486D7E49C76C7E01
3E140F017E6E7E48B41680B500E0017F13FFA4382E7EAD3D>120
D E /Fq 8 117 df<EC0FF8ECFFFE0103EBFF8090390FF80FC090391FE003E090397F80
01F09038FF0003484813074848EB0FF8151F485A120F5B001FEC0FF0ED07E0003FEC03C0
92C7FC5B127FA3EC7FF039FFE1FFFC01E37F9039E7007F8001EEEB3FC001ECEB1FE001F8
14F0A249EB0FF8A216FCA24914FEA4127FA5123FA216FC6C7E16F8120FED1FF06C7E6C6C
EB3FE06C6CEB7FC03A00FF81FF8090397FFFFE006D5B010F13F00101138027397CB730>
54 D<DB1FFE14600203B500E013E0021FECF801027FECFE03903B01FFFC00FF07010701
C0EB1FCF4990C7EA07FFD91FFC1401D93FF0804948157F4948153F4849151F4890C9120F
5A48481607A248481603A2485A1801A2127FA24993C7FCA212FFAB127FA27FF001E0123F
A36C7EF003C06C7EA26C6CEE07807E6C6DED0F006C6D5D6D6C153E6D6C5DD91FFC5D6DB4
EC03F06D01C0EB0FE0010101FCEB7F806D6CB6C7FC021F14FC020314E09126001FFEC8FC
3B3D7BBB46>67 D<EB3FFE48B512E0000714F8390FE007FC9038F001FE486C6C7E6F7E82
153F6C48806C5A6C5AC8FCA491B5FC131F90387FF83F3803FF803807FC00EA0FF0485A12
3F485AA2485AA4157F6C7E15DF3A3FE0039FF03B1FF80F0FFFE03807FFFE0001497E3900
3FE0002B267DA52F>97 D<49B47E010F13F0017F13FC9038FF81FE3A03FE007F80D807F8
133F4848EB1FC0ED0FE0485A003F15F01507485A16F8A212FFA290B6FCA301C0C8FCA412
7FA36C7E1678121F7F000F15F06C6C13016C6CEB03E06C6CEB0FC03A00FFC07F8090393F
FFFE00010F13F8010013C025267DA52C>101 D<13FE12FFA412071203B0EDFF80020313
F0020F7F91381E03FC91383801FE02607F4A7E01FF15805C91C7FCA35BB3A4B5D8F83F13
FEA42F3C7CBB36>104 D<9038FE01FF00FF011F13F0027F13FC9138FC07FE9039FFF001
FF00079039C0007F806C90C7EA3FC04915E0EE1FF017F8160F17FCA2160717FEA917FC16
0FA317F8EE1FF0A26DEC3FE06EEB7FC06EEBFF806E4813009039FEFC07FE91387FFFF802
1F13E0DA03FEC7FC91C9FCADB512F8A42F377DA536>112 D<3901FC03F000FFEB0FFC4A
B4FC91383C3F80EC707F00079038E0FFC000035BEBFD80A201FFEB7F809138003F00151E
92C7FC5BB3A3B512FCA422267DA528>114 D<130FA55BA45BA25BA25B5A5A5A001FEBFF
F0B6FCA3000190C7FCB3153CA86C14781480017F13F090383FC1E090381FFFC06D138090
3801FE001E377EB626>116 D E /Fr 83 124 df<90381F83E09038F06E303901C07878
380380F8903800F03048EB7000A7B612803907007000B2383FE3FF1D20809F1B>11
D<133FEBE0C0EA01C0380381E0EA0701A290C7FCA6B512E0EA0700B2383FC3FC1620809F
19>I<EB3FE013E0EA01C1EA0381EA0700A8B5FCEA0700B2383FE7FC1620809F19>I<9038
1F81F89038F04F043901C07C06390380F80FEB00F05A0270C7FCA6B7FC3907007007B23A
3FE3FE3FE02320809F26>I<EA7038EAF87CEAFC7EA2EA743AEA0402A3EA0804A2EA1008
A2EA2010EA40200F0E7F9F17>34 D<9038018030A449485AA501065BA549485A007FB6FC
B7128026001803C7FCA2EB3006A4495AA2B712806C15002600C018C7FC48485AA548485A
A500065BA321297E9F26>I<D807801318EA1840486C5B011813E03960170360903808FC
C000E0EB0180A24AC7FC1406A25C00605B131000305B495AEA1840380780C03900018078
EC8184903803030281EB0607EB0C0691380E008013181330A2136013C0A23A0180060100
3803000714030006140248EB01840004EB007821257EA126>37 D<127012F812FCA21274
1204A31208A21210A212201240060E7C9F0D>39 D<13401380EA01005A12061204120C5A
A212381230A212701260A412E0AC1260A412701230A212381218A27E120412067E7EEA00
8013400A2E7BA112>I<7E12407E12307E1208120C7EA212077EA213801201A413C0AC13
80A412031300A25A1206A25A120812185A12205A5A0A2E7EA112>I<1303AFB612FCA2D8
0003C7FCAF1E207E9A23>43 D<127012F012F8A212781208A31210A31220A21240050E7C
840D>I<EAFFF0A20C02808A0F>I<127012F8A3127005057C840D>I<144014C0EB0180A3
EB0300A31306A25BA35BA35BA25BA35BA3485AA348C7FCA21206A35AA35AA25AA35AA35A
A2122D7EA117>I<EA03F0EA0E1C487EEA1806EA380738700380A400F013C0AD00701380
A3EA780700381300EA1806EA1C0E6C5AEA03F0121F7E9D17>I<13801203120F12F31203
B3A6EA07C0EAFFFE0F1E7C9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0
EAF803A3EA200712001480A2EB0F00130E5B5B5B13605B485A48C7FC000613405A5A0010
1380EA3FFF5AB5FC121E7E9D17>I<EA03F0EA0C1CEA100EEA200F007813801307A2EA38
0F12001400A2131E131C1370EA07F0EA003C130E130FEB0780A214C0122012F8A300F013
801240EB0F00EA200EEA183CEA07F0121F7E9D17>I<1306A2130EA2131E132EA2134E13
8EA2EA010E1202A212041208A212101220A2124012C0B512F038000E00A7EBFFE0141E7F
9D17>I<EA1803EA1FFE5B5B13E00010C7FCA6EA11F0EA161CEA180EEA10071480EA0003
A214C0A3127012F0A200E013801240EB0700EA20066C5AEA0838EA07E0121F7E9D17>I<
137CEA0182EA0701380E0380EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEA
F406EAF807EB0380A200F013C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F
7E9D17>I<1240387FFFE014C0A23840008038800100A21302485AA25B5BA25BA21360A2
13E05B1201A41203A76C5A131F7E9D17>I<EA03F0EA0C0CEA1006EA3003382001801260
A3127038780300123EEA3F06EA1FC8EA0FF0EA03F8487EEA0C7EEA103F38300F80EA6007
EB01C012C01300A31480EA600100201300EA1002EA0C0CEA03F0121F7E9D17>I<EA03F0
EA0E18487E487E13071270EB038012F0A214C0A5EA7007A21238EA180BEA0E13EA03E338
000380A3EB07001230EA7806130EEA700CEA2018EA1070EA0FC0121F7E9D17>I<127012
F8A312701200AA127012F8A3127005147C930D>I<127012F8A312701200AA127012F012
F8A212781208A31210A31220A21240051D7C930D>I<007FB512F8B612FCC9FCA8B612FC
6C14F81E0C7E9023>61 D<EA0FE0EA103CEA601EEA400EEAE00F12F0A21260EA001E131C
13381370136013C01380A2EA0100A6C7FCA5EA0380EA07C0A3EA038010207E9F15>63
D<5B497EA3497EA3EB09E0A3EB10F0A3EB2078A3497EA2EBC03EEB801EA248B5FCEB000F
A20002EB0780A348EB03C0A2120C001E14E039FF801FFE1F207F9F22>65
D<B512E0380F0078141EA2801580A515005C141E147CEBFFF0EB007C141FEC0F80EC07C0
140315E0A515C014071580EC0F00143EB512F01B1F7E9E20>I<90380FE0109038381C30
9038E002703803C00139078000F048C71270121E15305A1510127C127800F81400A91278
007C1410123CA26C1420A27E6C6C13406C6C13803900E00300EB380CEB0FF01C217E9F21
>I<B512F83807801EEC0780EC03C0EC01E0EC00F015701578A2153CA3153EA8153CA215
7C1578A215F0EC01E0EC03C0EC0780EC1E00B512F81F1F7F9E23>I<B61280380F000F14
031401140015C01540A314401500A214C0130113FF130113001440A3EC0020A31540A315
C01401EC0380140FB6FC1B1F7E9E1F>I<B61280380780071401A2140015C01540A4EC20
00A3146014E013FF138014601420A391C7FCA87FEAFFFE1A1F7F9E1E>I<90380FE01090
38381C309038E002703803C00139078000F048C71270121E15305A1510127C127800F814
00A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903C001703900E002309038380C
1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD90B5FCEB0007AF39FFF07FF8
1D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<39FFF007FC390F0003E0EC01
80150014025C5C5C5C5C5C49C7FC5B497E130FEB13C0EB21E01341EB80F0EB0078A28080
A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E9E23>75 D<EAFFF8EA0F8090C7FCB2
1402A414061404A2140C141C147CB512FC171F7E9E1C>I<B46CEB07FE000715C0A2D805
C0130BA2D804E01313A301701323A26D1343A36D1383A290380E0103A3EB0702A3EB0384
A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>I<B4EB0FF8390F8003E0EC
0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F01478A2
143C141EA2140F1407A214031401123E38FF80001D1F7E9E22>I<EB1FE0EB70383801C0
0E48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA9
00781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E0
1E38007038EB1FE01E217E9F23>I<B512E0380F007C141E80EC0780A215C0A41580A2EC
0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<EB1FE0EB70383801C00E48487E
39070003804814C0001EEB01E0003E14F0003C1300007C14F8A20078147800F8147CA900
781478007C14F8A2003C14F0383E0781391E0841E0390F1023C000071480390390170038
01D01E3900783804EB1FF8EB001CEC0C0CEC0E1CEC0FF8A2140715F0EC01E01E297E9F23
>I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A28014
3CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>I<3803F040380C
0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4FC00071380
C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300EA81FC
14217E9F19>I<007FB512E038780F010060EB006000401420A200C0143000801410A400
001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3A46CEB0100
1380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<3BFFF07FF81FF03B1F000F
C007C06C903907800180170015C001805C00071502EC09E013C000035DEC19F01410D801
E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090383D000F133F
6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>87
D<397FF81FF8390FE007C03907C0030000031302EBE0063801F00400005BEBF818EB7810
6D5AEB3E60EB1E406D5AA213076D7E497E1305EB08F0EB18F8EB1078EB207CEB603EEB40
1EEB801F3901000F801407000214C000061303001FEB07E039FFC01FFE1F1F7F9E22>I<
39FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C
06EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>I<387FFF
FE387E003C127800701378006013F814F0384001E0130314C0EB07801200EB0F00131EA2
5B137C13785B1201EBE002EA03C0A2EA0780000F13061300001E1304003E130C123C4813
3C14FCB5FC171F7E9E1C>I<12FFA212C0B3B3A512FFA2082D7CA10D>I<EA0804EA1008EA
2010A2EA4020A2EA8040A3EAB85CEAFC7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203
B3B3A512FFA2082D80A10D>I<EA1FE0EA3030EA7818131CEA300E1200A313FEEA078EEA
1E0E1238127800F01310A3131E127838386720380F83C014147E9317>97
D<121C12FC121CAA137CEA1D87381E0180EB00C0001C13E01470A21478A6147014F014E0
001E13C0381A018038198700EA107C15207E9F19>I<EA01FCEA0706EA1C0F1238130600
78C7FC127012F0A61270127800381380A2381C0100EA0706EA01F811147F9314>I<EB01
C0130F1301AAEA01F1EA070DEA0C03EA180112381278127012F0A61270A21238EA180312
0CEA070D3801F1F815207F9F19>I<EA03F0EA0E1C487E487EA21270EB038012F0A2B5FC
00F0C7FCA31270A26C1380A2381C0100EA0706EA01F811147F9314>I<137CEA01C6EA03
0F1207EA0E061300A7EAFFF0EA0E00B2EA7FE01020809F0E>I<14E03803E330EA0E3CEA
1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33E00020C7FCA21230A2EA3FFE381FFF80
14C0383001E038600070481330A4006013606C13C0381C03803803FC00141F7F9417>I<
121C12FC121CAA137C1386EA1D03001E1380A2121CAE38FF8FF014207E9F19>I<123812
7CA31238C7FCA6121C12FC121CB1EAFF80091F7F9E0C>I<13E0EA01F0A3EA00E01300A6
1370EA07F012001370B3A31260EAF06013C0EA6180EA3F000C28829E0E>I<121C12FC12
1CAAEB1FE0EB0780EB060013045B5B5B136013E0EA1DF0EA1E70EA1C38133C131C7F130F
7F148014C038FF9FF014207E9F18>I<121C12FC121CB3ABEAFF8009207F9F0C>I<391C3E
03E039FCC30C30391D039038391E01E01CA2001C13C0AE3AFF8FF8FF8021147E9326>I<
EA1C7CEAFC86EA1D03001E1380A2121CAE38FF8FF014147E9319>I<EA01F8EA070E381C
0380383801C0A2387000E0A200F013F0A6007013E0A2383801C0A2381C038038070E00EA
01F814147F9317>I<EA1C7CEAFD87381E018014C0381C00E014F014701478A6147014F0
14E0381E01C0EB0380381D8700EA1C7C90C7FCA8B47E151D7E9319>I<3801F04038070C
C0EA0E02EA1C03EA38011278127012F0A6127012781238EA1C03EA0C05EA0709EA01F1EA
0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18EA1E3CA21318EA1C00AEEAFFC00E147E93
12>I<EA0FC8EA3038EA6018EAC008A3EAE000127CEA3FE0EA1FF0EA07F8EA003CEA800E
130612C0A21304EAE00CEAD818EA87E00F147F9312>I<1202A31206A2120EA2123EEAFF
F8EA0E00AB1304A5EA07081203EA01F00E1C7F9B12>I<381C0380EAFC1FEA1C03AE1307
120CEA061B3803E3F014147E9319>I<38FF83F8383E00E0001C13C06C1380A338070100
A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015147F9318>I<39FF9FE1FC393C
078070391C030060EC8020000E1440A214C0D80704138014E0A239038861001471A23801
D032143A143E3800E01CA2EB6018EB40081E147F9321>I<38FF87F8381E03C0380E0180
EB0300EA0702EA0384EA01C813D8EA00F01370137813F8139CEA010E1202EA0607380403
80000C13C0003C13E038FE07FC16147F9318>I<38FF83F8383E00E0001C13C06C1380A3
38070100A21383EA0382A2EA01C4A213E4EA00E8A21370A31320A25BA3EAF080A200F1C7
FC1262123C151D7F9318>I<EA7FFFEA700E1260EA401C133813781370EA00E0120113C0
EA038012071301120E121EEA1C03EA3802EA7006130EEAFFFE10147F9314>I<B512FC16
01808C17>I E /Fs 46 122 df<132013401380EA01005A12061204120CA25AA25AA312
701260A312E0AE1260A312701230A37EA27EA2120412067E7EEA0080134013200B327CA4
13>40 D<7E12407E7E12187E12041206A27EA2EA0180A313C01200A313E0AE13C0A31201
1380A3EA0300A21206A21204120C5A12105A5A5A0B327DA413>I<127012F812FCA21274
1204A41208A21210A212201240060F7C840E>44 D<EAFFF8A20D02808B10>I<127012F8
A3127005057C840E>I<13801203120F12F31203B3A9EA07C0EAFFFE0F217CA018>49
D<EA03F0EA0C1CEA100700201380384003C0A2008013E012F0EAF801A3EA2003120014C0
A2EB07801400130E5B13185B5B5B485A90C7FC000213205A5A00181360481340383FFFC0
5AB5FC13217EA018>I<1303A25BA25B1317A21327136713471387120113071202120612
041208A212101220A2124012C0B512F838000700A7EB0F80EB7FF015217FA018>52
D<00101380381E0700EA1FFF5B13F8EA17E00010C7FCA6EA11F8EA120CEA1C0738180380
1210380001C0A214E0A4127012F0A200E013C01280EA4003148038200700EA1006EA0C1C
EA03F013227EA018>I<137EEA01C138030080380601C0EA0C03121C381801800038C7FC
A212781270A2EAF0F8EAF30CEAF4067F00F81380EB01C012F014E0A51270A3003813C0A2
38180380001C1300EA0C06EA070CEA01F013227EA018>I<EA01F8EA060EEA0803381001
801220386000C0A31270A238780180003E1300EA3F02EA1FC4EA0FF812036C7EEA067EEA
083F38100F80383007C0EA6003EB00E05A1460A40060134014C06C138038180300EA0E0E
EA03F013227EA018>56 D<EA01F0EA060C487EEA1807383803801270A238F001C0A314E0
A5127013031238EA1805120CEA0619EA03E1380001C0A3EB0380A21230387807001306EA
700CEA20186C5AEA0FC013227EA018>I<497EA3497EA3EB05E0A2EB09F01308A2EB1078
A3497EA3497EA2EBC01F497EA248B51280EB0007A20002EB03C0A348EB01E0A348EB00F0
121C003EEB01F839FF800FFF20237EA225>65 D<903807E0109038381830EBE0063901C0
017039038000F048C7FC000E1470121E001C1430123CA2007C14101278A200F81400A812
781510127C123CA2001C1420121E000E14407E6C6C13803901C001003800E002EB381CEB
07E01C247DA223>67 D<B512F0380F801E00071307EC0380EC01C0EC00E015F01578A215
7C153CA3153EA9153CA2157C1578A215F015E01401EC03C0EC0700000F131EB512F01F22
7EA125>I<B612C0380F80070007130114001540A215601520A314201500A3146014E013
FF138014601420A315081400A21510A31530A2157015E0000F1303B6FC1D227EA121>I<
B612C0380F80070007130114001540A215601520A314201500A3146014E013FF13801460
1420A491C7FCA9487EEAFFFE1B227EA120>I<39FFFC3FFF390FC003F039078001E0AE90
B5FCEB8001AF390FC003F039FFFC3FFF20227EA125>72 D<EAFFFCEA0FC0EA0780B3ACEA
0FC0EAFFFC0E227EA112>I<D8FFC0EB03FF000F15F0000715E0D805E01305A2D804F013
09A301781311A36D1321A36D1341A26D1381A39038078101A3EB03C2A2EB01E4A3EB00F8
A31470120E001FEC03F03AFFE0203FFF28227EA12D>77 D<39FF8007FF3907C000F81570
D805E01320EA04F0A21378137C133C7F131F7FEB0780A2EB03C0EB01E0A2EB00F014F814
78143C143E141E140FA2EC07A0EC03E0A21401A21400000E1460121FD8FFE0132020227E
A125>I<B512F0380F803C0007130FEC078015C0140315E0A615C014071580EC0F00143C
EBFFF00180C7FCAE487EEAFFFC1B227EA121>80 D<B512E0380F803C0007130E6E7E8114
0381A55D14075D020EC7FC143CEBFFE0EB80708080141E140E140FA481A3168015C01407
3A0FC003C10039FFFC01E2C8127C21237EA124>82 D<3803F020380C0C60EA1802383001
E0EA70000060136012E0A21420A36C1300A21278127FEA3FF0EA1FFE6C7E000313803800
3FC0EB07E01301EB00F0A214707EA46C1360A26C13C07E38C8018038C60700EA81FC1424
7DA21B>I<007FB512F839780780780060141800401408A300C0140C00801404A4000014
00B3A3497E3801FFFE1E227EA123>I<EA1FE0EA3038EA780C130EEA30071200A313FFEA
07C7EA1E07123C1278127000F01308A3130FEA7817383C2390380FC1E015157E9418>97
D<120E12FE121E120EAB131FEB61C0EB8060380F0030000E1338143C141C141EA7141C14
3C1438000F1370380C8060EB41C038083F0017237FA21B>I<EA01FEEA0703380C078012
1C383803000078C7FC127012F0A712700078134012386C1380380C0100EA0706EA01F812
157E9416>I<14E0130F13011300ABEA01F8EA0704EA0C02EA1C01EA38001278127012F0
A7127012781238EA1801EA0C0238070CF03801F0FE17237EA21B>I<EA01FCEA0707380C
0380381C01C01238007813E0EA700012F0B5FC00F0C7FCA512700078132012386C13406C
138038070300EA00FC13157F9416>I<133E13E33801C780EA0387130748C7FCA9EAFFF8
0007C7FCB27FEA7FF0112380A20F>I<14703803F198380E1E18EA1C0E38380700A20078
1380A400381300A2EA1C0EEA1E1CEA33F00020C7FCA212301238EA3FFE381FFFC06C13E0
383000F0481330481318A400601330A2003813E0380E03803803FE0015217F9518>I<12
0E12FE121E120EABEB1F80EB60C0EB80E0380F0070A2120EAF38FFE7FF18237FA21B>I<
121C123EA3121CC7FCA8120E127E121E120EB1EAFFC00A227FA10E>I<13E0EA01F0A3EA
00E01300A81370EA07F012001370B3A51260EAF0E013C0EA6180EA3F000C2C83A10F>I<
120E12FE121E120EABEB03FCEB01F014C01480EB02005B5B5B133813F8EA0F1CEA0E1E13
0E7F1480EB03C0130114E0EB00F014F838FFE3FE17237FA21A>I<390E1FC07F3AFE60E1
83803A1E807201C03A0F003C00E0A2000E1338AF3AFFE3FF8FFE27157F942A>109
D<380E1F8038FE60C0381E80E0380F0070A2120EAF38FFE7FF18157F941B>I<EA01FCEA
0707380C0180381800C0003813E0481370A200F01378A700701370007813F0003813E038
1C01C0380E038038070700EA01FC15157F9418>I<EA0E1F38FE61C0380E8060380F0070
000E1338143CA2141EA7143CA21438000F1370380E80E0EB41C0EB3F0090C7FCA9EAFFE0
171F7F941B>I<EA0E3CEAFE46EA1E8FEA0F0F13061300120EAD120FEAFFF010157F9413>
114 D<EA0F88EA3078EA601812C01308A212E0EAF000127FEA3FE0EA0FF0EA01F8EA003C
EA801C130CA212C01308EAE018EAD030EA8FC00E157E9413>I<1202A41206A3120E121E
123EEAFFFCEA0E00AB1304A6EA07081203EA01F00E1F7F9E13>I<000E137038FE07F0EA
1E00000E1370AD14F0A238060170380382783800FC7F18157F941B>I<39FF8FF87F393E
01E03C001CEBC01814E0000E1410EB0260147000071420EB04301438D803841340EB8818
141CD801C81380EBD00C140E3900F00F00497EA2EB6006EB400220157F9423>119
D<38FF80FE381E00781430000E1320A26C1340A2EB80C000031380A23801C100A2EA00E2
A31374A21338A31310A25BA35B12F05B12F10043C7FC123C171F7F941A>121
D E /Ft 20 118 df<B51280A311037F9016>45 D<B612E015FC3907E0007F0003EC0F80
ED03C06F7E6F7E16788282A282A21780160717C0A21603A217E0AB17C0A21607A21780A2
160F17005E161E5E5E16F84B5A4B5AED0F800007023FC7FCB612FC15E02B317CB033>68
D<B51280A23807F0006C5AB3B3A7487EB51280A211317DB017>73
D<D8FFF0ED7FF8A200071700D802F815BEA3017CEC013EA26D1402A36D1404A36D6C1308
A36D6C1310A36D6C1320A26D6C1340A36D6C1380A391387C0100A3EC3E02A36E5AA2EC0F
88A3EC07D0A3EC03E0A300076D5AD80F80157FD8FFF891380FFFF8EC008035317CB03D>
77 D<B612E015FC3907E0003F0003EC0F80ED03C0ED01E016F0ED00F8A21678167CA616
7816F816F0150116E0ED03C0ED0F80ED3E0090B512F801E0C8FCB3A3487EB57EA226317D
B02D>80 D<90387F80203801FFE03907C07860380F001C001EEB06E04813030038130100
7813001270156012F0A21520A37E1500127C127E7E13C0EA1FF86CB47E6C13F06C13FCC6
13FF010F1380010013C0EC1FE01407EC03F01401140015F8A26C1478A57E15706C14F015
E07E6CEB01C000ECEB038000C7EB070038C1F01E38807FFCEB0FF01D337CB125>83
D<13FE380303C0380C00E00010137080003C133C003E131C141EA21208C7FCA3EB0FFEEB
FC1EEA03E0EA0F80EA1F00123E123C127C481404A3143EA21278007C135E6CEB8F08390F
0307F03903FC03E01E1F7D9E21>97 D<EB1FC0EBF0303801C00C38078002EA0F00000E13
0F001E5B5AA2007C1304007890C7FC12F8A91278127C123C15807E000EEB0100120F3807
80023801C00C3800F030EB1FC0191F7E9E1D>99 D<15F0141FA214011400AFEB0FC0EB70
303801C00C3803800238070001120E001E13005AA2127C1278A212F8A71278A2127C123C
A27E000E13016C1302380380046C6C487E3A00F030FF80EB1FC021327EB125>I<EB3F80
EBE0E0380380383807003C000E7F121E001C7F123C127C00781480140712F8A2B6FC00F8
C8FCA61278127C123C15807E000EEB0100000F13027E3801C00C3800F030EB1FC0191F7E
9E1D>I<EB07E0EB1C10EB3838EB707C13E01201EBC03800031300ACB512C0A23803C000
B3A8487EEA7FFFA216327FB114>I<15F090387F03083901C1C41C380380E83907007008
48EB7800001E7FA2003E133EA6001E133CA26C5B6C13706D5A3809C1C0D8087FC7FC0018
C8FCA5121C7E380FFFF86C13FF6C1480390E000FC00018EB01E048EB00F0007014704814
38A500701470A26C14E06CEB01C00007EB07003801C01C38003FE01E2F7E9F21>I<120F
EA1F80A4EA0F00C7FCABEA0780127FA2120F1207B3A6EA0FC0EAFFF8A20D307EAF12>
105 D<260780FEEB1FC03BFF83078060F0903A8C03C180783B0F9001E2003CD807A013E4
DA00F47F01C013F8A2495BB3A2486C486C133F3CFFFC1FFF83FFF0A2341F7E9E38>109
D<380780FE39FF83078090388C03C0390F9001E0EA07A06E7E13C0A25BB3A2486C487E3A
FFFC1FFF80A2211F7E9E25>I<EB1FC0EBF0783801C01C38070007481480001EEB03C000
1C1301003C14E0A248EB00F0A300F814F8A8007814F0007C1301003C14E0A26CEB03C0A2
6CEB07803907800F003801C01C3800F078EB1FC01D1F7E9E21>I<380783E038FF8418EB
887CEA0F90EA07A01438EBC000A35BB3487EEAFFFEA2161F7E9E19>114
D<3801FC10380E0330381800F048137048133012E01410A37E6C1300127EEA3FF06CB4FC
6C13C0000313E038003FF0EB01F813006C133CA2141C7EA27E14186C1338143000CC1360
38C301C03880FE00161F7E9E1A>I<1340A513C0A31201A212031207120F381FFFE0B5FC
3803C000B01410A80001132013E000001340EB78C0EB1F00142C7FAB19>I<D8078013F0
00FF131FA2000F130100071300B31401A300031302EBC0040001497E3A007030FF80EB1F
C0211F7E9E25>I E /Fu 5 85 df<166016E0A215011503A2150782150DA21519153915
311561A215C1A2EC0181140315011406A2020C7F15005C143814305CA25CA249B5FCA249
C7FC1306A25B8249147CA25B137013605BA212011203D80FE014FED8FFF890381FFFE0A2
2B327CB134>65 D<010FB512FCEEFF80903A007E000FE0027CEB03F0EE00F8177CA24A80
171E171FA2495AEF0F80A3495AA3171F495AA4494815005FA349C8127EA3177C013E15FC
5F16015F494A5AA24C5A4C5A4992C7FC161E5E5E4848495A4B5AED0F800003027FC8FCB6
12FC15C031317BB035>68 D<010FB612F8A29039007E0003027C13001778A217305CA449
5AA31760903903E001801700A3494848C7FCA25D151F90380FFFFEA2EC801E150E90381F
000CA4013E5BA292C8FCA25BA45BA4485AA31203B512E0A22D317BB02E>70
D<010FB512E016FC9039007E003F027CEB0F80EE07C0EE03E0A24AEB01F0A31603495AA3
17E04948130717C0160F17804948EB1F00163E1678ED01E090390F800F80DAFFFCC7FCEC
800E8149486C7E826F7EA2013E80A4491303A25EA2491307A3171848481530A217200003
02031360B5D8800113C0923800F180C9EA3E002D327BB033>82 D<0007B712F0A23A0FE0
07E0070180EBC001D80E00EC00E0120C121C0018495AA24816C0A24AC7FC5AA348013EEB
0180C791C7FCA35CA45CA4495AA4495AA4495AA4495AA449C9FCA35B003FB5FCA22C3174
B032>84 D E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300dpi
TeXDict begin
%%EndSetup
%%Page: 0 1
0 0 bop 799 949 a Fu(D)25 b(R)g(A)g(F)g(T)225 1041 y
Ft(Do)r(cumen)n(t)20 b(for)i(a)f(Standard)g(Message-P)n(assing)f(In)n
(terface)621 1235 y Fs(Message)c(P)o(assing)h(In)o(terface)e(F)l(orum)
814 1362 y(August)i(2,)f(1996)190 1420 y(This)h(w)o(ork)f(w)o(as)h
(supp)q(orted)g(in)f(part)g(b)o(y)g(NSF)g(and)h(ARP)l(A)e(under)h(NSF)g
(con)o(tract)283 1478 y(CD)o(A-9115428)j(and)e(Esprit)f(under)h(pro)s
(ject)e(HPC)i(Standards)g(\(21111\).)p eop
%%Page: 1 2
1 1 bop 166 49 a Fr(This)20 b(is)h(the)f(result)g(of)f(a)h(LaT)l(eX)g
(run)g(of)g(a)f(draft)g(of)h(a)f(single)j(c)o(hapter)d(of)h(the)g(MPIF)
f(Final)75 106 y(Rep)q(ort)d(do)q(cumen)o(t.)969 2828
y(i)p eop
%%Page: 1 3
1 2 bop 75 361 a Fq(Chapter)31 b(6)75 568 y Fp(External)40
b(In)m(terfaces)75 809 y Fo(6.1)59 b(Intro)r(duction)1875
854 y Fn(>)16 b Fm(\(Sept\))75 910 y Fr(The)f(ma)s(jor)f(c)o(hanges)h
(to)g(this)h(c)o(hapter)f(are:)143 1004 y Fn(\017)23
b Fr(Comm)o(unicator)14 b(ID)h(no)o(w)g(only)h(returns)f(t)o(w)o(o)f(v)
m(alues.)143 1098 y Fn(\017)23 b Fr(Prop)q(osal)15 b(2)g(for)f(P)o(ac)o
(king/Unpac)o(king)i(datat)o(yp)q(es)e(is)i(no)o(w)f(the)g(only)h(one.)
143 1192 y Fn(\017)23 b Fr(The)15 b(ob)s(ject)g(naming)g(prop)q(osal)h
(w)o(as)e(up)q(dated.)143 1286 y Fn(\017)23 b Fr(Threads)15
b(section)h(w)o(as)e(mo)o(v)o(ed)h(from)f(misc)i(to)e(external.)143
1379 y Fn(\017)23 b Fr(The)15 b(MPI)p 374 1379 14 2 v
16 w(REQUEST)p 612 1379 V 18 w(TYPE)g(has)g(b)q(een)h(generalized.)143
1473 y Fn(\017)23 b Fr(The)10 b(MPI)p 369 1473 V 16 w(ADD)p
489 1473 V 16 w(FINALIZE)p 722 1473 V 17 w(CODE)g(has)g(b)q(een)i
(replace)f(b)o(y)f(allo)o(wing)h(callbac)o(ks)g(on)f(MPI)p
1776 1473 V 16 w(COMM)p 1944 1473 V 16 w(W)o(ORLD)189
1530 y(when)15 b(it)h(is)f(freed)h(at)f(MPI)p 659 1530
V 16 w(FINALIZE.)143 1624 y Fn(\017)23 b Fr(Added)16
b(C++)g(bindings.)21 b(Undoubtedly)c(has)e(lots)g(of)g(errors.)1875
1670 y Fn(?)h Fm(\(Sept\))166 1717 y Fr(The)i Fl(MPI)f
Fr(F)l(orum)h(has)f(alw)o(a)o(ys)g(w)o(an)o(ted)h(writers)f(of)h
(external)g(pac)o(k)m(ages)g(to)f(b)q(e)h(able)h(to)e(create)75
1774 y(the)k(t)o(yp)q(e)g(of)f(functionalit)o(y)i(found)f(in)o(ternal)g
(to)f Fl(MPI)p Fr(.)g(F)l(or)g(example,)i(in)g Fl(MPI-1)p
Fr(,)f(the)g(cac)o(hing)g(on)75 1830 y(comm)o(unicators)16
b(allo)o(ws)h(users)g(to)f(store)g(information)h(in)g(a)g(w)o(a)o(y)e
(similar)j(to)e(whic)o(h)i(an)e Fl(MPI)g Fr(imple-)75
1887 y(men)o(tations)i(could)i(store)e(top)q(ology)g(information.)30
b(The)19 b(cac)o(hing)g(capabilit)o(y)h(has)e(b)q(een)i(expanded)75
1943 y(to)e(other)f(handles)j(in)f Fl(MPI-2)p Fr(.)28
b(Another)18 b(mec)o(hanism)g(in)h(whic)o(h)g(users)g(ha)o(v)o(e)e
(expressed)i(in)o(terest)f(is)75 2000 y(the)f(abilit)o(y)h(to)e(create)
h(new)g(non-blo)q(c)o(king)i(op)q(erations)e(similar)h(to)e(the)h(ones)
g(o\013ered)g(in)g Fl(MPI)p Fr(.)f(This)75 2056 y(c)o(hapter)f
(includes)j(this)d(capabilit)o(y)l(.)166 2113 y Fl(MPI-1)g
Fr(w)o(as)g(delib)q(erately)j(designed)f(with)f(opaque)g(ob)s(jects.)k
(This)d(allo)o(ws)f(\015exibilit)o(y)i(in)e(imple-)75
2169 y(men)o(tations)f(and)g(allo)o(ws)g(for)f(future)h(enhancemen)o
(ts)g(without)g(c)o(hanging)h(the)f(users)g(view)g(of)g(ob)s(jects)75
2225 y(already)h(presen)o(t)g(in)g Fl(MPI)p Fr(.)f(T)l(o)g(allo)o(w)h
(users)g(to)f(gain)h(access)g(to)f(needed)i(information)f(in)g(opaque)g
(ob-)75 2282 y(jects,)f Fl(MPI)g Fr(has)g(a)g(n)o(um)o(b)q(er)h(of)f
(accessor)h(functions.)21 b(F)l(or)15 b(example,)h Fl(MPI)p
1375 2282 V 16 w(GET)p 1479 2282 V 17 w(COUNT)g Fr(will)h(return)75
2338 y(the)g(the)g(n)o(um)o(b)q(er)g(of)f(en)o(tries)h(receiv)o(ed)h
(as)e(stored)h(in)g(the)g(opaque)g(part)f(of)h(the)f(status)g(ob)s
(ject.)24 b(One)75 2395 y(dra)o(wbac)o(k)15 b(to)f(this)i(approac)o(h)f
(is)h(that)e(only)i(information)g(with)f(explicit)j(accessor)d
(functions)h(can)f(b)q(e)75 2451 y(easily)f(and)g(p)q(ortably)g(gotten)
e(from)h(an)g Fl(MPI)g Fr(implemenation.)21 b(In)14 b
Fl(MPI-1)p Fr(,)e(the)i Fl(MPI)e Fr(F)l(orum)h(included)75
2508 y(all)j(the)f(accessor)g(functions)h(that)e(seemed)i(to)f(b)q(e)h
(needed)g(b)o(y)f(users.)20 b(Ho)o(w)o(ev)o(er,)14 b(extension)i(in)g
Fl(MPI-2)75 2564 y Fr(and)i(exp)q(erience)i(has)e(sho)o(wn)g(a)g(need)g
(for)g(other)f(accessor)h(functions.)29 b(This)19 b(c)o(hapter)e(has)h
(accessor)75 2621 y(functions)e(to)f(allo)o(w)g(access)g(to)g(the)g
(opaque)g(datat)o(yp)q(e)g(handle.)964 2828 y(1)p eop
%%Page: 2 4
2 3 bop 75 -100 a Fr(2)894 b Fk(CHAPTER)15 b(6.)35 b(EXTERNAL)16
b(INTERF)-5 b(A)o(CES)75 49 y Fo(6.2)59 b(Generalized)20
b(Requests)75 152 y Fj(6.2.1)49 b(Intro)q(duction)75
238 y Fr(The)18 b(goal)f(of)g(this)h Fl(MPI-2)f Fr(extension)h(is)g(to)
f(allo)o(w)h(users)f(to)g(create)g(requests)h(for)f(non-blo)q(c)o(king)
i(op-)75 295 y(erations.)j(These)16 b(requests)g(could)h(b)q(e)f(used)h
(to)e(p)q(erform)h(additional)h(op)q(erations)f(not)g(supp)q(orted)g(b)
o(y)75 351 y Fl(MPI)e Fr(suc)o(h)g(as)g(in)o(tricate)h(non-blo)q(c)o
(king)h(collectiv)o(e)g(op)q(erations.)k(They)15 b(could)g(also)f(b)q
(e)i(used)e(to)g(create)75 408 y(a)h(non-blo)q(c)o(king)i(send-receiv)o
(e)g(t)o(yp)q(e)e(function.)166 464 y(The)20 b(metho)q(d)g(tak)o(en)g
(in)g(de\014ning)i(this)e Fl(MPI-2)f Fr(extension)i(is)f(to)f(try)h
(and)g(generalize)h(curren)o(t)75 520 y Fl(MPI)e Fr(functions.)33
b(F)l(or)19 b(example,)i(the)e Fl(MPI)g Fr(functions)h(of)f
Fl(MPI)p 1208 520 14 2 v 16 w Fn(f)p Fl(TEST)p Fn(j)p
Fl(W)l(AIT)p Fn(gf)p Fl(ANY)p Fn(j)p Fl(SOME)p Fn(j)p
Fl(ALL)p Fn(g)75 577 y Fr(are)c(generalized.)24 b(The)16
b Fl(MPI)p 585 577 V 16 w(POST)p 719 577 V 17 w(HANDLER)g
Fr(function)g(of)g(Section)g(6.12.3)e(is)j(used)f(for)f(progress.)75
633 y(Also,)21 b(whenev)o(er)f(additional)h(functions)g(are)f(needed)h
(they)f(are)f(made)h(to)f(lo)q(ok)h(lik)o(e)h(similar)g(func-)75
690 y(tions)e(curren)o(tly)g(a)o(v)m(ailable)i(in)f Fl(MPI)p
Fr(.)e(Th)o(us,)h(these)g(extensions)h(are)e(based)h(on)g(the)g
Fl(MPI)f Fr(p)q(ersisten)o(t)75 746 y(comm)o(unication)e(requests)f
(and)g(the)h(cac)o(hing)g(features.)166 803 y(In)22 b(analogy)f(to)g
(the)h(cac)o(hing)g(feature,)h(a)e(new)h(t)o(yp)q(e)g(of)f(request)h
(is)g(\014rst)f(created)h(using)g(the)75 859 y(function)c
Fl(MPI)p 340 859 V 16 w(REQUEST)p 559 859 V 18 w(TYPE)p
694 859 V 16 w(CREA)l(TE)h Fr(and)e(freed)g(with)h Fl(MPI)p
1290 859 V 16 w(REQUEST)p 1509 859 V 18 w(TYPE)p 1644
859 V 16 w(FREE)p Fr(.)g(The)75 916 y(rest)i(of)f(the)h(prop)q(osal)h
(mimics)g(the)f(mec)o(hanisms)h(in)g(p)q(ersisten)o(t)f(comm)o
(unication)h(requests.)35 b(The)75 972 y(user)18 b(creates)f(a)g(sp)q
(eci\014c)j(instance)e(of)f(a)g(request)h(via)g Fl(MPI)p
1125 972 V 16 w(REQUEST)p 1344 972 V 17 w(INIT)p Fr(.)f(The)h(op)q
(eration)g(asso-)75 1029 y(ciated)k(with)f(the)g(request)g(is)g(b)q
(egun)h(with)f Fl(MPI)p 958 1029 V 16 w(ST)l(ART)p Fn(f)p
Fl(ALL)p Fn(g)p Fr(.)37 b(Completion)21 b(of)g(the)g(request)f(is)75
1085 y(done)g(with)g Fl(MPI)p 381 1085 V 16 w Fn(f)p
Fl(TEST)p Fn(j)p Fl(W)l(AIT)p Fn(gf)p Fl(ANY)p Fn(j)p
Fl(SOME)p Fn(j)p Fl(ALL)p Fn(g)p Fr(.)31 b(The)20 b(sp)q(eci\014c)h
(request)f(can)g(b)q(e)g(freed)g(with)75 1141 y Fl(MPI)p
160 1141 V 16 w(REQUEST)p 379 1141 V 18 w(FREE)p Fr(.)166
1198 y(This)i(section)h(b)q(egins)g(with)f(an)f(o)o(v)o(erview)h(of)f
(the)h(functionalit)o(y)h(whic)o(h)g(is)f(follo)o(w)o(ed)g(b)o(y)g(the)
75 1254 y(sp)q(eci\014c)e(calls.)28 b(It)18 b(is)g(follo)o(w)o(ed)g(b)o
(y)f(sho)o(wing)h(ho)o(w)f(these)h(functions)g(can)g(b)q(e)h(used)f(to)
f(create)g(a)h(non-)75 1311 y(blo)q(c)o(king)f(v)o(ersion)e(of)g
Fl(MPI)p 547 1311 V 16 w(ALLGA)l(THER)p Fr(.)75 1433
y Fj(6.2.2)49 b(F)o(unctionalit)o(y)75 1518 y Fr(The)15
b(b)q(eha)o(vior)h(of)f(the)g(request)g(is)h(de\014ned)h(b)o(y)e(these)
g(callbac)o(k)h(functions:)75 1625 y Fl(init)p 139 1625
V 17 w(fn)23 b Fr(This)13 b(callbac)o(k)h(function)g(is)f(in)o(v)o(ok)o
(ed)g(when)h(a)e(new)h(instance)h(of)e(the)h(request)g(is)g(created.)19
b(This)189 1681 y(function)i(can)f(b)q(e)i(used,)f(for)f(example,)i(to)
e(allo)q(cate)h(memory)f(for)g(the)g(request)h(ob)s(ject)f(and)189
1738 y(p)q(erform)15 b(other)f(initialization.)75 1831
y Fl(sta)o(rt)p 164 1831 V 17 w(fn)23 b Fr(This)e(callbac)o(k)h
(function)g(is)f(in)o(v)o(ok)o(ed)g(when)g(the)g(op)q(eration)g(asso)q
(ciated)g(with)g(request)f(is)189 1888 y(started.)30
b(This)19 b(function)h(can)f(b)q(e)g(used,)h(for)e(example,)i(to)e
(start)g(one)h(or)f(more)h(non)o(blo)q(c)o(king)189 1944
y(comm)o(unications)c(that)g(initiate)i(the)e(op)q(eration.)75
2038 y Fl(complete)p 248 2038 V 17 w(fn)23 b Fr(This)18
b(callbac)o(k)h(function)f(is)h(in)o(v)o(ok)o(ed)f(when)g(the)g
(request)f(has)h(completed.)29 b(It)17 b(can)h(b)q(e)189
2095 y(used)d(to)g(set)g(return)g(v)m(alues)h(in)g(extra)p
852 2095 V 16 w(state)f(or)f(clean)i(up)g(from)f(the)g(op)q(eration.)75
2188 y Fl(free)p 148 2188 V 16 w(fn)23 b Fr(This)f(callbac)o(k)f
(function)h(is)f(in)o(v)o(ok)o(ed)g(when)g(the)g(request)g(is)g(freed.)
37 b(It)21 b(can)g(b)q(e)g(used,)i(for)189 2245 y(example,)15
b(to)g(deallo)q(cate)h(memory)l(.)75 2339 y Fl(cancel)p
194 2339 V 17 w(fn)23 b Fr(This)15 b(callbac)o(k)h(function)f(is)g(in)o
(v)o(ok)o(ed)g(whenev)o(er)g(there)g(is)g(a)f(failure)h(in)h(callbac)o
(k)f(functions)189 2395 y(\(see)k(section)g(6.2.3)f(for)g(a)h
(discussion)h(of)f(failure\))h(or)e(whenev)o(er)h Fl(MPI)p
1448 2395 V 16 w(CANCEL)h Fr(is)f(called)i(to)189 2452
y(cancel)f(the)f(request.)31 b(This)19 b(function)h(can)f(b)q(e)h
(used,)g(for)e(example,)i(to)f(deallo)q(cate)h(memory)l(,)189
2508 y(cancel)c(in)o(ternal)g(messages,)e(reset)h(state,)f(etc.)166
2614 y(A)h(new)h(t)o(yp)q(e)f(of)g(request)g(is)h(created)f(with)1967
46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 3 5
3 4 bop 75 -100 a Fk(6.2.)29 b(GENERALIZED)16 b(REQUESTS)1076
b Fr(3)75 49 y Fl(MPI)p 160 49 14 2 v 16 w(REQUEST)p
379 49 V 18 w(TYPE)p 514 49 V 17 w(CREA)l(TE\(init)p
779 49 V 17 w(fn,)14 b(sta)o(rt)p 946 49 V 17 w(fn,)f(complete)p
1196 49 V 17 w(fn,)h(free)p 1347 49 V 16 w(fn,)g(cancel)p
1543 49 V 17 w(fn,)g(t)o(yp)q(e)p 1704 49 V 17 w(req\))117
126 y Fi(IN)155 b Fl(init)p 382 126 V 17 w(fn)472 b Fi(Creation)14
b(callbac)o(k)f(function)h(for)f(t)o(yp)q(e)p 1542 126
13 2 v 16 w(req)117 199 y(IN)155 b Fl(sta)o(rt)p 407
199 14 2 v 17 w(fn)447 b Fi(Request)15 b(start)g(callbac)o(k)e
(function)g(for)h(t)o(yp)q(e)p 1630 199 13 2 v 15 w(req)117
272 y(IN)155 b Fl(complete)p 491 272 14 2 v 17 w(fn)363
b Fi(Request)15 b(complete)e(callbac)o(k)g(function)h(for)g(t)o(yp)q(e)
p 1706 272 13 2 v 15 w(req)117 344 y(IN)155 b Fl(free)p
391 344 14 2 v 17 w(fn)463 b Fi(Request)15 b(free)g(callbac)o(k)e
(function)g(for)h(t)o(yp)q(e)p 1610 344 13 2 v 15 w(req)117
417 y(IN)155 b Fl(cancel)p 437 417 14 2 v 18 w(fn)416
b Fi(Request)15 b(cancel/failure)f(callbac)o(k)f(function)g(for)h(t)o
(yp)q(e)p 1790 417 13 2 v 15 w(req)117 490 y(OUT)108
b Fl(t)o(yp)q(e)p 401 490 14 2 v 18 w(req)430 b Fh(MPI)13
b Fi(created)j(request)f(t)o(yp)q(e)g(for)e(future)i(reference)75
614 y Fg(int)23 b(MPI)p 245 614 15 2 v 17 w(Request)p
430 614 V 16 w(type)p 542 614 V 17 w(create\(MPI)p 799
614 V 16 w(Init)p 911 614 V 17 w(function)f(*init)p 1262
614 V 17 w(fn,)h(MPI)p 1446 614 V 17 w(Start)p 1583 614
V 17 w(function)393 671 y(*start)p 540 671 V 17 w(fn,)g(MPI)p
724 671 V 17 w(Complete)p 933 671 V 16 w(function)g(*complete)p
1380 671 V 16 w(fn,)393 727 y(MPI)p 468 727 V 17 w(Free)p
581 727 V 17 w(function)f(*free)p 932 727 V 17 w(fn,)h(MPI)p
1116 727 V 17 w(Cancel)p 1277 727 V 16 w(function)g(*cancel)p
1676 727 V 16 w(fn,)393 784 y(MPI)p 468 784 V 17 w(Type)p
581 784 V 17 w(Request)f(*type)p 908 784 V 17 w(req\))75
870 y(MPI)p 150 870 V 17 w(REQUEST)p 335 870 V 16 w(TYPE)p
447 870 V 17 w(CREATE\(INIT)p 728 870 V 15 w(FN,)i(START)p
959 870 V 16 w(FN,)g(COMPLETE)p 1263 870 V 16 w(FN,)f(FREE)p
1470 870 V 17 w(FN,)g(CANCEL)p 1726 870 V 17 w(FN,)393
927 y(TYPE)p 492 927 V 17 w(REQ,)g(IERROR\))170 983 y(EXTERNAL)g(INIT)p
484 983 V 17 w(FN,)g(START)p 716 983 V 17 w(FN,)g(COMPLETE)p
1020 983 V 16 w(FN,)h(FREE)p 1228 983 V 16 w(FN,)g(CANCEL)p
1484 983 V 16 w(FN)170 1039 y(INTEGER)f(type)p 460 1039
V 17 w(req,)g(IERROR)75 1126 y(int)g(MPI::Request)p 461
1126 V 16 w(type)p 573 1126 V 17 w(create\(const)f(MPI::Init)p
1116 1126 V 16 w(function)h(*init)p 1467 1126 V 16 w(fn,)393
1182 y(const)g(MPI::Start)p 779 1182 V 16 w(function)g(*start)p
1154 1182 V 16 w(fn,)393 1239 y(const)g(MPI::Complete)p
851 1239 V 16 w(function)g(*complete)p 1298 1239 V 15
w(fn,)393 1295 y(const)g(MPI::Free)p 755 1295 V 16 w(function)g(*free)p
1106 1295 V 17 w(fn,)g(const)g(MPI::Cancel)p 1625 1295
V 16 w(function)393 1352 y(*cancel)p 564 1352 V 16 w(fn,)h(MPI::Type)p
892 1352 V 16 w(Request)f(*type)p 1219 1352 V 16 w(req\))166
1438 y Fr(The)c(callbac)o(k)g(functions)h(are)e(describ)q(ed)j(b)q(elo)
o(w)e(with)g(the)g(routines)g(that)f(cause)h(them)f(to)g(b)q(e)75
1495 y(called.)j Fl(t)o(yp)q(e)p 304 1495 14 2 v 18 w(req)14
b Fr(is)h(a)f(unique)i(id)g(that)e(is)h(generated)f(b)o(y)g
Fl(MPI)g Fr(that)g(can)h(b)q(e)g(used)g(to)f(create)g(requests)75
1551 y(of)h(this)g(t)o(yp)q(e.)20 b(This)c(call)h(is)e(lo)q(cal)i(and)e
(the)g Fl(t)o(yp)q(e)p 925 1551 V 18 w(req)g Fr(is)h(a)f(lo)q(cal)h
(quan)o(tit)o(y)f(to)f(the)i(calling)h(pro)q(cess.)j(It)75
1608 y(cannot)15 b(b)q(e)h(transfered)f(to)f(another)h(pro)q(cess.)166
1664 y(If)j(the)g(user)h(needs)g(their)f(callbac)o(k)h(function)g(to)f
(b)q(e)h(atomic,)f(then)g(s/he)g(should)h(use)g(lo)q(c)o(ks)f(or)75
1720 y(the)d(nec)o(hanisms)h(describ)q(ed)i(in)e(section)f(6.12.4.)166
1777 y(T)l(o)g(get)g(an)g(instance)h(of)f Fl(t)o(yp)q(e)p
684 1777 V 17 w(req)p Fr(,)g(one)g(calls:)909 b Fn(>)16
b Fm(\(Sept\))75 1928 y Fl(MPI)p 160 1928 V 16 w(REQUEST)p
379 1928 V 18 w(INIT\(t)o(yp)q(e)p 584 1928 V 16 w(req,)f(extra)p
782 1928 V 17 w(state,)h(request\))117 2005 y Fi(IN)155
b Fl(t)o(yp)q(e)p 401 2005 V 18 w(req)430 b Fi(T)o(yp)q(e)10
b(of)f(request)h(desired)h(\(from)c(MPI)p 1519 2005 13
2 v 16 w(REQUEST)p 1738 2005 V 15 w(TYPE)p 1870 2005
V 16 w(CREA)m(TE\))117 2078 y(IN)155 b Fl(extra)p 416
2078 14 2 v 17 w(state)384 b Fi(Extra)14 b(state)h(passed)g(to)f
Fh(init)p 1365 2078 13 2 v 15 w(fn)117 2150 y Fi(OUT)108
b Fl(request)452 b Fi(Handle)14 b(to)g(request)75 2275
y Fg(int)23 b(MPI)p 245 2275 15 2 v 17 w(Request)p 430
2275 V 16 w(init\(MPI)p 638 2275 V 17 w(Type)p 751 2275
V 16 w(request)g(type)p 1054 2275 V 17 w(req,)g(void)g(*extra)p
1453 2275 V 17 w(state,)393 2331 y(MPI)p 468 2331 V 17
w(TYPE)p 581 2331 V 17 w(Request)f(*request\))75 2418
y(MPI)p 150 2418 V 17 w(REQUEST)p 335 2418 V 16 w(INIT\(TYPE)p
567 2418 V 16 w(REQ,)h(EXTRA)p 822 2418 V 17 w(STATE,)g(REQUEST,)g
(IERROR\))170 2474 y(INTEGER)g(TYPE)p 460 2474 V 17 w(REQ,)g(EXTRA)p
716 2474 V 17 w(STATE,)g(REQUEST,)g(IERROR)75 2561 y(int)g
(MPI::Request)p 461 2561 V 16 w(init\(MPI::Type)p 813
2561 V 15 w(request)g(type)p 1115 2561 V 17 w(req,)g(void)g(*extra)p
1514 2561 V 17 w(state,)393 2617 y(MPI::TYPE)p 612 2617
V 16 w(Request)g(*request\))1875 2657 y Fn(?)16 b Fm(\(Sept\))166
2704 y Fr(This)g(function)g(in)o(v)o(ok)o(es)f(the)g(callbac)o(k)h
(function)g Fl(init)p 1100 2704 14 2 v 17 w(fn)p Fr(.)21
b(In)15 b(C)g(this)h(is)g(de\014ned)g(as:)-32 46 y Fm(1)-32
103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32
385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40 611
y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40
1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40
1345 y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40
1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740 y(31)-40
1796 y(32)-40 1853 y(33)-40 1909 y(34)-40 1966 y(35)-40
2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191 y(39)-40
2248 y(40)-40 2304 y(41)-40 2361 y(42)-40 2417 y(43)-40
2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643 y(47)-40
2699 y(48)p eop
%%Page: 4 6
4 5 bop 75 -100 a Fr(4)894 b Fk(CHAPTER)15 b(6.)35 b(EXTERNAL)16
b(INTERF)-5 b(A)o(CES)75 49 y Fg(typedef)23 b(int)g
(MPI_Request_init_fn\(MPI_Reque)o(st)e(type_req,)i(void)75
106 y(*extra_state,)f(MPI_Comm)h(comm,)g(MPI_Request)f(request\);)166
205 y Fr(A)15 b(F)l(ortran)f(declaration)i(for)f(suc)o(h)g(a)g
(function)h(is)g(as)f(follo)o(ws:)75 261 y Fg(INTEGER)23
b(FUNCTION)g(REQUEST)p 652 261 15 2 v 16 w(INIT)p 764
261 V 17 w(FN\(TYPE)p 949 261 V 16 w(REQ,)g(EXTRA)p 1204
261 V 17 w(STATE,)g(COMM,)g(REQUEST\))170 318 y(INTEGER)g(TYPE)p
460 318 V 17 w(REQ,)g(EXTRA)p 716 318 V 17 w(STATE,)g(COMM,)g(REQUEST)
166 404 y Fr(A)15 b(C++)h(declaration)g(for)e(suc)o(h)i(a)f(function)h
(is)g(as)e(follo)o(ws:)75 503 y Fg(typedef)23 b(int)g
(MPI::Request_init_fn\(MPI::Req)o(uest)e(type_req,)h(void)75
559 y(*extra_state,)g(MPI::Comm)h(comm,)g(MPI::Request)f(request\);)166
658 y Fl(MPI)p 251 658 14 2 v 16 w(REQUEST)p 470 658
V 18 w(INIT)c Fr(in)o(v)o(ok)o(es)g(the)h(user)f(function)i
Fl(init)p 1180 658 V 17 w(fn)f Fr(with)f(input)i(argumen)o(ts)e
Fl(t)o(yp)q(e)p 1789 658 V 17 w(req)p Fr(,)75 715 y Fl(extra)p
173 715 V 16 w(state)p Fr(,)h Fl(comm)p Fr(,)d(and)i
Fl(request)h Fr(whic)o(h)f(are)f(the)h(argumen)o(ts)e(that)h(w)o(ere)g
(passed)h(b)o(y)f(the)h(caller)g(of)75 771 y Fl(MPI)p
160 771 V 16 w(REQUEST)p 379 771 V 18 w(INIT)p Fr(.)12
b(The)h(callbac)o(k)i(function)f(will)h(usually)g(allo)q(cate)f(and)f
(initialize)j(in)o(ternal)f(data)75 828 y(structures)j(of)g(the)h
(request.)29 b(It)18 b(can)h(return)f(in)h Fl(extra)p
1048 828 V 17 w(state)g Fr(a)f(p)q(oin)o(ter)h(to)f(this)h(in)o(ternal)
g(structure)75 884 y(since)g Fl(extra)p 287 884 V 17
w(state)g Fr(is)g(passed)g(to)e(all)j(the)e(user)g(callbac)o(k)i
(functions)f(for)e(this)i(request.)29 b(Outside)20 b(the)75
941 y(user)g(function,)h Fl(MPI)p 457 941 V 16 w(REQUEST)p
676 941 V 18 w(INIT)e Fr(creates)g(and)h(returns)g(in)g
Fl(request)i Fr(a)d(handle)i(to)e(the)h(newly)75 997
y(created)15 b(request.)21 b(This)15 b(request)h(is)g(lo)q(cal)g(to)f
(the)g(calling)i(pro)q(cess.)k Fl(init)p 1345 997 V 17
w(fn)15 b Fr(returns)g Fh(MPI)p 1645 997 13 2 v 15 w(SUCCESS)e
Fr(if)75 1054 y(it)i(succeeds.)21 b(The)16 b(consequence)g(of)f
(returning)h(failure)g(is)g(discussed)h(later.)-1527
b Fn(>)15 b Fm(\(Sept\))166 1151 y Ff(Discussion:)166
1200 y Fi(By)g(a)g(close)g(v)o(ote)g(w)o(e)h(remo)o(v)o(ed)e(comm)e
(from)h(MPI)p 993 1200 V 16 w(REQUEST)p 1212 1200 V 15
w(INIT.)i(Unless)h(there)g(is)f(a)f(push)i(to)f(put)75
1250 y(it)e(bac)o(k)g(it)g(will)f(sta)o(y)i(remo)o(v)o(ed.)j(Also,)c(w)
o(e)g(decided)i(it)e(w)o(as)g(ok)g(that)h(the)g(extra)p
1347 1250 V 15 w(state)g(mak)o(es)f(it)g(harder)h(to)f(add)75
1300 y(info)g(in)g(F)m(ortran.)-117 1347 y Fn(?)i Fm(\(Sept\))166
1404 y Fr(A)i(request)f(is)h(b)q(egun)h(with)e(the)h(curren)o(t)g
Fl(MPI)e Fr(functions)j Fl(MPI)p 1284 1404 14 2 v 16
w(ST)l(ART)f Fr(and)g Fl(MPI)p 1631 1404 V 16 w(ST)l(ART)l(ALL)p
Fr(.)75 1460 y(Calling)g(these)e(functions)h(cause)f(the)h
Fl(sta)o(rt)p 833 1460 V 16 w(fn)g Fr(callbac)o(k)g(function)g(to)f(b)q
(e)h(in)o(v)o(ok)o(ed.)k(It)15 b(is)h(de\014ned)g(as:)75
1559 y Fg(typedef)23 b(int)g(MPI_Request_start_fn\(void)e
(*extra_state,)h(MPI_Comm)h(comm,)75 1616 y(MPI_Request)f(request\);)
166 1714 y Fr(A)15 b(F)l(ortran)f(declaration)i(for)f(suc)o(h)g(a)g
(function)h(is)g(as)f(follo)o(ws:)75 1771 y Fg(INTEGER)23
b(FUNCTION)g(REQUEST)p 652 1771 15 2 v 16 w(START)p 788
1771 V 16 w(FN\(EXTRA)p 996 1771 V 16 w(STATE,)h(COMM,)f(REQUEST\))170
1827 y(INTEGER)g(EXTRA)p 484 1827 V 17 w(STATE,)g(COMM,)g(REQUEST)166
1914 y Fr(A)15 b(C++)h(declaration)g(for)e(suc)o(h)i(a)f(function)h(is)
g(as)e(follo)o(ws:)75 2013 y Fg(typedef)23 b(int)g
(MPI:Request_start_fn\(void)e(*extra_state,)h(MPI::Comm)h(comm,)75
2069 y(MPI::Request)f(request\);)166 2168 y Fr(The)14
b(input)h Fl(extra)p 476 2168 14 2 v 16 w(state)g Fr(is)f(a)g(p)q(oin)o
(ter)g(to)f(the)h(in)o(ternal)h(state)e(of)g(the)h(request)g(that)f(w)o
(as)g(returned)75 2225 y(b)o(y)j(the)g Fl(init)p 282
2225 V 16 w(fn)h Fr(callbac)o(k)f(function.)23 b Fl(sta)o(rt)p
810 2225 V 16 w(fn)16 b Fr(ma)o(y)g(initiate)h(one)e(or)h(more)f(comm)o
(unications,)h(as)g(part)75 2281 y(of)g(starting)g(the)h(op)q(eration.)
24 b(The)17 b(user)g(should)h(use)e(the)h Fl(MPI)p 1187
2281 V 16 w(POST)p 1321 2281 V 17 w(HANDLER)g Fr(function)h(in)f(Sec-)
75 2338 y(tion)12 b(6.12.3)e(to)i(cause)g(a)g(user)g(function)h(to)e(b)
q(e)i(in)o(v)o(ok)o(ed)f(when)h(the)f(comm)o(unication)h(completes.)19
b(Since)75 2394 y(generalized)e(requests)e(use)g(handler)h(functions,)g
(they)f(inherit)i(all)f(the)f(functions)h(and)f(limitations)h(of)75
2450 y(this)g Fl(MPI)f Fr(feature.)20 b(F)l(or)15 b(example,)h(an)o(y)f
(limitations)i(on)e(handers)h(in)o(v)o(olving)h(non-thread)e(complian)o
(t)75 2507 y Fl(MPI)g Fr(implemenations)i(apply)l(.)166
2604 y Ff(Missing:)166 2654 y Fi(W)m(e)12 b(need)h(to)f(mak)o(e)e(sure)
j(that)g(handlers)f(ha)o(v)o(e)g(the)h(desired)g(b)q(eha)o(vior)f(with)
g(and)f(without)h(threads.)19 b(Most)75 2704 y(curren)o(tly)c(seem)f
(to)f(agree)i(that)f(w)o(e)g(w)o(an)o(t:)1967 46 y Fm(1)1967
103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328
y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959
836 y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959
1062 y(19)1959 1119 y(20)1959 1175 y(21)1959 1232 y(22)1959
1288 y(23)1959 1345 y(24)1959 1401 y(25)1959 1457 y(26)1959
1514 y(27)1959 1570 y(28)1959 1627 y(29)1959 1683 y(30)1959
1740 y(31)1959 1796 y(32)1959 1853 y(33)1959 1909 y(34)1959
1966 y(35)1959 2022 y(36)1959 2078 y(37)1959 2135 y(38)1959
2191 y(39)1959 2248 y(40)1959 2304 y(41)1959 2361 y(42)1959
2417 y(43)1959 2474 y(44)1959 2530 y(45)1959 2587 y(46)1959
2643 y(47)1959 2699 y(48)p eop
%%Page: 5 7
5 6 bop 75 -100 a Fk(6.2.)34 b(GENERALIZED)16 b(REQUESTS)1071
b Fr(5)145 49 y Fe(\017)23 b Fi(If)16 b(y)o(our)g(implemen)o(tation)e
(has)j(threads)g(then)h(y)o(our)e(request)j(progresses)f(without)f(an)o
(y)f(MPI)h(calls)f(on)189 99 y(that)e(pro)q(cess.)145
172 y Fe(\017)23 b Fi(If)11 b(y)o(ou)g(are)h(em)o(ulating)d(threads,)k
(then)f(y)o(our)f(request)i(ma)o(y)d(only)g(progress)j(if)e(y)o(ou)g
(call)g(an)g(MPI)h(function.)189 222 y(Also,)h(issuing)g(a)h(blo)q(c)o
(king)f(call)g(in)g(y)o(our)h(handler)g(is)g(lik)o(ely)e(to)i(hang)g(y)
o(our)f(co)q(de.)166 306 y(It)f(has)h(b)q(een)g(raised)g(that)f(this)g
(ma)o(y)e(b)q(e)j(a)f(bad)g(tradeo\013)h(since)g(an)f
Fh(MPI)f Fi(program)g(will)g(b)q(eha)o(v)o(e)i(di\013eren)o(tly)75
356 y(in)g(di\013eren)o(t)i(implemen)o(tations.)166 460
y Fl(sta)o(rt)p 255 460 14 2 v 17 w(fn)20 b Fr(returns)g
Fh(MPI)p 565 460 13 2 v 15 w(SUCCESS)e Fr(if)j(it)f(succeeds.)36
b(The)21 b(consequence)g(of)f(returning)h(a)f(failure)75
516 y(co)q(de)c(is)g(discussed)g(later.)166 573 y(A)f(request)g(is)h
(mark)o(ed)f(completed)h(b)o(y)f(calling:)75 724 y Fl(MPI)p
160 724 14 2 v 16 w(REQUEST)p 379 724 V 18 w(MARK)p 528
724 V 16 w(COMPLETE\(request\))117 801 y Fi(INOUT)62
b Fl(request)452 b Fi(Request)15 b(to)f(b)q(e)g(mark)o(ed)f(as)h
(complete)75 925 y Fg(int)23 b(MPI)p 245 925 15 2 v 17
w(Request)p 430 925 V 16 w(mark)p 542 925 V 17 w(complete\(MPI)p
847 925 V 16 w(Request)g(*request\))75 1012 y(MPI)p 150
1012 V 17 w(REQUEST)p 335 1012 V 16 w(MARK)p 447 1012
V 17 w(COMPLETE\(REQUEST,)e(IERROR\))170 1068 y(INTEGER)i(REQUEST,)g
(IERROR)75 1155 y(int)g(MPI::Request)p 461 1155 V 16
w(mark)p 573 1155 V 17 w(complete\(MPI::Request)e(*request\))166
1241 y Fr(This)16 b(function)g(in)o(v)o(ok)o(es)f(the)g(callbac)o(k)h
(function)g Fl(complete)p 1209 1241 14 2 v 17 w(fn)f
Fr(de\014ned)i(as:)75 1342 y Fg(typedef)23 b(int)g
(MPI_Request_complete_fn\(void)d(*extra_state,)i(MPI_Comm)h(comm,)g
(MPI_Request)g(request\);)166 1443 y Fr(A)15 b(F)l(ortran)f
(declaration)i(for)f(suc)o(h)g(a)g(function)h(is)g(as)f(follo)o(ws:)75
1499 y Fg(INTEGER)23 b(FUNCTION)g(REQUEST)p 652 1499
15 2 v 16 w(COMPLETE)p 860 1499 V 16 w(FN\(EXTRA)p 1068
1499 V 16 w(STATE,)g(COMM,)g(REQUEST\))170 1556 y(INTEGER)g(EXTRA)p
484 1556 V 17 w(STATE,)g(COMM,)g(TYPE)p 907 1556 V 17
w(REQ)166 1642 y Fr(A)15 b(C++)h(declaration)g(for)e(suc)o(h)i(a)f
(function)h(is)g(as)e(follo)o(ws:)75 1743 y Fg(typedef)23
b(int)g(MPI::Request_complete_fn\(void)d(*extra_state,)i(MPI::Comm)h
(comm,)g(MPI::Request)f(request\);)166 1844 y Fl(MPI)p
251 1844 14 2 v 16 w(REQUEST)p 470 1844 V 18 w(MARK)p
619 1844 V 16 w(COMPLETE)d Fr(in)o(v)o(ok)o(es)g(the)g(user)h(function)
g Fl(complete)p 1592 1844 V 16 w(fn)g Fr(with)f(input)75
1900 y(argumen)o(ts)h Fl(extra)p 400 1900 V 17 w(state)p
Fr(,)k Fl(comm)19 b Fr(and)j Fl(request)h Fr(whic)o(h)f(are)f(the)g
(argumen)o(ts)g(that)f(w)o(ere)h(passed)h(b)o(y)75 1957
y(the)i(caller)h(of)e Fl(MPI)p 437 1957 V 16 w(REQUEST)p
656 1957 V 18 w(INIT)p Fr(.)g(This)h(function)h(t)o(ypically)h(cleans)e
(up)h(after)e(the)h(call)h(and)75 2013 y(ma)o(y)18 b(put)h(information)
g(in)g Fl(extra)p 668 2013 V 16 w(state)h Fr(whic)o(h)g(is)f(of)f(in)o
(terest)h(to)f(the)h(calling)h(program.)29 b(A)19 b(call)h(to)o
Fn(>)c Fm(\(Sept\))75 2070 y Fl(MPI)p 160 2070 V 16 w
Fn(f)p Fl(TEST)p Fn(j)p Fl(W)l(AIT)p Fn(g)9 b Fr(will)j(indicate)g
(that)d Fl(request)j Fr(has)e(completed)h(once)g Fl(MPI)p
1428 2070 V 15 w(REQUEST)p 1646 2070 V 18 w(MARK)p 1795
2070 V 17 w(COMPLETE)75 2126 y Fr(has)16 b(returned.)25
b Fl(MPI)p 449 2126 V 16 w(REQUEST)p 668 2126 V 18 w(MARK)p
817 2126 V 16 w(COMPLETE)17 b Fr(only)g(returns)f(after)g
Fl(complete)p 1629 2126 V 17 w(fn)h Fr(has)f(com-)75
2183 y(pleted.)1667 b Fn(?)16 b Fm(\(Sept\))166 2280
y Ff(Missing:)166 2330 y Fi(W)m(e)d(need)i(to)f(decide)h(what)f(to)f
(do)h(ab)q(out)g(status.)166 2433 y Fr(Once)20 b(the)f(non-blo)q(c)o
(king)i(request)e(has)f(\014nished,)k(it)d(can)g(b)q(e)g(restarted)g
(with)g(another)g(call)h(to)75 2490 y Fl(MPI)p 160 2490
V 16 w(ST)l(ART)p Fr(.)11 b(Once)g(the)f(user)g(is)h(done)f(with)h(a)f
(request,)g(it)h(is)g(freed)f(using)h(the)f(curren)o(t)g
Fl(MPI)p 1670 2490 V 16 w(REQUEST)p 1889 2490 V 18 w(FREE)75
2546 y Fr(whic)o(h)16 b(uses)g(the)f(callbac)o(k)h(function:)75
2647 y Fg(typedef)23 b(int)g(MPI_Request_free_function\(voi)o(d)e
(*extra_state,)h(MPI_Comm)h(comm,)75 2704 y(MPI_Request)f(request\);)
-32 46 y Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32
272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780
y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006
y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457
y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909
y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587
y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 6 8
6 7 bop 75 -100 a Fr(6)894 b Fk(CHAPTER)15 b(6.)35 b(EXTERNAL)16
b(INTERF)-5 b(A)o(CES)166 49 y Fr(A)15 b(F)l(ortran)f(declaration)i
(for)f(suc)o(h)g(a)g(function)h(is)g(as)f(follo)o(ws:)75
106 y Fg(INTEGER)23 b(FUNCTION)g(REQUEST)p 652 106 15
2 v 16 w(FREE)p 764 106 V 17 w(FN\(EXTRA)p 973 106 V
16 w(STATE,)g(COMM,)g(REQUEST\))170 162 y(INTEGER)g(EXTRA)p
484 162 V 17 w(STATE,)g(COMM,)g(REQUEST)166 249 y Fr(A)15
b(C++)h(declaration)g(for)e(suc)o(h)i(a)f(function)h(is)g(as)e(follo)o
(ws:)75 355 y Fg(typedef)23 b(int)g(MPI::Request_free_function\(vo)o
(id)e(*extra_state,)h(MPI::Comm)h(comm,)75 411 y(MPI::Request)f
(request\);)166 518 y Fr(This)16 b(callbac)o(k)h(function)f(can,)g(for)
f(example,)h(deallo)q(cate)h(the)f(in)o(ternal)g(data)f(structures)h
(of)f(the)75 574 y(request)g(whic)o(h)h(w)o(ere)f(storted)g(in)h
Fl(extra)p 774 574 14 2 v 16 w(state)p Fr(.)166 631 y(The)f
Fl(cancel)p 378 631 V 18 w(fn)g Fr(is)h(de\014ned)g(as:)75
737 y Fg(typedef)23 b(int)g(MPI_Request_cancel_fn\(void)e
(*extra_state,)h(MPI_Comm)h(comm,)75 793 y(MPI_Request)f(request\);)166
900 y Fr(A)15 b(F)l(ortran)f(declaration)i(for)f(suc)o(h)g(a)g
(function)h(is)g(as)f(follo)o(ws:)75 956 y Fg(INTEGER)23
b(FUNCTION)g(REQUEST)p 652 956 15 2 v 16 w(CANCEL)p 812
956 V 16 w(FN\(EXTRA)p 1020 956 V 16 w(STATE,)g(COMM,)h(REQUEST\))170
1012 y(INTEGER)f(EXTRA)p 484 1012 V 17 w(STATE,)g(COMM,)g(TYPE)p
907 1012 V 17 w(REQ)166 1099 y Fr(A)15 b(C++)h(declaration)g(for)e(suc)
o(h)i(a)f(function)h(is)g(as)e(follo)o(ws:)75 1205 y
Fg(typedef)23 b(int)g(MPI::Request_cancel_fn\(void)e(*extra_state,)h
(MPI::Comm)g(comm,)75 1262 y(MPI::Request)g(request\);)166
1368 y Fr(This)c(callbac)o(k)g(function)h(is)e(in)o(v)o(ok)o(ed)h(b)o
(y)f Fl(MPI)g Fr(when)h(the)g(request)f(is)h(cancelled)i(\(via)d(a)g
(call)i(to)75 1424 y Fl(MPI)p 160 1424 14 2 v 16 w(CANCEL)p
Fr(\))14 b(or)g(when)g(there)g(is)h(a)f(failure)h(in)g(callbac)o(k)g
(function)g Fl(init)p 1351 1424 V 17 w(fn)p Fr(,)f Fl(sta)o(rt)p
1518 1424 V 17 w(fn)p Fr(,)g(or)g Fl(complete)p 1824
1424 V 17 w(fn)75 1481 y Fr(\(failure)g(is)g(describ)q(ed)i(b)q(elo)o
(w)e(in)g(section)g(6.2.3\).)k(This)c(callbac)o(k)g(function)h(can)e
(deallo)q(cate)i(the)f(in)o(ter-)75 1537 y(nal)h(data)e(structures)h
(and)h(cancel)g(the)f(in)o(ternal)i(messages)d(of)h(the)g(request)h
(\(these)f(can)g(b)q(e)h(accessible)75 1594 y(via)g Fl(extra)p
247 1594 V 17 w(state)p Fr(\).)21 b(See)15 b(section)h(6.2.3)e(for)g
(details.)166 1650 y(Finally)l(,)26 b(since)d(allo)q(cation)h(of)e(the)
h Fl(t)o(yp)q(e)p 901 1650 V 17 w(req)g Fr(ma)o(y)f(use)h(some)f
(system)g(resources,)i(it)f(can)f(b)q(e)75 1707 y(returned)16
b(to)e(the)h(system)g(with:)75 1858 y Fl(MPI)p 160 1858
V 16 w(TYPE)p 293 1858 V 17 w(REQUEST)p 513 1858 V 18
w(FREE\(t)o(yp)q(e)p 738 1858 V 17 w(req\))117 1935 y
Fi(INOUT)62 b Fl(t)o(yp)q(e)p 401 1935 V 18 w(req)430
b Fi(T)o(yp)q(e)14 b(of)g(request)h(to)f(b)q(e)g(freed)75
2059 y Fg(int)23 b(MPI)p 245 2059 15 2 v 17 w(Type)p
358 2059 V 17 w(request)p 543 2059 V 16 w(free\(MPI)p
751 2059 V 16 w(TYPE)p 863 2059 V 17 w(REQUEST)g(*type)p
1191 2059 V 16 w(req\))75 2146 y(MPI)p 150 2146 V 17
w(TYPE)p 263 2146 V 16 w(REQUEST)p 447 2146 V 17 w(FREE\(type)p
680 2146 V 16 w(req,)g(IERROR\))170 2202 y(INTEGER)g(TYPE)p
460 2202 V 17 w(REQ,)g(IERROR)75 2289 y(int)g(MPI::Type)p
389 2289 V 16 w(request)p 573 2289 V 17 w(free\(MPI::TYPE)p
926 2289 V 15 w(REQUEST)g(*type)p 1252 2289 V 16 w(req\))166
2375 y Fr(It)14 b(is)h(legal)g(to)e(free)i(a)f Fl(t)o(yp)q(e)p
625 2375 14 2 v 17 w(req)g Fr(for)g(whic)o(h)h(an)f(activ)o(e)g
Fl(request)i Fr(still)g(exists.)k Fl(MPI)13 b Fr(will)j(deallo)q(ciate)
75 2431 y(the)f Fl(t)o(yp)q(e)p 236 2431 V 18 w(req)g
Fr(when)h(it)f(is)h(safe)f(to)f(do)i(so.)-915 b Fn(>)15
b Fm(\(Sept\))-117 2490 y Fn(?)g Fm(\(Sept\))75 2553
y Fj(6.2.3)49 b(F)o(ailed)17 b(User)e(F)o(unctions)h(and)g(Cancelling)i
(Requests)75 2639 y Fr(When)f(a)g(callbac)o(k)h(function)g(fails,)g
Fl(MPI)f Fr(in)o(v)o(ok)o(es)g(callbac)o(k)h(function)g
Fl(cancel)p 1449 2639 V 17 w(fn)p Fr(.)26 b(This)18 b(can)f(happ)q(en)
75 2695 y(when)23 b(one)g(of)f(the)h(other)g(callbac)o(k)g(functions)h
(return)e(an)h(error)f(co)q(de)h(or)g(the)g(application)h(calls)1967
46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 7 9
7 8 bop 75 -100 a Fk(6.2.)29 b(GENERALIZED)16 b(REQUESTS)1076
b Fr(7)75 49 y Fl(MPI)p 160 49 14 2 v 16 w(CANCEL)16
b Fr(on)f(the)g(generalized)j(request.)i(When)c Fl(cancel)p
1166 49 V 17 w(fn)g Fr(returns,)f(the)g(request)h(is)g(complete.)75
106 y(This)23 b(means)g(that)e(the)i(request)g(either)g(\014nished)h
(or)e(w)o(as)g(terminated.)42 b(The)23 b(callbac)o(k)g(function)75
162 y(returns)c Fh(MPI)p 313 162 13 2 v 14 w(SUCCESS)e
Fr(if)j(the)f(request)g(w)o(as)f(cancelled.)33 b(Otherwise,)20
b(the)f(request)g(is)h(assumed)f(to)75 219 y(ha)o(v)o(e)h(completed.)37
b Fl(MPI)20 b Fr(marks)g(the)h Fl(request)h Fr(suc)o(h)f(that)f(a)g
Fl(status)j Fr(gotten)c(from)h(the)h Fl(request)h Fr(has)75
275 y Fl(MPI)p 160 275 14 2 v 16 w(TEST)p 290 275 V 16
w(CANCELLED)12 b Fr(return)f Fl(\015ag=true)h Fr(if)g
Fl(cancel)p 1055 275 V 17 w(fn)g Fr(returned)g Fh(MPI)p
1376 275 13 2 v 14 w(SUCCESS)p Fr(.)d Fl(MPI)i Fr(marks)g(the)75
332 y(request)k(suc)o(h)h(that)e Fl(MPI)p 519 332 14
2 v 16 w(TEST)p 649 332 V 17 w(CANCELLED)h Fr(returns)g
Fh(\015ag=false)h Fr(otherwise.)k(Unlik)o(e)d(cancelling)g(a)75
388 y(p)q(oin)o(t-to-p)q(oin)o(t)e(request,)f(a)h(successful)g(cancel)h
(do)q(es)f(not)f(imply)i(that)d(all)j(bu\013ers)e(and)h(resources)f
(are)75 444 y(unc)o(hanged.)25 b(This)17 b(is)g(exp)q(ected)h(of)e(the)
h Fl(cancel)p 918 444 V 17 w(fn)g Fr(but)f(not)h(required)g(b)o(y)g
Fl(MPI)p Fr(.)e(If)i Fl(cancel)p 1673 444 V 17 w(fn)g
Fr(cannot)75 501 y(clean)f(up)g(resources)f(then)h(it)f(can)g(raise)h
(an)f(error.)189 602 y Fd(A)n(dvic)n(e)g(to)i(users.)189
677 y Fr(The)j Fl(extra)p 385 677 V 17 w(state)h Fr(argumen)o(t)f(can)g
(b)q(e)h(used)g(to)f(giv)o(e)h(further)f(information)h(ab)q(out)f(a)g
(request)189 733 y(where)15 b(cancel)h(do)q(es)g(not)f(return)g
Fh(MPI)p 856 733 13 2 v 14 w(SUCCESS)p Fr(.)189 808 y(\()p
Fd(End)g(of)i(advic)n(e)f(to)g(users.)p Fr(\))166 909
y Fl(MPI)d Fr(pro)o(vides)h(a)f(default)h(cancel)g(routine)g(called)h
Fl(MPI)p 1127 909 14 2 v 16 w(CANCEL)p 1315 909 V 17
w(ERROR)p Fr(.)f(That)f(routine)h(simly)75 966 y(raises)h(the)h
Fl(MPI)e Fr(error)h Fh(MPI)p 563 966 13 2 v 14 w(ERR)p
656 966 V 14 w(GR)p Fr(.)1139 b Fn(>)16 b Fm(\(Sept\))166
1063 y Ff(Discussion:)166 1113 y Fi(The)d(w)o(a)o(y)g(errors)h(are)g
(handled)f(here)h(needs)g(to)f(b)q(e)h(the)g(same)e(as)h(the)h(w)o(a)o
(y)e(it)h(is)g(discussed)i(in)d(the)i(threads)75 1162
y(section.)1875 1210 y Fn(?)i Fm(\(Sept\))75 1331 y Fj(6.2.4)49
b(Example)17 b(of)f(MPI)p 556 1331 15 2 v 18 w(ALLGA)l(THER)75
1416 y Fr(In)h(this)h(example)f(the)g(user)g(is)h(trying)f(to)f(p)q
(erform)g(a)h(non-blo)q(c)o(king)i Fl(MPI)p 1392 1416
14 2 v 15 w(ALLGA)l(THER)p Fr(.)f(It)f(will)h(b)q(e)75
1473 y(done)13 b(with)f(a)g(generalized)i(request)e(b)o(y)g(p)q
(erforming)h Fc(p)t Fn(\000)t Fr(1)f(wrapp)q(ed)h(shifts)f(of)g(data)f
(\()p Fc(p)h Fr(=)h(#)f(pro)q(cesses)75 1529 y(in)k(the)f(comm)o
(unicator\).)166 1586 y(More)k(sp)q(eci\014cally)l(,)j(assume)e(eac)o
(h)f(pro)q(cess)g(i)h(has)f(an)h(arra)o(y)e(of)g(size)j
Fc(a)p Fr([)p Fc(p)p Fr(])d(and)h(its)h(v)m(alue)g(is)g(in)75
1642 y Fc(a)p Fr([)p Fc(i)p Fr(].)25 b(The)18 b(algorithm)f(w)o(orks)g
(b)o(y)g(accepting)h(data)f(from)g(pro)q(cess)g(\()p
Fc(i)11 b Fn(\000)h Fr(1\)\045)p Fc(p)17 b Fr(and)g(sending)i(data)e
(to)75 1699 y(\()p Fc(i)10 b Fr(+)g(1\)\045)p Fc(p)p
Fr(.)20 b(A)o(t)15 b(eac)o(h)h(step,)f(pro)q(cess)h Fc(i)f
Fr(forw)o(ards)f(the)h(data)g(it)h(receiv)o(ed)h(in)f(the)g(last)f
(step.)21 b(Once)16 b(y)o(ou)75 1755 y(shift)i Fc(p)11
b Fn(\000)h Fr(1)17 b(times,)g(eac)o(h)h(pro)q(cess)f(has)g(a)g(cop)o
(y)g(of)g(what)g(w)o(as)f(stored)h(on)g(all)h(other)f(pro)q(cesses.)27
b(Use)75 1812 y(p)q(ersisten)o(t)17 b(comm)o(unication)f(requests)g(to)
g(send)g(and)h(receiv)o(e)g(the)f(data.)22 b(T)l(o)16
b(accomplish)h(this,)f(ha)o(v)o(e)75 1868 y(a)f(separate)f(send)i(and)f
(recv)g(bu\013er.)20 b(Initialize)e(the)d(send)h(bu\013er)f(on)g(pro)q
(cess)h(i)f(to)g(b)q(e)g Fc(a)p Fr([)p Fc(i)p Fr(].)k(After)c(the)75
1925 y(send)h(and)f(recv)h(has)f(o)q(ccurred,)g(cop)o(y)h(the)f(recv)g
(bu\013er)h(in)o(to)f(arra)o(y)f(a)h(and)g(also)h(in)o(to)f(the)g(send)
h(bu\013er)75 1981 y(and)f(rep)q(eat)g(the)g(pro)q(cess)g(un)o(til)h
(done.)21 b(\(This)15 b(ma)o(y)f(not)h(b)q(e)g(the)g(normal)g(w)o(a)o
(y)f(to)g(do)h(this)h(but)f(I)g(w)o(an)o(t)75 2037 y(to)g(utilize)j
(di\013eren)o(t)e(features)f(for)g(discussion)i(sak)o(e.)k(Most)14
b(p)q(eople)j(w)o(ould)f(probably)g(do)g(a)f(sendrecv)75
2094 y(directly)i(in)o(to)e(the)g(correct)g(lo)q(cations)h(in)g(arra)o
(y)e(a.\))166 2150 y(The)20 b(Blo)q(c)o(king)i(C)e(co)q(de)g(is)h(b)q
(elo)o(w.)35 b(This)21 b(is)f(to)g(sho)o(w)f(ho)o(w)h(it)g(w)o(ould)h
(b)q(e)g(done)f(no)o(w)g(in)h Fl(MPI)75 2207 y Fr(without)15
b(a)g(non-blo)q(c)o(king)i(request.)75 2365 y Fg(MPI_Comm_size\(comm,)k
(&p\);)75 2421 y(MPI_Comm_rank\(comm,)g(&i\);)75 2478
y(/*)j(init)f(your)g(location)g(in)h(array)f(*/)75 2534
y(a[i])g(=)h(i;)75 2591 y(/*)g(set)f(initial)g(send)g(value)g(*/)75
2647 y(as)h(=)f(a[i])75 2704 y(/*)h(process)e(to)i(recv)f(from)h(and)f
(persistent)g(request)g(*/)-32 46 y Fm(1)-32 103 y(2)-32
159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32
441 y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40 667
y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40
949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119 y(20)-40
1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40
1853 y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40
2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248 y(40)-40
2304 y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40
2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699 y(48)p
eop
%%Page: 8 10
8 9 bop 75 -100 a Fr(8)899 b Fk(CHAPTER)15 b(6.)30 b(EXTERNAL)16
b(INTERF)-5 b(A)o(CES)75 49 y Fg(from)23 b(=)h(\(i)g(-)f(1\))h(\045)g
(p;)75 106 y(MPI_Recv_init\(&ar,)d(1,)j(MPI_DOUBLE,)e(from,)i(13,)f
(comm,)g(&req_recv\);)75 162 y(/*)h(process)e(to)i(send)f(to)h(and)f
(persistent)g(request)g(*/)75 219 y(to)h(=)f(\(i)h(+)g(1\))f(\045)h(p;)
75 275 y(MPI_Send_init\(&as,)d(1,)j(MPI_DOUBLE,)e(to,)i(13,)f(comm,)g
(&req_send\);)75 332 y(/*)h(do)f(send)g(and)h(recv)f(p)h(-)g(1)f(times)
h(*/)75 388 y(for)f(\(c1)h(=)g(0;)f(c1)h(<)g(p)f(-)h(1;)g(c1++\))f({)
147 444 y(/*)g(begin)g(persistent)g(send)g(and)h(recv)f(*/)147
501 y(MPI_Start\(&req_recv\);)147 557 y(MPI_Start\(&req_send\);)147
614 y(/*)g(when)g(recv)h(complete)f(copy)g(result)g(in)h(final)f(array)
g(a)h(*/)147 670 y(MPI_Wait\(&req_recv,)d(&status_recv\);)147
727 y(a[\(i)i(-)h(1)f(-)h(c1)g(+)f(p\))h(\045)g(p])f(=)h(ar;)47
b(/*)24 b(add)f(p)h(to)g(make)f(sure)g(mod)h(is)f(positive)g(*/)147
783 y(/*)g(when)g(send)h(completes,)e(copy)i(recv)f(buf)g(into)h(send)f
(buf)g(for)h(next)f(round)g(*/)147 840 y(MPI_Wait\(&req_send,)e
(&status_send\);)147 896 y(as)i(=)h(ar;)75 953 y(})75
1009 y(/*)g(free)f(up)g(persistent)g(requests)g(*/)75
1065 y(MPI_Request_free\(&req_recv)o(\);)75 1122 y
(MPI_Request_free\(&req_send)o(\);)166 1228 y Fr(A)o(t)17
b(the)i(start,)e Fc(a)p Fr([)p Fc(i)p Fr(])f(=)i Fc(i)g
Fr(and)g Fc(a)p Fr([)p Fc(j)s Fr(])e(=)i(0)g(\()p Fc(j)i
Fn(6)p Fr(=)d Fc(i)p Fr(\))h(on)g(pro)q(cess)g Fc(i)p
Fr(.)29 b(A)o(t)17 b(the)h(end,)i Fc(a)p Fr([)p Fc(j)s
Fr(])c(=)i Fc(j)i Fr(on)e(all)75 1285 y(pro)q(cesses.)166
1341 y(As)d(an)g(example,)h(with)f Fc(p)e Fr(=)g(4,)h(pro)q(cess)i(1)f
(do)q(es:)p 75 1386 364 2 v 74 1442 2 57 v 100 1425 a(c1)p
167 1442 V 50 w(send)p 305 1442 V 50 w(recv)p 437 1442
V 75 1444 364 2 v 74 1500 2 57 v 110 1483 a(0)p 167 1500
V 68 w Fc(a)p Fr([1])p 305 1500 V 62 w Fc(a)p Fr([0])p
437 1500 V 74 1557 V 110 1540 a(1)p 167 1557 V 68 w Fc(a)p
Fr([0])p 305 1557 V 62 w Fc(a)p Fr([3])p 437 1557 V 74
1613 V 110 1596 a(2)p 167 1613 V 68 w Fc(a)p Fr([3])p
305 1613 V 62 w Fc(a)p Fr([2])p 437 1613 V 75 1615 364
2 v 166 1681 a(No)o(w)e(to)h(do)g(this)h(with)g(a)e(non-blo)q(c)o(king)
j(generalized)g(request.)k(Create)14 b(a)g(p)q(ersisten)o(t)g(comm)o
(uni-)75 1737 y(cation)j(request)g(to)f(send)i(to)e(\()p
Fc(i)11 b Fr(+)g(1\)\045)p Fc(p)16 b Fr(and)h(a)g(request)g(to)f(recv)h
(from)f(\()p Fc(i)11 b Fn(\000)h Fr(1\)\045)p Fc(p)p
Fr(.)24 b(The)17 b(algorithm)75 1793 y(is)g(demand)f(driv)o(en.)24
b(Begin)17 b(b)o(y)f(starting)g(the)g(p)q(ersisten)o(t)h(recv)f(and)h
(send.)23 b(Eac)o(h)16 b(time)h(one)f(of)g(these)75 1850
y(\014nishes,)21 b(y)o(ou)d(w)o(an)o(t)g Fl(MPI)g Fr(to)g(call)h(y)o
(our)g Fl(handler)p 950 1850 14 2 v 17 w(fn)p Fr(.)30
b(When)20 b(the)e(recv)h(\014nishes)h(y)o(ou)f(can)f(cop)o(y)h(the)75
1906 y(data)e(in)o(to)i(the)f(correct)f(lo)q(cation)i(in)g(the)f(arra)o
(y)f(a.)29 b(If)18 b(the)g(send)h(is)g(done,)f(then)h(y)o(ou)f(can)g
(cop)o(y)g(the)75 1963 y(recv)g(data)e(in)o(to)i(the)f(send)h
(bu\013er.)26 b(Once)19 b(b)q(oth)e(are)g(done)h(y)o(ou)f(can)h(start)e
(a)h(new)g(send)h(and)g(recv)f(if)75 2019 y(y)o(ou)e(ha)o(v)o(e)g(not)f
(\014nished.)166 2076 y(Belo)o(w)h(is)h(C)f(co)q(de.)166
2132 y(The)g(main)h(routine)g(whic)o(h)g(calls)g(the)f(non-blo)q(c)o
(king)i(op)q(eration)f(w)o(ould)f(do:)75 2238 y Fg(/*)24
b(this)f(supplies)g(the)g(init,)g(start,)g(complete,)g(free,)g(and)h
(cancel)f(functions)147 2295 y(for)g(the)g(request.)47
b(MPI)24 b(returns)e(in)i(type_req)f(the)g(new)h(request)f(*/)75
2351 y(MPI_Request_type_create\(in)o(it_fn,)d(start_fn,)j(complete_fn,)
f(free_fn,)75 2408 y(MPI_CANCEL_ERROR,)g(&type_req\);)75
2521 y(/*)i(set)f(up)h(the)f(information)f(needed)h(by)h(the)g(calls.)
46 b(Thus,)24 b(the)f(extra_state)147 2577 y(is)g(done.)47
b(Need)24 b(to)f(put)h(all)f(the)g(extra_state)g(into)g(some)g(sort)h
(of)f(structure)147 2634 y(associated)f(with)h(extra_state.)g(This)g
(is)h(not)f(shown)g(*/)1967 46 y Fm(1)1967 103 y(2)1967
159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967 385
y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959 611
y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959
1062 y(19)1959 1119 y(20)1959 1175 y(21)1959 1232 y(22)1959
1288 y(23)1959 1345 y(24)1959 1401 y(25)1959 1457 y(26)1959
1514 y(27)1959 1570 y(28)1959 1627 y(29)1959 1683 y(30)1959
1740 y(31)1959 1796 y(32)1959 1853 y(33)1959 1909 y(34)1959
1966 y(35)1959 2022 y(36)1959 2078 y(37)1959 2135 y(38)1959
2191 y(39)1959 2248 y(40)1959 2304 y(41)1959 2361 y(42)1959
2417 y(43)1959 2474 y(44)1959 2530 y(45)1959 2587 y(46)1959
2643 y(47)1959 2699 y(48)p eop
%%Page: 9 11
9 10 bop 75 -100 a Fk(6.2.)29 b(GENERALIZED)16 b(REQUESTS)1076
b Fr(9)75 49 y Fg(/*)24 b(Initialize)e(the)i(request.)46
b(This)23 b(MPI)h(routine)f(will)g(call)g(the)h(init_fn.)f(*/)75
106 y(MPI_Request_init\(type_req,)d(extra,)j(&request\);)75
219 y(/*)h(start)f(the)g(non-blocking)f(operation.)47
b(This)23 b(calls)g(start_fn.)g(*/)75 275 y(MPI_Start\(&request\);)75
388 y(/*)h(do)f(other)g(stuff)h(that)f(can)g(go)h(on)f(while)h
(non-blocking)e(operation)h(is)147 444 y(going.)46 b(This)24
b(is)f(not)h(shown.)f(*/)75 557 y(/*)h(now)f(wait)g(until)h
(non-blocking)e(operation)g(is)i(done)f(*/)75 614 y(/*)h(it)f(is)h(not)
f(clear)g(what)h(is)f(put)h(into)f(status)g(*/)75 670
y(MPI_Wait\(&request,)e(&status\);)75 783 y(/*)j(done)f(with)g
(request,)g(free)g(up.)48 b(This)23 b(calls)g(free_fn.)g(*/)75
840 y(MPI_Request_free\(&request\))o(;)75 953 y(/*)h(done)f(with)g
(type_req,)g(free)g(up)h(*/)75 1009 y(MPI_Type_request_free\(&typ)o
(e_req\);)166 1115 y Fr(The)15 b(functions)h(for)f(the)g(generalized)i
(request)e(are:)75 1278 y Fg(init_fn\(type_req,)22 b(*extra,)g(comm,)i
(request\))75 1334 y({)75 1447 y(/*)g(initialize)e(counters)h(and)g
(info)h(*/)75 1504 y(MPI_Comm_size\(comm,)d(&extra->p\);)75
1560 y(MPI_Comm_rank\(comm,)g(&extra->i\);)75 1617 y(/*)j(create)f(a)g
(mutex)h(*/)75 1673 y(MPI_Mutex_create\(MPI_COMM_)o(SELF,)d
(MPI_MUTEX_ATTRIBUTE??,)f(&extra->mutex\);)75 1730 y(extra->request)i
(=)i(request;)75 1786 y(/*)g(process)e(to)i(recv)f(from)h(and)f
(persistent)g(request)g(*/)75 1843 y(from)g(=)h(\(extra->i)f(-)g(1\))h
(\045)g(extra->p;)75 1899 y(MPI_Recv_init\(&extra->ar,)c(1,)k
(MPI_DOUBLE,)e(from,)i(13,)f(comm,)g(extra,)123 1955
y(&extra->req_recv\);)75 2012 y(/*)h(process)e(to)i(send)f(to)h(and)f
(persistent)g(request)g(*/)75 2068 y(to)h(=)f(\(extra->i)g(+)h(1\))f
(\045)h(extra->p;)75 2125 y(MPI_Send_init\(&extra->as,)c(1,)k
(MPI_DOUBLE,)e(to,)i(13,)f(comm,)123 2181 y(&extra->req_send\);)75
2238 y(*)h(completed)e(ok)i(*/)75 2294 y(return)f(MPI_SUCCESS;)75
2351 y(})75 2576 y(start_fn\(*extra,)f(comm,)h(request\))75
2633 y({)75 2689 y(/*)h(init)f(your)g(location)g(in)h(array)f(*/)-32
46 y Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272
y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780
y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006
y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457
y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909
y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587
y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 10 12
10 11 bop 75 -100 a Fr(10)876 b Fk(CHAPTER)15 b(6.)30
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fg(extra->a[extra->i])21
b(=)j(extra->i;)75 106 y(/*)g(set)f(initial)g(send)g(value)g(*/)75
162 y(extra->as)g(=)g(extra->a[extra->i])75 219 y(/*)h(haven't)e(done)i
(any)f(yet)h(*/)75 275 y(extra->num_completed)d(=)j(0;)75
332 y(extra->num_done)e(=)i(0;)75 444 y(/*)g(begin)f(persistent)f(recv)
i(and)f(send)g(*/)75 501 y(MPI_Start\(&extra->req_recv)o(\);)75
557 y(MPI_Post_Handler\(&extra->r)o(eq_recv)o(,)e
(MPI_HANDLER_ATTRIBUTE,)g(handler_fn,)123 614 y(&extra->status_recv,)g
(MPI_HANDLER_DEFAULT\);)75 670 y(MPI_Start\(&extra->req_send)o(\);)75
727 y(MPI_Post_Handler\(&extra->r)o(eq_send)o(,)g
(MPI_HANDLER_ATTRIBUTE,)g(handler_fn,)123 783 y(&extra->status_send,)g
(MPI_HANDLER_DEFAULT\);)75 896 y(return)i(MPI_SUCCESS;)75
953 y(})166 1059 y Fr(Eac)o(h)15 b(time)g(a)g(hsend)h(or)f(hrecv)h
(\014nishes,)g(the)f(handler)p 1129 1059 14 2 v 18 w(fn)g(gets)g
(called:)75 1165 y Fg(handler_fn\(extra,)22 b(status,)g(comm\))75
1222 y({)75 1278 y(MPI_Mutex_lock\(extra->mute)o(x\);)75
1334 y(/*)i(note)f(a)h(send)f(or)h(recv)f(finished)g(*/)75
1391 y(extra->num_completed++;)75 1447 y(/*)h(if)f(num_complete)f(!=)i
(2)g(then)f(not)g(both)h(send)f(and)h(recv)f(done)g(*/)75
1504 y(if)h(\(extra->num_completed)d(!=)i(2\))h({)170
1560 y(return)f(\(MPI_SUCCESS\);)75 1617 y(})75 1730
y(extra->num_completed)e(=)j(0;)f(/*)h(reset)f(*/)75
1786 y(MPI_Mutex_unlock\(extra->mu)o(tex\);)75 1899 y(/*)h(We)f(don't)g
(get)h(here)f(unless)g(both)g(the)h(send)f(&)h(recv)f(completed)g(*/)75
1955 y(/*)h(note)f(another)g(round)g(completed)g(*/)75
2012 y(extra->num_done++;)75 2125 y(/*)h(copy)f(received)g(data)g(*/)75
2181 y(extra->a[\(extra->i)e(-)j(1)g(-)g(extra->num_done)d(+)j
(extra->p\))f(\045)g(extra->p])218 2238 y(=)h(extra->ar;)75
2294 y(/*)g(see)f(if)h(completely)e(done)h(*/)75 2351
y(if)h(\(extra->num_done)d(==)j(extra->p)f(-)g(1\))h({)170
2407 y(/*)g(mark)f(request)g(done)h(*/)170 2464 y
(MPI_Request_mark_completed\(&e)o(xtra->re)o(quest\);)75
2520 y(})75 2576 y(else)f({)170 2633 y(/*)h(set)f(data)h(to)f(be)h
(sent)f(*/)170 2689 y(extra->as)g(=)h(extra->ar;)1967
46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 11 13
11 12 bop 75 -100 a Fk(6.3.)34 b(COMMUNICA)l(TOR)16 b(ID)1182
b Fr(11)170 106 y Fg(/*)24 b(begin)f(new)h(round)f(*/)170
162 y(MPI_Start\(extra->req_recv\);)170 219 y
(MPI_Start\(extra->req_send\);)170 275 y
(MPI_Post_Handler\(&extra->req_)o(recv,)e(MPI_HANDLER_ATTRIBUTE,)g
(handler_fn,)218 332 y(&extra->status_recv,)g(MPI_HANDLER_DEFAULT\);)
170 388 y(MPI_Post_Handler\(&extra->req_)o(send,)g
(MPI_HANDLER_ATTRIBUTE,)g(handler_fn,)218 444 y(&extra->status_send,)g
(MPI_HANDLER_DEFAULT\);)75 501 y(})75 614 y(return)i(\(MPI_SUCCESS\);)
75 670 y(})75 840 y(free_fn\(comm,)f(request,)h(*extra\))75
896 y({)75 953 y(/*)h(free)f(up)g(the)h(persistent)e(communications)g
(requests)h(*/)75 1009 y(MPI_Request_free\(&extra->r)o(eq_recv)o(\);)75
1065 y(MPI_Request_free\(&extra->r)o(eq_send)o(\);)75
1122 y(MPI_Mutex_free\(&extra->mut)o(ex\);)75 1178 y(return)g
(MPI_SUCCESS;)75 1235 y(})75 1434 y Fo(6.3)59 b(Communicato)n(r)22
b(ID)75 1536 y Fr(Pro\014ling)14 b(libraries)h(often)e(w)o(an)o(t)g(a)g
(comm)o(unicator)g(ID)g(so)g(that)g(they)g(can)h(asso)q(ciate)f(calls)i
(that)e(o)q(ccur)75 1592 y(on)k(the)g(same)f(comm)o(unicator.)25
b(This)17 b(is)h(also)e(useful)i(since)g(pro)q(cesses)g(can)f(ha)o(v)o
(e)f(the)h(same)g(rank)f(in)75 1649 y(di\013eren)o(t)i(comm)o
(unicators)g(or)f(the)i(same)e(pro)q(cess)i(can)f(b)q(e)h(in)o(v)o(olv)
o(ed)g(in)f(di\013eren)o(t)h(comm)o(unicators.)75 1705
y(Th)o(us,)c(the)g(follo)o(wing)h(call)g(is)g(giv)o(en:)75
1856 y Fl(MPI)p 160 1856 14 2 v 16 w(COMMUNICA)l(TOR)p
542 1856 V 18 w(ID\(comm,)c(id\))117 1933 y Fi(IN)155
b Fl(comm)470 b Fi(Comm)o(unicator)11 b(to)j(return)h(id)e(of)117
2009 y(OUT)108 b Fl(id)553 b Fi(id)14 b(of)f(comm)75
2133 y Fg(int)23 b(MPI)p 245 2133 15 2 v 17 w(Communicator)p
550 2133 V 16 w(id\(MPI)p 710 2133 V 16 w(Comm)g(comm,)h(int)f(*id\))75
2220 y(MPI)p 150 2220 V 17 w(COMMUNICATOR)p 455 2220
V 15 w(ID\(COMM,)g(ID\))170 2276 y(INTEGER)g(COMM,)h(ID)75
2362 y(int)f(MPI::Communicator)p 581 2362 V 15 w(id\(MPI::Comm)g(comm,)
g(int)g(*id\))166 2449 y Fr(The)15 b(ab)q(o)o(v)o(e)g(function)h(can)f
(b)q(e)h(implemen)o(ted)h(as)e(a)g(macro.)189 2555 y
Fd(R)n(ationale.)37 b Fr(Since)13 b(these)f(functions)g(are)f(lik)o
(ely)i(to)e(b)q(e)h(used)g(in)g(pro\014ling)h(libraries,)g(minimizing)
189 2612 y(the)h(o)o(v)o(erhead)f(is)i(v)o(ery)f(imp)q(ortan)o(t.)19
b(Allo)o(wing)c(a)f(macro)f(helps)i(to)f(accomplish)h(this.)20
b(The)14 b(only)189 2668 y(loss)h(is)h(the)f(error)f(co)q(de)i(but)g
(this)f(seemed)h(acceptable.)21 b(\()p Fd(End)16 b(of)g(r)n(ationale.)p
Fr(\))-32 46 y Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32
272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780
y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006
y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457
y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909
y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587
y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 12 14
12 13 bop 75 -100 a Fr(12)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)166 49 y Fr(T)l(o)14
b(sp)q(ecify)h(the)f(uniqueness)i(of)e Fl(ID)g Fr(returned,)g(the)g(k)o
(ey)g Fh(MPI)p 1228 49 13 2 v 15 w(COMM)p 1373 49 V 14
w(ID)p 1429 49 V 15 w(IS)p 1479 49 V 14 w(UNIQUE)f Fr(is)h(a)o(v)m
(ailable)75 106 y(on)h Fh(MPI)p 215 106 V 14 w(COMM)p
359 106 V 15 w(W)o(ORLD)p Fr(.)g(This)h(attribute)f(returns)g(one)g(of)
g(the)g(follo)o(wing)h(v)m(alues:)-1655 b Fn(>)15 b Fm(\(Sept\))75
200 y Fh(MPI)p 152 200 V 14 w(COMM)p 296 200 V 15 w(ID)p
353 200 V 14 w(UNIQUE)22 b Fr(Means)c(that)h(the)g(v)m(alues)h
(returned)g(b)o(y)f Fl(MPI)p 1353 200 14 2 v 16 w(COMMUNICA)l(TOR)p
1735 200 V 18 w(ID)f Fr(are)189 256 y(unique)e(for)f(eac)o(h)g(comm)o
(unicator)g(\(on)f(di\013eren)o(t)i(pro)q(cesses\))f(and)g(for)f(the)i
(en)o(tire)f Fl(MPI)g Fr(job.)k(In)189 312 y(the)14 b(unlik)o(ely)i(ev)
o(en)o(t)e(that)f(the)h(n)o(um)o(b)q(er)h(of)e(comm)o(unicators)h
(created)g(exceeds)h(the)f(range)f(of)h(an)189 369 y(in)o(t)k(in)i(C)e
(or)g(and)g(INTEGER)h(in)g(F)l(ortran,)f(the)g(implemen)o(tation)i(ma)o
(y)e(then)h(b)q(egin)g(reusing)189 425 y(v)m(alues)f(previously)h
(used.)27 b(A)o(t)17 b(that)g(p)q(oin)o(t,)h(the)g(implemen)o(tation)g
(should)h(not)e(reuse)h(a)f(v)m(alue)189 482 y(another)d(time)i(un)o
(til)g(it)g(has)f(once)g(again)h(used)f(up)h(all)g(the)f(v)m(alues)i
(that)d Fl(ID)h Fr(can)g(hold.)75 576 y Fh(MPI)p 152
576 13 2 v 14 w(COMM)p 296 576 V 15 w(ID)p 353 576 V
14 w(NOT)p 455 576 V 16 w(UNIQUE)21 b Fr(The)13 b(v)m(alue)h(returned)f
(in)h Fl(ID)f Fr(do)q(es)g(not)g(meet)f(the)h(requiremen)o(ts)h(to)e(b)
q(e)189 632 y Fh(MPI)p 266 632 V 14 w(COMM)p 410 632
V 15 w(ID)p 467 632 V 14 w(UNIQUE)p Fr(.)-117 675 y Fn(?)j
Fm(\(Sept\))189 776 y Fd(R)n(ationale.)38 b Fr(Most)12
b(libraries)j(w)o(ould)e(prefer)g(a)g(globally)h(unique)h(comm)o
(unicator)e(ID.)f(Ho)o(w)o(ev)o(er,)189 832 y Fl(MPI)h
Fr(w)o(as)g(carefully)j(sp)q(eci\014ed)g(so)e(as)g(to)f(a)o(v)o(oid)h
(needing)h(suc)o(h)g(a)f(v)m(alue)h(in)g(an)f(implemen)o(tation.)189
889 y(This)20 b(w)o(as)e(done)i(to)f(reduce)h(p)q(oten)o(tial)g(o)o(v)o
(erheads)f(in)h(comm)o(unicator)f(creation.)33 b(Requiring)189
945 y(that)13 b(a)i(comm)o(unicator)f(ID)h(b)q(e)g(unique)h(could)f
(add)g(o)o(v)o(erhead)f(to)g(all)i(comm)o(unicators)e(in)h(some)189
1002 y(implemen)o(tations.)20 b(Ho)o(w)o(ev)o(er,)14
b(some)f(implemenations)k(ma)o(y)c(already)i(ha)o(v)o(e)f(a)g(unique)h
(ID)g(that)189 1058 y(can)e(b)q(e)i(giv)o(en)f(for)f(no)h(additional)h
(cost.)k(Th)o(us,)13 b(the)h(F)l(orum)f(did)i(not)e(w)o(an)o(t)g(to)g
(require)i(globally)189 1114 y(unique)g(comm)o(unicator)e(IDs)g(but)h
(did)g(w)o(an)o(t)e(to)h(mak)o(e)g(them)g(a)o(v)m(ailable)i(if)f(the)g
(implemen)o(tation)189 1171 y(could)i(easily)g(pro)o(vide)g(this)f
(information.)-1046 b Fn(>)15 b Fm(\(Sept\))189 1246
y Fr(The)f(attribute)h(k)o(ey)f(is)h(placed)h(on)e Fh(MPI)p
879 1246 V 15 w(COMM)p 1024 1246 V 14 w(W)o(ORLD)h Fr(since)h(it)e(is)h
(felt)g(that)f(it)h(is)g(only)g(really)189 1302 y(useful)h(if)g(it)f
(is)h(true)f(throughout)f(the)i(complete)g(job.)j(\()p
Fd(End)d(of)g(r)n(ationale.)p Fr(\))189 1409 y Fd(A)n(dvic)n(e)j(to)h
(users.)64 b Fr(In)o(tercomm)o(unicators)19 b(can)g(represen)o(t)g(a)g
(problem.)33 b(This)19 b(o)q(ccurs)h(since)189 1465 y(there)d(are)f(t)o
(w)o(o)g(groups)g(whic)o(h)i(ha)o(v)o(e)f(o)o(v)o(erlapping)g(ranks)g
(but)g(the)g Fl(ID)f Fr(is)i(only)f(unique)i(to)d(the)189
1522 y(in)o(tercomm)o(unicator.)23 b(The)17 b(alternativ)o(e)g(is)g(to)
e(mak)o(e)h(the)h Fl(ID)f Fr(unique)i(to)e(the)g(group)g(in)i(an)e(in-)
189 1578 y(tercomm)o(unicator.)j(Ho)o(w)o(ev)o(er,)14
b(this)i(w)o(ould)g(mak)o(e)f(it)g(more)g(di\016cult)i(to)e(asso)q
(ciate)g(op)q(erations)189 1635 y(whic)o(h)j(w)o(ork)f(on)h(the)g
(whole)g(in)o(tercomm)o(unicator,)g(e.g.,)f Fl(MPI)p
1302 1635 14 2 v 16 w(Ba)o(rrier)p Fr(.)27 b(Also,)18
b(the)g(seman)o(tics)189 1691 y(w)o(ould)f(b)q(e)g(di\013eren)o(t)g(b)q
(et)o(w)o(een)g(in)o(ter-)g(and)g(in)o(tra-comm)o(unicator.)24
b(F)l(or)16 b(this)h(reason)f(an)h(in)o(ter-)189 1747
y(comm)o(unicator)d(returns)i(a)e(unique)j(v)m(alue)g(for)d(all)i(mem)o
(b)q(ers.)k(\()p Fd(End)c(of)g(advic)n(e)g(to)h(users.)p
Fr(\))166 1894 y Ff(Missing:)166 1944 y Fi(With)c(dynamic)g(and)h(p)q
(ossibly)g(m)o(ultiple)e(MPI)p 928 1944 13 2 v 15 w(COMM)p
1081 1944 V 15 w(W)o(ORLDs,)h(I)h(assume)g(w)o(e)h(w)o(an)o(t)e(the)i
(k)o(ey)f(to)g(b)q(e)75 1994 y(the)g(same)f(on)h(all)f(of)g(them?)-117
2041 y Fn(?)i Fm(\(Sept\))75 2184 y Fo(6.4)59 b(Accessing)20
b(MPI)g(Datat)n(yp)r(es)75 2286 y Fl(MPI-1)14 b Fr(pro)o(vided)i(datat)
o(yp)q(e)f(ob)s(jects,)f(whic)o(h)i(allo)o(ws)f(users)h(to)e(sp)q
(ecify)j(an)e(arbitrary)f(la)o(y)o(out)h(of)g(data)75
2342 y(in)k(memory)l(.)30 b(The)19 b(la)o(y)o(out)e(information,)j
(once)e(put)h(in)g(a)g(datat)o(yp)q(e,)f(could)i(not)e(b)q(e)h(deco)q
(ded)h(from)75 2399 y(the)e(datat)o(yp)q(e.)27 b(There)19
b(are)e(sev)o(erl)h(cases,)h(ho)o(w)o(ev)o(er,)e(where)h(accessing)h
(the)f(la)o(y)o(out)f(information)h(in)75 2455 y(opaque)i(datat)o(yp)q
(e)f(ob)s(jects)g(w)o(ould)h(b)q(e)g(useful.)34 b(This)20
b(section)g(describ)q(es)h(functions)g(for)e(ac)o(hieving)75
2512 y(this.)166 2568 y(One)f(of)e(the)h(cases)g(where)h(access)f(to)f
(in)o(ternal)i(information)f(of)g(a)g(datat)o(yp)q(e)f(is)i(useful)g
(is)f(when)75 2625 y(a)j(datat)o(yp)q(e)f(needs)i(to)e(b)q(e)i(passed)f
(b)q(et)o(w)o(een)g(pro)q(cesses.)35 b Fl(MPI)p 1212
2625 14 2 v 15 w(PUT)20 b Fr(and)h Fl(MPI)p 1514 2625
V 15 w(GET)g Fr(discussed)g(in)75 2681 y(Chapter)13 b
Fb(??)f Fr(require)h(the)g(origin)h(pro)q(cess)f(to)f(sp)q(ecify)j(a)d
(datat)o(yp)q(e)g(to)h(b)q(e)g(used)h(in)f(the)g(target)f(pro)q(cess.)
1967 46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 13 15
13 14 bop 75 -100 a Fk(6.4.)34 b(A)o(CCESSING)15 b Fl(MPI)g
Fk(D)o(A)l(T)l(A)l(TYPES)994 b Fr(13)75 49 y(A)18 b(natural)g(w)o(a)o
(y)f(to)g(pro)o(vide)i(the)e(datat)o(yp)q(e)h(is)g(to)g(de\014ne)h(it)f
(in)h(the)f(target)e(and)i(transfer)f(it)i(to)e(the)75
106 y(origin)j(b)q(efore)f(the)g(one-sided)h(call.)32
b(Datat)o(yp)q(e)18 b(passing)h(ma)o(y)f(also)h(b)q(e)g(necessary)g(in)
h(clien)o(t-serv)o(er)75 162 y(t)o(yp)q(e)h(programs.)35
b(A)20 b(serv)o(er)g(ma)o(y)g(need)i(to)e(access)h(a)f(lo)q(cal)i
(bu\013er)e(in)i(the)e(w)o(a)o(y)g(only)h(clien)o(ts)h(can)75
219 y(sp)q(ecify)l(.)166 275 y(Another)c(case)g(is)h(when)f(they)g(are)
g(used)g(in)h(implemen)o(ting)h(a)e(p)q(ortable)h Fl(MPI)e
Fr(pro\014ler,)i(tracer,)75 332 y(or)14 b(debugger.)20
b(Users)14 b(of)g(suc)o(h)h(to)q(ols)f(ma)o(y)g(w)o(an)o(t)f(to)h(iden)
o(tify)i(lo)q(cations)f(in)g(message)f(bu\013ers)g(actually)75
388 y(accessed)h(b)o(y)f Fl(MPI)p Fr(.)f(Use)i(of)f Fl(MPI)p
647 388 14 2 v 15 w(P)o(ack)h Fr(ma)o(y)e(giv)o(es)i(a)f(means)g(for)g
(iden)o(tifying)i Fd(which)e Fr(data)g(in)h(a)f(bu\013er)75
444 y Fl(MPI)h Fr(accesses,)g(but)g(not)g Fd(wher)n(e)p
Fr(.)166 501 y(A)d(third)g(case)g(is)g(when)h(datat)o(yp)q(es)e(are)g
(used)i(to)e(represen)o(t)h(la)o(y)o(outs)f(of)h(data,)f(esp)q(ecially)
j(in)f(some-)75 557 y(where)18 b(other)g(than)f(memory)l(.)28
b(F)l(or)17 b(example,)i(when)g(p)q(erforming)f(\014le)h(I/O)f(using)h
(MPI)f(datat)o(yp)q(es.)75 614 y(Files)e(in)g(a)f(database)f(system)h
(or)f(ones)h(storing)g(out-of-core)f(data)h(for)f(large-scale)i(scien)o
(ti\014c)h(compu-)75 670 y(tation)g(ma)o(y)f(w)o(an)o(t)g(to)h(main)o
(tain)g(the)h(same)e(la)o(y)o(out)h(of)g(data)f(as)h(they)g(are)g(in)h
(memory)l(.)25 b(As)17 b(an)h Fl(MPI)75 727 y Fr(datat)o(yp)q(e)d(is)h
(used)g(to)f(express)g(an)h(arbitrary)f(la)o(y)o(out)g(of)g(data)f(in)j
(memory)l(,)e(also)g(using)h(it)g(to)f(express)75 783
y(a)g(la)o(y)o(out)g(of)f(data)h(in)h(a)f(\014le)h(is)g(natural.)166
840 y(The)k(next)h(section)g(describ)q(es)g(a)f(set)g(of)g(datat)o(yp)q
(e)g(accessing)h(functions)g(whic)o(h)g(constitute)f(a)75
896 y(lo)o(w)o(er-lev)o(el)c(in)o(terface.)21 b(It)15
b(could)i(serv)o(e)e(the)g(needs)i(of)d(pro\014lers)i(and)g(debuggers)f
(as)g(w)o(ell)i(as)e(yielding)75 953 y(a)g(general)h(data)e(la)o(y)o
(out)h(represen)o(tation.)166 1009 y(The)h(second)h(section)f(describ)q
(es)i(functions)f(to)e(con)o(v)o(ert)g(a)h(datat)o(yp)q(e)f(to)h(and)g
(from)f(a)h(c)o(haracter)75 1065 y(represen)o(tation.)k(This)15
b(allo)o(ws)h(a)e(simple)j(mec)o(hanism)f(for)e(creating)h(a)g(p)q
(ortable)h(represen)o(tation)f(of)f(a)75 1122 y(datat)o(yp)q(e.)75
1244 y Fj(6.4.1)49 b(Lo)o(w)17 b(level)g(datat)o(yp)q(e)f(accessing)75
1329 y Fr(The)c(t)o(w)o(o)e(functions)i(in)g(this)g(section)g(are)f
(used)g(together)g(to)g(deco)q(de)h(datat)o(yp)q(es)f(in)o(to)g(forms)g
(whic)o(h)h(can)75 1386 y(immediately)17 b(b)q(e)g(fed)f(to)f(one)h(of)
f(datat)o(yp)q(e)h(constructor)f(functions)h(to)f(de\014ne)i(a)f(datat)
o(yp)q(e)f(\\equiv)m(a-)75 1442 y(len)o(t")g(to)g(the)g(original)h(in)h
(terms)d(of)h(their)h(t)o(yp)q(emaps.)166 1546 y Ff(Discussion:)j
Fi(Or)d(should)f(w)o(e)h(c)o(ho)q(ose)g(to)g(ha)o(v)o(e)f(these)i
(functions)f(return)h(the)f(same)f(data)g(giv)o(en)g(to)g(the)75
1602 y(constructor)h(function)d(used)i(to)f(de\014ne)h(the)f(datat)o
(yp)q(e?)75 1801 y Fl(MPI)p 160 1801 V 16 w(TYPE)p 293
1801 V 17 w(ENVELOPE\(datat)o(yp)q(e,)j(count,)f(combiner\))117
1878 y Fi(IN)155 b Fl(datat)o(yp)q(e)424 b Fi(datat)o(yp)q(e)14
b(to)g(access\(handle\))117 1953 y(OUT)108 b Fl(count)482
b Fi(n)o(um)o(b)q(er)13 b(of)h(blo)q(c)o(ks\(non-negativ)o(e)f(in)o
(teger\))117 2028 y(OUT)108 b Fl(combiner)414 b Fi(com)o(biner\(in)o
(teger\))75 2153 y Fg(int)23 b(MPI)p 245 2153 15 2 v
17 w(Type)p 358 2153 V 17 w(envelope\(MPI)p 663 2153
V 15 w(Datatype)g(datatype,)g(int*)g(count,)g(int*)g(combiner\))75
2239 y(MPI)p 150 2239 V 17 w(TYPE)p 263 2239 V 16 w
(ENVELOPE\(DATATYPE,)f(COUNT,)h(COMBINER,)f(IERROR\))170
2296 y(INTEGER)h(DATATYPE,)g(COUNT,)g(COMBINER,)g(IERROR)75
2382 y(int)g(MPI::Type)p 389 2382 V 16 w(envelope\(MPI::Datatype)e
(datatype,)i(int*)g(count,)g(int*)h(combiner\))166 2468
y Fr(Giv)o(en)16 b(an)f Fl(MPI)f Fr(datat)o(yp)q(e)h
Fl(datat)o(yp)q(e)p Fr(,)h(returns)f(information)h(on)f(the)g(format)f
(in)i(whic)o(h)75 2525 y Fl(MPI)p 160 2525 14 2 v 16
w(TYPE)p 293 2525 V 17 w(CONTENTS)e Fr(describ)q(ed)g(b)q(elo)o(w)g
(returns)f(in)o(ternal)g(information)h(of)e Fl(datat)o(yp)q(e)p
Fr(.)21 b(The)13 b(t)o(yp)q(e)75 2581 y(of)i(the)g(format)f(is)i
(returned)f(in)h Fl(combiner)f Fr(as)g(one)g(of)g(the)g(follo)o(wing)h
(de\014ned)h(constan)o(ts:)117 2685 y Fh(MPI)p 194 2685
13 2 v 14 w(BASIC)623 b Fr(a)15 b(basic)g(datat)o(yp)q(e)-32
46 y Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272
y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780
y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006
y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457
y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909
y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587
y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 14 16
14 15 bop 75 -100 a Fr(14)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)117 49 y Fh(MPI)p
194 49 13 2 v 14 w(CONTIG)586 b Fl(MPI)p 1032 49 14 2
v 16 w(TYPE)p 1165 49 V 16 w(CONTIGUOUS)117 104 y Fh(MPI)p
194 104 13 2 v 14 w(VECTOR)575 b Fl(MPI)p 1032 104 14
2 v 16 w(TYPE)p 1165 104 V 16 w(VECTOR)117 158 y Fh(MPI)p
194 158 13 2 v 14 w(HVECTOR)546 b Fl(MPI)p 1032 158 14
2 v 16 w(TYPE)p 1165 158 V 16 w(HVECTOR)117 212 y Fh(MPI)p
194 212 13 2 v 14 w(INDEXED)562 b Fl(MPI)p 1032 212 14
2 v 16 w(TYPE)p 1165 212 V 16 w(INDEXED)117 267 y Fh(MPI)p
194 267 13 2 v 14 w(HINDEXED)533 b Fl(MPI)p 1032 267
14 2 v 16 w(TYPE)p 1165 267 V 16 w(HINDEXED)117 321 y
Fh(MPI)p 194 321 13 2 v 14 w(STRUCT)579 b Fl(MPI)p 1032
321 14 2 v 16 w(TYPE)p 1165 321 V 16 w(STRUCT)75 404
y Fr(These)16 b(constan)o(ts)e(are)h(in)o(tegers.)166
461 y(If)d Fl(combiner)g Fr(is)h Fh(MPI)p 513 461 13
2 v 14 w(BASIC)p Fr(,)d(then)j(the)f(returned)g Fl(count)i
Fr(is)e(1;)h(if)f(it)h(is)f(one)h(of)e(the)i(other)e(constan)o(ts,)75
517 y(then)k(the)g(returned)g Fl(count)h Fr(is)f(n)o(um)o(b)q(er)g(of)g
(blo)q(c)o(ks)g(whic)o(h)h(can)e(b)q(e)i(giv)o(en,)f(as)f
Fl(count)i Fr(argumen)o(t,)e(to)g(the)75 573 y(datat)o(yp)q(e)h
(constructor)f(function)i(indicated)h(b)o(y)e Fl(combiner)p
Fr(.)166 677 y Ff(Missing:)20 b Fi(More)c(com)o(biner)e(tags)i(will)e
(b)q(e)i(necessary)i(if)c(new)i(datat)o(yp)q(es)h(discussed)g(in)e(the)
h(miscellan)o(y)75 734 y(c)o(hapter)f(and)f(others)g(are)h(v)o(oted)f
(in)h Fr(.)166 837 y Fl(MPI)p 251 837 14 2 v 16 w(TYPE)p
384 837 V 17 w(ENVELOPE)21 b Fr(ma)o(y)f(return)g Fl(combiner)g
Fr(indicating)i(a)e(datat)o(yp)q(e)g(constructor)g(that)75
894 y(is)j(di\013eren)o(t)f(from)g(one)g(actually)h(used)g(in)g
(constructing)f(the)g(giv)o(en)h(datat)o(yp)q(e,)g(though)f(there)g(is)
75 950 y(one)d(restriction:)27 b(com)o(biners)19 b(indicating)i
Fl(MPI)p 922 950 V 15 w(TYPE)p 1054 950 V 17 w(HVECTOR)p
Fr(,)f Fl(MPI)p 1397 950 V 16 w(TYPE)p 1530 950 V 16
w(HINDEXED)p Fr(,)f(and)75 1007 y Fl(MPI)p 160 1007 V
16 w(TYPE)p 293 1007 V 17 w(STRUCT)11 b Fr(ma)o(y)e(b)q(e)i(returned)g
(only)g(if)g Fl(datat)o(yp)q(e)h Fr(is)f(de\014ned)h(b)o(y)e(one)h(of)f
(these)g(constructors.)189 1113 y Fd(R)n(ationale.)19
b Fr(The)13 b(ab)q(o)o(v)o(e)g(restriction)h(ensures)g(that)f(\\p)q
(ortabilit)o(y")h(of)f(a)g(datat)o(yp)q(e)g(is)h(preserv)o(ed)189
1169 y(through)20 b(deco)q(ding)j(and)e(reconstruction)g(of)f(the)h
(datat)o(yp)q(e)g(via)g(these)g(accessor)g(functions.)189
1226 y(\()p Fd(End)15 b(of)i(r)n(ationale.)p Fr(\))75
1427 y Fl(MPI)p 160 1427 V 16 w(TYPE)p 293 1427 V 17
w(CONTENTS\(datat)o(yp)q(e,)c(sta)o(rt,)e(count,)h(a)o(rra)o(y)p
1092 1427 V 15 w(blo)q(cklens,)g(stride,)g(a)o(rra)o(y)p
1526 1427 V 14 w(disps,)h(a)o(rra)o(y)p 1752 1427 V 14
w(t)o(yp)q(es\))117 1560 y Fi(IN)155 b Fl(datat)o(yp)q(e)424
b Fi(datat)o(yp)q(e)14 b(to)g(access\(handle\))117 1635
y(IN)155 b Fl(sta)o(rt)501 b Fi(index)13 b(of)g(\014rst)h(elemen)o(ts)f
(to)g(access\(non-negativ)o(e)h(in)o(teger\))117 1711
y(IN)155 b Fl(count)482 b Fi(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f
(to)h(access\(non-negativ)o(e)i(in)o(teger\))117 1786
y(OUT)108 b Fl(a)o(rra)o(y)p 416 1786 V 15 w(blo)q(cklens)306
b Fi(arra)o(y)14 b(of)f(blo)q(c)o(klengths\(arra)o(y)h(of)f
(non-negativ)o(e)h(in)o(tegers)117 1861 y(OUT)108 b Fl(a)o(rra)o(y)p
416 1861 V 15 w(disps)386 b Fi(arra)o(y)9 b(of)g(displacemen)o(ts)g(or)
g(stride,)i(expressed)g(in)e(elemen)o(ts\(arra)o(y)905
1917 y(of)k(non-negativ)o(e)h(in)o(teger\))117 1992 y(OUT)108
b Fl(a)o(rra)o(y)p 416 1992 V 15 w(hdisps)363 b Fi(arra)o(y)9
b(of)g(displacemen)o(ts)g(or)g(stride,)i(expressed)g(in)e(b)o
(ytes\(arra)o(y)905 2049 y(of)k(in)o(teger\))117 2124
y(OUT)108 b Fl(a)o(rrry)p 411 2124 V 15 w(t)o(yp)q(es)385
b Fi(arra)o(y)18 b(of)g(elemen)o(t)g(t)o(yp)q(es\(arra)o(y)h(of)f
(handles)g(to)h(datat)o(yp)q(e)905 2180 y(ob)r(jects\))75
2305 y Fg(int)k(MPI)p 245 2305 15 2 v 17 w(Type)p 358
2305 V 17 w(contents\(MPI)p 663 2305 V 15 w(Datatype)g(datatype,)g(int)
g(start,)g(int)h(count,)393 2361 y(int)g(*array)p 636
2361 V 16 w(blocklens,)e(int)i(*array)p 1154 2361 V 16
w(disps,)f(MPI)p 1409 2361 V 17 w(Aint)g(*array)p 1689
2361 V 17 w(hdisps,)393 2418 y(MPI)p 468 2418 V 17 w(Datatype)g(*array)
p 844 2418 V 16 w(types\))75 2504 y(MPI)p 150 2504 V
17 w(TYPE)p 263 2504 V 16 w(CONTENTS\(DATATYPE,)f(START,)h(COUNT,)g
(ARRAY)p 1187 2504 V 16 w(BLOCKLENS,)g(ARRAY)p 1586 2504
V 16 w(DISPS,)393 2561 y(ARRAY)p 516 2561 V 17 w(HDISPS,)g(ARRAY)p
844 2561 V 16 w(TYPES,)g(IERROR\))170 2617 y(INTEGER)g(DATATYPE,)g
(START,)g(COUNT,)g(ARRAY)p 1057 2617 V 17 w(BLOCKLENS\(*\),)f(ARRAY)p
1528 2617 V 16 w(DISPS\(*\),)170 2674 y(ARRAY)p 293 2674
V 17 w(HDISPS\(*\),)g(ARRAY)p 692 2674 V 17 w(TYPES\(*\),)h(IERROR)1967
46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 15 17
15 16 bop 75 -100 a Fk(6.4.)34 b(A)o(CCESSING)15 b Fl(MPI)g
Fk(D)o(A)l(T)l(A)l(TYPES)994 b Fr(15)75 49 y Fg(int)23
b(MPI::Type)p 389 49 15 2 v 16 w(contents\(MPI::Datatype)e(datatype,)i
(int)g(start,)g(int)h(count,)393 106 y(int)g(*array)p
636 106 V 16 w(blocklens,)e(int)i(*array)p 1154 106 V
16 w(disps,)393 162 y(MPI::Aint)f(*array)p 779 162 V
16 w(hdisps,)g(MPI::Datatype)f(*array)p 1464 162 V 17
w(types\))166 249 y Fr(Returns)11 b(information)g(ab)q(out)f(the)h
(top-lev)o(el)h(datat)o(yp)q(es)e(that)g(underlie)j Fl(datat)o(yp)q(e)f
Fr(except)f(it)g(skips)75 305 y(the)k(\014rst)g Fl(sta)o(rt)h
Fr(underlying)h(datat)o(yp)q(es)d(and)i(returns)f(information)g(on)g
(the)h(next)f Fl(count)h Fr(datat)o(yp)q(es.)166 362
y(More)k(sp)q(eci\014cally)m(,)25 b(if)c(the)h Fl(combiner)e
Fr(returned)i(b)o(y)f Fl(MPI)p 1206 362 14 2 v 16 w(TYPE)p
1339 362 V 17 w(ENVELOPE)h Fr(is)g Fh(MPI)p 1734 362
13 2 v 14 w(BASIC)p Fr(,)75 418 y Fl(datat)o(yp)q(e)h
Fr(itself)e(is)h(returned)f(in)h Fl(a)o(rra)o(y)p 775
418 14 2 v 15 w(t)o(yp)q(es[0])p Fr(.)38 b Fl(sta)o(rt)p
Fr(,)23 b Fl(count)p Fr(,)g Fl(a)o(rra)o(y)p 1345 418
V 15 w(blo)q(cklens)p Fr(,)h Fl(a)o(rra)o(y)p 1663 418
V 14 w(disps)p Fr(,)g(and)75 474 y Fl(a)o(rra)o(y)p 173
474 V 15 w(hdisps)17 b Fr(are)e(not)g(touc)o(hed.)166
531 y(If)i(the)g Fl(combiner)f Fr(returned)h(b)o(y)g
Fl(MPI)p 818 531 V 16 w(TYPE)p 951 531 V 16 w(ENVELOPE)h
Fr(is)f Fh(MPI)p 1336 531 13 2 v 15 w(CONTIG)p Fr(,)e(then)i
Fl(oldt)o(yp)q(e)h Fr(that)75 587 y(can)f(b)q(e)g(passed)f(to)g
Fl(MPI)p 510 587 14 2 v 16 w(TYPE)p 643 587 V 17 w(CONTIGUOUS)i
Fr(to)e(reconstruct)g(an)h(equiv)m(alen)o(t)h(of)e Fl(datat)o(yp)q(e)i
Fr(is)f(re-)75 644 y(turned)f(in)g Fl(a)o(rra)o(y)p 373
644 V 14 w(t)o(yp)q(es[0])p Fr(.)21 b Fl(Arra)o(y)p 671
644 V 16 w(blo)q(cklens)p Fr(,)16 b Fl(a)o(rra)o(y)p
982 644 V 15 w(disps)p Fr(,)g(and)g Fl(a)o(rra)o(y)p
1301 644 V 14 w(hdisps)h Fr(are)e(not)g(touc)o(hed.)166
700 y(If)c(the)f Fl(combiner)g Fr(returned)h(b)o(y)g
Fl(MPI)p 787 700 V 16 w(TYPE)p 920 700 V 16 w(ENVELOPE)h
Fr(is)f Fh(MPI)p 1293 700 13 2 v 14 w(VECTOR)p Fr(,)e(then)i
Fl(blo)q(cklen)p Fr(,)h Fl(stride)75 757 y Fr(and)22
b Fl(oldt)o(yp)q(e)h Fr(that)e(can)h(b)q(e)g(passed)g(to)f
Fl(MPI)p 891 757 14 2 v 16 w(TYPE)p 1024 757 V 17 w(VECTOR)i
Fr(to)e(reconstruct)g(an)h(equiv)m(alen)o(t)h(of)75 813
y Fl(datat)o(yp)q(e)16 b Fr(are)e(returned)h(in)h Fl(a)o(rra)o(y)p
664 813 V 14 w(blo)q(cklens[0])p Fr(,)g Fl(a)o(rra)o(y)p
1022 813 V 15 w(disps[0])g Fr(and)f Fl(a)o(rra)o(y)p
1376 813 V 14 w(t)o(yp)q(es[0])p Fr(,)h(resp)q(ectiv)o(ely)l(.)22
b Fl(a)o(r-)75 870 y(ra)o(y)p 136 870 V 15 w(hdisps)c
Fr(is)d(not)g(touc)o(hed.)166 926 y(If)22 b(the)g Fl(combiner)g
Fr(returned)g(b)o(y)g Fl(MPI)p 844 926 V 16 w(TYPE)p
977 926 V 17 w(ENVELOPE)h Fr(is)f(or)f Fh(MPI)p 1435
926 13 2 v 15 w(HVECTOR)p Fr(,)f(then)j(then)75 983 y
Fl(blo)q(cklen)p Fr(,)e Fl(stride)f Fr(and)g Fl(oldt)o(yp)q(e)g
Fr(that)f(can)g(b)q(e)h(passed)g(to)e Fl(MPI)p 1185 983
14 2 v 16 w(TYPE)p 1318 983 V 17 w(HVECTOR)i Fr(to)f(construct)g(an)75
1039 y(equiv)m(alen)o(t)h(of)f Fl(datat)o(yp)q(e)h Fr(are)e(returned)h
(in)h Fl(a)o(rra)o(y)p 955 1039 V 14 w(blo)q(cklens[0])p
Fr(,)h Fl(a)o(rra)o(y)p 1318 1039 V 15 w(hdisps[0])f
Fr(and)f Fl(a)o(rra)o(y)p 1703 1039 V 15 w(t)o(yp)q(es[0])p
Fr(,)75 1095 y(resp)q(ectiv)o(ely)l(.)j Fl(a)o(rra)o(y)p
435 1095 V 14 w(disps)17 b Fr(is)f(not)f(touc)o(hed.)166
1152 y(If)g(the)h Fl(combiner)e Fr(is)i Fh(MPI)p 600
1152 13 2 v 14 w(INDEXED)p Fr(,)e Fh(MPI)p 895 1152 V
15 w(HINDEXED)p Fr(,)g(or)h Fh(MPI)p 1276 1152 V 14 w(STRUCT)p
Fr(,)f(then)i(de\014ne)g Fl(\014lled)p Fr(:)189 1246
y Fd(\014l)r(le)n(d)11 b Fr(=)i(max\(0)p Fc(;)8 b Fr(min)o(\()p
Fd(c)n(ount)688 1253 y Fr(con)758 1246 y Fc(;)g Fd(c)n(ount)885
1253 y Fr(en)o(v)965 1246 y Fn(\000)j Fd(start)p Fr(\)\))75
1340 y(where)189 1433 y Fd(c)n(ount)296 1440 y Fr(en)o(v)378
1433 y(=)i Fl(count)k Fr(returned)e(b)o(y)h Fl(MPI)p
881 1433 14 2 v 15 w(TYPE)p 1013 1433 V 17 w(ENVELOPE)189
1540 y Fd(start)h Fr(=)c Fl(sta)o(rt)i Fr(passed)h(in)g(to)e
Fl(MPI)p 784 1540 V 16 w(TYPE)p 917 1540 V 17 w(CONTENTS)189
1646 y Fd(c)n(ount)296 1653 y Fr(con)378 1646 y(=)f Fl(count)k
Fr(passed)e(in)h(to)f Fl(MPI)p 886 1646 V 16 w(TYPE)p
1019 1646 V 16 w(CONTENTS)166 1752 y Fr(If)21 b(the)g
Fl(combiner)f Fr(returned)h(b)o(y)f Fl(MPI)p 837 1752
V 16 w(TYPE)p 970 1752 V 17 w(ENVELOPE)i Fr(is)f Fh(MPI)p
1364 1752 13 2 v 14 w(INDEXED)p Fr(,)e(then)i Fl(\014lled)h
Fr(ele-)75 1809 y(men)o(ts,)d(starting)g(from)f Fl(sta)o(rt)p
Fr(,)j(of)d Fl(a)o(rra)o(y)p 783 1809 14 2 v 15 w(of)p
835 1809 V 16 w(blo)q(cklengths)j Fr(and)f Fl(a)o(rra)o(y)p
1293 1809 V 14 w(of)p 1344 1809 V 16 w(displacements)h
Fr(that)e(can)g(b)q(e)75 1865 y(passed)14 b(to)e Fl(MPI)p
356 1865 V 16 w(TYPE)p 489 1865 V 17 w(INDEXED)h Fr(to)g(reconstruct)g
(an)g(equiv)m(alen)o(t)i(of)e Fl(datat)o(yp)q(e)i Fr(are)e(returned)h
(in)g(the)75 1922 y(\014rst)i Fl(\014lled)h Fr(p)q(ositions)h(of)e
Fl(a)o(rra)o(y)p 620 1922 V 14 w(blo)q(cklens)i Fr(and)f
Fl(a)o(rra)o(y)p 1008 1922 V 15 w(disps)p Fr(,)h(resp)q(ectiv)o(ely)l
(,)g(and)e Fl(oldt)o(yp)q(e)i Fr(that)e(can)g(b)q(e)75
1978 y(passed)k(to)f(the)h(same)f(constructor)g(function)i(is)f
(returned)g(in)h Fl(a)o(rra)o(y)p 1308 1978 V 15 w(t)o(yp)q(es[0])p
Fr(.)35 b Fl(a)o(rra)o(y)p 1612 1978 V 14 w(hdisps)22
b Fr(is)e(not)75 2034 y(mo)q(di\014ed.)166 2091 y(If)e(the)g
Fl(combiner)f Fr(returned)h(b)o(y)g Fl(MPI)p 823 2091
V 15 w(TYPE)p 955 2091 V 17 w(ENVELOPE)h Fr(is)f Fh(MPI)p
1343 2091 13 2 v 15 w(HINDEXED)p Fr(,)e(then)i Fl(\014lled)h
Fr(ele-)75 2147 y(men)o(ts,)g(starting)g(from)f Fl(sta)o(rt)p
Fr(,)j(of)d Fl(a)o(rra)o(y)p 783 2147 14 2 v 15 w(of)p
835 2147 V 16 w(blo)q(cklengths)j Fr(and)f Fl(a)o(rra)o(y)p
1293 2147 V 14 w(of)p 1344 2147 V 16 w(displacements)h
Fr(that)e(can)g(b)q(e)75 2204 y(passed)f(to)e Fl(MPI)p
364 2204 V 16 w(TYPE)p 497 2204 V 17 w(HINDEXED)h Fr(to)g(reconstruct)g
(an)g(equiv)m(alen)o(t)i(of)e Fl(datat)o(yp)q(e)i Fr(are)e(returned)h
(in)75 2260 y(the)13 b(\014rst)g Fl(\014lled)h Fr(p)q(ositions)g(of)e
Fl(a)o(rra)o(y)p 682 2260 V 15 w(blo)q(cklens)j Fr(and)e
Fl(a)o(rra)o(y)p 1064 2260 V 15 w(hdisps)p Fr(,)i(resp)q(ectiv)o(ely)l
(,)g(and)e Fl(oldt)o(yp)q(e)h Fr(that)f(can)75 2317 y(b)q(e)18
b(passed)f(to)f(the)h(same)g(constructor)f(function)h(is)h(returned)f
(in)h Fl(a)o(rra)o(y)p 1346 2317 V 14 w(t)o(yp)q(es[0])p
Fr(.)27 b Fl(a)o(rra)o(y)p 1641 2317 V 14 w(disps)19
b Fr(is)e(not)75 2373 y(mo)q(di\014ed.)166 2430 y(If)11
b(the)g Fl(combiner)f Fr(returned)h(b)o(y)g Fl(MPI)p
788 2430 V 16 w(TYPE)p 921 2430 V 17 w(ENVELOPE)h Fr(is)f
Fh(MPI)p 1295 2430 13 2 v 14 w(STRUCT)p Fr(,)f(then)h
Fl(\014lled)h Fr(elemen)o(ts,)75 2486 y(starting)18 b(from)g
Fl(sta)o(rt)p Fr(,)i(of)e Fl(a)o(rra)o(y)p 631 2486 14
2 v 15 w(of)p 683 2486 V 16 w(blo)q(cklengths)p Fr(,)j
Fl(a)o(rra)o(y)p 1061 2486 V 15 w(of)p 1113 2486 V 16
w(displacements)p Fr(,)g(and)e Fl(a)o(rra)o(y)p 1610
2486 V 14 w(of)p 1661 2486 V 16 w(t)o(yp)q(es)i Fr(that)75
2543 y(can)14 b(b)q(e)g(passed)g(to)f Fl(MPI)p 499 2543
V 16 w(TYPE)p 632 2543 V 17 w(STRUCT)h Fr(to)f(reconstruct)h(an)f
(equiv)m(alen)o(t)j(of)d Fl(datat)o(yp)q(e)i Fr(are)f(returned)75
2599 y(in)k(the)f(\014rst)g Fl(\014lled)h Fr(p)q(ositions)g(of)e
Fl(a)o(rra)o(y)p 757 2599 V 15 w(blo)q(cklens)p Fr(,)j
Fl(a)o(rra)o(y)p 1070 2599 V 14 w(hdisps)p Fr(,)h(and)d
Fl(a)o(rra)o(y)p 1416 2599 V 15 w(t)o(yp)q(es)p Fr(,)h(resp)q(ectiv)o
(ely)l(.)28 b Fl(a)o(r-)75 2655 y(ra)o(y)p 136 2655 V
15 w(disps)17 b Fr(is)f(not)f(mo)q(di\014ed.)-32 46 y
Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32
328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40
611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836
y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062
y(19)-40 1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288
y(23)-40 1345 y(24)-40 1401 y(25)-40 1457 y(26)-40 1514
y(27)-40 1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740
y(31)-40 1796 y(32)-40 1853 y(33)-40 1909 y(34)-40 1966
y(35)-40 2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191
y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40 2417
y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 16 18
16 17 bop 75 -100 a Fr(16)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)189 49 y Fd(R)n(ationale.)43
b Fr(F)o(OR)l(TRAN)17 b(users)f(w)o(ould)g(b)q(e)h(in)f(trouble)h(if)f
Fl(MPI)p 1327 49 14 2 v 16 w(TYPE)p 1460 49 V 16 w(CONTENTS)h
Fr(did)g(not)189 106 y(ha)o(v)o(e)d Fl(sta)o(rt)g Fr(and)h
Fl(count)h Fr(and)e(alw)o(a)o(ys)g(returned)h(the)f(en)o(tire)h(arra)o
(ys)e(at)h(once.)20 b(F)o(OR)l(TRAN)15 b(users)189 162
y(can't)j(mallo)q(c)i(and)f(hence)h(has)e(to)g(pass)h(in)h(arra)o(ys)d
(to)h Fl(MPI)p 1264 162 V 16 w(TYPE)p 1397 162 V 17 w(CONTENTS)i
Fr(that)e(are)g(a)189 219 y(\014xed)d(size)i({)d(a)h(size)h(that)f
(migh)o(t)g(b)q(e)h(to)q(o)e(small)i(for)f(a)g(particular)h(datat)o(yp)
q(e.)189 294 y(In)22 b(C,)f(users)g(can)h(access)g(the)f(en)o(tire)h
(arra)o(ys)e(in)j(a)e(single)i(call)f(b)o(y)g(pro)o(viding)g
(dynamically)189 350 y(allo)q(cated)d(arra)o(ys)d(whose)i(length)h(is)f
Fl(count)h Fr(returned)g(b)o(y)f Fl(MPI)p 1314 350 V
15 w(TYPE)p 1446 350 V 17 w(ENVELOPE)p Fr(.)h(\()p Fd(End)f(of)189
407 y(r)n(ationale.)p Fr(\))75 528 y Fj(6.4.2)49 b(Cha)o(racter)15
b(Rep)o(resenation)g(of)i(an)g(MPI)f(Datat)o(yp)q(e)75
614 y Fl(String)i(F)o(o)o(rmat:)43 b Fr(The)17 b(string)g(format)f(con)
o(tains)i(a)f(sequence)h(n)o(um)o(b)q(er)g(preceded)h(b)o(y)e(a)g(U)g
(\(for)g(user)75 671 y(de\014ned)d(t)o(yp)q(e\))f(and)g(follo)o(w)o(ed)
g(b)o(y)g(an)f(op)q(en)i(paren)o(theses.)19 b(The)13
b(top)f(lev)o(el)j(description)f(follo)o(ws)f(ending)75
727 y(with)h(a)g(close)g(paren)o(theses)g(\(in)h(the)f(BNF)g(b)q(elo)o
(w,)g(this)g(is)h(de\014ned)g(as)e Fc(<)p Fr(t)o(yp)q(eDesc)p
Fc(>)p Fr(\).)20 b(A)14 b(sequence)h(of)75 784 y(these)f(strings)f(are)
g(nested)h(to)f(supply)i(the)f(lo)o(w)o(er)f(lev)o(el)i(datat)o(yp)q
(es)e(as)g(they)g(are)h(de\014ned)g(\(in)g(the)g(BNF)75
840 y(b)q(elo)o(w,)20 b(see)f Fc(<)p Fr(t)o(yp)q(eDescUser)p
Fc(>)p Fr(\).)32 b(Lo)o(w)o(er)19 b(lev)o(el)h(t)o(yp)q(es)f(are)g
(de\014ned)h(up)q(on)g(\014rst)e(use)h(in)h(the)f(string.)75
896 y(The)h(basic)h(pre-de\014ned)h(data)d(t)o(yp)q(es)h(app)q(ear)g
(in)h(the)f(BNF)g(b)q(elo)o(w)g(as)g Fc(<)p Fr(t)o(yp)q(eDescC)p
Fc(>)h Fr(for)e(C)h(and)75 953 y Fc(<)p Fr(t)o(yp)q(eDescF77)p
Fc(>)d Fr(for)g(the)g(F)l(ortran)f(77.)25 b(The)17 b(enco)q(ding)i(of)e
(the)g(names)g(are)g(en)o(umerated)g(in)h(T)l(able)75
1009 y(I)e(b)q(elo)o(w.)23 b(User)16 b(de\014ned)h(data)e(t)o(yp)q(es)h
(ha)o(v)o(e)g(the)g(co)q(de)g(U)g(follo)o(w)o(ed)h(b)o(y)e(their)i
(sequence)g(n)o(um)o(b)q(er)f(\(e.g.)75 1066 y(U3129)e(refers)h(to)g(t)
o(yp)q(e)g(3129)f(whic)o(h)i(sho)o(ws)f(up)g(as)g(U3129\(....\)\).)75
1186 y Fl(Cha)o(racter)i(Set)g(and)h(Sto)o(rage:)45 b
Fr(The)17 b(c)o(haracters)f(set)g(used)i(will)g(b)q(e)g(ASCI)q(I)g
(with)f(the)g(parit)o(y)g(bit)g(set)75 1242 y(to)e(0)f(\(o\013)t(\).)k
(The)e(string)f(format)f(itself)i(will)h(b)q(e)f(stored)e(in)i(a)f(b)o
(yte)g(stream)g(\(MPI)p 1506 1242 V 16 w(P)l(A)o(CKED\).)166
1339 y Ff(Discussion:)166 1389 y Fi(Do)f(w)o(e)h(w)o(an)o(t)g(to)g(sa)o
(y)f(w)o(e)i(will)d(NULL)i(terminate)f(it,)h(if)f(so)h(w)o(e)g(can)g
(place)g(that)g(in)f(the)i(BNF.)f(Are)h(there)75 1439
y(more)d(precise)i(w)o(ords)f(other)h(than)f(ASCI)q(I)g(with)f(parit)o
(y)h(o\013)s(?)75 1606 y Fl(Interlanguage)k(Issues:)46
b Fr(The)18 b(basic)f(\(prede\014ned\))i(data)d(t)o(yp)q(es)h(are)g
(returned)h(in)g(the)f(dialect)h(of)f(the)75 1663 y(creating)e
(language.)189 1769 y Fd(A)n(dvic)n(e)k(to)i(users.)70
b Fr(The)20 b(follo)o(wing)h(data)e(t)o(yp)q(es)h(are)g(not)f
(necessarily)j(p)q(ortable:)30 b(h)o(v)o(ector,)189 1826
y(hindexed,)16 b(struct,)e(and)h(the)g(use)g(of)g(Upp)q(er/Lo)o(w)o(er)
f(b)q(ound.)21 b(When)15 b(mo)o(ving)g(to)f(systems)h(with)189
1882 y(di\013eren)o(t)j(data)g(t)o(yp)q(e)h(sizes)h(or)e(di\013eren)o
(t)h(alignmen)o(t)g(rules,)h(repro)q(ducing)g(a)e(data)g(t)o(yp)q(e)h
(from)189 1938 y(its)d(c)o(haracter)f(represen)o(tation)h(ma)o(y)f(not)
g(meet)h(the)g(user's)f(exp)q(ectations.)23 b(\()p Fd(End)16
b(of)h(advic)n(e)g(to)189 1995 y(users.)p Fr(\))-117
2056 y Fn(>)e Fm(\(Sept\))166 2101 y Fr(The)21 b(c)o(haracter)f
(represen)o(tation)h(is)g(in)o(tended)h(to)e(b)q(e)h(suc)o(h)h(that)e
(the)g(t)o(yp)q(e)h(map)g(of)f(the)h(user)75 2158 y(de\014ned)j(datat)o
(yp)q(e)e(can)h(b)q(e)g(repro)q(duced.)44 b(P)o(arsing)22
b(the)h(string)g(and)f(pro)q(ducing)i(a)f(user)g(de\014ned)75
2214 y(datat)o(yp)q(e)10 b(will)i(not)f(necessarily)h(result)f(in)g
(the)g(same)f(sequence)i(of)e(calls,)j(but)d(will)j(result)e(in)g(a)f
(datat)o(yp)q(e)75 2271 y(that)17 b(can)h(b)q(e)g(used)g(in)o(terc)o
(hangeably)h(with)f(the)g(original)g(datat)o(yp)q(e.)27
b(In)18 b(particular,)h(o\013sets)d(in)j(the)75 2327
y(c)o(haracter)14 b(represen)o(tation)i(need)g(to)e(b)q(e)i(in)g(their)
g(original)g(units)g(rather)f(than)g(con)o(v)o(erted)g(to)f(b)o(ytes.)
166 2383 y(F)l(or)d(example,)i(tak)o(e)d(a)i(datat)o(yp)q(e)e(on)i(pro)
q(cess)g(A.)f(Create)g(the)g(c)o(haracter)g(represen)o(tation)h(for)f
(that)75 2440 y(datat)o(yp)q(e.)31 b(Send)19 b(this)h(c)o(haracter)e
(represen)o(tation)h(to)f(pro)q(cess)h(B)g(where)h(pro)q(cess)f(B)g
(has)g(di\013eren)o(t)75 2496 y(lengths)f(for)e(the)i(basic)g(datat)o
(yp)q(es.)25 b(Use)17 b(the)h(c)o(harater)e(represen)o(tation)h(receiv)
o(ed)i(on)e(pro)q(cess)g(B)h(to)75 2553 y(create)d(a)g(datat)o(yp)q(e.)
k(This)d(datat)o(yp)q(e)f(w)o(ould)h(ha)o(v)o(e)f(the)g(same)g(t)o(yp)q
(e)g(map)g(as)g(a)g(datat)o(yp)q(e)g(created)g(b)o(y)75
2609 y(issuing)g(the)f(same)g(sequence)h(of)f(calls)h(used)f(to)g
(create)f(the)h(original)h(datat)o(yp)q(e)f(on)g(pro)q(cess)g(A)g(so)g
(long)75 2666 y(as)h(the)g(original)h(datat)o(yp)q(e)f(is)h(p)q
(ortable.)1967 46 y Fm(1)1967 103 y(2)1967 159 y(3)1967
215 y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967 441
y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959 667
y(12)1959 724 y(13)1959 780 y(14)1959 836 y(15)1959 893
y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 17 19
17 18 bop 75 -100 a Fk(6.4.)29 b(A)o(CCESSING)15 b Fl(MPI)g
Fk(D)o(A)l(T)l(A)l(TYPES)999 b Fr(17)166 49 y Ff(Missing:)166
99 y Fi(the)17 b(c)o(haracter)h(represen)o(tation)h(needs)f(to)f(b)q(e)
g(mo)q(di\014ed)e(to)i(b)q(e)g(simple)f(to)g(parse)i(and)e(1)h(c)o
(haracter)h(p)q(er)75 149 y(t)o(yp)q(e.)1875 204 y Fn(?)e
Fm(\(Sept\))611 327 y Fr(T)l(able)g(6.1:)j(Character)14
b(represen)o(tations)123 540 y Fg(Type)333 b(Character)23
b(representation)123 597 y(-----------------)e
(----------------------------)o(--)123 653 y(byte)333
b(b)123 710 y(packed)285 b(p)123 766 y(char)333 b(c)123
823 y(unsigned)22 b(char)119 b(uc)123 879 y(short)309
b(s)123 936 y(unsigned)22 b(short)95 b(us)123 992 y(int)357
b(i)123 1048 y(unsigned)22 b(int)143 b(ui)123 1105 y(long)333
b(l)123 1161 y(unsigned)22 b(long)119 b(ul)123 1218 y(long)23
b(long)214 b(ll)123 1274 y(unsigned)22 b(ll)167 b(ull)123
1331 y(float)309 b(f)123 1387 y(double)285 b(d)123 1444
y(long)23 b(double)166 b(ld)123 1500 y(INTEGER)261 b(I)123
1557 y(INTEGER*2)213 b(I2)123 1613 y(INTEGER*4)g(I4)123
1669 y(INTEGER*8)g(I8)123 1726 y(LOGICAL)261 b(L)123
1782 y(REAL)333 b(R)123 1839 y(REAL*4)285 b(R4)123 1895
y(REAL*8)g(R8)123 1952 y(DOUBLE)23 b(PRECISION)46 b(D)123
2008 y(COMPLEX)261 b(C)123 2065 y(DOUBLE)23 b(COMPLEX)94
b(DC)123 2121 y(user)23 b(data)g(type)95 b(Uxxxx)23 b(\(where)g(xxx)h
(is)g(the)f(sequence)g(number)g(of)g(the)h(type\))123
2178 y(contiguous)189 b(xxxType)23 b(\(where)g(xxx)h(is)f(positive)g
(and)g(Type)h(is)f(any)h(type\))123 2234 y(vector)285
b(V:Type:count:blocklength:str)o(ide)123 2290 y(hvector)261
b(HV:Type:count:blocklength:st)o(ride)123 2347 y(Indexed)g
(X:Type:count:blocklength/dis)o(placeme)o(nt,...)123
2403 y(HIndexed)237 b(HX:Type:count:blocklength/di)o(splacem)o(ent,...)
123 2460 y(Struct)285 b(S:count:Type/count/displacem)o(ent,...)75
2573 y(Examples:)147 2686 y(Type)23 b(threeslice)f(from)i(example)f
(3.29)g(\(assume)g(sizeofreal)f(is)i(4\))-32 46 y Fm(1)-32
103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32
385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40 611
y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40
1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40
1345 y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40
1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740 y(31)-40
1796 y(32)-40 1853 y(33)-40 1909 y(34)-40 1966 y(35)-40
2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191 y(39)-40
2248 y(40)-40 2304 y(41)-40 2361 y(42)-40 2417 y(43)-40
2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643 y(47)-40
2699 y(48)p eop
%%Page: 18 20
18 19 bop 75 -100 a Fr(18)876 b Fk(CHAPTER)15 b(6.)30
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)147 106 y Fg
("U329\(HV:U3291\(HV:U3292)o(\(V:R:9:)o(1:2\):9:1)o(:400\):9)o(:1:4000)
o(0\)")147 219 y(Type)23 b(ltype)g(from)g(example)g(3.30)147
332 y("U330\(X:R:100:1/99,101/)o(98,202/)o(97,...,1)o(0000/0\))o(")147
444 y(Type)g(xpose)g(from)g(example)g(3.31)h(\(assume)f(sizeofreal)f
(is)i(4\))147 557 y("U331\(HV:U3311\(V:R:100:)o(1:100\):)o(100:1:4\))o
(")147 670 y(Type)f(Particletype)f(from)h(example)g(3.33)h(\(assume)f
(double)g(alignment,)f(sizeof)h(int)h(4,)1030 727 y(sizeof)f(double)g
(8,)g(base)h(=)f(96\))147 840 y("U333\(S:4:i/1/0,d/6/8,c)o(/7/56,U)o
(B/1/64\)")147 953 y(Type)g(Particletype)f(from)h(example)g(3.34)h
(\(assume)f(addr)g(particle)g(is)g(96,)1030 1009 y(double)g(alignment,)
f(sizeof)h(int)h(4,)1030 1065 y(sizeof)f(double)g(8\))147
1178 y("U334\(S:3:i/1/96,d/6/10)o(4,c/7/1)o(52\)")75
1291 y(\045start)238 b(<start>)75 1404 y(\045\045)75
1517 y(<digit>)214 b(::=)23 b(0)h(|)g(1)f(|)h(2)g(|)g(3)f(|)h(4)g(|)g
(5)f(|)h(6)g(|)f(7)h(|)g(8)g(|)f(9)75 1630 y(<Int>)262
b(::=)23 b(-)h(<digit>)f(|)h(<digit>)f(|)g(<Int><digit>)75
1743 y(<nonNegInt>)118 b(::=)23 b(<digit>)g(|)h(<nonNegInt>)e(<digit>)
75 1856 y(<posDigit>)142 b(::=)23 b(1)h(|)g(2)f(|)h(3)g(|)g(4)f(|)h(5)g
(|)g(6)f(|)h(7)g(|)f(8)h(|)g(9)75 1969 y(<posInt>)190
b(::=)23 b(<posDigit>)g(|)g(<posInt>)g(<digit>)75 2082
y(<typeDescC>)118 b(::=)23 b(b)h(|)g(p)f(|)h(c)g(|)g(uc)f(|)h(s)g(|)f
(us)h(|)g(i)f(|)h(ui)g(|)f(l)h(|)457 2138 y(ul)f(|)h(ll)g(|)f(ull)h(|)g
(f)f(|)h(d)g(|)g(ld)75 2251 y(<typeDescF77>)70 b(::=)23
b(p)h(|)g(I)f(|)h(L)g(|)g(R)f(|)h(D)g(|)g(C)f(|)h(DC)g(|)f(Char)h(|)457
2307 y(I2)f(|)h(I4)g(|)f(I8)h(|)g(R4)f(|)h(R8)75 2420
y(<typeDescUser>)46 b(::=)23 b(U<nonNegInt>)f(|)i
(U<nonNegInt>\(<typeDesc>\))75 2533 y(<typeDescBasic>)e(::=)h
(<typeDescC>)g(|)g(<typeDescF77>)f(|)i(<typeDescUser>)75
2646 y(<typeDescAdv>)70 b(::=)23 b(UB)h(|)g(LB)f(|)h(<typeDescBasic>)
1967 46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 19 21
19 20 bop 75 -100 a Fk(6.5.)34 b(P)l(A)o(CKING/UNP)l(A)o(CKING)16
b(D)o(A)l(T)l(A)l(TYPES)f(AND)g(COMMUNICA)l(TORS)279
b Fr(19)75 49 y Fg(<typeDescVec>)70 b(::=)23 b
(V:<typeDescBasic>:<posInt>:<)o(posInt>)o(:<Int>)75 162
y(<typeDescHVec>)46 b(::=)23 b(HV:<typeDescBasic>:<posInt>:)o(<posInt)o
(>:<Int>)75 275 y(<typeDescIndex>)f(::=)h(X:<typeDescBasic>:<posInt>:<)
o(posInt>)o(/<Int>)e(|)457 332 y(<typeDescIndex>,<posInt>/)o(<Int>)75
444 y(<typeDescHIndex>)189 b(::=)23 b(HX:<typeDescBasic>:<posInt>)o
(:<posInt)o(>/<Int>)d(|)457 501 y(<typeDescHIndex>,<posInt>)o(/<Int>)75
614 y(<typeDescStruct>)189 b(::=)23 b(S:<posInt>:<typeDescAdv>/<p)o
(osInt>/<)o(Int>)e(|)457 670 y(<typeDescStruct>,<typeDes)o(cAdv>/<)o
(posInt>)o(/<Int>)75 783 y(<typeDescSimple>)189 b(::=)23
b(<typeDescBasic>)f(|)i(<typeDescVec>)e(|)457 840 y(<typeDescHVec>)g(|)
h(<typeDescIndex>)f(|)481 896 y(<typeDescHIndex>)f(|)j
(<typeDescStruct>)75 1009 y(<typeDesc>)142 b(::=)23 b(<posInt>)g
(<typeDescSimple>)f(|)h(<typeDescSimple>)75 1122 y(<start>)214
b(::=)23 b(<typeDesc>)75 1235 y(\045\045)75 1378 y Fo(6.5)59
b(P)n(acking/Unpacking)22 b(Datat)n(yp)r(es)e(and)f(Communicato)n(rs)
1875 1438 y Fn(>)d Fm(\(Sept\))75 1520 y Ff(Missing:)166
1570 y Fi(The)g(cononical)g(datat)o(yp)q(e)g(represen)o(tation)h(giv)o
(en)f(ab)q(o)o(v)o(e)f(allo)o(ws)g(one)h(to)g(send)h(a)f(datat)o(yp)q
(e)g(to)g(another)75 1620 y(pro)q(cess)i(and)f(then)g(use)g(it)f(to)h
(create)h(the)f(equiv)n(alen)o(t)f(t)o(yp)q(e)h(map.)24
b(Another)18 b(desired)f(capabilit)o(y)e(is)i(to)f(store)75
1670 y(datat)o(yp)q(es)d(in)g(\014les)g(and)f(then)h(use)h(them)e(to)g
(read)i(the)f(information)d(in)i(the)h(\014le.)18 b(When)13
b(y)o(ou)f(use)h(the)h(datat)o(yp)q(e)75 1719 y(represen)o(tation)21
b(to)e(recreate)i(the)f(datat)o(yp)q(e)g(y)o(ou)f(w)o(an)o(t)f(it)h(to)
g(represen)o(t)j(the)e(t)o(yp)q(e)g(map)d(on)i(the)h
Ff(original)75 1769 y(system)14 b Fi(that)g(wrote)h(the)g(\014le.)20
b(If)14 b(the)i(\014le)e(is)g(b)q(eing)h(read)g(b)o(y)f(a)g(system)h
(with)f(di\013eren)o(t)h(t)o(yp)q(e)g(maps)f(for)g(basic)75
1819 y(datat)o(yp)q(es)h(than)f(the)h(curren)o(t)h(prop)q(osal)e(will)f
(not)i(do)f(the)h(tric)o(k.)20 b(One)15 b(needs)h(to)e(store)h(the)g
(arc)o(h)g(at)f(the)h(start)75 1869 y(of)h(the)h(\014le)g(and)f(ha)o(v)
o(e)g(the)i(MPI)e(do)h(the)g(correct)h(op)q(erations)f(based)g(on)g
(the)g(arc)o(h.)26 b(Alternativ)o(ely)m(,)16 b(one)h(can)75
1919 y(store)f(datat)o(yp)q(es)h(in)e(cononical)g(form)e(that)j(allo)o
(w)e(for)h(recreation)i(on)e(another)h(system.)23 b(W)m(e)15
b(need)i(to)e(decide)75 1968 y(what)f(to)g(do)f(here.)1875
2016 y Fn(?)j Fm(\(Sept\))75 2137 y Fj(6.5.1)49 b(Canonical)18
b(data)f(enco)q(ding)75 2223 y Fr(It)j(is)h(desirable,)h(in)f(man)o(y)e
(situations,)i(to)f(b)q(e)g(able)h(to)e(enco)q(de)i(data)f(in)o(to)g(a)
f(canonical,)j(p)q(ortable)75 2280 y(represen)o(tation.)d(Suc)o(h)c
(canonical)g(represen)o(tation)e(will)i(facilitate)g(supp)q(ort)f(of)f
(MPI-IO)h(in)h(a)e(hetero-)75 2336 y(geneous)18 b(en)o(vironmen)o(t.)26
b(F)l(or)16 b(that)h(purp)q(ose,)h(it)g(is)f(prop)q(osed)h(that)e(the)i
(functions)g Fl(MPI)p 1657 2336 14 2 v 16 w(P)l(A)o(CK)f
Fr(and)75 2393 y Fl(MPI)p 160 2393 V 16 w(UNP)l(A)o(CK)e
Fr(b)q(e)h(extended)g(as)f(follo)o(ws.)166 2449 y(If)g(the)g(comm)o
(unicator)f(argumen)o(t)g(in)h Fl(MPI)p 925 2449 V 16
w(P)l(A)o(CK)g Fr(call)h(is)f Fl(comm)e(=)i(MPI)p 1461
2449 V 16 w(COMM)p 1619 2449 V 16 w(UNIVERSAL)75 2505
y Fr(then)e(the)g(message)f(is)i(pac)o(k)o(ed)f(using)g(an)g(XDR)g
(represen)o(tation)g(for)f(the)h(data.)18 b(I.e.,)13
b(the)g(pac)o(king)g(unit)75 2562 y(generated)j(b)o(y)h(a)f(sequence)i
(of)e Fl(MPI)p 715 2562 V 15 w(P)l(A)o(CK)h Fr(calls)g(with)g
Fl(comm)e(=)h(MPI)p 1334 2562 V 16 w(COMM)p 1492 2562
V 16 w(UNIVERSAL)i Fr(is)f(the)75 2618 y(same)11 b(string)g(that)f(w)o
(ould)i(obtain)f(b)o(y)g(con)o(v)o(erting)g(the)g(sequence)h(of)f
(basic)h(comp)q(onen)o(ts)f(to)f(XDR)i(co)q(de.)75 2675
y(If)18 b(the)f(comm)o(unicator)g(argumen)o(t)g(in)h
Fl(MPI)p 848 2675 V 16 w(UNP)l(A)o(CK)g Fr(call)g(is)g
Fl(comm)e(=)i(MPI)p 1461 2675 V 16 w(COMM)p 1619 2675
V 16 w(UNIVERSAL)-32 46 y Fm(1)-32 103 y(2)-32 159 y(3)-32
215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32
498 y(9)-40 554 y(10)-40 611 y(11)-40 667 y(12)-40 724
y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40
1006 y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40
1232 y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40
1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40
1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40
2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40
2361 y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40
2587 y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 20 22
20 21 bop 75 -100 a Fr(20)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fr(then)18
b(the)g(message)f(is)h(unpac)o(k)o(ed)g(assuming)g(that)f(the)h(pac)o
(k)o(ed)f(data)g(is)i(stored)e(in)h(an)g(XDR)g(repre-)75
106 y(sen)o(tation.)i Fh(MPI)p 366 106 13 2 v 14 w(COMM)p
510 106 V 15 w(UNIVERSAL)14 b Fr(is)h(a)g(new)h(constan)o(t)e(comm)o
(unicator)h(handle.)166 162 y(A)d(pac)o(king)g(unit)h(pac)o(k)o(ed)f
(with)g Fl(comm)e(=)i(MPI)p 974 162 14 2 v 16 w(COMM)p
1132 162 V 17 w(UNIVERSAL)g Fr(can)g(b)q(e)h(sen)o(t)f(and)g(receiv)o
(ed)75 219 y(with)h(datat)o(yp)q(e)g Fh(MPI)p 442 219
13 2 v 14 w(P)m(A)o(CKED)p Fr(.)d(Unlik)o(e)15 b(other)d(pac)o(king)h
(units,)h(it)f(cannot)g(b)q(e)h(receiv)o(ed)g(using)f(another)75
275 y(datat)o(yp)q(e.)166 332 y(The)j(function)h Fl(MPI)p
524 332 14 2 v 16 w(P)l(A)o(CK)p 655 332 V 16 w(SIZE)f
Fr(can)g(b)q(e)h(used)g(to)e(\014nd)i(the)f(size)h(of)e(the)i(XDR)f
(represen)o(tation)75 388 y(of)f(a)g(string)g(of)g(v)m(alues.)75
510 y Fj(6.5.2)49 b(Datat)o(yp)q(e)16 b(transfer)75 596
y Fr(One)21 b(sided)h(comm)o(unication)f(and)g(MPI-IO)g(require)h(the)e
(capabilit)o(y)i(of)e(transferring)g(a)g(datat)o(yp)q(e)75
652 y(from)15 b(pro)q(cess)g(to)g(pro)q(cess.)20 b(In)c(addition,)g
(datat)o(yp)q(e)f(deco)q(ding)h(is)g(needed)h(for)d(debuggers)i(and)f
(other)75 708 y(to)q(ols.)35 b(It)20 b(is)g(prop)q(osed)h(to)e(extend)i
(the)f(functions)h Fl(MPI)p 1103 708 V 16 w(P)l(A)o(CK)f
Fr(and)g Fl(MPI)p 1429 708 V 16 w(UNP)l(A)o(CK)p Fr(,)g(in)h(order)f
(to)75 765 y(ac)o(hiev)o(e)c(these)f(goals.)166 821 y(A)d(call)h(to)e
Fl(MPI)p 429 821 V 16 w(P)l(A)o(CK\(handle,)i(1,)f(MPI)p
856 821 V 15 w(D)o(A)l(T)l(A)l(TYPE,)h(outbuf,)h(outsize,)e(p)q
(osition,)i(comm\))p Fr(,)c(where)75 878 y Fl(handle)j
Fr(is)e(the)h(address)f(of)g(a)f(datat)o(yp)q(e)h(handle,)i(will)g(pac)
o(k)e(in)o(to)g Fl(outbuf)i Fr(a)e(description)h(of)f(the)g(datat)o(yp)
q(e)75 934 y(argumen)o(t.)166 991 y(A)17 b(call)h(to)f
Fl(MPI)p 445 991 V 16 w(UNP)l(A)o(CK\(inbuf,)h(insize,)g(p)q(osition,)g
(handle,)h(1,)e(MPI)p 1383 991 V 16 w(D)o(A)l(T)l(A)l(TYPE,)g(comm\))e
Fr(will)75 1047 y(unpac)o(k)g(from)f(the)h(bu\013er)g(a)f(datat)o(yp)q
(e)h(description)h(and)f(return)g(in)g Fl(handle)h Fr(a)f(handle)h(to)e
(a)g(datat)o(yp)q(e)75 1104 y(ob)s(ject.)27 b(This)19
b(datat)o(yp)q(e)e(is)i Fd(structur)n(al)r(ly)g(e)n(quivalent)e
Fr(to)g(the)h(datat)o(yp)q(e)g(that)f(w)o(as)g(enco)q(ded)i(b)o(y)f
(the)75 1160 y(sending)e(pro)q(cess.)k(I.e.,)14 b(it)g(is)h(a)f(datat)o
(yp)q(e)g(that)g(w)o(ould)h(b)q(e)g(created)f(at)g(the)h(receiving)h
(pro)q(cess)e(b)o(y)h(the)75 1217 y(same)i(sequence)h(of)f(datat)o(yp)q
(e)g(constructing)h(calls)g(that)f(w)o(as)f(used)i(to)f(de\014ne)h(the)
f(datat)o(yp)q(e)g(at)g(the)75 1273 y(sending)f(pro)q(cess.)166
1329 y Fh(MPI)p 243 1329 13 2 v 14 w(D)o(A)m(T)m(A)m(TYPE)c
Fr(is)j(a)g(new)g(constan)o(t)e(datat)o(yp)q(e)i(handle.)21
b(It)14 b(can)h(b)q(e)g(used)h(in)f(pac)o(k)g(and)g(unpac)o(k)75
1386 y(calls)24 b(wherev)o(er)f(a)f(regular)h(datat)o(yp)q(e)f(argumen)
o(t)g(can)h(b)q(e)h(used.)43 b(E.g.,)23 b(a)f(pro)q(cess)i(can)e(pac)o
(k)h(in)75 1442 y(the)c(same)g(pac)o(king)g(unit)h(sev)o(eral)f(datat)o
(yp)q(e)g(descriptions,)i(or)e(pac)o(k)g(in)g(a)g(pac)o(king)h(unit)f
(datat)o(yp)q(e)75 1499 y(descriptions)13 b(as)f(w)o(ell)g(as)g
(regular)g(data,)f(using)i(successiv)o(e)g(calls)g(to)e
Fl(MPI)p 1338 1499 14 2 v 16 w(P)l(A)o(CK)p Fr(.)g(A)h(pac)o(king)g
(unit)h(that)75 1555 y(con)o(tains)f(a)g(datat)o(yp)q(e)g(descriptor)h
(can)f(only)h(b)q(e)g(receiv)o(ed)g(with)f(t)o(yp)q(e)h
Fh(MPI)p 1367 1555 13 2 v 14 w(P)m(A)o(CKED)p Fr(.)d(The)i(\\datat)o
(yp)q(e")75 1612 y Fh(MPI)p 152 1612 V 14 w(D)o(A)m(T)m(A)m(TYPE)j
Fr(cannot)j(b)q(e)h(used)f(as)g(a)f(comp)q(onen)o(t)h(in)h(a)e
(constructed)h(datat)o(yp)q(e)g(and)g(cannot)f(b)q(e)75
1668 y(used)f(in)g(send/receiv)o(e)g(calls.)166 1725
y(A)e(call)i(to)d Fl(MPI)p 436 1725 14 2 v 16 w(P)l(A)o(CK)p
567 1725 V 16 w(SIZE)h Fr(can)g(b)q(e)h(used)g(to)f(\014nd)h(out)f(ho)o
(w)f(m)o(uc)o(h)h(space)h(is)g(needed)g(to)f(store)f(a)75
1781 y(datat)o(yp)q(e)i(represen)o(tation.)166 1838 y(The)21
b(pac)o(k)o(ed)g(represen)o(tation)f(of)h(a)f(datat)o(yp)q(e)g(can)h(b)
q(e)h(implemen)o(tation)g(dep)q(enden)o(t.)38 b(If)21
b(the)75 1894 y Fl(comm)e Fr(argumen)o(t)g(of)h(the)h
Fl(MPI)p 645 1894 V 16 w(P)l(A)o(CK)f Fr(call)i(indicates)f(that)f(the)
h(datat)o(yp)q(e)f(will)i(b)q(e)f(transfered)f(in)75
1950 y(a)f(homogeneous)f(en)o(vironmen)o(t,)i(then)g(one)f(ma)o(y)f
(use)h(an)g(in)o(ternal,)i(\\binary")e(datat)o(yp)q(e)f(represen-)75
2007 y(tation.)42 b(Ho)o(w)o(ev)o(er,)23 b(a)f Fl(MPI)p
584 2007 V 16 w(P)l(A)o(CK)g Fr(call)i(that)e(pac)o(ks)g(a)g(datat)o
(yp)q(e)g(descriptor)h(can)g(use)g Fl(comm)e(=)75 2063
y(MPI)p 160 2063 V 16 w(COMM)p 318 2063 V 16 w(UNIVERSAL)p
Fr(,)d(to)g(require)g(that)f(a)g(canonical)i(datat)o(yp)q(e)e(represen)
o(tation)h(b)q(e)g(created.)75 2120 y(In)g(this)g(case,)g(the)g
Fl(MPI)p 503 2120 V 16 w(P)l(A)o(CK)f Fr(call)i(will)h(store)d(in)h
(the)g(pac)o(king)g(unit)g(a)g(c)o(haracter)f(string)g(that)g(en-)75
2176 y(co)q(des)c(the)f(datat)o(yp)q(e,)g(using)h(the)f(grammar)f(in)i
(Section)g(6.4.2.)k(\(One)c(ma)o(y)e(think)i(of)f(this)h(grammar)d(as)
75 2233 y(de\014ning)j(the)f(XDR)g(enco)q(ding)h(of)e(datat)o(yp)q
(es.\))18 b(Similarly)l(,)c(a)e(call)h(to)e Fl(MPI)p
1361 2233 V 15 w(UNP)l(A)o(CK)h Fr(with)g Fl(datat)o(yp)q(e)i(=)75
2289 y(MPI)p 160 2289 V 16 w(D)o(A)l(T)l(A)l(TYPE)p Fr(,)g(and)g
Fl(comm)e(=)h(MPI)p 777 2289 V 16 w(COMM)p 935 2289 V
17 w(UNIVERSAL)h Fr(will)h(deco)q(de)g(a)e(datat)o(yp)q(e)g(enco)q(ded)
i(in)75 2346 y(a)e(string,)g(according)h(to)f(the)h(grammar)e(in)i
(Section)g(6.4.2,)e(and)h(create)h(at)e(the)i(target)e(the)i(corrsp)q
(ond-)75 2402 y(ing)i(datat)o(yp)q(e)e(ob)s(ject.)166
2499 y Ff(Discussion:)166 2549 y Fi(Do)f(w)o(e)h(w)o(an)o(t)g(the)g
(unpac)o(k)o(ed)h(datat)o(yp)q(e)f(to)f(b)q(e)i(committed?)166
2599 y(W)m(e)d(could)h(allo)o(w)e Fh(MPI)p 529 2599 13
2 v 14 w(D)o(A)m(T)m(A)m(TYPE)f Fi(to)j(b)q(e)g(used)h(in)e(datat)o(yp)
q(e)h(constructors,)h(and)f(in)f(send-receiv)o(e)j(calls.)75
2649 y(An)h(ada)o(v)n(an)o(tage)f(is)h(that)h(the)g(design)f(is)g
(clean:)23 b Fh(MPI)p 951 2649 V 14 w(D)o(A)m(T)m(A)m(TYPE)14
b Fi(b)q(eha)o(v)o(es)j(as)f(an)o(y)g(other)h(prede\014ned)h(MPI)75
2698 y(datat)o(yp)q(e.)g(One)c(problem)e(if)g(w)o(e)i(go)e(this)i(w)o
(a)o(y)e(is)h(that)h(a)f(message)g(bu\013er)h(descriptor)g(\(coun)o(t,)
g(datat)o(yp)q(e\))f(do)q(es)1967 46 y Fm(1)1967 103
y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967
385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959
836 y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959
1062 y(19)1959 1119 y(20)1959 1175 y(21)1959 1232 y(22)1959
1288 y(23)1959 1345 y(24)1959 1401 y(25)1959 1457 y(26)1959
1514 y(27)1959 1570 y(28)1959 1627 y(29)1959 1683 y(30)1959
1740 y(31)1959 1796 y(32)1959 1853 y(33)1959 1909 y(34)1959
1966 y(35)1959 2022 y(36)1959 2078 y(37)1959 2135 y(38)1959
2191 y(39)1959 2248 y(40)1959 2304 y(41)1959 2361 y(42)1959
2417 y(43)1959 2474 y(44)1959 2530 y(45)1959 2587 y(46)1959
2643 y(47)1959 2699 y(48)p eop
%%Page: 21 23
21 22 bop 75 -100 a Fk(6.6.)34 b(TR)o(UE)15 b(EXTEXT)g(OF)g(D)o(A)l(T)l
(A)l(TYPES)936 b Fr(21)75 49 y Fi(not)14 b(tell)f(an)o(ymore)f(what)i
(is)g(the)g(size)g(of)g(the)g(corresp)q(onding)h(message.)i(Another)e
(problem)d(is)i(that)g(one)g(needs)75 99 y(to)f(create)h(MPI)f(ob)r
(jects)h(as)e(part)h(of)f(the)i(receiving)f(co)q(de.)18
b(This)13 b(ma)o(y)e(cause)i(problems)f(on)h(systems)f(where)i(the)75
149 y(receiving)j(co)q(de)g(ma)o(y)e(execute)j(in)e(a)g(signal)f(con)o
(text,)j(or)e(is)h(otherwise)g(restricted.)28 b(The)17
b(curren)o(t)h(constrain)o(t)75 199 y(\()p Fh(MPI)p 168
199 13 2 v 14 w(D)o(A)m(T)m(A)m(YPE)d Fi(can)j(only)f(b)q(e)h(used)g
(as)g(an)g(argumen)o(t)e(in)h(pac)o(k)h(and)f(unpac)o(k\))h(seems)g(to)
f(pro)o(vide)h(enough)75 249 y(function)c(and)f(allo)o(ws)g(for)g
(simpler)g(implemen)o(tation)d(strategies.)166 298 y(The)k(grammar)d
(for)j(univ)o(ersal)f(datat)o(yp)q(e)h(descriptors)i(should)e
(ful\014ll)e(these)j(t)o(w)o(o)f(conditions.)75 348 y(\(1\))g(Strings)g
(that)g(describ)q(e)h(datat)o(yp)q(es)g(are)f(self-delimiting.)75
398 y(\(2\))h(Strings)h(that)f(describ)q(e)i(datat)o(yp)q(es)f(ha)o(v)o
(e)f(enough)h(information)c(so)j(that)h(one)f(can)h(use)g(them)e(to)h
(create)i(a)75 448 y(new)d(structurally)h(equiv)n(alen)o(t)e(datat)o
(yp)q(e,)g(ev)o(en)i(on)f(a)f(no)q(de)i(with)e(a)h(di\013eren)o(t)h
(arc)o(hitecture.)166 504 y(The)j(same)f(design)i(can)f(b)q(e)g(used)h
(to)f(\015atten)h(and)e(transfer)i(other)g(MPI)f(opaque)g(ob)r(jects,)i
(where)f(this)75 561 y(mak)o(es)e(sense.)33 b(MPI)18
b(groups)h(are)f(a)g(p)q(ossible)h(candidate.)31 b(W)m(e)18
b(can)g(in)o(tro)q(duce)h(a)f(new)h(datat)o(yp)q(e)f(constan)o(t)75
617 y Fh(MPI)p 152 617 V 14 w(GROUP)13 b Fi(and)i(allo)o(w)e(group)i
(ob)r(jects)h(to)f(b)q(e)h(transferred,)g(using)f(the)h(same)e(design)h
(as)g(for)f(datat)o(yp)q(es.)22 b(If)75 674 y(w)o(e)14
b(tak)o(e)g(this)g(w)o(alk,)e(then)j(w)o(e)f(need)h(to)f(deal)f(with)h
(the)g(follo)o(wing)e(issues:)75 730 y(\(1\))k(What)g(is)h(the)g(univ)o
(ersal)f(represen)o(tation)i(for)e(groups)h(\(actually)m(,)e(for)h(MPI)
h(pro)q(cesses\)?)29 b(This)16 b(migh)o(t)e(b)q(e)75
786 y(something)e(lik)o(e)h Fa(\(IP)21 b(address)f(:)44
b(PID\))p Fi(.)12 b(This)i(represen)o(tation)h(should)e(b)q(e)h
(compatible)e(with)h(the)h(one)g(used)75 843 y(for)g(serv)o(ers)h(in)f
(the)g(clien)o(t/serv)o(er)h(section)g(of)e(the)i(Dynamic)d(c)o
(hapter.)75 899 y(\(2\))17 b(What)g(can)h(a)f(pro)q(cess)j(do)d(with)g
(suc)o(h)h(comm)o(unicated)d(group?)29 b(I.e.,)17 b(what)h(capabilit)o
(y)e(do)q(es)i(a)f(pro)q(cess)75 956 y(transfers)f(to)e(another)h(pro)q
(cess,)h(when)f(it)f(sends)i(to)f(that)f(other)h(pro)q(cess)i(a)d
(represen)o(tation)i(of)e(a)g(group?)20 b(Can)75 1012
y(the)14 b(receiv)o(er)i(kill)c(an)o(y)i(pro)q(cess)h(in)f(the)g(group)
g(whic)o(h)g(description)g(it)g(receiv)o(ed?)75 1203
y Fo(6.6)59 b(T)-5 b(rue)20 b(Extext)f(of)h(Datat)n(yp)r(es)75
1304 y Fr(Supp)q(ose)i(w)o(e)f(implemen)o(t)h(gather)f(as)f(a)h
(spanning)h(tree)f(implemen)o(ted)i(on)e(top)g(of)f(p)q(oin)o(t-to-p)q
(oin)o(t)75 1361 y(routines.)f(Since)11 b(the)g(recv)f(bu\013er)g(is)h
(only)g(v)m(alid)h(on)e(the)h(ro)q(ot)e(pro)q(cess,)i(one)g(will)g
(need)h(to)d(allo)q(cate)i(some)75 1417 y(temp)q(orary)i(space)i(for)e
(receiving)j(data)d(on)h(in)o(termediate)h(no)q(des.)20
b(The)14 b(di\016cultly)i(is)f(in)f(determining)75 1474
y(the)20 b(size)i(one)e(needs)h(to)f(allo)q(ciate.)37
b(This)20 b(o)q(ccurs)h(since)h(the)e(user)g(can)h(mo)q(dify)g(the)f
(exten)o(t)g(using)75 1530 y(the)i Fh(MPI)p 237 1530
V 14 w(UB)g Fr(and)g Fh(MPI)p 500 1530 V 14 w(LB)g Fr(v)m(alues.)42
b(The)22 b(writer)g(of)f(the)i(gather)e(routine)h(could)h(determine)h
(this)75 1587 y(information)16 b(b)o(y)g(deco)q(ding)i(the)e(datat)o
(yp)q(e.)21 b(Ho)o(w)o(ev)o(er,)15 b(this)i(is)f(more)g(w)o(ork)f(and)h
(more)g(painful)h(than)75 1643 y(desired.)k(Th)o(us,)15
b(a)g(new)g(function)h(is)g(pro)o(vided)g(whic)o(h)g(returns)f(the)g
(true)g(exten)o(t)g(of)g(the)g(datat)o(yp)q(e.)75 1794
y Fl(MPI)p 160 1794 14 2 v 16 w(TRUE)p 294 1794 V 17
w(EXTENT\(datat)o(yp)q(e,)i(true)p 775 1794 V 17 w(lb,)e(true)p
929 1794 V 17 w(extent\))117 1871 y Fi(IN)155 b Fl(datat)o(yp)q(e)424
b Fi(datat)o(yp)q(e)14 b(to)g(get)g(information)d(on)117
1946 y(OUT)108 b Fl(true)p 396 1946 V 17 w(lb)461 b Fi(true)15
b(lo)o(w)o(er)e(b)q(ound)h(of)g(datat)o(yp)q(e)117 2021
y(OUT)108 b Fl(true)p 396 2021 V 17 w(extent)379 b Fi(true)15
b(size)g(of)e(datat)o(yp)q(e)75 2146 y Fg(int)23 b(MPI)p
245 2146 15 2 v 17 w(True)p 358 2146 V 17 w(extent\(MPI)p
615 2146 V 16 w(Datatype)f(datatype,)h(MPI)p 1156 2146
V 17 w(Aint)g(true)p 1388 2146 V 17 w(lb,)g(MPI)p 1572
2146 V 17 w(Aint)393 2202 y(true)p 492 2202 V 17 w(extent\))75
2289 y(MPI)p 150 2289 V 17 w(TRUE)p 263 2289 V 16 w(EXTENT\(DATATYPE,)f
(TRUE)p 781 2289 V 17 w(LB,)h(TRUE)p 989 2289 V 17 w(EXTENT\))170
2345 y(INTEGER)g(DATATYPE,)g(TRUE)p 699 2345 V 17 w(LB,)g(TRUE)p
907 2345 V 17 w(EXTENT)75 2432 y(int)g(MPI::True)p 389
2432 V 16 w(extent\(MPI::Datatype)f(datatype,)g(MPI::Aint)h(true)p
1480 2432 V 16 w(lb,)h(MPI::Aint)393 2488 y(true)p 492
2488 V 17 w(extent\))166 2575 y Fl(true)p 244 2575 14
2 v 17 w(lb)14 b Fr(returns)f(the)g(o\013set)g(of)g(the)g(lo)o(w)o(est)
g(unit)h(of)f(store)g(whic)o(h)h(is)g(addressed)g(b)o(y)f(the)h(datat)o
(yp)q(e.)75 2631 y Fl(true)p 153 2631 V 17 w(extent)k
Fr(returns)f(the)g(true)f(size)i(of)e(the)h(datat)o(yp)q(e.)24
b(The)17 b Fl(true)p 1244 2631 V 17 w(extent)i Fr(is)e(the)g(minim)o
(um)h(n)o(um)o(b)q(er)-32 46 y Fm(1)-32 103 y(2)-32 159
y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32
441 y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40 667
y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40
949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119 y(20)-40
1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40
1853 y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40
2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248 y(40)-40
2304 y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40
2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699 y(48)p
eop
%%Page: 22 24
22 23 bop 75 -100 a Fr(22)876 b Fk(CHAPTER)15 b(6.)30
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fr(of)13
b(b)o(ytes)g(of)h(memory)f(necessary)g(to)g(hold)i(a)e(datat)o(yp)q(e)g
(and)h(ignores)g(the)f Fl(LB)h Fr(and)g Fl(UB)g Fr(that)e(ma)o(y)h(ha)o
(v)o(e)75 106 y(b)q(een)j(used)g(in)g(creating)g(the)f(datat)o(yp)q(e.)
75 248 y Fo(6.7)59 b(Caching)20 b(on)g(MPI)g(Handles)75
349 y Fr(The)11 b Fl(MPI)f Fr(standard)g(pro)o(vides)g(a)h(\\cac)o
(hing")f(facilit)o(y)i(that)d(allo)o(ws)i(an)f(application)i(to)e
(attac)o(h)g(arbitrary)75 406 y(pieces)k(of)f(information,)g(called)i
(attributes,)d(to)h(comm)o(unicators.)18 b(Pro)o(viding)c(cac)o(hing)g
(for)e(other)h Fl(MPI)75 462 y Fr(handles)j(pro)o(vides)g(a)f(w)o(a)o
(y)f(for)h(attac)o(hing)f(information)i(to)e(these)i(handles)g(as)f(w)o
(ell.)166 519 y(An)k(example)h(of)f(the)h(utilit)o(y)g(of)f(cac)o(hing)
h(is)f(for)g(a)g(pro\014ling)h(library)g(to)f(in)o(tercept)h(ev)o(ery)f
(call)75 575 y(that)g(creates)h(a)f(p)q(ersistan)o(t)h(request)g(in)g
Fl(MPI)p Fr(.)f(The)h(pro\014ling)h(library)g(needs)f(to)f(\\remem)o(b)
q(er")h(the)75 632 y(information)15 b(ab)q(out)g(a)g(p)q(ersistan)o(t)h
(request)f(since)h(it)g(is)g(not)e(a)o(v)m(ailable)j(when)f
Fl(MPI)p 1532 632 14 2 v 16 w(ST)l(ART)g Fr(is)g(called.)75
688 y(The)j(pro\014ling)h(library)f(could)g(cac)o(he)g(the)g(p)q
(ersistan)o(t)f(requests)h(c)o(haracteristics)g(on)f(the)h(p)q
(ersistan)o(t)75 745 y(request.)h(Then,)15 b(whenev)o(er)h(this)f(p)q
(ersistan)o(t)g(request)g(is)h(used)f(in)h(a)f(pro\014led)h(call,)g
(the)f(needed)i(infor-)75 801 y(mation)11 b(can)g(b)q(e)h(extracted.)18
b(The)11 b(adv)m(an)o(tage)g(of)g(cac)o(hing)g(the)h(information)f(is)h
(that)e(risk)h(of)g(using)h(stale)75 857 y(information)j(from)g(reuse)g
(of)g(requests)g(while)i(the)e(pro\014ling)i(library)f(w)o(as)e
(disabled)j(is)f(eliminated.)75 978 y Fj(6.7.1)49 b(F)o(unctions)75
1064 y Fr(MPI-2)11 b(pro)o(vides)i(general)f(cac)o(hing)g(functions)g
(that)f(allo)o(w)h(attributes)g(to)f(b)q(e)h(cac)o(hed)g(on)g(the)f
(follo)o(wing)75 1120 y(t)o(yp)q(es)k(MPI)g(handles:)143
1209 y Fn(\017)23 b Fg(MPI)p 264 1209 15 2 v 16 w(COMM)143
1301 y Fn(\017)g Fg(MPI)p 264 1301 V 16 w(DATATYPE)143
1392 y Fn(\017)g Fg(MPI)p 264 1392 V 16 w(GROUP)143 1484
y Fn(\017)g Fg(MPI)p 264 1484 V 16 w(REQUEST)15 b Fr(\(P)o(ersistan)o
(t)f(only\))143 1576 y Fn(\017)23 b Fg(MPI)p 264 1576
V 16 w(File)166 1705 y Ff(Missing:)166 1754 y Fi(W)m(e)13
b(ha)o(v)o(e)h(not)g(y)o(et)g(determined)g(whic)o(h)g(of)f(the)i(new)f
(handles)g(w)o(e)g(ma)o(y)e(also)h(include)-117 1810
y Fn(>)i Fm(\(Sept\))166 1899 y Ff(Discussion:)166 1949
y Fi(The)f(question)g(w)o(as)g(raised)g(wh)o(y)g(w)o(e)g(need)h(to)f
(cac)o(he)h(on)e(groups.)19 b(Should)13 b(these)i(b)q(e)g(on)e(the)i
(list?)189 2096 y Fd(R)n(ationale.)49 b Fr(It)17 b(w)o(as)f(decided)i
(not)f(to)f(allo)o(w)h(cac)o(hing)g(on)g(all)g(handles)h(since)g(it)f
(could)h(ha)o(v)o(e)e(a)189 2152 y(p)q(erformance)h(impact.)24
b(F)l(or)16 b(example,)i(\(a)e(non-p)q(ersistan)o(t\))h
Fl(MPI)p 1360 2152 14 2 v 16 w(REQUEST)h Fr(is)f(created)g(and)189
2209 y(destro)o(y)o(ed)g(in)i(time)g(critical)h(sections)e(of)g(co)q
(de.)29 b(Ho)o(w)o(ev)o(er,)18 b(pro\014lers)h(w)o(ould)f(lik)o(e)i(to)
d(b)q(e)i(able)189 2265 y(to)d(cac)o(he)i(on)f(p)q(ersistan)o(t)g
(requests.)26 b(Since)18 b(they)f(are)g(longer)h(liv)o(ed,)g(it)g(w)o
(as)e(decided)j(to)e(allo)o(w)189 2321 y(cac)o(hing)i(on)f(them.)30
b(Also,)19 b(datat)o(yp)q(e)f(migh)o(t)h(b)q(e)g(created)g(in)g
(critical)h(sections)f(of)f(F90)g(co)q(de,)189 2378 y(e.g.,)e(for)g
(arra)o(y)g(sections.)25 b(Ho)o(w)o(ev)o(er,)16 b(it)h(w)o(as)f
(decided)j(to)d(allo)o(w)h(cac)o(hing)h(on)e(datat)o(yp)q(es)h(ev)o(en)
189 2434 y(though)e(this)g(ma)o(y)g(happ)q(en.)21 b(\()p
Fd(End)15 b(of)i(r)n(ationale.)p Fr(\))166 2534 y(A)c
Fg(keyval)f Fr(created)h(b)o(y)g(the)h Fl(MPI)e Fr(function)i
Fl(MPI)p 1019 2534 V 16 w(KEYV)l(AL)p 1205 2534 V 17
w(CREA)l(TE)g Fr(ma)o(y)e(b)q(e)i(used)g(for)e(cac)o(hing)75
2591 y(on)i(an)o(y)f(of)g(the)h(ab)q(o)o(v)o(e)g(MPI)f(handles.)21
b(The)14 b(cop)o(y)f(and)h(delete)h(functions)g(no)o(w)e(tak)o(e)g(a)g
(\014rst)h(argumen)o(t)75 2647 y(that)g(is)i(an)o(y)e(allo)o(w)o(ed)i
(handle)g(and)f(the)g(second)h(argumen)o(t)e(is)i(the)f(handle)h(t)o
(yp)q(e.)k(Note)14 b(that)h(handles)75 2704 y(are)g(no)o(w)g(of)f(t)o
(yp)q(e)i Fh(MPI)p 477 2704 13 2 v 14 w(Handle)p Fr(.)1967
46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 23 25
23 24 bop 75 -100 a Fk(6.7.)34 b(CA)o(CHING)15 b(ON)h(MPI)f(HANDLES)
1005 b Fr(23)75 49 y Fg(typedef)23 b(int)g
(MPI_Copy_function\(MPI_Handle)d(*handle,)791 106 y(MPI_Handle_type)i
(handle_type,)791 162 y(int)h(keyval,)791 219 y(void)g(*extra_state,)f
(void)i(*attribute_val_in,)791 275 y(void)f(*attribute_val_out,)e(int)j
(*flag\))75 388 y(typedef)f(int)g(MPI_Delete_function\(MPI_Handl)o(e)e
(*handle,)839 444 y(MPI_Handle_type)g(handle_type,)839
501 y(int)i(keyval,)839 557 y(void)g(*attribute_val,)f(void)h
(*extra_state\);)75 727 y(SUBROUTINE)f(COPY_FUNCTION\(HANDLE,)f
(HANDLE_TYPE,)i(KEYVAL,)g(EXTRA_STATE,)672 783 y(ATTRIBUTE_VAL_IN,)e
(ATTRIBUTE_VAL_OUT,)h(FLAG,)h(IERR\))75 840 y(INTEGER)g(HANDLE,)g
(HANDLE_TYPE,)f(KEYVAL,)h(EXTRA_STATE,)f(ATTRIBUTE_VAL_IN,)75
896 y(ATTRIBUTE_VAL_OUT,)f(IERR)75 1009 y(SUBROUTINE)h
(DELETE_FUNCTION\(HANDLE,)f(HANDLE_TYPE,)h(KEYVAL,)h(ATTRIBUTE_VAL,)719
1065 y(EXTRA_STATE,)g(IERR\))75 1122 y(INTEGER)g(HANDLE,)g
(HANDLE_TYPE,)f(KEYVAL,)h(ATTRIBUTE_VAL,)f(EXTRA_STATE,)g(IERR)75
1235 y(typedef)h(int)g(MPI::Copy_function\(MPI::Handl)o(e)e(*handle,)
791 1291 y(MPI::Handle_type)h(handle_type,)791 1348 y(int)h(keyval,)791
1404 y(void)g(*extra_state,)f(void)i(*attribute_val_in,)791
1461 y(void)f(*attribute_val_out,)e(int)j(*flag\))75
1574 y(typedef)f(int)g(MPI::Delete_function\(MPI::Han)o(dle)e(*handle,)
839 1630 y(MPI::Handle_type)g(handle_type,)839 1686 y(int)i(keyval,)839
1743 y(void)g(*attribute_val,)f(void)h(*extra_state\);)1875
1849 y Fn(?)16 b Fm(\(Sept\))166 1906 y Fr(The)c(follo)o(wing)h
(functions)g(are)e(similar)i(to)f(the)g(p)q(ervious)h(ones)f(for)f
(comm)o(unicators)h(but)g(w)o(ork)f(on)75 1962 y(all)16
b(allo)o(w)o(ed)g(handle)h(t)o(yp)q(es.)k(Th)o(us,)15
b(b)q(oth)h(the)g(old)g(functions)g(\()p Fl(MPI)p 1276
1962 14 2 v 16 w(A)l(TTR)p 1409 1962 V 17 w(PUT)p Fr(,)f
Fl(MPI)p 1627 1962 V 16 w(A)l(TTR)p 1760 1962 V 17 w(GET)p
Fr(,)75 2019 y(and)g Fl(MPI)p 248 2019 V 16 w(A)l(TTR)p
381 2019 V 17 w(DELETE)p Fr(\))g(and)g(the)h(new)f(functions)h(w)o(ork)
e(on)h(comm)o(unicators.)189 2125 y Fd(R)n(ationale.)46
b Fr(The)17 b(di\016cult)o(y)h(with)e(using)h(the)g(old)g(functions)g
(is)f(that)g(the)h(function)g(do)q(es)f(not)189 2181
y(kno)o(w)i(the)h(t)o(yp)q(e)g(of)g(handle)h(b)q(eing)g(passed.)32
b(Th)o(us,)19 b(new)g(functions)h(are)f(required.)32
b(\()p Fd(End)19 b(of)189 2238 y(r)n(ationale.)p Fr(\))1875
2299 y Fn(>)d Fm(\(Sept\))-32 46 y(1)-32 103 y(2)-32
159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32
441 y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40 667
y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40
949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119 y(20)-40
1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40
1853 y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40
2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248 y(40)-40
2304 y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40
2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699 y(48)p
eop
%%Page: 24 26
24 25 bop 75 -100 a Fr(24)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fl(MPI)p
160 49 14 2 v 16 w(HANDLE)p 355 49 V 16 w(A)l(TTR)p 488
49 V 18 w(PUT\(handle,)16 b(handle)p 888 49 V 17 w(t)o(yp)q(e,)g(k)o
(eyval,)f(attribute)p 1321 49 V 18 w(val\))117 126 y
Fi(IN)155 b Fl(handle)465 b Fi(handle)14 b(to)g(whic)o(h)f(attribute)i
(will)d(b)q(e)j(attac)o(hed)117 202 y(IN)155 b Fl(handle)p
443 202 V 18 w(t)o(yp)q(e)367 b Fi(t)o(yp)q(e)15 b(of)e
Fh(handle)117 277 y Fi(IN)155 b Fl(k)o(eyval)471 b Fi(k)o(ey)14
b(v)n(alue,)f(as)h(returned)h(b)o(y)f Fh(MPI)p 1453 277
13 2 v 14 w(KEYV)m(AL)p 1624 277 V 14 w(CREA)m(TE)117
352 y Fi(IN)155 b Fl(attribute)p 484 352 14 2 v 18 w(val)352
b Fi(attribute)15 b(v)n(alue)75 476 y Fg(int)23 b(MPI)p
245 476 15 2 v 17 w(Handle)p 406 476 V 17 w(attr)p 519
476 V 16 w(put\(MPI)p 703 476 V 16 w(Handle)g(*handle,)g(MPI)p
1173 476 V 17 w(Handle)p 1334 476 V 16 w(type)h(handle)p
1614 476 V 16 w(type,)f(int)393 533 y(keyval,)g(void)g(*attribute)p
946 533 V 16 w(val\))75 619 y(MPI)p 150 619 V 17 w(HANDLE)p
311 619 V 16 w(ATTR)p 423 619 V 17 w(PUT\(HANDLE,)f(HANDLE)p
870 619 V 16 w(TYPE,)i(KEYVAL,)f(ATTRIBUTE)p 1437 619
V 16 w(VAL\))170 676 y(INTEGER)g(HANDLE,)g(HANDLE)p 699
676 V 17 w(TYPE,)g(KEYVAL,)g(ATTRIBUTE)p 1266 676 V 16
w(VAL)75 762 y(int)g(MPI::Handle)p 437 762 V 16 w(attr)p
549 762 V 17 w(put\(MPI::HANDLE)f(*handle,)g(int)i(handle)p
1402 762 V 16 w(type,)f(int)h(keyval,)393 819 y(void)f(*attribute)p
755 819 V 16 w(val\))75 1000 y Fl(MPI)p 160 1000 14 2
v 16 w(HANDLE)p 355 1000 V 16 w(A)l(TTR)p 488 1000 V
18 w(GET\(handle,)16 b(handle)p 885 1000 V 17 w(t)o(yp)q(e,)g(k)o
(eyval,)f(attribute)p 1318 1000 V 18 w(val,)f(\015ag\))117
1077 y Fi(IN)155 b Fl(handle)465 b Fi(handle)14 b(to)g(whic)o(h)f
(attribute)i(is)f(attac)o(hed)g(\(handle\))117 1152 y(IN)155
b Fl(handle)p 443 1152 V 18 w(t)o(yp)q(e)367 b Fi(t)o(yp)q(e)15
b(of)e Fh(handle)117 1227 y Fi(IN)155 b Fl(k)o(eyval)471
b Fi(k)o(ey)14 b(v)n(alue)f(\(in)o(teger\))117 1302 y(OUT)108
b Fl(attribute)p 484 1302 V 18 w(val)352 b Fi(attribute)15
b(v)n(alue,)d(unless)j Fh(\015ag)f Fi(=)g(false)117 1377
y(OUT)108 b Fl(\015ag)518 b Fa(true)14 b Fi(if)h(an)f(attribute)i(v)n
(alue)e(w)o(as)h(extracted;)i Fa(false)d Fi(if)g(no)905
1434 y(attribute)h(is)e(asso)q(ciated)i(with)f(the)g(k)o(ey)75
1558 y Fg(int)23 b(MPI)p 245 1558 15 2 v 17 w(Handle)p
406 1558 V 17 w(attr)p 519 1558 V 16 w(get\(MPI)p 703
1558 V 16 w(Handle)g(*handle,)g(MPI)p 1173 1558 V 17
w(Handle)p 1334 1558 V 16 w(type)h(handle)p 1614 1558
V 16 w(type,)f(int)393 1615 y(keyval,)g(void)g(*attribute)p
946 1615 V 16 w(val,)h(int)f(*flag\))75 1701 y(MPI)p
150 1701 V 17 w(HANDLE)p 311 1701 V 16 w(ATTR)p 423 1701
V 17 w(GET\(HANDLE,)f(HANDLE)p 870 1701 V 16 w(TYPE,)i(KEYVAL,)f
(ATTRIBUTE)p 1437 1701 V 16 w(VAL,)g(FLAG\))170 1758
y(INTEGER)g(HANDLE,)g(HANDLE)p 699 1758 V 17 w(TYPE,)g(KEYVAL,)g
(ATTRIBUTE)p 1266 1758 V 16 w(VAL,)g(FLAG)75 1844 y(int)g(MPI::Handle)p
437 1844 V 16 w(attr)p 549 1844 V 17 w(get\(MPI::HANDLE)f(*handle,)g
(int)i(handle)p 1402 1844 V 16 w(type,)f(int)h(keyval,)393
1900 y(void)f(*attribute)p 755 1900 V 16 w(val,)h(int)f(*flag\))75
2081 y Fl(MPI)p 160 2081 14 2 v 16 w(HANDLE)p 355 2081
V 16 w(A)l(TTR)p 488 2081 V 18 w(DELETE\(handle,)15 b(handle)p
966 2081 V 18 w(t)o(yp)q(e,)h(k)o(eyval\))117 2159 y
Fi(IN)155 b Fl(handle)465 b Fi(handle)14 b(to)g(whic)o(h)f(attribute)i
(is)f(attac)o(hed)g(\(handle\))117 2234 y(IN)155 b Fl(handle)p
443 2234 V 18 w(t)o(yp)q(e)367 b Fi(t)o(yp)q(e)15 b(of)e
Fh(handle)117 2309 y Fi(IN)155 b Fl(k)o(eyval)471 b Fi(The)15
b(k)o(ey)e(v)n(alue)h(of)f(the)i(deleted)f(attribute)h(\(in)o(teger\))
75 2433 y Fg(int)23 b(MPI)p 245 2433 15 2 v 17 w(Handle)p
406 2433 V 17 w(attr)p 519 2433 V 16 w(delete\(MPI)p
775 2433 V 16 w(Handle)g(*handle,)g(MPI)p 1245 2433 V
17 w(Handle)p 1406 2433 V 16 w(type)g(handle)p 1685 2433
V 17 w(type,)393 2490 y(int)h(keyval\))75 2576 y(MPI)p
150 2576 V 17 w(HANDLE)p 311 2576 V 16 w(ATTR)p 423 2576
V 17 w(DELETE\(HANDLE,)e(HANDLE)p 942 2576 V 16 w(TYPE,)h(KEYVAL\))170
2633 y(INTEGER)g(HANDLE,)g(HANDLE)p 699 2633 V 17 w(TYPE,)g(KEYVAL)1967
46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 25 27
25 26 bop 75 -100 a Fk(6.7.)34 b(CA)o(CHING)15 b(ON)h(MPI)f(HANDLES)
1005 b Fr(25)75 49 y Fg(int)23 b(MPI::Handle)p 437 49
15 2 v 16 w(attr)p 549 49 V 17 w(delete\(MPI::HANDLE)e(*handle,)i(int)g
(handle)p 1473 49 V 17 w(type,)g(int)393 106 y(keyval\))1875
146 y Fn(?)16 b Fm(\(Sept\))166 192 y Fr(The)10 b(argumen)o(t)g
Fl(handle)p 578 192 14 2 v 17 w(t)o(yp)q(e)i Fr(m)o(ust)d(b)q(e)i
Fh(MPI)p 925 192 13 2 v 14 w(HANDLE)p 1102 192 V 16 w(COMM)p
Fr(,)e Fh(MPI)p 1345 192 V 15 w(HANDLE)p 1523 192 V 15
w(D)o(A)m(T)m(A)m(TYPE)p Fr(,)e Fh(MPI)p 1845 192 V 15
w(HANDLE)p 2023 192 V 15 w(GROUP)p Fr(,)75 249 y Fh(MPI)p
152 249 V 14 w(HANDLE)p 329 249 V 16 w(PREQUEST)p Fr(,)16
b(or)i Fh(MPI)p 723 249 V 15 w(HANDLE)p 901 249 V 15
w(FILE)g Fr(if)h(the)g Fl(handle)g Fr(is)g(a)f(comm)o(unicator,)h
(datat)o(yp)q(e,)75 305 y(group,)c(p)q(ersisten)o(t)g(request,)g(or)g
(\014le,)h(resp)q(ectiv)o(ely)l(.)898 b Fn(>)16 b Fm(\(Sept\))189
396 y Fd(A)n(dvic)n(e)h(to)i(users.)55 b Fr(The)18 b(cac)o(hing)g
(capabilit)o(y)h(on)e(comm)o(unicators)h(in)g Fl(MPI-1)f
Fr(has)h(the)f(same)189 453 y(functionalit)o(y)12 b(as)e(the)h
(capabilit)o(y)i(presen)o(ted)e(here.)19 b(The)11 b(only)h
(di\013erence)g(here)f(is)h(that)e Fl(handle)i Fr(is)189
509 y(of)g(t)o(yp)q(e)g Fh(MPI)p 414 509 V 14 w(Handle)i
Fr(and)f Fl(handle)p 770 509 14 2 v 18 w(t)o(yp)q(e)g
Fr(is)g(the)f(second)h(argumen)o(t.)19 b(Old)13 b(calls)h(can)e(b)q(e)h
(con)o(v)o(erted)189 566 y(to)j(the)i(new)f(calls)h(b)o(y)g(adding)g
(adding)g(the)f(second)h(argumen)o(t)e(whic)o(h)i(is)g
Fl(handle)p 1632 566 V 18 w(t)o(yp)q(e)p Fr(.)27 b(Users)189
622 y(are)15 b(encouraged)g(the)g(use)h(the)f(new)h(calls)g(in)g(the)f
(future.)20 b(\()p Fd(End)c(of)g(advic)n(e)g(to)h(users.)p
Fr(\))166 754 y Ff(Missing:)166 804 y Fi(It)d(has)g(b)q(een)i(noted)e
(that)h(ha)o(ving)e(4)h(vs)g(8)g(b)o(yte)g(k)o(eyv)n(als)g(has)g(b)q
(een)i(a)d(problem.)18 b(Do)c(w)o(e)g(w)o(an)o(t)g(to)g(\014x)g(this)75
854 y(in)f(the)i(new)f(calls?)k(This)c(w)o(ould)f(mak)o(e)f(the)j
(calls)e(di\013eren)o(t)i(in)e(a)h(new)g(w)o(a)o(y)m(.)1875
909 y Fn(?)i Fm(\(Sept\))75 1020 y Fj(6.7.2)49 b(Example)75
1106 y Fr(An)17 b(example)h(of)f(ho)o(w)g(one)g(migh)o(t)g(use)g(these)
g(cac)o(hing)h(functions)g(to)f(cac)o(he)g(the)g(deco)q(ded)h(datat)o
(yp)q(e)75 1162 y(information)d(on)g(the)h(datat)o(yp)q(e.)75
1254 y Fg(int)23 b(datatype_keyval;)75 1367 y(/*)h(library)e
(initialization)g(function.)47 b(MUST)23 b(be)h(called)f(before)g(the)g
(library)75 1423 y(is)h(used)f(*/)75 1479 y(lib_init\(int)f
(*datatype_keyval\))75 1536 y({)147 1592 y(MPI_Keyval_create\(MPI_N)o
(ULL_COP)o(Y_FN,)f(MPI_NULL_DEL_FN,)g(datatype_keyval,)h(NULL\);)75
1649 y(})75 1818 y(/*)i(the)f(library)g(*/)75 1875 y(lib\(MPI_DATATYPE)
f(datatype,)g(int)i(datatype_keyval\))75 1931 y({)147
1988 y(char)f(datatype_char[1024];)147 2044 y(int)g(flag;)147
2157 y(MPI_Attr_get\(datatype,)d(MPI_HANDLE_DATATYPE,)i
(datatype_keyval,)f(datatype_char,)h(flag\);)147 2213
y(if)h(\(!flag\))g({)218 2270 y(/*)h(get)f(datatype)g(and)g(cache)h
(for)f(later)g(use)h(*/)218 2326 y(MPI_Get_char_data_type\(data)o
(type,)d(datatype_char\);)218 2383 y(MPI_Attr_put\(datatype,)g
(MPI_HANDLE_DATATYPE,)g(datatype_keyval,)h(datatype_char\))147
2439 y(})147 2552 y(/*)h(use)h(datatype_char)e(*/)75
2665 y(})1875 2704 y Fn(>)16 b Fm(\(Sept\))-32 46 y(1)-32
103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32
385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40 611
y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40
1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40
1345 y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40
1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740 y(31)-40
1796 y(32)-40 1853 y(33)-40 1909 y(34)-40 1966 y(35)-40
2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191 y(39)-40
2248 y(40)-40 2304 y(41)-40 2361 y(42)-40 2417 y(43)-40
2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643 y(47)-40
2699 y(48)p eop
%%Page: 26 28
26 27 bop 75 -100 a Fr(26)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fo(6.8)59
b(Identifying)19 b(Requests)75 151 y Fr(The)f(cac)o(hing)h(capabilit)o
(y)h(can)e(only)g(b)q(e)h(used)g(on)f(p)q(ersisten)o(t)g(requests.)29
b(Th)o(us,)18 b(it)g(is)h(imp)q(ortan)o(t)f(to)75 207
y(kno)o(w)d(whether)h(a)g(giv)o(en)g(request)g(is)g(p)q(ersisten)o(t)g
(or)f(not.)22 b(It)15 b(ma)o(y)h(b)q(e)g(desirable)h(to)e(kno)o(w)h
(what)f(t)o(yp)q(e)75 264 y(a)g(request)g(is)h(in)g(general.)k(This)c
(can)f(b)q(e)h(done)g(with)f(the)h(follo)o(wing)g(function:)75
415 y Fl(MPI)p 160 415 14 2 v 16 w(REQUEST)p 379 415
V 18 w(TYPE\(request,)g(t)o(yp)q(e)p 776 415 V 18 w(req\))117
492 y Fi(IN)155 b Fl(request)452 b Fi(request)117 567
y(OUT)108 b Fl(t)o(yp)q(e)p 401 567 V 18 w(req)430 b
Fi(t)o(yp)q(e)15 b(of)e(request)75 691 y Fg(int)23 b(MPI)p
245 691 15 2 v 17 w(Request)p 430 691 V 16 w(type\(MPI)p
638 691 V 17 w(Request)f(request,)h(MPI)p 1132 691 V
17 w(Type)p 1245 691 V 17 w(request)g(type)p 1549 691
V 16 w(req\))75 778 y(MPI)p 150 778 V 17 w(REQUEST)p
335 778 V 16 w(TYPE\(REQUEST,)f(TYPE)p 781 778 V 17 w(REQ\))170
834 y(INTEGER)h(REQUEST,)g(TYPE)p 675 834 V 17 w(REQ)75
921 y(int)g(MPI::Request)p 461 921 V 16 w(type\(MPI::Request)f
(request,)g(MPI::Type)p 1337 921 V 16 w(request)h(type)p
1640 921 V 17 w(req\))166 1007 y Fr(This)11 b(routine)f(returns)g
Fh(MPI)p 645 1007 13 2 v 15 w(REQUEST)p 848 1007 V 13
w(PERSIST)m(ANT)p Fr(,)f Fh(MPI)p 1205 1007 V 14 w(REQUEST)p
1407 1007 V 14 w(GENERALIZED)p Fr(,)g Fh(MPI)p 1794 1007
V 14 w(REQUEST)p 1996 1007 V 14 w(PT2PT)p Fr(,)75 1064
y(or)k Fh(MPI)p 206 1064 V 14 w(REQUEST)p 408 1064 V
14 w(OTHER)g Fr(if)h(the)f(request)g(is)h(p)q(ersistan)o(t,)f
(generalized,)j(p)q(oin)o(t-to-p)q(oin)o(t)e(\(send,)f(recv,)75
1120 y(send/recv\),)i(or)g(other)g(form)f(of)h(request,)g(resp)q(ectiv)
o(ely)l(.)166 1217 y Ff(Discussion:)166 1267 y Fi(Do)e(w)o(e)h(w)o(an)o
(t)g(to)g(return)h(all)d(the)j(t)o(yp)q(es)g(of)e(requests?)-117
1322 y Fn(?)i Fm(\(Sept\))-117 1381 y Fn(>)g Fm(\(Sept\))75
1457 y Fo(6.9)59 b(Naming)20 b(Objects)75 1559 y Fr(There)c(are)g(man)o
(y)g(o)q(ccasions)h(on)f(whic)o(h)h(it)g(w)o(ould)f(b)q(e)h(useful)h
(to)d(allo)o(w)i(a)f(user)g(to)g(asso)q(ciate)g(a)g(prin)o(t)75
1615 y(name)f(with)h(an)f Fl(MPI)g Fr(comm)o(unicator)g(or)g(other)g
(handle,)h(for)e(instance)j(error)d(rep)q(orting,)h(debugging,)75
1672 y(pro\014ling,)h(and)f(so)g(on.)20 b(This)c(ob)s(jectiv)o(e)f(can)
g(b)q(e)h(ac)o(hiev)o(ed)g(using)g(the)g(follo)o(wing)f(t)o(w)o(o)f
(functions)75 1823 y Fl(MPI)p 160 1823 14 2 v 16 w(HANDLE)p
355 1823 V 16 w(NAME)p 500 1823 V 17 w(PUT)i(\(handle,)f(handlet)o(yp)q
(e,)j(name\))117 1900 y Fi(IN)155 b Fl(handle)465 b Fi(The)15
b(handle)e(whose)i(name)d(is)i(to)g(b)q(e)g(set)117 1975
y(IN)155 b Fl(handlet)o(yp)q(e)385 b Fi(The)15 b(t)o(yp)q(e)f(of)f(the)
i(handle)e(argumen)o(t)117 2050 y(IN)155 b Fl(name)485
b Fi(The)11 b(c)o(haracter)g(string)g(whic)o(h)f(is)f(remem)o(b)q(ered)
h(as)g(the)h(name)75 2175 y Fg(int)23 b(MPI)p 245 2175
15 2 v 17 w(Handle)p 406 2175 V 17 w(name)p 519 2175
V 16 w(put\(MPI)p 703 2175 V 16 w(Handle)g(handle,)g(MPI)p
1149 2175 V 17 w(Handle)p 1310 2175 V 17 w(type)g(handle)p
1590 2175 V 16 w(type,)g(char)393 2231 y(*name\))75 2318
y(MPI)p 150 2318 V 17 w(HANDLE)p 311 2318 V 16 w(NAME)p
423 2318 V 17 w(PUT\(HANDLE,)f(HANDLE)p 870 2318 V 16
w(TYPE,)i(NAME,)f(IERR\))170 2374 y(INTEGER)g(HANDLE,)g(HANDLE)p
699 2374 V 17 w(TYPE)170 2431 y(CHARACTER*\(*\))g(NAME)170
2487 y(INTEGER)g(IERR)75 2573 y(int)g(MPI::Handle)p 437
2573 V 16 w(name)p 549 2573 V 17 w(put\(MPI::Handle)p
926 2573 V 15 w(type)g(handle,)g(MPI::Handle)p 1515 2573
V 16 w(enum)393 2630 y(handle)p 540 2630 V 17 w(type,)g(char)g(*name\))
1967 46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 27 29
27 28 bop 75 -100 a Fk(6.9.)34 b(NAMING)15 b(OBJECTS)1226
b Fr(27)75 49 y Fl(MPI)p 160 49 14 2 v 16 w(HANDLE)p
355 49 V 16 w(NAME)p 500 49 V 17 w(GET)16 b(\(handle,)g(handlet)o(yp)q
(e,)h(name\))117 126 y Fi(IN)155 b Fl(handle)465 b Fi(The)15
b(handle)e(whose)i(name)d(is)i(to)g(b)q(e)g(returned)117
202 y(IN)155 b Fl(handlet)o(yp)q(e)385 b Fi(The)15 b(t)o(yp)q(e)f(of)f
(the)i(handle)e(argumen)o(t)117 277 y(IN)155 b Fl(name)485
b Fi(The)17 b(name)e(previously)h(stored)h(on)g(the)f(handle,)h(or)f(a)
g(n)o(ull)905 333 y(string)e(if)f(no)h(suc)o(h)h(name)d(exists)75
458 y Fg(int)23 b(MPI)p 245 458 15 2 v 17 w(Handle)p
406 458 V 17 w(name)p 519 458 V 16 w(get\(MPI)p 703 458
V 16 w(Handle)g(handle,)g(MPI)p 1149 458 V 17 w(Handle)p
1310 458 V 17 w(type)g(handle)p 1590 458 V 16 w(type,)g(char)393
514 y(**name\))75 601 y(MPI)p 150 601 V 17 w(HANDLE)p
311 601 V 16 w(NAME)p 423 601 V 17 w(GET\(HANDLE,)f(HANDLE)p
870 601 V 16 w(TYPE,)i(NAME,)f(IERR\))170 657 y(INTEGER)g(HANDLE,)g
(HANDLE)p 699 657 V 17 w(TYPE)170 713 y(CHARACTER*\(*\))g(NAME)170
770 y(INTEGER)g(IERR)75 856 y(int)g(MPI::Handle)p 437
856 V 16 w(name)p 549 856 V 17 w(get\(MPI::Handle)p 926
856 V 15 w(type)g(handle,)g(MPI::Handle)p 1515 856 V
16 w(enum)393 913 y(handle)p 540 913 V 17 w(type,)g(char)g(**name\))166
999 y Fr(MPI)p 258 999 14 2 v 16 w(HANDLE)p 470 999 V
17 w(NAME)p 628 999 V 16 w(PUT)18 b(allo)o(ws)g(a)g(user)g(to)f(asso)q
(ciate)h(a)g(name)g(string)g(with)g(a)g(handle.)75 1056
y(The)g(c)o(haracter)f(string)h(whic)o(h)h(is)g(passed)f(to)f(MPI)p
983 1056 V 17 w(HANDLE)p 1196 1056 V 16 w(NAME)p 1353
1056 V 17 w(PUT)g(will)j(b)q(e)f(sa)o(v)o(ed)e(inside)75
1112 y(the)h(MPI)f(library)h(\(so)f(can)h(b)q(e)g(freed)g(b)o(y)g(the)f
(caller)i(immediately)g(after)e(the)h(call,)g(or)f(allo)q(cated)i(on)75
1169 y(the)c(stac)o(k\).)166 1225 y(MPI)p 258 1225 V
16 w(HANDLE)p 470 1225 V 17 w(NAME)p 628 1225 V 16 w(GET)h(returns)g
(an)o(y)h(name)f(whic)o(h)i(had)e(previously)i(b)q(een)g(asso)q(ciated)
75 1282 y(with)i(the)g(giv)o(en)g(handle.)35 b(\(Note)19
b(that)g(in)i(the)f(C)f(binding)j(it)e(returns)f(a)h(p)q(oin)o(ter)g
(to)f(the)h(in)o(ternal)75 1338 y(cop)o(y)14 b(of)f(the)h(name,)g(whic)
o(h)g(should)h(not)f(b)q(e)g(mo)q(di\014ed)h(b)o(y)f(the)g(user,)g(and)
g(whic)o(h)h(will)g(b)q(ecome)g(in)o(v)m(alid)75 1394
y(should)g(the)f(name)g(b)q(e)h(altered)f(\(e.g.)19 b(b)o(y)14
b(another)f(call)i(to)f(MPI)p 1188 1394 V 16 w(HANDLE)p
1400 1394 V 17 w(NAME)p 1558 1394 V 16 w(PUT,)f(or)h(b)o(y)g(the)75
1451 y(handle)i(b)q(eing)h(deleted\).)166 1507 y(If)10
b(the)h(user)f(has)g(not)g(asso)q(ciated)g(a)g(name)g(with)g(a)g
(handle,)i(or)e(an)g(error)f(o)q(ccurs,)j(MPI)p 1626
1507 V 16 w(HANDLE)p 1838 1507 V 17 w(NAME)p 1996 1507
V 16 w(GET)75 1564 y(will)k(return)f(a)f(n)o(ull)i(string)e(\(all)h
(spaces)g(in)g(F)l(ortran,)e Fg("")h Fr(in)i(C\),)d(or,)h(if)h(the)f
(handle)i(refers)e(to)g(a)g(system)75 1620 y(created)c(handle)i(suc)o
(h)e(as)g(MPI)p 611 1620 V 16 w(COMM)p 779 1620 V 16
w(W)o(ORLD,)g(a)g(suitable)h(prin)o(t)g(string)f(\(e.g.)17
b Fg("MPI)p 1624 1620 15 2 v 17 w(COMM)p 1737 1620 V
17 w(WORLD")p Fr(\).)75 1677 y(Similarly)l(,)f(an)e(implemen)o(tation)h
(could)g(c)o(ho)q(ose)f(to)f(set)g(the)h(name)g(on)g(an)g(MPI)p
1460 1677 14 2 v 16 w(FILE)g(handle)h(to)f(that)75 1733
y(of)i(the)g(\014le)h(whic)o(h)g(w)o(as)f(op)q(ened)h(on)f(the)g
(handle.)24 b(The)17 b(fact)e(that)h(the)g(system)g(ma)o(y)f(ha)o(v)o
(e)h(c)o(hosen)h(to)75 1790 y(giv)o(e)d(a)g(default)g(name)g(to)g(a)f
(handle)j(do)q(es)e(not)f(prev)o(en)o(t)h(the)g(user)g(from)g(setting)g
(a)f(name)h(on)g(the)g(same)75 1846 y(handle,)i(doing)g(this)f(remo)o
(v)o(es)g(the)g(old)h(name)f(and)g(assigns)h(the)f(new)g(one.)189
1952 y Fd(R)n(ationale.)73 b Fr(W)l(e)20 b(pro)o(vide)i(separate)e
(functions)h(for)f(setting)h(and)g(getting)g(the)f(name)h(of)f(a)189
2009 y(handle,)j(rather)d(than)h(simply)i(pro)o(viding)f(a)e
(pre-de\014ned)j(attribute)e(k)o(ey)g(for)f(the)h(follo)o(wing)189
2065 y(reasons)243 2159 y Fn(\017)i Fr(It)15 b(is)h(not)e(in)i(general)
g(p)q(ossible)h(to)e(store)f(a)h(string)g(as)g(an)g(attribute)g(from)g
(F)l(ortran.)243 2232 y Fn(\017)23 b Fr(It)12 b(is)g(not)g(easy)g(to)g
(set)g(up)g(the)g(delete)i(function)f(for)e(a)h(string)g(attribute)g
(unless)h(it)g(is)f(kno)o(wn)289 2289 y(to)i(ha)o(v)o(e)h(b)q(een)h
(allo)q(cated)g(in)h(the)e(heap.)243 2362 y Fn(\017)23
b Fr(T)l(o)15 b(mak)o(e)h(the)g(attribute)f(k)o(ey)h(useful)h
(additional)g(co)q(de)g(to)e(call)i Fg(strdup)e Fr(is)h(necessary)l(.)
23 b(If)289 2418 y(this)14 b(is)g(not)g(standardised)g(then)h(users)f
(ha)o(v)o(e)f(to)g(write)h(it.)20 b(This)15 b(is)f(extra)f(unneeded)j
(w)o(ork)289 2475 y(whic)o(h)g(w)o(e)f(can)g(easily)h(eliminate.)243
2548 y Fn(\017)23 b Fr(The)f(F)l(ortran)g(binding)i(is)f(not)f(trivial)
h(to)f(write)h(\(it)f(will)i(dep)q(end)g(on)e(details)i(of)e(the)289
2604 y(F)l(ortran)12 b(compilation)j(system\),)e(and)g(will)j(not)d(b)q
(e)h(p)q(ortable.)20 b(Therefore)13 b(it)h(should)h(b)q(e)f(in)289
2661 y(the)h(library)h(rather)f(than)g(in)h(user)f(co)q(de.)-32
46 y Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272
y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780
y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006
y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457
y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909
y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587
y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 28 30
28 29 bop 75 -100 a Fr(28)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)189 49 y Fr(\()p
Fd(End)15 b(of)i(r)n(ationale.)p Fr(\))189 156 y Fd(A)n(dvic)n(e)d(to)h
(users.)39 b Fr(The)15 b(ab)q(o)o(v)o(e)e(de\014nition)j(means)e(that)f
(it)h(is)h(safe)e(simply)i(to)f(prin)o(t)g(the)g(string)189
212 y(returned)j(b)o(y)g(MPI)p 532 212 14 2 v 16 w(HANDLE)p
744 212 V 17 w(NAME)p 902 212 V 16 w(GET,)f(as)g(it)i(is)f(alw)o(a)o
(ys)f(a)h(v)m(alid)h(string)f(ev)o(en)g(if)h(there)189
268 y(w)o(as)c(no)h(name.)189 344 y(Note)20 b(that)h(asso)q(ciating)g
(a)g(name)g(with)g(a)g(handle)h(has)f(no)g(e\013ect)g(on)g(the)g(seman)
o(tics)g(of)g(an)189 400 y Fl(MPI)15 b Fr(program,)f(and)h(will)i
(\(necessarily\))g(marginally)f(increase)g(the)g(store)f(requiremen)o
(t)h(of)f(the)189 456 y(program,)9 b(since)j(the)e(names)h(m)o(ust)f(b)
q(e)h(sa)o(v)o(ed.)17 b(Therefore)11 b(there)f(is)h(no)f(requiremen)o
(t)h(that)f(names)189 513 y(b)q(e)17 b(asso)q(ciated)f(with)h(handles.)
25 b(Ho)o(w)o(ev)o(er)15 b(debugging)i(and)g(pro\014ling)g(MPI)g
(applications)h(ma)o(y)189 569 y(b)q(e)e(made)g(easier)g(if)g(names)f
(are)g(asso)q(ciated)h(with)g(comm)o(unicators)f(and)h(other)f
(handles,)i(since)189 626 y(the)g(debugger)g(or)f(pro\014ler)i(should)f
(then)h(b)q(e)f(able)h(to)e(presen)o(t)h(information)g(in)g(a)g(less)g
(cryptic)189 682 y(manner.)j(\()p Fd(End)15 b(of)i(advic)n(e)f(to)g
(users.)p Fr(\))-117 743 y Fn(?)f Fm(\(Sept\))75 875
y Fo(6.10)60 b(Allo)n(wing)19 b(User)g(Erro)n(rs)75 977
y Fr(On)f(o)q(ccasion,)g(users)f(wish)h(to)f(write)g(la)o(y)o(ered)h
(MPI)f(pro)q(ducts.)26 b(This)18 b(happ)q(ens)h(when)e(the)h
(pro\014ling)75 1033 y(in)o(terface)f(is)h(used)g(and)f(MPI-IO)h(w)o
(ould)f(also)h(lik)o(e)g(for)e(third)i(part)o(y)e(I/O)i(libraries)g(to)
f(b)q(e)h(a)o(v)m(ailable.)75 1090 y(T)l(o)g(b)q(e)h(able)g(to)f(do)g
(this)h(it)g(is)g(necessary)f(to)g(b)q(e)h(able)g(to)f(raise)g(the)h
(error)f(handler)h(from)f(a)g(la)o(y)o(ered)75 1146 y(library)l(.)35
b(It)20 b(is)h(also)f(p)q(oten)o(tially)h(necessary)g(to)e(b)q(e)i
(able)g(to)e(execute)i(clean-up)g(co)q(de)g(immedately)75
1203 y(b)q(efore)13 b(MPI)p 301 1203 V 17 w(Finalize)h(executes.)20
b(Belo)o(w)13 b(is)h(a)f(prop)q(osal)g(to)f(allo)o(w)h(the)g(raising)h
(of)f(error)f(handlers)i(and)75 1259 y(a)h(prop)q(osal)g(to)g(allo)o(w)
g(the)h(attac)o(hmen)o(t)e(of)g(\014nalize)j(co)q(de.)75
1410 y Fl(MPI)p 160 1410 V 16 w(RAISE)p 300 1410 V 17
w(ERROR)p 464 1410 V 18 w(Handler)f(\(Comm,)c(Erro)o(rCo)q(de\))117
1487 y Fi(IN)155 b Fl(Comm)461 b Fi(Comm)o(unicator)11
b(that)j(scop)q(es)h(the)g(relev)n(an)o(t)f(error)g(handler)117
1562 y(IN)155 b Fl(Erro)o(rCo)q(de)394 b Fi(MPI)14 b(Error)h(Status)75
1687 y Fg(int)23 b(MPI)p 245 1687 15 2 v 17 w(Raise)p
382 1687 V 17 w(error)p 519 1687 V 16 w(handler\(MPI)p
799 1687 V 16 w(Comm)g(Comm,)g(int)h(ErrorCode\))75 1773
y(MPI)p 150 1773 V 17 w(RAISE)p 287 1773 V 16 w(ERROR)p
423 1773 V 17 w(HANDLER\(COMM,)e(ERROR)p 894 1773 V 16
w(CODE,)i(IERROR\))170 1830 y(INTEGER)f(COMM,)h(ERROR)p
628 1830 V 16 w(CODE,)f(IERROR)75 1916 y(int)g(MPI::Raise)p
413 1916 V 16 w(error)p 549 1916 V 17 w(handler\(MPI::Comm)e(Comm,)i
(int)h(ErrorCode\))166 2003 y Fr(This)18 b(function)g(in)o(v)o(ok)o(es)
f(the)h(error)f(handler)h(assigned)g(to)f(the)g(comm)o(unicator)g(with)
h(the)g(error)75 2059 y(co)q(de)11 b(supplied.)20 b(If)11
b(the)f(error)f(handler)j(do)q(es)e(not)g(ab)q(ort)f(the)i(MPI)f(pro)q
(cess,)h(MPI)p 1472 2059 14 2 v 16 w(RAISE)p 1627 2059
V 18 w(ERR)o(OR)p 1809 2059 V 17 w(HANDLER)75 2116 y(will)h(return)e
(with)g(its)h(error)e(status)g(equal)i(to)f(the)g(input)h(error)f(co)q
(de)g(\(unless)h(MPI)p 1482 2116 V 17 w(RAISE)p 1638
2116 V 17 w(ERR)o(OR)p 1819 2116 V 18 w(HANDLER)75 2172
y(itself)16 b(encoun)o(tered)g(an)f(error\).)k(Belo)o(w)c(is)h(a)f
(sample)h(usage:)99 2278 y Fg(ptr)23 b(=)h(malloc\(32\);)99
2335 y(if)f(\(ptr)h(==)f(NULL\))147 2391 y(return)g
(\(MPI_Raise_error_handle)o(r)e(\(Comm,)i(MPI_ERR_SYSRESOURCE\)\);)166
2538 y Ff(Discussion:)31 b Fi(There)13 b(are)e(some)g(unclear)g(issues)
i(regarding)e(error)h(handlers)g(in)f(general,)g(this)g(discussion)75
2588 y(b)q(elongs)j(in)f(either)i(dynamic,)d(misc,)g(external,)i(or)g
(the)g(committee)e(as)i(a)g(whole.)166 2638 y(1\))h(Is)h(ERR)o(ORS)p
442 2638 13 2 v 14 w(ARE)p 546 2638 V 15 w(F)-5 b(A)m(T)m(AL)15
b(lo)q(cal)g(or)g(do)q(es)h(the)g(ab)q(ort)g(reac)o(h)g(across)h(an)e
(in)o(tercomm?)20 b(The)c(MPI-1)75 2687 y(standard)c(talks)f(ab)q(out)g
(the)g(ERR)o(ORS)p 705 2687 V 15 w(ARE)p 810 2687 V 14
w(F)-5 b(A)m(T)m(AL)11 b(error)h(handler)g(ha)o(ving)e(the)i(same)e
(e\013ect)j(as)e(MPI)p 1753 2687 V 15 w(Ab)q(ort)1967
46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 29 31
29 30 bop 75 -100 a Fk(6.11.)34 b(ALLO)o(WING)16 b(USER)g(FUNCTIONS)f
(A)l(T)h Fl(MPI)p 1069 -100 14 2 v 16 w(FINALIZE)554
b Fr(29)75 49 y Fi(\(MPI)p 174 49 13 2 v 15 w(COMM)p
327 49 V 16 w(W)o(ORLD,)18 b(ErrorCo)q(de\),)k(with)d(dynamic)f(pro)q
(cesses)k(w)o(e)e(no)f(longer)g(ha)o(v)o(e)h(an)f(all)f(inclusiv)o(e)75
99 y(MPI)p 158 99 V 15 w(COMM)p 311 99 V 16 w(W)o(ORLD.)9
b(W)m(e)h(simply)f(need)j(to)f(express)i(the)e(in)o(ten)o(t)g(of)f(the)
i(ERR)o(ORS)p 1466 99 V 14 w(ARE)p 1570 99 V 15 w(F)-5
b(A)m(T)m(AL)10 b(handler.)75 149 y(It)i(w)o(ould)e(b)q(e)j(nice)f(if)e
(the)j(ERR)o(ORS)p 656 149 V 14 w(ARE)p 760 149 V 15
w(F)-5 b(A)m(T)m(AL)11 b(handler)h(didn't)f(ab)q(ort)g(pro)q(cesses)j
(that)e(w)o(ere)h(indep)q(enden)o(t)75 199 y(and)h(w)o(ere)h(attac)o
(hed.)166 255 y(2\))f(Related:)k(do)q(es)d(MPI)p 563
255 V 15 w(Ab)q(ort)g(\(In)o(terComm,)c(0\))j(ab)q(ort)g(the)h(serv)o
(er)h(\(whic)o(h)e(hop)q(es)h(to)f(b)q(e)g(p)q(ersisten)o(t\)?)1875
359 y Fn(>)i Fm(\(Sept\))75 502 y Fo(6.11)60 b(Allo)n(wing)19
b(User)g(F)n(unctions)i(at)f(MPI)p 1022 502 18 2 v 21
w(FINALIZE)75 604 y Fr(There)14 b(are)f(times)h(in)g(whic)o(h)h(it)f(w)
o(ould)g(b)q(e)g(con)o(v)o(enien)o(t)g(to)f(ha)o(v)o(e)g(actions)h
(happ)q(en)h(when)f Fl(MPI)f Fr(\014nishes.)75 660 y(F)l(or)i(example,)
h(a)f(routine)g(ma)o(y)g(do)g(initializations)k(that)14
b(are)h(useful)i(un)o(til)f(the)f(complete)i Fl(MPI)d
Fr(job)h(is)75 716 y(\014nished.)20 b(This)11 b(can)f(b)q(e)h
(accomplished)h(in)f Fl(MPI-2)f Fr(b)o(y)g(attac)o(hing)g(an)g
(attribute)g(to)g Fh(MPI)p 1570 716 13 2 v 14 w(COMM)p
1714 716 V 15 w(W)o(ORLD)75 773 y Fr(with)18 b(a)f(callbac)o(k)i
(function.)28 b(When)18 b Fl(MPI)p 821 773 14 2 v 16
w(FINALIZE)f Fr(is)h(called,)i(it)e(will)h(execute)f(the)g(equiv)m
(alen)o(t)h(of)75 829 y(an)e Fl(MPI)p 225 829 V 16 w(COMM)p
383 829 V 16 w(FREE)h Fr(on)f Fh(MPI)p 665 829 13 2 v
14 w(COMM)p 809 829 V 15 w(W)o(ORLD)p Fr(.)g(This)g(will)i(cause)e(the)
h(callbac)o(k)g(functions)g(to)e(b)q(e)75 886 y(activ)m(ated.)27
b(T)l(o)17 b(allo)o(w)h(for)f(clean)i(la)o(y)o(ering)e(of)g(callbac)o
(ks,)i Fl(MPI)e Fr(will)i(call)g(the)e(callbac)o(k)i(functions)f(in)75
942 y(the)d(rev)o(erse)g(order)g(to)g(whic)o(h)h(they)f(w)o(ere)g
(attac)o(hed.)189 1049 y Fd(A)n(dvic)n(e)d(to)h(implementors.)38
b Fr(Since)13 b(attributes)f(can)g(b)q(e)g(added)g(from)f(an)o(y)h
(supp)q(orted)g(language,)189 1105 y(the)22 b Fl(MPI)g
Fr(implemen)o(tation)i(needs)g(to)e(remem)o(b)q(er)h(the)g(creating)f
(language)h(so)g(the)f(correct)189 1161 y(callbac)o(k)16
b(is)g(made.)j(\()p Fd(End)d(of)g(advic)n(e)h(to)f(implementors.)p
Fr(\))166 1268 y Fb(This)21 b(w)o(ould)h(b)q(ecome)f(a)g
(clari\014cation)j(in)e Fl(MPI-1.1)d Fb(if)j(accepted.)30
b Fr(Callbac)o(k)19 b(functions)75 1324 y(on)e(comm)o(unicators)f(are)h
(alw)o(a)o(ys)f(called)i(in)g(the)f(rev)o(erse)f(order)h(to)f(whic)o(h)
i(they)f(w)o(ere)f(added)i(to)e(the)75 1381 y(comm)o(unicator.)1505
b Fn(?)16 b Fm(\(Sept\))75 1524 y Fo(6.12)60 b(MPI)19
b(and)h(Threads)75 1625 y Fr(This)f(section)f(sp)q(eci\014es)i(the)e
(in)o(teraction)g(b)q(et)o(w)o(een)g(MPI)g(calls)h(and)f(P)o(osix)g
(threads.)28 b(MPI)18 b(ma)o(y)f(b)q(e)75 1682 y(implemen)o(ted)g(in)g
(en)o(vironmen)o(ts)f(where)g(threads)f(are)h(not)f(supp)q(orted,)h(or)
f(p)q(erform)g(p)q(o)q(orly)l(.)23 b(There-)75 1738 y(fore,)c(it)h(is)g
(not)f(required)h(that)e(all)j(MPI)e(implemen)o(tations)h(b)q(eha)o(v)o
(e)g(as)f(sp)q(eci\014ed)i(in)f(this)g(section.)75 1795
y(The)15 b(requiremen)o(ts)h(here)g(apply)g(to)e Fb(thread-complian)o
(t)k Fr(implemen)o(tations.)166 1898 y Ff(Discussion:)42
b Fi(The)17 b(design)f(is)g(lik)o(ely)e(to)i(b)q(e)h(compatible)d(with)
i(non)g(P)o(osix)f(thread)i(pac)o(k)n(ages)f(as)g(w)o(ell,)75
1955 y(but)e(I)g(ha)o(v)o(e)g(not)f(c)o(hec)o(k)o(ed)j(NT)e(threads)h
(or)e(threads)i(on)f(other)g(systems.)75 2124 y Fj(6.12.1)49
b(General)75 2210 y Fr(A)15 b(prede\014ned)i(attribute)f(k)o(ey)f
Fh(MPI)p 696 2210 V 14 w(THREADS)h Fr(is)f(asso)q(ciated)h(with)g
Fl(MPI)p 1365 2210 14 2 v 16 w(COMM)p 1523 2210 V 16
w(W)o(ORLD)p Fr(.)f(The)g(at-)75 2266 y(tribute)h(is)f(set)g(if)h(the)f
(implmen)o(tation)i(is)e(thread)g(complian)o(t.)166 2370
y Ff(Discussion:)50 b Fi(W)m(e)17 b(ma)o(y)f(use)j(the)f(attribute)g(v)
n(alue)f(to)h(pro)o(vide)g(additional)e(information)f(on)i(thread)75
2426 y(supp)q(ort,)d(or)g(use)h(additional)d(attribute)i(k)o(eys)h(for)
e(that)h(purp)q(ose.)166 2530 y Fr(All)19 b(MPI)f(calls)h(should)g(b)q
(e)g Fd(thr)n(e)n(ad-safe)p Fr(.)29 b(I.e.,)18 b(t)o(w)o(o)f(concurren)
o(tly)h(running)i(threads)d(ma)o(y)h(call)75 2586 y(MPI)f(calls)i(and)e
(the)h(outcome)f(should)h(b)q(e)g(as)f(if)h(the)g(calls)g(executed)g
(in)h(some)e(order,)g(ev)o(en)h(if)f(their)75 2643 y(execution)f(is)g
(in)o(terlea)o(v)o(ed.)-32 46 y Fm(1)-32 103 y(2)-32
159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32
441 y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40 667
y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40
949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119 y(20)-40
1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40
1853 y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40
2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248 y(40)-40
2304 y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40
2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699 y(48)p
eop
%%Page: 30 32
30 31 bop 75 -100 a Fr(30)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)189 49 y Fd(A)n(dvic)n(e)16
b(to)i(implementors.)49 b Fr(MPI)17 b(calls)h(can)f(b)q(e)g(made)g
(thread-safe)f(b)o(y)h(executing)h(only)f(one)189 106
y(at)c(a)h(time,)h(e.g.,)e(b)o(y)h(protecting)g(MPI)h(co)q(de)f(with)h
(one)f(global)h(lo)q(c)o(k.)20 b(High-qualit)o(y)c(implemen-)189
162 y(tations)j(will)j(pro)o(vide)f(more)e(concurrency)i(in)g(MPI)f
(execution,)i(using)f(\014ner)f(grain)g(lo)q(c)o(king.)189
219 y(Concurrency)d(can)h(also)f(b)q(e)h(ac)o(hiev)o(ed)h(b)o(y)e(ha)o
(ving)h(some)f(of)g(the)g(MPI)g(proto)q(col)h(executed)g(b)o(y)189
275 y(separate)c(serv)o(er)h(threads.)20 b(\()p Fd(End)15
b(of)i(advic)n(e)f(to)g(implementors.)p Fr(\))166 381
y(Blo)q(c)o(king)j(MPI)e(calls)i(will)g(blo)q(c)o(k)g(the)e(calling)j
(thread)d(only)l(,)i(allo)o(wing)f(another)f(thread)h(to)f(ex-)75
438 y(ecute,)j(if)g(a)o(v)m(ailable.)33 b(The)19 b(completion)h(of)e
(the)i(blo)q(c)o(king)g(MPI)f(call)h(will)h(un)o(blo)q(c)o(k)f(the)f
(thread.)31 b(A)75 494 y(blo)q(c)o(k)o(ed)23 b(thread)f(should)i(not)e
(prev)o(en)o(t)g(progress)f(of)h(other)g(threads)g(on)g(the)h(same)f
(pro)q(cess,)i(and)75 551 y(should)16 b(not)f(prev)o(en)o(t)g(them)g
(from)g(executing)h(MPI)f(calls.)75 657 y Fb(Example)j(6.1)k
Fr(Pro)q(cess)15 b(0)e(consists)i(of)f(t)o(w)o(o)e(threads.)20
b(The)14 b(\014rst)g(thread)g(executes)h(a)f(blo)q(c)o(king)h(send)75
713 y(call)h Fg(MPI)p 233 713 15 2 v 17 w(Send\(buff1,)22
b(count,)h(type,)g(0,)h(0,)f(comm\))p Fr(,)14 b(whereas)h(the)f(second)
h(thread)g(executes)g(a)75 770 y(blo)q(c)o(king)j(receiv)o(e)g(call)g
Fg(MPI)p 568 770 V 17 w(Recv\(buff2,)k(count,)h(type,)g(0,)h(0,)g
(comm\))p Fr(.)g(I.e.,)17 b(the)g(\014rst)f(thread)75
826 y(sends)g(a)f(message)g(that)f(is)i(receiv)o(ed)h(b)o(y)e(the)g
(second)h(thread.)k(This)c(comm)o(unication)g(should)h(alw)o(a)o(ys)75
883 y(succeed.)j(This,)14 b(b)q(ecause)h(if)e(the)h(\014rst)e(thread)i
(blo)q(c)o(ks,)g(it)f(should)h(yield)h(to)e(the)g(second)h(thread,)f
(whic)o(h)75 939 y(will)19 b(start)d(the)i(receiv)o(e.)27
b(After)18 b(b)q(oth)f(send)h(and)g(receiv)o(e)g(are)f(p)q(osted,)h
(the)g(comm)o(unication)g(should)75 996 y(complete.)189
1102 y Fd(A)n(dvic)n(e)c(to)h(implementors.)39 b Fr(This)14
b(requires)h(that)e(the)g(MPI)h(library)h(in)o(teract)e(with)h(the)g
(thread)189 1158 y(sc)o(heduler)j(\(the)f(library)h(has)e(to)h(k)o(eep)
g(trac)o(k)f(of)h(threads)f(blo)q(c)o(k)o(ed)i(b)q(ecause)g(of)f(MPI)g
(calls)h(and)189 1215 y(un)o(blo)q(c)o(k)f(them,)f(as)f(appropriate\).)
20 b(\()p Fd(End)c(of)g(advic)n(e)g(to)h(implementors.)p
Fr(\))75 1337 y Fj(6.12.2)49 b(Cla)o(ri\014cations)75
1422 y Fl(Prob)q(e)d Fr(A)23 b(receiv)o(e)h(call)g(that)e(uses)i
(source)f(and)g(tag)f(v)m(alues)j(returned)e(b)o(y)g(a)g(preceding)h
(call)h(to)75 1479 y Fl(MPI)p 160 1479 14 2 v 16 w(PROBE)c
Fr(or)e Fl(MPI)p 487 1479 V 16 w(IPROBE)h Fr(will)h(receiv)o(e)g(the)f
(message)f(matc)o(hed)g(b)o(y)h(the)f(prob)q(e)i(call)f(only)g(if)75
1535 y(there)g(w)o(as)f(no)g(other)h(receiv)o(e)g(after)f(the)h(prob)q
(e)g(and)g(b)q(efore)g(that)f(receiv)o(e.)35 b(In)20
b(a)g(m)o(ulti-threaded)75 1592 y(en)o(vironmen)o(t,)j(it)f(is)g(up)g
(to)f(the)g(user)h(to)f(enforce)g(this)h(condition)h(using)f(suitble)h
(m)o(utual)f(thread)75 1648 y(exclusion)17 b(co)q(de.)75
1768 y Fl(Multiple)e(threads)g(w)o(ait)f(on)g(same)g(request.)47
b Fr(A)14 b(program)e(where)j(t)o(w)o(o)d(threads)i(blo)q(c)o(k,)h(w)o
(aiting)f(on)g(the)75 1825 y(same)h(request,)g(is)g(erroneous.)166
1922 y Ff(Alternativ)o(es)o(:)34 b Fi(W)m(e)14 b(could)f(allo)o(w)f
(suc)o(h)j(m)o(ultiple)c(w)o(aits)i(and)h(un)o(blo)q(c)o(k)f(all)f(w)o
(aiting)g(threads)j(when)f(the)75 1972 y(comm)o(unication)c(completes)k
({)g(this)g(is)f(further)i(discussed)h(in)d(the)i(hnalder)f
(subsection.)166 2028 y(W)m(e)k(ma)o(y)f(w)o(an)o(t)i(to)f(designate)i
(this)e(error)i(as)f(\\con)o(tin)o(uable":)27 b(a)19
b(thread)g(gets)h(a)e(nonfatal)g(error)h(if)f(it)75 2085
y(attempts)13 b(to)h(w)o(ait)f(on)h(a)g(request)h(another)f(thread)h(w)
o(aits)e(on.)75 2252 y Fl(Collective)g(calls)46 b Fr(Matc)o(hing)12
b(of)g(\(blo)q(c)o(king)i(or)e(non)o(blo)q(c)o(king\))h(collectiv)o(e)i
(calls)e(on)g(a)f(comm)o(unicator)g(is)75 2308 y(done)g(according)f(to)
g(the)g(order)g(the)g(calls)h(are)f(issued)h(at)f(eac)o(h)g(pro)q
(cessor.)18 b(If)12 b(concurren)o(t)f(threads)g(issue)75
2365 y(suc)o(h)j(call,)i(it)e(is)h(up)f(to)g(the)g(user)g(to)g(mak)o(e)
g(sure)g(the)g(calls)h(are)f(correctly)h(ordered,)f(using)h(in)o
(terthread)75 2421 y(sync)o(hronization.)75 2541 y Fl(Exception)i
(handlers)47 b Fr(An)15 b(exception)i(handler)f(executes)h(in)f(the)f
(con)o(text)g(of)g(the)h(thread)f(that)g(made)75 2598
y(the)j(exception)h(raising)g(MPI)f(call)h(\(the)f(thread)g(that)f
(returns)h(the)g(error)f(co)q(de)i(is)g(the)f(thread)g(that)75
2654 y(executes)e(the)f(handler\).)1967 46 y Fm(1)1967
103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328
y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959
836 y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959
1062 y(19)1959 1119 y(20)1959 1175 y(21)1959 1232 y(22)1959
1288 y(23)1959 1345 y(24)1959 1401 y(25)1959 1457 y(26)1959
1514 y(27)1959 1570 y(28)1959 1627 y(29)1959 1683 y(30)1959
1740 y(31)1959 1796 y(32)1959 1853 y(33)1959 1909 y(34)1959
1966 y(35)1959 2022 y(36)1959 2078 y(37)1959 2135 y(38)1959
2191 y(39)1959 2248 y(40)1959 2304 y(41)1959 2361 y(42)1959
2417 y(43)1959 2474 y(44)1959 2530 y(45)1959 2587 y(46)1959
2643 y(47)1959 2699 y(48)p eop
%%Page: 31 33
31 32 bop 75 -100 a Fk(6.12.)34 b(MPI)15 b(AND)g(THREADS)1179
b Fr(31)189 49 y Fd(R)n(ationale.)54 b Fr(This)18 b(is)g(in)h(order)e
(to)g(\014gure)h(out)f(whic)o(h)h(call)h(caused)f(the)g(exception.)28
b(\()p Fd(End)18 b(of)189 106 y(r)n(ationale.)p Fr(\))166
246 y Ff(Alternativ)o(es)o(:)34 b Fi(W)m(e)13 b(ma)o(y)f(prefer)i(to)f
(allo)o(w)f(the)i(exception)g(handlers)g(to)g(execute)h(in)e(an)o(y)g
(con)o(text.)18 b(W)m(e)75 296 y(then)d(need)f(to)g(pro)o(vide)g(a)f
(mec)o(hanism)f(for)i(iden)o(tifying)e(the)i(faulting)f(thread.)166
352 y(It)c(ma)o(y)f(b)q(e)h(w)o(orth)o(while)g(to)g(pro)o(vide)g
(additional)f(default)h(exception)h(handlers,)g(suc)o(h)g(as)f
Fh(MPI)p 1634 352 13 2 v 15 w(KILL)p 1734 352 V 15 w(PROCESS)p
Fi(,)75 409 y(and)14 b Fh(MPI)p 233 409 V 14 w(KILL)p
332 409 V 15 w(THREAD)p Fi(.)75 577 y Fj(6.12.3)49 b(User-de\014ned)16
b(Handlers)75 663 y Fr(In)e(man)o(y)e(situations)h(it)h(is)f(desirable)
h(to)f(in)o(v)o(ok)o(e,)g(up)q(on)g(completion)h(of)f(a)g(comm)o
(unication,)g(a)g(handler)75 719 y(routine.)166 775 y(The)f(function)g
(in)o(tro)q(duced)g(b)q(elo)o(w)g(can)g(b)q(e)g(used)g(to)e(implemen)o
(t)j(the)f(generalized)h(requests)e(in)o(tro-)75 832
y(duced)16 b(in)f(the)g(External)g(In)o(terface)f(c)o(hapter;)g(it)h
(can)g(also)g(b)q(e)g(used)g(to)f(implemen)o(t)i(new)f(non)o(blo)q(c)o
(king)75 888 y(calls,)h(suc)o(h)f(as)g(non)o(blo)q(c)o(king)i(comm)o
(unication)f(or)e(task)h(spa)o(wning.)75 1039 y Fl(MPI)p
160 1039 14 2 v 16 w(POST)p 294 1039 V 17 w(HANDLER\(request,)i
(handler)p 840 1039 V 17 w(attr,)e(handler,)h(extra)p
1217 1039 V 16 w(state,)g(handler)p 1491 1039 V 17 w(t)o(yp)q(e\))117
1116 y Fi(IN)155 b Fl(request)452 b Fi(comm)o(unication)11
b(request)k(\(handle\))117 1191 y(IN)155 b Fl(handler)p
459 1191 V 18 w(attr)361 b Fi(handler)14 b(attributes)117
1265 y(IN)155 b Fl(handler)449 b Fi(receiv)o(e)15 b(handler)f
(\(function\))117 1339 y(IN)155 b Fl(extra)p 416 1339
V 17 w(state)384 b Fi(extra)15 b(state)f(for)g(handler)117
1413 y(IN)155 b Fl(handler)p 459 1413 V 18 w(t)o(yp)q(e)351
b Fi(t)o(yp)q(e)15 b(of)e(handler)h(function)75 1537
y Fg(int)23 b(MPI)p 245 1537 15 2 v 17 w(Post)p 358 1537
V 17 w(handler\(MPI)p 639 1537 V 16 w(Request)f(request,)h(MPI)p
1132 1537 V 17 w(Handler)p 1317 1537 V 16 w(attr,)g(*handler)p
1668 1537 V 16 w(attr,)393 1594 y(MPI)p 468 1594 V 17
w(Request)p 653 1594 V 16 w(handler)g(handler,)g(void)g(*extra)p
1338 1594 V 17 w(state,)g(int)393 1650 y(MPI)p 468 1650
V 17 w(handler)p 653 1650 V 16 w(type\))75 1737 y(MPI)p
150 1737 V 17 w(POST)p 263 1737 V 16 w(HANDLER\(REQUEST,)f(HANDLER)p
853 1737 V 16 w(ATTR,)h(HANDLER,)g(EXTRA)p 1347 1737
V 17 w(STATE,)g(HANDLER)p 1699 1737 V 16 w(TYPE,)393
1793 y(IERROR\))170 1849 y(INTEGER)g(REQUEST,)g(EXTRA)p
699 1849 V 17 w(STATE,)g(HANDLER)p 1051 1849 V 16 w(TYPE,)g(IERROR)170
1906 y(PROCEDURE)g(HANDLER)75 1992 y(int)g(MPI::Post)p
389 1992 V 16 w(handler\(MPI::Request)f(request,)g(MPI::Handler)p
1409 1992 V 16 w(attr,)393 2049 y(*handler)p 588 2049
V 16 w(attr,)h(MPI::Request)p 1035 2049 V 16 w(handler)g(handler,)g
(void)393 2105 y(*extra)p 540 2105 V 17 w(state,)g(int)g(MPI::handler)p
1107 2105 V 16 w(type\))166 2192 y Fr(A)o(ttac)o(hes)14
b Fl(handler)i Fr(to)f Fl(request)p Fr(.)21 b(This)16
b(can)g(b)q(e)f(a)g(p)q(ersisten)o(t,)h(or)e(non)i(p)q(ersisten)o(t)f
(request.)166 2248 y(The)g(handler)i(is)e(a)g(routine)h(of)f(t)o(yp)q
(e)75 2348 y Fg(typedef)23 b(int)g(MPI_Request_handler\(MPI_Reque)o(st)
e(*request,)i(void)g(*extra_state\))166 2448 y Fr(in)16
b(C,)f(and)g(of)g(t)o(yp)q(e)75 2547 y Fg(PROCEDURE)46
b(MPI_REQUEST_HANDLER\()22 b(REQUEST,)g(EXTRA_STATE,)h(IERR\))99
2604 y(INTEGER)70 b(REQUEST,)23 b(EXTRA_STATE,)f(IERR)166
2704 y Fr(in)16 b(F)l(ortran,)e(and)h(of)g(t)o(yp)q(e)-32
46 y Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272
y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780
y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006
y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457
y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909
y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587
y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 32 34
32 33 bop 75 -100 a Fr(32)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fg(typedef)23
b(int)g(MPI::Request_handler\(MPI::Req)o(uest)e(*request,)h(void)i
(*extra_state\))166 154 y Fr(in)16 b(C++.)166 210 y(The)g(handler)g(is)
g(in)o(v)o(ok)o(ed)g(as)f(so)q(on)g(as)g(the)h(request)f(completes,)h
(subsequen)o(t)g(to)f(its)h(p)q(osting.)21 b(If)75 267
y(the)13 b(request)h(w)o(as)e(already)i(complete)g(when)g(the)g
(handler)g(w)o(as)f(p)q(osted,)g(then)h(the)f(handler)i(is)f(in)o(v)o
(ok)o(ed)75 323 y(as)d(so)q(on)f(as)h(p)q(osted.)19 b(When)11
b(in)o(v)o(ok)o(ed,)h(the)f(handler)h(is)g(passed)f(in)h
Fl(request)g Fr(a)f(handle)h(to)f(the)g(request)g(the)75
379 y(handler)16 b(w)o(as)e(p)q(osted)h(to,)g(and)g(in)h
Fl(extra)p 779 379 14 2 v 16 w(state)g Fr(the)f(extra)g(state)f(that)g
(w)o(as)g(passed)h(when)h(the)f(request)75 436 y(w)o(as)g(p)q(osted.)23
b(The)17 b(handler)g(can)g(access)f(the)g(status)f(asso)q(ciated)i
(with)f(the)h(request)f(b)o(y)g(executing)h(a)75 492
y(call)f(to)f Fl(MPI)p 299 492 V 16 w(GET)p 403 492 V
16 w(ST)l(A)l(TUS)p Fr(.)166 549 y(The)g(in)o(v)o(o)q(cation)f(of)g
(the)h(handler)g(should)h(b)q(eha)o(v)o(e)e(as)g(if)h(a)f(call)i(w)o
(as)d(made)i(to)e(create)h(a)g(separate)75 605 y(thread)f(for)f
(handler)j(execution,)f(when)f(the)h(request)f(completed.)20
b(The)13 b Fl(handler)p 1476 605 V 17 w(attr)h Fr(argumen)o(t)e(sp)q
(ec-)75 662 y(i\014es)k(thread)g(attributes)f(for)g(the)g(newly)i
(created)e(thread,)g(suc)o(h)h(as)f(priorit)o(y)l(,)h(sc)o(heduling)h
(algorithm,)75 718 y(stac)o(k)e(size,)i(etc.)23 b(The)17
b(t)o(yp)q(e)f(of)g(attributes)g(that)f(can)h(b)q(e)h(sp)q(eci\014ed)i
(for)c(a)h(handler,)h(and)g(the)f(mec)o(ha-)75 775 y(nisms)11
b(for)f(sp)q(ecifying)i(attribute)f(v)m(alues,)h(is)f(implemen)o
(tation)h(dep)q(enden)o(t.)19 b(An)11 b(MPI)g(implemen)o(tation)75
831 y(m)o(ust)k(pro)o(vide)g(a)g(constan)o(t,)f(prede\014ned)j(default)
f(handler)g(attribute)f Fh(MPI)p 1389 831 13 2 v 14 w(HANDLER)p
1593 831 V 16 w(A)m(TTRIBUTE)p Fr(.)166 928 y Ff(Discussion:)36
b Fi(P)o(osix)14 b(uses)i(a)e(structure)j(of)d(t)o(yp)q(e)h
Fh(pthread)p 1125 928 V 17 w(attr)p 1206 928 V 15 w(t)f
Fi(for)g(thread)h(attributes)h(suc)o(h)f(as)g(stac)o(k)75
978 y(size)j(and)f(stac)o(k)h(address,)h(but)e(uses)h(a)f(di\013eren)o
(t)h(mec)o(hanism)d(to)i(set)i(the)e(thread)h(priorit)o(y)f(\(a)g
(function)g(call)75 1028 y(that)f(is)f(passed)i(a)e(the)h(thread)g
(id\).)23 b(Since)16 b(handler)g(instances)h(are)f(\\anon)o(ymous",)d
(it)i(mak)o(es)g(more)f(sense)j(in)75 1078 y(our)d(case)h(to)f(use)g
(the)h(attribute)f(mec)o(hanism)e(for)h(b)q(oth.)166
1134 y(W)m(e)d(should)f(use)i(here)h(the)e(same)g(mec)o(hanism)d(used)k
(elsewhere)h(in)e(MPI)g(to)g(sp)q(ecify)h(attribute)f(v)n(alues.)17
b(The,)75 1190 y(the)d(mec)o(hanism)d(used)j(for)f(sp)q(ecifying)g
(attributes)i(b)q(ecomes)e(part)h(of)f(the)h(MPI)f(standard,)h(but)f
(the)h(attributes)75 1247 y(are)g(still)f(implemen)o(tation)e(dep)q
(enden)o(t.)19 b(W)m(e)14 b(ma)o(y)e(go)h(further,)h(and)g(ha)o(v)o(e)g
(some)f(standard)h(attributes.)166 1351 y Fr(The)h Fl(handler)p
400 1351 14 2 v 17 w(t)o(yp)q(e)g Fr(argumen)o(t)f(pro)o(vides)h
(information)g(on)f(restrictions)h(ob)q(ey)o(ed)g(b)o(y)f(the)h
(handler)75 1407 y(co)q(de.)20 b(P)o(ossible)d(v)m(alues)f(are)75
1499 y Fb(MPI)p 184 1499 16 2 v 18 w(HANDLER)p 468 1499
V 19 w(DEF)-6 b(A)o(UL)l(T:)23 b Fr(Handler)14 b(is)g(thread-safe,)g
(but)g(ob)o(y)o(es)f(no)g(further)h(restrictions.)75
1592 y Fb(MPI)p 184 1592 V 18 w(HANDLER)p 468 1592 V
19 w(SIGNAL)p 689 1592 V 19 w(SAFE:)22 b Fr(Handler)16
b(is)g(signal-safe.)75 1685 y(On)g(some)f(systems,)f(it)h(will)i(b)q(e)
f(p)q(ossible)h(to)e(implemen)o(t)h(more)f(e\016cien)o(tly)h
(restricted)g(handlers.)166 1741 y(A)k(function)h(is)f(signal)p
569 1741 14 2 v 17 w(safe)g(if)h(it)f(can)g(b)q(e)h(in)o(v)o(ok)o(ed)f
(from)f(a)h(signal-catc)o(hing)h(function.)35 b(\(The)75
1798 y(P)o(osix)19 b(terminology)g(is)h Fd(asynch-signal-safe)p
Fr(\).)30 b(F)l(or)19 b(example,)h(a)f(signal-safe)h(handler)g(can)g
(not)f(use)75 1854 y(m)o(utex)c(calls.)166 1958 y Ff(Discussion:)33
b Fi(The)14 b(list)e(ab)q(o)o(v)o(e)h(is)g(a)g(placeholder:)18
b(w)o(e)13 b(need)h(to)f(discuss)h(what)f(restrictions)i(mak)o(e)c
(sense)75 2014 y(for)j(v)n(arious)f(implem)o(en)o(tations.)166
2118 y Fr(Handler)h(co)q(de)h(should)f(b)q(e)h(thread)e(safe.)19
b(Mutual)14 b(exclusion)h(with)f(other)f(handler)i(instances,)f(or)75
2174 y(with)i(computation)f(co)q(de)g(is)h(ac)o(hiev)o(ed)g(b)o(y)f
(using)h(thread)f(sync)o(hronization)i(calls.)166 2231
y(An)d(MPI)g(exception)h(o)q(ccurs)f(if)h(the)f(handler)h(returns)f
(with)g(a)g(v)m(alue)h(other)f(than)f Fh(MPI)p 1674 2231
13 2 v 15 w(SUCCESS)p Fr(.)189 2335 y Fd(A)n(dvic)n(e)19
b(to)j(implementors.)69 b Fr(Since)22 b(the)e(p)q(ost)p
1043 2335 14 2 v 16 w(handle)h(call)h(do)q(es)e(not)g(return)g(a)g
(thread)f(id,)189 2392 y(implemen)o(tations)14 b(are)f(not)f(required)i
(to)f(spa)o(wn)f(a)h(thread)g(when)h(the)f(call)h(o)q(ccurs;)g(rather)e
(than)189 2448 y(spa)o(wning)20 b(a)g(new)g(thread)g(for)f(eac)o(h)h
(handler)h(instance,)h(one)e(can)h(\\recycle")f(a)g(\014xed)h(set)e(of)
189 2505 y(threads.)189 2579 y(Note)13 b(that)h(handler)h(in)o(v)o(o)q
(cation)f(requires)h(some)f(wrapp)q(er)g(co)q(de,)h(on)f(top)f(of)h
Fl(pthread)p 1691 2579 V 18 w(create)p Fr(:)19 b(a)189
2636 y(P)o(osix)c(thread)h(has)g(only)g(one)g(argumen)o(t,)f(wheres)h
(an)g(MPI)f(handler)i(function)g(has)e(t)o(w)o(o)g(input)189
2692 y(argumen)o(ts)f(and)h(one)h(return)f(v)m(alue.)21
b(\()p Fd(End)15 b(of)i(advic)n(e)f(to)h(implementors.)p
Fr(\))1967 46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215
y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967
498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959
724 y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959
949 y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 33 35
33 34 bop 75 -100 a Fk(6.12.)34 b(MPI)15 b(AND)g(THREADS)1179
b Fr(33)75 49 y Fl(First)15 b(Alternative)75 135 y Fr(The)h(request)f
(handle)i(is)f(set)f(to)g Fh(MPI)p 724 135 13 2 v 14
w(REQUEST)p 926 135 V 14 w(NULL)h Fr(b)o(y)f(the)h(call)h(to)d
Fl(MPI)p 1422 135 14 2 v 16 w(POST)p 1556 135 V 17 w(HANDLER)i
Fr(\(the)75 192 y(binding)i(has)f(to)f(b)q(e)h(c)o(hanged)g(to)f(mak)o
(e)g(this)h(argumen)o(t)e Fi(INOUT)p Fr(\).)i(It)f(is)h(erroneous)f
(for)g(the)h(request)75 248 y(to)d(b)q(e)i(accessed,)f(except)g(b)o(y)g
(the)f(handler,)i(once)f(the)g(handler)h(is)f(p)q(osted.)20
b(If)15 b(the)g(request)g(is)g(nonp)q(er-)75 304 y(sisten)o(t,)h(then)g
(it)g(will)h(b)q(e)g(deallo)q(cated)g(once)g(the)e(handler)i
(completes.)23 b(If)16 b(it)g(is)h(p)q(ersisten)o(t,)f(then)g(the)75
361 y(handler)i(has)e(to)h(reactiv)m(ate)g(the)f(request)h(with)g(a)g
(call)h(to)e Fl(MPI)p 1202 361 V 16 w(ST)l(ART)h Fr(or)f
Fl(MPI)p 1516 361 V 16 w(ST)l(ART)l(ALL)p Fr(,)h(or)g(to)75
417 y(free)d(the)h(request,)f(with)h(a)f(call)h(to)f
Fl(MPI)p 771 417 V 15 w(REQUEST)p 989 417 V 18 w(FREE)p
Fr(.)h(The)f(handler)i(can)e(also)g(asso)q(ciate)h(a)f(new)75
474 y(handler)i(with)g(the)f(request,)g(b)o(y)g(calling)i
Fl(MPI)p 884 474 V 16 w(POST)p 1018 474 V 17 w(HANDLER)p
Fr(.)166 530 y(A)e(request)g(cannot)g(b)q(e)h(canceled,)h(once)e(a)g
(handler)h(is)g(p)q(osted.)166 634 y Ff(Discussion:)34
b Fi(This)13 b(mo)q(del)g(has)g(clean)h(seman)o(tics:)k(the)c(request)i
(is)d(\\o)o(wned")h(b)o(y)f(the)h(handler,)g(once)g(it)75
690 y(is)g(p)q(osted.)19 b(The)14 b(do)o(wn-side)g(is)g(no)f
(cancelations.)75 858 y Fl(Second)k(Alternative)75 944
y Fr(A)c(call)i(to)e Fl(MPI)p 343 944 V 15 w(POST)p 476
944 V 17 w(HANDLER)h Fr(do)q(es)g(not)f(mo)q(dify)h(the)f(request)h
(handle,)g(and)g(the)f(request)h(ob)s(ject)75 1000 y(can)h(still)h(b)q
(e)g(accessed)f(b)o(y)g(the)g(caller,)g(after)f(the)h(call)h(to)e
Fl(MPI)p 1169 1000 V 16 w(POST)p 1303 1000 V 17 w(HANDLER)h
Fr(completed.)21 b(Also,)75 1056 y(nonp)q(ersisten)o(t)e(requests)f
(are)f(not)h(automatically)g(deallo)q(cated)h(at)f(handler)h
(completion,)g(and)f(p)q(er-)75 1113 y(sisten)o(t)e(request)f(are)h
(not)f(automatically)h(deactiv)m(ated.)22 b(Instead,)16
b(a)f(call)i(to)e Fl(MPI)p 1519 1113 V 16 w(REQUEST)p
1738 1113 V 18 w(FREE,)75 1169 y(MPI)p 160 1169 V 16
w(W)l(AIT,)e(MPI)p 397 1169 V 15 w(TEST)h Fr(or)e(an)o(y)h(of)g(the)g
(other)g(deriv)o(ed)h(function)g(is)g(needed,)g(either)g(inside)h(the)f
(han-)75 1226 y(dler)k(or)e(outside)h(it.)25 b(The)17
b(user)g(has)f(complete)i(freedom)f(to)f(decide)i(who)f(\\o)o(wns")e
(the)i(request,)g(and)75 1282 y(who)12 b(should)h(deallo)q(cate)h(or)e
(inactiv)m(ate)h(this)g(request)f(ob)s(ject.)19 b(He)12
b(or)g(she)h(also)f(has)g(the)g(resp)q(onsibili)q(t)o(y)75
1339 y(to)j(sync)o(hronize)h(correctly)f(con\014cting)h(accesses)g(to)e
(a)h(request)g(ob)s(ject.)166 1395 y(A)f(request)g(ma)o(y)g(b)q(e)h
(cancelled)h(at)e(an)o(y)g(time,)g(b)o(y)g(calling)i
Fl(MPI)p 1268 1395 V 16 w(CANCEL)p Fr(.)e(If)h Fl(MPI)p
1610 1395 V 16 w(CANCEL)f Fr(has)75 1452 y(b)q(een)g(called)h(b)q
(efore)e(the)g(handler)h(w)o(as)e(in)o(v)o(ok)o(ed,)i(then)f(the)g
(request)g(is)g(complete,)h(and)f(the)g(handler)h(is)75
1508 y(in)o(v)o(ok)o(ed,)d(when)g(either)g(the)g(comm)o(unication)g
(completes)g(successfully)l(,)i(or)d(the)g(cancellation)i(succeeds.)75
1565 y(In)k(either)f(case,)g(the)g(handler)h(is)g(passed)f(a)f(v)m
(alid)j(handle)f(to)f(the)g(request,)f(and)h(the)g(handler)i(can)e(use)
75 1621 y(it)g(to)g(c)o(hec)o(k)g(whic)o(h)i(is)e(whic)o(h,)h(using)g
Fl(MPI)p 821 1621 V 16 w(TEST)p 951 1621 V 16 w(CANCELLED)p
Fr(.)166 1677 y(The)i(request)f(ma)o(y)g(b)q(e)h(freed)g(at)e(an)o(y)h
(time,)h(b)o(y)g(calling)h Fl(MPI)p 1263 1677 V 16 w(REQUEST)p
1482 1677 V 18 w(FREE)p Fr(.)e(The)h(request)75 1734
y(ob)s(ject)13 b(is)i(deallo)q(cated)g(only)f(after)g(the)f(request)h
(completed)h(and)f(the)g(handler)h(w)o(as)e(in)o(v)o(ok)o(ed,)h(so)g
(that)75 1790 y(the)k(handler)i(will)g(b)q(e)f(passed)g(a)f(v)m(alid)i
(request)e(handle,)i(when)f(in)o(v)o(ok)o(ed,)g(ev)o(en)g(if)g(the)f
(request)h(w)o(as)75 1847 y(freed)d(b)q(efore)f(the)g(handler)i
(started)d(executing.)166 1903 y(A)i(new)g(handler)h(can)e(b)q(e)i
(asso)q(ciated)f(with)g(a)f(request)h(at)f(an)o(y)h(time,)g(replacing)h
(the)f(previously)75 1960 y(p)q(osted)i(handler.)29 b(If)18
b(the)g(previous)h(handler)g(has)f(started)f(executing)i(b)q(efore)f(b)
q(eing)h(replaced)g(b)o(y)f(a)75 2016 y(call)f(to)f Fl(MPI)p
301 2016 V 16 w(POST)p 435 2016 V 17 w(HANDLER)p Fr(,)g(then)h(it)f
(will)i(complete)f(executing.)23 b(If)17 b Fl(MPI)p 1472
2016 V 16 w(POST)p 1606 2016 V 17 w(HANDLER)f Fr(is)75
2073 y(called)e(with)e Fl(handler)h(=)f(MPI)p 584 2073
V 16 w(HANDLER)p 808 2073 V 17 w(NULL)g Fr(then)g(no)g(handler)h(is)f
(attac)o(hed)g(to)f(the)h(request)g(up)q(on)75 2129 y(return.)20
b(This)c(allo)o(ws)f(handlers)h(to)f(b)q(e)h(detac)o(hed.)166
2186 y(A)h(call)h(to)e Fl(MPI)p 444 2186 V 16 w(W)l(AIT)p
Fr(,)g(or)g Fl(MPI)p 741 2186 V 16 w(TEST)p Fr(,)h(or)f(an)o(y)g(of)h
(the)g(other)f(deriv)o(ed)i(functions,)f(ma)o(y)g(o)q(ccur)75
2242 y(at)h(an)o(y)g(time.)29 b(A)19 b(call)g(to)f Fl(MPI)p
636 2242 V 16 w(W)l(AIT)g Fr(or)g(an)o(y)g(of)f(the)i(deriv)o(ed)g
(functions,)h(or)d(a)h(successful)i(call)g(to)75 2298
y Fl(MPI)p 160 2298 V 16 w(TEST)h Fr(or)g(an)o(y)h(of)f(the)g(deriv)o
(ed)i(functions,)g(is)f(analogous)f(to)g(the)g(replacing)i(of)e(the)h
(p)q(osted)75 2355 y(handler:)f(request)15 b(completion)h(is)g(handled)
h(no)o(w)e(b)o(y)g(w)o(ait)f(or)h(test,)f(rather)h(than)g(b)o(y)g(the)h
(handler.)166 2452 y Ff(Discussion:)33 b Fi(I)13 b(b)q(eliev)o(e)h
(implemen)o(tati)o(on)c(is)j(easier)h(and)f(logic)g(clearer)h(if)e(a)h
(request)i(handler)e(is)g(analo-)75 2502 y(gous)g(to)g(a)g(thread)h
(blo)q(c)o(k)o(ed)f(on)g(a)g(w)o(ait:)k(in)12 b(b)q(oth)i(cases,)g
(when)f(the)h(request)h(is)e(complete,)f(some)h(piece)h(of)e(co)q(de)75
2552 y(is)i(\(re\)sc)o(heduled)i(for)d(execution.)19
b(In)14 b(this)g(case,)g(there)i(are)e(t)o(w)o(o)f(consisten)o(t)i
(approac)o(hes:)166 2601 y(\(1\))i(Only)g(one)g(con)o(tin)o(uation)f(w)
o(aiting)f(to)i(execute)i(when)f(the)f(comm)o(unication)d(completes.)27
b(This)17 b(can)75 2651 y(b)q(e)e(either)g(one)f(handler)h(p)q(osted)g
(on)f(a)f(request)j(or)e(one)h(thread)g(blo)q(c)o(k)o(ed)f(on)g(a)g(w)o
(ait)f(to)h(that)g(request,)i(but)e(not)75 2701 y(b)q(oth.)-32
46 y Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272
y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780
y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006
y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457
y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909
y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587
y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 34 36
34 35 bop 75 -100 a Fr(34)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)166 49 y Fi(\(2\))19
b(Multiple)f(con)o(tin)o(uations)g(w)o(aiting)f(to)i(execute)i(when)e
(the)g(comm)o(unication)d(completes.)32 b(In)19 b(suc)o(h)75
99 y(case,)c(w)o(e)g(could)f(ha)o(v)o(e)h(m)o(ultiple)d(handlers)j(p)q
(osted)g(on)g(the)g(same)f(request)i(\(a)e(new)h(mec)o(hanisms)e(is)h
(needed)i(to)75 149 y(\\unp)q(ost")i(them\),)f(as)g(w)o(ell)g(as)h(m)o
(ultiple)d(threads)k(w)o(aiting)d(on)h(the)h(same)f(request,)i(or)f(an)
o(y)f(com)o(bination)e(of)75 199 y(b)q(oth.)26 b(In)16
b(the)h(later)g(case,)g(w)o(e)g(can)g(sp)q(ecify)g(that)f(these)i(v)n
(arious)e(threads)h(are)g(activ)n(ated)f(in)g(the)h(order)g(they)75
249 y(w)o(ere)e(p)q(osted.)166 305 y(The)f(curren)o(t)i(prop)q(osal)d
(follo)o(ws)f(the)j(\014rst)g(approac)o(h.)75 474 y Fj(6.12.4)49
b(Global)18 b(thread)d(functions)75 560 y Fr(It)j(is)g(useful)h(to)e
(extend)h(thread)g(co)q(ordination)g(functions)g(to)f(w)o(ork)g(across)
g(an)h(MPI)f(group)h(of)f(pro-)75 616 y(cesses,)d(including)i(pro)q
(cesses)e(not)g(under)g(the)g(same)f(k)o(ernel.)20 b(Suc)o(h)15
b(extensions)f(can)g(b)q(e)g(implemen)o(ted)75 673 y(p)q(ortably)k
(using)h(MPI)f(comm)o(unication)h(\(with)f(handlers\))h(and)g(pro)o
(xies)f(at)f(eac)o(h)i(no)q(de)f(to)g(supp)q(ort)75 729
y(the)f(functions)h(globally)g(\(of)e(course,)h(m)o(uc)o(h)g(more)g
(e\016cien)o(t)h(implemen)o(tations)g(will)h(b)q(e)e(p)q(ossible)i(on)
75 786 y(man)o(y)c(systems\).)166 842 y(These)h(functions)g(can)f(also)
g(b)q(e)h(used)g(to)e(sync)o(hronize)j(threads)e(within)h(one)g(pro)q
(cess,)f(using)h(the)75 898 y(comm)o(unicator)f Fl(MPI)p
457 898 14 2 v 16 w(COMM)p 615 898 V 16 w(SELF)p Fr(.)166
955 y(W)l(e)g(outline)i(b)q(elo)o(w)e(some)g(p)q(ossible)i(c)o(hoices.)
75 1075 y Fl(Mutexes)75 1255 y(MPI)p 160 1255 V 16 w(MUTEX)p
335 1255 V 17 w(CREA)l(TE\(comm,)c(mutex)p 799 1255 V
17 w(attr,)i(mutex\))117 1332 y Fi(IN)155 b Fl(comm)470
b Fi(comm)o(unicator)11 b(for)j(group)g(sharing)f(m)o(utex)117
1408 y(IN)155 b Fl(mutex)p 438 1408 V 17 w(attr)383 b
Fi(m)o(utex)13 b(attributes)117 1483 y(OUT)108 b Fl(mutex)470
b Fi(m)o(utex)13 b(ob)r(ject)75 1607 y Fg(int)23 b(MPI)p
245 1607 15 2 v 17 w(Mutex)p 382 1607 V 17 w(create\(MPI)p
639 1607 V 16 w(Comm)g(comm,)g(MPI)p 989 1607 V 17 w(mutex)p
1126 1607 V 16 w(attr)h(mutex)p 1382 1607 V 16 w(attr,)f(MPI)p
1613 1607 V 17 w(mutex)393 1664 y(mutex\))75 1750 y(MPI)p
150 1750 V 17 w(MUTEX)p 287 1750 V 16 w(CREATE\(COMM,)f(MUTEX)p
733 1750 V 17 w(ATTR,)h(MUTEX\))170 1807 y(INTEGER)g(COMM,)h(MUTEX)p
628 1807 V 16 w(ATTR,)f(MUTEX)75 1893 y(int)g(MPI::Mutex)p
413 1893 V 16 w(create\(MPI::Comm)f(comm,)h(MPI::mutex)p
1218 1893 V 16 w(attr)g(mutex)p 1473 1893 V 17 w(attr,)g(MPI::mutex)393
1949 y(mutex\))166 2077 y Ff(Missing:)166 2126 y Fi(need)15
b(to)f(de\014ne)g(what)g(is)g(m)o(utex)p 695 2126 13
2 v 14 w(attr.)166 2230 y Fr(Creates)d(a)g(m)o(utex)g(ob)s(ject)g(that)
g(is)h(shared)g(b)o(y)f(all)i(pro)q(cesses)f(in)g(the)g(group)f(of)g
Fl(comm)p Fr(.)17 b(\(W)l(e)11 b(could,)75 2287 y(instead,)17
b(return)e(a)h Fl(new)o(comm)f Fr(and)h(further)g(o)o(v)o(erload)g
(comm)o(unicators.\))21 b(This)c(is)f(the)h(extension)f(of)75
2343 y Fl(pthread)p 221 2343 14 2 v 18 w(mutex)p 356
2343 V 16 w(init)75 2494 y(MPI)p 160 2494 V 16 w(MUTEX)p
335 2494 V 17 w(FREE\(mutex\))117 2571 y Fi(INOUT)62
b Fl(mutex)470 b Fi(m)o(utex)13 b(ob)r(ject)75 2696 y
Fg(int)23 b(MPI)p 245 2696 15 2 v 17 w(Mutex)p 382 2696
V 17 w(free\(MPI)p 591 2696 V 16 w(Mutex)g(*mutex\))1967
46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498
y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959
1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959
1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959
1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959
1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959
2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959
2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959
2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p
eop
%%Page: 35 37
35 36 bop 75 -100 a Fk(6.12.)34 b(MPI)15 b(AND)g(THREADS)1179
b Fr(35)75 49 y Fg(MPI)p 150 49 15 2 v 17 w(MUTEX)p 287
49 V 16 w(FREE\(MUTEX\))170 106 y(INTEGER)23 b(MUTEX)75
192 y(int)g(MPI::Mutex)p 413 192 V 16 w(free\(MPI::Mutex)f(mutex\))166
279 y Fr(F)l(ree)10 b(the)g(m)o(utex)g(ob)s(ject)g(\(should)h(that)e(b)
q(e)i(collectiv)o(e?\))20 b(This)11 b(is)g(the)f(extension)h(to)e
Fl(pthread)p 1751 279 14 2 v 18 w(mutex)p 1886 279 V
17 w(destro)o(y)75 335 y Fr(\(P)o(osix)16 b(sa)o(ys)g(that)h(the)f(b)q
(eha)o(vior)i(of)e(a)h(pthread)p 932 335 V 16 w(m)o(utex)p
1072 335 V 16 w(destro)o(y)f(call)i(on)f(a)g(lo)q(c)o(k)o(ed)g(m)o
(utex)g(is)g(unde-)75 392 y(\014ned.)j(W)l(e)13 b(can)g(lea)o(v)o(e)h
(it)f(this)g(w)o(a)o(y)l(,)g(or)f(ha)o(v)o(e)h(our)g(usual,)g(more)g
(lenien)o(t)i(implemen)o(tation)f(of)f(free,)g(that)75
448 y(w)o(aits)g(un)o(til)i(ob)s(jects)e(are)g(not)g(busy)l(.)20
b(The)14 b(later)f(is)h(consisten)o(t)g(b)q(oth)g(with)g(P)o(osix)f
(and)h(with)g(MPI,)f(but)75 504 y(ma)o(y)h(not)h(b)q(e)h(consisten)o(t)
g(with)f(curren)o(t)g(implemen)o(tations)i(of)d(P)o(osix)h(threads.\))
75 655 y Fl(MPI)p 160 655 V 16 w(MUTEX)p 335 655 V 17
w(LOCK\(mutex\))117 733 y Fi(IN)155 b Fl(mutex)470 b
Fi(m)o(utex)13 b(to)h(b)q(e)g(lo)q(c)o(k)o(ed)75 857
y Fg(int)23 b(MPI)p 245 857 15 2 v 17 w(Mutex)p 382 857
V 17 w(lock\(MPI)p 591 857 V 16 w(Mutex)g(mutex\))75
944 y(MPI)p 150 944 V 17 w(MUTEX)p 287 944 V 16 w(LOCK\(MUTEX\))170
1000 y(INTEGER)g(MUTEX)75 1086 y(int)g(MPI::Mutex)p 413
1086 V 16 w(lock\(MPI::mutex)f(mutex\))75 1267 y Fl(MPI)p
160 1267 14 2 v 16 w(MUTEX)p 335 1267 V 17 w(TRYLOCK\(mutex,)14
b(\015ag\))117 1345 y Fi(IN)155 b Fl(mutex)470 b Fi(m)o(utex)13
b(to)h(b)q(e)g(lo)q(c)o(k)o(ed)117 1420 y(OUT)108 b Fl(\015ag)518
b Fi(success)17 b(\015ag)c(\(b)q(o)q(olean\))75 1544
y Fg(int)23 b(MPI)p 245 1544 15 2 v 17 w(Mutex)p 382
1544 V 17 w(trylock\(MPI)p 663 1544 V 15 w(Mutex)h(mutex,)f(int)g
(*flag\))75 1631 y(MPI)p 150 1631 V 17 w(MUTEX)p 287
1631 V 16 w(TRYLOCK\(MUTEX,)f(FLAG\))170 1687 y(INTEGER)h(MUTEX,)g
(FLAG)75 1774 y(int)g(MPI::Mutex)p 413 1774 V 16 w(trylock\(MPI::Mutex)
f(mutex,)h(int)g(*flag\))75 1954 y Fl(MPI)p 160 1954
14 2 v 16 w(MUTEX)p 335 1954 V 17 w(UNLOCK\(mutex\))117
2032 y Fi(IN)155 b Fl(mutex)470 b Fi(m)o(utex)13 b(to)h(b)q(e)g(unlo)q
(c)o(k)o(ed)75 2156 y Fg(int)23 b(MPI)p 245 2156 15 2
v 17 w(Mutex)p 382 2156 V 17 w(unlock\(MPI)p 639 2156
V 16 w(Mutex)g(mutex\))75 2243 y(MPI)p 150 2243 V 17
w(MUTEX)p 287 2243 V 16 w(UNLOCK\(MUTEX\))170 2299 y(INTEGER)g(MUTEX)75
2386 y(int)g(MPI::Mutex)p 413 2386 V 16 w(unlock\(MPI::Mutex)f(mutex\))
166 2472 y Fr(These)d(are)g(the)f(extensions)i(of)e(the)h(P)o(osix)g
(calls)h Fl(pthread)p 1199 2472 14 2 v 17 w(mutex)p 1333
2472 V 17 w(lo)q(ck,)f(pthread)p 1602 2472 V 18 w(mutex)p
1737 2472 V 17 w(unlo)q(ck)75 2528 y Fr(and)k Fl(pthread)p
317 2528 V 18 w(mutex)p 452 2528 V 16 w(unlo)q(ck)p Fr(.)43
b(The)23 b(lo)q(c)o(k)g(call)g(is)g(blo)q(c)o(king)h(\(lik)o(e)g(a)e(w)
o(ait\),)h(whereas)f(the)h(trylo)q(c)o(k)75 2585 y(function)16
b(in)g(non)o(blo)q(c)o(king,)g(lik)o(e)h(a)d(test.)-32
46 y Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272
y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780
y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006
y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457
y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909
y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587
y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 36 38
36 37 bop 75 -100 a Fr(36)871 b Fk(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fl(Condition)16
b(va)o(riables)75 230 y(MPI)p 160 230 14 2 v 16 w(COND)p
303 230 V 17 w(CREA)l(TE\(comm,)d(cond)p 739 230 V 18
w(attr,)i(cond\))117 307 y Fi(IN)155 b Fl(comm)470 b
Fi(comm)o(unicator)11 b(for)j(group)g(sharing)f(condition)g(v)n
(ariable)117 382 y(IN)155 b Fl(cond)p 410 382 V 18 w(attr)410
b Fi(condition)13 b(attributes)117 457 y(OUT)108 b Fl(cond)498
b Fi(condition)13 b(ob)r(ject)75 581 y Fg(int)23 b(MPI)p
245 581 15 2 v 17 w(Cond)p 358 581 V 17 w(create\(MPI)p
615 581 V 16 w(Comm)g(comm,)g(MPI)p 965 581 V 17 w(Cond)p
1078 581 V 17 w(attr)g(cond)p 1310 581 V 17 w(attr,)g(MPI)p
1542 581 V 16 w(Cond)h(*cond\))75 668 y(MPI)p 150 668
V 17 w(COND)p 263 668 V 16 w(CREATE\(COMM,)f(COND)p 686
668 V 16 w(ATTR,)g(COND\))170 724 y(INTEGER)g(COMM,)h(COND)p
604 724 V 16 w(ATTR,)f(COND)75 811 y(int)g(MPI::Cond)p
389 811 V 16 w(create\(MPI::Comm)f(comm,)h(MPI::Cond)p
1170 811 V 16 w(attr)h(cond)p 1402 811 V 16 w(attr,)f(MPI::Cond)393
867 y(*cond\))166 954 y Fr(Creates)13 b(a)h(condition)i(v)m(ariable)f
(that)e(is)i(shared)f(b)o(y)g(all)h(pro)q(cesses)g(in)g(the)f(group)g
(of)g Fl(comm)p Fr(.)j(\(W)l(e)75 1010 y(could,)f(here,)f(to)q(o,)f(o)o
(v)o(erload)h(comm)o(unicators,)f(rah)o(ter)h(than)g(ha)o(ving)g(a)g
(new)h(opaque)f(ob)s(ject.\))75 1161 y Fl(MPI)p 160 1161
14 2 v 16 w(COND)p 303 1161 V 17 w(FREE\(cond\))117 1238
y Fi(INOUT)62 b Fl(cond)498 b Fi(condition)13 b(ob)r(ject)75
1363 y Fg(int)23 b(MPI)p 245 1363 15 2 v 17 w(Cond)p
358 1363 V 17 w(free\(MPI)p 567 1363 V 16 w(Cond)g(*cond\))75
1449 y(MPI)p 150 1449 V 17 w(COND)p 263 1449 V 16 w(FREE\(COND\))170
1506 y(INTEGER)g(COND)75 1592 y(int)g(MPI::Cond)p 389
1592 V 16 w(free\(MPI::Cond)f(*cond\))166 1679 y Fr(F)l(ree)15
b(the)g(condition)i(ob)s(ject.)166 1735 y(These)e(are)g(the)h(MPI)f
(extensions)h(to)e Fl(pthread)p 976 1735 14 2 v 18 w(cond)p
1083 1735 V 17 w(init)i Fr(and)g Fl(pthread)p 1409 1735
V 17 w(cond)p 1515 1735 V 18 w(destro)o(y)p Fr(.)75 1886
y Fl(MPI)p 160 1886 V 16 w(COND)p 303 1886 V 17 w(SIGNAL\(cond\))117
1963 y Fi(IN)155 b Fl(cond)498 b Fi(condition)13 b(to)h(b)q(e)h
(signaled)75 2088 y Fg(int)23 b(MPI)p 245 2088 15 2 v
17 w(Cond)p 358 2088 V 17 w(signal\(MPI)p 615 2088 V
16 w(Cond)g(cond\))75 2174 y(MPI)p 150 2174 V 17 w(COND)p
263 2174 V 16 w(SIGNAL\(COND\))170 2231 y(INTEGER)g(COND)75
2317 y(int)g(MPI::Cond)p 389 2317 V 16 w(signal\(MPI::Cond)f(cond\))75
2498 y Fl(MPI)p 160 2498 14 2 v 16 w(COND)p 303 2498
V 17 w(BRO)o(ADCAST\(cond\))117 2575 y Fi(IN)155 b Fl(cond)498
b Fi(condition)13 b(to)h(b)q(e)h(signaled)75 2700 y Fg(int)23
b(MPI)p 245 2700 15 2 v 17 w(Cond)p 358 2700 V 17 w(broadcast\(MPI)p
687 2700 V 15 w(Cond)h(cond\))1967 46 y Fm(1)1967 103
y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967
385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959
836 y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959
1062 y(19)1959 1119 y(20)1959 1175 y(21)1959 1232 y(22)1959
1288 y(23)1959 1345 y(24)1959 1401 y(25)1959 1457 y(26)1959
1514 y(27)1959 1570 y(28)1959 1627 y(29)1959 1683 y(30)1959
1740 y(31)1959 1796 y(32)1959 1853 y(33)1959 1909 y(34)1959
1966 y(35)1959 2022 y(36)1959 2078 y(37)1959 2135 y(38)1959
2191 y(39)1959 2248 y(40)1959 2304 y(41)1959 2361 y(42)1959
2417 y(43)1959 2474 y(44)1959 2530 y(45)1959 2587 y(46)1959
2643 y(47)1959 2699 y(48)p eop
%%Page: 37 39
37 38 bop 75 -100 a Fk(6.12.)34 b(MPI)15 b(AND)g(THREADS)1179
b Fr(37)75 49 y Fg(MPI)p 150 49 15 2 v 17 w(COND)p 263
49 V 16 w(BROADCAST\(COND\))170 106 y(INTEGER)23 b(COND)75
192 y(int)g(MPI::Cond)p 389 192 V 16 w(broadcast\(MPI::Cond)f(cond\))75
373 y Fl(MPI)p 160 373 14 2 v 16 w(COND)p 303 373 V 17
w(W)l(AIT\(cond\))117 450 y Fi(IN)155 b Fl(cond)498 b
Fi(condition)13 b(to)h(w)o(ait)f(on)75 575 y Fg(int)23
b(MPI)p 245 575 15 2 v 17 w(Cond)p 358 575 V 17 w(wait\(MPI)p
567 575 V 16 w(Cond)g(cond\))75 661 y(MPI)p 150 661 V
17 w(COND)p 263 661 V 16 w(WAIT\(COND\))170 718 y(INTEGER)g(COND)166
804 y Fr(These)10 b(are)g(the)g(MPI)h(extensions)f(of)g(the)g(P)o(osix)
g(calls)i Fl(pthread)p 1229 804 14 2 v 18 w(cond)p 1336
804 V 17 w(signal,)f(pthread)p 1627 804 V 18 w(cond)p
1734 804 V 17 w(b)o(roadcast)75 861 y Fr(and)g Fl(pthread)p
305 861 V 18 w(cond)p 412 861 V 17 w(w)o(ait)p Fr(.)18
b(The)11 b(cond)p 721 861 V 17 w(w)o(ait)g(call)g(is)h(blo)q(c)o(king.)
20 b(The)11 b(cond)p 1333 861 V 16 w(signal)h(call)g(un)o(blo)q(c)o(ks)
g(at)e(least)75 917 y(one)17 b(of)f(the)h(threads)f(w)o(aiting)h(on)g
(the)g(condition)h(\(if)f(an)o(y\))f(and)h(the)f(cond)p
1395 917 V 17 w(broadcast)g(call)i(un)o(blo)q(c)o(ks)75
974 y(all)e(threads)f(that)g(are)f(w)o(aiting)i(on)f(the)g(condition.)
166 1077 y Ff(Discussion:)34 b Fi(I)14 b(ha)o(v)o(e)f(left)h(the)g
(extension)h(of)e Fh(pthread)p 1065 1077 13 2 v 17 w(cond)p
1163 1077 V 16 w(timedw)o(ait)h Fi(to)g(the)g(real-time)f(p)q(eople.)
166 1181 y Fr(Prede\014ned)j(attributes)f(will)i(b)q(e)f(pro)o(vided,)g
(b)q(oth)f(for)g(m)o(utexes)g(and)g(for)g(condition)h(v)m(ariables.)-32
46 y Fm(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272
y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780
y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006
y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457
y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909
y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587
y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF