new threads initialization section

Steve Huss-Lederman (lederman@cs.wisc.edu)
Wed, 5 Feb 1997 12:16:03 -0600 (CST)

Attached is a new proposal for the thread initialization section. We
did not vote on this section because of concerns that it did not
really provide the safety and performance enhancements sought. I have
completely rewritten the section to try and meet the desired goals.
It turned out to be more complex than originally thought. I have
placed limitations on both implementations and users in the new
section. We have to take a first vote on this section early in the
next meeting. Please review what I have written and see if there are
problems. If problems are brought up at the meeting the section may
fail to get into MPI and that would cause problems.

Thanks,
Steve
----------------------------------------------------------------------
%!PS-Adobe-2.0
%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
%%Title: temp.dvi
%%Pages: 7
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
%%EndComments
%DVIPSCommandLine: dvips -o temp.ps temp
%DVIPSParameters: dpi=300, compressed, comments removed
%DVIPSSource: TeX output 1997.02.05:1212
%%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 11 121 df<1238127C12FEA3127C123807077C860F>46
D<EA01FCEA07FF381F07C0EA1E03003E13E0387C01F0A300FC13F8AD007C13F0A3383E03
E0001E13C0EA1F8F3807FF00EA01FC151D7E9C1A>48 D<137013F0120712FF12F91201B3
A4387FFFC0A2121D7D9C1A>I<EA03FC381FFF8038381FC0387C07E038FE03F0A214F813
01127C1238EA000314F0A2EB07E0EB0FC01400131E5B13705B3801C018EA0380EA060048
1338381FFFF05A5AB5FCA2151D7E9C1A>I<B612E0A23807E00714011400156015701530
A21430A21500147014F013FFA213E014701430150CA214001518A31538157815F8EC03F0
B6FCA21E1F7E9E22>69 D<EA07FC381FFF80383F07C0EB03E0EB01F0A2120C1200133FEA
07FDEA1F81EA3E01127C12F8A3EAFC02EA7E0C383FF87E380FE03E17147F9319>97
D<EA01FE3807FF80380F83C0381E01E0383E00F05A14F812FCB5FCA200FCC7FCA3127CA2
6C1318121E380F80703807FFE0C6138015147F9318>101 D<B4FCA2121FB3AAEAFFE0A2
0B207E9F0E>108 D<3AFE0FE03F8090391FF07FC03A1E70F9C3E09039407D01F0EB807E
121FEB007CAC3AFFE3FF8FFEA227147D932C>I<38FF1FC0EB7FF0381FE1F8EB80FCEB00
7EA2143E143FA6143E147E147CEB80FCEBC1F8EB7FE0EB1F8090C7FCA7EAFFE0A2181D7E
931D>112 D<38FFC0FFA2380F80703807C0606D5A3803E180EA01F36CB4C7FC137E133E
133F497E136FEBC7C0380183E0380381F048C67E000E7F39FF81FF80A219147F931C>
120 D E /Fb 23 118 df<EB7FC0EA01C1EA03031207EA0E01A7B5FCEA0E01B0387FCFF8
151D809C17>13 D<EAFFE0A20B0280890E>45 D<EB3F80EBE0E03803803848487E000E7F
487F003C148000381303007814C0A20070130100F014E0A8007014C000781303A2003814
80003C1307001C14006C130E6C5B6C6C5A3800E0E0EB3F801B1E7E9C20>79
D<007FB512C038700F010060130000401440A200C014201280A300001400B1497E3803FF
FC1B1C7F9B1E>84 D<39FFF01FF0390F000380EC0100B3A26C1302138000035BEA01C038
00E018EB7060EB0F801C1D7F9B1F>I<EA1FC0EA3070EA78387F12301200A2EA01FCEA0F
1C12381270126000E01340A3EA603C38304E80381F870012127E9115>97
D<12FC121CAA137CEA1D87381E0180381C00C014E014601470A6146014E014C0381E0180
38190700EA10FC141D7F9C17>I<EA03F8EA0C0CEA181E1230EA700CEA600012E0A61260
EA70021230EA1804EA0C18EA03E00F127F9112>I<EB1F801303AAEA03F3EA0E0BEA1807
EA30031270126012E0A6126012701230EA1807EA0E1B3803E3F0141D7F9C17>I<EA07E0
EA0C30EA1818EA300CEA700EEA600612E0EAFFFEEAE000A41260EA70021230EA1804EA0C
18EA03E00F127F9112>I<13F8EA018CEA071E1206EA0E0C1300A6EAFFE0EA0E00B0EA7F
E00F1D809C0D>I<EB03803807C4C0EA1C783838388038301800EA701CA4EA3018EA3838
6C5AEA27C00020C7FCA21230EA3FF86CB4FC1480EA2003386001C0EAC000A33860018038
300300EA1C0EEA07F8121C7F9215>I<12FC121CAA137C1387EA1D03001E1380121CAD38
FF9FF0141D7F9C17>I<1218123CA21218C7FCA712FC121CB0EAFF80091D7F9C0C>I<12FC
121CB3A9EAFF80091D7F9C0C>108 D<39FC7E07E0391C838838391D019018001EEBE01C
001C13C0AD3AFF8FF8FF8021127F9124>I<EAFC7CEA1C87EA1D03001E1380121CAD38FF
9FF014127F9117>I<EA03F0EA0E1CEA1806487E00701380EA600100E013C0A600601380
EA700300301300EA1806EA0E1CEA03F012127F9115>I<EAFC7CEA1D87381E0180001C13
C0EB00E0A21470A614E0A2EB01C0001E1380381D0700EA1CFC90C7FCA7B47E141A7F9117
>I<EAFCE0EA1D38EA1E78A2EA1C301300ACEAFFC00D127F9110>114
D<EA1F90EA2070EA4030EAC010A212E0EAF800EA7F80EA3FE0EA0FF0EA00F8EA80381318
12C0A2EAE010EAD060EA8FC00D127F9110>I<1204A4120CA2121C123CEAFFE0EA1C00A9
1310A5120CEA0E20EA03C00C1A7F9910>I<38FC1F80EA1C03AD1307120CEA0E1B3803E3
F014127F9117>I E /Fc 15 118 df<131C133EA2132E1367A2EBE78013C713C300017F
1383138100037F1301486C7EA21206000E1378380FFFF8A2381C003CA2121800387FA248
131F80126000E0EB0780191D7F9C1C>65 D<EAFFFC13FF38F00F80EB03E01301EB00F014
781438143CA2141C141EA8143CA3147814F0A2EB03E0EB0FC0B5120013FC171D7C9C1E>
68 D<B512C0A200F0C7FCABB51280A200F0C7FCACB512C0A2121D7C9C19>I<00F013F0AD
B5FCA2EAF000AE141D7C9C1D>72 D<12F0B3AB041D7C9C0C>I<00FCEB07E0A300EE130D
A300E71319A3EB803900E31331EBC071A200E11361A2EBE0E1A200E013C113F1EB7181A3
EB3B01A3131EA313001B1D7C9C24>77 D<EAFFFC13FF38F00F80EB03C0EB01E0EB00F0A6
EB01E01303EB0FC0B51280EBFE0000F0C7FCAD141D7C9C1B>80 D<EAFFF813FF38F00F80
EB03C0EB01E0EB00F0A5EB01E01303EB0FC0B51280140013F8EAF03C131C131E7FA2EB07
80A2EB03C0A2EB01E0EB00F0A21478151D7C9C1B>82 D<EA03F8EA0FFEEA1C0F487E487E
0060C7FC12E0A47E1278127FEA3FE0EA1FFCEA07FEEA01FF38001F801307EB03C0A21301
A400C01380EAE00338F00700EA7C0EEA1FFCEA07F0121F7E9D17>I<B61280A2D8001EC7
FCB3A9191D7F9C1C>I<00F01370B3A5007813E0A2383C01C0381E0380EA0F073807FE00
EA01F8141E7C9C1D>I<EA07E0EA0FF0EA3FF8EA3C3CEA700C130EEAFFFEA3EAE000A312
70EA7802EA3C0EEA1FFEEA0FFCEA03F00F127F9112>101 D<EAE38012E712EFEAFC005A
5AA25AAB09127D910E>114 D<121CA6EAFFE0A2EA1C00AC1320EA1FF0120FEA07C00C18
7F970F>116 D<EAE01CAE137CEAFFFCEA7FDCEA3F1C0E127D9115>I
E /Fd 30 122 df<121C123CA41204A21208A212101220A212401280060E7D840E>44
D<127012F8A212F012E005057B840E>46 D<1207120F121FA2120E1200AA127012F8A212
F012E008147B930E>58 D<14021406A2140E141EA2143F142F144F14CF148FEB010FA213
02A213041308A20110138014071320EB3FFFEB40071380A2EA0100A2120212061204001E
14C039FF807FF81D207E9F22>65 D<48B512FE39001E001C150C1504A25BA49038780408
1500A2140C495AEBFFF8EBF018A23801E010A3EC001048481320A21540A2484813801401
15001407380F001FB512FE1F1F7D9E1F>69 D<90B5FC90381E03C0EC00E0157015785BA4
4913F0A2EC01E015C09038F00700141EEBFFF0EBF01C48487E140F8015803903C00F00A4
3807801E1508A21510000F130ED8FFF01320C7EA03C01D207D9E21>82
D<000FB512FC391E03C03800181418001014081220EB078012601240A239800F00100000
1400A3131EA45BA45BA45BA41201387FFF801E1F799E21>84 D<EBF180380389C0380707
80EA0E03121C123C383807001278A3EAF00EA31420EB1C40A2EA703C135C38308C80380F
070013147C9317>97 D<EA0780123FEA0700A4120EA45AA213F0EA1D0CEA3A0E123CEA38
0FA21270A4EAE01EA3131C133C1338EA607013E0EA31C0EA1F0010207B9F15>I<137EEA
01C138030080EA0E07121E001C1300EA3C0248C7FCA35AA5EA70011302EA3004EA1838EA
07C011147C9315>I<1478EB03F8EB0070A414E0A4EB01C0A213F1EA038938070780EA0E
03121C123C383807001278A3EAF00EA31420EB1C40A2EA703C135C38308C80380F070015
207C9F17>I<137CEA01C2EA0701120E121C123CEA3802EA780CEA7BF0EA7C0012F0A412
7013011302EA3804EA1838EA07C010147C9315>I<1478EB019CEB033CA2EB07181400A2
130EA5EBFFE0EB1C00A45BA55BA55BA5485AA35B1231007BC7FC12F31266123C1629829F
0E>I<EB1E30EB7138EBE0F03801C070EA03801207EB00E05AA3381E01C0A4EB0380A2EA
0E07130B38061700EA01E7EA0007A2130EA21230EA781C485AEA6070EA3FC0151D7F9315
>I<EA01E0120FEA01C0A4485AA448C7FCA2131E1363380E8180380F01C0120EA2381C03
80A438380700A3EB0E1000701320A2131CEB0C4000E013803860070014207D9F17>I<13
C0EA01E0A213C0C7FCA7120E12131223EA4380EA4700A21287120EA35AA3EA38401380A2
1270EA31001232121C0B1F7C9E0E>I<EA01E0120FEA01C0A4485AA448C7FCA2EB03C0EB
0420380E08E013111321EB40C0381C8000001DC7FC121EEA1FC0EA38E01370A2EB384038
707080A3EB310012E0EA601E13207D9F15>107 D<EA03C0121FEA0380A4EA0700A4120E
A45AA45AA45AA3127112E2A4126412380A207C9F0C>I<391C0F80F0392630C318394740
640C903880680EEB0070A2008E495A120EA34848485AA3ED70803A3803807100A215E115
623970070064D83003133821147C9325>I<381C0F80382630C0384740601380EB0070A2
008E13E0120EA3381C01C0A3EB038400381388A2EB0708EB031000701330383001C01614
7C931A>I<137CEA01C338030180000E13C0121E001C13E0123C1278A338F003C0A3EB07
801400EA700F130EEA3018EA1870EA07C013147C9317>I<3801C1E0380262183804741C
1378EB701EA2EA08E01200A33801C03CA3143838038078147014E0EBC1C038072380EB1E
0090C7FCA2120EA45AA2B47E171D809317>I<EA1C1EEA266138278380EA47871307EB03
00008EC7FC120EA35AA45AA45A123011147C9313>114 D<13FCEA0302EA0601EA0C0313
0713061300EA0F8013F0EA07F8EA03FCEA003E130E1270EAF00CA2EAE008EA4010EA2060
EA1F8010147D9313>I<EA018013C0EA0380A4EA0700A2EAFFF0EA0700120EA45AA45AA3
1320EA7040A21380A2EA3100121E0C1C7C9B0F>I<000E13C0001313E0382301C0EA4381
EA4701A238870380120EA3381C0700A31410EB0E201218A2381C1E40EA0C263807C38014
147C9318>I<380E0380EA1307002313C0EA4383EA4701130000871380120EA3381C0100
A31302A25BA25BEA0E30EA03C012147C9315>I<000EEBC1C0001313E3392301C3E03843
81C1384701C015603987038040120EA3391C070080A3EC0100A21306EB0F02000C5B380E
13083803E1F01B147C931E>I<38038380380CC440381068E013711220EB70C03840E000
1200A3485AA314403863808012F3EB810012E5EA84C6EA787813147D9315>I<000E13C0
001313E0382301C0EA4381EA4701A238870380120EA3381C0700A4130E1218A2EA1C1EEA
0C3CEA07DCEA001CA25B12F05BEAE060485AEA4380003EC7FC131D7C9316>I
E /Fe 56 126 df<1238127CA2127E123E120EA3121CA2123812F812F012C0070E789B18
>39 D<137013F0EA01E0EA03C0EA0780EA0F00121E121C5AA25AA45AA81270A47EA27E12
1E7EEA0780EA03C0EA01F0120013700C24799F18>I<126012F012787E7E7EEA07801203
EA01C0A2EA00E0A41370A813E0A4EA01C0A2EA03801207EA0F00121E5A5A5A12600C247C
9F18>I<EA01C0A4EA41C138F1C780EAFDDF387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38
FDDF80EAF1C73841C100EA01C0A411147D9718>I<121C123E127E127F123F121F120712
0E121E127C12F81260080C788518>44 D<387FFFC0B512E0A26C13C013047E8F18>I<12
30127812FCA2127812300606778518>I<1303EB0780A2130F14005B131EA2133E133C13
7C1378A213F85B12015B12035BA212075B120F90C7FCA25A121E123E123CA2127C127812
F85AA2126011247D9F18>I<EA01F0EA07FC487EEA1F1FEA1C0738380380007813C0EA70
01A238E000E0A9EAF001007013C0A2EA780300381380381C0700EA1F1FEA0FFE6C5AEA01
F0131C7E9B18>I<EA03F0EA0FFC487EEA3C0F38780780EA700338E001C0A314E0A21270
EA7803EA3C0FEA1FFFEA0FFEEA03F0C7FCEB01C0A338300380EA7807EB0F00133EEA3FFC
EA1FF0EA07C0131C7E9B18>57 D<1218123C127EA2123C12181200A81218123C127EA212
3E121E120E121C123C127812F01260071A789318>59 D<EA0FF0EA3FFC48B4FCEA700F38
F00380A2EA600738000F00133E5BEA01F05B485AA55BC8FCA5EA0380487EA36C5A111C7D
9B18>63 D<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5380FFF80A3EA0E0338
1C01C0A3387F07F000FF13F8007F13F0151C7F9B18>65 D<EA7FFCB5FC6C1380381C03C0
1301EB00E0A4130114C01307381FFF80140014C0EA1C03EB00E014F01470A414F014E013
03387FFFC0B51280387FFE00141C7F9B18>I<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB
01E01300A214F01470A814F014E0A2130114C01303EB0F80387FFF00485AEA7FF8141C7F
9B18>68 D<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA21438A5B5
12F8A3151C7F9B18>I<B512F8A3381C0038A41400A21307A3EA1FFFA3EA1C07A390C7FC
A7EAFFC0A3151C7F9B18>I<3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A290
C7FC5AA5EB0FF0131F130F387001C0A213031238A2EA1C07EA1F0FEA0FFFEA03FDEA01F1
141C7E9B18>I<387F07F038FF8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F0
38FF8FF8387F07F0151C7F9B18>I<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C
1300111C7D9B18>I<387F07F038FF87F8387F07F0381C03C0EB07801400130E131E5B13
385B13F0121DA2EA1FB8A2131C121EEA1C0EA27FA2EB0380A2EB01C0387F03F038FF87F8
387F03F0151C7F9B18>75 D<EAFFC0A3001CC7FCB114E0A5B5FCA3131C7E9B18>I<38FC
01F8EAFE03A2383B06E0A4138EA2EA398CA213DCA3EA38D8A213F81370A21300A638FE03
F8A3151C7F9B18>I<387E07F038FF0FF8387F07F0381D81C0A313C1121CA213E1A31361
1371A213311339A31319A2131D130DA3EA7F07EAFF87EA7F03151C7F9B18>I<EA0FFE38
3FFF804813C0EA7803EA700100F013E0EAE000B0EAF001007013C0EA7C07EA7FFF6C1380
380FFE00131C7E9B18>I<EAFFFEEBFF8014C0EA1C03EB01E013001470A514E01301EB03
C0EA1FFF1480EBFE00001CC7FCA8B47EA3141C7F9B18>I<EA7FF8EAFFFE6C7E381C0F80
130314C01301A313031480130F381FFF005BA2EA1C0F7FEB0380A5149CA3387F01F8EAFF
81387F00F0161C7F9B18>82 D<3803F1C0EA1FFF5AEA7C0FEA7003EAE001A390C7FC1270
1278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00E0A2126012E0130100F013C038F8
0780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5FCA238E07038A400001300B2EA07
FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0EA0F01380783C03803FF806C1300
EA007C171C809B18>I<387FFFC0B512E0A26C13C013047E7F18>95
D<EA0FF0EA1FFC487EEA3C0FEA180738000380A213FF1207121FEA7F03127812E0A3EAF0
07EA780F383FFFF8EA1FFDEA07F015147E9318>97 D<127E12FE127E120EA5133EEBFF80
000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E13803806
3E00151C809B18>I<EA01FEEA07FF001F1380EA3E073838030048C7FCA25AA61270EB01
C01238EA3E03381FFF8000071300EA01FC12147D9318>I<EB1F80133F131F1303A5EA03
E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007A2EA380FEA3C1F381FFFF038
0FFBF83803E3F0151C7E9B18>I<EA01F0EA07FCEA1FFEEA3E0F38380780EA7003A238E0
01C0A2B5FCA300E0C7FC1270EB01C01238EA3E07381FFF8000071300EA01F812147D9318
>I<EB1F80EB7FC0EBFFE013E13801C0C01400A3387FFFC0B5FCA23801C000AEEA7FFFA3
131C7F9B18>I<3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C0EEA1E1EEA1FFC
5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F038700070481338A4007813F0EA7E
03381FFFC06C13803801FC00151F7F9318>I<127E12FE127E120EA5133EEBFF80000F13
C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC171C809B18>I<EA0380EA07C0
A3EA0380C7FCA4EA7FC012FF127F1201AEB5FCA3101D7C9C18>I<127E12FE127E120EA5
EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA0E0F7FEB038014C0387FC7F8
12FF127F151C7F9B18>107 D<EAFFC0A31201B3A4B51280A3111C7D9B18>I<38F9C1C038
FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>I<EA7E
3E38FEFF80007F13C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC17148093
18>I<EA01F0EA0FFE487E383E0F80EA3803387001C0A238E000E0A5EAF001007013C0EA
7803383C0780EA3E0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF80007F13C0
380FC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380EB3E0090C7
FCA7EA7FC0487E6C5A151E809318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005B
A290C7FCA9EAFFFC7F5B14147E9318>114 D<EA07F7EA3FFF5AEA780FEAE007A3007CC7
FCEA7FE0EA1FFCEA03FEEA001F38600780EAE003A212F038F80F00B5FC13FCEAE7F01114
7D9318>I<487E1203A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C1380
EB3E0013197F9818>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE
3801FCFC1714809318>I<387F8FF000FF13F8007F13F0381C01C0380E0380A338070700
A3138FEA038EA3EA01DCA3EA00F8A2137015147F9318>I<38FF07F8138F1307383800E0
A4381C01C0137113F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F9318>
I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207EB0700A2EA0387A2138EEA01CE
A213CC120013DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>
121 D<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B13F8485AEA03C0485A38
0F0070121E5A5AB512F0A314147F9318>I<EB07E0131F137FEB780013E0AB1201EA7FC0
485AA26C7EEA01E01200AB1378EB7FE0131F130713247E9F18>I<127CB4FC13C01203C6
7EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005BABEA03C012FF90C7FC127C13247E9F18>125
D E /Ff 25 104 df<EBF8F012011203EA078013005AA7EAFFF8A3EA0F00B11420809F18
>13 D<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012F0AE1270
1278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40
D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012
07A213005AA2121E121C123C12385A5A0B2E7EA112>I<EAFFF0A30C03808B0F>45
D<EA03F0EA0FFC487EEA383FEA700F3860078012E0EB03C01240A21200A3EB0780A2EB0F
00130E5B133C5B13E0485A485A48C7FC120E5A5A5AB512C0A3121F7E9E17>50
D<131FA2497E133BA2EB7BC013731371EBF1E013E113E000017FA213C000031378A21380
00077FA21300380FFFFEA2487F381E000FA24814801407A24814C01403A248EB01E01B20
7F9F1E>65 D<EAFFFCEBFF8014C038F007E0EB01F013001478A514F0EB01E0EB0FC0B512
80A214E038F003F0EB00F8143C141C141EA5143C14FCEB03F8B512F014C0EBFE0017207C
9F1E>I<B5FC14C08038F003F8EB00FC143E141E80A2EC0780A3EC03C0A815801407A2EC
0F00A2141E143E5CEB03F8B55A14C091C7FC1A207C9F21>68 D<B512F0A300F0C7FCABB5
12C0A300F0C7FCACB512F0A314207C9F1B>I<B512E0A300F0C7FCABB51280A300F0C7FC
AF13207C9F1A>I<00F0131EAEB512FEA338F0001EAF17207C9F20>72
D<12F0B3AE04207C9F0D>I<00F0EB1F801500143E5C5C495A495A495A495A49C7FC133E
5B5B12F1EAF3FC12F7EAFF9E131F487E486C7E00F87FEAF0038013016D7E80147880143E
141E80158019207C9F20>75 D<12F0B3ABB512C0A312207C9F19>I<00F8147E6C14FEA2
00F414DE00F61301A300F3EB039EA2EB8007A200F1141EEBC00FA200F0130EEBE01EA2EB
601CEB703CA2EB3038EB3878A2EB1870EB1CF0A2EB0CE0A2EB07C0A390C7FC1F207C9F28
>I<00FC131E7EA212F7A2138012F3A2EAF1C0A213E012F013F013701378A2133CA2131C
131E130E130F1307A2EB039EA214DE1301A2EB00FEA2147E17207C9F20>I<EB1F80EBFF
F0487F3803E07C3807801E48487E001EEB078048EB03C0A248EB01E0A30070130000F014
F0A86C1301007814E0A2007C1303003C14C0003E1307001E14806CEB0F00EBC03F3807E0
7E3801FFF86C5BEB1F801C227EA021>I<EAFFFEEBFF8014E038F003F013001478143814
3CA51438147814F01303B512E01480EBFE0000F0C7FCAD16207C9F1D>I<EAFFFEEBFF80
14E038F003F0EB00F81478143CA5147814F8EB03F0B512E01480EBFE00EAF01E130E130F
EB0780A2EB03C0A2EB01E0A2EB00F014701478143CA2141E17207C9F1D>82
D<EA01FC3807FF80001F13C0EA3E03EA7C00007813005AA57E127C127EEA3FE0EA1FFCEA
07FF0001138038003FC0EB07E01303EB01F01300A5EB01E012C038F003C0EAFC0F387FFF
80381FFE00EA03F814227EA019>I<B612C0A3D8001EC7FCB3AB1A207E9F1F>I<00F0133C
B3A700781378A26C13F0EA3E01381F03E0380FFFC000031300EA00FC16217C9F1F>I<38
7FFFFEA3C7127C147814F8EB01F014E0130314C0EB0780130F1400131E133E133C5B13F8
5B485A12035B485A120F90C7FC5A123E123C127CB512FEA317207E9F1C>90
D<EA07E0EA3FF8EA7FFCEA701EEA401FEA000FA3133FEA07FF121FEA7E0F12F812F0A3EA
F83FEA7FFFEA3FEFEA1F8F10147E9316>97 D<3803E0F0EA0FFF5A383E3E00EA3C1E487E
A5EA3C1EEA3E3EEA1FFC485AEA33E00030C7FC1238EA3FFEEBFF806C13C0007F13E03878
03F0EAF000A3EAF801387E07E0383FFFC0000F1300EA03FC141E7F9317>103
D E /Fg 11 123 df<12F8A505057B8410>46 D<137E3801FF80000713E04813F0381FC3
F81300003E137CA2003C133C007C133EA20078131EA200F8131FAF0078131E007C133EA4
6C137C003F13FC6C13F813C3380FFFF06C13E00001138038007E0018297EA71D>48
D<13301370EA01F0120F12FFA212F11201B3ACB512E0A313287BA71D>I<12F8B3B3A605
2A7BA910>73 D<EA01FC380FFF80003F13C014E0383C03F0EA3001000013F81300A41301
13FF1207121FEA3FC0EA7E005A5AA3EAFC01EA7E07EA7FFF7EEA1FFCEA0FE0151B7E9A1C
>97 D<12F8A51200AA12F8B3A9052A7CA90E>105 D<12F8B3B3A6052A7CA90E>108
D<EAF83FEBFFC000FB13E0B512F0138338FE01F8EAFC00A35AB2151B7C9A1E>110
D<137E3801FF80000713E04813F0381F81F8383F00FC003E137C48133EA20078131E00F8
131FA7007C133EA36C137C003F13FC381FC3F8380FFFF06C13E06C13C038007E00181B7E
9A1D>I<EA0F80A7B51280A3380F8000B2148013C33807FFC0A26C1300EA01F812227FA1
15>116 D<B512F8A314F0EA0003EB07E014C0130FEB1F801400133E137E5B5B1201485A
5B485A120F485A90C7FC5A127E387FFFF8B5FCA3151B7E9A19>122
D E /Fh 15 115 df<120412081210123012201260A2124012C0AA12401260A212201230
121012081204061A7D920C>40 D<128012401220123012101218A21208120CAA12081218
A212101230122012401280061A7F920C>I<121FEA3180EA60C0EA4040EAC060A8EA4040
EA60C0EA3180EA1F000B107F8F0F>48 D<1218127812981218AC12FF08107D8F0F>I<12
1FEA6180EA40C0EA806012C01200A213C0EA0180EA030012065AEA10201220EA7FC012FF
0B107F8F0F>I<121FEA2180EA60C0A212001380EA0100121FEA00801340136012C0A2EA
8040EA6080EA1F000B107F8F0F>I<EA0180A212031205120D121912111221124112C1EA
FFE0EA0180A4EA0FE00B107F8F0F>I<EA20C0EA3F80EA2E001220A3122FEA3080EA2040
EA0060A312C0EA80C0EA6180EA1F000B107F8F0F>I<EA0780EA1840EA30C0126013005A
12CFEAF080EAE040EAC060A31240EA60C0EA3080EA1F000B107F8F0F>I<1240EA7FF013
E0EA8040A2EA0080EA01001202A212061204A2120CA50C117F900F>I<121FEA3180EA60
C0A3EA3180EA3F00120EEA3380EA61C0EAC060A31340EA60C0EA1F000B107F8F0F>I<12
1FEA3180EA60C0EAC0401360A3EA40E01221EA1E6012001340EA60C01380EA6300121E0B
107F8F0F>I<00FC137E001C1370001613B0A338130130A2EA1182A3EA10C4A21368A313
3038FE31FE17117F901B>77 D<123E1263EA0180A2120F12311241EAC190A21263EA3DE0
0C0B7F8A0F>97 D<12F7EA3980EA38001230A712FC090B7F8A0C>114
D E /Fi 2 64 df<B612F8A2D80006C7FCB3A913021D1E7D9D23>62
D<13021306B3A9B612F8A21D1E7D9D23>I E /Fj 10 91 df<1230127812F81278127005
057C840D>46 D<137EEA01C338030180000713C0EA0E0014E05AA2EA3C0112381278A538
F003C0A51480130712E01400A2130E1260EA701CEA3038EA3870EA0FC0131F7C9D17>48
D<13181338EA01F8EA0E701200A513E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B
9D17>I<1408140C141C143CA2147C147E149EA2EB011EA21302801304A21308A2011013
8014071320A2EB7FFF90384007C0EB8003A2EA0100A21202EC01E01206001F130339FF80
1FFE1F207F9F22>65 D<3807FF803800F8001378A25BA6485AA6485AA6485AA648C7FC7F
EAFFF0111F7E9E10>73 D<3807FFE0D800FCC7FC1378A25BA6485AA6485AA41580EC0100
EA0780A25C14021406140E380F001E147CB512FC191F7E9E1C>76
D<D807F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83C0D801035B
EB01E0A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A21401000C5C00
1E1300B47E221F7E9E22>78 D<EB01FCEB0E0790383801C090387000E0484813F0484813
78485A153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01F0007C14
E01403003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F801F217C9F
23>I<003FB512F0383C078000301430126039400F0010A212C01280A3D8001E1300A65B
A65BA65B7F383FFFE01C1F7A9E21>84 D<0003B512F09038F001E0EB8003010013C00006
EB0780EC0F000004131E143E143C5CC75A495A13035C495A49C7FC131E133E133C491380
5B3901E00100120313C048485A380F0002001E1306003E130E003C131E4813FCB5FC1C1F
7E9E1C>90 D E /Fk 51 123 df<90381F83E09038F06E303901C07878380380F8903800
F03048EB7000A7B612803907007000B2383FE3FF1D20809F1B>11
D<133FEBE0C0EA01C0380381E0EA0701A290C7FCA6B512E0EA0700B2383FC3FC1620809F
19>I<EB3FE013E0EA01C1EA0381EA0700A8B5FCEA0700B2383FE7FC1620809F19>I<9038
1F81F89038F04F043901C07C06390380F80FEB00F05A0270C7FCA6B7FC3907007007B23A
3FE3FE3FE02320809F26>I<13401380EA01005A12061204120C5AA212381230A2127012
60A412E0AC1260A412701230A212381218A27E120412067E7EEA008013400A2E7BA112>
40 D<7E12407E12307E1208120C7EA212077EA213801201A413C0AC1380A412031300A2
5A1206A25A120812185A12205A5A0A2E7EA112>I<127012F012F8A212781208A31210A3
1220A21240050E7C840D>44 D<EAFFF0A20C02808A0F>I<127012F8A3127005057C840D>
I<13801203120F12F31203B3A6EA07C0EAFFFE0F1E7C9D17>49 D<EA03F0EA0C1CEA100E
487E00401380128000F013C0EAF803A3EA200712001480A2EB0F00130E5B5B5B13605B48
5A48C7FC000613405A5A00101380EA3FFF5AB5FC121E7E9D17>I<EA03F0EA0C1CEA100E
EA200F007813801307A2EA380F12001400A2131E131C1370EA07F0EA003C130E130FEB07
80A214C0122012F8A300F013801240EB0F00EA200EEA183CEA07F0121F7E9D17>I<1306
A2130EA2131E132EA2134E138EA2EA010E1202A212041208A212101220A2124012C0B512
F038000E00A7EBFFE0141E7F9D17>I<EA1803EA1FFE5B5B13E00010C7FCA6EA11F0EA16
1CEA180EEA10071480EA0003A214C0A3127012F0A200E013801240EB0700EA20066C5AEA
0838EA07E0121F7E9D17>I<5B497EA3497EA3EB09E0A3EB10F0A3EB2078A3497EA2EBC0
3EEB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14E039FF801FFE1F20
7F9F22>65 D<B61280380780071401A2140015C01540A4EC2000A3146014E013FF138014
601420A391C7FCA87FEAFFFE1A1F7F9E1E>70 D<39FFF07FF8390F000780AD90B5FCEB00
07AF39FFF07FF81D1F7E9E22>72 D<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<EAFFF8
EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E1C>76
D<B46CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A2
90380E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E
2A>I<B512E0380F007C141E80EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FC
AEEAFFF01A1F7E9E1F>80 D<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF
80EB01C0EB0070A280143CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E
9E21>82 D<007FB512E038780F010060EB006000401420A200C0143000801410A4000014
00B3497E3803FFFC1C1F7E9E21>84 D<39FFF00FF8390F0003E0EC0080B3A46CEB010013
80120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<3BFFF07FF81FF03B1F000FC0
07C06C903907800180170015C001805C00071502EC09E013C000035DEC19F01410D801E0
5CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090383D000F133F6D
5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>87 D<397FF81FF8390FE007
C03907C0030000031302EBE0063801F00400005BEBF818EB78106D5AEB3E60EB1E406D5A
A213076D7E497E1305EB08F0EB18F8EB1078EB207CEB603EEB401EEB801F3901000F8014
07000214C000061303001FEB07E039FFC01FFE1F1F7F9E22>I<EA1FE0EA3030EA781813
1CEA300E1200A313FEEA078EEA1E0E1238127800F01310A3131E127838386720380F83C0
14147E9317>97 D<121C12FC121CAA137CEA1D87381E0180EB00C0001C13E01470A21478
A6147014F014E0001E13C0381A018038198700EA107C15207E9F19>I<EA01FCEA0706EA
1C0F123813060078C7FC127012F0A61270127800381380A2381C0100EA0706EA01F81114
7F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112381278127012F0A61270
A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA0E1C487E487EA21270EB
038012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706EA01F811147F9314>I<
137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE01020809F0E>I<14E038
03E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33E00020C7FCA21230A2
EA3FFE381FFF8014C0383001E038600070481330A4006013606C13C0381C03803803FC00
141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2121CAE38FF8FF014207E
9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F9E0C>I<121C12FC121C
AAEB1FE0EB0780EB060013045B5B5B136013E0EA1DF0EA1E70EA1C38133C131C7F130F7F
148014C038FF9FF014207E9F18>107 D<121C12FC121CB3ABEAFF8009207F9F0C>I<391C
3E03E039FCC30C30391D039038391E01E01CA2001C13C0AE3AFF8FF8FF8021147E9326>
I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF8FF014147E9319>I<EA01F8EA070E38
1C0380383801C0A2387000E0A200F013F0A6007013E0A2383801C0A2381C038038070E00
EA01F814147F9317>I<EA1C7CEAFD87381E018014C0381C00E014F014701478A6147014
F014E0381E01C0EB0380381D8700EA1C7C90C7FCA8B47E151D7E9319>I<3801F0403807
0CC0EA0E02EA1C03EA38011278127012F0A6127012781238EA1C03EA0C05EA0709EA01F1
EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18EA1E3CA21318EA1C00AEEAFFC00E147E
9312>I<EA0FC8EA3038EA6018EAC008A3EAE000127CEA3FE0EA1FF0EA07F8EA003CEA80
0E130612C0A21304EAE00CEAD818EA87E00F147F9312>I<1202A31206A2120EA2123EEA
FFF8EA0E00AB1304A5EA07081203EA01F00E1C7F9B12>I<381C0380EAFC1FEA1C03AE13
07120CEA061B3803E3F014147E9319>I<38FF83F8383E00E0001C13C06C1380A3380701
00A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015147F9318>I<39FF9FE1FC39
3C078070391C030060EC8020000E1440A214C0D80704138014E0A239038861001471A238
01D032143A143E3800E01CA2EB6018EB40081E147F9321>I<38FF87F8381E03C0380E01
80EB0300EA0702EA0384EA01C813D8EA00F01370137813F8139CEA010E1202EA06073804
0380000C13C0003C13E038FE07FC16147F9318>I<38FF83F8383E00E0001C13C06C1380
A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A31320A25BA3EAF080A200F1
C7FC1262123C151D7F9318>I<EA7FFFEA700E1260EA401C133813781370EA00E0120113
C0EA038012071301120E121EEA1C03EA3802EA7006130EEAFFFE10147F9314>I
E /Fl 46 122 df<132013401380EA01005A12061204120CA25AA25AA312701260A312E0
AE1260A312701230A37EA27EA2120412067E7EEA0080134013200B327CA413>40
D<7E12407E7E12187E12041206A27EA2EA0180A313C01200A313E0AE13C0A312011380A3
EA0300A21206A21204120C5A12105A5A5A0B327DA413>I<127012F812FCA212741204A4
1208A21210A212201240060F7C840E>44 D<EAFFF8A20D02808B10>I<127012F8A31270
05057C840E>I<13801203120F12F31203B3A9EA07C0EAFFFE0F217CA018>49
D<EA03F0EA0C1CEA100700201380384003C0A2008013E012F0EAF801A3EA2003120014C0
A2EB07801400130E5B13185B5B5B485A90C7FC000213205A5A00181360481340383FFFC0
5AB5FC13217EA018>I<1303A25BA25B1317A21327136713471387120113071202120612
041208A212101220A2124012C0B512F838000700A7EB0F80EB7FF015217FA018>52
D<00101380381E0700EA1FFF5B13F8EA17E00010C7FCA6EA11F8EA120CEA1C0738180380
1210380001C0A214E0A4127012F0A200E013C01280EA4003148038200700EA1006EA0C1C
EA03F013227EA018>I<12401260387FFFE014C0A23840008038C0010012801302A2485A
5BA25B5BA21360134013C0A21201A25B1203A41207A76CC7FC13237DA118>55
D<EA01F8EA060EEA0803381001801220386000C0A31270A238780180003E1300EA3F02EA
1FC4EA0FF812036C7EEA067EEA083F38100F80383007C0EA6003EB00E05A1460A4006013
4014C06C138038180300EA0E0EEA03F013227EA018>I<EA01F0EA060C487EEA18073838
03801270A238F001C0A314E0A5127013031238EA1805120CEA0619EA03E1380001C0A3EB
0380A21230387807001306EA700CEA20186C5AEA0FC013227EA018>I<497EA3497EA3EB
05E0A2EB09F01308A2EB1078A3497EA3497EA2EBC01F497EA248B51280EB0007A20002EB
03C0A348EB01E0A348EB00F0121C003EEB01F839FF800FFF20237EA225>65
D<903807E0109038381830EBE0063901C0017039038000F048C7FC000E1470121E001C14
30123CA2007C14101278A200F81400A812781510127C123CA2001C1420121E000E14407E
6C6C13803901C001003800E002EB381CEB07E01C247DA223>67 D<B512F0380F801E0007
1307EC0380EC01C0EC00E015F01578A2157C153CA3153EA9153CA2157C1578A215F015E0
1401EC03C0EC0700000F131EB512F01F227EA125>I<B612C0380F800700071301140015
40A215601520A314201500A3146014E013FF138014601420A315081400A21510A31530A2
157015E0000F1303B6FC1D227EA121>I<B612C0380F80070007130114001540A2156015
20A314201500A3146014E013FF138014601420A491C7FCA9487EEAFFFE1B227EA120>I<
39FFFC3FFF390FC003F039078001E0AE90B5FCEB8001AF390FC003F039FFFC3FFF20227E
A125>72 D<EAFFFCEA0FC0EA0780B3ACEA0FC0EAFFFC0E227EA112>I<D8FFC0EB03FF00
0F15F0000715E0D805E01305A2D804F01309A301781311A36D1321A36D1341A26D1381A3
9038078101A3EB03C2A2EB01E4A3EB00F8A31470120E001FEC03F03AFFE0203FFF28227E
A12D>77 D<39FF8007FF3907C000F81570D805E01320EA04F0A21378137C133C7F131F7F
EB0780A2EB03C0EB01E0A2EB00F014F81478143C143E141E140FA2EC07A0EC03E0A21401
A21400000E1460121FD8FFE0132020227EA125>I<B512F0380F803C0007130FEC078015
C0140315E0A615C014071580EC0F00143CEBFFF00180C7FCAE487EEAFFFC1B227EA121>
80 D<B512E0380F803C0007130E6E7E81140381A55D14075D020EC7FC143CEBFFE0EB80
708080141E140E140FA481A3168015C014073A0FC003C10039FFFC01E2C8127C21237EA1
24>82 D<3803F020380C0C60EA1802383001E0EA70000060136012E0A21420A36C1300A2
1278127FEA3FF0EA1FFE6C7E0003138038003FC0EB07E01301EB00F0A214707EA46C1360
A26C13C07E38C8018038C60700EA81FC14247DA21B>I<007FB512F83978078078006014
1800401408A300C0140C00801404A400001400B3A3497E3801FFFE1E227EA123>I<EA1F
E0EA3038EA780C130EEA30071200A313FFEA07C7EA1E07123C1278127000F01308A3130F
EA7817383C2390380FC1E015157E9418>97 D<120E12FE121E120EAB131FEB61C0EB8060
380F0030000E1338143C141C141EA7141C143C1438000F1370380C8060EB41C038083F00
17237FA21B>I<EA01FEEA0703380C0780121C383803000078C7FC127012F0A712700078
134012386C1380380C0100EA0706EA01F812157E9416>I<14E0130F13011300ABEA01F8
EA0704EA0C02EA1C01EA38001278127012F0A7127012781238EA1801EA0C0238070CF038
01F0FE17237EA21B>I<EA01FCEA0707380C0380381C01C01238007813E0EA700012F0B5
FC00F0C7FCA512700078132012386C13406C138038070300EA00FC13157F9416>I<133E
13E33801C780EA0387130748C7FCA9EAFFF80007C7FCB27FEA7FF0112380A20F>I<1470
3803F198380E1E18EA1C0E38380700A200781380A400381300A2EA1C0EEA1E1CEA33F000
20C7FCA212301238EA3FFE381FFFC06C13E0383000F0481330481318A400601330A20038
13E0380E03803803FE0015217F9518>I<120E12FE121E120EABEB1F80EB60C0EB80E038
0F0070A2120EAF38FFE7FF18237FA21B>I<121C123EA3121CC7FCA8120E127E121E120E
B1EAFFC00A227FA10E>I<13E0EA01F0A3EA00E01300A81370EA07F012001370B3A51260
EAF0E013C0EA6180EA3F000C2C83A10F>I<120E12FE121E120EABEB03FCEB01F014C014
80EB02005B5B5B133813F8EA0F1CEA0E1E130E7F1480EB03C0130114E0EB00F014F838FF
E3FE17237FA21A>I<390E1FC07F3AFE60E183803A1E807201C03A0F003C00E0A2000E13
38AF3AFFE3FF8FFE27157F942A>109 D<380E1F8038FE60C0381E80E0380F0070A2120E
AF38FFE7FF18157F941B>I<EA01FCEA0707380C0180381800C0003813E0481370A200F0
1378A700701370007813F0003813E0381C01C0380E038038070700EA01FC15157F9418>
I<EA0E1F38FE61C0380E8060380F0070000E1338143CA2141EA7143CA21438000F137038
0E80E0EB41C0EB3F0090C7FCA9EAFFE0171F7F941B>I<EA0E3CEAFE46EA1E8FEA0F0F13
061300120EAD120FEAFFF010157F9413>114 D<EA0F88EA3078EA601812C01308A212E0
EAF000127FEA3FE0EA0FF0EA01F8EA003CEA801C130CA212C01308EAE018EAD030EA8FC0
0E157E9413>I<1202A41206A3120E121E123EEAFFFCEA0E00AB1304A6EA07081203EA01
F00E1F7F9E13>I<000E137038FE07F0EA1E00000E1370AD14F0A2380601703803827838
00FC7F18157F941B>I<39FF8FF87F393E01E03C001CEBC01814E0000E1410EB02601470
00071420EB04301438D803841340EB8818141CD801C81380EBD00C140E3900F00F00497E
A2EB6006EB400220157F9423>119 D<38FF80FE381E00781430000E1320A26C1340A2EB
80C000031380A23801C100A2EA00E2A31374A21338A31310A25BA35B12F05B12F10043C7
FC123C171F7F941A>121 D E /Fm 20 118 df<B51280A311037F9016>45
D<B612E015FC3907E0007F0003EC0F80ED03C06F7E6F7E16788282A282A21780160717C0
A21603A217E0AB17C0A21607A21780A2160F17005E161E5E5E16F84B5A4B5AED0F800007
023FC7FCB612FC15E02B317CB033>68 D<B51280A23807F0006C5AB3B3A7487EB51280A2
11317DB017>73 D<D8FFF0ED7FF8A200071700D802F815BEA3017CEC013EA26D1402A36D
1404A36D6C1308A36D6C1310A36D6C1320A26D6C1340A36D6C1380A391387C0100A3EC3E
02A36E5AA2EC0F88A3EC07D0A3EC03E0A300076D5AD80F80157FD8FFF891380FFFF8EC00
8035317CB03D>77 D<B612E015FC3907E0003F0003EC0F80ED03C0ED01E016F0ED00F8A2
1678167CA6167816F816F0150116E0ED03C0ED0F80ED3E0090B512F801E0C8FCB3A3487E
B57EA226317DB02D>80 D<90387F80203801FFE03907C07860380F001C001EEB06E04813
0300381301007813001270156012F0A21520A37E1500127C127E7E13C0EA1FF86CB47E6C
13F06C13FCC613FF010F1380010013C0EC1FE01407EC03F01401140015F8A26C1478A57E
15706C14F015E07E6CEB01C000ECEB038000C7EB070038C1F01E38807FFCEB0FF01D337C
B125>83 D<13FE380303C0380C00E00010137080003C133C003E131C141EA21208C7FCA3
EB0FFEEBFC1EEA03E0EA0F80EA1F00123E123C127C481404A3143EA21278007C135E6CEB
8F08390F0307F03903FC03E01E1F7D9E21>97 D<EB1FC0EBF0303801C00C38078002EA0F
00000E130F001E5B5AA2007C1304007890C7FC12F8A91278127C123C15807E000EEB0100
120F380780023801C00C3800F030EB1FC0191F7E9E1D>99 D<15F0141FA214011400AFEB
0FC0EB70303801C00C3803800238070001120E001E13005AA2127C1278A212F8A71278A2
127C123CA27E000E13016C1302380380046C6C487E3A00F030FF80EB1FC021327EB125>
I<EB3F80EBE0E0380380383807003C000E7F121E001C7F123C127C00781480140712F8A2
B6FC00F8C8FCA61278127C123C15807E000EEB0100000F13027E3801C00C3800F030EB1F
C0191F7E9E1D>I<EB07E0EB1C10EB3838EB707C13E01201EBC03800031300ACB512C0A2
3803C000B3A8487EEA7FFFA216327FB114>I<15F090387F03083901C1C41C380380E839
0700700848EB7800001E7FA2003E133EA6001E133CA26C5B6C13706D5A3809C1C0D8087F
C7FC0018C8FCA5121C7E380FFFF86C13FF6C1480390E000FC00018EB01E048EB00F00070
1470481438A500701470A26C14E06CEB01C00007EB07003801C01C38003FE01E2F7E9F21
>I<120FEA1F80A4EA0F00C7FCABEA0780127FA2120F1207B3A6EA0FC0EAFFF8A20D307E
AF12>105 D<260780FEEB1FC03BFF83078060F0903A8C03C180783B0F9001E2003CD807
A013E4DA00F47F01C013F8A2495BB3A2486C486C133F3CFFFC1FFF83FFF0A2341F7E9E38
>109 D<380780FE39FF83078090388C03C0390F9001E0EA07A06E7E13C0A25BB3A2486C
487E3AFFFC1FFF80A2211F7E9E25>I<EB1FC0EBF0783801C01C38070007481480001EEB
03C0001C1301003C14E0A248EB00F0A300F814F8A8007814F0007C1301003C14E0A26CEB
03C0A26CEB07803907800F003801C01C3800F078EB1FC01D1F7E9E21>I<380783E038FF
8418EB887CEA0F90EA07A01438EBC000A35BB3487EEAFFFEA2161F7E9E19>114
D<3801FC10380E0330381800F048137048133012E01410A37E6C1300127EEA3FF06CB4FC
6C13C0000313E038003FF0EB01F813006C133CA2141C7EA27E14186C1338143000CC1360
38C301C03880FE00161F7E9E1A>I<1340A513C0A31201A212031207120F381FFFE0B5FC
3803C000B01410A80001132013E000001340EB78C0EB1F00142C7FAB19>I<D8078013F0
00FF131FA2000F130100071300B31401A300031302EBC0040001497E3A007030FF80EB1F
C0211F7E9E25>I E /Fn 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 Fn(D)25 b(R)g(A)g(F)g(T)225 1041 y
Fm(Do)r(cumen)n(t)20 b(for)i(a)f(Standard)g(Message-P)n(assing)f(In)n
(terface)621 1235 y Fl(Message)c(P)o(assing)h(In)o(terface)e(F)l(orum)
795 1362 y(F)l(ebruary)h(5,)g(1997)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 Fk(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 -100 a Fj(0.1.)34 b(INITIALIZA)l(TION)1302
b Fk(1)1875 81 y Fi(>)16 b Fh(\(Mar\))75 182 y Fg(0.1)59
b(Initialization)75 283 y Fk(If)11 b(a)g(program)f(wishes)i(to)e(use)i
Ff(MPI)e Fk(from)h(m)o(ultiple)i(threads)d(in)i(a)f(thread-complian)o
(t)h(implemen)o(tation,)75 339 y(the)22 b(program)e(m)o(ust)i(call)g
Ff(MPI)p 642 339 14 2 v 16 w(USE)p 741 339 V 17 w(THREADS)h
Fk(from)e(the)h(thread)f(that)g(called)j Ff(MPI)p 1660
339 V 16 w(INIT)d Fk(after)75 396 y Ff(MPI)p 160 396
V 16 w(INIT)14 b Fk(is)i(called)h(and)e(b)q(efore)h(other)f
Ff(MPI)f Fk(calls.)21 b(The)15 b(call)i(is)f(de\014ned)g(b)o(y)75
547 y Ff(MPI)p 160 547 V 16 w(USE)p 259 547 V 17 w(THREADS\(\))75
651 y Fe(int)23 b(MPI)p 245 651 15 2 v 17 w(Use)p 334
651 V 17 w(threads\(\))75 737 y(MPI)p 150 737 V 17 w(USE)p
239 737 V 17 w(THREADS\(IERROR\))75 793 y(INTEGER)g(IERROR)75
880 y(int)g(???????)166 966 y Fk(After)15 b(this)h(call)g(a)f(program)f
(ma)o(y)h(use)g Ff(MPI)g Fk(from)g(m)o(ultiple)i(threads.)j(This)c(is)g
(a)f(lo)q(cal)h(function)75 1023 y(and)h(there)f(is)h(no)f(requiremen)o
(t)h(that)f(all)h Ff(MPI)f Fk(pro)q(cesses)h(call)g(this)g(function.)25
b(This)17 b(routine)f(is)h(only)75 1079 y(required)f(on)f
(thread-complian)o(t)h Ff(MPI)f Fk(implemenations.)189
1172 y Fd(R)n(ationale.)57 b Fk(A)18 b(program)f(is)i(required)g(to)f
(call)h Ff(MPI)p 1145 1172 14 2 v 16 w(USE)p 1244 1172
V 17 w(THREADS)g Fk(at)e(the)h(b)q(eginning)j(to)189
1229 y(allo)o(w)13 b(for)g(thread)g(optimization.)20
b(It)14 b(w)o(as)e(felt)i(that)e(there)i(is)f(an)h(imp)q(ortan)o(t)f
(class)g(of)g(programs)189 1285 y(whic)o(h)18 b(will)g(not)f(use)h
(threads)f(or)f(only)i(one)f(thread)g(uses)h Ff(MPI)p
Fk(.)e(When)h(m)o(ultiple)i(threads)e(are)189 1341 y(not)h(used,)i(the)
e Ff(MPI)g Fk(implemen)o(tation)i(can)f(a)o(v)o(oid)f(the)h(o)o(v)o
(erhead)f(of)g(assuring)h(that)f(all)i Ff(MPI)189 1398
y Fk(calls)g(are)f(re-en)o(tran)o(t.)32 b(T)l(o)20 b(a)o(v)o(oid)f
(starting)g(op)q(erations)g(that)g(are)g(not)h(re-en)o(tran)o(t,)f(the)
h Ff(MPI)189 1454 y Fk(implemen)o(tation)d(needs)h(to)d(kno)o(w)h(at)g
(the)g(start)g(if)g(m)o(ultiple)j(threads)d(will)i(b)q(e)f(used.)24
b(\()p Fd(End)17 b(of)189 1511 y(r)n(ationale.)p Fk(\))166
1604 y(The)10 b(only)h(exception)g(to)f(the)g(rule)h(ab)q(out)f(not)g
(calling)i Ff(MPI)d Fk(functions)i(b)q(efore)f Ff(MPI)p
1595 1604 V 16 w(USE)p 1694 1604 V 17 w(THREADS)75 1660
y Fk(is)17 b(calling)i Ff(MPI)p 353 1660 V 16 w(HAS)p
456 1660 V 17 w(THREADS)p Fk(.)f Ff(MPI)p 793 1660 V
15 w(HAS)p 895 1660 V 18 w(THREADS)g Fk(returns)e(a)h(\015ag)g(whic)o
(h)g(is)h Fc(true)g Fk(if)f(the)g(im-)75 1717 y(plemen)o(tation)f(supp)
q(orts)f(threads.)20 b(The)15 b(call)i(is)e(de\014ned)i(b)o(y)75
1867 y Ff(MPI)p 160 1867 V 16 w(HAS)p 263 1867 V 17 w
(THREADS\(\015ag\))117 1945 y Fb(OUT)108 b Ff(\015ag)518
b Fb(\015ag)14 b(is)f Fc(true)i Fb(if)e(implemenation)e(is)i
(thread-complian)o(t)75 2069 y Fe(int)23 b(MPI)p 245
2069 15 2 v 17 w(Has)p 334 2069 V 17 w(threads\(int)f(*flag\))75
2156 y(MPI)p 150 2156 V 17 w(HAS)p 239 2156 V 17 w(THREADS\(FLAG,)g
(IERROR\))75 2212 y(BOOLEAN)h(FLAG)75 2269 y(INTEGER)g(IERROR)75
2355 y(int)g(???????)166 2441 y Fk(This)13 b(routine)f(is)h(required)g
(on)f(all)h Ff(MPI-2)f Fk(implemenations.)21 b(It)12
b(ma)o(y)f(b)q(e)i(called)h(from)d(an)o(y)h(thread)75
2498 y(after)i Ff(MPI)p 267 2498 14 2 v 16 w(INIT)h Fk(is)g(called.)189
2591 y Fd(R)n(ationale.)38 b Fk(A)13 b(call)h(is)f(used)g(instead)h(of)
e(an)h(attribute)f(so)h(that)f(the)g(only)i(call)g(that)e(an)g
Ff(MPI)g Fk(im-)189 2647 y(plemen)o(tation)f(m)o(ust)e(supp)q(ort)h(b)q
(efore)h(a)f(call)h(to)e Ff(MPI)p 1106 2647 V 16 w(USE)p
1205 2647 V 17 w(THREADS)i Fk(is)g(to)f Ff(MPI)p 1614
2647 V 15 w(HAS)p 1716 2647 V 17 w(THREADS)p Fk(.)189
2704 y(This)15 b(simple)i(function)f(should)g(not)f(ha)o(v)o(e)g
(thread)g(safet)o(y)f(issues.)-32 46 y Fh(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: 2 4
2 3 bop 75 -100 a Fk(2)189 49 y(F)l(urthermore,)13 b(the)g(requiremen)o
(t)i(that)e(other)g(threads)h(can)f(call)i Ff(MPI)p 1415
49 14 2 v 16 w(HAS)p 1518 49 V 17 w(THREADS)g Fk(is)f(so)f(a)189
106 y(library)h(that)f(did)h(not)f(do)h(the)f(call)i(to)e
Ff(MPI)p 946 106 V 15 w(INIT)g Fk(can)h(still)h(c)o(hec)o(k)e(the)h
(situation)g(with)g(threads.)189 162 y(Without)i(this)i(requiremen)o
(t,)g(a)e(library)i(whic)o(h)g(w)o(as)e(called)i(on)f(a)g(di\013eren)o
(t)g(thread)g(than)g(the)189 219 y(one)i(used)h(to)e(call)i
Ff(MPI)p 615 219 V 16 w(INIT)f Fk(could)h(not)e(safely)i(decide)h(what)
d Ff(MPI)h Fk(calls)h(to)e(mak)o(e.)32 b(It)19 b(w)o(as)189
275 y(felt)14 b(to)g(b)q(e)g(reasonable)h(to)e(require)i(implemen)o
(tations)g(to)f(allo)o(w)g(calling)i Ff(MPI)p 1550 275
V 16 w(HAS)p 1653 275 V 17 w(THREADS)189 332 y Fk(ev)o(en)f(if)h(that)e
(thread)h(cannot)g(mak)o(e)g(most)f Ff(MPI)h Fk(calls.)21
b(\()p Fd(End)16 b(of)g(r)n(ationale.)p Fk(\))166 438
y(A)f(program)f(can)i(c)o(hec)o(k)f(whether)g Ff(MPI)p
862 438 V 16 w(USE)p 961 438 V 17 w(THREADS)h Fk(has)f(b)q(een)i
(called)g(b)o(y)e(calling)75 589 y Ff(MPI)p 160 589 V
16 w(OK)p 241 589 V 16 w(THREADS\(\015ag\))117 666 y
Fb(OUT)108 b Ff(\015ag)518 b Fb(\015ag)14 b(is)f Fc(true)i
Fb(if)e Fc(MPI)p 1223 666 13 2 v 15 w(USE)p 1315 666
V 14 w(THREADS)h Fb(has)g(b)q(een)h(called)75 790 y Fe(int)23
b(MPI)p 245 790 15 2 v 17 w(Ok)p 310 790 V 17 w(threads\(int)f(*flag\))
75 877 y(MPI)p 150 877 V 17 w(OK)p 215 877 V 17 w(THREADS\(FLAG,)g
(IERROR\))75 933 y(BOOLEAN)h(FLAG)75 990 y(INTEGER)g(IERROR)75
1076 y(int)g(???????)166 1163 y Fk(If)17 b(this)f(function)i(returns)e
Fc(true)h Fk(then)g(it)g(is)f(ok)g(to)g(use)h Ff(MPI)f
Fk(from)f(an)o(y)h(thread.)24 b(This)17 b(routine)f(is)75
1219 y(only)g(required)g(on)f(thread-complian)o(t)h Ff(MPI)f
Fk(implemenations.)166 1276 y(If)f(the)f Ff(MPI)g Fk(implemen)o(tation)
i(is)f(thread-complian)o(t,)h(a)e(routine)h(ma)o(y)f(need)h(to)f
(determine)i(if)f(the)75 1332 y(thread)j(it)h(is)f(curren)o(tly)h
(executing)g(on)g(is)f(one)h(where)f Ff(MPI)g Fk(comm)o(unication)h(is)
g(allo)o(w)o(ed.)26 b(This)18 b(can)75 1389 y(b)q(e)e(done)f(with)75
1539 y Ff(MPI)p 160 1539 14 2 v 16 w(THREAD)p 358 1539
V 17 w(ENABLED\(\015ag\))117 1617 y Fb(OUT)108 b Ff(\015ag)518
b Fb(\015ag)14 b(is)f Fc(true)i Fb(if)e(this)h(thread)h(can)f(call)f
Fc(MPI)g Fb(functions)75 1741 y Fe(int)23 b(MPI)p 245
1741 15 2 v 17 w(Thread)p 406 1741 V 17 w(enabled\(int)f(*flag\))75
1828 y(MPI)p 150 1828 V 17 w(THREAD)p 311 1828 V 16 w(ENABLED\(FLAG,)g
(IERROR\))75 1884 y(BOOLEAN)h(FLAG)75 1940 y(INTEGER)g(IERROR)75
2027 y(int)g(???????)166 2113 y Fk(If)10 b(this)h(function)g(is)g
(called)g(on)f(an)g Ff(MPI)g Fk(pro)q(cess)g(whic)o(h)h(has)f
(previously)i(called)g Ff(MPI)p 1611 2113 14 2 v 15 w(USE)p
1709 2113 V 17 w(THREADS)p Fk(,)75 2170 y(then)g(it)g(is)g(guaran)o
(teed)g(to)f(return)g Fc(true)i Fk(in)g Ff(\015ag)p Fk(.)18
b(This)13 b(routine)f(is)g(only)h(required)g(on)e(thread-complian)o(t)
75 2226 y Ff(MPI)k Fk(implemenations.)21 b(It)16 b(ma)o(y)e(b)q(e)i
(called)h(from)d(an)o(y)h(thread.)189 2333 y Fd(R)n(ationale.)37
b Fk(As)11 b(with)g Ff(MPI)p 675 2333 V 16 w(HAS)p 778
2333 V 17 w(THREADS)p Fk(,)g(a)g(library)g(ma)o(y)g(call)h
Ff(MPI)p 1459 2333 V 15 w(THREAD)p 1656 2333 V 17 w(ENABLED)189
2389 y Fk(on)h(a)g(thread)g(that)f(is)i(not)f(allo)o(w)o(ed)h(to)e
(call)j(other)e Ff(MPI)f Fk(calls)i(to)f(c)o(hec)o(k)h(if)f(this)h(is)g
(the)f(case.)19 b(This)189 2445 y(call)13 b(is)f(more)f(complicated)i
(than)f Ff(MPI)p 858 2445 V 16 w(HAS)p 961 2445 V 17
w(THREADS)h Fk(since)g(a)e(call)i(to)e Ff(MPI)p 1554
2445 V 16 w(USE)p 1653 2445 V 17 w(THREADS)189 2502 y
Fk(can)g(c)o(hange)g(its)g(outcome.)19 b(Ho)o(w)o(ev)o(er,)10
b(a)h(user)g(is)h(required)g(to)e(call)j Ff(MPI)p 1422
2502 V 16 w(USE)p 1521 2502 V 17 w(THREADS)f Fk(b)q(efore)189
2558 y(an)o(y)20 b(other)f Ff(MPI)h Fk(calls)h(and)g(therefore)f(the)g
(result)h(returned)f(b)o(y)h Ff(MPI)p 1459 2558 V 15
w(THREAD)p 1656 2558 V 17 w(ENABLED)189 2615 y Fk(should)16
b(b)q(e)g(stable)f(when)h(prop)q(erly)g(used.)k(\()p
Fd(End)c(of)g(r)n(ationale.)p Fk(\))1967 46 y Fh(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(0.1.)34 b(INITIALIZA)l(TION)1302
b Fk(3)189 49 y Fd(A)n(dvic)n(e)17 b(to)j(users.)56 b
Fk(If)18 b(one)g(is)g(in)h(a)f(m)o(ulti-threaded)h(en)o(vironmen)o(t,)g
(a)e(program)g(should)i(call)189 106 y Ff(MPI)p 274 106
14 2 v 15 w(USE)p 372 106 V 17 w(THREADS)k Fk(b)q(efore)f(calling)h(an)
o(y)f(other)f(routines)h(or)f(libraries)i(since)g(these)f(ma)o(y)189
162 y(call)17 b Ff(MPI)p 358 162 V 16 w(THREAD)p 556
162 V 17 w(ENABLED)g Fk(or)f(other)g Ff(MPI)g Fk(calls.)25
b(The)17 b(only)g(safe)f(w)o(a)o(y)g(is)h(to)f(mak)o(e)g(sure)189
219 y Ff(MPI)p 274 219 V 15 w(USE)p 372 219 V 17 w(THREADS)j
Fk(is)g(called)g(righ)o(t)f(after)f Ff(MPI)p 1100 219
V 16 w(INIT)g Fk(and)i(b)q(efore)f(an)o(y)g(thread)f(can)h(mak)o(e)189
275 y(another)g Ff(MPI)g Fk(call.)31 b(In)19 b(some)f(en)o(vironmen)o
(ts)h(and)f(situations)h(it)g(ma)o(y)f(b)q(e)h(necessary)g(to)f(use)189
332 y(lo)q(c)o(ks)d(to)g(satisfy)g(this)g(requiremen)o(t.)21
b(\()p Fd(End)15 b(of)i(advic)n(e)f(to)g(users.)p Fk(\))189
428 y Fd(A)n(dvic)n(e)j(to)h(users.)65 b Fk(It)19 b(is)h(p)q(ossible)h
(to)e(use)g(an)g Ff(MPI)g Fk(implemen)o(tation)i(that)d(is)i(not)f
(thread-)189 485 y(complian)o(t)f(in)g(a)f(program)f(that)h(uses)h
(threads.)26 b(It)17 b(can)h(b)q(e)g(v)o(ery)f(di\016cult)i(or)e(imp)q
(ossible)j(for)189 541 y Ff(MPI)e Fk(to)h(detect)g(calls)h(from)f(m)o
(ultiple)i(threads)e(in)h(this)g(situation.)32 b(F)l(urthermore,)19
b(a)g(thread)189 598 y(cannot)e(determine)h(if)g(it)f(is)h(allo)o(w)o
(ed)g(to)e(mak)o(e)h Ff(MPI)g Fk(calls,)h(i.e.,)g(it)f(is)h(the)g
(thread)f(that)f(called)189 654 y Ff(MPI)p 274 654 V
15 w(INIT)p Fk(,)j(since)j(it)e(cannot)g(mak)o(e)f(calls)i(to)e
Ff(MPI)p 1102 654 V 16 w(THREAD)p 1300 654 V 17 w(ENABLED)p
Fk(.)h(Users)g(should)h(b)q(e)189 711 y(careful)16 b(not)g(to)f
(violate)i(the)f Ff(MPI)f Fk(rules)i(in)g(this)f(situation.)22
b(This)17 b(can)f(happ)q(en)h(inadv)o(erten)o(tly)189
767 y(b)o(y)e(calling)i(a)e(library)h(on)f(a)g(di\013eren)o(t)g(thread)
g(that)g(uses)g Ff(MPI)p Fk(.)f(\()p Fd(End)i(of)g(advic)n(e)g(to)h
(users.)p Fk(\))189 864 y Fd(R)n(ationale.)42 b Fk(Allo)o(wing)17
b(calls)g(to)e Ff(MPI)p 866 864 V 16 w(THREAD)p 1064
864 V 17 w(ENABLED)h Fk(in)h Ff(MPI)e Fk(implemen)o(tations)i(that)189
921 y(are)i(not)h(thread-complian)o(t)h(w)o(as)e(felt)h(to)f(b)q(e)i
(to)q(o)e(di\016cult)j(and)e(going)g(against)g(the)g(idea)g(of)189
977 y(allo)o(wing)c(implemen)o(tations)g(to)f(a)o(v)o(oid)g(ha)o(ving)g
(to)g(deal)h(with)f(threads.)20 b(\()p Fd(End)15 b(of)i(r)n(ationale.)p
Fk(\))166 1074 y(A)e(program)f(m)o(ust)h(call)h Ff(MPI)p
678 1074 V 16 w(FINALIZE)e Fk(from)h(the)g(same)g(thread)g(that)f
(called)j Ff(MPI)p 1655 1074 V 16 w(INIT)p Fk(.)189 1171
y Fd(R)n(ationale.)39 b Fk(This)16 b(requiremen)o(t)f(simpli\014es)i
(implemen)o(tations)f(and)f(did)h(not)e(seem)h(to)f(imp)q(ose)189
1227 y(a)h(signi\014can)o(t)h(restriction)f(on)g(users.)20
b(\()p Fd(End)c(of)g(r)n(ationale.)p Fk(\))189 1324 y
Fd(A)n(dvic)n(e)21 b(to)h(users.)79 b Fk(It)21 b(can)h(b)q(e)g(v)o(ery)
g(hard)f(or)g(imp)q(ossible)j(for)d(an)h Ff(MPI)f Fk(implemen)o(tation)
189 1381 y(that)12 b(is)i(thread-complian)o(t)g(to)f(detect)g(when)h(m)
o(ultiple)h(threads)e(mak)o(e)g Ff(MPI)g Fk(calls)h(ev)o(en)g(though)
189 1437 y Ff(MPI)p 274 1437 V 15 w(USE)p 372 1437 V
17 w(THREADS)i Fk(has)e(not)g(b)q(een)i(called.)21 b(Users)15
b(should)g(b)q(e)h(careful)f(to)f(use)g(the)h(c)o(hec)o(king)189
1494 y(mec)o(hanisms)g(pro)o(vided)h(to)f(a)o(v)o(oid)g(this)h
(situation.)k(\()p Fd(End)15 b(of)i(advic)n(e)f(to)h(users.)p
Fk(\))75 1590 y Fa(Example)h(0.1)k Fd(A)o(t)c(statup,)h(a)f(pr)n(o)n
(gr)n(am)g(may)h(wish)e(to)i(che)n(ck)e(if)h(it)g(c)n(an)f(use)h(thr)n
(e)n(ads)g(and)g(if)f(so)h(use)75 1647 y(them.)j(That)c(c)n(an)e(b)n(e)
h(ac)n(c)n(omplishe)n(d)g(by:)75 1744 y Fe(main\(\))75
1800 y({)123 1857 y(int)23 b(flag;)123 1970 y(MPI_Init\(\);)123
2026 y(MPI_Has_threads\(flag\);)123 2083 y(if)g(\(flag\))g({)170
2139 y(/*)h(tell)f(MPI)h(want)f(to)h(use)f(threads)g(*/)170
2195 y(MPI_Use_threads\(\);)170 2252 y(/*)h(run)f(threaded)g(version)g
(of)h(code)f(-)h(not)f(shown)g(*/)123 2308 y(else)g({)170
2365 y(/*)h(no)g(MPI)f(threads,)g(use)g(single)g(threaded)g(version)g
(of)h(code)f(-)h(not)f(shown)g(*/)123 2421 y(})123 2534
y(MPI_Finalize\(\);)123 2647 y(return)g(0;)75 2704 y(})-32
46 y Fh(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 Fk(4)75 49 y Fa(Example)18 b(0.2)k
Fd(A)c(libr)n(ary)f(may)g(ne)n(e)n(d)g(to)g(che)n(ck)g(the)h(status)f
(of)h Ff(MPI)f Fd(at)g(the)h(start)f(of)h(the)g(libr)n(ary)f(to)75
106 y(de)n(cide)f(how)h(to)g(pr)n(o)n(c)n(e)n(e)n(d.)i(A)d(example)h
(of)f(this)g(would)h(b)n(e:)75 212 y Fe(int)23 b(library\(\))75
268 y({)123 325 y(int)g(flag;)123 438 y(MPI_Initialized\(flag\);)123
494 y(if)g(\(flag\))g({)170 551 y(/*)h(MPI)f(initialized,)g(see)g(if)h
(finalized)e(*/)170 607 y(MPI_Finalized\(flag\);)170
664 y(if)i(\(flag\))f({)218 720 y(/*)h(error)f(here)g(because)g(MPI)h
(has)f(finished)g(and)g(cannot)g(restart)g(*/)218 777
y(return)g(99;)170 833 y(})170 889 y(/*)h(see)f(if)h(MPI)g
(implementation)d(is)j(multithreaded)e(*/)170 946 y
(MPI_Has_threads\(flag\);)170 1002 y(if)i(\(flag\))f({)218
1059 y(/*)h(see)f(if)h(this)f(thread)g(enabled)g(for)h(MPI)f(*/)218
1115 y(MPI_Thread_enabled\(flag\);)218 1172 y(if)h(\(flag\))f({)266
1228 y(/*)g(see)h(if)g(multi-threaded)d(MPI)j(is)g(active)f(*/)266
1285 y(MPI_Ok_threads\(flag\);)266 1341 y(if)g(\(flag\))h({)314
1398 y(/*)f(do)h(multi-threaded)e(version)h(of)g(algorithm)g(with)385
1454 y(multi-threaded)f(MPI)i(calls.)47 b(Routine)22
b(not)i(shown.)f(*/)314 1510 y(return)g(0;)266 1567 y(})266
1623 y(else)g({)314 1680 y(/*)g(only)h(this)f(thread)g(can)g(make)h
(MPI)f(calls.)47 b(Do)24 b(version)f(of)385 1736 y(algorithm)g(where)g
(only)g(one)h(thread)f(makes)g(MPI)g(calls.)385 1793
y(If)h(this)f(is)h(a)f(threaded)g(environment)g(the)g(library)g(can)g
(still)385 1849 y(use)h(threads)f(as)g(long)g(as)h(only)f(this)h
(thread)f(calls)g(MPI.)385 1906 y(Routine)g(not)h(shown.)f(*/)314
1962 y(return)g(0;)266 2019 y(})218 2075 y(})218 2131
y(else)g({)266 2188 y(/*)g(Error)h(here.)47 b(This)23
b(thread)g(can't)g(use)h(MPI.)f(*/)266 2244 y(return)g(99;)218
2301 y(})170 2357 y(})170 2414 y(else)h({)218 2470 y(/*)g(use)f(single)
g(threaded)g(version)g(of)h(algorithm)e(because)h(this)g(MPI)290
2527 y(is)g(not)h(multi-threaded.)45 b(Similar)23 b(to)h(case)f(where)g
(it)h(does)f(have)290 2583 y(threads)g(but)g(not)h(active.)46
b(Routine)23 b(not)h(shown.)f(*/)218 2640 y(return)g(0;)170
2696 y(})1967 46 y Fh(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(0.1.)34 b(INITIALIZA)l(TION)1302
b Fk(5)123 49 y Fe(})123 106 y(else)23 b({)170 162 y(/*)h(MPI)f(not)h
(initialized.)46 b(This)23 b(is)h(an)g(error)f(to)g(this)h(library.)242
219 y(Some)f(libraries)g(might)g(choose)g(to)h(start)f(MPI)g(and)h
(check)f(if)h(threads)242 275 y(are)f(allowed)g(and)h(start)f(them)g
(with)h(MPI_Use_Threads)d(*/)170 332 y(return)i(99;)123
388 y(})75 444 y(})1875 498 y Fi(?)16 b Fh(\(Mar\))-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
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF