new version of chapter

Steve Huss-Lederman (lederman@cs.wisc.edu)
Mon, 12 Aug 1996 12:09:11 -0500

Attached is a new version of the chapter. It has had many modest
changes since the last version. I am sending out this one now due to
the large number of changes since the version about a week ago.

Steve
----------------------------------------------------------------------
%!PS-Adobe-2.0
%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
%%Title: temp.dvi
%%Pages: 41
%%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.12:1207
%%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 23 121 df<13E01201EA0380EA0700120E5AA25AA25AA35AA91270A37EA2
7EA27E7EEA0380EA01E012000B217A9C16>40 D<12C07E12707E7E7EA27EA2EA0380A3EA
01C0A9EA0380A3EA0700A2120EA25A5A5A5A5A0A217B9C16>I<127012F8A312701200A8
127012F8A312700512789116>58 D<EA7FF8EAFFFE6C7EEA1C0FEB0780EB03C01301A214
E01300A8EB01C0A21303EB0780130F387FFF00485AEA7FF81319809816>68
D<387F07F038FF8FF8387F07F0381C01C0A7EA1FFFA3EA1C01A9387F07F038FF8FF8387F
07F01519809816>72 D<EA7FFCEAFFFEEA7FFCEA0380B3EA7FFCEAFFFEEA7FFC0F197D98
16>I<38FC07E0EAFE0FA2383A0B80EA3B1BA513BBEA39B3A413F3EA38E3A21303A538FE
0FE0A313197F9816>77 D<EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F
381FFF005B13F8001CC7FCA7127F487E6CC7FC12197F9816>80 D<EA1FE0487E487EEA78
3CEA300E1200A2EA03FE121FEA3E0E127012E0A3EA783E387FFFE0EA3FE7EA0F8313127E
9116>97 D<EA03F8EA0FFCEA1FFEEA3C1EEA780CEA70005AA57EEA70071278EA3E0EEA1F
FCEA0FF8EA03F010127D9116>99 D<133FA31307A4EA03C7EA0FF748B4FCEA3C1F487EEA
700712E0A6EA700F12786C5A381FFFE0EA0FF7EA07C713197F9816>I<EA03F0EA0FFC48
7EEA3C0F487E3870038012E0B5FCA300E0C7FCA2387003801278EA3E07381FFF00EA07FE
EA01F811127E9116>I<131E137F3801FF8013C7380383001380A2EA7FFFB5FCA2EA0380
ACEA7FFC487E6C5A11197F9816>I<EA7FC012FF127F1201B3EA7FFFB512806C13001119
7E9816>108 D<38F9C38038FFEFC0EBFFE0EA3C78A2EA3870AA38FE7CF8A31512809116>
I<EAFC78EAFDFCB47EEA1F0FEA1E07121CAA38FF8FE0139F138F13127F9116>I<EA03E0
EA0FF8487EEA3C1E487EEA700738E00380A5EAF00700701300EA780FEA3C1EEA1FFC6C5A
EA03E011127E9116>I<3803E380EA0FF3EA1FFBEA3E0FEA78071270EAE003A6EA700712
78EA3C1FEA1FFBEA0FF3EA03E3EA0003A6EB1FF0EB3FF8EB1FF0151B7F9116>113
D<387F0FC038FF3FE0EA7F7F3807F040EBC0005BA290C7FCA8EA7FFC12FF127F13127F91
16>I<EA0FECEA3FFC127FEAF03CEAE01CA2EA7000EA7F80EA1FF0EA07F8EA003CEA600E
12E012F0EAF81EEAFFFC13F8EAC7E00F127D9116>I<12035AA4EA7FFFB5FCA20007C7FC
A75BEB0380A3EB8700EA03FE6C5A6C5A11177F9616>I<EAFC3FA3EA1C07AB131F381FFF
E0EA0FF7EA07C713127F9116>I<387F1FC0133F131F380F1E006C5AEA03B813F012016C
5A12017FEA03B8EA073C131CEA0E0E387F1FC038FF3FE0387F1FC013127F9116>120
D E /Fb 44 123 df<EB0FE0EB7FF8EBF81C3801E07C1203EA07C0A2143891C7FCA3EBC1
FEB5FCA23807C03EB0393FF9FFC0A21A20809F1D>12 D<EAFFF0A40C047F8B11>45
D<1238127C12FEA3127C123807077C860F>I<137013F0120712FF12F91201B3A4387FFF
C0A2121D7D9C1A>49 D<133F3801FFC03807C0E0EA0F81381F03F0121E123E127CEB01E0
90C7FCEAFC1013FF00FD13C0EB03E038FE01F0A200FC13F8A4127CA3003C13F0123E381E
03E0380F07C03807FF803801FE00151D7E9C1A>54 D<1238127C12FEA3127C12381200A6
1238127C12FEA3127C123807147C930F>58 D<EA07F8EA1FFE38381F80EA780F00FC13C0
A3127838301F8000001300133E5B13705BA25BA690C7FCA4EA01C0487E487EA36C5A6C5A
12207D9F19>63 D<14E0A2497EA3497EA2EB06FCA2EB0EFEEB0C7EA2497EA201307F141F
01707FEB600FA2496C7E90B5FC4880EB8003000380EB0001A200066D7EA2000E803AFFE0
0FFFE0A2231F7E9E28>65 D<B512FEECFFC03907E007F0EC01F86E7E157E81A2ED1F80A3
16C0A91680A3ED3F00A2157E5D4A5AEC07F0B612C04AC7FC221F7E9E28>68
D<B612E0A23807E00714011400156015701530A21430A21500147014F013FFA213E01470
1430150CA214001518A31538157815F8EC03F0B6FCA21E1F7E9E22>I<B612E0A23807E0
0714011400156015701530A21430A21500147014F013FFA213E014701430A391C7FCA8B5
7EA21C1F7E9E21>I<903807FC0290383FFF0E9038FE03DE3903F000FE4848133E484813
1E485A48C7120EA2481406127EA200FE91C7FCA591381FFFE0A2007E9038007E00A2127F
7EA26C7E6C7E6C7E6C6C13FE3800FE0190383FFF8E903807FC06231F7D9E29>I<B5380F
FFF0A23A07E0007E00AC90B512FEA29038E0007EADB5380FFFF0A2241F7E9E29>I<B5FC
A2EA07E0B3A9B5FCA2101F7E9E14>I<B57EA2D807E0C7FCB115C0A31401A3EC0380A214
0F141FB6FCA21A1F7E9E1F>76 D<D8FFE0EC3FF86D147F00071600D806F814DFA3017CEB
019FA26DEB031FA26D1306A290380F800CA2903807C018A3903803E030A2903801F060A2
903800F8C0A2EC7D80A2EC3F00A3141ED8FFF0903803FFF8140C2D1F7E9E32>I<D8FFE0
EBFFF07F0007EC06007FEA06FC137E7F1480131FEB0FC0EB07E0EB03F0EB01F814FC1300
147E143FEC1F8615C6EC0FE61407EC03F6EC01FE1400A2157E153E151E150ED8FFF01306
A2241F7E9E29>I<B512FEECFF803907E00FE0EC03F0EC01F8A215FCA515F8A2EC03F0EC
0FE090B51280ECFE0001E0C7FCACB5FCA21E1F7E9E24>80 D<B512FCECFF803907E00FE0
EC03F081140181A45D14035DEC0FE090B5128002FCC7FCEBE03FEC0F8081140781A381A3
1630EC03F802011360B53800FFC0ED3F80241F7E9E27>82 D<3803FC08380FFF38381E03
F8EA3800481378143812F01418A26C13007EEA7FC013FE383FFF806C13C06C13E06C13F0
C613F81307EB00FC147C143C12C0A36C1338147800F8137038FE01E038EFFFC000811300
161F7D9E1D>I<007FB512FCA2397C07E07C0070141C0060140CA200E0140E00C01406A4
00001400B10003B512C0A21F1E7E9D24>I<B53801FFE0A23A07E0000C00B3A400035C6C
7E5D6C6C5B90387E03C090381FFF80D903FCC7FC231F7E9E28>I<EA07FC381FFF80383F
07C0EB03E0EB01F0A2120C1200133FEA07FDEA1F81EA3E01127C12F8A3EAFC02EA7E0C38
3FF87E380FE03E17147F9319>97 D<B4FCA2121FAAEB1FC0EB7FF0EBE0F8EB807CEB007E
143EA2143FA6143EA2147C1380381EC1F8381C7FE038181F8018207E9F1D>I<EA01FE38
07FF80381F0FC0123EA2127CEB030000FCC7FCA6127C127E003E1360003F13C0EA1F8138
07FF00EA01FC13147E9317>I<EB07F8A21300AAEA01F8EA07FEEA1F83EA3E01EA7E0012
7CA212FCA6127CA2127EEA3E01EA1F07380FFEFFEA03F818207E9F1D>I<EA01FE3807FF
80380F83C0381E01E0383E00F05A14F812FCB5FCA200FCC7FCA3127CA26C1318121E380F
80703807FFE0C6138015147F9318>I<EB3F80EBFFC03803E3E0EA07C71387120FEB83C0
EB8000A5EAFFFCA2EA0F80B0EA7FF8A213207F9F10>I<B4FCA2121FAAEB0FC0EB3FE0EB
61F0EBC0F813801300AD38FFE7FFA218207D9F1D>104 D<121C123E127FA3123E121CC7
FCA6B4FCA2121FB0EAFFE0A20B217EA00E>I<B4FCA2121FAAEB01FEA2EB00F014C0EB03
80EB0700130C5B137C13FC139E130F001E1380EB07C01303EB01E014F0EB00F838FFC3FF
A218207E9F1C>107 D<B4FCA2121FB3AAEAFFE0A20B207E9F0E>I<3AFE0FE03F8090391F
F07FC03A1E70F9C3E09039407D01F0EB807E121FEB007CAC3AFFE3FF8FFEA227147D932C
>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<39FFE07F80A2391F001C00380F8018A26C
6C5AA26C6C5AA2EBF0E000015B13F900005B13FF6DC7FCA2133EA2131CA21318A2EA7830
12FC5BEAC0E0EAE1C0EA7F80001EC8FC191D7F931C>I<383FFFE0A2383C07C038380F80
EA701F38603F00133E5BC65A1201485AEBE060EA07C0EA0F80001F13E0383F00C0EA3E01
EA7C03B5FCA213147F9317>I E /Fc 7 113 df<127012F012F8A212781208A31210A312
20A21240050E7C840D>59 D<EC01C0EC0780EC1E001478EB01E0EB0780010EC7FC133813
F0EA03C0000FC8FC123C12F0A2123C120FEA03C0EA00F01338130E6D7EEB01E0EB007814
1EEC0780EC01C01A1A7C9723>I<12E01278121EEA0780EA01E0EA0078131C1307EB03C0
EB00F0143C140FEC03C0A2EC0F00143C14F0EB03C049C7FC131C1378EA01E0EA0780001E
C8FC127812E01A1A7C9723>62 D<EBF180380389C038070780EA0E03121C123C38380700
1278A3EAF00EA31410EB1C20A2EA703CEB5C40EA308C380F078014147E9318>97
D<13E01201A2EA00C01300A7120E1213EA23801243A3EA87001207A2120EA25AA21320EA
3840A31380EA1900120E0B1F7E9E10>105 D<14C0EB01E0A214C090C7FCA7131E1323EB
43801383EA0103A2380207001200A3130EA45BA45BA45BA21230EA78E0EAF1C0EA638000
3EC7FC1328819E13>I<3803C1E038046218EB741CEA0878EB701EA2EA10E01200A33801
C03CA3143838038078147014E0EBC1C038072380EB1E0090C7FCA2120EA45AA2EAFFC017
1D819317>112 D E /Fd 27 122 df<EC3FE0ECE010903801803801031378A290380700
301500A3130EA390B512E0EB0E0090381C01C0A4EC03801338A3EC0700A2137801701310
EC0E20A313609038E00640EC038091C7FC5BA21201EA3180127948C8FC1262123C1D2982
9F1A>12 D<EA7FF0EAFFE0127F0C037D8A10>45 D<127012F8A212F012E005057B840E>
I<14021406A2140E141EA2143F142F144F14CF148FEB010FA21302A213041308A2011013
8014071320EB3FFFEB40071380A2EA0100A2120212061204001E14C039FF807FF81D207E
9F22>65 D<48B512FE39001E001C150C1504A25BA490387804081500A2140C495AEBFFF8
EBF018A23801E010A3EC001048481320A21540A248481380140115001407380F001FB512
FE1F1F7D9E1F>69 D<90B5FC90381E03C0EC00E0157015785BA44913F0A2EC01E015C090
38F00700141EEBFFF0EBF01C48487E140F8015803903C00F00A43807801E1508A2151000
0F130ED8FFF01320C7EA03C01D207D9E21>82 D<EBF180380389C038070780EA0E03121C
123C383807001278A3EAF00EA31420EB1C40A2EA703C135C38308C80380F070013147C93
17>97 D<137EEA01C138030080EA0E07121E001C1300EA3C0248C7FCA35AA5EA70011302
EA3004EA1838EA07C011147C9315>99 D<1478EB03F8EB0070A414E0A4EB01C0A213F1EA
038938070780EA0E03121C123C383807001278A3EAF00EA31420EB1C40A2EA703C135C38
308C80380F070015207C9F17>I<137CEA01C2EA0701120E121C123CEA3802EA780CEA7B
F0EA7C0012F0A4127013011302EA3804EA1838EA07C010147C9315>I<1478EB019CEB03
3CA2EB07181400A2130EA5EBFFE0EB1C00A45BA55BA55BA5485AA35B1231007BC7FC12F3
1266123C1629829F0E>I<EB1E30EB7138EBE0F03801C070EA03801207EB00E05AA3381E
01C0A4EB0380A2EA0E07130B38061700EA01E7EA0007A2130EA21230EA781C485AEA6070
EA3FC0151D7F9315>I<EA01E0120FEA01C0A4485AA448C7FCA2131E1363380E8180380F
01C0120EA2381C0380A438380700A3EB0E1000701320A2131CEB0C4000E0138038600700
14207D9F17>I<13C0EA01E0A213C0C7FCA7120E12131223EA4380EA4700A21287120EA3
5AA3EA38401380A21270EA31001232121C0B1F7C9E0E>I<EA03C0121FEA0380A4EA0700
A4120EA45AA45AA45AA3127112E2A4126412380A207C9F0C>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 68 124 df<EB7E1F3901C1B180390303
E3C0000713C3000EEBC180903801C000A6B512FC380E01C0B0387F87FC1A1D809C18>11
D<137E3801C180EA0301380703C0120EEB018090C7FCA5B512C0EA0E01B0387F87F8151D
809C17>I<EB7FC0EA01C1EA03031207EA0E01A7B5FCEA0E01B0387FCFF8151D809C17>I<
EA6060EAF0F0EAF8F8EA6868EA0808A3EA1010A2EA2020EA4040EA80800D0C7F9C15>34
D<126012F012F812681208A31210A2122012401280050C7C9C0C>39
D<1380EA0100120212065AA25AA25AA35AA412E0AC1260A47EA37EA27EA27E12027EEA00
80092A7C9E10>I<7E12407E12307EA27EA27EA37EA41380AC1300A41206A35AA25AA25A
12205A5A092A7E9E10>I<1306ADB612E0A2D80006C7FCAD1B1C7E9720>43
D<126012F0A212701210A41220A212401280040C7C830C>I<EAFFE0A20B0280890E>I<12
6012F0A2126004047C830C>I<130113031306A3130CA31318A31330A31360A213C0A3EA
0180A3EA0300A31206A25AA35AA35AA35AA35AA210297E9E15>I<5A1207123F12C71207
B3A5EAFFF80D1C7C9B15>49 D<EA07C0EA1830EA201CEA400C130EEAF00F12F81307A212
70EA000F130EA2131CA213381370136013C0EA0180EA0300EA0601120C1218EA1002EA3F
FE127F12FF101C7E9B15>I<130CA2131C133CA2135C13DC139CEA011C12031202120412
0C1208121012301220124012C0B512C038001C00A73801FFC0121C7F9B15>52
D<1240387FFF801400A2EA4002485AA25B485AA25B1360134013C0A212015BA21203A412
07A66CC7FC111D7E9B15>55 D<EA03E0EA0C30EA1008EA200C13061260A21270A2EA7C0C
EA3E18EA3FB0EA1FE0EA07F013F8EA18FCEA307EEA601E130FEAC0071303A4EA60021304
EA300CEA1C10EA07E0101D7E9B15>I<126012F0A212601200AA126012F0A2126004127C
910C>58 D<126012F0A212601200AA126012F0A212701210A41220A212401280041A7C91
0C>I<007FB512C0B612E0C9FCA8B612E06C14C01B0C7E8F20>61
D<EA0FE0EA3038EA401CEAE00E12F0A3EA000C131C1330136013C0138012011300A6C7FC
A51203EA0780A2EA03000F1D7E9C14>63 D<1306A3130FA3EB1780A2EB37C01323A2EB43
E01341A2EB80F0A338010078A2EBFFF83802003CA3487FA2000C131F80001E5BB4EBFFF0
1C1D7F9C1F>65 D<B512C0380F00788080140E140FA4140E141E5C14F8EBFFF0EB003C80
80801580A5EC0F00A2141E1478B512E0191C7F9B1D>I<90381F8080EBE0613801801938
070007000E13035A14015A00781300A2127000F01400A8007014801278A212386CEB0100
A26C13026C5B380180083800E030EB1FC0191E7E9C1E>I<B512C0380F00F0143C140E80
A2EC038015C01401A215E0A815C0A21403158014071500140E5C1470B512C01B1C7E9B20
>I<B512FC380F003C140C1404A214061402A213011400A35B13FF13037FA31401130014
02A31406A2140C143CB512FC181C7E9B1C>I<B512F8380F007814181408A2140C1404A2
13011400A35B13FF13037FA490C7FCA8EAFFF8161C7E9B1B>I<39FFF0FFF0390F000F00
AC90B5FCEB000FAD39FFF0FFF01C1C7F9B1F>72 D<EAFFF0EA0F00B3A8EAFFF00C1C7F9B
0F>I<3807FF8038007C00133CB3127012F8A21338EA7078EA4070EA30E0EA0F80111D7F
9B15>I<EAFFF8EA0F8090C7FCB01408A31418A2141014301470EB01F0B5FC151C7E9B1A>
76 D<B46CEBFF80000FECF800A2390BC00178A33809E002A23808F004A3EB7808A3EB3C
10A3EB1E20A3EB0F40A2EB0780A3EB0300121C3AFF8307FF80211C7E9B26>I<B4EB1FF0
390F8003809038C00100120BEA09E0EA08F0A21378133C133E131E130F14811307EB03C1
EB01E114F113001479147D143D141FA2808080121CB46C7E1C1C7F9B1F>I<EB3F80EBE0
E03803803848487E000E7F487F003C148000381303007814C0A20070130100F014E0A800
7014C000781303A200381480003C1307001C14006C130E6C5B6C6C5A3800E0E0EB3F801B
1E7E9C20>I<B51280380F00E01478143C141C141EA5141C143C147814E0EBFF8090C7FC
ACEAFFF0171C7E9B1C>I<B5FC380F01E0EB007880141C141EA4141C143C5CEB01E001FF
C7FCEB01E0EB0070147880A61510A2141CA239FFF00E20C7EA03C01C1D7E9B1F>82
D<3807E080EA1C19EA30051303EA600112E01300A36C13007E127CEA7FC0EA3FF8EA1FFE
EA07FFC61380130FEB07C0130313011280A300C01380A238E00300EAD002EACC0CEA83F8
121E7E9C17>I<007FB512C038700F010060130000401440A200C014201280A300001400
B1497E3803FFFC1B1C7F9B1E>I<39FFF01FF0390F000380EC0100B3A26C130213800003
5BEA01C03800E018EB7060EB0F801C1D7F9B1F>I<3AFFE1FFC0FF3A1F003E003C001E01
3C13186C6D1310A32607801F1320A33A03C0278040A33A01E043C080A33A00F081E100A3
9038F900F3017913F2A2017E137E013E137CA2013C133C011C1338A20118131801081310
281D7F9B2B>87 D<EA0808EA1010EA2020EA4040A2EA8080A3EAB0B0EAF8F8EA7878EA30
300D0C7A9C15>92 D<EA1FC0EA3070EA78387F12301200A2EA01FCEA0F1C123812701260
00E01340A3EA603C38304E80381F870012127E9115>97 D<12FC121CAA137CEA1D87381E
0180381C00C014E014601470A6146014E014C0381E018038190700EA10FC141D7F9C17>
I<EA03F8EA0C0CEA181E1230EA700CEA600012E0A61260EA70021230EA1804EA0C18EA03
E00F127F9112>I<EB1F801303AAEA03F3EA0E0BEA1807EA30031270126012E0A6126012
701230EA1807EA0E1B3803E3F0141D7F9C17>I<EA07E0EA0C30EA1818EA300CEA700EEA
600612E0EAFFFEEAE000A41260EA70021230EA1804EA0C18EA03E00F127F9112>I<13F8
EA018CEA071E1206EA0E0C1300A6EAFFE0EA0E00B0EA7FE00F1D809C0D>I<EB03803807
C4C0EA1C783838388038301800EA701CA4EA3018EA38386C5AEA27C00020C7FCA21230EA
3FF86CB4FC1480EA2003386001C0EAC000A33860018038300300EA1C0EEA07F8121C7F92
15>I<12FC121CAA137C1387EA1D03001E1380121CAD38FF9FF0141D7F9C17>I<1218123C
A21218C7FCA712FC121CB0EAFF80091D7F9C0C>I<13C0EA01E0A2EA00C01300A7EA07E0
1200B3A21260EAF0C012F1EA6180EA3E000B25839C0D>I<12FC121CAAEB0FE0EB0780EB
06005B13105B5B13E0121DEA1E70EA1C781338133C131C7F130F148038FF9FE0131D7F9C
16>I<12FC121CB3A9EAFF80091D7F9C0C>I<39FC7E07E0391C838838391D019018001EEB
E01C001C13C0AD3AFF8FF8FF8021127F9124>I<EAFC7CEA1C87EA1D03001E1380121CAD
38FF9FF014127F9117>I<EA03F0EA0E1CEA1806487E00701380EA600100E013C0A60060
1380EA700300301300EA1806EA0E1CEA03F012127F9115>I<EAFC7CEA1D87381E018000
1C13C0EB00E0A21470A614E0A2EB01C0001E1380381D0700EA1CFC90C7FCA7B47E141A7F
9117>I<3803E080EA0E19EA1805EA3807EA7003A212E0A61270A2EA38071218EA0E1BEA
03E3EA0003A7EB1FF0141A7F9116>I<EAFCE0EA1D38EA1E78A2EA1C301300ACEAFFC00D
127F9110>I<EA1F90EA2070EA4030EAC010A212E0EAF800EA7F80EA3FE0EA0FF0EA00F8
EA8038131812C0A2EAE010EAD060EA8FC00D127F9110>I<1204A4120CA2121C123CEAFF
E0EA1C00A91310A5120CEA0E20EA03C00C1A7F9910>I<38FC1F80EA1C03AD1307120CEA
0E1B3803E3F014127F9117>I<38FF07E0383C0380381C0100A2EA0E02A2EA0F06EA0704
A2EA0388A213C8EA01D0A2EA00E0A3134013127F9116>I<39FF3FC7E0393C0703C0001C
EB01801500130B000E1382A21311000713C4A213203803A0E8A2EBC06800011370A2EB80
30000013201B127F911E>I<38FF0FE0381E0700EA1C06EA0E046C5AEA039013B0EA01E0
12007F12011338EA021C1204EA0C0E487E003C138038FE1FF014127F9116>I<38FF07E0
383C0380381C0100A2EA0E02A2EA0F06EA0704A2EA0388A213C8EA01D0A2EA00E0A31340
A25BA212F000F1C7FC12F312661238131A7F9116>I<EA7FFCEA70381260EA407013F013
E0EA41C012031380EA0700EA0F04120E121CEA3C0CEA380812701338EAFFF80E127F9112
>I<B512F01401808B15>I E /Fi 47 122 df<1478137C13FC12013803C0005B1207A838
FFFC78A3EA0780B3152480A31A>12 D<EAFFF8A30D03808C10>45
D<12F0A404047B830E>I<1340EA01C0120712FFA212FB1203B3A7B5FCA310227CA118>
49 D<EA03F0EA0FFC487EEA3C1F38300780387003C0126000E013E0EAC0011240A21200
A3EB03C0A2EB0780A2EB0F00131E5B5B5B485A5B485A48C7FC120E5A5A5AB512E0A31322
7EA118>I<EA03F0EA07FCEA1FFFEA3E0F38380780387003C01220A21200A3EB0780A2EB
0F00133EEA03FC5B13FEEA000FEB0780EB03C0A2EB01E0A5128038C003C012E038700780
EA3C0F381FFF00EA0FFCEA03F013237EA118>I<131FA2132FA2136F13EF13CF1201A2EA
038FA21207130F120F120E121E123CA21278A212F0B512F8A338000F00A915217FA018>
I<387FFF80A30078C7FCA9EA79F8EA7BFCEA7FFFEB0F80EA7E07387C03C01278380001E0
A7384003C0A212E038700780387C1F00EA3FFEEA0FFCEA03F013227EA018>I<137E48B4
FC5AEA07C148C7FC121EA25AA25AA213F8EAF1FEEAF7FF38FF0F80EAFC0738F803C0A213
0100F013E0A51270A21278EB03C01238003C1380EA1C07381F0F00EA0FFE6C5AEA01F013
237EA118>I<B512E0A3C7FCEB01C0EB038013071400130E131E131C133C13381378A25B
A25B1201A3485AA5485AA713217EA018>I<EB0F80A2497EA2131DEB3DE013391338EB78
F0A2EB7070EBF078A213E000017FA213C000037FA2138000077FA290B5FC481480A2380E
0007001EEB03C0A24814E01401A24814F01400A24814F81D237FA220>65
D<EB0FF0EB7FFC90B5FC3801F01F3807C00749C7FC48C8FC121E123E123CA25AA35AA912
78A37EA2123E121E7E6C6C1380EBC0033801F00F6CB51200EB7FFCEB0FF019257DA31F>
67 D<EAFFFEEBFFC08038F003F0EB00F8147C80141E80A2EC0780A3EC03C0A915801407
A3EC0F005C141E5C14F81303B512E05C49C7FC1A237BA223>I<B512F0A300F0C7FCACB5
12E0A300F0C7FCAEB512F8A315237BA21D>I<B512F0A300F0C7FCADB512C0A300F0C7FC
B014237BA21C>I<EB0FF0EB3FFE90B512803801F80F3803E003D80780C7FC48C8FC121E
A25AA25AA35AA6ECFFC0A300781303A37EA27EA27EEA0780EA03E03801F8076CB5FC013F
1300EB0FF81A257DA321>I<00F0131EAFB512FEA338F0001EB117237BA222>I<12F0B3B1
04237CA20D>I<12F0B3AEB512C0A312237BA21A>76 D<00FC147E6C14FEA300F7EB01DE
A3EB800300F3149EA2EBC007A200F1141EA2EBE00F00F0130EA2EBF01EA2EB701CEB783C
A2EB3838EB3C78A2EB1C70A2EB1EF0EB0EE0A2130FEB07C0A390C7FC1F237BA22A>I<EA
FFFEEBFF8014C038F003E0EB00F01478A2143CA61478A214F0EB03E0B512C01480EBFE00
00F0C7FCAF16237BA21F>80 D<EAFFFCEBFF8014C038F003E0EB00F014781438143CA514
38147814F0EB03E0B512C01480EBFE00EAF01E7FA2EB0780130314C0EB01E0A2EB00F0A2
1478A2143C141EA2140F18237BA21F>82 D<B612F0A3D8000FC7FCB3AE1C237EA221>84
D<00F0133CB3A900781378A36C13F0381E01E0EA1F87380FFFC000031300EA00FC16247B
A221>I<EA07F0EA3FFC487EEA781FEA400F38000780A4137FEA07FF121FEA3E07127812
F0A3130FEA7C1FEA7FFFEA3FF7EA1F8711167E9517>97 D<12F0AD13F8EAF3FEB5FC38FE
0F80EAF80738F003C0A2EB01E0A7130314C0A238F80780EAFE1F38F7FF00EAF3FCEAF1F8
13237DA219>I<EA01FCEA07FF481380EA1F03EA3C0148C7FCA2127012F0A61278A36C13
40381F03C0EA0FFF6C13803801FC0012167E9516>I<EB01E0ADEA03E1EA0FF9EA1FFFEA
3F07EA3C03EA7801A212F0A812781303123CEA3E0FEA1FFDEA0FF9EA03E113237EA219>
I<EA01F8EA07FE487E381F0780383C03C0EA7801A2387000E0B5FCA300F0C7FCA3127012
78127C6C1340381F03C0EA0FFF6C13803800FC0013167F9516>I<137FEA01FF5AEA07C0
13005AA8EAFFF8A3EA0F00B3102380A20F>I<3803F078380FFFF85A383E1F00EA3C0F38
780780A5383C0F00EA3E1FEA1FFE485AEA33F00070C7FCA21278EA3FFEEBFFC06C13E048
13F0EA780138F000F81478A4007813F0383E03E0381FFFC06C13803801FC0015217F9518
>I<12F0ADEAF1F8EAF3FCEAF7FEEAFE1EEAF80FA212F0B010237CA219>I<12F0A41200A9
12F0B3A404237DA20B>I<12F0B3B104237DA20B>108 D<39F0F807C039F3FE1FF039F7FF
3FF839FE0F707800FCEBE07C39F807C03CA200F01380AF1E167C9527>I<EAF1F8EAF3FC
EAF7FEEAFE1EEAF80FA212F0B010167C9519>I<EA01FCEA07FF481380381F07C0383C01
E0387800F0A20070137000F01378A6007813F0A2EA7C01383E03E0381F07C0380FFF806C
1300EA01FC15167F9518>I<EAF0F8EAF3FEB5FC38FE1F80EAF80738F003C0A214E01301
A6130314C0130700F81380EAFE1F38F7FF00EAF3FCEAF1F800F0C7FCAA13207D9519>I<
3803E1E0EA07F9EA1FFD130FEA3C03127CEA780112F812F0A612F812781303123CEA3F0F
EA1FFDEA0FF9EA03E1EA0001AA13207E9519>I<EAF0E012F312F7EAFF005A5A5AA25AAE
0B167C9511>I<EA07F0EA1FFCEA3FFEEA3C0EEA78061300A2127C123F13F0EA1FF8EA0F
FCEA01FEEA001F130FA312C0EAF81EEAFFFEEA3FFCEA0FF010167F9513>I<121EA6EAFF
FCA3EA1E00AE1308EA1F1CEA0FFC13F8EA07C00E1C7F9B12>I<EAF00FB1131FEAF83FEA
7FFF13CFEA1F0F10167C9519>I<38F001E0A212F8387803C0A2003C13801307A2001E13
005BA2EA0E0EEA0F1EA2EA071C139C13BCEA03B8A213F86C5AA213167F9516>I<39F007
803CEB0FC0A2D8780D1378131D14E0131CD83C1813F0133814F0001C14E0001E13711370
1479000EEB39C01360000F133B00071480141BEBC01FA2000314001E167F9521>I<0078
13F0387C01E0383E03C0EA1E07000F138038078F0013DEEA03FE6C5A6C5A137013F8487E
EA03DC139EEA078F380F0780121EEB03C0383C01E0387800F000F813F81516809516>I<
38F001E0A2387803C0A2127C383C0780A2121EEB0F00A2120F130E131E1207139C120313
9813B8120113F01200A25BA212015BA2485A1207007FC7FCA2127C13207F9516>I
E /Fj 36 91 df<1230127812F81278127005057C840D>46 D<14011403A21406A2140C
A214181430A21460A214C0A2EB0180A2EB0300A21306A25B5BA25BA25BA25BA2485AA248
C7FCA212065AA25AA25AA25AA25AA25A182D7FA117>I<137EEA01C338030180000713C0
EA0E0014E05AA2EA3C0112381278A538F003C0A51480130712E01400A2130E1260EA701C
EA3038EA3870EA0FC0131F7C9D17>I<13181338EA01F8EA0E701200A513E0A6EA01C0A6
EA0380A6EA07001380EAFFFC0E1E7B9D17>I<EB3F80EBC1E038010070000213785AA200
0F137C1380A2EB00781206C712F814F0EB01E014C0EB0380EB0700130E5B5B13605B485A
380300201206000813405A383FFFC0481380B5FC161E7E9D17>I<137F380183C0380201
E0EA0400000713F05A1301A2000013E0A2EB03C0EB07801400131CEA01F8EA000E7F1480
14C0130313071230127812F8A200F0138038800F00EA400E6C5AEA1078EA0FE0141F7D9D
17>I<1460A214E0EB01C013031305130D13091311EB2380134313C31383EA0103120238
04070012081218121012201240B512F038000E00A55B131E3801FFC0141E7E9D17>I<38
0180303803FFE014C0140013FC0002C7FCA25AA4137CEA0587380A0380EA0C01000813C0
120014E0A4387003C012F812F000E01380EA800700401300130E6C5AEA1070EA0FC0141F
7D9D17>I<EB1F80EB7040EBC020380180E0EA03011207380E00C0001E1300121C123C12
38EA78F8EA790EEA7A07EA7C0300F81380A200F013C0A4EB078012E0A214005BEA600EEA
701CEA3018EA1870EA07C0131F7C9D17>I<1220383FFFF04813E014C03840008038C001
0012801302485A5B5B5BA25B13C0485AA2120390C7FC5AA25A120EA2121EA35AA3121814
1F7A9D17>I<137EEA01C338030180000613C0120EEA1C00003C13E0A213011278A41303
A2003813C01307EA1C0BEA0C133803E380EA0007A214005BEA600EEAF01C1318485AEA80
60EA41C0003FC7FC131F7C9D17>57 D<1408140C141C143CA2147C147E149EA2EB011EA2
1302801304A21308A20110138014071320A2EB7FFF90384007C0EB8003A2EA0100A21202
EC01E01206001F130339FF801FFE1F207F9F22>65 D<0007B5FC3900F803C090387801E0
EC00F04913F8A515F03801E001EC03E015C0EC0F809038FFFE009038E00F803903C003C0
EC01E015F0A21400A2485A1401A215E01403EC07C0390F000F80EC3E00B512F01D1F7E9E
20>I<ECFE02903807018690381C004E0170133E49131E4848131C4848130C120748C7FC
5A121E003E1408003C1400127CA45AA4127815101520A27E1540001C14806CEB01006C13
023803800C3800E030EB3FC01F217C9F21>I<0007B57E3900F801E0903878007081497F
151E150E150FA348481480A6484814005DA3151E153E4848133C5DA25D4A5A4A5A260F00
0FC7FC143CB512F0211F7E9E23>I<0007B512FC3900F8007C0178131C150C5B1504A414
043901E00800A31438EBFFF8EBE0383803C010A4EC00081510485AA21520A2156015C038
0F00011407B612801E1F7E9E1F>I<0007B512F83900F800780178133815185B1508A539
01E00800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E
1E>I<ECFE02903807018690381C004E0170133E49131E4848131C4848130C120748C7FC
5A121E003E1408003C1400127CA45AA2EC3FFEEC01F000781300A2EC01E0A27EA2121C6C
13036CEB05C0380380083900E0304090383FC0001F217C9F24>I<3A07FF83FFC03A00F8
007C000178133CA2495BA648485BA490B5FCEBE0004848485AA64848485AA64848485A01
807F39FFF07FF8221F7E9E22>I<3807FF803800F8001378A25BA6485AA6485AA6485AA6
48C7FC7FEAFFF0111F7E9E10>I<EB7FFCEB03E01301A2EB03C0A6EB0780A6EB0F00A613
1E1230127812F8131CEAF03CEA8038EA40706C5AEA1F8016207E9E17>I<3A07FF803FE0
3A00F8001F000178130C5D4913205D5D4AC7FC1402140848485A5C146014F013E1EBE4F8
3803C878EBD07CEBE03CEBC03E141E141F48487E81140781140381380F00016D487E39FF
F00FFE231F7E9E23>I<3807FFE0D800FCC7FC1378A25BA6485AA6485AA41580EC0100EA
0780A25C14021406140E380F001E147CB512FC191F7E9E1C>I<D807F8EC7FE00000ED7C
00017814BCA2019C495AA21502A2018E13041508D8010E5C1510A26D1320A215400002EC
41E09038038081EC8101A21482A23A0401C403C0A214C8A2EB00F0000C13E04B5A001E01
C07FD8FFC0EB7FFC2B1F7E9E2A>I<D807F8EB7FC0D8007CEB1F00150C015E1304019E5B
138FA2EB8780A2EB83C0D801035BEB01E0A2EB00F0A2147800025C143CA2141EA2140F48
5CEC07C0A21403A21401000C5C001E1300B47E221F7E9E22>I<EB01FCEB0E0790383801
C090387000E0484813F048481378485A153C48C7FC5A001E143E123E123C127CA448147C
A3157815F81278EC01F0007C14E01403003C14C0001CEB0780001EEB0F006C131E380780
383801C0E038007F801F217C9F23>I<0007B5FC3900F803C090387800F015785B157CA4
1578484813F815F0EC01E0EC03C0EC0F00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF8
1E1F7E9E1F>I<EB01FCEB0E0790383803C090387001E03901E000F048481378485A153C
48C7FC5A001E143E123E123C127CA448147CA3157815F8127815F0EC01E0EA7C0F393C10
83C0391C204780001EEB4F00380F405E3807A0783901E0E010EA007F9038006030EC7020
15E0147F15C0EC3F80A2EC1E001F297C9F23>I<3807FFFE3900F8078090387801E0EC00
F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00EBFFF03803C03880141E140EA214
0F48485AA51502D80F001304EB800F39FFF00788C7EA01F01F207E9E21>I<EB1F82EB70
66EBC01E3801800EEA030048130C00061304120EA3000F1300A27FEA07F013FF6C13C06C
13E038003FF0EB03F813001478143CA200401338A3143000601370146000F013C038E801
8038C60300EA81FC17217E9F19>I<003FB512F0383C078000301430126039400F0010A2
12C01280A3D8001E1300A65BA65BA65B7F383FFFE01C1F7A9E21>I<39FFF00FF8391F00
03E06CEB01801400001EEB0100A6481302A6485BA600705BA25CA200785B1238001813C0
6C48C7FCEA0706EA01F81D20799E22>I<3BFFF07FF81FF03B1F000FC007C0001E903907
800380001FED01006C1502140F5EEC17C002135B142301805C000713435E14C3913883E0
401481D981015B13C1D803C213E193C7FC13C415F2EBC80015F4EA01F015F85B5D5B1560
5B000014402C207A9E2F>87 D<3A03FFC0FFC03A007F003E00013C1318013E1310011E5B
011F5B6D5B0281C7FCEB078314C2EB03C414E8EB01F0A2130080A2EB017CEB023CEB043E
EB0C1EEB081F497E132001407FEB8007000180EB0003000780391F8007F039FFC01FFE22
1F7F9E22>I<39FFF001FF391F8000786CC712606D134000071480EBC00100031400EBE0
025C12016D5A00005B6D5A1378EB7C40EB3C80013FC7FC7F131EA3131C133CA513381378
137C3807FF80201F7A9E22>I<0003B512F09038F001E0EB8003010013C00006EB0780EC
0F000004131E143E143C5CC75A495A13035C495A49C7FC131E133E133C4913805B3901E0
0100120313C048485A380F0002001E1306003E130E003C131E4813FCB5FC1C1F7E9E1C>
I E /Fk 50 120 df<3801F1C0120312071301120EA7EAFFF1A2EA0E01B0121D809C16>
13 D<EA01C0EA0380EA0700120EA25AA25AA35AA45AAE1270A47EA37EA27EA27EEA0380
EA01C00A2A7D9E10>40 D<12E012707E7EA27EA27EA3EA0380A4EA01C0AEEA0380A4EA07
00A3120EA25AA25A5A5A0A2A7E9E10>I<12E0A312601240A312C003087C820C>44
D<EA03C0EA0FF0EA1FF8EA3C3CEA381CEA700EA3EAE007ADEA700EA3EA381CEA3C3CEA1F
F8EA0FF0EA07E0101D7E9B15>48 D<EA07C0EA1FF0EA3878EA701CEA601EEAE00EEAC00F
124013071200A2130F130E131E131C133C137813F0EA01E013C0EA0380EA0700120E5A5A
5AB5FCA2101C7E9B15>50 D<007FB512C0B612E0C9FCA8B612E06C14C01B0C7E8F20>61
D<131C133EA2132E1367A2EBE78013C713C300017F1383138100037F1301486C7EA21206
000E1378380FFFF8A2381C003CA2121800387FA248131F80126000E0EB0780191D7F9C1C
>65 D<EAFFF813FF38F00F80EB03C0EB01E0EB00F0A5EB01E0EB07C0B51280EBFE00EBFF
8038F01FC0EB03E0EB01F013001478A514F0EB01E0EB07C0B51280EBFC00151D7C9C1C>
I<EB3FC03801FFF8EA03C03807801848C7FC121E5AA25AA35AA91278A37EA27E6C130838
0780183803C0783801FFF038003F80151F7D9D1B>I<EAFFFC13FF38F00F80EB03E01301
EB00F014781438143CA2141C141EA8143CA3147814F0A2EB03E0EB0FC0B5120013FC171D
7C9C1E>I<B512C0A200F0C7FCABB51280A200F0C7FCACB512C0A2121D7C9C19>I<B51280
A200F0C7FCABB5FCA200F0C7FCAE111D7C9C18>I<EB3FC0EBFFF83803E07C3807801C38
0F000C001E1300121C123C12381278A25AA6EB03FCA2EB001C1278A21238123C121C121E
7EEA07803803E07C3800FFF8EB3FC0161F7E9D1C>I<00F013F0ADB5FCA2EAF000AE141D
7C9C1D>I<12F0B3AB041D7C9C0C>I<00F0133C147814F0EB01E0EB03C0EB0780EB0F0013
1E5B5B5B5BEAF1F012F3EAF778EAFE7CEAFC3C7FEAF81F487E14801307EB03C014E01301
EB00F0A21478147C161D7C9C1D>75 D<12F0B3A9B5FCA2101D7D9C16>I<00FCEB07E0A3
00EE130DA300E71319A3EB803900E31331EBC071A200E11361A2EBE0E1A200E013C113F1
EB7181A3EB3B01A3131EA313001B1D7C9C24>I<00FC1370A27E12EE12EF12E7A2138012
E313C0A2EAE1E0A212E013F013701378A2133CA2131C131E130EA2130F130714F01303A2
141D7C9C1D>I<133F3801FFE0487F3807C0F8380F807C381E001E003E131F003C7F48EB
0780A348EB03C0A86C130700781480A2007C130F003C1400003E5B6C133E6C6C5A6C6C5A
6CB45A6C5BD8003FC7FC1A1F7E9D1F>I<EAFFFC13FF38F00F80EB03C0EB01E0EB00F0A6
EB01E01303EB0FC0B51280EBFE0000F0C7FCAD141D7C9C1B>I<133F3801FFE0487F3807
C0F8380F807C48487E003E7F003C7F48EB0780A348EB03C0A90078EB0780A2130E393C0F
0F00383E079F381E03DE380F83FC6C6C5A6CB45A6C7F38003F78EB003C143E80EC0F801A
237E9D1F>I<EAFFF813FF38F00F80EB03C0EB01E0EB00F0A5EB01E01303EB0FC0B51280
140013F8EAF03C131C131E7FA2EB0780A2EB03C0A2EB01E0EB00F0A21478151D7C9C1B>
I<EA03F8EA0FFEEA1C0F487E487E0060C7FC12E0A47E1278127FEA3FE0EA1FFCEA07FEEA
01FF38001F801307EB03C0A21301A400C01380EAE00338F00700EA7C0EEA1FFCEA07F012
1F7E9D17>I<B61280A2D8001EC7FCB3A9191D7F9C1C>I<00F01370B3A5007813E0A2383C
01C0381E0380EA0F073807FE00EA01F8141E7C9C1D>I<00F0EB0380A2007814005CA26C
130EA2123E001E5BA26C5BA36C6C5AA23803C06014E0A26C6C5A13E1A23800F18013F301
73C7FCA2137B133EA2131C191D7F9C1C>I<00F001F81370A3007801B81360D9019C13E0
A3D83C03EB01C0141E140E001E15809038070F0313061407000F1500010E1387130C0007
EB0386A2019C138E019813CE0003EB01CCA339019000C801D013D801F013F85B00001470
241D7F9C27>I<00F8130E007C131E003C5B6C13386C13785C380781E03803C1C0EA01C3
EBE780D800F7C7FC137E133E133CA2137E1377EBE780EA01E33803C1C0EB81E048C67E48
7F000E1378487F003C133E487F00707F00F01480191D7F9C1C>I<00F8EB01E0007C14C0
6CEB0380001E1307001F1400380F800E0007131EEBC01C3803E03C000113386D5A000013
F0EB78E0EB7DC0133F6D5A91C7FC7FAC1B1D809C1C>I<387FFFF0A2380001E0130314C0
13071480EB0F005B131E133E133C5B13F85B12015B485A12075B120F90C7FC121E123E12
3C127C1278B512F0A2141D7E9C19>I<EA0FC0EA3FF0EA7FF8EA7038EA401C1200A213FC
120F123FEA781C12E0A3EAF07CEA7FFC13DCEA3F1C0E127E9114>97
D<12E0ABEAE3E0EAEFF8EAFFFCEAF83EEAE01E130E1307A6130EEAF01EEAF83CEAFFF8EA
EFF0EAE3E0101D7D9C15>I<EA03F0EA0FFCEA1FFEEA3C0EEA7802EA70005AA61270EA78
02EA3C0EEA1FFEEA0FFCEA03F00F127F9112>I<1307ABEA07C7EA1FF7EA3FFFEA3C1FEA
7807127012E0A61270EA780FEA3C1FEA3FFFEA1FF7EA07C7101D7F9C15>I<EA07E0EA0F
F0EA3FF8EA3C3CEA700C130EEAFFFEA3EAE000A31270EA7802EA3C0EEA1FFEEA0FFCEA03
F00F127F9112>I<13FC12011203EA0700120EA7EAFFE0A2EA0E00B00E1D809C0D>I<3807
C3C0EA0FFF5A38383800487EA56C5AEA3FF05BEA77C00070C7FCA2EA3FFC13FF481380EA
700738E001C0A3EAF003387C0F80383FFF006C5AEA07F8121B7F9115>I<12E0ABEAE3E0
EAEFF0EAFFF8EAF83CEAF01C12E0AD0E1D7D9C15>I<12F0A41200A71270B2041D7E9C0A>
I<12E0B3AB031D7D9C0A>108 D<38E3F03F39EFF8FF80D8FFFD13C039F81F81E038F00F
00EAE00EAD1B127D9122>I<EAE3E0EAEFF0EAFFF8EAF83CEAF01C12E0AD0E127D9115>I<
EA03F0EA0FFC487EEA3C0F38780780EA700338E001C0A5EAF00300701380EA7807383C0F
00EA1FFE6C5AEA03F012127F9115>I<EAE3E0EAEFF8EAFFFCEAF83EEAE01E130E1307A5
130F130EEAF01EEAF87CEAFFF8EAEFF0EAE3E0EAE000A8101A7D9115>I<EAE38012E712
EFEAFC005A5AA25AAB09127D910E>114 D<EA1FC0EA3FF0127FEAF030EAE000A27E127F
EA3FC0EA1FE0EA01F0EA0038A21280EAF078EAFFF0EA7FE0EA1FC00D127F9110>I<121C
A6EAFFE0A2EA1C00AC1320EA1FF0120FEA07C00C187F970F>I<39E03E0380A3D8703713
00EB7707A213733838E38EA33818E18C381CC1CC001D13DCA2380D80D8000F13F8A20007
137019127F911C>119 D E /Fl 65 123 df<90387E03F03801FE0F0003131F3907803C
00EB0038481378A739FFF07F80A3390F007800B11C20809F1B>11
D<14F013F8120112033807800090C7FC5AA738FFF8F0A3EA0F00B1142180A018>I<EBF8
F012011203EA078013005AA7EAFFF8A3EA0F00B11420809F18>I<13E0EA01C0EA038012
0713005A121EA2121C123CA212381278A3127012F0AE12701278A31238123CA2121C121E
A27E7E13801203EA01C0EA00E00B2E7CA112>40 D<12E012707E123C121C121E7EA27E13
80A2120313C0A3120113E0AE13C01203A313801207A213005AA2121E121C123C12385A5A
0B2E7EA112>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 82 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<EAFFF8EA0F8090C7FCB21402
A414061404A2140C141C147CB512FC171F7E9E1C>76 D<B46CEB07FE000715C0A2D805C0
130BA2D804E01313A301701323A26D1343A36D1383A290380E0103A3EB0702A3EB0384A2
EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>I<B4EB0FF8390F8003E0EC00
80EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F01478A214
3C141EA2140F1407A214031401123E38FF80001D1F7E9E22>I<EB1FE0EB70383801C00E
48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA900
781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E
38007038EB1FE01E217E9F23>I<B512E0380F007C141E80EC0780A215C0A41580A2EC0F
00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<EB1FE0EB70383801C00E48487E39
070003804814C0001EEB01E0003E14F0003C1300007C14F8A20078147800F8147CA90078
1478007C14F8A2003C14F0383E0781391E0841E0390F1023C00007148039039017003801
D01E3900783804EB1FF8EB001CEC0C0CEC0E1CEC0FF8A2140715F0EC01E01E297E9F23>
I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A280143C
A3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>I<3803F040380C0C
C0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4FC00071380C6
13C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300EA81FC14
217E9F19>I<007FB512E038780F010060EB006000401420A200C0143000801410A40000
1400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3A46CEB010013
80120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003FE391F8000F86CC7
126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213F8EB7804A26D5AA3
6D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF07FF81FF03B1F000F
C007C06C903907800180170015C001805C00071502EC09E013C000035DEC19F01410D801
E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090383D000F133F
6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<397FF81FF8390FE007
C03907C0030000031302EBE0063801F00400005BEBF818EB78106D5AEB3E60EB1E406D5A
A213076D7E497E1305EB08F0EB18F8EB1078EB207CEB603EEB401EEB801F3901000F8014
07000214C000061303001FEB07E039FFC01FFE1F1F7F9E22>I<39FFF001FF391F800078
000F146012076D1340000314807F3901F001001200EBF802EB7C06EB3C04EB3E08131EEB
1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>I<12FFA212C0B3B3A512FFA2082D
7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA8040A3EAB85CEAFC7EA2EA7C3EEA38
1C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80A10D>I<EA1FE0EA3030EA7818131C
EA300E1200A313FEEA078EEA1E0E1238127800F01310A3131E127838386720380F83C014
147E9317>97 D<121C12FC121CAA137CEA1D87381E0180EB00C0001C13E01470A21478A6
147014F014E0001E13C0381A018038198700EA107C15207E9F19>I<EA01FCEA0706EA1C
0F123813060078C7FC127012F0A61270127800381380A2381C0100EA0706EA01F811147F
9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112381278127012F0A61270A2
1238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA0E1C487E487EA21270EB03
8012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706EA01F811147F9314>I<13
7CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE01020809F0E>I<14E03803
E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33E00020C7FCA21230A2EA
3FFE381FFF8014C0383001E038600070481330A4006013606C13C0381C03803803FC0014
1F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2121CAE38FF8FF014207E9F
19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F9E0C>I<13E0EA01F0A3EA
00E01300A61370EA07F012001370B3A31260EAF06013C0EA6180EA3F000C28829E0E>I<
121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0EA1DF0EA1E70EA1C38133C
131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC121CB3ABEAFF8009207F9F
0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2001C13C0AE3AFF8FF8FF8021
147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF8FF014147E9319>I<EA01F8
EA070E381C0380383801C0A2387000E0A200F013F0A6007013E0A2383801C0A2381C0380
38070E00EA01F814147F9317>I<EA1C7CEAFD87381E018014C0381C00E014F014701478
A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FCA8B47E151D7E9319>I<3801
F04038070CC0EA0E02EA1C03EA38011278127012F0A6127012781238EA1C03EA0C05EA07
09EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18EA1E3CA21318EA1C00AEEAFF
C00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000127CEA3FE0EA1FF0EA07F8EA
003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F9312>I<1202A31206A2120E
A2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F9B12>I<381C0380EAFC1FEA
1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8383E00E0001C13C06C1380
A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015147F9318>I<39FF
9FE1FC393C078070391C030060EC8020000E1440A214C0D80704138014E0A23903886100
1471A23801D032143A143E3800E01CA2EB6018EB40081E147F9321>I<38FF87F8381E03
C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370137813F8139CEA010E1202EA
060738040380000C13C0003C13E038FE07FC16147F9318>I<38FF83F8383E00E0001C13
C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A31320A25BA3EAF0
80A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260EA401C133813781370EA00
E0120113C0EA038012071301120E121EEA1C03EA3802EA7006130EEAFFFE10147F9314>
I<B512FC1601808C17>I E /Fs 46 122 df<132013401380EA01005A12061204120CA2
5AA25AA312701260A312E0AE1260A312701230A37EA27EA2120412067E7EEA0080134013
200B327CA413>40 D<7E12407E7E12187E12041206A27EA2EA0180A313C01200A313E0AE
13C0A312011380A3EA0300A21206A21204120C5A12105A5A5A0B327DA413>I<127012F8
12FCA212741204A41208A21210A212201240060F7C840E>44 D<EAFFF8A20D02808B10>
I<127012F8A3127005057C840E>I<13801203120F12F31203B3A9EA07C0EAFFFE0F217C
A018>49 D<EA03F0EA0C1CEA100700201380384003C0A2008013E012F0EAF801A3EA2003
120014C0A2EB07801400130E5B13185B5B5B485A90C7FC000213205A5A00181360481340
383FFFC05AB5FC13217EA018>I<1303A25BA25B1317A213271367134713871201130712
02120612041208A212101220A2124012C0B512F838000700A7EB0F80EB7FF015217FA018
>52 D<00101380381E0700EA1FFF5B13F8EA17E00010C7FCA6EA11F8EA120CEA1C073818
03801210380001C0A214E0A4127012F0A200E013C01280EA4003148038200700EA1006EA
0C1CEA03F013227EA018>I<137EEA01C138030080380601C0EA0C03121C381801800038
C7FCA212781270A2EAF0F8EAF30CEAF4067F00F81380EB01C012F014E0A51270A3003813
C0A238180380001C1300EA0C06EA070CEA01F013227EA018>I<EA01F8EA060EEA080338
1001801220386000C0A31270A238780180003E1300EA3F02EA1FC4EA0FF812036C7EEA06
7EEA083F38100F80383007C0EA6003EB00E05A1460A40060134014C06C138038180300EA
0E0EEA03F013227EA018>56 D<EA01F0EA060C487EEA1807383803801270A238F001C0A3
14E0A5127013031238EA1805120CEA0619EA03E1380001C0A3EB0380A212303878070013
06EA700CEA20186C5AEA0FC013227EA018>I<497EA3497EA3EB05E0A2EB09F01308A2EB
1078A3497EA3497EA2EBC01F497EA248B51280EB0007A20002EB03C0A348EB01E0A348EB
00F0121C003EEB01F839FF800FFF20237EA225>65 D<903807E0109038381830EBE00639
01C0017039038000F048C7FC000E1470121E001C1430123CA2007C14101278A200F81400
A812781510127C123CA2001C1420121E000E14407E6C6C13803901C001003800E002EB38
1CEB07E01C247DA223>67 D<B512F0380F801E00071307EC0380EC01C0EC00E015F01578
A2157C153CA3153EA9153CA2157C1578A215F015E01401EC03C0EC0700000F131EB512F0
1F227EA125>I<B612C0380F80070007130114001540A215601520A314201500A3146014
E013FF138014601420A315081400A21510A31530A2157015E0000F1303B6FC1D227EA121
>I<B612C0380F80070007130114001540A215601520A314201500A3146014E013FF1380
14601420A491C7FCA9487EEAFFFE1B227EA120>I<39FFFC3FFF390FC003F039078001E0
AE90B5FCEB8001AF390FC003F039FFFC3FFF20227EA125>72 D<EAFFFCEA0FC0EA0780B3
ACEA0FC0EAFFFC0E227EA112>I<D8FFC0EB03FF000F15F0000715E0D805E01305A2D804
F01309A301781311A36D1321A36D1341A26D1381A39038078101A3EB03C2A2EB01E4A3EB
00F8A31470120E001FEC03F03AFFE0203FFF28227EA12D>77 D<39FF8007FF3907C000F8
1570D805E01320EA04F0A21378137C133C7F131F7FEB0780A2EB03C0EB01E0A2EB00F014
F81478143C143E141E140FA2EC07A0EC03E0A21401A21400000E1460121FD8FFE0132020
227EA125>I<B512F0380F803C0007130FEC078015C0140315E0A615C014071580EC0F00
143CEBFFF00180C7FCAE487EEAFFFC1B227EA121>80 D<B512E0380F803C0007130E6E7E
81140381A55D14075D020EC7FC143CEBFFE0EB80708080141E140E140FA481A3168015C0
14073A0FC003C10039FFFC01E2C8127C21237EA124>82 D<3803F020380C0C60EA180238
3001E0EA70000060136012E0A21420A36C1300A21278127FEA3FF0EA1FFE6C7E00031380
38003FC0EB07E01301EB00F0A214707EA46C1360A26C13C07E38C8018038C60700EA81FC
14247DA21B>I<007FB512F839780780780060141800401408A300C0140C00801404A400
001400B3A3497E3801FFFE1E227EA123>I<EA1FE0EA3038EA780C130EEA30071200A313
FFEA07C7EA1E07123C1278127000F01308A3130FEA7817383C2390380FC1E015157E9418
>97 D<120E12FE121E120EAB131FEB61C0EB8060380F0030000E1338143C141C141EA714
1C143C1438000F1370380C8060EB41C038083F0017237FA21B>I<EA01FEEA0703380C07
80121C383803000078C7FC127012F0A712700078134012386C1380380C0100EA0706EA01
F812157E9416>I<14E0130F13011300ABEA01F8EA0704EA0C02EA1C01EA380012781270
12F0A7127012781238EA1801EA0C0238070CF03801F0FE17237EA21B>I<EA01FCEA0707
380C0380381C01C01238007813E0EA700012F0B5FC00F0C7FCA512700078132012386C13
406C138038070300EA00FC13157F9416>I<133E13E33801C780EA0387130748C7FCA9EA
FFF80007C7FCB27FEA7FF0112380A20F>I<14703803F198380E1E18EA1C0E38380700A2
00781380A400381300A2EA1C0EEA1E1CEA33F00020C7FCA212301238EA3FFE381FFFC06C
13E0383000F0481330481318A400601330A2003813E0380E03803803FE0015217F9518>
I<120E12FE121E120EABEB1F80EB60C0EB80E0380F0070A2120EAF38FFE7FF18237FA21B
>I<121C123EA3121CC7FCA8120E127E121E120EB1EAFFC00A227FA10E>I<13E0EA01F0A3
EA00E01300A81370EA07F012001370B3A51260EAF0E013C0EA6180EA3F000C2C83A10F>
I<120E12FE121E120EABEB03FCEB01F014C01480EB02005B5B5B133813F8EA0F1CEA0E1E
130E7F1480EB03C0130114E0EB00F014F838FFE3FE17237FA21A>I<390E1FC07F3AFE60
E183803A1E807201C03A0F003C00E0A2000E1338AF3AFFE3FF8FFE27157F942A>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)
802 1362 y(August)i(12,)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)i(and)f
(has)g(b)q(een)i(up)q(dated.)143 1379 y Fn(\017)23 b
Fr(The)15 b Fl(MPI)p 367 1379 14 2 v 16 w(REQUEST)p 586
1379 V 18 w(TYPE)g Fr(has)g(b)q(een)i(generalized.)143
1473 y Fn(\017)23 b Fr(The)10 b Fl(MPI)p 362 1473 V 16
w(ADD)p 474 1473 V 16 w(FINALIZE)p 684 1473 V 16 w(CODE)g
Fr(has)g(b)q(een)i(replaced)f(b)o(y)f(allo)o(wing)h(callbac)o(ks)g(on)f
Fk(MPI)p 1735 1473 13 2 v 14 w(COMM)p 1879 1473 V 15
w(W)o(ORLD)189 1530 y Fr(when)15 b(it)h(is)f(freed)h(at)f
Fl(MPI)p 652 1530 14 2 v 15 w(FINALIZE)p Fr(.)143 1624
y Fn(\017)23 b Fr(Added)16 b(C++)g(bindings.)143 1717
y Fn(\017)23 b Fr(Names)15 b(with)h(TYPE)p 573 1717 V
16 w(REQUEST)h(b)q(ecame)f(MET)l(A)p 1127 1717 V 16 w(REQUEST)g(b)q
(ecause)h(of)e(p)q(oten)o(tial)i(con-)189 1774 y(funsion)f(with)f
Fl(MPI)p 535 1774 V 16 w(REQUEST)p 754 1774 V 18 w(TYPE)1875
1817 y Fn(?)h Fm(\(Sept\))166 1868 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
1924 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 1981 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
2037 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
2093 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 2150 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 2206 y(c)o(hapter)f
(includes)j(this)d(capabilit)o(y)l(.)166 2263 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
2319 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
2376 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 2432 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 2432 V 16 w(GET)p 1479 2432 V 17 w(COUNT)g Fr(will)h(return)75
2489 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 2545 y(dra)o(wbac)o(k)c(to)g(this)g(approac)o(h)h
(is)g(that)e(only)i(information)g(with)g(explicit)h(accessor)f
(functions)g(can)75 2602 y(b)q(e)e(easily)h(and)f(p)q(ortably)g
(obtained)g(from)f(an)g Fl(MPI)g Fr(implemenation.)32
b(In)19 b Fl(MPI-1)p Fr(,)g(the)f Fl(MPI)g Fr(F)l(orum)75
2658 y(included)f(all)e(the)f(accessor)g(functions)h(that)e(seemed)i
(to)e(b)q(e)i(needed)h(b)o(y)e(users.)19 b(Ho)o(w)o(ev)o(er,)13
b(extensions)964 2828 y(1)p eop
%%Page: 2 4
2 3 bop 75 -100 a Fr(2)894 b Fj(CHAPTER)15 b(6.)35 b(EXTERNAL)16
b(INTERF)-5 b(A)o(CES)75 49 y Fr(in)18 b Fl(MPI-2)e Fr(and)h(exp)q
(erience)j(has)c(sho)o(wn)h(a)g(need)h(for)e(other)h(accessor)g
(functions.)26 b(This)17 b(c)o(hapter)g(has)75 106 y(accessor)e
(functions)h(that)e(allo)o(w)i(access)f(to)g(the)g(opaque)g(datat)o(yp)
q(e)g(handle.)166 162 y(This)f(c)o(hapter)f(also)h(has)f(functions)i
(to)e(allo)o(w)g(the)h(abilit)o(y)h(to)e(comm)o(unicate)h(datat)o(yp)q
(es)f(b)q(et)o(w)o(een)75 219 y(pro)q(cesses)j(and)g(also)f(to)g
(create)g(a)g(pac)o(k)o(ed)h(form)f(of)g(\\messages")f(that)h(are)g(in)
h(a)f(cononical)i(represen-)75 275 y(tation.)j(It)15
b(also)g(has)g(a)g(section)h(describing)h(ho)o(w)d(threads)h(are)g(to)g
(b)q(e)h(handled)g(in)g Fl(MPI-2)p Fr(.)75 418 y Fo(6.2)59
b(Generalized)20 b(Requests)75 521 y Fi(6.2.1)49 b(Intro)q(duction)75
607 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 664 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 720 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 777 y(a)h(non-blo)q(c)o(king)i(send-receiv)o
(e)g(t)o(yp)q(e)e(function.)166 833 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 890 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 890 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 946 y Fr(are)c(generalized.)24 b(The)16
b Fl(MPI)p 585 946 V 16 w(POST)p 719 946 V 17 w(HANDLER)g
Fr(function)g(of)g(Section)g(6.12.3)e(is)j(used)f(for)f(progress.)75
1002 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
1059 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 1115 y(comm)o(unication)e(requests)f
(and)g(the)h(cac)o(hing)g(features.)166 1172 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
1228 y(function)16 b Fl(MPI)p 338 1228 V 15 w(MET)l(A)p
477 1228 V 17 w(REQUEST)p 697 1228 V 18 w(CREA)l(TE)g
Fr(and)f(freed)g(with)g Fl(MPI)p 1285 1228 V 16 w(MET)l(A)p
1425 1228 V 17 w(REQUEST)p 1645 1228 V 18 w(FREE)p Fr(.)g(The)75
1285 y(rest)20 b(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 1341 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 1341 V 16 w(REQUEST)p
1344 1341 V 17 w(INIT)p Fr(.)f(The)h(op)q(eration)g(asso-)75
1398 y(ciated)k(with)f(the)g(request)g(is)g(b)q(egun)h(with)f
Fl(MPI)p 958 1398 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
1454 y(done)g(with)g Fl(MPI)p 381 1454 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 1511 y Fl(MPI)p
160 1511 V 16 w(REQUEST)p 379 1511 V 18 w(FREE)p Fr(.)166
1567 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 1623 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 1680 y(blo)q(c)o(king)f(v)o(ersion)e(of)g
Fl(MPI)p 547 1680 V 16 w(ALLGA)l(THER)p Fr(.)75 1802
y Fi(6.2.2)49 b(F)o(unctionalit)o(y)75 1887 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 1994 y Fl(init)p 139 1994
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 2050 y(function)f(can)g(b)q(e)h(used,)g(for)e(example,)i(to)
e(allo)q(cate)i(memory)e(for)g(the)h(request)g(and)g(p)q(erform)189
2107 y(other)c(initialization.)75 2200 y Fl(sta)o(rt)p
164 2200 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 2257 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 2313 y(comm)o(unications)c(that)g(initiate)i(the)e(op)q(eration.)75
2407 y Fl(complete)p 248 2407 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
2464 y(used)d(to)g(set)g(return)g(v)m(alues)h(in)g(extra)p
852 2464 V 16 w(state)f(or)f(clean)i(up)g(from)f(the)g(op)q(eration.)75
2557 y Fl(free)p 148 2557 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 2614 y(example,)15
b(to)g(deallo)q(cate)h(memory)l(.)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 Fj(6.2.)34 b(GENERALIZED)16 b(REQUESTS)1071
b Fr(3)75 49 y Fl(cancel)p 194 49 14 2 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
106 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 106 V 16 w(CANCEL)h
Fr(is)f(called)i(to)189 162 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 219 y(cancel)c(in)o(ternal)g(messages,)
e(reset)h(state,)f(etc.)166 318 y(A)h(new)h(t)o(yp)q(e)f(of)g(request)g
(is)h(created)f(with)75 469 y Fl(MPI)p 160 469 V 16 w(MET)l(A)p
300 469 V 17 w(REQUEST)p 520 469 V 17 w(CREA)l(TE\(init)p
785 469 V 18 w(fn,)d(sta)o(rt)p 951 469 V 17 w(fn,)g(complete)p
1200 469 V 17 w(fn,)g(free)p 1349 469 V 16 w(fn,)g(cancel)p
1543 469 V 17 w(fn,)g(meta)p 1717 469 V 16 w(req\))117
546 y Fh(IN)155 b Fl(init)p 382 546 V 17 w(fn)472 b Fh(Creation)14
b(callbac)o(k)f(function)h(for)f(meta)p 1554 546 13 2
v 14 w(req)117 620 y(IN)155 b Fl(sta)o(rt)p 407 620 14
2 v 17 w(fn)447 b Fh(Request)15 b(start)g(callbac)o(k)e(function)g(for)
h(meta)p 1642 620 13 2 v 14 w(req)117 694 y(IN)155 b
Fl(complete)p 491 694 14 2 v 17 w(fn)363 b Fh(Request)15
b(complete)e(callbac)o(k)g(function)h(for)g(meta)p 1718
694 13 2 v 13 w(req)117 768 y(IN)155 b Fl(free)p 391
768 14 2 v 17 w(fn)463 b Fh(Request)15 b(free)g(callbac)o(k)e(function)
g(for)h(meta)p 1622 768 13 2 v 14 w(req)117 842 y(IN)155
b Fl(cancel)p 437 842 14 2 v 18 w(fn)416 b Fh(Request)15
b(cancel/failure)f(callbac)o(k)f(function)g(for)h(meta)p
1802 842 13 2 v 14 w(req)117 916 y(OUT)108 b Fl(meta)p
416 916 14 2 v 16 w(req)417 b Fk(MPI)13 b Fh(created)j(meta)d(request)i
(t)o(yp)q(e)f(for)g(future)h(reference)75 1040 y Fg(int)23
b(MPI)p 245 1040 15 2 v 17 w(Meta)p 358 1040 V 17 w(request)p
543 1040 V 16 w(create\(MPI)p 799 1040 V 16 w(Init)p
911 1040 V 17 w(function)f(*init)p 1262 1040 V 17 w(fn,)h(MPI)p
1446 1040 V 17 w(Start)p 1583 1040 V 17 w(function)393
1097 y(*start)p 540 1097 V 17 w(fn,)g(MPI)p 724 1097
V 17 w(Complete)p 933 1097 V 16 w(function)g(*complete)p
1380 1097 V 16 w(fn,)393 1153 y(MPI)p 468 1153 V 17 w(Free)p
581 1153 V 17 w(function)f(*free)p 932 1153 V 17 w(fn,)h(MPI)p
1116 1153 V 17 w(Cancel)p 1277 1153 V 16 w(function)g(*cancel)p
1676 1153 V 16 w(fn,)393 1210 y(MPI)p 468 1210 V 17 w(Meta)p
581 1210 V 17 w(request)f(*meta)p 908 1210 V 17 w(req\))75
1296 y(MPI)p 150 1296 V 17 w(META)p 263 1296 V 16 w(REQUEST)p
447 1296 V 17 w(CREATE\(INIT)p 728 1296 V 15 w(FN,)i(START)p
959 1296 V 16 w(FN,)g(COMPLETE)p 1263 1296 V 16 w(FN,)f(FREE)p
1470 1296 V 17 w(FN,)g(CANCEL)p 1726 1296 V 17 w(FN,)393
1353 y(META)p 492 1353 V 17 w(REQ,)g(IERROR\))170 1409
y(EXTERNAL)g(INIT)p 484 1409 V 17 w(FN,)g(START)p 716
1409 V 17 w(FN,)g(COMPLETE)p 1020 1409 V 16 w(FN,)h(FREE)p
1228 1409 V 16 w(FN,)g(CANCEL)p 1484 1409 V 16 w(FN)170
1466 y(INTEGER)f(meta)p 460 1466 V 17 w(req,)g(IERROR)75
1552 y(int)g(MPI::Meta)p 389 1552 V 16 w(request::Create\(const)e
(MPI::Init)p 1146 1552 V 16 w(function*)i(init)p 1497
1552 V 17 w(fn,)g(const)393 1608 y(MPI::Start)p 636 1608
V 16 w(function*)g(start)p 1011 1608 V 16 w(fn,)h(const)f
(MPI::Complete)p 1578 1608 V 15 w(function*)393 1665
y(complete)p 588 1665 V 16 w(fn,)h(const)f(MPI::Free)p
1059 1665 V 16 w(function*)f(free)p 1409 1665 V 17 w(fn,)i(const)393
1721 y(MPI::Cancel)p 660 1721 V 16 w(function*)e(cancel)p
1058 1721 V 17 w(fn\))166 1808 y Fr(The)d(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 1864 y(called.)j Fl(meta)p
319 1864 14 2 v 16 w(req)14 b Fr(is)g(a)f(unique)i(id)g(that)e(is)h
(generated)g(b)o(y)f Fl(MPI)g Fr(that)g(can)h(b)q(e)g(used)h(to)e
(create)g(requests)75 1921 y(of)h(this)h(t)o(yp)q(e.)20
b(This)14 b(call)i(is)f(lo)q(cal)g(and)g(the)g Fl(meta)p
934 1921 V 16 w(req)f Fr(is)h(a)f(lo)q(cal)i(quan)o(tit)o(y)e(to)f(the)
i(calling)h(pro)q(cess.)k(It)75 1977 y(cannot)15 b(b)q(e)h(transfered)f
(to)f(another)h(pro)q(cess.)166 2034 y(If)k(the)g(user)g(needs)h(a)f
(callbac)o(k)h(function)g(to)e(b)q(e)i(atomic,)f(lo)q(c)o(ks)h(or)e
(the)h(sp)q(eci\014c)i(mec)o(hanisms)75 2090 y(describ)q(ed)c(in)f
(section)g(6.12.4)d(should)j(b)q(e)g(used.)166 2147 y(T)l(o)f(get)g(an)
g(instance)h(of)f(an)g Fl(MPI)p 749 2147 V 15 w(REQUEST)i
Fr(from)e(an)g Fl(MPI)p 1237 2147 V 16 w(MET)l(A)p 1377
2147 V 16 w(REQUEST)p Fr(:)269 b Fn(>)16 b Fm(\(Sept\))75
2298 y Fl(MPI)p 160 2298 V 16 w(REQUEST)p 379 2298 V
18 w(INIT\(meta)p 599 2298 V 15 w(req,)f(extra)p 796
2298 V 16 w(state,)h(request\))117 2375 y Fh(IN)155 b
Fl(meta)p 416 2375 V 16 w(req)417 b Fh(T)o(yp)q(e)10
b(of)f(request)h(desired)h(\(from)c Fk(MPI)p 1513 2375
13 2 v 15 w(MET)m(A)p 1642 2375 V 14 w(REQUEST)p 1844
2375 V 14 w(CREA)m(TE)p Fh(\))117 2449 y(IN)155 b Fl(extra)p
416 2449 14 2 v 17 w(state)384 b Fh(Extra)14 b(state)h(passed)g(to)f
Fk(init)p 1365 2449 13 2 v 15 w(fn)117 2523 y Fh(OUT)108
b Fl(request)452 b Fh(Handle)14 b(to)g(request)75 2647
y Fg(int)23 b(MPI)p 245 2647 15 2 v 17 w(Request)p 430
2647 V 16 w(init\(MPI)p 638 2647 V 17 w(Meta)p 751 2647
V 16 w(request)g(meta)p 1054 2647 V 17 w(req,)g(void)g(*extra)p
1453 2647 V 17 w(state,)393 2704 y(MPI)p 468 2704 V 17
w(Request)g(*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: 4 6
4 5 bop 75 -100 a Fr(4)894 b Fj(CHAPTER)15 b(6.)35 b(EXTERNAL)16
b(INTERF)-5 b(A)o(CES)75 49 y Fg(MPI)p 150 49 15 2 v
17 w(REQUEST)p 335 49 V 16 w(INIT\(META)p 567 49 V 16
w(REQ,)23 b(EXTRA)p 822 49 V 17 w(STATE,)g(REQUEST,)g(IERROR\))170
106 y(INTEGER)g(META)p 460 106 V 17 w(REQ,)g(EXTRA)p
716 106 V 17 w(STATE,)g(REQUEST,)g(IERROR)75 192 y(int)g(MPI::Meta)p
389 192 V 16 w(request::Init\(void*)f(extra)p 1003 192
V 16 w(state,)h(MPI::Request&)f(req\))i(const)166 279
y Fr(This)16 b(function)g(in)o(v)o(ok)o(es)f(the)g(callbac)o(k)h
(function)g Fl(init)p 1100 279 14 2 v 17 w(fn)p Fr(.)21
b(In)15 b(C)g(this)h(is)g(de\014ned)g(as:)75 335 y Fg(typedef)23
b(int)g(MPI)p 436 335 15 2 v 17 w(Request)p 621 335 V
16 w(init)p 733 335 V 17 w(fn\(MPI)p 894 335 V 16 w(Request)g(meta)p
1197 335 V 17 w(req,)g(void)h(*extra)p 1597 335 V 16
w(state,)393 392 y(MPI)p 468 392 V 17 w(Request)f(request\);)166
478 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 558 y Fg(SUBROUTINE)22
b(REQUEST)p 508 558 V 17 w(INIT)p 621 558 V 16 w(FN\(META)p
805 558 V 17 w(REQ,)h(EXTRA)p 1061 558 V 16 w(STATE,)g(REQUEST,)g
(IERR\))170 615 y(INTEGER)g(META)p 460 615 V 17 w(REQ,)g(EXTRA)p
716 615 V 17 w(STATE,)g(REQUEST,)g(IERR)166 701 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 758 y Fg(typedef)23 b(int)g(MPI::Request)p 652
758 V 16 w(init)p 764 758 V 17 w(fn\(const)f(MPI::Request&)g(meta)p
1425 758 V 17 w(req,)h(void)393 814 y(*extra)p 540 814
V 17 w(state,)g(MPI::Request&)f(request\);)-117 854 y
Fn(?)15 b Fm(\(Sept\))166 901 y Fl(MPI)p 251 901 14 2
v 16 w(REQUEST)p 470 901 V 18 w(INIT)h Fr(in)o(v)o(ok)o(es)h(the)g
(user)g(function)h Fl(init)p 1172 901 V 17 w(fn)g Fr(with)f(input)h
(argumen)o(ts)e Fl(meta)p 1790 901 V 16 w(req)p Fr(,)75
957 y Fl(extra)p 173 957 V 16 w(state)p Fr(,)c(and)f
Fl(request)h Fr(whic)o(h)f(are)e(the)i(argumen)o(ts)e(that)g(w)o(ere)h
(passed)h(b)o(y)f(the)g(caller)h(of)f Fl(MPI)p 1730 957
V 16 w(REQUEST)p 1949 957 V 18 w(INIT)p Fr(.)75 1013
y(The)16 b(callbac)o(k)g(function)h(will)g(usually)g(allo)q(cate)f(and)
g(initialize)j(in)o(ternal)d(data)f(structures)g(of)g(the)h(re-)75
1070 y(quest.)40 b(It)22 b(can)g(return)g(in)h Fl(extra)p
683 1070 V 16 w(state)h Fr(a)d(p)q(oin)o(ter)i(to)e(this)i(in)o(ternal)
f(structure)g(since)h Fl(extra)p 1769 1070 V 17 w(state)75
1126 y Fr(is)e(passed)h(to)e(all)i(the)f(user)g(callbac)o(k)h
(functions)g(for)e(this)i(request.)37 b(Outside)22 b(the)f(user)g
(function,)75 1183 y Fl(MPI)p 160 1183 V 16 w(REQUEST)p
379 1183 V 18 w(INIT)15 b Fr(creates)h(and)h(returns)f(in)h
Fl(request)h Fr(a)e(handle)h(to)f(the)g(newly)h(created)f(request.)75
1239 y(This)g(request)g(is)g(lo)q(cal)h(to)e(the)h(calling)h(pro)q
(cess.)22 b Fl(init)p 1013 1239 V 17 w(fn)16 b Fr(returns)f
Fk(MPI)p 1314 1239 13 2 v 15 w(SUCCESS)f Fr(if)i(it)g(succeeds)h(in)f
(C)75 1296 y(or)h(C++)h(and)g(the)f(same)g(v)o(elue)i(in)f(IERR)h(in)f
(F)l(ortran.)25 b(The)18 b(consequence)h(of)e(returning)h(failure)g(is)
75 1352 y(discussed)f(later.)-494 b Fn(>)15 b Fm(\(Sept\))166
1449 y Ff(Discussion:)166 1499 y Fh(By)g(a)f(close)h(v)o(ote)f(w)o(e)h
(remo)o(v)o(ed)f(comm)d(from)i Fk(MPI)p 983 1499 V 14
w(REQUEST)p 1185 1499 V 14 w(INIT)p Fh(.)h(Unless)h(there)h(is)e(a)g
(push)h(to)g(put)f(it)75 1549 y(bac)o(k)h(it)h(will)e(sta)o(y)h(remo)o
(v)o(ed.)22 b(Also,)15 b(w)o(e)h(decided)h(it)e(w)o(as)g(ok)g(that)h
(the)g(extra)p 1336 1549 V 16 w(state)g(mak)o(es)e(it)h(harder)i(to)e
(add)75 1599 y(info)e(in)g(F)m(ortran.)-117 1646 y Fn(?)i
Fm(\(Sept\))166 1702 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 1702
14 2 v 16 w(ST)l(ART)f Fr(and)g Fl(MPI)p 1631 1702 V
16 w(ST)l(ART)l(ALL)p Fr(.)75 1759 y(Calling)g(these)e(functions)h
(cause)f(the)h Fl(sta)o(rt)p 833 1759 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:)-1974 b Fn(>)15 b Fm(\(Sept\))75 1815 y Fg(typedef)23
b(int)g(MPI)p 436 1815 15 2 v 17 w(Request)p 621 1815
V 16 w(start)p 757 1815 V 17 w(fn\(void)g(*extra)p 1109
1815 V 16 w(state,)g(MPI)p 1364 1815 V 17 w(Request)g(request\);)166
1902 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 1982 y Fg(SUBROUTINE)22
b(REQUEST)p 508 1982 V 17 w(START)p 645 1982 V 16 w(FN\(EXTRA)p
853 1982 V 16 w(STATE,)h(REQUEST,)g(IERR\))170 2038 y(INTEGER)g(EXTRA)p
484 2038 V 17 w(STATE,)g(REQUEST,)g(IERR)166 2125 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 2181 y Fg(typedef)23 b(int)g(MPI::Request)p 652
2181 V 16 w(start)p 788 2181 V 16 w(fn\(void)g(*extra)p
1139 2181 V 17 w(state,)g(MPI::Request&)f(request\);)-117
2221 y Fn(?)15 b Fm(\(Sept\))166 2268 y Fr(The)f(input)h
Fl(extra)p 476 2268 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 2324 y(b)o(y)j(the)g Fl(init)p 282 2324
V 16 w(fn)h Fr(callbac)o(k)f(function.)23 b Fl(sta)o(rt)p
810 2324 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 2381 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
2381 V 16 w(POST)p 1321 2381 V 17 w(HANDLER)g Fr(function)h(in)f(Sec-)
75 2437 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 2494 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
2550 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 2607 y Fl(MPI)g Fr(implemenations)i(apply)l(.)166
2704 y Ff(Missing:)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 Fj(6.2.)34 b(GENERALIZED)16 b(REQUESTS)1071
b Fr(5)166 49 y Fh(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 99 y(curren)o(tly)c(seem)f(to)f(agree)
i(that)f(w)o(e)g(w)o(an)o(t:)145 186 y Fe(\017)23 b Fh(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
236 y(that)e(pro)q(cess.)145 311 y Fe(\017)23 b Fh(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 361 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
448 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 Fk(MPI)f Fh(program)g(will)g(b)q(eha)o
(v)o(e)i(di\013eren)o(tly)75 498 y(in)g(di\013eren)o(t)i(implemen)o
(tations.)166 601 y Fl(sta)o(rt)p 255 601 14 2 v 17 w(fn)20
b Fr(returns)g Fk(MPI)p 565 601 13 2 v 14 w(SUCCESS)e
Fr(if)j(it)f(succeeds)h(in)g(C)f(or)f(C++)h(and)h(the)f(same)f(in)i
(IERR)g(in)75 658 y(F)l(ortran.)e(The)c(consequence)i(of)d(returning)i
(a)f(failure)h(co)q(de)g(is)g(discussed)h(later.)166
714 y(A)e(request)g(is)h(mark)o(ed)f(completed)h(b)o(y)f(calling:)75
865 y Fl(MPI)p 160 865 14 2 v 16 w(REQUEST)p 379 865
V 18 w(MARK)p 528 865 V 16 w(COMPLETE\(request\))117
942 y Fh(INOUT)62 b Fl(request)452 b Fh(Request)15 b(to)f(b)q(e)g(mark)
o(ed)f(as)h(complete)75 1067 y Fg(int)23 b(MPI)p 245
1067 15 2 v 17 w(Request)p 430 1067 V 16 w(mark)p 542
1067 V 17 w(complete\(MPI)p 847 1067 V 16 w(Request)g(*request\))75
1153 y(MPI)p 150 1153 V 17 w(REQUEST)p 335 1153 V 16
w(MARK)p 447 1153 V 17 w(COMPLETE\(REQUEST,)e(IERROR\))170
1210 y(INTEGER)i(REQUEST,)g(IERROR)75 1296 y(int)g(MPI::Request::Mark)p
605 1296 V 15 w(complete\(void\))166 1383 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 1383 14 2 v 17 w(fn)f Fr(de\014ned)i(as:)389
b Fn(>)16 b Fm(\(Sept\))75 1439 y Fg(typedef)23 b(int)g(MPI)p
436 1439 15 2 v 17 w(Request)p 621 1439 V 16 w(complete)p
829 1439 V 16 w(fn\(void)g(*extra)p 1180 1439 V 17 w(state,)g(MPI)p
1436 1439 V 17 w(Request)f(request\);)166 1526 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 1582 y Fg(SUBROUTINE)22 b(REQUEST)p 508
1582 V 17 w(COMPLETE)p 717 1582 V 16 w(FN\(EXTRA)p 925
1582 V 16 w(STATE,)h(REQUEST,)g(IERR\))170 1638 y(INTEGER)g(EXTRA)p
484 1638 V 17 w(STATE,)g(META)p 764 1638 V 17 w(REQ,)g(IERR)166
1725 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 1781 y Fg(typedef)23 b(int)g(MPI::Request)p
652 1781 V 16 w(complete)p 860 1781 V 16 w(fn\(void)g(*extra)p
1211 1781 V 16 w(state,)g(MPI::Request&)393 1838 y(request\);)1875
1878 y Fn(?)16 b Fm(\(Sept\))166 1924 y Fl(MPI)p 251
1924 14 2 v 16 w(REQUEST)p 470 1924 V 18 w(MARK)p 619
1924 V 16 w(COMPLETE)j Fr(in)o(v)o(ok)o(es)g(the)g(user)h(function)g
Fl(complete)p 1592 1924 V 16 w(fn)g Fr(with)f(input)75
1981 y(argumen)o(ts)d Fl(extra)p 396 1981 V 16 w(state)i
Fr(and)f Fl(request)h Fr(whic)o(h)g(are)e(the)h(argumen)o(ts)e(that)h
(w)o(ere)h(passed)g(b)o(y)f(the)h(caller)75 2037 y(of)i
Fl(MPI)p 216 2037 V 16 w(REQUEST)p 435 2037 V 18 w(INIT)p
Fr(.)f(This)i(function)g(t)o(ypically)h(cleans)f(up)g(after)e(the)i
(call)g(and)g(ma)o(y)e(put)i(in-)75 2094 y(formation)f(in)j
Fl(extra)p 445 2094 V 16 w(state)f Fr(whic)o(h)g(is)g(of)f(in)o(terest)
g(to)g(the)g(calling)i(program.)34 b Fl(complete)p 1662
2094 V 17 w(fn)20 b Fr(returns)p Fn(>)c Fm(\(Sept\))75
2150 y Fk(MPI)p 152 2150 13 2 v 14 w(SUCCESS)j Fr(if)j(it)e(succeeds)i
(in)g(C)e(or)g(C++)h(and)g(the)g(same)f(in)i(IERR)g(in)f(F)l(ortran.)35
b(A)21 b(call)h(to)75 2207 y Fl(MPI)p 160 2207 14 2 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 2207 V 15 w(REQUEST)p 1646 2207 V 18 w(MARK)p 1795
2207 V 17 w(COMPLETE)75 2263 y Fr(has)16 b(returned.)25
b Fl(MPI)p 449 2263 V 16 w(REQUEST)p 668 2263 V 18 w(MARK)p
817 2263 V 16 w(COMPLETE)17 b Fr(only)g(returns)f(after)g
Fl(complete)p 1629 2263 V 17 w(fn)h Fr(has)f(com-)75
2319 y(pleted.)1667 b Fn(?)16 b Fm(\(Sept\))166 2416
y Ff(Missing:)166 2466 y Fh(W)m(e)d(need)i(to)f(decide)h(what)f(to)f
(do)h(ab)q(out)g(status.)166 2570 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 2626 y Fl(MPI)p 160 2626
V 16 w(ST)l(ART)p Fn(f)p Fl(ALL)p Fn(g)p Fr(.)38 b(Once)22
b(the)g(user)f(is)h(done)g(with)g(a)f(request,)h(it)g(is)g(freed)g
(using)g(the)f(curren)o(t)75 2683 y Fl(MPI)p 160 2683
V 16 w(REQUEST)p 379 2683 V 18 w(FREE)15 b Fr(whic)o(h)h(uses)g(the)f
(callbac)o(k)h(function:)-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 Fj(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)p
436 49 15 2 v 17 w(Request)p 621 49 V 16 w(free)p 733
49 V 17 w(function\(void)f(*extra)p 1228 49 V 16 w(state,)h(MPI)p
1483 49 V 17 w(Request)393 106 y(request\);)166 192 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 249 y Fg(SUBROUTINE)22 b(REQUEST)p
508 249 V 17 w(FREE)p 621 249 V 16 w(FN\(EXTRA)p 829
249 V 16 w(STATE,)h(REQUEST,)g(IERR\))170 305 y(INTEGER)g(EXTRA)p
484 305 V 17 w(STATE,)g(REQUEST,)g(IERR)166 392 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 448 y Fg(typedef)23 b(int)g(MPI::Request)p 652
448 V 16 w(free)p 764 448 V 17 w(function\(void)f(*extra)p
1259 448 V 16 w(state,)h(MPI::Request&)393 504 y(request\);)166
591 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
647 y(request)i(whic)o(h)h(w)o(ere)g(storted)e(in)i Fl(extra)p
784 647 14 2 v 17 w(state)p Fr(.)27 b Fl(free)p 1002
647 V 16 w(fn)18 b Fr(returns)f Fk(MPI)p 1306 647 13
2 v 14 w(SUCCESS)f Fr(if)i(it)g(succeeds)g(in)g(C)-1992
b Fn(>)15 b Fm(\(Sept\))75 704 y Fr(or)g(C++)g(and)h(the)f(same)g(in)h
(IERR)g(in)g(F)l(ortran.)-117 706 y Fn(?)f Fm(\(Sept\))166
760 y Fr(The)g Fl(cancel)p 378 760 14 2 v 18 w(fn)g Fr(is)h(de\014ned)g
(as:)75 817 y Fg(typedef)23 b(int)g(MPI)p 436 817 15
2 v 17 w(Request)p 621 817 V 16 w(cancel)p 781 817 V
17 w(fn\(void)g(*extra)p 1133 817 V 16 w(state,)g(MPI)p
1388 817 V 17 w(Request)g(request\);)166 903 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 960 y Fg(SUBROUTINE)22 b(REQUEST)p 508
960 V 17 w(CANCEL)p 669 960 V 16 w(FN\(EXTRA)p 877 960
V 16 w(STATE,)h(REQUEST,)g(IERR\))170 1016 y(INTEGER)g(EXTRA)p
484 1016 V 17 w(STATE,)g(REQUEST,)g(IERR)166 1103 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 1159 y Fg(typedef)23 b(int)g(MPI::Request)p 652
1159 V 16 w(cancel)p 812 1159 V 16 w(fn\(void)g(*extra)p
1163 1159 V 17 w(state,)g(MPI::Request&)393 1215 y(request\);)166
1302 y Fr(This)18 b(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 1358 y Fl(MPI)p 160 1358 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 1358 V 17 w(fn)p Fr(,)f Fl(sta)o(rt)p
1518 1358 V 17 w(fn)p Fr(,)g(or)g Fl(complete)p 1824
1358 V 17 w(fn)75 1415 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 1471 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 1528 y(via)g Fl(extra)p
247 1528 V 17 w(state)p Fr(\).)21 b(See)15 b(section)h(6.2.3)e(for)g
(details.)166 1584 y(Finally)l(,)24 b(since)f(allo)q(cation)g(of)e(the)
g Fl(meta)p 910 1584 V 16 w(req)h Fr(ma)o(y)f(use)h(some)f(system)g
(resources,)i(it)f(can)f(b)q(e)75 1641 y(returned)16
b(to)e(the)h(system)g(with:)75 1792 y Fl(MPI)p 160 1792
V 16 w(MET)l(A)p 300 1792 V 17 w(REQUEST)p 520 1792 V
17 w(FREE\(meta)p 759 1792 V 17 w(req\))117 1869 y Fh(INOUT)62
b Fl(meta)p 416 1869 V 16 w(req)417 b Fh(T)o(yp)q(e)14
b(of)g(request)h(to)f(b)q(e)g(freed)75 1993 y Fg(int)23
b(MPI)p 245 1993 15 2 v 17 w(Meta)p 358 1993 V 17 w(request)p
543 1993 V 16 w(free\(MPI)p 751 1993 V 16 w(Meta)p 863
1993 V 17 w(request)g(*meta)p 1191 1993 V 16 w(req\))75
2080 y(MPI)p 150 2080 V 17 w(META)p 263 2080 V 16 w(REQUEST)p
447 2080 V 17 w(FREE\(META)p 680 2080 V 16 w(REQ,)g(IERROR\))170
2136 y(INTEGER)g(META)p 460 2136 V 17 w(REQ,)g(IERROR)75
2223 y(int)g(MPI::Meta)p 389 2223 V 16 w(request::Free\(void\))166
2309 y Fr(It)14 b(is)h(legal)g(to)e(free)h(a)g Fl(meta)p
639 2309 14 2 v 16 w(req)g Fr(for)g(whic)o(h)h(an)f(activ)o(e)g
Fl(request)i Fr(still)g(exists.)j Fl(MPI)14 b Fr(will)i(deallo)q(cate)
75 2366 y(the)f Fl(meta)p 251 2366 V 16 w(req)h Fr(when)f(it)h(is)f
(safe)g(to)g(do)g(so.)-928 b Fn(>)15 b Fm(\(Sept\))-117
2424 y Fn(?)g Fm(\(Sept\))75 2487 y Fi(6.2.3)49 b(F)o(ailed)17
b(User)e(F)o(unctions)h(and)g(Cancelling)i(Requests)75
2573 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 2573 V 17 w(fn)p Fr(.)26 b(This)18 b(can)f(happ)q(en)
75 2630 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)75
2686 y Fl(MPI)p 160 2686 V 16 w(CANCEL)16 b Fr(on)f(the)g(generalized)j
(request.)i(When)c Fl(cancel)p 1166 2686 V 17 w(fn)g
Fr(returns,)f(the)g(request)h(is)g(complete.)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 Fj(6.2.)29 b(GENERALIZED)16 b(REQUESTS)1076
b Fr(7)75 49 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 106 y(returns)c Fk(MPI)p 313 106 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
162 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 219 y Fl(MPI)p 160 219
14 2 v 16 w(TEST)p 290 219 V 16 w(CANCELLED)12 b Fr(return)f
Fl(\015ag=true)h Fr(if)g Fl(cancel)p 1055 219 V 17 w(fn)g
Fr(returned)g Fk(MPI)p 1376 219 13 2 v 14 w(SUCCESS)p
Fr(.)d Fl(MPI)i Fr(marks)g(the)75 275 y(request)k(suc)o(h)h(that)e
Fl(MPI)p 519 275 14 2 v 16 w(TEST)p 649 275 V 17 w(CANCELLED)h
Fr(returns)g Fk(\015ag=false)h Fr(otherwise.)k(Unlik)o(e)d(cancelling)g
(a)75 332 y(p)q(oin)o(t-to-p)q(oin)o(t)k(request,)h(a)e(successful)i
(cancel)g(do)q(es)f(not)f(imply)i(that)e(all)i(bu\013ers)e(and)h
(resources)75 388 y(are)16 b(unc)o(hanged.)25 b(Clean)o(up)17
b(is)g(exp)q(ected)h(of)e(the)g Fl(cancel)p 1068 388
V 18 w(fn)g Fr(but)h(not)f(required)i(b)o(y)e Fl(MPI)p
Fr(.)g(If)g Fl(cancel)p 1823 388 V 18 w(fn)75 444 y Fr(cannot)f(clean)h
(up)g(resources)f(then)h(it)f(can)g(raise)h(an)f(error.)189
546 y Fd(A)n(dvic)n(e)g(to)i(users.)189 620 y Fr(The)j
Fl(extra)p 385 620 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
677 y(where)15 b(cancel)h(do)q(es)g(not)f(return)g Fk(MPI)p
856 677 13 2 v 14 w(SUCCESS)p Fr(.)189 751 y(\()p Fd(End)g(of)i(advic)n
(e)f(to)g(users.)p Fr(\))166 853 y Fl(MPI)10 b Fr(pro)o(vides)i(a)e
(default)i(cancel)g(routine)f(called)h Fl(MPI)p 1109
853 14 2 v 16 w(CANCEL)p 1297 853 V 17 w(ERROR)p Fr(.)g(That)e(routine)
i(simply)75 909 y(raises)j(the)h Fl(MPI)e Fr(error)h
Fk(MPI)p 563 909 13 2 v 14 w(ERR)p 656 909 V 14 w(GR)p
Fr(.)1139 b Fn(>)16 b Fm(\(Sept\))166 1006 y Ff(Discussion:)166
1056 y Fh(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 1106 y(section.)1875 1153 y Fn(?)i
Fm(\(Sept\))75 1274 y Fi(6.2.4)49 b(Example)17 b(of)f(MPI)p
556 1274 15 2 v 18 w(ALLGA)l(THER)75 1360 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 1360 14 2 v 15 w(ALLGA)l(THER)p Fr(.)f(It)f(will)h(b)q(e)
75 1416 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 1473 y(in)k(the)f(comm)o
(unicator\).)166 1529 y(More)e(sp)q(eci\014cally)l(,)j(assume)d(eac)o
(h)h(pro)q(cess)g Fc(i)f Fr(has)g(an)g(arra)o(y)g(of)f(size)j
Fc(a)p Fr([)p Fc(p)p Fr(])d(and)i(its)g(v)m(alue)g(is)g(in)g
Fc(a)p Fr([)p Fc(i)p Fr(].)75 1586 y(The)19 b(algorithm)g(w)o(orks)f(b)
o(y)h(accepting)h(data)e(from)g(pro)q(cess)i(\()p Fc(i)11
b Fr(+)i Fc(p)g Fn(\000)g Fr(1\)\045)p Fc(p)18 b Fr(and)h(sending)h
(data)f(to)75 1642 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 1699 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 1755 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 1812
y(a)f(separate)f(send)h(and)g(recv)h(bu\013er.)j(Initialize)f(the)d
(send)h(bu\013er)e(on)h(pro)q(cess)g Fc(i)g Fr(to)f(b)q(e)i
Fc(a)p Fr([)p Fc(i)p Fr(].)i(After)d(the)75 1868 y(send)h(and)f(recv)h
(has)f(o)q(ccurred,)g(cop)o(y)g(the)g(recv)h(bu\013er)f(in)o(to)g(arra)
o(y)f Fc(a)h Fr(and)h(also)f(in)o(to)g(the)g(send)h(bu\013er)75
1925 y(and)i(rep)q(eat)f(the)h(pro)q(cess)g(un)o(til)h(done.)27
b(\(This)18 b(ma)o(y)e(not)i(b)q(e)g(the)g(normal)f(w)o(a)o(y)g(to)f
(do)i(this)g(but)g(it)f(is)75 1981 y(done)e(to)f(utilize)j(di\013eren)o
(t)d(features)g(for)g(the)h(sak)o(e)f(of)g(discussion.)21
b(Most)14 b(p)q(eople)i(w)o(ould)f(probably)g(do)75 2037
y(a)g(sendrecv)h(directly)g(in)o(to)g(the)f(correct)g(lo)q(cations)h
(in)g(arra)o(y)d Fc(a)p Fr(.\))166 2094 y(The)21 b(blo)q(c)o(king)g(C)g
(co)q(de)g(is)g(b)q(elo)o(w.)36 b(This)21 b(is)g(to)f(sho)o(w)g(ho)o(w)
g(it)g(w)o(ould)h(b)q(e)g(done)g(no)o(w)f(in)i Fl(MPI)75
2150 y Fr(without)15 b(a)g(non-blo)q(c)o(king)i(request.)75
2308 y Fg(MPI_Comm_size\(comm,)k(&p\);)75 2365 y(MPI_Comm_rank\(comm,)g
(&i\);)75 2421 y(/*)j(init)f(your)g(location)g(in)h(array)f(*/)75
2478 y(a[i])g(=)h(i;)75 2534 y(/*)g(set)f(initial)g(send)g(value)g(*/)
75 2591 y(as)h(=)f(a[i])75 2647 y(/*)h(process)e(to)i(recv)f(from)h
(and)f(persistent)g(request)g(*/)75 2704 y(from)g(=)h(\(i)g(+)f(p)h(-)g
(1\))f(\045)h(p;)-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 Fj(CHAPTER)15 b(6.)30 b(EXTERNAL)16
b(INTERF)-5 b(A)o(CES)75 49 y Fg(MPI_Recv_init\(&ar,)21
b(1,)j(MPI_DOUBLE,)e(from,)i(13,)f(comm,)g(&req_recv\);)75
106 y(/*)h(process)e(to)i(send)f(to)h(and)f(persistent)g(request)g(*/)
75 162 y(to)h(=)f(\(i)h(+)g(1\))f(\045)h(p;)75 219 y
(MPI_Send_init\(&as,)d(1,)j(MPI_DOUBLE,)e(to,)i(13,)f(comm,)g
(&req_send\);)75 275 y(/*)h(do)f(send)g(and)h(recv)f(p)h(-)g(1)f(times)
h(*/)75 332 y(for)f(\(c1)h(=)g(0;)f(c1)h(<)g(p)f(-)h(1;)g(c1++\))f({)
147 388 y(/*)g(begin)g(persistent)g(send)g(and)h(recv)f(*/)147
444 y(MPI_Start\(&req_recv\);)147 501 y(MPI_Start\(&req_send\);)147
557 y(/*)g(when)g(recv)h(complete)f(copy)g(result)g(in)h(final)f(array)
g(a)h(*/)147 614 y(MPI_Wait\(&req_recv,)d(&status_recv\);)147
670 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
727 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 783 y(MPI_Wait\(&req_send,)e
(&status_send\);)147 840 y(as)i(=)h(ar;)75 896 y(})75
953 y(/*)g(free)f(up)g(persistent)g(requests)g(*/)75
1009 y(MPI_Request_free\(&req_recv)o(\);)75 1065 y
(MPI_Request_free\(&req_send)o(\);)166 1172 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 1228 y(pro)q(cesses.)166
1285 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 1329 364 2 v 74 1386 2 57 v 100 1369 a(c1)p
167 1386 V 50 w(send)p 305 1386 V 50 w(recv)p 437 1386
V 75 1387 364 2 v 74 1444 2 57 v 110 1427 a(0)p 167 1444
V 68 w Fc(a)p Fr([1])p 305 1444 V 62 w Fc(a)p Fr([0])p
437 1444 V 74 1500 V 110 1483 a(1)p 167 1500 V 68 w Fc(a)p
Fr([0])p 305 1500 V 62 w Fc(a)p Fr([3])p 437 1500 V 74
1557 V 110 1540 a(2)p 167 1557 V 68 w Fc(a)p Fr([3])p
305 1557 V 62 w Fc(a)p Fr([2])p 437 1557 V 75 1558 364
2 v 166 1624 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 1681 y(cation)g(request)f(to)g(send)h(to)e(\()p
Fc(i)6 b Fr(+)g(1\)\045)p Fc(p)13 b Fr(and)h(a)f(request)g(to)g(recv)h
(from)e(\()p Fc(i)6 b Fr(+)g Fc(p)g Fn(\000)g Fr(1\)\045)p
Fc(p)p Fr(.)20 b(The)14 b(algorithm)75 1737 y(is)j(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
1793 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 1793 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 1850 y(data)e(in)o(to)h(the)h(correct)e(lo)q(cation)i
(in)g(the)f(arra)o(y)f Fc(a)p Fr(.)28 b(If)19 b(the)f(send)g(is)h
(done,)g(then)f(y)o(ou)g(can)g(cop)o(y)g(the)75 1906
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 1963 y(y)o(ou)e(ha)o(v)o(e)g(not)f(\014nished.)166
2019 y(Belo)o(w)h(is)h(C)f(co)q(de.)166 2076 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(struct)23 b(info)g({)123 2295 y(MPI_Comm)f(*comm;)
123 2351 y(int)h(p,)h(i;)123 2408 y(MPI_Mutex)e(mutex;)123
2464 y(MPI_Request)g(request,)h(req_recv,)f(req_send;)123
2521 y(double)h(ar,)g(as,)h(*a;)123 2577 y(int)f(num_complete,)f
(num_done;)75 2634 y(})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 Fj(6.2.)29 b(GENERALIZED)16 b(REQUESTS)1076
b Fr(9)75 49 y Fg(/*)24 b(this)f(supplies)g(the)g(init,)g(start,)g
(complete,)g(free,)g(and)h(cancel)f(functions)147 106
y(for)g(the)g(request.)47 b(MPI)24 b(returns)e(in)i(meta_req)f(the)g
(new)h(meta)f(request)g(*/)75 162 y(MPI_Meta_request_create\(in)o
(it_fn,)d(start_fn,)j(complete_fn,)f(free_fn,)75 219
y(MPI_CANCEL_ERROR,)g(&meta_req\);)75 332 y(/*)i(set)f(up)h(the)f
(information)f(needed)h(by)h(the)g(calls.)46 b(The)24
b(communicator)e(to)75 388 y(use)h(in)h(the)f(calls)h(is)f(added)g(to)h
(the)f(structure)g(info)g(*/)75 444 y(info.comm)g(=)g(comm;)75
557 y(/*)h(Initialize)e(the)i(request.)46 b(This)23 b(MPI)h(routine)f
(will)g(call)g(the)h(init_fn.)f(*/)75 614 y
(MPI_Request_init\(meta_req,)d(&info,)j(&request\);)75
727 y(/*)h(start)f(the)g(non-blocking)f(operation.)47
b(This)23 b(calls)g(start_fn.)g(*/)75 783 y(MPI_Start\(&request\);)75
896 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 953 y(going.)46 b(This)24
b(is)f(not)h(shown.)f(*/)75 1065 y(/*)h(now)f(wait)g(until)h
(non-blocking)e(operation)g(is)i(done)f(*/)75 1122 y
(MPI_Wait\(&request,)e(&status\);)75 1235 y(/*)j(done)f(with)g
(request,)g(free)g(up.)48 b(This)23 b(calls)g(free_fn.)g(*/)75
1291 y(MPI_Request_free\(&request\))o(;)75 1404 y(/*)h(done)f(with)g
(meta_req,)g(free)g(up)h(*/)75 1461 y(MPI_Meta_request_free\(&met)o
(a_req\);)166 1567 y Fr(The)15 b(functions)h(for)f(the)g(generalized)i
(request)e(are:)75 1730 y Fg(init_fn\(meta_req,)22 b(*extra,)g
(request\))75 1786 y({)75 1899 y(/*)i(initialize)e(counters)h(and)g
(info)h(*/)75 1955 y(MPI_Comm_size\(extra->comm,)c(&extra->p\);)75
2012 y(MPI_Comm_rank\(extra->comm,)g(&extra->i\);)75
2068 y(extra->a)j(=)g(\(double)g(*\)malloc\(\(size_t\)sizeof\(doubl)o
(e\))e(*)j(extra->p\))75 2125 y(if)g(\(extra->a)e(==)i(NULL\))f({)123
2181 y(return)g(!MPI_SUCCESS;)75 2238 y(})75 2294 y(/*)h(create)f(a)g
(mutex)h(*/)75 2351 y(MPI_Mutex_create\(MPI_COMM_)o(SELF,)d
(MPI_MUTEX_ATTRIBUTE??,)f(&extra->mutex\);)75 2407 y(extra->request)i
(=)i(request;)75 2464 y(/*)g(process)e(to)i(recv)f(from)h(and)f
(persistent)g(request)g(*/)75 2520 y(from)g(=)h(\(extra->i)f(+)g
(extra->p)g(-)h(1\))f(\045)h(extra->p;)75 2576 y
(MPI_Recv_init\(&extra->ar,)c(1,)k(MPI_DOUBLE,)e(from,)i(13,)f
(extra->comm,)f(extra,)123 2633 y(&extra->req_recv\);)75
2689 y(/*)i(process)e(to)i(send)f(to)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: 10 12
10 11 bop 75 -100 a Fr(10)876 b Fj(CHAPTER)15 b(6.)30
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fg(to)24
b(=)f(\(extra->i)g(+)h(1\))f(\045)h(extra->p;)75 106
y(MPI_Send_init\(&extra->as,)c(1,)k(MPI_DOUBLE,)e(to,)i(13,)f
(extra->comm,)123 162 y(&extra->req_send\);)75 219 y(*)h(completed)e
(ok)i(*/)75 275 y(return)f(MPI_SUCCESS;)75 332 y(})75
557 y(start_fn\(*extra,)f(request\))75 614 y({)75 670
y(/*)i(init)f(your)g(location)g(in)h(array)f(*/)75 727
y(extra->a[extra->i])e(=)j(extra->i;)75 783 y(/*)g(set)f(initial)g
(send)g(value)g(*/)75 840 y(extra->as)g(=)g(extra->a[extra->i])75
896 y(/*)h(haven't)e(done)i(any)f(yet)h(*/)75 953 y
(extra->num_completed)d(=)j(0;)75 1009 y(extra->num_done)e(=)i(0;)75
1122 y(/*)g(begin)f(persistent)f(recv)i(and)f(send)g(*/)75
1178 y(MPI_Start\(&extra->req_recv)o(\);)75 1235 y
(MPI_Post_Handler\(extra->re)o(q_recv,)d(MPI_HANDLER_ATTRIBUTE,)h
(handler_fn,)123 1291 y(&extra,)i(MPI_HANDLER_DEFAULT\);)75
1348 y(MPI_Start\(&extra->req_send)o(\);)75 1404 y
(MPI_Post_Handler\(extra->re)o(q_send,)d(MPI_HANDLER_ATTRIBUTE,)h
(handler_fn,)123 1461 y(&extra,)i(MPI_HANDLER_DEFAULT\);)75
1574 y(return)g(MPI_SUCCESS;)75 1630 y(})166 1736 y Fr(Eac)o(h)15
b(time)g(a)g(request)h(\014nishes,)g(the)f(handler)p
980 1736 14 2 v 18 w(fn)g(gets)g(called:)75 1843 y Fg
(handler_fn\(request,)21 b(*extra\))75 1899 y({)75 1955
y(MPI_Mutex_lock\(extra->mute)o(x\);)75 2012 y(/*)j(note)f(a)h(send)f
(or)h(recv)f(finished)g(*/)75 2068 y(extra->num_completed++;)75
2125 y(/*)h(if)f(num_complete)f(!=)i(2)g(then)f(both)g(send)h(and)f
(recv)g(not)h(done)f(*/)75 2181 y(if)h(\(extra->num_completed)d(!=)i
(2\))h({)170 2238 y(return)f(\(MPI_SUCCESS\);)75 2294
y(})75 2407 y(extra->num_completed)e(=)j(0;)f(/*)h(reset)f(*/)75
2464 y(MPI_Mutex_unlock\(extra->mu)o(tex\);)75 2576 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
2633 y(/*)h(note)f(another)g(round)g(completed)g(*/)75
2689 y(extra->num_done++;)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 Fj(6.3.)34 b(COMMUNICA)l(TOR)16 b(ID)1182
b Fr(11)75 106 y Fg(/*)24 b(copy)f(received)g(data)g(*/)75
162 y(extra->a[\(extra->i)e(-)j(1)g(-)g(extra->num_done)d(+)j
(extra->p\))f(\045)g(extra->p])218 219 y(=)h(extra->ar;)75
275 y(/*)g(see)f(if)h(completely)e(done)h(*/)75 332 y(if)h
(\(extra->num_done)d(==)j(extra->p)f(-)g(1\))h({)170
388 y(/*)g(mark)f(request)g(done)h(*/)170 444 y
(MPI_Request_mark_completed\(&e)o(xtra->re)o(quest\);)75
501 y(})75 557 y(else)f({)170 614 y(/*)h(set)f(data)h(to)f(be)h(sent)f
(*/)170 670 y(extra->as)g(=)h(extra->ar;)170 783 y(/*)g(begin)f(new)h
(round)f(*/)170 840 y(MPI_Start\(&extra->req_recv\);)170
896 y(MPI_Start\(&extra->req_send\);)170 953 y
(MPI_Post_Handler\(&extra->req_)o(recv,)e(MPI_HANDLER_ATTRIBUTE,)g
(handler_fn,)218 1009 y(&extra->status_recv,)g(MPI_HANDLER_DEFAULT\);)
170 1065 y(MPI_Post_Handler\(&extra->req_)o(send,)g
(MPI_HANDLER_ATTRIBUTE,)g(handler_fn,)218 1122 y(&extra->status_send,)g
(MPI_HANDLER_DEFAULT\);)75 1178 y(})75 1291 y(return)i
(\(MPI_SUCCESS\);)75 1348 y(})75 1517 y(free_fn\(extra,)f(*request\))75
1574 y({)75 1630 y(/*)i(free)f(up)g(the)h(persistent)e(communications)g
(requests)h(*/)75 1686 y(MPI_Request_free\(&extra->r)o(eq_recv)o(\);)75
1743 y(MPI_Request_free\(&extra->r)o(eq_send)o(\);)75
1799 y(MPI_Mutex_free\(&extra->mut)o(ex\);)75 1856 y(return)g
(MPI_SUCCESS;)75 1912 y(})75 2112 y Fo(6.3)59 b(Communicato)n(r)22
b(ID)75 2213 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 2270 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 2326 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 2383
y(Th)o(us,)c(the)g(follo)o(wing)h(call)g(is)g(giv)o(en:)-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 Fj(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(COMMUNICA)l(TOR)p 542 49 V 18 w(ID\(comm,)12
b(id\))117 126 y Fh(IN)155 b Fl(comm)470 b Fh(Comm)o(unicator)11
b(to)j(return)h(id)e(of)117 199 y(OUT)108 b Fl(id)553
b Fh(id)14 b(of)f(comm)75 323 y Fg(int)23 b(MPI)p 245
323 15 2 v 17 w(Communicator)p 550 323 V 16 w(id\(MPI)p
710 323 V 16 w(Comm)g(comm,)h(int)f(*id\))75 410 y(MPI)p
150 410 V 17 w(COMMUNICATOR)p 455 410 V 15 w(ID\(COMM,)g(ID,)h
(IERROR\))170 466 y(INTEGER)f(COMM,)h(ID,)f(IERROR)75
553 y(int)g(MPI::Comm::Id\(int&)f(id\))h(const)189 672
y Fd(A)n(dvic)n(e)17 b(to)h(implementors.)52 b Fr(The)17
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)f(in)i(C)189 728 y(and)d(F)l(ortran,)f(and)h(as)g(an)g(inline)j
(in)e(C++.)k(\()p Fd(End)c(of)g(advic)n(e)g(to)h(implementors.)p
Fr(\))189 818 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 874 y(the)f(o)o(v)o(erhead)f(is)h(v)o(ery)g(imp)q
(ortan)o(t.)18 b(Allo)o(wing)c(the)d(use)i(of)e(a)h(macro)f(or)g
(inline)k(function)d(helps)i(to)189 930 y(accomplish)i(this.)k(When)15
b(using)g(a)f(macro,)g(the)g(only)h(loss)g(is)g(the)g(error)f(co)q(de)h
(but)f(this)h(seemed)189 987 y(acceptable.)21 b(\()p
Fd(End)15 b(of)i(r)n(ationale.)p Fr(\))166 1076 y(T)l(o)d(sp)q(ecify)h
(the)f(uniqueness)i(of)e Fl(ID)g Fr(returned,)g(the)g(k)o(ey)g
Fk(MPI)p 1228 1076 13 2 v 15 w(COMM)p 1373 1076 V 14
w(ID)p 1429 1076 V 15 w(IS)p 1479 1076 V 14 w(UNIQUE)f
Fr(is)h(a)o(v)m(ailable)75 1133 y(on)h Fk(MPI)p 215 1133
V 14 w(COMM)p 359 1133 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 1212 y Fk(MPI)p 152 1212 V
14 w(COMM)p 296 1212 V 15 w(ID)p 353 1212 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 1212 14 2 v 16 w(COMMUNICA)l(TOR)p 1735
1212 V 18 w(ID)f Fr(are)189 1269 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 1325 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
1382 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
1438 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
1495 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
1583 y Fk(MPI)p 152 1583 13 2 v 14 w(COMM)p 296 1583
V 15 w(ID)p 353 1583 V 14 w(NOT)p 455 1583 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 1639 y
Fk(MPI)p 266 1639 V 14 w(COMM)p 410 1639 V 15 w(ID)p
467 1639 V 14 w(UNIQUE)p Fr(.)-117 1668 y Fn(?)j Fm(\(Sept\))189
1752 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 1808 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 1865 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 1921 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 1977 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 2034 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 2090 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 2147 y(could)i(easily)g(pro)o(vide)g(this)f
(information.)-1046 b Fn(>)15 b Fm(\(Sept\))189 2219
y Fr(The)f(attribute)h(k)o(ey)f(is)h(placed)h(on)e Fk(MPI)p
879 2219 V 15 w(COMM)p 1024 2219 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 2276 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 2365 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 2421 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
2478 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 2534 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 2591 y(whic)o(h)k(w)o(ork)e(on)h(the)g
(whole)g(in)o(tercomm)o(unicator,)h(e.g.,)e Fl(MPI)p
1304 2591 14 2 v 16 w(BARRIER)p Fr(.)i(Also,)g(the)f(seman-)189
2647 y(tics)g(w)o(ould)h(b)q(e)g(di\013eren)o(t)f(b)q(et)o(w)o(een)h
(in)o(ter-)g(and)f(in)o(tra-comm)o(unicators.)29 b(F)l(or)17
b(this)i(reason)f(an)189 2704 y(in)o(tercomm)o(unicator)d(returns)g(a)g
(unique)h(v)m(alue)h(for)d(all)j(mem)o(b)q(ers.)j(\()p
Fd(End)15 b(of)i(advic)n(e)f(to)g(users.)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: 13 15
13 14 bop 75 -100 a Fj(6.4.)34 b(A)o(CCESSING)15 b Fl(MPI)g
Fj(D)o(A)l(T)l(A)l(TYPES)994 b Fr(13)166 49 y Ff(Missing:)166
99 y Fh(With)16 b(dynamic)e(and)j(p)q(ossibly)f(m)o(ultiple)e
Fk(MPI)p 933 99 13 2 v 14 w(COMM)p 1077 99 V 15 w(W)o(ORLD)p
Fh(s,)j(I)f(assume)g(w)o(e)h(w)o(an)o(t)f(the)h(k)o(ey)f(to)g(b)q(e)75
149 y(the)e(same)f(on)h(all)f(of)g(them?)1875 196 y Fn(?)j
Fm(\(Sept\))75 339 y Fo(6.4)59 b(Accessing)20 b(MPI)g(Datat)n(yp)r(es)
75 441 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 497 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 554 y(the)c(datat)o(yp)q
(e.)23 b(There)17 b(are)f(sev)o(eral)g(cases,)g(ho)o(w)o(ev)o(er,)g
(where)g(accessing)h(the)g(la)o(y)o(out)f(information)g(in)75
610 y(opaque)k(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 667 y(this.)166 723 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 780 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 780 14 2 v 15 w(PUT)20 b Fr(and)h Fl(MPI)p 1514
780 V 15 w(GET)g Fr(discussed)g(in)75 836 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.)
75 892 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 949 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 1005 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
1062 y(sp)q(ecify)l(.)166 1118 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 1175 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
1231 y(accessed)h(b)o(y)e Fl(MPI)p Fr(.)g(Use)i(of)e
Fl(MPI)p 645 1231 V 16 w(P)l(A)o(CK)h Fr(ma)o(y)f(giv)o(e)h(a)g(means)g
(for)f(iden)o(tifying)j Fd(which)e Fr(data)g(in)g(a)g(bu\013er)75
1288 y Fl(MPI)h Fr(accesses,)g(but)g(not)g Fd(wher)n(e)p
Fr(.)166 1344 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 1401 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 1457 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 1513 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 1570 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 1626
y(a)g(la)o(y)o(out)g(of)f(data)h(in)h(a)f(\014le)h(is)g(natural.)166
1683 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
1739 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 1796 y(a)g(general)h(data)e(la)o(y)o
(out)h(represen)o(tation.)166 1852 y(The)e(second)g(section)g(describ)q
(es)h(a)f(c)o(haracter)f(represen)o(tation)g(for)g Fl(MPI)g
Fr(datat)o(yp)q(es.)19 b(This)13 b(allo)o(ws)75 1909
y(a)i(simple)i(mec)o(hanism)e(for)g(creating)g(a)g(p)q(ortable)h
(represen)o(tation)f(of)g(a)g(datat)o(yp)q(e.)75 2030
y Fi(6.4.1)49 b(Lo)o(w)17 b(level)g(datat)o(yp)q(e)f(accessing)75
2116 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 2173 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 2229 y(len)o(t")g(to)g(the)g(original)h(in)h
(terms)d(of)h(their)h(t)o(yp)q(emaps.)-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 Fj(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(TYPE)p 293 49 V 17 w(ENVELOPE\(datat)o(yp)q(e,)17
b(count,)f(combiner\))117 126 y Fh(IN)155 b Fl(datat)o(yp)q(e)424
b Fh(datat)o(yp)q(e)14 b(to)g(access\(handle\))117 202
y(OUT)108 b Fl(count)482 b Fh(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 277 y(OUT)108
b Fl(combiner)414 b Fh(com)o(biner\(in)o(teger\))75 401
y Fg(int)23 b(MPI)p 245 401 15 2 v 17 w(Type)p 358 401
V 17 w(envelope\(MPI)p 663 401 V 15 w(Datatype)g(datatype,)g(int*)g
(count,)g(int*)g(combiner\))75 488 y(MPI)p 150 488 V
17 w(TYPE)p 263 488 V 16 w(ENVELOPE\(DATATYPE,)f(COUNT,)h(COMBINER,)f
(IERROR\))170 544 y(INTEGER)h(DATATYPE,)g(COUNT,)g(COMBINER,)g(IERROR)
75 631 y(int)g(MPI::Datatype::Envelope\(int&)d(count,)k(int&)f
(combiner\))f(const)166 717 y Fr(Giv)o(en)10 b(an)h Fl(MPI)e
Fr(datat)o(yp)q(e)h Fl(datat)o(yp)q(e)p Fr(,)i(returns)e(information)g
(on)g(the)h(format)e(in)h(whic)o(h)i Fl(MPI)p 1742 717
14 2 v 15 w(TYPE)p 1874 717 V 17 w(CONTENTS)75 773 y
Fr(describ)q(ed)i(b)q(elo)o(w)f(returns)e(in)o(ternal)i(information)f
(of)g Fl(datat)o(yp)q(e)p Fr(.)20 b(The)13 b(t)o(yp)q(e)f(of)f(the)h
(format)f(is)i(returned)75 830 y(in)j Fl(combiner)f Fr(as)g(one)g(of)g
(the)g(follo)o(wing)h(de\014ned)g(constan)o(ts:)117 934
y Fk(MPI)p 194 934 13 2 v 14 w(BASIC)623 b Fr(a)15 b(basic)g(datat)o
(yp)q(e)117 988 y Fk(MPI)p 194 988 V 14 w(CONTIG)586
b Fl(MPI)p 1032 988 14 2 v 16 w(TYPE)p 1165 988 V 16
w(CONTIGUOUS)117 1042 y Fk(MPI)p 194 1042 13 2 v 14 w(VECTOR)575
b Fl(MPI)p 1032 1042 14 2 v 16 w(TYPE)p 1165 1042 V 16
w(VECTOR)117 1097 y Fk(MPI)p 194 1097 13 2 v 14 w(HVECTOR)546
b Fl(MPI)p 1032 1097 14 2 v 16 w(TYPE)p 1165 1097 V 16
w(HVECTOR)117 1151 y Fk(MPI)p 194 1151 13 2 v 14 w(INDEXED)562
b Fl(MPI)p 1032 1151 14 2 v 16 w(TYPE)p 1165 1151 V 16
w(INDEXED)117 1206 y Fk(MPI)p 194 1206 13 2 v 14 w(HINDEXED)533
b Fl(MPI)p 1032 1206 14 2 v 16 w(TYPE)p 1165 1206 V 16
w(HINDEXED)117 1260 y Fk(MPI)p 194 1260 13 2 v 14 w(STRUCT)579
b Fl(MPI)p 1032 1260 14 2 v 16 w(TYPE)p 1165 1260 V 16
w(STRUCT)75 1343 y Fr(These)16 b(constan)o(ts)e(are)h(in)o(tegers.)166
1399 y(If)d Fl(combiner)g Fr(is)h Fk(MPI)p 513 1399 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
1456 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 1512 y(datat)o(yp)q(e)h
(constructor)f(function)i(indicated)h(b)o(y)e Fl(combiner)p
Fr(.)166 1609 y Ff(Missing:)166 1659 y Fh(More)e(com)o(biner)f(tags)h
(will)e(b)q(e)j(necessary)g(if)e(new)i(datat)o(yp)q(es)f(discussed)i
(in)d(the)i(miscellan)o(y)c(c)o(hapter)k(and)75 1709
y(others)h(are)f(v)o(oted)g(in.)166 1813 y Fl(MPI)p 251
1813 14 2 v 16 w(TYPE)p 384 1813 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 1869 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 1925 y(one)d(restriction:)27
b(com)o(biners)19 b(indicating)i Fl(MPI)p 922 1925 V
15 w(TYPE)p 1054 1925 V 17 w(HVECTOR)p Fr(,)f Fl(MPI)p
1397 1925 V 16 w(TYPE)p 1530 1925 V 16 w(HINDEXED)p Fr(,)f(and)75
1982 y Fl(MPI)p 160 1982 V 16 w(TYPE)p 293 1982 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 2088 y Fd(R)n(ationale.)37 b Fr(The)12
b(ab)q(o)o(v)o(e)f(restriction)h(ensures)g(that)f(\\p)q(ortabilit)o(y")
h(of)f(a)h(datat)o(yp)q(e)f(is)h(preserv)o(ed)189 2145
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 2201
y(\()p Fd(End)15 b(of)i(r)n(ationale.)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: 15 17
15 16 bop 75 -100 a Fj(6.4.)34 b(A)o(CCESSING)15 b Fl(MPI)g
Fj(D)o(A)l(T)l(A)l(TYPES)994 b Fr(15)75 49 y Fl(MPI)p
160 49 14 2 v 16 w(TYPE)p 293 49 V 17 w(CONTENTS\(datat)o(yp)q(e,)21
b(sta)o(rt,)e(count,)h(a)o(rra)o(y)p 1116 49 V 15 w(blo)q(cklens,)g(a)o
(rra)o(y)p 1430 49 V 15 w(disps,)g(a)o(rra)o(y)p 1664
49 V 15 w(hdisps,)h(a)o(r-)75 106 y(ra)o(y)p 136 106
V 15 w(t)o(yp)q(es\))117 183 y Fh(IN)155 b Fl(datat)o(yp)q(e)424
b Fh(datat)o(yp)q(e)14 b(to)g(access\(handle\))117 255
y(IN)155 b Fl(sta)o(rt)501 b Fh(index)13 b(of)g(\014rst)h(elemen)o(ts)f
(to)g(access\(non-negativ)o(e)h(in)o(teger\))117 327
y(IN)155 b Fl(count)482 b Fh(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 399
y(OUT)108 b Fl(a)o(rra)o(y)p 416 399 V 15 w(blo)q(cklens)306
b Fh(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 471 y(OUT)108 b Fl(a)o(rra)o(y)p
416 471 V 15 w(disps)386 b Fh(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
528 y(of)k(non-negativ)o(e)h(in)o(teger\))117 600 y(OUT)108
b Fl(a)o(rra)o(y)p 416 600 V 15 w(hdisps)363 b Fh(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 656 y(of)k(in)o(teger\))117 729 y(OUT)108
b Fl(a)o(rrry)p 411 729 V 15 w(t)o(yp)q(es)385 b Fh(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 785 y(ob)r(jects\))75 909 y Fg(int)k(MPI)p
245 909 15 2 v 17 w(Type)p 358 909 V 17 w(contents\(MPI)p
663 909 V 15 w(Datatype)g(datatype,)g(int)g(start,)g(int)h(count,)393
966 y(int)g(*array)p 636 966 V 16 w(blocklens,)e(int)i(*array)p
1154 966 V 16 w(disps,)f(MPI)p 1409 966 V 17 w(Aint)g(*array)p
1689 966 V 17 w(hdisps,)393 1022 y(MPI)p 468 1022 V 17
w(Datatype)g(*array)p 844 1022 V 16 w(types\))75 1109
y(MPI)p 150 1109 V 17 w(TYPE)p 263 1109 V 16 w(CONTENTS\(DATATYPE,)f
(START,)h(COUNT,)g(ARRAY)p 1187 1109 V 16 w(BLOCKLENS,)g(ARRAY)p
1586 1109 V 16 w(DISPS,)393 1165 y(ARRAY)p 516 1165 V
17 w(HDISPS,)g(ARRAY)p 844 1165 V 16 w(TYPES,)g(IERROR\))170
1222 y(INTEGER)g(DATATYPE,)g(START,)g(COUNT,)g(ARRAY)p
1057 1222 V 17 w(BLOCKLENS\(*\),)f(ARRAY)p 1528 1222
V 16 w(DISPS\(*\),)170 1278 y(ARRAY)p 293 1278 V 17 w(HDISPS\(*\),)g
(ARRAY)p 692 1278 V 17 w(TYPES\(*\),)h(IERROR)75 1365
y(int)g(MPI::Datatype::Contents\(int)e(start,)i(int)g(count,)g(int)h
(array)p 1487 1365 V 16 w(blocklens[],)393 1421 y(int)g(array)p
612 1421 V 16 w(disps[],)f(MPI::Aint)g(array)p 1202 1421
V 16 w(hdisps[],)393 1478 y(MPI::Datatype)f(array)p 850
1478 V 17 w(types[]\))166 1564 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 1620 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
1677 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 1677 14 2 v 16 w(TYPE)p
1339 1677 V 17 w(ENVELOPE)h Fr(is)g Fk(MPI)p 1734 1677
13 2 v 14 w(BASIC)p Fr(,)75 1733 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
1733 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 1733
V 15 w(blo)q(cklens)p Fr(,)h Fl(a)o(rra)o(y)p 1663 1733
V 14 w(disps)p Fr(,)g(and)75 1790 y Fl(a)o(rra)o(y)p
173 1790 V 15 w(hdisps)17 b Fr(are)e(not)g(touc)o(hed.)166
1846 y(If)i(the)g Fl(combiner)f Fr(returned)h(b)o(y)g
Fl(MPI)p 818 1846 V 16 w(TYPE)p 951 1846 V 16 w(ENVELOPE)h
Fr(is)f Fk(MPI)p 1336 1846 13 2 v 15 w(CONTIG)p Fr(,)e(then)i
Fl(oldt)o(yp)q(e)h Fr(that)75 1903 y(can)f(b)q(e)g(passed)f(to)g
Fl(MPI)p 510 1903 14 2 v 16 w(TYPE)p 643 1903 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 1959 y(turned)f(in)g Fl(a)o(rra)o(y)p
373 1959 V 14 w(t)o(yp)q(es[0])p Fr(.)21 b Fl(Arra)o(y)p
671 1959 V 16 w(blo)q(cklens)p Fr(,)16 b Fl(a)o(rra)o(y)p
982 1959 V 15 w(disps)p Fr(,)g(and)g Fl(a)o(rra)o(y)p
1301 1959 V 14 w(hdisps)h Fr(are)e(not)g(touc)o(hed.)166
2016 y(If)c(the)f Fl(combiner)g Fr(returned)h(b)o(y)g
Fl(MPI)p 787 2016 V 16 w(TYPE)p 920 2016 V 16 w(ENVELOPE)h
Fr(is)f Fk(MPI)p 1293 2016 13 2 v 14 w(VECTOR)p Fr(,)e(then)i
Fl(blo)q(cklen)p Fr(,)h Fl(stride)75 2072 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 2072 14 2 v 16 w(TYPE)p 1024 2072 V 17 w(VECTOR)i
Fr(to)e(reconstruct)g(an)h(equiv)m(alen)o(t)h(of)75 2129
y Fl(datat)o(yp)q(e)16 b Fr(are)e(returned)h(in)h Fl(a)o(rra)o(y)p
664 2129 V 14 w(blo)q(cklens[0])p Fr(,)g Fl(a)o(rra)o(y)p
1022 2129 V 15 w(disps[0])g Fr(and)f Fl(a)o(rra)o(y)p
1376 2129 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 2185 y(ra)o(y)p 136 2185 V 15 w(hdisps)c
Fr(is)d(not)g(touc)o(hed.)166 2241 y(If)20 b(the)g Fl(combiner)g
Fr(returned)g(b)o(y)g Fl(MPI)p 834 2241 V 16 w(TYPE)p
967 2241 V 17 w(ENVELOPE)h Fr(is)g Fk(MPI)p 1360 2241
13 2 v 14 w(HVECTOR)p Fr(,)e(then)h Fl(blo)q(cklen)p
Fr(,)75 2298 y Fl(stride)d Fr(and)g Fl(oldt)o(yp)q(e)h
Fr(that)e(can)h(b)q(e)g(passed)g(to)f Fl(MPI)p 976 2298
14 2 v 16 w(TYPE)p 1109 2298 V 16 w(HVECTOR)i Fr(to)e(construct)h(an)f
(equiv)m(alen)o(t)75 2354 y(of)e Fl(datat)o(yp)q(e)i
Fr(are)d(returned)i(in)g Fl(a)o(rra)o(y)p 713 2354 V
15 w(blo)q(cklens[0])p Fr(,)g Fl(a)o(rra)o(y)p 1071 2354
V 15 w(hdisps[0])h Fr(and)e Fl(a)o(rra)o(y)p 1447 2354
V 15 w(t)o(yp)q(es[0])p Fr(,)h(resp)q(ectiv)o(ely)l(.)75
2411 y Fl(a)o(rra)o(y)p 173 2411 V 15 w(disps)h Fr(is)g(not)f(touc)o
(hed.)166 2467 y(If)g(the)h Fl(combiner)e Fr(is)i Fk(MPI)p
600 2467 13 2 v 14 w(INDEXED)p Fr(,)e Fk(MPI)p 895 2467
V 15 w(HINDEXED)p Fr(,)g(or)h Fk(MPI)p 1276 2467 V 14
w(STRUCT)p Fr(,)f(then)i(de\014ne)g Fl(\014lled)p Fr(:)189
2546 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 2553 y Fr(con)758 2546
y Fc(;)g Fd(c)n(ount)885 2553 y Fr(en)o(v)965 2546 y
Fn(\000)j Fd(start)p Fr(\)\))75 2625 y(where)189 2704
y Fd(c)n(ount)296 2711 y Fr(en)o(v)378 2704 y(=)i Fl(count)k
Fr(returned)e(b)o(y)h Fl(MPI)p 881 2704 14 2 v 15 w(TYPE)p
1013 2704 V 17 w(ENVELOPE)-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 Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)189 49 y Fd(start)17
b Fr(=)c Fl(sta)o(rt)i Fr(passed)h(in)g(to)e Fl(MPI)p
784 49 14 2 v 16 w(TYPE)p 917 49 V 17 w(CONTENTS)189
152 y Fd(c)n(ount)296 159 y Fr(con)378 152 y(=)f Fl(count)k
Fr(passed)e(in)h(to)f Fl(MPI)p 886 152 V 16 w(TYPE)p
1019 152 V 16 w(CONTENTS)166 254 y Fr(If)21 b(the)g Fl(combiner)f
Fr(returned)h(b)o(y)f Fl(MPI)p 837 254 V 16 w(TYPE)p
970 254 V 17 w(ENVELOPE)i Fr(is)f Fk(MPI)p 1364 254 13
2 v 14 w(INDEXED)p Fr(,)e(then)i Fl(\014lled)h Fr(ele-)75
311 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 311 14 2 v 15 w(of)p 835 311 V 16
w(blo)q(cklengths)j Fr(and)f Fl(a)o(rra)o(y)p 1293 311
V 14 w(of)p 1344 311 V 16 w(displacements)h Fr(that)e(can)g(b)q(e)75
367 y(passed)14 b(to)e Fl(MPI)p 356 367 V 16 w(TYPE)p
489 367 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
424 y(\014rst)i Fl(\014lled)h Fr(p)q(ositions)h(of)e
Fl(a)o(rra)o(y)p 620 424 V 14 w(blo)q(cklens)i Fr(and)f
Fl(a)o(rra)o(y)p 1008 424 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 480
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 480 V 15 w(t)o(yp)q(es[0])p
Fr(.)35 b Fl(a)o(rra)o(y)p 1612 480 V 14 w(hdisps)22
b Fr(is)e(not)75 537 y(mo)q(di\014ed.)166 593 y(If)e(the)g
Fl(combiner)f Fr(returned)h(b)o(y)g Fl(MPI)p 823 593
V 15 w(TYPE)p 955 593 V 17 w(ENVELOPE)h Fr(is)f Fk(MPI)p
1343 593 13 2 v 15 w(HINDEXED)p Fr(,)e(then)i Fl(\014lled)h
Fr(ele-)75 650 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 650 14 2 v 15 w(of)p
835 650 V 16 w(blo)q(cklengths)j Fr(and)f Fl(a)o(rra)o(y)p
1293 650 V 14 w(of)p 1344 650 V 16 w(displacements)h
Fr(that)e(can)g(b)q(e)75 706 y(passed)f(to)e Fl(MPI)p
364 706 V 16 w(TYPE)p 497 706 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 763 y(the)13 b(\014rst)g Fl(\014lled)h Fr(p)q(ositions)g(of)e
Fl(a)o(rra)o(y)p 682 763 V 15 w(blo)q(cklens)j Fr(and)e
Fl(a)o(rra)o(y)p 1064 763 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 819 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 819 V 14 w(t)o(yp)q(es[0])p
Fr(.)27 b Fl(a)o(rra)o(y)p 1641 819 V 14 w(disps)19 b
Fr(is)e(not)75 875 y(mo)q(di\014ed.)166 932 y(If)11 b(the)g
Fl(combiner)f Fr(returned)h(b)o(y)g Fl(MPI)p 788 932
V 16 w(TYPE)p 921 932 V 17 w(ENVELOPE)h Fr(is)f Fk(MPI)p
1295 932 13 2 v 14 w(STRUCT)p Fr(,)f(then)h Fl(\014lled)h
Fr(elemen)o(ts,)75 988 y(starting)18 b(from)g Fl(sta)o(rt)p
Fr(,)i(of)e Fl(a)o(rra)o(y)p 631 988 14 2 v 15 w(of)p
683 988 V 16 w(blo)q(cklengths)p Fr(,)j Fl(a)o(rra)o(y)p
1061 988 V 15 w(of)p 1113 988 V 16 w(displacements)p
Fr(,)g(and)e Fl(a)o(rra)o(y)p 1610 988 V 14 w(of)p 1661
988 V 16 w(t)o(yp)q(es)i Fr(that)75 1045 y(can)14 b(b)q(e)g(passed)g
(to)f Fl(MPI)p 499 1045 V 16 w(TYPE)p 632 1045 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 1101 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 1101 V 15
w(blo)q(cklens)p Fr(,)j Fl(a)o(rra)o(y)p 1070 1101 V
14 w(hdisps)p Fr(,)h(and)d Fl(a)o(rra)o(y)p 1416 1101
V 15 w(t)o(yp)q(es)p Fr(,)h(resp)q(ectiv)o(ely)l(.)28
b Fl(a)o(r-)75 1158 y(ra)o(y)p 136 1158 V 15 w(disps)17
b Fr(is)f(not)f(mo)q(di\014ed.)189 1260 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 1260 V 16 w(TYPE)p 1460 1260 V 16 w(CONTENTS)h
Fr(did)g(not)189 1317 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 1373
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 1373 V 16 w(TYPE)p 1397 1373 V 17
w(CONTENTS)i Fr(that)e(are)g(a)189 1430 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 1504 y(In)j(C)f(and)h(C++,)h(users)f
(can)g(access)f(the)h(en)o(tire)g(arra)o(ys)f(in)h(a)g(single)h(call)f
(b)o(y)g(pro)o(viding)h(dy-)189 1561 y(namically)15 b(allo)q(cated)g
(arra)o(ys)d(whose)i(length)g(is)h Fl(count)g Fr(returned)f(b)o(y)g
Fl(MPI)p 1485 1561 V 16 w(TYPE)p 1618 1561 V 16 w(ENVELOPE)p
Fr(.)189 1617 y(\()p Fd(End)h(of)i(r)n(ationale.)p Fr(\))75
1738 y Fi(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 1824 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
1880 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 1937 y(with)18 b(a)f(close)g(paren)o(theses)h
(\(in)g(the)f(BNF)g(b)q(elo)o(w,)h(this)g(is)f(de\014ned)i(as)e
Fc(<)p Fr(t)o(yp)q(eDesc)p Fc(>)p Fr(\).)26 b(A)18 b(sequence)75
1993 y(of)f(these)g(strings)g(are)g(nested)h(to)f(supply)h(the)f(lo)o
(w)o(er)g(lev)o(el)i(datat)o(yp)q(es)d(as)h(they)h(are)f(de\014ned)h
(\(in)g(the)75 2050 y(BNF)j(b)q(elo)o(w,)i(see)e Fc(<)p
Fr(t)o(yp)q(eDescUser)p Fc(>)p Fr(\).)38 b(Lo)o(w)o(er)20
b(lev)o(el)i(t)o(yp)q(es)f(are)g(de\014ned)h(up)q(on)g(\014rst)f(use)g
(in)h(the)75 2106 y(string.)31 b(The)19 b(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)75 2163 y(C)g(and)g
Fc(<)p Fr(t)o(yp)q(eDescF77)p Fc(>)g Fr(for)f(the)h(F)l(ortran)f(77.)33
b(The)20 b(enco)q(ding)i(of)d(the)h(names)g(are)g(en)o(umerated)75
2219 y(in)g(T)l(able)f(6.1)f(b)q(elo)o(w.)31 b(User)18
b(de\014ned)i(data)e(t)o(yp)q(es)h(ha)o(v)o(e)f(the)h(co)q(de)g(U)g
(follo)o(w)o(ed)g(b)o(y)g(their)g(sequence)75 2276 y(n)o(um)o(b)q(er)d
(\(e.g.)e(U3129)g(refers)h(to)f(t)o(yp)q(e)i(3129)e(whic)o(h)i(sho)o
(ws)e(up)i(as)f(U3129\(....\))o(\).)75 2395 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
2452 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(\()p Fl(MPI)p
1499 2452 V 15 w(P)l(A)o(CKED)p Fr(\).)166 2549 y Ff(Discussion:)166
2598 y Fh(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 2648 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(?)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 Fj(6.4.)29 b(A)o(CCESSING)15 b Fl(MPI)g
Fj(D)o(A)l(T)l(A)l(TYPES)999 b Fr(17)75 49 y Fl(Interlanguage)18
b(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
106 y(creating)e(language.)189 211 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 268
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
324 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 381 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 437 y(users.)p Fr(\))1875 497
y Fn(>)f Fm(\(Sept\))166 543 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 599 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 655 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
712 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 768 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 825 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 881 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
938 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 994 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 1051
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
1107 y(as)h(the)g(original)h(datat)o(yp)q(e)f(is)h(p)q(ortable.)166
1204 y Ff(Missing:)166 1254 y Fh(the)h(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 1304
y(t)o(yp)q(e.)166 1354 y(new)c(C++)h(MPI)f(t)o(yp)q(es)h(\(table)e(7.1)
g({)h(MPI::BOOL,)g(etc.\).)1875 1411 y Fn(?)i Fm(\(Sept\))611
1534 y Fr(T)l(able)g(6.1:)j(Character)14 b(represen)o(tations)123
1744 y Fg(Type)333 b(Character)23 b(representation)123
1800 y(-----------------)e(----------------------------)o(--)123
1857 y(byte)333 b(b)123 1913 y(packed)285 b(p)123 1970
y(char)333 b(c)123 2026 y(unsigned)22 b(char)119 b(uc)123
2083 y(short)309 b(s)123 2139 y(unsigned)22 b(short)95
b(us)123 2195 y(int)357 b(i)123 2252 y(unsigned)22 b(int)143
b(ui)123 2308 y(long)333 b(l)123 2365 y(unsigned)22 b(long)119
b(ul)123 2421 y(long)23 b(long)214 b(ll)123 2478 y(unsigned)22
b(ll)167 b(ull)123 2534 y(float)309 b(f)123 2591 y(double)285
b(d)123 2647 y(long)23 b(double)166 b(ld)123 2704 y(INTEGER)261
b(I)-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 Fj(CHAPTER)15 b(6.)30
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)123 49 y Fg(INTEGER*2)213
b(I2)123 106 y(INTEGER*4)g(I4)123 162 y(INTEGER*8)g(I8)123
219 y(LOGICAL)261 b(L)123 275 y(REAL)333 b(R)123 332
y(REAL*4)285 b(R4)123 388 y(REAL*8)g(R8)123 444 y(DOUBLE)23
b(PRECISION)46 b(D)123 501 y(COMPLEX)261 b(C)123 557
y(DOUBLE)23 b(COMPLEX)94 b(DC)123 614 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 670 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 727 y(vector)285
b(V:Type:count:blocklength:str)o(ide)123 783 y(hvector)261
b(HV:Type:count:blocklength:st)o(ride)123 840 y(Indexed)g
(X:Type:count:blocklength/dis)o(placeme)o(nt,...)123
896 y(HIndexed)237 b(HX:Type:count:blocklength/di)o(splacem)o(ent,...)
123 953 y(Struct)285 b(S:count:Type/count/displacem)o(ent,...)75
1065 y(Examples:)147 1178 y(Type)23 b(threeslice)f(from)i(example)f
(3.29)g(\(assume)g(sizeofreal)f(is)i(4\))147 1291 y
("U329\(HV:U3291\(HV:U3292)o(\(V:R:9:)o(1:2\):9:1)o(:400\):9)o(:1:4000)
o(0\)")147 1404 y(Type)f(ltype)g(from)g(example)g(3.30)147
1517 y("U330\(X:R:100:1/99,101/)o(98,202/)o(97,...,1)o(0000/0\))o(")147
1630 y(Type)g(xpose)g(from)g(example)g(3.31)h(\(assume)f(sizeofreal)f
(is)i(4\))147 1743 y("U331\(HV:U3311\(V:R:100:)o(1:100\):)o(100:1:4\))o
(")147 1856 y(Type)f(Particletype)f(from)h(example)g(3.33)h(\(assume)f
(double)g(alignment,)f(sizeof)h(int)h(4,)1030 1912 y(sizeof)f(double)g
(8,)g(base)h(=)f(96\))147 2025 y("U333\(S:4:i/1/0,d/6/8,c)o(/7/56,U)o
(B/1/64\)")147 2138 y(Type)g(Particletype)f(from)h(example)g(3.34)h
(\(assume)f(addr)g(particle)g(is)g(96,)1030 2195 y(double)g(alignment,)
f(sizeof)h(int)h(4,)1030 2251 y(sizeof)f(double)g(8\))147
2364 y("U334\(S:3:i/1/96,d/6/10)o(4,c/7/1)o(52\)")75
2477 y(\045start)238 b(<start>)75 2590 y(\045\045)75
2703 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)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 Fj(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 106 y Fg(<Int>)262 b(::=)23 b(-)h(<digit>)f(|)h(<digit>)f(|)
g(<Int><digit>)75 219 y(<nonNegInt>)118 b(::=)23 b(<digit>)g(|)h
(<nonNegInt>)e(<digit>)75 332 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
444 y(<posInt>)190 b(::=)23 b(<posDigit>)g(|)g(<posInt>)g(<digit>)75
557 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 614 y(ul)f(|)h(ll)g(|)f(ull)h
(|)g(f)f(|)h(d)g(|)g(ld)75 727 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
783 y(I2)f(|)h(I4)g(|)f(I8)h(|)g(R4)f(|)h(R8)75 896 y(<typeDescUser>)46
b(::=)23 b(U<nonNegInt>)f(|)i(U<nonNegInt>\(<typeDesc>\))75
1009 y(<typeDescBasic>)e(::=)h(<typeDescC>)g(|)g(<typeDescF77>)f(|)i
(<typeDescUser>)75 1122 y(<typeDescAdv>)70 b(::=)23 b(UB)h(|)g(LB)f(|)h
(<typeDescBasic>)75 1235 y(<typeDescVec>)70 b(::=)23
b(V:<typeDescBasic>:<posInt>:<)o(posInt>)o(:<Int>)75
1348 y(<typeDescHVec>)46 b(::=)23 b(HV:<typeDescBasic>:<posInt>:)o
(<posInt)o(>:<Int>)75 1461 y(<typeDescIndex>)f(::=)h
(X:<typeDescBasic>:<posInt>:<)o(posInt>)o(/<Int>)e(|)457
1517 y(<typeDescIndex>,<posInt>/)o(<Int>)75 1630 y(<typeDescHIndex>)189
b(::=)23 b(HX:<typeDescBasic>:<posInt>)o(:<posInt)o(>/<Int>)d(|)457
1686 y(<typeDescHIndex>,<posInt>)o(/<Int>)75 1799 y(<typeDescStruct>)
189 b(::=)23 b(S:<posInt>:<typeDescAdv>/<p)o(osInt>/<)o(Int>)e(|)457
1856 y(<typeDescStruct>,<typeDes)o(cAdv>/<)o(posInt>)o(/<Int>)75
1969 y(<typeDescSimple>)189 b(::=)23 b(<typeDescBasic>)f(|)i
(<typeDescVec>)e(|)457 2025 y(<typeDescHVec>)g(|)h(<typeDescIndex>)f(|)
481 2082 y(<typeDescHIndex>)f(|)j(<typeDescStruct>)75
2195 y(<typeDesc>)142 b(::=)23 b(<posInt>)g(<typeDescSimple>)f(|)h
(<typeDescSimple>)75 2307 y(<start>)214 b(::=)23 b(<typeDesc>)75
2420 y(\045\045)75 2562 y Fo(6.5)59 b(P)n(acking/Unpacking)22
b(Datat)n(yp)r(es)e(and)f(Communicato)n(rs)1875 2621
y Fn(>)d Fm(\(Sept\))75 2704 y Ff(Missing:)-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 Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)166 49 y Fh(The)16
b(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 99 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 149 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 199 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 249 y(system)14
b Fh(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 298 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
348 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 398 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
448 y(what)f(to)g(do)f(here.)-117 495 y Fn(?)i Fm(\(Sept\))75
617 y Fi(6.5.1)49 b(Canonical)18 b(data)f(enco)q(ding)75
703 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 759 y(represen)o(tation.)f(Suc)o(h)c(a)e(canonical)i
(represen)o(tation)f(will)h(facilitate)f(supp)q(ort)g(of)f(MPI-IO)i(in)
f(a)g(het-)75 815 y(erogeneous)c(en)o(vironmen)o(t.)20
b(F)l(or)11 b(that)h(purp)q(ose,)h(it)g(is)g(prop)q(osed)f(that)g(the)h
(functions)g Fl(MPI)p 1662 815 14 2 v 16 w(P)l(A)o(CK)f
Fr(and)75 872 y Fl(MPI)p 160 872 V 16 w(UNP)l(A)o(CK)j
Fr(b)q(e)h(extended)g(as)f(follo)o(ws.)166 928 y(If)g(the)g(comm)o
(unicator)f(argumen)o(t)g(in)h Fl(MPI)p 925 928 V 16
w(P)l(A)o(CK)g Fr(call)h(is)f Fl(comm)e(=)i(MPI)p 1461
928 V 16 w(COMM)p 1619 928 V 16 w(UNIVERSAL)75 985 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 1041 y(generated)j(b)o(y)h(a)f(sequence)i
(of)e Fl(MPI)p 715 1041 V 15 w(P)l(A)o(CK)h Fr(calls)g(with)g
Fl(comm)e(=)h(MPI)p 1334 1041 V 16 w(COMM)p 1492 1041
V 16 w(UNIVERSAL)i Fr(is)f(the)75 1098 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 1154
y(If)18 b(the)f(comm)o(unicator)g(argumen)o(t)g(in)h
Fl(MPI)p 848 1154 V 16 w(UNP)l(A)o(CK)g Fr(call)g(is)g
Fl(comm)e(=)i(MPI)p 1461 1154 V 16 w(COMM)p 1619 1154
V 16 w(UNIVERSAL)75 1211 y Fr(then)g(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 1267 y(sen)o(tation.)i Fk(MPI)p
366 1267 13 2 v 14 w(COMM)p 510 1267 V 15 w(UNIVERSAL)14
b Fr(is)h(a)g(new)h(constan)o(t)e(comm)o(unicator)h(handle.)166
1324 y(A)d(pac)o(king)g(unit)h(pac)o(k)o(ed)f(with)g
Fl(comm)e(=)i(MPI)p 974 1324 14 2 v 16 w(COMM)p 1132
1324 V 17 w(UNIVERSAL)g Fr(can)g(b)q(e)h(sen)o(t)f(and)g(receiv)o(ed)75
1380 y(with)h(datat)o(yp)q(e)g Fk(MPI)p 442 1380 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
1436 y(datat)o(yp)q(e.)166 1493 y(The)j(function)h Fl(MPI)p
524 1493 14 2 v 16 w(P)l(A)o(CK)p 655 1493 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 1549 y(of)f(a)g(string)g(of)g(v)m(alues.)75
1671 y Fi(6.5.2)49 b(Datat)o(yp)q(e)16 b(transfer)75
1757 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
1813 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 1870 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 1870 V 16 w(P)l(A)o(CK)f
Fr(and)g Fl(MPI)p 1429 1870 V 16 w(UNP)l(A)o(CK)p Fr(,)g(in)h(order)f
(to)75 1926 y(ac)o(hiev)o(e)c(these)f(goals.)166 1983
y(A)d(call)h(to)e Fl(MPI)p 429 1983 V 16 w(P)l(A)o(CK\(handle,)i(1,)f
(MPI)p 856 1983 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 2039 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 2096 y(argumen)o(t.)166 2152 y(A)17 b(call)h(to)f
Fl(MPI)p 445 2152 V 16 w(UNP)l(A)o(CK\(inbuf,)h(insize,)g(p)q(osition,)
g(handle,)h(1,)e(MPI)p 1383 2152 V 16 w(D)o(A)l(T)l(A)l(TYPE,)g(comm\))
e Fr(will)75 2209 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 2265 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 2321 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 2378 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 2434 y(sending)f(pro)q(cess.)166
2491 y Fk(MPI)p 243 2491 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
2547 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 2604 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 2660 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 2660 14 2 v 16 w(P)l(A)o(CK)p Fr(.)g(A)h(pac)o(king)g
(unit)h(that)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 Fj(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(con)o(tains)12 b(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
Fk(MPI)p 1367 49 13 2 v 14 w(P)m(A)o(CKED)p Fr(.)d(The)i(\\datat)o(yp)q
(e")75 106 y Fk(MPI)p 152 106 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
162 y(used)f(in)g(send/receiv)o(e)g(calls.)166 219 y(A)e(call)i(to)d
Fl(MPI)p 436 219 14 2 v 16 w(P)l(A)o(CK)p 567 219 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 275 y(datat)o(yp)q(e)i
(represen)o(tation.)166 332 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 388 y Fl(comm)e
Fr(argumen)o(t)g(of)h(the)h Fl(MPI)p 645 388 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 444 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 501 y(tation.)42 b(Ho)o(w)o(ev)o(er,)23
b(a)f Fl(MPI)p 584 501 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
557 y(MPI)p 160 557 V 16 w(COMM)p 318 557 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 614 y(In)g(this)g(case,)g(the)g
Fl(MPI)p 503 614 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
670 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 727 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 727 V 15 w(UNP)l(A)o(CK)h Fr(with)g Fl(datat)o(yp)q(e)i(=)75
783 y(MPI)p 160 783 V 16 w(D)o(A)l(T)l(A)l(TYPE)p Fr(,)g(and)g
Fl(comm)e(=)h(MPI)p 777 783 V 16 w(COMM)p 935 783 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 840 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 896 y(ing)i(datat)o(yp)q(e)e(ob)s(ject.)166
993 y Ff(Discussion:)166 1043 y Fh(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
1093 y(W)m(e)d(could)h(allo)o(w)e Fk(MPI)p 529 1093 13
2 v 14 w(D)o(A)m(T)m(A)m(TYPE)f Fh(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
1143 y(An)h(ada)o(v)n(an)o(tage)f(is)h(that)h(the)g(design)f(is)g
(clean:)23 b Fk(MPI)p 951 1143 V 14 w(D)o(A)m(T)m(A)m(TYPE)14
b Fh(b)q(eha)o(v)o(es)j(as)f(an)o(y)g(other)h(prede\014ned)h(MPI)75
1192 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)75 1242 y(not)h(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 1292 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
1342 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 1392 y(\()p Fk(MPI)p
168 1392 V 14 w(D)o(A)m(T)m(A)m(YPE)d Fh(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 1441 y(function)c(and)f(allo)o(ws)g(for)g
(simpler)g(implemen)o(tation)d(strategies.)166 1491 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 1541
y(\(1\))g(Strings)g(that)g(describ)q(e)h(datat)o(yp)q(es)g(are)f
(self-delimiting.)75 1591 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 1641 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 1697
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
1754 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 1810 y Fk(MPI)p 152 1810 V 14
w(GROUP)13 b Fh(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 1867 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
1923 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 1979 y(something)e(lik)o(e)h
Fa(\(IP)21 b(address)f(:)44 b(PID\))p Fh(.)12 b(This)i(represen)o
(tation)h(should)e(b)q(e)h(compatible)e(with)h(the)h(one)g(used)75
2036 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 2092 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 2149 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 2205 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 2396 y Fo(6.6)59 b(T)-5 b(rue)20 b(Extext)f(of)h(Datat)n(yp)r
(es)75 2497 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 2554 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 2610 y(temp)q(orary)k(space)g(for)g
(receiving)h(data)f(on)g(in)o(termediate)h(no)q(des.)21
b(The)15 b(di\016cult)o(y)i(is)e(in)h(determining)75
2667 y(the)k(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)-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)871 b Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fr(the)22
b Fk(MPI)p 237 49 13 2 v 14 w(UB)g Fr(and)g Fk(MPI)p
500 49 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 106 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
162 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 313 y Fl(MPI)p 160 313 14 2 v 16 w(TRUE)p 294
313 V 17 w(EXTENT\(datat)o(yp)q(e,)i(true)p 775 313 V
17 w(lb,)e(true)p 929 313 V 17 w(extent\))117 390 y Fh(IN)155
b Fl(datat)o(yp)q(e)424 b Fh(datat)o(yp)q(e)14 b(to)g(get)g
(information)d(on)117 465 y(OUT)108 b Fl(true)p 396 465
V 17 w(lb)461 b Fh(true)15 b(lo)o(w)o(er)e(b)q(ound)h(of)g(datat)o(yp)q
(e)117 540 y(OUT)108 b Fl(true)p 396 540 V 17 w(extent)379
b Fh(true)15 b(size)g(of)e(datat)o(yp)q(e)75 664 y Fg(int)23
b(MPI)p 245 664 15 2 v 17 w(True)p 358 664 V 17 w(extent\(MPI)p
615 664 V 16 w(Datatype)f(datatype,)h(MPI)p 1156 664
V 17 w(Aint)g(*true)p 1412 664 V 17 w(lb,)g(MPI)p 1596
664 V 17 w(Aint)393 720 y(*true)p 516 720 V 17 w(extent\))75
807 y(MPI)p 150 807 V 17 w(TRUE)p 263 807 V 16 w(EXTENT\(DATATYPE,)f
(TRUE)p 781 807 V 17 w(LB,)h(TRUE)p 989 807 V 17 w(EXTENT,)g(IERROR\))
170 863 y(INTEGER)g(DATATYPE,)g(TRUE)p 699 863 V 17 w(LB,)g(TRUE)p
907 863 V 17 w(EXTENT,)g(IERROR)75 950 y(int)g(MPI::Datatype::True)p
629 950 V 15 w(extent\(MPI::Aint&)f(true)p 1170 950 V
16 w(lb,)i(MPI::Aint&)e(true)p 1640 950 V 17 w(extent\))393
1006 y(const)166 1093 y Fl(true)p 244 1093 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 1149 y Fl(true)p 153 1149 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 1149 V 17 w(extent)i Fr(is)e(the)g(minim)o(um)h(n)o
(um)o(b)q(er)75 1206 y(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 1262
y(b)q(een)j(used)g(in)g(creating)g(the)f(datat)o(yp)q(e.)75
1405 y Fo(6.7)59 b(Caching)20 b(on)g(MPI)g(Handles)75
1506 y Fr(The)14 b Fl(MPI)f Fr(standard)h(pro)o(vides)g(a)g(cac)o(hing)
h(facilit)o(y)g(that)e(allo)o(ws)h(an)g(application)h(to)f(attac)o(h)f
(arbitrary)75 1563 y(pieces)h(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 1619 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
1676 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 1732 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 1789 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 1789 V 16 w(ST)l(ART)g Fr(is)g(called.)75
1845 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 1901 y(request.)29 b(Then,)20 b(whenev)o(er)f(this)f
(p)q(ersistan)o(t)h(request)f(is)h(used)g(in)g(a)f(pro\014led)i(call,)g
(the)e(needed)i(in-)75 1958 y(formation)d(can)g(b)q(e)h(extracted.)26
b(The)17 b(adv)m(an)o(tage)g(of)g(cac)o(hing)h(the)f(information)h(is)g
(that)e(the)i(risk)f(of)75 2014 y(using)j(stale)g(information)g(from)f
(reuse)h(of)f(requests)g(while)i(the)f(pro\014ling)h(library)f(w)o(as)f
(disabled)i(is)75 2071 y(eliminated.)75 2192 y Fi(6.7.1)49
b(F)o(unctions)75 2278 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 2334 y(t)o(yp)q(es)k(MPI)g(handles:)
143 2425 y Fn(\017)23 b Fg(MPI)p 264 2425 15 2 v 16 w(COMM)143
2518 y Fn(\017)g Fg(MPI)p 264 2518 V 16 w(DATATYPE)143
2611 y Fn(\017)g Fg(MPI)p 264 2611 V 16 w(GROUP)143 2704
y Fn(\017)g Fg(MPI)p 264 2704 V 16 w(REQUEST)15 b Fr(\(P)o(ersistan)o
(t)f(only\))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 Fj(6.7.)34 b(CA)o(CHING)15 b(ON)h(MPI)f(HANDLES)
1005 b Fr(23)143 49 y Fn(\017)23 b Fg(MPI)p 264 49 15
2 v 16 w(FILE)166 180 y Ff(Missing:)166 230 y Fh(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)1875 286 y
Fn(>)j Fm(\(Sept\))166 375 y Ff(Discussion:)166 424 y
Fh(The)e(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 574 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 630 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 630 14 2 v 16 w(REQUEST)h Fr(is)f(created)g(and)189
687 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 743 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 800 y(cac)o(hing)f(on)g(them.)22
b(Also,)17 b(a)e(datat)o(yp)q(e)h(migh)o(t)g(b)q(e)g(created)g(in)h
(critical)h(sections)e(of)g(F90)f(co)q(de,)189 856 y(e.g.,)h(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 913 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 1015 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 1015 V 16 w(KEYV)l(AL)p 1205 1015 V 17
w(CREA)l(TE)g Fr(ma)o(y)e(b)q(e)i(used)g(for)e(cac)o(hing)75
1072 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 1128 y(that)k(is)h(an)o(y)f(allo)o(w)o(ed)i
(handle)f(and)g(the)g(second)g(argumen)o(t)f(is)h(the)g(handle)h(t)o
(yp)q(e.)30 b(Th)o(us,)20 b(mo)q(di\014ed)75 1185 y(names)15
b(are)g(used.)20 b(Note)15 b(that)g(handles)h(are)f(no)o(w)g(of)g(t)o
(yp)q(e)g Fk(MPI)p 1186 1185 13 2 v 14 w(Handle)p Fr(.)75
1241 y Fg(typedef)23 b(int)g(MPI)p 436 1241 15 2 v 17
w(Handle)p 597 1241 V 16 w(copy)p 709 1241 V 17 w(function\(MPI)p
1014 1241 V 16 w(Handle)g(*handle,)f(MPI)p 1483 1241
V 17 w(Handle)p 1644 1241 V 17 w(type)393 1297 y(handle)p
540 1297 V 17 w(type,)h(int)g(keyval,)g(void)g(*extra)p
1249 1297 V 17 w(state,)g(void)393 1354 y(*attribute)p
636 1354 V 16 w(val)p 724 1354 V 17 w(in,)g(void)h(*attribute)p
1196 1354 V 15 w(val)p 1283 1354 V 17 w(out,)f(int)h(*flag\);)75
1440 y(typedef)f(int)g(MPI)p 436 1440 V 17 w(Handle)p
597 1440 V 16 w(delete)p 757 1440 V 17 w(function\(MPI)p
1062 1440 V 15 w(Handle)g(*handle,)g(MPI)p 1531 1440
V 17 w(Handle)p 1692 1440 V 16 w(type)393 1497 y(handle)p
540 1497 V 17 w(type,)g(int)g(keyval,)g(void)g(*attribute)p
1345 1497 V 16 w(val,)h(void)393 1553 y(*extra)p 540
1553 V 17 w(state\);)75 1640 y(SUBROUTINE)e(HANDLE)p
484 1640 V 17 w(COPY)p 597 1640 V 16 w(FUNCTION\(HANDLE,)g(HANDLE)p
1163 1640 V 17 w(TYPE,)h(KEYVAL,)g(EXTRA)p 1634 1640
V 16 w(STATE,)393 1696 y(ATTRIBUTE)p 612 1696 V 16 w(VAL)p
700 1696 V 17 w(IN,)g(ATTRIBUTE)p 1028 1696 V 16 w(VAL)p
1116 1696 V 17 w(OUT,)g(FLAG,)h(IERR\))170 1753 y(INTEGER)f(HANDLE,)g
(HANDLE)p 699 1753 V 17 w(TYPE,)g(KEYVAL,)g(EXTRA)p 1170
1753 V 16 w(STATE,)g(ATTRIBUTE)p 1569 1753 V 16 w(VAL)p
1657 1753 V 17 w(IN,)170 1809 y(ATTRIBUTE)p 389 1809
V 16 w(VAL)p 477 1809 V 17 w(OUT,)g(IERR)75 1896 y(SUBROUTINE)f(HANDLE)
p 484 1896 V 17 w(DELETE)p 645 1896 V 16 w(FUNCTION\(HANDLE,)g(HANDLE)p
1211 1896 V 16 w(TYPE,)h(KEYVAL,)393 1952 y(ATTRIBUTE)p
612 1952 V 16 w(VAL,)g(EXTRA)p 867 1952 V 17 w(STATE,)g(IERR\))170
2008 y(INTEGER)g(HANDLE,)g(HANDLE)p 699 2008 V 17 w(TYPE,)g(KEYVAL,)g
(ATTRIBUTE)p 1266 2008 V 16 w(VAL,)g(EXTRA)p 1521 2008
V 16 w(STATE,)h(IERR)75 2095 y(typedef)f(int)g(MPI::Handle)p
628 2095 V 16 w(copy)p 740 2095 V 17 w(function\(MPI::Handle)e
(*handle,)i(MPI::Handle)p 1737 2095 V 15 w(type)393 2151
y(handle)p 540 2151 V 17 w(type,)g(int)g(keyval,)g(void)g(*extra)p
1249 2151 V 17 w(state,)g(void)393 2208 y(*attribute)p
636 2208 V 16 w(val)p 724 2208 V 17 w(in,)g(void)h(*attribute)p
1196 2208 V 15 w(val)p 1283 2208 V 17 w(out,)f(int)h(*flag\);)75
2294 y(typedef)f(int)g(MPI::Handle)p 628 2294 V 16 w(delete)p
788 2294 V 16 w(function\(MPI::Handle)f(*handle,)393
2351 y(MPI::Handle)p 660 2351 V 16 w(type)h(handle)p
939 2351 V 17 w(type,)g(int)g(keyval,)g(void)g(*attribute)p
1744 2351 V 16 w(val,)393 2407 y(void)g(*extra)p 659
2407 V 17 w(state\);)166 2494 y Fr(The)16 b(prede\014ned)i(functions)e
Fl(MPI)p 762 2494 14 2 v 16 w(HANDLE)p 957 2494 V 17
w(DELETE)p 1144 2494 V 16 w(FN)p Fr(,)g Fl(MPI)p 1329
2494 V 15 w(HANDLE)p 1523 2494 V 17 w(NULL)p 1653 2494
V 16 w(COPY)p 1790 2494 V 17 w(FN)p Fr(,)75 2550 y(and)g
Fl(MPI)p 249 2550 V 16 w(HANDLE)p 444 2550 V 17 w(DUP)p
554 2550 V 16 w(FN)g Fr(are)g(de\014ned)i(in)f Fl(MPI-2)p
Fr(.)22 b(They)16 b(are)g(iden)o(tical)i(to)d Fl(MPI)p
1605 2550 V 16 w(DELETE)p 1791 2550 V 16 w(FN)p Fr(,)75
2607 y Fl(MPI)p 160 2607 V 16 w(NULL)p 289 2607 V 16
w(COPY)p 426 2607 V 17 w(FN)p Fr(,)g(and)g Fl(MPI)p 699
2607 V 16 w(DUP)p 808 2607 V 17 w(FN)g Fr(in)h Fl(MPI-1)e
Fr(but)i(with)f(the)g(new)h(calling)h(sequence.)166 2704
y Ff(Discussion:)-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: 24 26
24 25 bop 75 -100 a Fr(24)871 b Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)166 49 y Fh(The)15
b(use)g(of)f Fa(MPI::Handle)e Fh(could)i(b)q(e)h(somewhat)e(stic)o(ky;)
h(the)h(only)f(w)o(a)o(y)f(to)h(implemen)o(t)e(it)i(is)g(to)g(ha)o(v)o
(e)g(a)75 99 y Fa(Handle)e Fh(class)h(that)g(all)e Fa(MPI)i
Fh(sub)g(classes)h(inherit)f(from.)j(This)d(seems)g(ok,)f(but)h(should)
g(de\014nitely)g(b)q(e)g(advice)g(to)75 149 y(implemen)o(tors:)75
302 y Fg(class)23 b(MPI)h({)75 359 y(public:)123 415
y(class)f(Handle)g({};)123 528 y(class)g(Comm)g(:)h(virtual)f(public)g
(MPI::Handle)f({)170 585 y(//)i(stuff)123 641 y(};)123
754 y(class)f(Datatype)g(:)g(virtual)g(public)g(MPI::Handle)g({)170
810 y(//)h(stuff)123 867 y(};)75 923 y(};)-117 980 y
Fn(?)15 b Fm(\(Sept\))166 1030 y Fr(The)d(follo)o(wing)h(functions)g
(are)f(similar)h(to)e(the)i(previous)f(ones)h(for)e(comm)o(unicators)h
(but)g(w)o(ork)f(on)75 1086 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 1086 14 2 v 16 w(A)l(TTR)p 1409 1086 V
17 w(PUT)p Fr(,)f Fl(MPI)p 1627 1086 V 16 w(A)l(TTR)p
1760 1086 V 17 w(GET)p Fr(,)75 1143 y(and)g Fl(MPI)p
248 1143 V 16 w(A)l(TTR)p 381 1143 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
1249 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 1305 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 1362 y(r)n(ationale.)p Fr(\))-117
1423 y Fn(>)c Fm(\(Sept\))75 1563 y Fl(MPI)p 160 1563
V 16 w(HANDLE)p 355 1563 V 16 w(A)l(TTR)p 488 1563 V
18 w(PUT\(handle,)h(handle)p 888 1563 V 17 w(t)o(yp)q(e,)g(k)o(eyval,)f
(attribute)p 1321 1563 V 18 w(val\))117 1640 y Fh(IN)155
b Fl(handle)465 b Fh(handle)14 b(to)g(whic)o(h)f(attribute)i(will)d(b)q
(e)j(attac)o(hed)117 1715 y(IN)155 b Fl(handle)p 443
1715 V 18 w(t)o(yp)q(e)367 b Fh(t)o(yp)q(e)15 b(of)e
Fk(handle)117 1790 y Fh(IN)155 b Fl(k)o(eyval)471 b Fh(k)o(ey)14
b(v)n(alue,)f(as)h(returned)h(b)o(y)f Fk(MPI)p 1453 1790
13 2 v 14 w(KEYV)m(AL)p 1624 1790 V 14 w(CREA)m(TE)117
1865 y Fh(IN)155 b Fl(attribute)p 484 1865 14 2 v 18
w(val)352 b Fh(attribute)15 b(v)n(alue)75 1990 y Fg(int)23
b(MPI)p 245 1990 15 2 v 17 w(Handle)p 406 1990 V 17 w(attr)p
519 1990 V 16 w(put\(MPI)p 703 1990 V 16 w(Handle)g(*handle,)g(MPI)p
1173 1990 V 17 w(Handle)p 1334 1990 V 16 w(type)h(handle)p
1614 1990 V 16 w(type,)f(int)393 2046 y(keyval,)g(void)g(*attribute)p
946 2046 V 16 w(val\))75 2132 y(MPI)p 150 2132 V 17 w(HANDLE)p
311 2132 V 16 w(ATTR)p 423 2132 V 17 w(PUT\(HANDLE,)f(HANDLE)p
870 2132 V 16 w(TYPE,)i(KEYVAL,)f(ATTRIBUTE)p 1437 2132
V 16 w(VAL,)g(IERROR\))170 2189 y(INTEGER)g(HANDLE,)g(HANDLE)p
699 2189 V 17 w(TYPE,)g(KEYVAL,)g(ATTRIBUTE)p 1266 2189
V 16 w(VAL,)g(IERROR)75 2275 y(int)g(MPI::CLASS::Attr)p
557 2275 V 15 w(put\(int)g(keyval,)g(void)h(*attribute)p
1314 2275 V 15 w(val\))166 2362 y Fr(The)15 b(use)g(of)f
Fg(CLASS)g Fr(in)h(the)g(C++)g(binding)h(indicates)g(that)e(this)h
(function)h(is)f(de\014ned)h(on)e(all)i(the)75 2418 y
Fl(MPI)f Fr(handles)h(listed)g(in)g(the)g(b)q(eginning)h(of)e(this)h
(section.)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 Fj(6.7.)34 b(CA)o(CHING)15 b(ON)h(MPI)f(HANDLES)
1005 b Fr(25)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(GET\(handle,)16
b(handle)p 885 49 V 17 w(t)o(yp)q(e,)g(k)o(eyval,)f(attribute)p
1318 49 V 18 w(val,)f(\015ag\))117 126 y Fh(IN)155 b
Fl(handle)465 b Fh(handle)14 b(to)g(whic)o(h)f(attribute)i(is)f(attac)o
(hed)g(\(handle\))117 202 y(IN)155 b Fl(handle)p 443
202 V 18 w(t)o(yp)q(e)367 b Fh(t)o(yp)q(e)15 b(of)e Fk(handle)117
277 y Fh(IN)155 b Fl(k)o(eyval)471 b Fh(k)o(ey)14 b(v)n(alue)f(\(in)o
(teger\))117 352 y(OUT)108 b Fl(attribute)p 484 352 V
18 w(val)352 b Fh(attribute)15 b(v)n(alue,)d(unless)j
Fk(\015ag)f Fh(=)g(false)117 427 y(OUT)108 b Fl(\015ag)518
b Fa(true)14 b Fh(if)h(an)f(attribute)i(v)n(alue)e(w)o(as)h(extracted;)
i Fa(false)d Fh(if)g(no)905 483 y(attribute)h(is)e(asso)q(ciated)i
(with)f(the)g(k)o(ey)75 608 y Fg(int)23 b(MPI)p 245 608
15 2 v 17 w(Handle)p 406 608 V 17 w(attr)p 519 608 V
16 w(get\(MPI)p 703 608 V 16 w(Handle)g(*handle,)g(MPI)p
1173 608 V 17 w(Handle)p 1334 608 V 16 w(type)h(handle)p
1614 608 V 16 w(type,)f(int)393 664 y(keyval,)g(void)g(*attribute)p
946 664 V 16 w(val,)h(int)f(*flag\))75 751 y(MPI)p 150
751 V 17 w(HANDLE)p 311 751 V 16 w(ATTR)p 423 751 V 17
w(GET\(HANDLE,)f(HANDLE)p 870 751 V 16 w(TYPE,)i(KEYVAL,)f(ATTRIBUTE)p
1437 751 V 16 w(VAL,)g(FLAG,)393 807 y(IERROR\))170 864
y(INTEGER)g(HANDLE,)g(HANDLE)p 699 864 V 17 w(TYPE,)g(KEYVAL,)g
(ATTRIBUTE)p 1266 864 V 16 w(VAL,)g(FLAG,)g(IERROR)75
950 y(int)g(MPI::CLASS::Attr)p 557 950 V 15 w(get\(int)g(keyval,)g
(void)h(*attribute)p 1314 950 V 15 w(val,)g(int&)f(flag\))g(const)75
1131 y Fl(MPI)p 160 1131 14 2 v 16 w(HANDLE)p 355 1131
V 16 w(A)l(TTR)p 488 1131 V 18 w(DELETE\(handle,)15 b(handle)p
966 1131 V 18 w(t)o(yp)q(e,)h(k)o(eyval\))117 1208 y
Fh(IN)155 b Fl(handle)465 b Fh(handle)14 b(to)g(whic)o(h)f(attribute)i
(is)f(attac)o(hed)g(\(handle\))117 1283 y(IN)155 b Fl(handle)p
443 1283 V 18 w(t)o(yp)q(e)367 b Fh(t)o(yp)q(e)15 b(of)e
Fk(handle)117 1359 y Fh(IN)155 b Fl(k)o(eyval)471 b Fh(The)15
b(k)o(ey)e(v)n(alue)h(of)f(the)i(deleted)f(attribute)h(\(in)o(teger\))
75 1483 y Fg(int)23 b(MPI)p 245 1483 15 2 v 17 w(Handle)p
406 1483 V 17 w(attr)p 519 1483 V 16 w(delete\(MPI)p
775 1483 V 16 w(Handle)g(*handle,)g(MPI)p 1245 1483 V
17 w(Handle)p 1406 1483 V 16 w(type)g(handle)p 1685 1483
V 17 w(type,)393 1540 y(int)h(keyval\))75 1626 y(MPI)p
150 1626 V 17 w(HANDLE)p 311 1626 V 16 w(ATTR)p 423 1626
V 17 w(DELETE\(HANDLE,)e(HANDLE)p 942 1626 V 16 w(TYPE,)h(KEYVAL,)g
(IERROR\))170 1682 y(INTEGER)g(HANDLE,)g(HANDLE)p 699
1682 V 17 w(TYPE,)g(KEYVAL,)g(IERROR)75 1769 y(int)g(MPI::CLASS::Attr)p
557 1769 V 15 w(delete\(int)g(keyval\))1875 1809 y Fn(?)16
b Fm(\(Sept\))166 1855 y Fr(The)10 b(argumen)o(t)g Fl(handle)p
578 1855 14 2 v 17 w(t)o(yp)q(e)i Fr(m)o(ust)d(b)q(e)i
Fk(MPI)p 925 1855 13 2 v 14 w(HANDLE)p 1102 1855 V 16
w(COMM)p Fr(,)e Fk(MPI)p 1345 1855 V 15 w(HANDLE)p 1523
1855 V 15 w(D)o(A)m(T)m(A)m(TYPE)p Fr(,)e Fk(MPI)p 1845
1855 V 15 w(HANDLE)p 2023 1855 V 15 w(GROUP)p Fr(,)75
1912 y Fk(MPI)p 152 1912 V 14 w(HANDLE)p 329 1912 V 16
w(PREQUEST)p Fr(,)16 b(or)i Fk(MPI)p 723 1912 V 15 w(HANDLE)p
901 1912 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 1968 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 2075 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 2131 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 2187 y(of)g(t)o(yp)q(e)g Fk(MPI)p 414 2187
V 14 w(Handle)i Fr(and)f Fl(handle)p 770 2187 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
2244 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 2244
V 18 w(t)o(yp)q(e)p Fr(.)27 b(Users)189 2300 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
2447 y Ff(Missing:)166 2497 y Fh(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
2547 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
2602 y Fn(?)i 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 Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fi(6.7.2)49
b(Example)75 135 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 192 y(information)d(on)g(the)h(datat)o(yp)q
(e.)75 298 y Fg(int)23 b(datatype_keyval;)75 411 y(/*)h(library)e
(initialization)g(function.)47 b(MUST)23 b(be)h(called)f(before)g(the)g
(library)75 467 y(is)h(used)f(*/)75 524 y(lib_init\(int)f
(*datatype_keyval\))75 580 y({)147 637 y(MPI_Keyval_create\(MPI_H)o
(ANDLE_N)o(ULL_COPY)o(_FN,)f(MPI_HANDLE_NULL_DEL_FN,)218
693 y(datatype_keyval,)h(NULL\);)75 749 y(})75 919 y(/*)i(the)f
(library)g(*/)75 975 y(lib\(MPI_DATATYPE)f(datatype,)g(int)i
(datatype_keyval\))75 1032 y({)147 1088 y(char)f(datatype_char[1024];)
147 1145 y(int)g(flag;)147 1258 y(MPI_Attr_get\(datatype,)d
(MPI_HANDLE_DATATYPE,)i(datatype_keyval,)f(datatype_char,)h(flag\);)147
1314 y(if)h(\(!flag\))g({)218 1370 y(/*)h(get)f(datatype)g(and)g(cache)
h(for)f(later)g(use)h(*/)218 1427 y(MPI_Get_char_data_type\(data)o
(type,)d(datatype_char\);)218 1483 y(MPI_Attr_put\(datatype,)g
(MPI_HANDLE_DATATYPE,)g(datatype_keyval,)h(datatype_char\))147
1540 y(})147 1653 y(/*)h(use)h(datatype_char)e(*/)75
1766 y(})-117 1819 y Fn(>)15 b Fm(\(Sept\))75 1959 y
Fo(6.8)59 b(Identifying)19 b(Requests)75 2060 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
2117 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 2173 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
2324 y Fl(MPI)p 160 2324 14 2 v 16 w(REQUEST)p 379 2324
V 18 w(TYPE\(request,)g(t)o(yp)q(e)p 776 2324 V 18 w(req\))117
2401 y Fh(IN)155 b Fl(request)452 b Fh(request)117 2476
y(OUT)108 b Fl(t)o(yp)q(e)p 401 2476 V 18 w(req)430 b
Fh(t)o(yp)q(e)15 b(of)e(request)75 2601 y Fg(int)23 b(MPI)p
245 2601 15 2 v 17 w(Request)p 430 2601 V 16 w(type\(MPI)p
638 2601 V 17 w(Request)f(request,)h(MPI)p 1132 2601
V 17 w(Type)p 1245 2601 V 17 w(request)g(*type)p 1573
2601 V 16 w(req\))75 2687 y(MPI)p 150 2687 V 17 w(REQUEST)p
335 2687 V 16 w(TYPE\(REQUEST,)f(TYPE)p 781 2687 V 17
w(REQ,)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: 27 29
27 28 bop 75 -100 a Fj(6.9.)34 b(NAMING)15 b(OBJECTS)1226
b Fr(27)170 49 y Fg(INTEGER)23 b(REQUEST,)g(TYPE)p 675
49 15 2 v 17 w(REQ,)g(IERROR)75 136 y(int)g
(MPI::Request::Type\(MPI::Type)p 844 136 V 14 w(request&)g(type)p
1170 136 V 16 w(req\))h(const)166 222 y Fr(This)11 b(routine)f(returns)
g Fk(MPI)p 645 222 13 2 v 15 w(REQUEST)p 848 222 V 13
w(PERSIST)m(ANT)p Fr(,)f Fk(MPI)p 1205 222 V 14 w(REQUEST)p
1407 222 V 14 w(GENERALIZED)p Fr(,)g Fk(MPI)p 1794 222
V 14 w(REQUEST)p 1996 222 V 14 w(PT2PT)p Fr(,)75 279
y(or)k Fk(MPI)p 206 279 V 14 w(REQUEST)p 408 279 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
335 y(send/recv\),)i(or)g(other)g(form)f(of)h(request,)g(resp)q(ectiv)o
(ely)l(.)166 432 y Ff(Discussion:)166 482 y Fh(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?)1875
537 y Fn(?)j Fm(\(Sept\))1875 596 y Fn(>)g Fm(\(Sept\))75
672 y Fo(6.9)59 b(Naming)20 b(Objects)75 774 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
830 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
887 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 1038 y Fl(MPI)p 160 1038 14 2 v 16 w(HANDLE)p
355 1038 V 16 w(NAME)p 500 1038 V 17 w(PUT)i(\(handle,)f(handlet)o(yp)q
(e,)j(name\))117 1115 y Fh(IN)155 b Fl(handle)465 b Fh(The)15
b(handle)e(whose)i(name)d(is)i(to)g(b)q(e)g(set)117 1190
y(IN)155 b Fl(handlet)o(yp)q(e)385 b Fh(The)15 b(t)o(yp)q(e)f(of)f(the)
i(handle)e(argumen)o(t)117 1265 y(IN)155 b Fl(name)485
b Fh(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 1390 y Fg(int)23 b(MPI)p 245 1390
15 2 v 17 w(Handle)p 406 1390 V 17 w(name)p 519 1390
V 16 w(put\(MPI)p 703 1390 V 16 w(Handle)g(handle,)g(MPI)p
1149 1390 V 17 w(Handle)p 1310 1390 V 17 w(type)g(handle)p
1590 1390 V 16 w(type,)g(char)393 1446 y(*name\))75 1533
y(MPI)p 150 1533 V 17 w(HANDLE)p 311 1533 V 16 w(NAME)p
423 1533 V 17 w(PUT\(HANDLE,)f(HANDLE)p 870 1533 V 16
w(TYPE,)i(NAME,)f(IERROR\))170 1589 y(INTEGER)g(HANDLE,)g(HANDLE)p
699 1589 V 17 w(TYPE)170 1645 y(CHARACTER*\(*\))g(NAME)170
1702 y(INTEGER)g(IERROR)75 1788 y(int)g(MPI::CLASS::Name)p
557 1788 V 15 w(put\(char)g(*name\))166 1875 y Fr(The)14
b(use)g(of)f Fg(CLASS)g Fr(in)h(the)g(C++)g(binding)i(indicates)f(that)
e(this)h(function)h(is)f(de\014ned)h(for)e(all)h Fg(MPI)75
1931 y Fr(sub-classes.)75 2082 y Fl(MPI)p 160 2082 14
2 v 16 w(HANDLE)p 355 2082 V 16 w(NAME)p 500 2082 V 17
w(GET)i(\(handle,)g(handlet)o(yp)q(e,)h(name\))117 2159
y Fh(IN)155 b Fl(handle)465 b Fh(The)15 b(handle)e(whose)i(name)d(is)i
(to)g(b)q(e)g(returned)117 2235 y(IN)155 b Fl(handlet)o(yp)q(e)385
b Fh(The)15 b(t)o(yp)q(e)f(of)f(the)i(handle)e(argumen)o(t)117
2310 y(OUT)108 b Fl(name)485 b Fh(The)17 b(name)e(previously)h(stored)h
(on)g(the)f(handle,)h(or)f(a)g(n)o(ull)905 2366 y(string)e(if)f(no)h
(suc)o(h)h(name)d(exists)75 2491 y Fg(int)23 b(MPI)p
245 2491 15 2 v 17 w(Handle)p 406 2491 V 17 w(name)p
519 2491 V 16 w(get\(MPI)p 703 2491 V 16 w(Handle)g(handle,)g(MPI)p
1149 2491 V 17 w(Handle)p 1310 2491 V 17 w(type)g(handle)p
1590 2491 V 16 w(type,)g(char)393 2547 y(**name\))75
2634 y(MPI)p 150 2634 V 17 w(HANDLE)p 311 2634 V 16 w(NAME)p
423 2634 V 17 w(GET\(HANDLE,)f(HANDLE)p 870 2634 V 16
w(TYPE,)i(NAME,)f(IERROR\))170 2690 y(INTEGER)g(HANDLE,)g(HANDLE)p
699 2690 V 17 w(TYPE)-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 Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)170 49 y Fg(CHARACTER*\(*\))23
b(NAME)170 106 y(INTEGER)g(IERROR)75 192 y(int)g(MPI::CLASS:Name)p
533 192 15 2 v 16 w(get\(char*&)f(name\))h(const)166
279 y Fl(MPI)p 251 279 14 2 v 16 w(HANDLE)p 446 279 V
16 w(NAME)p 591 279 V 17 w(PUT)13 b Fr(allo)o(ws)g(a)g(user)g(to)g
(asso)q(ciate)g(a)f(name)h(string)g(with)h(a)e(handle.)21
b(The)75 335 y(c)o(haracter)13 b(string)h(whic)o(h)h(is)f(passed)g(to)f
Fl(MPI)p 855 335 V 16 w(HANDLE)p 1050 335 V 17 w(NAME)p
1196 335 V 17 w(PUT)h Fr(will)h(b)q(e)g(sa)o(v)o(ed)e(inside)j(the)e
(MPI)75 392 y(library)i(\(so)e(can)h(b)q(e)h(freed)f(b)o(y)g(the)g
(caller)h(immediately)g(after)e(the)i(call,)f(or)g(allo)q(cated)h(on)e
(the)h(stac)o(k\).)166 448 y Fl(MPI)p 251 448 V 16 w(HANDLE)p
446 448 V 16 w(NAME)p 591 448 V 17 w(GET)23 b Fr(returns)f(an)o(y)g
(name)h(whic)o(h)g(had)f(previously)i(b)q(een)g(asso)q(ciated)75
504 y(with)c(the)g(giv)o(en)g(handle.)34 b(In)20 b(the)g(C)f(and)h(C++)
g(bindings)i(it)e(returns)f(a)g(p)q(oin)o(ter)h(to)f(the)h(in)o(ternal)
75 561 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 617 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
617 V 16 w(HANDLE)p 1400 617 V 17 w(NAME)p 1558 617 V
16 w(PUT,)f(or)h(b)o(y)g(the)75 674 y(handle)i(b)q(eing)h(deleted\).)
166 730 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
Fl(MPI)p 1619 730 V 15 w(HANDLE)p 1813 730 V 17 w(NAME)p
1959 730 V 17 w(GET)75 787 y Fr(will)25 b(return)f(a)f(n)o(ull)i
(string)e(\(all)h(spaces)g(in)g(F)l(ortran,)g Fg("")f
Fr(in)h(C)g(and)f(C++\),)j(or,)e(if)g(the)g(handle)75
843 y(refers)17 b(to)f(a)h(system)g(created)g(handle)h(suc)o(h)f(as)g
Fk(MPI)p 998 843 13 2 v 14 w(COMM)p 1142 843 V 15 w(W)o(ORLD)p
Fr(,)g(a)f(suitable)j(prin)o(t)e(string)g(\(e.g.)75 900
y Fg("MPI)p 174 900 15 2 v 17 w(COMM)p 287 900 V 16 w(WORLD")p
Fr(\).)39 b(Similarly)l(,)26 b(an)21 b(implemen)o(tation)j(could)e(c)o
(ho)q(ose)g(to)g(set)f(the)h(name)g(on)g(an)75 956 y
Fl(MPI)p 160 956 14 2 v 16 w(FILE)c Fr(handle)i(to)f(that)f(of)h(the)g
(\014le)h(whic)o(h)g(w)o(as)e(op)q(ened)j(on)e(the)g(handle.)33
b(The)19 b(fact)f(that)h(the)75 1013 y(system)14 b(ma)o(y)g(ha)o(v)o(e)
g(c)o(hosen)g(to)g(giv)o(e)h(a)f(default)h(name)f(to)g(a)g(handle)i(do)
q(es)e(not)g(prev)o(en)o(t)h(the)f(user)h(from)75 1069
y(setting)h(a)g(name)h(on)f(the)h(same)f(handle,)h(doing)g(this)g(remo)
o(v)o(es)e(the)i(old)g(name)f(and)h(assigns)f(the)h(new)75
1125 y(one.)189 1227 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 1283 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 1340 y(reasons:)243 1432 y Fn(\017)i Fr(It)15
b(is)h(not,)e(in)i(general,)f(p)q(ossible)i(to)e(store)f(a)h(string)g
(as)g(an)g(attribute)g(from)g(F)l(ortran.)243 1503 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 1560 y(to)i(ha)o(v)o(e)h(b)q(een)h(allo)q(cated)g(in)h(the)e
(heap.)243 1631 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 1687 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
1744 y(whic)o(h)g(w)o(e)f(can)g(easily)h(eliminate.)243
1815 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
1872 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
1928 y(the)h(library)h(rather)f(than)g(in)h(user)f(co)q(de.)189
2020 y(\()p Fd(End)g(of)i(r)n(ationale.)p Fr(\))189 2122
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 2178 y(returned)g(b)o(y)f Fl(MPI)p
518 2178 V 16 w(HANDLE)p 713 2178 V 17 w(NAME)p 859 2178
V 17 w(GET)p Fr(,)g(as)g(it)h(is)h(alw)o(a)o(ys)e(a)g(v)m(alid)i
(string)f(ev)o(en)g(if)g(there)g(w)o(as)189 2234 y(no)h(name.)189
2309 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
2365 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
2422 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 2478 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 2535 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 2591 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 2647 y(manner.)j(\()p Fd(End)15 b(of)i(advic)n(e)f(to)g
(users.)p Fr(\))-117 2704 y Fn(?)f Fm(\(Sept\))1967 46
y(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 Fj(6.10.)34 b(ALLO)o(WING)16 b(USER)g(ERR)o(ORS)
1025 b Fr(29)75 49 y Fo(6.10)60 b(Allo)n(wing)19 b(User)g(Erro)n(rs)75
151 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 207 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 264 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 320 y(library)l(.)j
(Belo)o(w)15 b(is)h(a)f(prop)q(osal)g(to)g(allo)o(w)g(the)h(raising)f
(of)g(error)g(handlers.)75 471 y Fl(MPI)p 160 471 14
2 v 16 w(RAISE)p 300 471 V 17 w(ERROR)p 464 471 V 18
w(HANDLER)h(\(Comm,)c(Erro)o(rCo)q(de\))117 548 y Fh(IN)155
b Fl(Comm)461 b Fh(Comm)o(unicator)11 b(that)j(scop)q(es)h(the)g(relev)
n(an)o(t)f(error)g(handler)117 622 y(IN)155 b Fl(Erro)o(rCo)q(de)394
b Fh(MPI)14 b(Error)h(Status)75 747 y Fg(int)23 b(MPI)p
245 747 15 2 v 17 w(Raise)p 382 747 V 17 w(error)p 519
747 V 16 w(handler\(MPI)p 799 747 V 16 w(Comm)g(Comm,)g(int)h
(ErrorCode\))75 833 y(MPI)p 150 833 V 17 w(RAISE)p 287
833 V 16 w(ERROR)p 423 833 V 17 w(HANDLER\(COMM,)e(ERROR)p
894 833 V 16 w(CODE,)i(IERROR\))170 890 y(INTEGER)f(COMM,)h(ERROR)p
628 890 V 16 w(CODE,)f(IERROR)75 976 y(int)g(MPI::Comm::Raise)p
557 976 V 15 w(error)p 692 976 V 17 w(handler\(int)f(ErrorCode\))h
(const)166 1103 y Ff(Discussion:)166 1153 y Fh(Note)14
b(that)g(the)h(C++)f(binding)f(is)h Fa(const)p Fh(.)j(Is)d
Fa(comm)f Fh(really)g(an)h(INargumen)o(t?)j({JMS)166
1257 y Fr(This)h(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
1313 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 Fl(MPI)p
1465 1313 14 2 v 16 w(RAISE)p 1605 1313 V 17 w(ERROR)p
1769 1313 V 18 w(HANDLER)75 1370 y Fr(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 Fl(MPI)p 1475 1370 V 16 w(RAISE)p 1615 1370
V 17 w(ERROR)p 1779 1370 V 18 w(HANDLER)75 1426 y Fr(itself)16
b(encoun)o(tered)g(an)f(error\).)k(Belo)o(w)c(is)h(a)f(sample)h(usage:)
99 1527 y Fg(ptr)23 b(=)h(malloc\(32\);)99 1584 y(if)f(\(ptr)h(==)f
(NULL\))147 1640 y(return)g(\(MPI_Raise_error_handle)o(r)e(\(Comm,)i
(MPI_ERR_LASTCODE+1\)\);)166 1782 y Ff(Discussion:)166
1831 y Fh(There)18 b(are)f(some)f(unclear)i(issues)g(regarding)e(error)
i(handlers)f(in)g(general,)g(this)g(discussion)g(b)q(elongs)g(in)75
1881 y(either)e(dynamic,)c(misc,)i(external,)h(or)g(the)g(committee)e
(as)i(a)g(whole.)166 1931 y(1\))k(Is)g Fk(ERRORS)p 432
1931 13 2 v 14 w(ARE)p 526 1931 V 14 w(F)m(A)m(T)m(AL)f
Fh(lo)q(cal)g(or)h(do)q(es)h(the)g(ab)q(ort)f(reac)o(h)h(across)g(an)f
(in)o(tercomm?)29 b(The)18 b(MPI-1)75 1981 y(standard)e(talks)g(ab)q
(out)g(the)g Fk(ERRORS)p 709 1981 V 14 w(ARE)p 803 1981
V 14 w(F)m(A)m(T)m(AL)f Fh(error)h(handler)h(ha)o(ving)d(the)j(same)e
(e\013ect)j(as)e Fk(MPI)p 1764 1981 V 14 w(Ab)q(o)o(rt)75
2031 y(\(MPI)p 168 2031 V 14 w(COMM)p 312 2031 V 15 w(W)o(ORLD,)9
b(Erro)o(rCo)q(de\))p Fh(,)h(with)f(dynamic)e(pro)q(cesses)12
b(w)o(e)e(no)f(longer)g(ha)o(v)o(e)g(an)g(all)f(inclusiv)o(e)h
Fk(MPI)p 1802 2031 V 14 w(COMM)p 1946 2031 V 15 w(W)o(ORLD)p
Fh(.)75 2080 y(W)m(e)15 b(simply)e(need)j(to)f(express)i(the)f(in)o
(ten)o(t)f(of)f(the)i Fk(ERRORS)p 1055 2080 V 14 w(ARE)p
1149 2080 V 14 w(F)m(A)m(T)m(AL)d Fh(handler.)22 b(It)15
b(w)o(ould)g(b)q(e)g(nice)h(if)e(the)75 2130 y Fk(ERRORS)p
237 2130 V 14 w(ARE)p 331 2130 V 14 w(F)m(A)m(T)m(AL)e
Fh(handler)i(didn't)f(ab)q(ort)h(pro)q(cesses)j(that)d(w)o(ere)h(indep)
q(enden)o(t)g(and)f(w)o(ere)g(attac)o(hed.)166 2187 y(2\))f(Related:)18
b(do)q(es)c Fk(MPI)p 555 2187 V 14 w(Ab)q(o)o(rt)g(\(InterComm,)d(0\))i
Fh(ab)q(ort)h(the)g(serv)o(er)h(\(whic)o(h)e(hop)q(es)i(to)e(b)q(e)h(p)
q(ersisten)o(t\)?)1875 2244 y Fn(>)i Fm(\(Sept\))75 2376
y Fo(6.11)60 b(Allo)n(wing)19 b(User)g(F)n(unctions)i(at)f(MPI)p
1022 2376 18 2 v 21 w(FINALIZE)75 2478 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 2534 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 2591 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 Fk(MPI)p
1570 2591 13 2 v 14 w(COMM)p 1714 2591 V 15 w(W)o(ORLD)75
2647 y Fr(with)18 b(a)f(callbac)o(k)i(function.)28 b(When)18
b Fl(MPI)p 821 2647 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 2704 y(an)e
Fl(MPI)p 225 2704 V 16 w(COMM)p 383 2704 V 16 w(FREE)h
Fr(on)f Fk(MPI)p 665 2704 13 2 v 14 w(COMM)p 809 2704
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)-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 Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fr(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
106 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 212 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 268 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 325 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 431 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 488 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 544 y(comm)o(unicator.)-487
b Fn(?)15 b Fm(\(Sept\))75 687 y Fo(6.12)60 b(MPI)19
b(and)h(Threads)75 789 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 845 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 902 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 958
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 1055 y Ff(Discussion:)42
b Fh(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
1105 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.)-1358 b Fn(>)15
b Fm(\(Sept\))166 1161 y Fh(W)m(e)h(ma)o(y)f(w)o(an)o(t)i(to)g
(designate)g(a)g(subset)h(of)e(this)h(section)h(as)f(b)q(eing)g
(mandatory)e(on)h(all)g(MPI)h(systems.)75 1218 y(E.g.,)12
b(w)o(e)j(ma)o(y)c(require)k(that)f(signal)p 660 1218
13 2 v 14 w(safe)g(handler)g(b)q(e)h(supp)q(orted.)-1270
b Fn(?)15 b Fm(\(Sept\))75 1387 y Fi(6.12.1)49 b(General)75
1473 y Fr(A)15 b(prede\014ned)i(attribute)f(k)o(ey)f
Fk(MPI)p 696 1473 V 14 w(THREADS)h Fr(is)f(asso)q(ciated)h(with)g
Fl(MPI)p 1365 1473 14 2 v 16 w(COMM)p 1523 1473 V 16
w(W)o(ORLD)p Fr(.)f(The)g(at-)75 1529 y(tribute)h(is)f(set)g(if)h(the)f
(implemen)o(tation)i(is)e(thread)h(complian)o(t.)166
1633 y Ff(Discussion:)50 b Fh(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 1689 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 1793 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 1849 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 1906 y(execution)f(is)g(in)o(terlea)o(v)o(ed.)189
2012 y Fd(A)n(dvic)n(e)g(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 2069 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 2125 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
2182 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
2238 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 2344
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
2401 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 2457 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 2514 y(should)16 b(not)f(prev)o(en)o(t)g(them)g
(from)g(executing)h(MPI)f(calls.)75 2620 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
2676 y(call)e Fl(MPI)p 240 2676 V 15 w(Send\(bu\0131,)g(count,)g(t)o
(yp)q(e,)g(0,)f(0,)f(comm\))p Fr(,)f(whereas)h(the)g(second)h(thread)g
(executes)g(a)f(blo)q(c)o(king)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 Fj(6.12.)34 b Fl(MPI)14 b Fj(AND)h(THREADS)1187
b Fr(31)75 49 y(receiv)o(e)16 b(call)h Fl(MPI)p 393 49
14 2 v 16 w(Recv\(bu\0132,)e(count,)h(t)o(yp)q(e,)g(0,)f(0,)g(comm\))p
Fr(.)j(I.e.,)d(the)g(\014rst)g(thread)g(sends)h(a)f(message)75
106 y(that)i(is)h(receiv)o(ed)h(b)o(y)e(the)h(second)g(thread.)27
b(This)18 b(comm)o(unication)g(should)h(alw)o(a)o(ys)e(succeed.)28
b(This,)75 162 y(b)q(ecause)16 b(if)g(the)f(\014rst)g(thread)g(blo)q(c)
o(ks,)g(it)g(should)i(yield)f(to)f(the)g(second)h(thread,)e(whic)o(h)i
(will)h(start)d(the)75 219 y(receiv)o(e.)21 b(After)15
b(b)q(oth)g(send)h(and)f(receiv)o(e)h(are)f(p)q(osted,)g(the)g(comm)o
(unication)h(should)h(complete.)189 325 y Fd(A)n(dvic)n(e)d(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 381 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 438 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 560 y Fi(6.12.2)49 b(Cla)o(ri\014cations)75
645 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 702 y Fl(MPI)p 160 702 V 16 w(PROBE)c Fr(or)e Fl(MPI)p
487 702 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 758
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 815 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 871 y(exclusion)17 b(co)q(de.)75 991 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 1048 y(same)h(request,)g(is)g(erroneous.)166
1145 y Ff(Alternativ)o(es)o(:)34 b Fh(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 1195 y(comm)o(unication)c(completes)k
({)g(this)g(is)f(further)i(discussed)h(in)d(the)i(handler)f
(subsection.)166 1251 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 1307
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 1475 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 1531 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
1588 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 1644 y(sync)o(hronization.)75 1764 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 1821
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
1877 y(executes)e(the)f(handler\).)189 1983 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
2040 y(r)n(ationale.)p Fr(\))166 2187 y Ff(Alternativ)o(es)o(:)34
b Fh(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 2236 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
2293 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
Fk(MPI)p 1634 2293 13 2 v 15 w(KILL)p 1734 2293 V 15
w(PROCESS)p Fh(,)75 2349 y(and)14 b Fk(MPI)p 233 2349
V 14 w(KILL)p 332 2349 V 15 w(THREAD)p Fh(.)75 2518 y
Fi(6.12.3)49 b(User-de\014ned)16 b(Handlers)75 2604 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 2661 y(routine.)-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 Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)166 49 y Fr(The)12
b(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
106 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 162 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 313 y Fl(MPI)p
160 313 14 2 v 16 w(POST)p 294 313 V 17 w(HANDLER\(request,)i(handler)p
840 313 V 17 w(attr,)e(handler,)h(extra)p 1217 313 V
16 w(state,)g(handler)p 1491 313 V 17 w(t)o(yp)q(e\))117
390 y Fh(IN)155 b Fl(request)452 b Fh(comm)o(unication)11
b(request)k(\(handle\))117 465 y(IN)155 b Fl(handler)p
459 465 V 18 w(attr)361 b Fh(info)13 b(ob)r(ject)i(for)e(handler)h
(attributes)117 541 y(IN)155 b Fl(handler)449 b Fh(receiv)o(e)15
b(handler)f(\(function\))117 616 y(IN)155 b Fl(extra)p
416 616 V 17 w(state)384 b Fh(extra)15 b(state)f(for)g(handler)117
691 y(IN)155 b Fl(handler)p 459 691 V 18 w(t)o(yp)q(e)351
b Fh(t)o(yp)q(e)15 b(of)e(handler)h(function)-117 768
y Fn(>)h Fm(\(Sept\))75 815 y Fg(int)23 b(MPI)p 245 815
15 2 v 17 w(Post)p 358 815 V 17 w(handler\(MPI)p 639
815 V 16 w(Request)f(request,)h(MPI)p 1132 815 V 17 w(Info)g(handler)p
1436 815 V 17 w(attr,)393 872 y(MPI)p 468 872 V 17 w(Request)p
653 872 V 16 w(handler)g(handler,)g(void)g(*extra)p 1338
872 V 17 w(state,)g(int)393 928 y(MPI)p 468 928 V 17
w(handler)p 653 928 V 16 w(type\))75 1015 y(MPI)p 150
1015 V 17 w(POST)p 263 1015 V 16 w(HANDLER\(REQUEST,)f(HANDLER)p
853 1015 V 16 w(ATTR,)h(HANDLER,)g(EXTRA)p 1347 1015
V 17 w(STATE,)g(HANDLER)p 1699 1015 V 16 w(TYPE,)393
1071 y(IERROR\))170 1128 y(INTEGER)g(REQUEST,)g(EXTRA)p
699 1128 V 17 w(STATE,)g(HANDLER)p 1051 1128 V 16 w(TYPE,)g(IERROR)170
1184 y(PROCEDURE)g(HANDLER)75 1270 y(int)g(MPI::Request::Post)p
605 1270 V 15 w(handler\(const)f(MPI::INFO)h(handler)p
1361 1270 V 16 w(attr,)393 1327 y(MPI::Request)p 684
1327 V 16 w(handler*)f(handler,)h(void*)g(extra)p 1392
1327 V 17 w(state,)g(int)393 1383 y(MPI::handler)p 684
1383 V 16 w(type\))g(const)166 1510 y Ff(Discussion:)166
1560 y Fh(Note)14 b(that)g(the)h(C++)f(binding)f(is)h(const.)k(Is)d
(the)f Fa(request)f Fh(argumen)o(t)f(really)i(IN?)f(-JMS)-117
1617 y Fn(?)i Fm(\(Sept\))166 1664 y Fr(A)o(ttac)o(hes)f
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
1720 y(The)g(handler)i(is)e(a)g(routine)h(of)f(t)o(yp)q(e)75
1777 y Fg(typedef)23 b(int)g(MPI)p 436 1777 V 17 w(Request)p
621 1777 V 16 w(handler\(MPI)p 901 1777 V 16 w(Request)g(*request,)g
(void)g(*extra)p 1610 1777 V 16 w(state\);)166 1863 y
Fr(in)16 b(C,)f(and)g(of)g(t)o(yp)q(e)75 1920 y Fg(SUBROUTINE)22
b(MPI)p 412 1920 V 17 w(REQUEST)p 597 1920 V 16 w(HANDLER\()h(REQUEST,)
g(EXTRA)p 1163 1920 V 17 w(STATE,)g(IERR\))170 1976 y(INTEGER)g
(REQUEST,)g(EXTRA)p 699 1976 V 17 w(STATE,)g(IERR)166
2063 y Fr(in)16 b(F)l(ortran,)e(and)h(of)g(t)o(yp)q(e)75
2119 y Fg(typedef)23 b(int)g(MPI::Request)p 652 2119
V 16 w(handler\(MPI::Request&)e(request,)i(void)g(*extra)p
1671 2119 V 16 w(state\);)166 2206 y Fr(in)16 b(C++.)166
2262 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 2319 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 2375 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
2431 y(handler)16 b(w)o(as)e(p)q(osted)h(to,)g(and)g(in)h
Fl(extra)p 779 2431 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 2488 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 2544
y(call)f(to)f Fl(MPI)p 299 2544 V 16 w(GET)p 403 2544
V 16 w(ST)l(A)l(TUS)p Fr(.)166 2601 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 2657 y(thread)h(for)g
(handler)h(execution,)g(when)g(the)f(request)g(completed.)-1355
b Fn(>)15 b Fm(\(Sept\))1967 46 y(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 Fj(6.12.)34 b Fl(MPI)14 b Fj(AND)h(THREADS)1187
b Fr(33)166 49 y(The)13 b Fl(handler)p 398 49 14 2 v
17 w(attr)g Fr(info)g(argumen)o(t)f(sp)q(eci\014es)j(thread)e
(attributes)f(for)g(the)h(newly)h(created)e(thread,)75
106 y(suc)o(h)h(as)f(priorit)o(y)l(,)h(sc)o(heduling)i(algorithm,)e
(stac)o(k)f(size,)i(etc.)19 b(The)13 b(list)g(of)f(supp)q(orted)h
(attribute)g(names)75 162 y(and)j(attribute)g(v)m(alues,)h(and)f(the)g
(default)g(attribute)g(v)m(alues)h(are)e(implemen)o(tation)i(dep)q
(enden)o(t.)24 b(The)75 219 y(follo)o(wing)16 b(attribute)f(names)g
(are)g(prede\014ned,)h(in)g(corresp)q(ondance)g(with)g(P)o(osix)f
(thread)g(attributes.)75 312 y Fb(MPI)p 184 312 16 2
v 18 w(Pthread)p 387 312 V 19 w(con)o(ten)o(tionscop)q(e)24
b Fr(Con)o(ten)o(tion)15 b(scop)q(e)g(for)g(thread.)20
b(V)l(alues)c(are)189 369 y Fk(PTHREAD)p 385 369 13 2
v 14 w(SCOPE)p 532 369 V 13 w(SYSTEM)g Fr(or)e Fk(PTHREAD)p
973 369 V 15 w(SCOPE)p 1121 369 V 13 w(PROCESS)p Fr(.)75
463 y Fb(MPI)p 184 463 16 2 v 18 w(Pthread)p 387 463
V 19 w(inheritsc)o(hed)23 b Fr(Sp)q(ecify)17 b(ho)o(w)d(sc)o(hedule)j
(attributes)e(are)g(set.)20 b(One)c(of)189 519 y Fk(PTHREAD)p
385 519 13 2 v 14 w(INHERIT)p 561 519 V 15 w(SCHED)f
Fr(or)f Fk(PTHREAD)p 974 519 V 15 w(EXPLICIT)p 1170 519
V 13 w(SCHED)p Fr(.)75 613 y Fb(MPI)p 184 613 16 2 v
18 w(Pthread)p 387 613 V 19 w(sc)o(hedp)q(olicy)24 b
Fr(Sc)o(heduling)12 b(p)q(olicy)h(for)c(thread.)19 b(One)11
b(of)f Fk(SCHED)p 1539 613 13 2 v 15 w(FIF)o(O,)d(SCHED)p
1797 613 V 15 w(RR,)189 669 y Fr(or)14 b Fk(SCHED)p 380
669 V 15 w(OTHER)p Fr(.)75 763 y Fb(MPI)p 184 763 16
2 v 18 w(Pthread)p 387 763 V 19 w(priorit)o(y)22 b Fr(Sc)o(heduling)c
(priorit)o(y)l(.)75 857 y Fb(MPI)p 184 857 V 18 w(Pthread)p
387 857 V 19 w(stac)o(ksize)23 b Fr(minim)o(um)16 b(stac)o(k)e(size.)75
951 y Fb(MPI)p 184 951 V 18 w(Pthread)p 387 951 V 19
w(stac)o(k)m(addr)22 b Fr(Stac)o(k)15 b(address.)75 1045
y Fb(MPI)p 184 1045 V 18 w(Pthread)p 387 1045 V 19 w(detac)o(hstate)24
b Fr(Determines)10 b(whether)h(the)f(thread)g(is)h(attac)o(hed)e(or)h
(detac)o(hed)g(\(don't)189 1101 y(ask)k(me)i(what)e(that)h(means\).)k
(One)d(of)189 1158 y Fk(PTHREADCREA)m(TE)p 542 1158 13
2 v 12 w(UNDET)m(A)o(CHED)e Fr(or)h Fk(PTHREAD)p 1094
1158 V 14 w(CREA)m(TE)p 1265 1158 V 14 w(DET)m(A)o(CHED)p
Fr(.)1875 1195 y Fn(?)h Fm(\(Sept\))166 1251 y Fr(The)f
Fl(handler)p 400 1251 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 1308 y(co)q(de.)20 b(P)o(ossible)d(v)m(alues)f(are)75
1402 y Fb(MPI)p 184 1402 16 2 v 18 w(HANDLER)p 468 1402
V 19 w(DEF)-6 b(A)o(UL)l(T:)23 b Fr(Handler)14 b(is)f(thread-safe,)g
(but)h(ob)q(eys)f(no)g(further)g(restrictions.)75 1495
y Fb(MPI)p 184 1495 V 18 w(HANDLER)p 468 1495 V 19 w(SIGNAL)p
689 1495 V 19 w(SAFE:)22 b Fr(Handler)16 b(is)g(signal-safe.)75
1589 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
1646 y(A)k(function)h(is)f(signal)p 569 1646 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 1702 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
1759 y(m)o(utex)c(calls.)166 1862 y Ff(Discussion:)33
b Fh(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 1919 y(for)j(v)n(arious)f(implem)o(en)o(tations.)166
2023 y Fr(Handler)19 b(co)q(de)g(should)g(b)q(e)g(thread)f(safe.)28
b(Mutual)18 b(exclusion)i(with)f(other)e(handler)j(instances,)75
2079 y(or)c(with)i(computation)e(co)q(de)i(is)f(ac)o(hiev)o(ed)h(b)o(y)
f(using)g(P)o(osix)g(thread)g(sync)o(hronization)h(calls)g(or)e(MPI)75
2135 y(thread)f(sync)o(hronization)h(calls.)166 2192
y(An)e(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 Fk(MPI)p 1674 2192
13 2 v 15 w(SUCCESS)p Fr(.)189 2298 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 2298 14 2 v 16 w(handle)h(call)h(do)q(es)e(not)g(return)g(a)g
(thread)f(id,)189 2355 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 2411 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 2468 y(threads.)189 2543 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 2543 V 18 w(create)p Fr(:)19 b(a)189
2599 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
2656 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(\))-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 Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)75 49 y Fl(First)15
b(Alternative)75 135 y Fr(The)h(request)f(handle)i(is)f(set)f(to)g
Fk(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 Fh(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 Fh(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)j(is)g(deallo)q(cated)i(only)f(after)e(the)i(request)f
(completed)h(and)g(the)f(handler)h(w)o(as)f(in)o(v)o(ok)o(ed,)h(so)75
1790 y(that)e(the)i(handler)g(will)h(b)q(e)f(passed)f(a)g(v)m(alid)i
(request)e(handle,)i(when)f(in)o(v)o(ok)o(ed,)g(ev)o(en)g(if)f(a)g
(call)i(to)75 1847 y Fl(MPI)p 160 1847 V 16 w(REQUEST)p
379 1847 V 18 w(FREE)15 b Fr(o)q(ccurred)h(b)q(efore)g(the)f(handler)h
(started)f(executing.)166 1903 y(A)h(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 Fh(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.)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 Fj(6.12.)34 b Fl(MPI)14 b Fj(AND)h(THREADS)1187
b Fr(35)166 49 y Fh(\(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 Fi(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 Fh(IN)155
b Fl(comm)470 b Fh(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 Fh(info)13 b(ob)r(ject)i(for)e(m)o(utex)g(attributes)117
1483 y(OUT)108 b Fl(mutex)470 b Fh(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(Info)g(mutex)p 1245 1607 V 17 w(attr,)g(MPI)p
1477 1607 V 17 w(mutex)g(mutex\))1875 1644 y Fn(>)16
b Fm(\(Sept\))75 1694 y Fg(MPI)p 150 1694 V 17 w(MUTEX)p
287 1694 V 16 w(CREATE\(COMM,)22 b(MUTEX)p 733 1694 V
17 w(ATTR,)h(MUTEX,)g(IERROR\))170 1750 y(INTEGER)g(COMM,)h(MUTEX)p
628 1750 V 16 w(ATTR,)f(MUTEX,)g(IERROR)75 1837 y(int)g
(MPI::Mutex::Create\(const)e(MPI::Comm&)i(comm,)g(const)g(MPI::Mutex)p
1559 1837 V 16 w(attr&)393 1893 y(mutex)p 516 1893 V
17 w(attr\))1875 1927 y Fn(?)16 b Fm(\(Sept\))1875 1985
y Fn(>)g Fm(\(Sept\))166 2027 y Ff(Missing:)57 b Fh(Need)20
b(to)f(sp)q(ecify)h(prede\014ned)h(m)o(utex)d(attributes.)35
b(No)19 b(a)o(v)o(oid)f(problems)h(with)g(priorit)o(y)75
2083 y(in)o(v)o(ersion,)i(ma)o(y)d(need)i(to)g(require)h(that)f(all)f
(pro)q(cesses)j(in)e(the)g(group)g(of)f Fk(comm)f Fh(ha)o(v)o(e)i(the)h
(same)e(priorit)o(y)75 2140 y(ceiling.)i(If)15 b(left)g(implemen)o
(tatio)o(n)d(dep)q(endan)o(t,)17 b(could)e(b)q(e)g(a)g(problem)f(in)h
(strongly)g(t)o(yp)q(ed)g(languages)g(suc)o(h)h(as)75
2196 y(C++.)1875 2247 y Fn(?)g Fm(\(Sept\))166 2300 y
Fr(Creates)11 b(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 2356 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
2413 y Fl(pthread)p 221 2413 14 2 v 18 w(mutex)p 356
2413 V 16 w(init)-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 Fj(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(MUTEX)p 335 49 V 17 w(FREE\(mutex\))117
126 y Fh(INOUT)62 b Fl(mutex)470 b Fh(m)o(utex)13 b(ob)r(ject)75
251 y Fg(int)23 b(MPI)p 245 251 15 2 v 17 w(Mutex)p 382
251 V 17 w(free\(MPI)p 591 251 V 16 w(Mutex)g(*mutex\))75
337 y(MPI)p 150 337 V 17 w(MUTEX)p 287 337 V 16 w(FREE\(MUTEX,)g
(IERROR\))170 394 y(INTEGER)g(MUTEX,)g(IERROR)75 480
y(int)g(MPI::Mutex::Free\(void\))166 567 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 567 14 2 v 18 w(mutex)p 1886 567 V 17 w(destro)o(y)75
623 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 623 V 16 w(m)o(utex)p 1072 623 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 680 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 736 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 793
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 944 y Fl(MPI)p
160 944 V 16 w(MUTEX)p 335 944 V 17 w(LOCK\(mutex\))117
1021 y Fh(IN)155 b Fl(mutex)470 b Fh(m)o(utex)13 b(to)h(b)q(e)g(lo)q(c)
o(k)o(ed)75 1145 y Fg(int)23 b(MPI)p 245 1145 15 2 v
17 w(Mutex)p 382 1145 V 17 w(lock\(MPI)p 591 1145 V 16
w(Mutex)g(mutex\))75 1232 y(MPI)p 150 1232 V 17 w(MUTEX)p
287 1232 V 16 w(LOCK\(MUTEX,)g(IERROR\))170 1288 y(INTEGER)g(MUTEX,)g
(IERROR)75 1375 y(int)g(MPI::Mutex::Lock\(void\))e(const)166
1502 y Ff(Discussion:)166 1551 y Fh(Note)15 b(that)f(the)h(C++)f
(binding)g(is)g Fa(const)p Fh(.)k(Is)c(the)h Fa(mutex)e
Fh(argumen)o(t)g(really)h(IN?)g(This)g(implies)e(that)i(the)75
1601 y(OS)g(m)o(ust)f(main)o(tain)e(the)k(status)f(of)g(the)g(m)o
(utex.)75 1799 y Fl(MPI)p 160 1799 14 2 v 16 w(MUTEX)p
335 1799 V 17 w(TRYLOCK\(mutex,)g(\015ag\))117 1877 y
Fh(IN)155 b Fl(mutex)470 b Fh(m)o(utex)13 b(to)h(b)q(e)g(lo)q(c)o(k)o
(ed)117 1952 y(OUT)108 b Fl(\015ag)518 b Fh(success)17
b(\015ag)c(\(b)q(o)q(olean\))75 2076 y Fg(int)23 b(MPI)p
245 2076 15 2 v 17 w(Mutex)p 382 2076 V 17 w(trylock\(MPI)p
663 2076 V 15 w(Mutex)h(mutex,)f(int)g(*flag\))75 2163
y(MPI)p 150 2163 V 17 w(MUTEX)p 287 2163 V 16 w(TRYLOCK\(MUTEX,)f
(FLAG,)h(IERROR\))170 2219 y(INTEGER)g(MUTEX,)g(FLAG,)h(IERROR)75
2306 y(int)f(MPI::Mutex::Trylock\(int&)e(flag\))i(const)166
2433 y Ff(Discussion:)166 2482 y Fh(Note)15 b(that)f(the)h(C++)f
(binding)g(is)g Fa(const)p Fh(.)k(Is)c(the)h Fa(mutex)e
Fh(argumen)o(t)g(really)h(IN?)g(This)g(implies)e(that)i(the)75
2532 y(OS)g(m)o(ust)f(main)o(tain)e(the)k(status)f(of)g(the)g(m)o
(utex.)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 Fj(6.12.)34 b Fl(MPI)14 b Fj(AND)h(THREADS)1187
b Fr(37)75 49 y Fl(MPI)p 160 49 14 2 v 16 w(MUTEX)p 335
49 V 17 w(UNLOCK\(mutex\))117 126 y Fh(IN)155 b Fl(mutex)470
b Fh(m)o(utex)13 b(to)h(b)q(e)g(unlo)q(c)o(k)o(ed)75
251 y Fg(int)23 b(MPI)p 245 251 15 2 v 17 w(Mutex)p 382
251 V 17 w(unlock\(MPI)p 639 251 V 16 w(Mutex)g(mutex\))75
337 y(MPI)p 150 337 V 17 w(MUTEX)p 287 337 V 16 w(UNLOCK\(MUTEX,)f
(IERROR\))170 394 y(INTEGER)h(MUTEX,)g(IERROR)75 480
y(int)g(MPI::Mutex::Unlock\(void\))e(const)166 607 y
Ff(Discussion:)166 657 y Fh(Note)15 b(that)f(the)h(C++)f(binding)g(is)g
Fa(const)p Fh(.)k(Is)c(the)h Fa(mutex)e Fh(argumen)o(t)g(really)h(IN?)g
(This)g(implies)e(that)i(the)75 707 y(OS)g(m)o(ust)f(main)o(tain)e(the)
k(status)f(of)g(the)g(m)o(utex.)166 811 y Fr(These)19
b(are)g(the)f(extensions)i(of)e(the)h(P)o(osix)g(calls)h
Fl(pthread)p 1199 811 14 2 v 17 w(mutex)p 1333 811 V
17 w(lo)q(ck,)f(pthread)p 1602 811 V 18 w(mutex)p 1737
811 V 17 w(unlo)q(ck)75 867 y Fr(and)k Fl(pthread)p 317
867 V 18 w(mutex)p 452 867 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 924 y(function)16
b(in)g(non)o(blo)q(c)o(king,)g(lik)o(e)h(a)d(test.)75
1044 y Fl(Condition)i(va)o(riables)1875 1073 y Fn(>)g
Fm(\(Sept\))75 1224 y Fl(MPI)p 160 1224 V 16 w(COND)p
303 1224 V 17 w(CREA)l(TE\(comm,)d(cond)p 739 1224 V
18 w(attr,)i(cond\))117 1301 y Fh(IN)155 b Fl(comm)470
b Fh(comm)o(unicator)11 b(for)j(group)g(sharing)f(condition)g(v)n
(ariable)117 1376 y(IN)155 b Fl(cond)p 410 1376 V 18
w(attr)410 b Fh(info)13 b(ob)r(ject)i(for)e(condition)g(attributes)117
1451 y(OUT)108 b Fl(cond)498 b Fh(condition)13 b(ob)r(ject)75
1576 y Fg(int)23 b(MPI)p 245 1576 15 2 v 17 w(Cond)p
358 1576 V 17 w(create\(MPI)p 615 1576 V 16 w(Comm)g(comm,)g(MPI)p
965 1576 V 17 w(Info)g(cond)p 1197 1576 V 17 w(attr,)g(MPI)p
1429 1576 V 17 w(Cond)g(*cond\))75 1662 y(MPI)p 150 1662
V 17 w(COND)p 263 1662 V 16 w(CREATE\(COMM,)g(COND)p
686 1662 V 16 w(ATTR,)g(COND,)h(IERROR\))170 1719 y(INTEGER)f(COMM,)h
(COND)p 604 1719 V 16 w(ATTR,)f(COND,)h(IERROR)75 1805
y(int)f(MPI::Cond::Create\(const)e(MPI::Comm&)i(comm,)g(const)g
(MPI::Info)g(cond)p 1630 1805 V 16 w(attr&)393 1862 y(cond)p
492 1862 V 17 w(attr\))g(const)166 1989 y Ff(Discussion:)166
2039 y Fh(Note)16 b(that)f(the)h(C++)g(binding)f(is)g
Fa(const)p Fh(.)22 b(Is)15 b(the)h Fa(cond)f Fh(argumen)o(t)f(really)h
(IN?)g(This)g(implies)f(that)h(the)75 2088 y(OS)f(m)o(ust)f(main)o
(tain)e(the)k(status)f(of)g(the)g(condition)f(v)n(ariable.)166
2192 y Fr(Creates)g(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 2249 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 2399 y Fl(MPI)p 160 2399 14
2 v 16 w(COND)p 303 2399 V 17 w(FREE\(cond\))117 2477
y Fh(INOUT)62 b Fl(cond)498 b Fh(condition)13 b(ob)r(ject)75
2601 y Fg(int)23 b(MPI)p 245 2601 15 2 v 17 w(Cond)p
358 2601 V 17 w(free\(MPI)p 567 2601 V 16 w(Cond)g(*cond\))75
2688 y(MPI)p 150 2688 V 17 w(COND)p 263 2688 V 16 w(FREE\(COND,)g
(IERROR\))-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: 38 40
38 39 bop 75 -100 a Fr(38)871 b Fj(CHAPTER)15 b(6.)35
b(EXTERNAL)16 b(INTERF)-5 b(A)o(CES)170 49 y Fg(INTEGER)23
b(COND,)h(IERROR)75 136 y(int)f(MPI::Cond::Free\(void\))166
222 y Fr(F)l(ree)15 b(the)g(condition)i(ob)s(ject.)166
279 y(These)e(are)g(the)h(MPI)f(extensions)h(to)e Fl(pthread)p
976 279 14 2 v 18 w(cond)p 1083 279 V 17 w(init)i Fr(and)g
Fl(pthread)p 1409 279 V 17 w(cond)p 1515 279 V 18 w(destro)o(y)p
Fr(.)75 430 y Fl(MPI)p 160 430 V 16 w(COND)p 303 430
V 17 w(SIGNAL\(cond\))117 507 y Fh(IN)155 b Fl(cond)498
b Fh(condition)13 b(to)h(b)q(e)h(signaled)75 631 y Fg(int)23
b(MPI)p 245 631 15 2 v 17 w(Cond)p 358 631 V 17 w(signal\(MPI)p
615 631 V 16 w(Cond)g(cond\))75 718 y(MPI)p 150 718 V
17 w(COND)p 263 718 V 16 w(SIGNAL\(COND,)g(IERROR\))170
774 y(INTEGER)g(COND,)h(IERROR)75 861 y(int)f
(MPI::Cond::Signal\(void\))e(const)166 988 y Ff(Discussion:)166
1037 y Fh(Note)16 b(that)f(the)h(C++)g(binding)f(is)g
Fa(const)p Fh(.)22 b(Is)15 b(the)h Fa(cond)f Fh(argumen)o(t)f(really)h
(IN?)g(This)g(implies)f(that)h(the)75 1087 y(OS)f(m)o(ust)f(main)o
(tain)e(the)k(status)f(of)g(the)g(condition)f(v)n(ariable.)75
1285 y Fl(MPI)p 160 1285 14 2 v 16 w(COND)p 303 1285
V 17 w(BRO)o(ADCAST\(cond\))117 1363 y Fh(IN)155 b Fl(cond)498
b Fh(condition)13 b(to)h(b)q(e)h(signaled)75 1487 y Fg(int)23
b(MPI)p 245 1487 15 2 v 17 w(Cond)p 358 1487 V 17 w(broadcast\(MPI)p
687 1487 V 15 w(Cond)h(cond\))75 1574 y(MPI)p 150 1574
V 17 w(COND)p 263 1574 V 16 w(BROADCAST\(COND,)e(IERROR\))170
1630 y(INTEGER)h(COND,)h(IERROR)75 1716 y(int)f
(MPI::Cond::Broadcast\(void\))e(const)166 1844 y Ff(Discussion:)166
1893 y Fh(Note)16 b(that)f(the)h(C++)g(binding)f(is)g
Fa(const)p Fh(.)22 b(Is)15 b(the)h Fa(cond)f Fh(argumen)o(t)f(really)h
(IN?)g(This)g(implies)f(that)h(the)75 1943 y(OS)f(m)o(ust)f(main)o
(tain)e(the)k(status)f(of)g(the)g(condition)f(v)n(ariable.)75
2141 y Fl(MPI)p 160 2141 14 2 v 16 w(COND)p 303 2141
V 17 w(W)l(AIT\(cond\))117 2219 y Fh(IN)155 b Fl(cond)498
b Fh(condition)13 b(to)h(w)o(ait)f(on)75 2343 y Fg(int)23
b(MPI)p 245 2343 15 2 v 17 w(Cond)p 358 2343 V 17 w(wait\(MPI)p
567 2343 V 16 w(Cond)g(cond\))75 2429 y(MPI)p 150 2429
V 17 w(COND)p 263 2429 V 16 w(WAIT\(COND,)g(IERROR\))170
2486 y(INTEGER)g(COND,)h(IERROR)75 2572 y(int)f
(MPI::Cond::Wait\(void\))e(const)166 2699 y Ff(Discussion:)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: 39 41
39 40 bop 75 -100 a Fj(6.12.)34 b Fl(MPI)14 b Fj(AND)h(THREADS)1187
b Fr(39)166 49 y Fh(Note)16 b(that)f(the)h(C++)g(binding)f(is)g
Fa(const)p Fh(.)22 b(Is)15 b(the)h Fa(cond)f Fh(argumen)o(t)f(really)h
(IN?)g(This)g(implies)f(that)h(the)75 99 y(OS)f(m)o(ust)f(main)o(tain)e
(the)k(status)f(of)g(the)g(condition)f(v)n(ariable.)166
203 y Fr(These)d(are)g(the)g(MPI)h(extensions)f(of)g(the)g(P)o(osix)g
(calls)i Fl(pthread)p 1229 203 14 2 v 18 w(cond)p 1336
203 V 17 w(signal,)f(pthread)p 1627 203 V 18 w(cond)p
1734 203 V 17 w(b)o(roadcast)75 259 y Fr(and)g Fl(pthread)p
305 259 V 18 w(cond)p 412 259 V 17 w(w)o(ait)p Fr(.)18
b(The)11 b(cond)p 721 259 V 17 w(w)o(ait)g(call)g(is)h(blo)q(c)o(king.)
20 b(The)11 b(cond)p 1333 259 V 16 w(signal)h(call)g(un)o(blo)q(c)o(ks)
g(at)e(least)75 316 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 316 V 17 w(broadcast)g(call)i(un)o(blo)q(c)o(ks)75
372 y(all)e(threads)f(that)g(are)f(w)o(aiting)i(on)f(the)g(condition.)
166 476 y Ff(Discussion:)34 b Fh(I)14 b(ha)o(v)o(e)f(left)h(the)g
(extension)h(of)e Fk(pthread)p 1065 476 13 2 v 17 w(cond)p
1163 476 V 16 w(timedw)o(ait)h Fh(to)g(the)g(real-time)f(p)q(eople.)-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