%!PS-Adobe-2.0 %%Creator: dvips 5.528 Copyright 1986, 1994 Radical Eye Software %%Title: temp.dvi %%CreationDate: Tue May 30 10:21:32 1995 %%Pages: 47 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%EndComments %DVIPSCommandLine: dvips -o temp.ps temp %DVIPSParameters: dpi=300, comments removed %DVIPSSource: TeX output 1995.05.30:1021 %%BeginProcSet: tex.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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]{ ch-image}imagemask restore}B /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 showpage userdict /eop-hook known{eop-hook}if}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 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 %%BeginProcSet: special.pro TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{ /CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{ 10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale true def end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{} N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{itransform lineto} }{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp {pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray} N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict maxlength dict begin /magscale false def normalscale currentpoint TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts /psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial {CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath }N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{ end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin} N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{ /SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet TeXDict begin 40258431 52099146 1000 300 300 (/tmp_mnt/Net/charlotte/ftp/pub/mpi/mpi-1.jun95/temp.dvi) @start /Fa 8 118 df<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE 003E0E00700E00E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03 F010127D9116>101 D<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF 00FFFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0 0001C0003FFE007FFF003FFE0011197F9816>I108 D114 D<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7 E00F127D9116>I<0300000700000700000700000700007FFF00FFFF00FFFF0007000007 000007000007000007000007000007000007010007038007038007038007870003FE0001 FC0000F80011177F9616>I<7E1F80FE3F807E1F800E03800E03800E03800E03800E0380 0E03800E03800E03800E03800E03800E03800E0F800FFFF007FBF803E3F01512809116> I E /Fb 2 82 df<01FFE00FFFF818E0FC20E03E60E01EC0E00E00E00E00E00C00C00C00 C01801C01001C02001804001818003BE000378000300000700000600000600000E00000C 00000C000018000017187F9619>80 D<001FC0007FE00181F00200F804007808003C1800 3C30001C30001C60001C60001CE00018E00018E00030E00030F00060F808407C30803FE1 001F02000004000038003FE0067FE00C0FFC0800FFF0001FC0171B7C961D>I E /Fc 2 24 df22 D<0038003800380038003800380038003800380038003800380038003800380038003800 380038003800380038003800380038003800380038003800380038003800380038003800 380038003800380038003800380038003800380038003800380038003800380038003800 380038003800380038003800380038003800380038003800380038003800380038003800 380038003800380038003800380038003800380038003800380038003800380038003800 38003800380038003800380038FFF8FFF8FFF80D63808118>I E /Fd 2 111 df<0300038003000000000000000000000000001C002400460046008C000C 0018001800180031003100320032001C0009177F960C>105 D<383C0044C60047020046 02008E06000C06000C06000C0C00180C00180C40181840181880300880300F00120E7F8D 15>110 D E /Fe 1 50 df<03000700FF00070007000700070007000700070007000700 070007000700070007000700070007007FF00C157E9412>49 D E /Ff 13 117 df<70F8F8F87005057C840D>58 D<70F8FCFC74040404080810102040060E 7C840D>I62 D<00F1800389C00707800E03801C03803C0380380700780700780700 780700F00E00F00E00F00E00F00E10F01C20F01C20703C20705C40308C400F078014147E 9318>97 D<0000780003F80000700000700000700000700000E00000E00000E00000E000 01C00001C000F1C00389C00707800E03801C03803C0380380700780700780700780700F0 0E00F00E00F00E00F00E10F01C20F01C20703C20705C40308C400F078015207E9F18> 100 D<007C01C207010E011C013C013802780C7BF07C00F000F000F000F0007000700170 023004183807C010147E9315>I<00007C0000CE00019E00039E00030C00070000070000 0700000700000E00000E00000E0000FFF0000E00000E00001C00001C00001C00001C0000 1C0000380000380000380000380000380000700000700000700000700000700000E00000 E00000E00000E00000C00001C000318000798000F300006200003C000017297E9F16>I< 00E001E001E000C000000000000000000000000000000E00130023804380438043808700 070007000E000E001C001C001C20384038403840388019000E000B1F7E9E10>105 D<01E0000FE00001C00001C00001C00001C0000380000380000380000380000700000700 000701E00706100E08700E10F00E20F00E40601C80001D00001E00001FC0003870003838 00383800381C20703840703840703840701880E01880600F0014207E9F18>107 D<03C01FC0038003800380038007000700070007000E000E000E000E001C001C001C001C 0038003800380038007000700070007100E200E200E200E200640038000A207E9F0E>I< 1E1E0023210023C38043C7804387804383008700000700000700000700000E00000E0000 0E00000E00001C00001C00001C00001C000038000018000011147E9315>114 D<007C018203010603060706060E00078007F803FC01FE001F00077007F006F006E00440 0820301FC010147E9315>I<00C000E001C001C001C001C003800380FFF8038007000700 070007000E000E000E000E001C001C001C001C10382038203820384018800F000D1C7F9B 10>I E /Fg 86 126 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000000070F8 F8F870051C779B18>33 D<4010E038F078E038E038E038E038E038E038E038E038E038E0 3860300D0E7B9C18>I<030600078F00078F00078F00078F00078F00078F007FFFC0FFFF E0FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E007FFFC0FFFFE0FFFFE07FFF C01E3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18>I<3803007C07807C 0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E007C3C007C3C00387C0000780000 780000F80000F00001F00001E00001E00003E00003C00003C00007C0000783800787C00F 87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07C018038013247E9F18>37 D<01C00007E0000FF0000E70001C38001C38001C38001C38001C73F01C73F01CE3F00FE3 800FC7000F87000F07001F0E003F0E007B8E0073DC00E1DC00E0F800E0F800E07070E078 7070FC707FFFE03FCFE00F03C0141C7F9B18>I<387C7C7E3E0E0E0E1C1C38F8F0C0070E 789B18>I<007000F001E003C007800F001E001C00380038007000700070007000E000E0 00E000E000E000E000E000E0007000700070007000380038001C001E000F00078003C001 F000F000700C24799F18>I<6000F00078003C001E000F000780038001C001C000E000E0 00E000E00070007000700070007000700070007000E000E000E000E001C001C003800780 0F001E003C007800F00060000C247C9F18>I<01C00001C00001C00001C000C1C180F1C7 80F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C780C1C18001C00001C0 0001C00001C00011147D9718>I<00600000F00000F00000F00000F00000F00000F00000 F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F00000F00000F00000 600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>I<7FFF00FFFF80FFFF80 7FFF0011047D8F18>I<3078FCFC78300606778518>I<000300000780000780000F80000F 00001F00001E00001E00003E00003C00007C0000780000780000F80000F00001F00001E0 0003E00003C00003C00007C0000780000F80000F00000F00001F00001E00003E00003C00 003C00007C0000780000F80000F00000F0000060000011247D9F18>I<01F00007FC000F FE001F1F001C07003803807803C07001C07001C0E000E0E000E0E000E0E000E0E000E0E0 00E0E000E0E000E0E000E0F001E07001C07001C07803C03803801C07001F1F000FFE0007 FC0001F000131C7E9B18>I<01800380038007800F803F80FF80FB804380038003800380 03800380038003800380038003800380038003800380038003807FFCFFFE7FFC0F1C7B9B 18>I<03F0000FFE003FFF007C0F807003C0E001C0F000E0F000E06000E00000E00000E0 0001C00001C00003C0000780000F00001E00003C0000780000F00001E00007C0000F8000 1E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<07F8001FFE003FFF007807807803 C07801C03001C00001C00003C0000380000F0003FF0003FE0003FF000007800003C00001 C00000E00000E00000E0F000E0F000E0F001C0F003C07C07803FFF001FFE0003F800131C 7E9B18>I<001F00003F0000770000770000E70001E70001C7000387000787000707000E 07001E07003C0700380700780700F00700FFFFF8FFFFF8FFFFF800070000070000070000 0700000700000700007FF000FFF8007FF0151C7F9B18>I<1FFF803FFF803FFF80380000 3800003800003800003800003800003800003800003BF8003FFE003FFF003C07801803C0 0001C00000E00000E06000E0F000E0F000E0E001C07003C07C0F803FFF001FFC0003F000 131C7E9B18>I<007E0001FF0007FF800F83C01E03C01C03C03801803800007000007000 00E1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0F000E07000E07000E07000 E03801C03C03C01E07800FFF0007FE0001F800131C7E9B18>II<03F8000FFE001FFF003E0F803803807001C07001C07001C0 7001C03803803C07801FFF0007FC000FFE001F1F003C07807001C0F001E0E000E0E000E0 E000E0E000E07001C07803C03E0F801FFF000FFE0003F800131C7E9B18>I<03F0000FFC 001FFE003C0F00780780700380E001C0E001C0E001C0E001E0E001E07001E07803E03C0F E01FFFE00FFEE003F0E00000E00001C00001C00001C0300380780780780F00783E003FFC 001FF00007C000131C7E9B18>I<3078FCFC783000000000000000003078FCFC78300614 779318>I<183C7E7E3C180000000000000000183C7E7E3E1E0E1C3C78F060071A789318> I<000300000780001F80003F00007E0001FC0003F00007E0001FC0003F00007E0000FC00 00FC00007E00003F00001FC00007E00003F00001FC00007E00003F00001F800007800003 0011187D9918>I<7FFFC0FFFFE0FFFFE0FFFFE0000000000000000000000000FFFFE0FF FFE0FFFFE07FFFC0130C7E9318>I<600000F00000FC00007E00003F00001FC00007E000 03F00001FC00007E00003F00001F80001F80003F00007E0001FC0003F00007E0001FC000 3F00007E0000FC0000F0000060000011187D9918>I<00700000F80000F80000D80000D8 0001DC0001DC0001DC00018C00038E00038E00038E00038E000306000707000707000707 000707000FFF800FFF800FFF800E03800E03801C01C01C01C07F07F0FF8FF87F07F0151C 7F9B18>65 DI<00F8E003FEE007FFE00F07 E01E03E03C01E03800E07000E07000E0700000E00000E00000E00000E00000E00000E000 00E00000E000007000007000E07000E03800E03C00E01E01C00F07C007FF8003FE0000F8 00131C7E9B18>I<7FF800FFFE007FFF001C0F801C03C01C03C01C01E01C00E01C00E01C 00F01C00701C00701C00701C00701C00701C00701C00701C00701C00F01C00E01C00E01C 01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F9B18>III<01F1C003FDC00F FFC01F0FC01C03C03803C03801C07001C07001C0700000E00000E00000E00000E00000E0 0000E00FF0E01FF0E00FF07001C07001C07003C03803C03803C01C07C01F0FC00FFFC003 FDC001F1C0141C7E9B18>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C0 1C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C01C01C01C01C0 1C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>I<7FFF00FFFF 807FFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0 0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF 00FFFF807FFF00111C7D9B18>I<7F07F0FF87F87F07F01C03C01C07801C07001C0E001C 1E001C3C001C38001C70001CF0001DF0001DF0001FB8001FB8001F1C001E1C001C0E001C 0E001C07001C07001C03801C03801C01C07F03F0FF87F87F03F0151C7F9B18>75 D<7FE000FFE0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00 000E00000E00000E00000E00000E00000E00000E00000E00000E00700E00700E00700E00 700E00707FFFF0FFFFF07FFFF0141C7F9B18>II<7E07F0FF0FF87F07F01D81C01D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C0 1CE1C01C61C01C71C01C71C01C31C01C39C01C39C01C39C01C19C01C19C01C1DC01C0DC0 1C0DC01C0DC07F07C0FF87C07F03C0151C7F9B18>I<0FF8003FFE007FFF00780F007007 00F00780E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E003 80E00380E00380E00380E00380E00380F00780700700780F007FFF003FFE000FF800111C 7D9B18>II<7FF800FFFE007FFF001C0F80 1C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FFE001C0F00 1C07001C03801C03801C03801C03801C03801C039C1C039C1C039C7F01F8FF81F87F00F0 161C7F9B18>82 D<03F3801FFF803FFF807C0F80700780E00380E00380E00380E0000070 00007800003F00001FF00007FE0000FF00000F800003C00001C00000E00000E06000E0E0 00E0E001E0F001C0F80780FFFF80FFFE00E7F800131C7E9B18>I<7FFFF8FFFFF8FFFFF8 E07038E07038E07038E07038007000007000007000007000007000007000007000007000 00700000700000700000700000700000700000700000700000700000700007FF0007FF00 07FF00151C7F9B18>IIII<7F8FE07F9F E07F8FE00E07000F0700070E00078E00039C0003DC0001F80001F80000F00000F0000070 0000F00000F80001F80001DC00039E00038E00070F000707000E07800E03801E03C07F07 F0FF8FF87F07F0151C7F9B18>II<3FFFE0 7FFFE07FFFE07001C07003C0700780700700000F00001E00001C00003C00007800007000 00F00001E00001C00003C0000780000700000F00001E00E01C00E03C00E07800E07000E0 FFFFE0FFFFE0FFFFE0131C7E9B18>II<600000F00000F00000F8000078 00007C00003C00003C00003E00001E00001F00000F00000F00000F800007800007C00003 C00003C00003E00001E00001F00000F00000F800007800007800007C00003C00003E0000 1E00001E00001F00000F00000F8000078000078000030011247D9F18>I I<7FFF00FFFF80FFFF807FFF0011047D7F18>95 D<061E3E387070E0E0E0F8FC7C7C3807 0E789E18>I<1FE0003FF8007FFC00781E00300E0000070000070000FF0007FF001FFF00 7F0700780700E00700E00700E00700F00F00781F003FFFF01FFBF007E1F014147D9318> I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1 E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F00700F80 E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF001FFF803E078038030070 0000700000E00000E00000E00000E00000E00000E000007000007001C03801C03E03C01F FF8007FF0001FC0012147D9318>I<001F80003F80001F80000380000380000380000380 00038003E3800FFB801FFF803C1F80380F80700780700380E00380E00380E00380E00380 E00380E00380700780700780380F803C1F801FFFF00FFBF803E3F0151C7E9B18>I<01F0 0007FC001FFE003E0F00380780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0E000 007000007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80007FC000 FFE000E1E001C0C001C00001C00001C0007FFFC0FFFFC0FFFFC001C00001C00001C00001 C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF007F FF007FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E301C0E00380700380700380700 3807003807001C0E001E1E001FFC001FF80039E0003800001C00001FFE001FFFC03FFFE0 7801F0700070E00038E00038E00038E000387800F07E03F01FFFC00FFF8001FC00151F7F 9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFF C00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00 E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03800007C00007C00007C00003 80000000000000000000000000007FC000FFC0007FC00001C00001C00001C00001C00001 C00001C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF80FF FF00111D7C9C18>I107 D<7FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E00000E00000E0 0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 0000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7CE0E000FFFBF8007FFFF8001F1F1C00 1E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00 1C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F001914819318>I<7E 3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E 00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE00 1FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C0 7803C03C07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FC1 E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F00700F80 E00FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E00000E00007FC0 00FFE0007FC000151E809318>I<01E38007FB801FFF803E1F80380F80700780700780E0 0380E00380E00380E00380E00380E00380700780700780380F803C1F801FFF800FFB8003 E380000380000380000380000380000380000380000380003FF8003FF8003FF8151E7E93 18>I<7F87E0FF9FF07FBFF803F87803F03003E00003C00003C000038000038000038000 0380000380000380000380000380000380007FFE00FFFF007FFE0015147F9318>I<07F7 003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC0003FE00001F006007 80E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<01800003800003 80000380000380007FFFC0FFFFC0FFFFC003800003800003800003800003800003800003 80000380000380000380400380E00380E00380E001C1C001FFC000FF80003E0013197F98 18>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 0E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC1714809318>I<7F8F F0FF8FF87F8FF01E03C00E03800E03800E0380070700070700070700038E00038E00038E 00038E0001DC0001DC0001DC0000F80000F80000700015147F9318>II<7F8FF07F9FF07F8FF0070700 078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E00038E00070700 0F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E01C00E03800E03 80070380070700070700038700038600038E0001CE0001CE0000CC0000CC0000DC000078 0000780000780000700000700000700000F00000E00079E0007BC0007F80003F00001E00 00151E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00001E00003C0000 F80001F00003C0000780000F00701E00703C0070780070FFFFF0FFFFF0FFFFF014147F93 18>I<0007E0001FE0007FE000780000E00000E00000E00000E00000E00000E00000E000 00E00000E00000E00000E00001E0007FC000FF8000FF80007FC00001E00000E00000E000 00E00000E00000E00000E00000E00000E00000E00000E00000E000007800007FE0001FE0 0007E013247E9F18>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0600424769F18>I<7C0000FF0000FFC00003C00000E00000E00000 E00000E00000E00000E00000E00000E00000E00000E00000E00000F000007FC0003FE000 3FE0007FC000F00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 E00000E00003C000FFC000FF00007C000013247E9F18>I E /Fh 47 123 df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0 000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0000E01C0007F87FC001A1D809C18>11 D<007E0001C1800301800703C00E03C0 0E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8 151D809C17>I<6060F0F0F8F86868080808080808101010102020404080800D0C7F9C15> 34 D<004000800100020006000C000C0018001800300030007000600060006000E000E0 00E000E000E000E000E000E000E000E000E000E000600060006000700030003000180018 000C000C00060002000100008000400A2A7D9E10>40 D<800040002000100018000C000C 000600060003000300038001800180018001C001C001C001C001C001C001C001C001C001 C001C001C0018001800180038003000300060006000C000C00180010002000400080000A 2A7E9E10>I<60F0F0701010101020204080040C7C830C>44 DI< 60F0F06004047C830C>I<030007003F00C7000700070007000700070007000700070007 0007000700070007000700070007000700070007000700070007000F80FFF80D1C7C9B15 >49 D<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C003800 70006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<60F0F0600000 000000000000000060F0F0701010101020204080041A7C910C>59 D<7FFFFFC0FFFFFFE0000000000000000000000000000000000000000000000000000000 0000000000FFFFFFE07FFFFFC01B0C7E8F20>61 D<001F808000E0618001801980070007 800E0003801C0003801C00018038000180780000807800008070000080F0000000F00000 00F0000000F0000000F0000000F0000000F0000000F00000007000008078000080780000 80380000801C0001001C0001000E000200070004000180080000E03000001FC000191E7E 9C1E>67 DIII<001F808000E0618001801980070007800E00 03801C0003801C00018038000180780000807800008070000080F0000000F0000000F000 0000F0000000F0000000F0000000F000FFF0F0000F807000078078000780780007803800 07801C0007801C0007800E00078007000B800180118000E06080001F80001C1E7E9C21> I73 D78 D<003F800000E0E0000380380007001C000E000E001C0007 003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001 E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007 801C0007000E000E0007001C000380380000E0E000003F80001B1E7E9C20>I<7FFFFFC0 700F01C0600F00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000 000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F800003FFFC00 1B1C7F9B1E>84 DI<08081010202040404040808080 808080B0B0F8F8787830300D0C7A9C15>92 D<1FC000307000783800781C00301C00001C 00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F87 0012127E9115>97 DI<07E00C3018 78307870306000E000E000E000E000E000E00060007004300418080C3007C00E127E9112 >I<003F0000070000070000070000070000070000070000070000070000070000070003 E7000C1700180F00300700700700600700E00700E00700E00700E00700E00700E0070060 0700700700300700180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006 E006FFFEE000E000E000E00060007002300218040C1803E00F127F9112>I<00F8018C07 1E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C3880 181800381C00381C00381C00381C001818001C38000C300013C000100000300000180000 1FF8001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E0007F800 121C7F9215>II<18003C003C0018 000000000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C 001C001C001C001C001C001C00FF80091D7F9C0C>I107 DIII<03F0000E1C00180600300300700380600180E0 01C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F00012 127F9115>II114 D<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608F C00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C001C001C001C00 1C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>IIII<7F8FF00F03800F030007020003840001C80001D8 0000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF81512 809116>II<7FFC70386038407040F040E041C003C00380 07000F040E041C043C0C380870087038FFF80E127F9112>I E /Fi 48 122 df<01F1C003F1C007F1C00701C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C0FFF1C0FFF1C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C0121D809C16>13 D<018001C0018001806186F99F7DBE1FF807E007E01FF87DBEF99F61860180018001C001 8010127E9E15>42 D45 D<03C00FF01FF83C3C381C700E700E70 0EE007E007E007E007E007E007E007E007E007E007E007E007E007700E700E700E381C3C 3C1FF80FF007E0101D7E9B15>48 D<010007003F00FF00C7000700070007000700070007 00070007000700070007000700070007000700070007000700070007000700FFF8FFF80D 1C7C9B15>I<07C01FF03878701C601EE00EC00F400F400700070007000F000E001E001C 003C007800F001E001C0038007000E001C0038007000FFFFFFFF101C7E9B15>I<7FFFFF C0FFFFFFE000000000000000000000000000000000000000000000000000000000000000 00FFFFFFE07FFFFFC01B0C7E8F20>61 D<001C0000003E0000003E0000002E0000006700 000067000000E7800000C7800000C3800001C3C0000183C0000181C0000381E0000381E0 000700F0000700F0000600F0000E0078000FFFF8000FFFF8001C003C001C003C0018003C 0038001E0038001E0070001F0070000F0070000F00E0000780191D7F9C1C>65 D<003FC000FFF003C0F00780300F00001E00003C00003C0000780000780000780000F000 00F00000F00000F00000F00000F00000F00000F00000F000007800007800007800003C00 003C00001E00000F000807801803C07800FFF0003F80151F7D9D1B>67 DIII<003F8001FF F003C0F80780380F00181E00003C00003C0000780000780000780000F00000F00000F000 00F00000F00000F00000F007F8F007F8F000387800387800387800383C00383C00381E00 380F003807803803C0F801FFF0003F80151F7D9D1C>I73 D75 DIII<003F000001FFE00003FFF00007C0F8000F807C001E001E003E001F003C000F 00780007807800078078000780F00003C0F00003C0F00003C0F00003C0F00003C0F00003 C0F00003C0F00003C0F80007C078000780780007807C000F803C000F003E001F001F003E 000F807C0007C0F80003FFF00001FFE000003F00001A1F7E9D1F>II<003F000001FFE00003FFF00007C0F8000F807C001F00 3E003E001F003C000F00780007807800078078000780F00003C0F00003C0F00003C0F000 03C0F00003C0F00003C0F00003C0F00003C0F00003C07800078078000780780E07803C0F 0F003E079F001E03DE000F83FC0007C1F80003FFF00001FFF800003F780000003C000000 3E0000001F0000000F801A237E9D1F>II<03F8000FFE001C0F00380700700300600000E00000E00000E00000E00000F00000 7800007F00003FE0001FFC0007FE0001FF00001F800007800003C00003C00001C00001C0 0001C00001C0C00180E00380F007007C0E001FFC0007F000121F7E9D17>IIIII 89 D<0FC03FF07FF87038401C001C001C00FC0FFC3FFC781CE01CE01CE01CF07C7FFC7F DC3F1C0E127E9114>97 D<07E00FF81FFC3C1C70047000E000E000E000E000E000E00070 0070043C1C1FFC0FF807E00E127E9112>99 D<000E000E000E000E000E000E000E000E00 0E000E000E0F8E1FEE3FFE7C3E700E700EE00EE00EE00EE00EE00EE00EF00E701E7C3E3F FE1FEE0F8E0F1D7E9C15>I<07C01FE03FF078787018601CFFFCFFFCFFFCE000E000E000 700070043C1C3FFC1FF807E00E127E9112>I<00FC01FC03FC07000E000E000E000E000E 000E000E00FFE0FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E1D809C0D>I<03C3C00FFFC01FFFC01C3800381C00381C00381C00381C00 381C001C38001FF8001FF0003BC0003800003800001FFC001FFF003FFF80700780E001C0 E001C0E001C0F003C07C0F803FFF001FFE0007F800121B7F9115>I105 D107 D III<03F0000FFC001FFE003C0F00780780700380E001C0 E001C0E001C0E001C0E001C0F003C07003807807803C0F001FFE000FFC0003F00012127F 9115>II114 D<1FC03FF07FF0F030E000E000F0007F003FC01FE000F0003800388038F078FFF07FE01F C00D127F9110>I<1C001C001C001C001C001C00FFE0FFE01C001C001C001C001C001C00 1C001C001C001C001C001C001C201FF00FF007C00C187F970F>IIII121 D E /Fj 44 122 df<00003FE00000E01000018038000380780003007800070030000700 000007000000070000000E0000000E0000000E000000FFFFE0000E00E0001C01C0001C01 C0001C01C0001C01C0001C03800038038000380380003803800038070000380700007007 000070071000700E2000700E2000700E2000E00E2000E0064000E0038000E0000000C000 0001C0000001C000003180000079800000F3000000620000003C0000001D29829F1A>12 D<0E1F3F3F1D0102020404081020C0080E779F0E>39 D<1C3C3C3C3C0404080810202040 80060E7D840E>44 D<7FF0FFE07FE00C037D8A10>I<70F8F8F0E005057B840E>I<000060 0000E00000E00000E00001C00001C00001C0000380000380000300000700000700000600 000E00000C0000180000180000300000300000630000C700008700010700030700060E00 040E00080E003F8E00607C00801FC0001C00001C00003800003800003800003800007000 00700000600013277E9D17>52 D<001F0000718000C0C00180C00380E00700E00F00E00F 01E01E01E01E01E01E01E01E01C01C03C01C03C01C03C01C07C01C0F800C0F8006378003 C700000F00000E00000E00001C00601C00F03800F07000E0600080C0004380003E000013 1F7B9D17>57 D<00000200000006000000060000000E0000001E0000001E0000003F0000 002F0000004F0000004F0000008F0000010F0000010F0000020F0000020F0000040F0000 0C0F0000080F0000100F0000100F0000200F80003FFF800040078000C007800080078001 000780010007800200078002000780060007801E000F80FF807FF81D207E9F22>65 D<0000FE0200078186001C004C0038003C0060003C00C0001C01C0001803800018070000 180F0000181E0000101E0000103C0000003C000000780000007800000078000000780000 00F0000000F0000000F0000000F0000000F0000080700000807000008070000100380001 0038000200180004000C001800060020000381C00000FE00001F217A9F21>67 D<01FFFF80001E00E0001E0070001E0038001E001C003C001C003C000E003C000E003C00 0E0078000E0078000E0078000E0078000E00F0001E00F0001E00F0001E00F0001E01E000 3C01E0003C01E0003C01E0007803C0007003C0007003C000E003C001C0078001C0078003 8007800E0007801C000F007000FFFFC0001F1F7D9E22>I<01FFFFFE001E001C001E000C 001E0004001E0004003C0004003C0004003C0004003C0004007808080078080000780800 0078180000F0300000FFF00000F0300000F0300001E0200001E0200001E0200001E00010 03C0002003C0002003C0004003C00040078000800780018007800100078007000F001F00 FFFFFE001F1F7D9E1F>I<01FFFFFC001E0038001E0018001E0008001E0008003C000800 3C0008003C0008003C00080078001000780800007808000078080000F0100000F0300000 FFF00000F0300001E0200001E0200001E0200001E0200003C0000003C0000003C0000003 C00000078000000780000007800000078000000F800000FFF800001E1F7D9E1E>I<01FF F0001F00001E00001E00001E00003C00003C00003C00003C000078000078000078000078 0000F00000F00000F00000F00001E00001E00001E00001E00003C00003C00003C00003C0 000780000780000780000780000F8000FFF800141F7D9E12>73 D<01FFF03FE0001F000F 80001E000E00001E000800001E001000003C002000003C004000003C010000003C020000 007804000000780800000078100000007830000000F0F0000000F1F8000000F278000000 F478000001E83C000001F03C000001E03C000001E01E000003C01E000003C01E000003C0 0F000003C00F000007800F00000780078000078007800007800780000F8007C000FFF03F F800231F7D9E23>75 D<01FFF800001F0000001E0000001E0000001E0000003C0000003C 0000003C0000003C00000078000000780000007800000078000000F0000000F0000000F0 000000F0000001E0000001E0000001E0000001E0008003C0010003C0010003C0030003C0 0200078006000780060007800C0007801C000F007800FFFFF800191F7D9E1D>I<01FE00 007FC0001E0000FC00001E0000F80000170001780000170001780000270002F000002700 04F00000270004F00000270008F00000470009E00000470011E00000470021E000004700 21E00000870043C00000838043C00000838083C00000838083C000010381078000010382 0780000103820780000103840780000203840F00000203880F00000203900F0000020390 0F00000401E01E00000401E01E00000401C01E00000C01801E00001C01803E0000FF8103 FFC0002A1F7D9E29>I<01FF007FE0001F000F00001F0004000017800400001780040000 278008000023C008000023C008000023C008000041E010000041E010000041F010000040 F010000080F0200000807820000080782000008078200001003C400001003C400001003C 400001001E400002001E800002001E800002000F800002000F800004000F000004000700 0004000700000C000700001C00020000FF80020000231F7D9E22>I<0001FC0000070700 001C01C0003000E000E0006001C000700380007007800038070000380E0000381E000038 1C0000383C0000383C00003878000078780000787800007878000078F00000F0F00000F0 F00000E0F00001E0F00001C0F00003C0700003807000070078000F0038001E0038003C00 1C0070000E00E0000783800001FC00001D217A9F23>I<01FFFF80001E00E0001E007000 1E0038001E003C003C003C003C003C003C003C003C003C0078007800780078007800F000 7800E000F003C000F00F0000FFFC0000F0000001E0000001E0000001E0000001E0000003 C0000003C0000003C0000003C00000078000000780000007800000078000000F800000FF F000001E1F7D9E1F>I<01FFFF00001E03C0001E00E0001E0070001E0078003C0078003C 0078003C0078003C0078007800F0007800F0007801E0007801C000F0070000F01E0000FF F00000F0380001E01C0001E01E0001E00E0001E00F0003C01E0003C01E0003C01E0003C0 1E0007803C0007803C0807803C0807803C100F801C10FFF00C20000007C01D207D9E21> 82 D<0007E040001C18C0003005800060038000C0038001C00180018001000380010003 800100038001000380000003C0000003C0000003F8000001FF800001FFE000007FF00000 1FF0000001F8000000780000007800000038000000380020003800200038002000300060 007000600060006000E0007000C000E8038000C606000081F800001A217D9F1A>I<7FFC 1FF807C003C00780010007800100078001000F0002000F0002000F0002000F0002001E00 04001E0004001E0004001E0004003C0008003C0008003C0008003C000800780010007800 10007800100078001000F0002000F0002000F0002000F0004000F0004000700080007001 000030020000380400000C18000007E000001D20779E22>85 D<00F1800389C00707800E 03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E20F01C40F0 1C40703C40705C40308C800F070013147C9317>97 D<07803F8007000700070007000E00 0E000E000E001C001C001CF01D0C3A0E3C0E380F380F700F700F700F700FE01EE01EE01E E01CE03CE038607060E031C01F0010207B9F15>I<007E0001C1000300800E07801E0780 1C07003C0200780000780000780000F00000F00000F00000F00000F00000700100700200 30040018380007C00011147C9315>I<0000780003F80000700000700000700000700000 E00000E00000E00000E00001C00001C000F1C00389C00707800E03801C03803C03803807 00780700780700780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C 800F070015207C9F17>I<007C01C207010E011C013C013802780C7BF07C00F000F000F0 00F0007000700170023804183807C010147C9315>I<00007800019C00033C00033C0007 18000700000700000E00000E00000E00000E00000E0001FFE0001C00001C00001C00001C 0000380000380000380000380000380000700000700000700000700000700000700000E0 0000E00000E00000E00000C00001C00001C0000180003180007B0000F300006600003C00 001629829F0E>I<003C6000E27001C1E00380E00700E00F00E00E01C01E01C01E01C01E 01C03C03803C03803C03803C03803C07003C07001C0F001C17000C2E0003CE00000E0000 0E00001C00001C00301C00783800F0700060E0003F8000141D7E9315>I<01E0000FE000 01C00001C00001C00001C000038000038000038000038000070000070000071E00076300 0E81800F01C00E01C00E01C01C03801C03801C03801C0380380700380700380700380E10 700E20700C20701C20700C40E00CC060070014207D9F17>I<00C001E001E001C0000000 00000000000000000000000E003300230043804300470087000E000E000E001C001C001C 003840388030807080310033001C000B1F7C9E0E>I<03C01FC003800380038003800700 0700070007000E000E000E000E001C001C001C001C003800380038003800700070007000 7100E200E200E200E200640038000A207C9F0C>108 D<1C0F80F0002630C31800474064 0C004780680E004700700E004700700E008E00E01C000E00E01C000E00E01C000E00E01C 001C01C038001C01C038001C01C038001C01C0708038038071003803806100380380E100 38038062007007006600300300380021147C9325>I<1C0F802630C04740604780604700 704700708E00E00E00E00E00E00E00E01C01C01C01C01C01C01C03843803883803083807 083803107003303001C016147C931A>I<007C0001C3000301800E01C01E01C01C01E03C 01E07801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00700E0030180018 700007C00013147C9317>I<01C1E002621804741C04781C04701E04701E08E01E00E01E 00E01E00E01E01C03C01C03C01C03C01C0380380780380700380E003C1C0072380071E00 0700000700000E00000E00000E00000E00001C00001C0000FFC000171D809317>I<00F0 400388C00705800E03801C03803C0380380700780700780700780700F00E00F00E00F00E 00F00E00F01C00F01C00703C00705C0030B8000F38000038000038000070000070000070 0000700000E00000E0000FFE00121D7C9315>I<1C1E0026610047838047878047078047 03008E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038 000070000030000011147C9313>I<00FC030206010C030C070C060C000F800FF007F803 FC003E000E700EF00CF00CE008401020601F8010147D9313>I<018001C0038003800380 038007000700FFF007000E000E000E000E001C001C001C001C0038003800380038207040 70407080708031001E000C1C7C9B0F>I<0E00C03300E02301C04381C04301C04701C087 03800E03800E03800E03801C07001C07001C07001C07101C0E20180E20180E201C1E200C 264007C38014147C9318>I<0E03803307802307C04383C04301C04700C08700800E0080 0E00800E00801C01001C01001C01001C02001C02001C04001C04001C08000E300003C000 12147C9315>I<0E00C1C03300E3C02301C3E04381C1E04301C0E04701C060870380400E 0380400E0380400E0380401C0700801C0700801C0700801C0701001C0701001C0602001C 0F02000C0F04000E13080003E1F0001B147C931E>I<0E00C03300E02301C04381C04301 C04701C08703800E03800E03800E03801C07001C07001C07001C07001C0E00180E00180E 001C1E000C3C0007DC00001C00001C00003800F03800F07000E06000C0C0004380003E00 00131D7C9316>121 D E /Fk 33 122 df<000FF07F00007FF9FF8000F83FC7C001E07F 8FC003E07F0FC007C07F0FC007C03F078007C01F000007C01F000007C01F000007C01F00 0007C01F0000FFFFFFF800FFFFFFF80007C01F000007C01F000007C01F000007C01F0000 07C01F000007C01F000007C01F000007C01F000007C01F000007C01F000007C01F000007 C01F000007C01F000007C01F000007C01F000007C01F00003FF8FFF0003FF8FFF0002220 809F1F>11 D45 D<387CFEFEFE7C3807077C860F>I< 7FFFFFFF80FFFFFFFFC0FFFFFFFFC0000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000FFFFFFFFC0FFFFFFFFC07FFF FFFF80220F7D9229>61 D<07F8001FFE00381F80780F80FC0FC0FC0FC0FC0FC0780FC030 1F80001F00003E00007C0000700000E00000E00000C00000C00000C00000C00000C00000 C00000000000000000000000000001C00003E00007F00007F00007F00003E00001C00012 207D9F19>63 D<0000E000000000E000000001F000000001F000000001F000000003F800 000003F800000006FC00000006FC0000000EFE0000000C7E0000000C7E000000183F0000 00183F000000303F800000301F800000701FC00000600FC00000600FC00000C007E00000 FFFFE00001FFFFF000018003F000018003F000030001F800030001F800060001FC000600 00FC000E0000FE00FFE00FFFE0FFE00FFFE0231F7E9E28>65 D<0007FC02003FFF0E00FE 03DE03F000FE07E0003E0FC0001E1F80001E3F00000E3F00000E7F0000067E0000067E00 0006FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000007E00 00067F0000063F0000063F00000C1F80000C0FC0001807E0003803F0007000FE01C0003F FF800007FC001F1F7D9E26>67 D<0007FC0200003FFF0E0000FE03DE0003F000FE0007E0 003E000FC0001E001F80001E003F00000E003F00000E007F000006007E000006007E0000 0600FE00000000FE00000000FE00000000FE00000000FE00000000FE003FFFE0FE003FFF E07E00007E007E00007E007F00007E003F00007E003F00007E001F80007E000FC0007E00 07E0007E0003F000FE0000FE01FE00003FFF8E000007FC0600231F7D9E29>71 D80 D<001FF80000FFFF0001F81F 8007E007E00FC003F01F8001F81F8001F83F0000FC7F0000FE7F0000FE7E00007EFE0000 7FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007F7E0000 7E7E00007E7F0000FE3F0000FC3F87C1FC1F8FE1F80FD833F007F83FE001F81F8000FFFF 00001FFE0300001E0300001F0700000FFF00000FFF000007FE000007FE000003FC000001 F8000000F020287D9E27>I86 D<07FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03E03C03 E07C03E0F803E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E17147F9319>97 DI<01FE0007 FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC0000FC00007C 00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<0007F80007F80000F8 0000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F80FFEF81F83F8 3E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87C00F8 7E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF800F83C01E01E03E00 F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00003E00181E00 180F807007FFE000FF8015147F9318>I<01FC3C07FFFE0F079E1E03DE3E03E03E03E03E 03E03E03E03E03E01E03C00F07800FFF0009FC001800001800001C00001FFF800FFFF007 FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C78003C3F01F80FFFE001FF0017 1E7F931A>103 DI<1C003E007F007F007F003E001C00000000000000000000000000FF00FF001F001F 001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B217E A00E>I<0038007C00FE00FE00FE007C003800000000000000000000000001FE01FE003E 003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E 003E303E783EFC3CFC7C78783FF01FC00F2A83A010>IIIII<01FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC 007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F83E00F81F83F007FFC001FF0017 147F931A>II114 D<0FE63FFE701E600EE006E0 06F800FFC07FF83FFC1FFE03FE001FC007C007E007F006F81EFFFCC7F010147E9315>I< 01800180018003800380038007800F803F80FFFCFFFC0F800F800F800F800F800F800F80 0F800F800F800F860F860F860F860F8607CC03F801F00F1D7F9C14>III120 DI E /Fl 33 91 df<1C3E7E7E3A0202040408081020C0070E7D840D>44 DI<3078F8787005057C840D>I<000C001C00FC0F380038003800 380038003800700070007000700070007000E000E000E000E000E000E001C001C001C001 C001C001C0038003C0FFFE0F1E7C9D17>49 D<003F8000C1E00100F00200780400780400 780F007C0F807C0F807C0F00780600780000F80000F00001E00001C0000380000700000E 00001C0000380000600000C0000180000300200600200800401000403FFFC07FFF80FFFF 80161E7E9D17>I<007F000183C00201E00400F00700F00F00F00F01F00F01F00001E000 01E00003C0000380000700000E0000F800000E000007000007800007C00003C00007C030 07C07807C0F807C0F807C0F00780800F00400E00201C0018780007E000141F7D9D17>I< 0000600000600000E00001C00003C00005C0000DC00009C00011C000238000438000C380 008380010380020380040700080700180700100700200700400700FFFFF0000E00000E00 000E00000E00000E00001C00001E0001FFE0141E7E9D17>I<01803001FFE003FFC003FF 0003FC00020000020000020000040000040000040000047C000587000603800C01800801 C00001C00001E00001E00001E00001E07003C0F803C0F003C0E00380800780400700400E 00201C0018700007C000141F7D9D17>I<000F8000704000C0200180E00301E00701E00E 00C01E00001C00003C000038000078F800790E007A07007C0300F80380F80380F003C0F0 03C0F003C0F003C0F00780E00780E00780E00700E00F00600E00701C0030180018700007 C000131F7C9D17>I<2000003FFFE07FFFC07FFF80400100C00200800200800400000800 0010000020000040000040000080000180000300000300000700000600000E00000E0000 1E00001C00001C00003C00003C00003C0000780000780000780000300000131F799D17> I<003F0000C1C00100600200600400300C00300C00300C00300C00600E00600F80C00FC1 8007F60003FC0001FC0001FF00063F800C0F801007C03003C06001C06000C0C000C0C000 C0C000C0C00080C0010060030030040018180007E000141F7D9D17>I<00001000000018 00000038000000380000007800000078000000FC000001BC0000013C0000033C0000023C 0000063C0000043E0000081E0000081E0000101E0000101E0000201E0000200F0000400F 0000400F0000FFFF0000800F0001000F8001000780020007800200078004000780040007 800C0007C03E0007C0FF807FFC1E207E9F22>65 D<07FFFF00007C01C0003C01E0003C00 F0007800F8007800F8007800F8007800F8007800F8007800F000F001F000F001E000F003 C000F00F8000FFFE0000F00F0001E007C001E003C001E003E001E001E001E001E001E001 E003C001E003C003E003C003E003C003C003C007C003C00F8007800F0007803E00FFFFF0 001D1F7E9E20>I<0001F808000E061800380138007000F801E0007803C0007007800030 078000300F0000301F0000301E0000303E0000203C0000007C0000007C0000007C000000 7C000000F8000000F8000000F8000000F8000000F8000000780000407800008078000080 3C0000803C0001001C0002000E00020006000C000300100001C0E000003F00001D217B9F 21>I<07FFFF00007C01E0003C00F0003C00780078003C0078003C0078001E0078001E00 78001E0078001F00F0001F00F0001F00F0001F00F0001F00F0001F00F0001F01E0001E01 E0003E01E0003E01E0003E01E0003C01E0007C03C0007803C000F003C000F003C001E003 C003C003C0078007800F0007803C00FFFFE000201F7E9E23>I<07FFFFF8007C0078003C 0038003C001800780018007800080078000800780008007800080078080800F0100000F0 100000F0100000F0300000FFF00000F0700001E0200001E0200001E0200001E0200001E0 000801E0001003C0001003C0001003C0002003C0002003C0006003C000C0078001C00780 07C0FFFFFF801D1F7E9E1F>I<07FFFFF8007C0078003C0038003C001800780018007800 080078000800780008007800080078000800F0100000F0100000F0100000F0300000F070 0000FFF00001E0600001E0200001E0200001E0200001E0200001E0000003C0000003C000 0003C0000003C0000003C0000003C000000780000007C00000FFFE00001D1F7E9E1E>I< 0001FC04000F030C003C009C0070007C00E0003C01C0003803800018078000180F000018 1F0000181E0000183E0000103C0000007C0000007C0000007C0000007C000000F8000000 F8000000F8007FFCF80003E0780001E0780001E0780003C0780003C03C0003C03C0003C0 1C0003C00E0007C007000B800380118001E06080003F80001E217B9F24>I<07FFC7FFC0 007C00F800003C007800003C007800007800F000007800F000007800F000007800F00000 7800F000007800F00000F001E00000F001E00000F001E00000F001E00000FFFFE00000F0 01E00001E003C00001E003C00001E003C00001E003C00001E003C00001E003C00003C007 800003C007800003C007800003C007800003C007800003C007800007800F000007C00F80 00FFF8FFF800221F7E9E22>I<07FFE0007C00003C00003C000078000078000078000078 0000780000780000F00000F00000F00000F00000F00000F00001E00001E00001E00001E0 0001E00001E00003C00003C00003C00003C00003C00003C00007800007C000FFFC00131F 7F9E10>I<07FFF000007E0000003C0000003C0000007800000078000000780000007800 00007800000078000000F0000000F0000000F0000000F0000000F0000000F0000001E000 0001E0000001E0000001E0000001E0008001E0010003C0010003C0010003C0030003C002 0003C0060003C0060007801E0007807C00FFFFFC00191F7E9E1C>76 D<07FC0000FFC0007C0000F800003C00017800003C00017800004E0002F000004E0002F0 00004E0004F000004E0004F000004E0008F000004E0008F00000870011E00000870011E0 0000870021E00000870021E00000870041E00000838041E00001038083C00001038083C0 0001038103C00001038203C0000101C203C0000101C403C0000201C40780000201C80780 000201C80780000201D00780000200F00780000600E00780000600E00F00000F00C00F80 00FFE0C1FFF8002A1F7E9E2A>I<07FC01FFC0003E003E00003E001800003E001800004F 001000004F001000004780100000478010000043C010000043C010000083C020000081E0 20000081E020000080F020000080F020000080782000010078400001007C400001003C40 0001003C400001001E400001001E400002000F800002000F800002000F80000200078000 0200078000060003800006000300000F00010000FFE0010000221F7E9E22>I<0003F800 001E0E000038070000E0038001C001C003C001E0078000E00F0000F00F0000F01E0000F0 1E0000F83E0000F83C0000F87C0000F87C0000F87C0000F87C0000F8F80001F0F80001F0 F80001F0F80001F0F80003E0780003E0780003C0780007C07C0007803C000F003C001E00 1E001C000E0038000700F00003C3C00000FE00001D217B9F23>I<07FFFF00007C03C000 3C01E0003C00F0007800F0007800F8007800F8007800F8007800F8007800F000F001F000 F001E000F003C000F0078000F00F0000FFF80001E0000001E0000001E0000001E0000001 E0000001E0000003C0000003C0000003C0000003C0000003C0000003C000000780000007 C00000FFFC00001D1F7E9E1F>I<07FFFC00007C0700003C03C0003C01E0007801E00078 01F0007801F0007801F0007801F0007801E000F003E000F003C000F0078000F00F0000F0 3C0000FFF00001E0300001E0380001E01C0001E01C0001E01C0001E01E0003C03E0003C0 3E0003C03E0003C03E0003C03E0003C03E0207803E0407C01F04FFFC0F18000003E01F20 7E9E21>82 D<003F040060CC01803C03801C03001C0700180600080E00080E00080E0008 0E00000F00000F80000FE00007FE0003FF8001FFC0007FE00007E00001E00000E00000F0 0000F04000E04000E04000E04000E06000C0600180E00380F80300C60C0081F80016217D 9F19>I<3FFFFFF03C0780F03007803060078030400F0010400F0010C00F0010800F0010 800F0010800F0010001E0000001E0000001E0000001E0000001E0000001E0000003C0000 003C0000003C0000003C0000003C0000003C000000780000007800000078000000780000 007800000078000000F0000001F800007FFFE0001C1F7A9E21>III<03FFC0FFC0007F007E00003E003800001E003000001E002000000F 004000000F008000000F81000000078200000007C600000003C400000003E800000001F0 00000001F000000000F000000000F800000000F8000000017C000000023C000000043C00 00000C1E000000081E000000101F000000200F000000400F800000C0078000008007C000 010003C000070003E0001F8007E000FFE01FFE00221F7F9E22>88 DI<03FFFFC003E0078003800780 07000F0006001E0004003C000C003C00080078000800F0000801F0000001E0000003C000 0007800000078000000F0000001E0000003C0000003C00000078000000F0010001E00100 01E0020003C00200078002000F8006000F0004001E000C003C001C007C003C007800F800 FFFFF8001A1F7D9E1C>I E /Fm 10 58 df<1F00318060C04040C060C060C060C060C060 C060C060C060404060C031801F000B107F8F0F>48 D<0C003C00CC000C000C000C000C00 0C000C000C000C000C000C000C000C00FF8009107E8F0F>I<1F00618040C08060C06000 60006000C00180030006000C00102020207FC0FFC00B107F8F0F>I<1F00218060C060C0 00C0008001800F00008000400060C060C060804060801F000B107F8F0F>I<0300030007 000F000B001300330023004300C300FFE003000300030003001FE00B107F8F0F>I<2080 3F002C002000200020002F0030802040006000600060C06080C061801F000B107F8F0F> I<0780184030C060C06000C000CF00F080E040C060C060C060406060C030801F000B107F 8F0F>I<40007FE07FC08080808001000200040004000C00080008001800180018001800 18000B117E900F>I<1F00318060C060C060C071803F000F00338061C0C060C060C06040 4060801F000B107F8F0F>I<1F00318060C0C040C060C060C06040E021E01E6000600040 60C0608043003E000B107F8F0F>I E /Fn 6 82 df0 D<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003 C010127D9317>15 D62 D<00040000000C0000000C0000000C00 00000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C00 00000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C00 00000C0000000C0000000C0000000C0000FFFFFFE0FFFFFFE01B1C7C9B23>I<003FFFC0 01FFFFF0071E03FC081E00FE181E003E701E001F701E001FC01E000F001C000F001C000F 003C000E003C000E003C001C0038001C0038003800780030007800400070008000700300 00F01C0000F3F00000E7800000E0000001E0000001C0000001C0000003C0000003800000 0380000007000000070000000E0000000C00000020217F9E20>80 D<0000FE000007FF80001C1FC0002007E000C003F0018001F0030000F0060000F80E0000 F81C0000781C00007838000078380000787000007870000078F0000070F0000070F00000 F0F00000E0F00000E0F80001C0F80001C07C0003807E0083003F0707001FFC0E000FE00C 0000001000000020000000C000000F00001FFC000C7FF8001807FF0030007FF060000FFF C00000FF001E257B9F25>I E /Fo 47 122 df<000078007C7800FC7801FC7803C00003 8000078000078000078000078000078000078000078000078000FFFC78FFFC78FFFC7807 807807807807807807807807807807807807807807807807807807807807807807807807 8078078078078078078078078078078078078078152480A31A>12 D<0000C018000000C018000000C018000001803000000180300000018030000001803000 00030060000003006000000300600000030060000003006000000600C000000600C00000 0600C000000600C000000C018000FFFFFFFFC0FFFFFFFFC0001803000000180300000018 03000000180300000030060000003006000000300600000030060000FFFFFFFFC0FFFFFF FFC000600C000000C018000000C018000000C018000000C0180000018030000001803000 000180300000018030000003006000000300600000030060000003006000000600C00000 0600C000000600C00000222D7DA229>35 D<787878781830306060E0050A7CA20E>39 D<007000E001C003C0078007000F000E001E001C003C003C003800780078007800780070 00F000F000F000F000F000F000F000F000F000F000F000F000F000F00070007800780078 00780038003C003C001C001E000E000F000700078003C001C000E000700C327DA413>I< E000700038003C001E000E000F0007000780038003C003C001C001E001E001E001E000E0 00F000F000F000F000F000F000F000F000F000F000F000F000F000F000E001E001E001E0 01E001C003C003C00380078007000F000E001E003C0038007000E0000C327DA413>I45 DI<00C001C007C0FFC0FFC0FBC0 03C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C0 03C003C003C003C003C003C003C0FFFFFFFFFFFF10227CA118>49 D<03F0000FFC001FFE003C1F003007807007C06003C0E003E0C001E04001E04001E00001 E00001E00001E00003C00003C0000780000780000F00001E00003C0000780000F00001E0 0001C0000380000700000E00001C0000380000700000FFFFE0FFFFE0FFFFE013227EA118 >I<01F00007FC001FFF003E0F003807807003C02003C02003C00003C00003C00003C000 0780000780000F00001E0003FC0003F80003FE00000F000007800003C00003C00001E000 01E00001E00001E00001E08001E0C003C0E003C07007803C0F801FFF000FFC0003F00013 237EA118>I<001F00001F00002F00002F00006F0000EF0000CF0001CF0001CF00038F00 038F00078F00070F000F0F000E0F001E0F003C0F003C0F00780F00780F00F00F00FFFFF8 FFFFF8FFFFF8000F00000F00000F00000F00000F00000F00000F00000F00000F0015217F A018>I<3FFF803FFF803FFF803C00003C00003C00003C00003C00003C00003C00003C00 003C00003CF8003FFE003FFF003F0F803E07803C03C03803C00001E00001E00001E00001 E00001E00001E00001E04003C04003C0E003C07007807C1F003FFE000FFC0003F0001322 7EA018>I<007E0001FF0003FF0007C1000F00001E00001E00003C00003C000078000078 000078F800F1FE00F7FF00FF0F80FC0780F803C0F803C0F801C0F001E0F001E0F001E0F0 01E0F001E07001E07001E07801E07803C03803C03C03801C07801F0F000FFE0007FC0001 F00013237EA118>II<01F00007FC000FFE001E0F003C07803C07807803C07803C07803C07803 C07803C03803803C07801E0F000F1E0007FC0003F8000FFE001E0F003C07807803C07803 C0F001E0F001E0F001E0F001E0F001E0F001E07803C07803C03C07803E0F801FFF0007FC 0001F00013237EA118>I<001F0000001F0000003F8000003F8000003B8000007BC00000 73C0000071C00000F1E00000F1E00000E0E00001E0F00001E0F00001C0F00003C0780003 C078000380780007803C0007803C0007003C000F001E000F001E000FFFFE001FFFFF001F FFFF001C000F003C0007803C00078038000780780003C0780003C0700003C0F00001E0F0 0001E0E00001E01B237EA220>65 DI<000FF000007FFC0000FFFF0001F01F0003 C00700078000000F0000001E0000003E0000003C0000003C000000780000007800000078 000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0 0000007800000078000000780000003C0000003C0000003E0000001E0000000F00000007 80008003C0038001F00F8000FFFF00007FFC00000FF00019257DA31F>II II<000FF000003FFE0000FFFF8001F80F8003E00380078000000F0000001E0000 001E0000003C0000003C000000780000007800000078000000F0000000F0000000F00000 00F0000000F0000000F0000000F000FFC0F000FFC0F000FFC0780003C0780003C0780003 C03C0003C03C0003C01E0003C01E0003C00F0003C0078003C003E003C001F807C000FFFF C0003FFF00000FF8001A257DA321>I73 D76 DII<001FC000007FF00001FFFC0003F07E0007C01F000F800F801F0007C0 1E0003C03C0001E03C0001E0780000F0780000F0780000F070000070F0000078F0000078 F0000078F0000078F0000078F0000078F0000078F0000078F0000078780000F0780000F0 780000F07C0001F03C0001E03E0003E01E0003C01F0007C00F800F8007C01F0003F07E00 01FFFC00007FF000001FC0001D257DA324>II<00FE0003FFC007FFE00F81E01E 00603C00003C00007800007800007800007800007800007C00003C00003F00001FC0000F FC0007FF0001FF80003FC00007E00001F00000F00000F800007800007800007800007800 0078000078C000F0E000F0F801E07E07C03FFF800FFF0001FC0015257EA31B>83 D<07E01FF83FFC381E201E000F000F000F000F00FF07FF1FFF3E0F780FF00FF00FF00FF0 0FF83F7FFF3FEF1F8F10167E9517>97 DI<01FC0007FF000FFF801F03803C0180 780000780000700000F00000F00000F00000F00000F00000F00000780000780000780000 3C00401F03C00FFFC007FF8001FC0012167E9516>I<0003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C00003C00003C00003C003E3C00FFBC01FFFC03F0F C03C07C07803C07803C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C07803 C07803C03C07C03E0FC01FFFC00FFBC003E3C012237EA219>I<03F00007FC001FFE003E 0F003C0780780380780380F001C0FFFFC0FFFFC0FFFFC0F00000F00000F0000070000078 00007800003C00801F07800FFF8007FF0001F80012167E9516>I<003F00FF01FF03C003 8007800780078007800780078007800780FFF8FFF8FFF807800780078007800780078007 80078007800780078007800780078007800780078007800780102380A20F>I105 D108 DII<01FC0007FF000FFF801F07C03C01E07800F07800F070 0070F00078F00078F00078F00078F00078F000787800F07800F07C01F03E03E01F07C00F FF8007FF0001FC0015167F9518>II114 D<07F01FFC3FFE3C0E78 06780078007C003F003FF01FF80FFC01FE001F000F000F000FC00FF81EFFFE3FFC0FF010 167F9513>I<0F000F000F000F000F000F00FFF8FFF8FFF80F000F000F000F000F000F00 0F000F000F000F000F000F000F000F000F080F1C07FC07F803E00E1C7F9B12>II<7801F07C01E03E03C01E07C00F0780078F0007DE0003FC00 01FC0000F80000700000F80001FC0003DC00039E00078F000F07801E07801E03C03C01E0 7800F0F800F81516809516>120 DI E /Fp 64 123 df<00F8F001F8F003F8F00780F00700F00F00F0 0F00F00F00F00F00F00F00F00F00F00F00F0FFF8F0FFF8F0FFF8F00F00F00F00F00F00F0 0F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F0 0F00F00F00F01420809F18>13 D<783C783C783C783C180C3018301860306030E0700E0A 7F9F17>34 D<007000E001C00380078007000E001E001E003C003C003C00780078007800 78007000F000F000F000F000F000F000F000F000F000F000F000F0007000780078007800 78003C003C003C001E001E000E0007000780038001C000E000700C2E7EA112>40 DI<018001C001800180 C183E187F99F7DBE1FF807E007E01FF87DBEF99FE187C1830180018001C0018010147DA1 17>I<787878781830306060E0050A7D830D>44 DII<03F00007F8001FFE001E1E003C0F00380700780780780780700380F0 03C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F0 03C0F003C07807807807807807803807003C0F001E1E001FFE000FFC0003F00012207E9E 17>48 D<00C001C00FC0FFC0FFC0F3C003C003C003C003C003C003C003C003C003C003C0 03C003C003C003C003C003C003C003C003C003C003C003C0FFFEFFFEFFFE0F1F7C9E17> I<07F0000FFC001FFE00383F00700F00600780E00780E003C04003C04003C00003C00003 C00003C0000780000780000F00000E00001C00003C0000780000E00001C0000380000700 000E00001C0000380000700000FFFFC0FFFFC0FFFFC0121F7E9E17>I<03F0000FFC001F FE003C1F00780F00300780200780000780000780000780000F00000F00003E0003FC0003 F80003FC00001E00000F000007800003800003C00003C00003C00003C08003C0C003C0C0 0780700F807C1F003FFE000FFC0003F00012207E9E17>I58 D61 D<001F0000001F0000003F8000003B8000003B8000007BC0000073C0000071C00000F1E0 0000E1E00000E0E00001E0F00001E0F00001C0F00003C0780003C078000380780007803C 0007803C0007003C000FFFFE000FFFFE000FFFFE001E000F001E000F003C000F803C0007 803C000780780007C0780003C0780003C0F00003E01B207F9F1E>65 DI<001FC000 FFF801FFFC03E03C07800C0F00001E00003E00003C00007C0000780000780000780000F0 0000F00000F00000F00000F00000F00000F00000F000007800007800007800007C00003C 00003E00001E00000F000207800E03E03E01FFFC00FFF0001FC017227DA01D>IIII<001FE000FFF801FFFE03E03E07800E0F0000 1E00003E00003C00007C0000780000780000780000F00000F00000F00000F00000F00000 F00000F003FEF003FE7803FE78001E78001E7C001E3C001E3E001E1E001E0F001E07801E 03E03E01FFFE00FFF8001FC017227DA01E>I73 D75 DIII< 003F000000FFC00003FFF00007E1F8000F807C001F003E001E001E003C000F003C000F00 780007807800078078000780F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0 F00003C0F00003C0F00003C0F80007C07800078078000780780007803C000F003C000F00 1E001E001F003E000F807C0007E1F80003FFF00000FFC000003F00001A227DA021>II82 D<01FC0007FF800FFFC01F 03C03C00C03C00007800007800007800007800007800007C00003C00003F00001FE0000F FC0007FE0001FF00003F800007C00003C00003E00001E00001E00001E00001E00001E000 01C0C003C0F007C0FC0F807FFF001FFE0003F80013227EA019>IIIII<780007807C00 0F003E001F001E001E000F003C000F807C000780780003C0F00003E1F00001F1E00000F3 C000007FC000007F8000003F0000001F0000001E0000003F0000007F8000007FC00000F3 C00001F1E00001E0F00003C0F80007C0780007803C000F003E001F001E001E000F003C00 0F807C0007C0780003C0F00003E01B207F9F1E>IIII<381C3018301860306030C060F0 78F078F078F0780E0A799F17>II<07E03FF87FFC 701E401F000F000F000F003F07FF1FFF7E0FF80FF00FF00FF00FF83F7FFF3FEF1F8F1014 7E9316>97 D I<03F00FFC1FFE3E0E3C0278007800F000F000F000F000F000F000780078003C013E0F1F FF0FFE03F010147E9314>I<000780000780000780000780000780000780000780000780 00078000078000078000078007C7800FF7801FFF803E1F807C0780780780F80780F00780 F00780F00780F00780F00780F00780F00780780780780F803E1F801FFF800FF78007C780 11207E9F17>I<03F0000FFC001FFE003E1F003C0700780700700380FFFF80FFFF80FFFF 80F00000F00000F000007000007800003C01003E07001FFF0007FE0001F80011147F9314 >I<007E01FE03FE078007000F000F000F000F000F000F000F00FFF0FFF0FFF00F000F00 0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F20809F0E> I<03E0F00FFFF01FFFF03E3E003C1E00780F00780F00780F00780F00780F003C1E003E3E 001FFC003FF80033E0003000003800003FFE003FFF801FFFC03FFFE07803F0F000F0F000 F0F000F0F801F07E07E03FFFC00FFF0003FC00141E7F9317>III107 DIII<01F80007FE001FFF803F0FC03C03C07801E0 7801E0F000F0F000F0F000F0F000F0F000F0F000F07801E07801E03C03C03F0FC01FFF80 07FE0001F80014147F9317>II114 D<07F01FFC3FFC780C7800780078007C003FC01FF00FF803F8 007C003C003CC03CF07CFFF87FF00FC00E147F9311>I<1E001E001E001E001E001E00FF F0FFF0FFF01E001E001E001E001E001E001E001E001E001E001E001E001E001E201FF00F F007C00C1A7F9910>IIII<7801E07C03 C03E07801E0F000F0F00079E0003FC0003F80001F80000F00001F00001F80003FC00079E 000F0F000E0F001E07803C03C07801E0F801F01414809315>II<7FFF7FFF7FFF003E003C007800F800F001E003E007C00780 0F001F001E003C007C00FFFFFFFFFFFF10147F9314>I E /Fq 39 123 df45 DI<00180000380000 F80007F800FFF800FFF800F8F80000F80000F80000F80000F80000F80000F80000F80000 F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000 F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8007FFFF07F FFF07FFFF014287BA71E>49 D<00FE0003FFC007FFE00FFFF01F03F83C00FC38007E7800 3E70003EF0001FF0001F60001F20001F00001F00001F00001F00003E00003E00007C0000 7C0000F80001F00001E00003C0000780000F00001E00003C0000780000F00001E00003C0 000780000F00001E00003C00007FFFFF7FFFFF7FFFFF7FFFFF18287EA71E>I<007F0000 01FFC00007FFF0000FFFF8001FC1F8003E007C003C003E0078003E0038003E0010003E00 00003E0000003E0000003C0000007C000000FC000001F8000007F00000FFE00000FFC000 00FFE00000FFF0000001FC0000007C0000003E0000001F0000001F0000000F8000000F80 00000F8000000F8000000F8040000F8060001F00F0001F00F8003F007E007E003F81FC00 1FFFF8000FFFF00003FFE000007F000019297EA71E>I<0003F0000007F0000005F00000 0DF000000DF000001DF0000039F0000039F0000079F0000079F00000F1F00000F1F00001 E1F00003E1F00003E1F00007C1F00007C1F0000F81F0000F81F0001F01F0001F01F0003E 01F0007C01F0007C01F000F801F000FFFFFF80FFFFFF80FFFFFF80FFFFFF800001F00000 01F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00019 277EA61E>I<3FFFFC3FFFFC3FFFFC3FFFFC3E00003E00003E00003E00003E00003E0000 3E00003E00003E00003E00003E3F003EFFC03FFFE03FFFF03FE1F83F807C3F003E3E003E 00003E00001F00001F00001F00001F00001F00001F00001F20001F60003E70003EF8007C 7C00FC3F03F81FFFF00FFFE007FF8000FE0018287EA61E>I<000FF000003FFC0000FFFC 0001FFFC0003F80C0007E000000FC000000F8000001F0000001E0000003E0000003C0000 007C0000007C0000007C3FE000F8FFF000F9FFF800FBFFFC00FF807E00FF003E00FE003F 00FC001F00FC001F00FC000F80F8000F80F8000F80F8000F80F8000F8078000F807C000F 807C000F807C000F003E001F003E001F001F003E001F807C000FC1FC0007FFF80003FFF0 0001FFC000007F000019297EA71E>II<00 7F000001FFC00007FFF0000FFFF8001FC1FC003F007E003E003E007E003F007C001F007C 001F007C001F007C001F007C001F003E003E003E003E001F007C000FC1F80007FFF00003 FFE00003FFE0000FFFF8001FC1FC003F007E003E003E007C001F007C001F00F8000F80F8 000F80F8000F80F8000F80F8000F80F8000F807C001F007C001F007E003F003F007E001F C1FC000FFFF80007FFF00003FFE000007F000019297EA71E>I66 D<0001FF00000FFFE0003FFFF8007F FFF800FE01F801F8003003F0001007C000000F8000001F8000001F0000003E0000003E00 00007E0000007C0000007C0000007C000000F8000000F8000000F8000000F8000000F800 0000F8000000F8000000F8000000F8000000F80000007C0000007C0000007C0000007E00 00003E0000003E0000001F0000001F8000000F80000007C0000003F0000401F8001C00FE 00FC007FFFFC003FFFF8000FFFE00001FF001E2C7CAA26>I69 DI<0001FF00000FFFE0003FFFFC007FFFFE00FF01FE 01F8003E03F0000C07C000000FC000001F8000001F0000003F0000003E0000007E000000 7C0000007C0000007C000000F8000000F8000000F8000000F8000000F8000000F8000000 F8000000F8001FFEF8001FFEF8001FFE7C001FFE7C00003E7C00003E7E00003E3E00003E 3F00003E1F00003E1F80003E0FC0003E07C0003E03F0003E01F8003E00FF00FE007FFFFE 003FFFFC000FFFE00001FF001F2C7CAA28>I73 D76 DI<007F C00001FFF80007FFFE000FFFFF001FC07F003F000F007E0006007C0000007C000000F800 0000F8000000F8000000F8000000F8000000FC0000007E0000007F0000003F8000001FF8 00000FFF800007FFE00003FFF80000FFFC00000FFE000000FF0000003F0000001F800000 0F8000000FC0000007C0000007C0000007C0000007C0000007C0000007C000000F806000 0F80F0001F00FC003F00FF80FE007FFFFC001FFFF80007FFE00000FF80001A2C7DAA21> 83 D<01FE000FFF803FFFC03FFFE03C03F03001F00001F80000F80000F80000F80000F8 0000F8007FF807FFF81FFFF83FE0F87F00F8FC00F8F800F8F800F8F800F8FC01F87E07F8 7FFFF83FFFF81FFCF80FE0F8151B7E9A1D>97 D<007FC001FFF007FFFC0FFFFC1FC07C1F 00083E00007C00007C00007C0000F80000F80000F80000F80000F80000F80000F800007C 00007C00007E00003E00001F000C1FC07C0FFFFC07FFFC01FFF0007F80161B7E9A1B>99 D<00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0000 3E00003E00003E00003E00FC3E03FF3E07FFFE0FFFFE1FC1FE3F007E3E003E7C003E7C00 3EFC003EF8003EF8003EF8003EF8003EF8003EF8003EF8003EFC003E7C003E7C003E3E00 7E3F00FE1FC1FE0FFFFE07FFBE03FF3E00FC3E172A7EA91F>I<007E0003FF8007FFC00F FFE01F83F03F00F03E00787C00787C003878003CFFFFFCFFFFFCFFFFFCFFFFFCF80000F8 0000F800007800007C00007C00003E00003F000C1FC07C0FFFFC07FFFC01FFF0007F8016 1B7E9A1B>I<00F8078003FE7FC00FFFFFC01FFFFFC01F07C0003E03E0003E03E0007C01 F0007C01F0007C01F0007C01F0007C01F0007C01F0003E03E0003E03E0001F07C0001FFF C0003FFF80003BFE000038F8000078000000780000003C0000003FFFC0003FFFF8001FFF FC001FFFFE003FFFFF007C007F00F8001F80F8000F80F8000F80F8000F80FC001F807E00 3F003F80FE003FFFFE000FFFF80007FFF00000FF80001A287E9A1E>103 DII108 DII<007F0000 01FFC00007FFF0000FFFF8001FC1FC003F007E003E003E007C001F007C001F0078000F00 F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F807C001F007C001F00 7E003F003E003E003F007E001FC1FC000FFFF80007FFF00001FFC000007F0000191B7E9A 1E>II114 D<03FC001FFF803FFFC07FFFC07C07C0F80080F80000F80000F800 00FC00007F80007FF8003FFE001FFF0007FF8000FFC0000FE00007E00003E00003E04003 E0E007E0FC0FC0FFFFC07FFF801FFE0003F800131B7E9A17>I<07C00007C00007C00007 C00007C00007C00007C000FFFFC0FFFFC0FFFFC007C00007C00007C00007C00007C00007 C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007 C00007C04007E1C003FFE003FFE001FF8000FC0013227FA116>III<7C000FC03E001F803F001F001F803E000F807C0007C0 FC0003E0F80001F1F00001FBE00000FFC000007FC000003F8000001F0000001F0000003F 8000007FC00000FBC00000F3E00001F1F00003E0F80007C07C000F807C000F803E001F00 1F003E000F807E000FC0FC0007E01B1B809A1C>120 DII E /Fr 23 122 df<07C0001FF0003FFC007FFC007FFE00FFFE00FFFF00FFFF00FFFF80FFFF80FFFF807F FF807FFF803FFF801FFF8007E780000780000780000F00000F00000F00000F00001E0000 1E00003C00003C0000780000F80000F00001F00003E00007C0000F80001F00001E00000C 00001124788F21>44 D66 D<000000003FFE00000E0000000FFFFFC0001E0000007FFFFFF8003E 000003FFFFFFFE00FE00000FFFFFFFFF81FE00003FFFF800FFC3FE0000FFFF80000FF7FE 0001FFFC000003FFFE0007FFF0000001FFFE000FFFC00000007FFE001FFF800000003FFE 003FFF000000001FFE007FFE000000000FFE00FFFC0000000007FE01FFF80000000007FE 03FFF00000000003FE03FFF00000000001FE07FFE00000000001FE07FFE00000000000FE 0FFFC00000000000FE0FFFC000000000007E1FFFC000000000007E1FFF8000000000007E 3FFF8000000000007E3FFF8000000000003E3FFF8000000000003E7FFF8000000000003E 7FFF0000000000003E7FFF000000000000007FFF00000000000000FFFF00000000000000 FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000 FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000 FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000 7FFF000000000000007FFF000000000000007FFF000000000000007FFF8000000000003E 3FFF8000000000003E3FFF8000000000003E3FFF8000000000003E1FFF8000000000003E 1FFFC000000000003E0FFFC000000000007C0FFFC000000000007C07FFE000000000007C 07FFE00000000000F803FFF00000000000F803FFF00000000001F801FFF80000000001F0 00FFFC0000000003E0007FFE0000000007E0003FFF000000000FC0001FFF800000001F80 000FFFC00000003F000007FFF0000000FE000001FFFC000001FC000000FFFF80000FF800 00003FFFF8007FF00000000FFFFFFFFFC000000003FFFFFFFF00000000007FFFFFFC0000 0000000FFFFFE00000000000003FFE000000474979C756>I<000000003FFE00000E0000 00000FFFFFC0001E000000007FFFFFF8003E00000003FFFFFFFE00FE0000000FFFFFFFFF 81FE0000003FFFF800FFC3FE000000FFFF80000FF7FE000001FFFC000003FFFE000007FF F0000001FFFE00000FFFC00000007FFE00001FFF800000003FFE00003FFF000000001FFE 00007FFE000000000FFE0000FFFC0000000007FE0001FFF80000000007FE0003FFF00000 000003FE0003FFF00000000001FE0007FFE00000000001FE0007FFE00000000000FE000F FFC00000000000FE000FFFC000000000007E001FFFC000000000007E001FFF8000000000 007E003FFF8000000000007E003FFF8000000000003E003FFF8000000000003E007FFF80 00000000003E007FFF0000000000003E007FFF00000000000000007FFF00000000000000 00FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF000000 0000000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FF FF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000 000000FFFF0000000000000000FFFF0000007FFFFFFFFE7FFF0000007FFFFFFFFE7FFF00 00007FFFFFFFFE7FFF8000007FFFFFFFFE7FFF8000007FFFFFFFFE3FFF8000000000FFFE 003FFF8000000000FFFE003FFF8000000000FFFE001FFF8000000000FFFE001FFFC00000 0000FFFE000FFFC000000000FFFE000FFFC000000000FFFE0007FFE000000000FFFE0007 FFE000000000FFFE0003FFF000000000FFFE0003FFF800000000FFFE0001FFF800000000 FFFE0000FFFC00000000FFFE00007FFE00000000FFFE00003FFF00000000FFFE00001FFF 80000000FFFE00000FFFE0000001FFFE000007FFF0000003FFFE000001FFFC000007FFFE 000000FFFF80001FFFFE0000003FFFFC00FFC7FE0000000FFFFFFFFF83FE00000003FFFF FFFE00FE000000007FFFFFF8003E000000000FFFFFE0000E00000000003FFE000000004F 4979C75D>71 D<0007FFFC000000007FFFFFC0000001FFFFFFF8000003FFFFFFFE000007 FE001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000FFF80007FF0000FFF 80007FF8000FFF80007FF80007FF00003FFC0007FF00003FFC0003FE00003FFC0000F800 003FFC00000000003FFC00000000003FFC00000000003FFC00000000003FFC00000007FF FFFC000000FFFFFFFC000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003F FC0007FFC0003FFC000FFF00003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC 007FF800003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00 FFF000003FFC00FFF000007FFC007FF80000FFFC007FF80001EFFC003FFC0003EFFC003F FF0007CFFF000FFFC03F8FFFF807FFFFFF07FFFC01FFFFFC03FFFC007FFFF001FFFC0003 FF80007FF8362E7DAD3A>97 D<007FC00000000000FFFFC00000000000FFFFC000000000 00FFFFC00000000000FFFFC00000000000FFFFC0000000000003FFC0000000000001FFC0 000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000000000 0001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000000000 0001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC00FFC00000001FFC07FFFC0000001FFC3FFFFF0000001FFCFFFFFFC00 0001FFDFF00FFF000001FFFF8003FF800001FFFE0001FFC00001FFF800007FE00001FFF0 00007FF00001FFE000003FF80001FFE000001FFC0001FFE000001FFC0001FFE000001FFE 0001FFE000001FFE0001FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FFE0 00000FFF0001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF 8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE0 00000FFF8001FFE000000FFF8001FFE000000FFF0001FFE000000FFF0001FFE000000FFF 0001FFE000001FFE0001FFE000001FFE0001FFE000001FFC0001FFE000001FFC0001FFE0 00003FF80001FFF000003FF80001FFF800007FF00001FFFC0000FFE00001FFFE0001FFC0 0001FFBF0007FF800001FF1FE01FFE000001FE0FFFFFFC000001FC03FFFFF0000001F800 FFFF80000001F0001FF800000039487CC742>I<00001FFFC0000000FFFFF8000007FFFF FE00001FFFFFFF80007FFC00FFC000FFE001FFC001FFC003FFE003FF8003FFE007FF0003 FFE00FFE0003FFE00FFE0003FFE01FFC0001FFC01FFC0001FFC03FFC0000FF803FFC0000 3E007FF8000000007FF8000000007FF800000000FFF800000000FFF800000000FFF80000 0000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF80000 0000FFF8000000007FF8000000007FF8000000007FFC000000003FFC000000003FFC0000 00001FFC000000F81FFE000000F80FFE000000F80FFF000001F007FF800003F003FFC000 07E001FFE0000FC000FFF0001F80007FFE00FF00001FFFFFFE000007FFFFF8000000FFFF E00000001FFE00002D2E7CAD35>I<00000000007FC00000000000FFFFC00000000000FF FFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0000000000003FFC00000 00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001 FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000 00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001 FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000 00000001FFC00000000FFC01FFC0000000FFFF81FFC0000007FFFFE1FFC000001FFFFFF9 FFC000007FFC03FFFFC00000FFF0007FFFC00001FFC0001FFFC00003FF80000FFFC00007 FF000007FFC0000FFE000003FFC0000FFE000003FFC0001FFC000003FFC0001FFC000003 FFC0003FFC000003FFC0003FFC000003FFC0007FF8000003FFC0007FF8000003FFC0007F F8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003 FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FF F8000003FFC000FFF8000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003 FFC0003FF8000003FFC0003FFC000003FFC0003FFC000003FFC0001FFC000003FFC0001F FC000003FFC0000FFE000007FFC00007FF00000FFFC00003FF00001FFFC00001FFC0003F FFC00000FFE000FFFFE000007FF807FBFFFF80001FFFFFF3FFFF800007FFFFC3FFFF8000 01FFFF03FFFF8000001FF803FFFF8039487CC742>I<00001FFE00000001FFFFE0000007 FFFFF800001FFFFFFE00007FFC07FF0000FFE001FF8001FFC0007FC003FF80003FE007FF 00003FF00FFE00001FF01FFE00000FF81FFC00000FF83FFC00000FFC3FFC000007FC7FFC 000007FC7FF8000007FC7FF8000007FE7FF8000007FEFFF8000007FEFFF8000007FEFFFF FFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFF800000000FFF800000000FFF8 00000000FFF8000000007FF8000000007FF8000000007FFC000000003FFC000000003FFC 000000003FFC0000001C1FFE0000003E0FFE0000003E07FF0000007E07FF000000FC03FF 800001F801FFC00003F0007FF0001FE0003FFE00FFC0001FFFFFFF800007FFFFFE000000 FFFFF80000000FFF80002F2E7DAD36>I<00000000001F8000007FF000FFE00007FFFF03 FFF0001FFFFFC7FFF0007FFFFFFFC7F800FFE03FFE0FF801FF800FFC0FF803FF0007FE0F F807FE0003FF07F007FE0003FF07F00FFC0001FF81C00FFC0001FF80000FFC0001FF8000 1FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001F FC0001FFC0000FFC0001FF80000FFC0001FF80000FFC0001FF800007FE0003FF000007FE 0003FF000003FF0007FE000001FF800FFC000000FFE03FF8000001FFFFFFF0000001DFFF FFC0000003C7FFFF00000003C07FF000000007C0000000000007C0000000000007C00000 00000007C0000000000007E0000000000007F0000000000007F8000000000007FFFFFFF0 000007FFFFFFFF000003FFFFFFFFE00003FFFFFFFFF80001FFFFFFFFFE0001FFFFFFFFFF 0000FFFFFFFFFF80007FFFFFFFFF8003FFFFFFFFFFC00FFFFFFFFFFFC01FF800001FFFE0 3FE0000001FFE07FC00000007FF07FC00000003FF0FF800000001FF0FF800000001FF0FF 800000001FF0FF800000001FF0FF800000001FF07FC00000003FE07FC00000003FE03FE0 0000007FC03FF0000000FFC01FFC000003FF800FFF00000FFF0003FFF000FFFC0000FFFF FFFFF000003FFFFFFFC0000007FFFFFE000000003FFFC0000035447DAE3B>103 D<007FC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0 0000000000FFFFC0000000000003FFC0000000000001FFC0000000000001FFC000000000 0001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000000000 0001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0 000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC001FFC000 0001FFC00FFFF8000001FFC03FFFFE000001FFC0FFFFFF000001FFC1FC07FF800001FFC3 E003FFC00001FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE00001FFDC0000FFE0 0001FFFC0000FFF00001FFF80000FFF00001FFF00000FFF00001FFF00000FFF00001FFF0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0 0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0 0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000FFFFFF C07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFF E03B487CC742>I<00FC0001FE0003FF0007FF800FFFC01FFFE01FFFE01FFFE01FFFE01F FFE01FFFE00FFFC007FF8003FF0001FE0000FC0000000000000000000000000000000000 0000000000000000000000000000000000007FC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC003 FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001 FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001 FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0FFFFFFFF FFFFFFFFFFFFFFFFFFFFFF18497CC820>I<007FC000FFFFC000FFFFC000FFFFC000FFFF C000FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000FFFF FF80FFFFFF80FFFFFF80FFFFFF80FFFFFF8019487CC720>108 D<007FC001FFC00000FF E00000FFFFC00FFFF80007FFFC0000FFFFC03FFFFE001FFFFF0000FFFFC0FFFFFF007FFF FF8000FFFFC1FC07FF80FE03FFC000FFFFC3E003FFC1F001FFE00003FFC7C001FFC3E000 FFE00001FFCF0001FFE78000FFF00001FFDE0000FFEF00007FF00001FFDC0000FFEE0000 7FF00001FFFC0000FFFE00007FF80001FFF80000FFFC00007FF80001FFF00000FFF80000 7FF80001FFF00000FFF800007FF80001FFF00000FFF800007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF00000 7FF80001FFE00000FFF000007FF800FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03F FFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03F FFFFF05C2E7CAD63>I<007FC001FFC00000FFFFC00FFFF80000FFFFC03FFFFE0000FFFF C0FFFFFF0000FFFFC1FC07FF8000FFFFC3E003FFC00003FFC7C001FFC00001FFCF0001FF E00001FFDE0000FFE00001FFDC0000FFE00001FFFC0000FFF00001FFF80000FFF00001FF F00000FFF00001FFF00000FFF00001FFF00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFF FFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE03B2E7CAD42>I<00000FFF0000000000FFFF F000000007FFFFFE0000001FFFFFFF8000003FFC03FFC00000FFE0007FF00001FF80001F F80003FF00000FFC0007FE000007FE000FFE000007FF000FFC000003FF001FFC000003FF 803FFC000003FFC03FF8000001FFC03FF8000001FFC07FF8000001FFE07FF8000001FFE0 7FF8000001FFE0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FF F8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8 000001FFF07FF8000001FFE07FF8000001FFE07FF8000001FFE07FF8000001FFE03FFC00 0003FFC03FFC000003FFC01FFC000003FF801FFE000007FF800FFE000007FF0007FF0000 0FFE0003FF80001FFC0001FFC0003FF80000FFE0007FF000007FFC03FFE000001FFFFFFF 80000007FFFFFE00000000FFFFF0000000000FFF000000342E7DAD3B>I<007FC00FFC00 0000FFFFC07FFFC00000FFFFC3FFFFF00000FFFFCFFFFFFC0000FFFFDFF01FFF0000FFFF FF8007FF800003FFFE0001FFC00001FFF80000FFE00001FFF00000FFF00001FFE000007F F80001FFE000003FFC0001FFE000003FFC0001FFE000003FFE0001FFE000001FFE0001FF E000001FFF0001FFE000001FFF0001FFE000001FFF0001FFE000000FFF0001FFE000000F FF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FF E000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000F FF8001FFE000000FFF0001FFE000001FFF0001FFE000001FFF0001FFE000001FFE0001FF E000001FFE0001FFE000003FFC0001FFE000003FFC0001FFE000007FF80001FFF000007F F80001FFF80000FFF00001FFFC0001FFE00001FFFE0003FFC00001FFFF0007FF800001FF FFE03FFE000001FFEFFFFFFC000001FFE3FFFFF0000001FFE0FFFF80000001FFE01FF800 000001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FF E0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000 000001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FF E0000000000001FFE00000000000FFFFFFC000000000FFFFFFC000000000FFFFFFC00000 0000FFFFFFC000000000FFFFFFC00000000039427CAD42>I<00FF803F8000FFFF80FFF0 00FFFF83FFFC00FFFF87FFFE00FFFF8FC3FF00FFFF8F07FF0003FF9E0FFF8001FFBC0FFF 8001FFB80FFF8001FFF80FFF8001FFF00FFF8001FFF007FF0001FFF007FF0001FFE003FE 0001FFE000F80001FFE000000001FFE000000001FFC000000001FFC000000001FFC00000 0001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000 0001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000 0001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000 0001FFC000000001FFC000000001FFC0000000FFFFFFE00000FFFFFFE00000FFFFFFE000 00FFFFFFE00000FFFFFFE00000292E7CAD31>114 D<000FFF00E0007FFFF3E001FFFFFF E007FFFFFFE00FF800FFE01FC0001FE03F80000FE03F000007E07F000003E07F000003E0 FF000003E0FF000003E0FF800003E0FFC0000000FFF0000000FFFE000000FFFFF800007F FFFFC0007FFFFFF0003FFFFFFC001FFFFFFF000FFFFFFF8007FFFFFFC003FFFFFFE000FF FFFFF0003FFFFFF00003FFFFF800001FFFF8000000FFFC0000001FFC7800000FFCF80000 07FCF8000003FCFC000003FCFC000003FCFE000003F8FE000003F8FF000003F8FF800007 F0FFC0000FF0FFF0001FE0FFFC00FFC0FFFFFFFF80FC7FFFFE00F81FFFF800E003FF8000 262E7CAD2F>I<0001F000000001F000000001F000000001F000000001F000000001F000 000003F000000003F000000003F000000007F000000007F000000007F00000000FF00000 000FF00000001FF00000003FF00000003FF00000007FF0000001FFF0000003FFF000000F FFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC000FFF0000000FFF0000000FF F0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0 000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF000 0000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF001F0 00FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000 FFF001F0007FF001E0007FF803E0003FF803E0003FFC07C0001FFE0F80000FFFFF800007 FFFE000001FFFC0000001FF00024427EC12E>I<007FE000003FF000FFFFE0007FFFF000 FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF00003FFE000 01FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000 01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000 01FFF00001FFE00001FFF00001FFE00001FFF00001FFE00003FFF00000FFE00007FFF000 00FFE0000F7FF000007FE0001F7FF000007FF0003E7FF800003FFC00FC7FFFE0001FFFFF F87FFFE00007FFFFE07FFFE00001FFFF807FFFE000003FFE007FFFE03B2E7CAD42>I<7F FFFF801FFFFF007FFFFF801FFFFF007FFFFF801FFFFF007FFFFF801FFFFF007FFFFF801F FFFF00007FF80001FF0000007FFC0001FC0000003FFE0003F80000001FFF0007F0000000 0FFF0007E000000007FF800FC000000003FFC01F8000000003FFE03F8000000001FFF07F 0000000000FFF8FE00000000007FF9FC00000000003FFFF800000000003FFFF000000000 001FFFE000000000000FFFC0000000000007FFC0000000000003FFC0000000000001FFE0 000000000001FFF0000000000001FFF8000000000003FFFC000000000003FFFE00000000 0007FFFE00000000000FEFFF00000000001FCFFF80000000003F87FFC0000000007F03FF E000000000FE01FFE000000001FC00FFF000000001F8007FF800000003F0007FFC000000 07F0003FFE0000000FE0001FFF0000001FC0000FFF0000003F800007FF800000FF800007 FFC000FFFFF8003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC0FF FFF8003FFFFFC03A2E7EAD3F>120 D<7FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC0 00FFFF807FFFFFC000FFFF807FFFFFC000FFFF8000FFF000000FE00000FFF800000FC000 00FFF800000FC000007FFC00000F8000007FFC00001F8000003FFC00001F0000003FFE00 003F0000001FFE00003E0000001FFF00007E0000000FFF00007C0000000FFF8000FC0000 0007FF8000F800000007FFC001F800000003FFC001F000000003FFE003F000000003FFE0 03F000000001FFF003E000000001FFF007E000000000FFF007C000000000FFF80FC00000 00007FF80F80000000007FFC1F80000000003FFC1F00000000003FFE3F00000000001FFE 3E00000000001FFF7E00000000000FFF7C00000000000FFFFC00000000000FFFFC000000 000007FFF8000000000007FFF8000000000003FFF0000000000003FFF0000000000001FF E0000000000001FFE0000000000000FFC0000000000000FFC00000000000007F80000000 0000007F800000000000003F000000000000003F000000000000003F000000000000003E 000000000000007E000000000000007C00000000000000FC000000001F8000F800000000 3FC001F8000000007FE001F000000000FFF003F000000000FFF003E000000000FFF007E0 00000000FFF00FC000000000FFF01F8000000000FFF03F80000000007FE07F0000000000 7F43FE00000000003FFFF800000000001FFFF0000000000007FFC0000000000001FE0000 0000000039427EAD3F>I E /Fs 8 117 df<00001E000000003E00000000FE00000003FE 0000003FFE0000FFFFFE0000FFFFFE0000FFFFFE0000FFCFFE0000000FFE0000000FFE00 00000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000 000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000000 0FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000F FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE 0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00 00000FFE0000000FFE0000000FFE0000000FFE0000000FFE00007FFFFFFFC07FFFFFFFC0 7FFFFFFFC07FFFFFFFC0223879B731>49 D<0000001FFF000030000001FFFFE000F00000 0FFFFFFC01F000007FFFFFFE03F00001FFFE007F87F00003FFE0000FCFF0000FFF000003 FFF0001FFC000001FFF0003FF80000007FF0007FF00000003FF000FFC00000003FF001FF C00000001FF003FF800000000FF007FF000000000FF00FFF0000000007F00FFE00000000 07F01FFE0000000003F01FFE0000000003F03FFC0000000003F03FFC0000000001F03FFC 0000000001F07FFC0000000001F07FF80000000001F07FF80000000000007FF800000000 0000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8 000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800000000 0000FFF8000000000000FFF80000000000007FF80000000000007FF80000000000007FF8 0000000000007FFC0000000000F03FFC0000000000F03FFC0000000000F03FFC00000000 00F01FFE0000000000F01FFE0000000001E00FFE0000000001E00FFF0000000001E007FF 0000000003C003FF8000000003C001FFC0000000078000FFE00000000F00007FF0000000 1F00003FF80000003E00001FFC0000007C00000FFF000001F8000003FFE00007F0000001 FFFE003FC00000007FFFFFFF000000000FFFFFFC0000000001FFFFF000000000001FFF00 00003C3D7BBB47>67 D<001FFF00000001FFFFF0000003FFFFFC000007F007FE00000FF8 01FF00001FFC00FF80001FFC007FC0001FFC007FE0001FFC003FE0000FF8003FF0000FF8 003FF00007F0003FF00001C0003FF0000000003FF0000000003FF0000000003FF0000000 FFFFF000000FFFFFF000007FF83FF00001FF803FF00007FE003FF0000FF8003FF0001FF0 003FF0003FE0003FF0007FE0003FF0007FE0003FF000FFC0003FF000FFC0003FF000FFC0 003FF000FFC0003FF000FFC0007FF0007FE0007FF0007FE000DFF0003FF0039FF8001FFC 0F0FFFF007FFFE0FFFF001FFFC07FFF0003FE000FFF02C267DA530>97 D<0001FFC000000FFFF800003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE0 0FF8000FF01FF00007F03FF00007F83FF00007F87FE00007F87FE00003FC7FE00003FC7F E00003FCFFE00003FCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFE0000000FFE0000000FFE0 000000FFE00000007FE00000007FE00000007FE00000003FE00000003FF000003C1FF000 003C1FF000003C0FF800007807FC0000F803FE0001F001FF0007E000FFC03FC0003FFFFF 000007FFFC000000FFE00026267DA52D>101 D<00FF00000000FFFF00000000FFFF0000 0000FFFF00000000FFFF0000000007FF0000000003FF0000000003FF0000000003FF0000 000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000 000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000 000003FF0000000003FF007FC00003FF01FFF80003FF07FFFC0003FF0F03FE0003FF1C01 FF0003FF3001FF8003FF6000FF8003FFE000FFC003FFC000FFC003FF8000FFC003FF8000 FFC003FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000 FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000 FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000 FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3F FFFFFFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF303C7CBB37>104 D<00FF01FF8000FFFF0FFFF000FFFF3FFFFC00FFFFFE03FF00FFFFF000FF8003FFC0007F C003FF80003FE003FF00003FF003FF00001FF803FF00001FFC03FF00000FFC03FF00000F FE03FF00000FFE03FF000007FE03FF000007FF03FF000007FF03FF000007FF03FF000007 FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007 FE03FF000007FE03FF00000FFE03FF00000FFC03FF00000FFC03FF00001FF803FF00001F F803FF00003FF003FF80003FE003FFC0007FC003FFF001FF8003FFFC07FF0003FF3FFFFC 0003FF0FFFF00003FF01FF000003FF0000000003FF0000000003FF0000000003FF000000 0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000 0003FF0000000003FF0000000003FF00000000FFFFFC000000FFFFFC000000FFFFFC0000 00FFFFFC00000030377DA537>112 D<00FE03F000FFFE0FFE00FFFE1FFF00FFFE3C3F80 FFFE707FC007FE60FFE003FEE0FFE003FEC0FFE003FFC0FFE003FF807FC003FF807FC003 FF803F8003FF800E0003FF00000003FF00000003FF00000003FF00000003FF00000003FF 00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00 000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000 0003FF000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE000023267DA529>114 D<0007800000078000000780000007800000078000000F8000000F8000000F8000000F80 00001F8000001F8000003F8000003F8000007F800000FF800001FF800007FF80001FFFFF F0FFFFFFF0FFFFFFF0FFFFFFF001FF800001FF800001FF800001FF800001FF800001FF80 0001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF80 0001FF800001FF800001FF800001FF800001FF803C01FF803C01FF803C01FF803C01FF80 3C01FF803C01FF803C01FF803C00FF807800FFC078007FC070003FE0E0001FFFC00007FF 800001FF001E377EB626>116 D E /Ft 84 125 df<001F83E000F06E3001C078780380 F8780300F03007007000070070000700700007007000070070000700700007007000FFFF FF8007007000070070000700700007007000070070000700700007007000070070000700 700007007000070070000700700007007000070070000700700007007000070070000700 70007FE3FF001D20809F1B>11 D<003F0000E0C001C0C00381E00701E00701E007000007 0000070000070000070000070000FFFFE00700E00700E00700E00700E00700E00700E007 00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E07F C3FE1720809F19>I<003FE000E0E001C1E00381E00700E00700E00700E00700E00700E0 0700E00700E00700E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E0 0700E00700E00700E00700E00700E00700E00700E00700E00700E00700E07FE7FE172080 9F19>I<001F81F80000F04F040001C07C06000380F80F000300F00F000700F00F000700 70000007007000000700700000070070000007007000000700700000FFFFFFFF00070070 070007007007000700700700070070070007007007000700700700070070070007007007 000700700700070070070007007007000700700700070070070007007007000700700700 0700700700070070070007007007007FE3FE3FF02420809F26>I<7038F87CFC7EFC7E74 3A0402040204020804080410081008201040200F0E7E9F17>34 D<000300C0000300C000 0300C0000300C00006018000060180000601800006018000060180000C0300000C030000 0C0300000C0300000C0300001806007FFFFFFCFFFFFFFE00300C0000300C0000300C0000 300C0000601800006018000060180000601800FFFFFFFE7FFFFFFC00C030000180600001 8060000180600001806000018060000300C0000300C0000300C0000300C0000300C00006 01800006018000060180001F297D9F26>I<007800000084000001840000030200000702 0000070200000702000007020000070400000704000007080000070800000310000003A0 0FFC03C003E0038001C001C0008001C0010003E0010004E0020008F00200187004003078 080070380800701C1000F01E1000F00E2000F0074000F003C0087003C0087801C0103806 70301C18386007E00F801E227EA023>38 D<70F8FCFC74040404080810102040060E7C9F 0D>I<0020004000800100020006000C000C001800180030003000300070006000600060 00E000E000E000E000E000E000E000E000E000E000E000E0006000600060007000300030 003000180018000C000C000600020001000080004000200B2E7DA112>I<800040002000 100008000C00060006000300030001800180018001C000C000C000C000E000E000E000E0 00E000E000E000E000E000E000E000E000C000C000C001C0018001800180030003000600 06000C00080010002000400080000B2E7DA112>I<000600000006000000060000000600 000006000000060000000600000006000000060000000600000006000000060000000600 000006000000060000FFFFFFF0FFFFFFF000060000000600000006000000060000000600 000006000000060000000600000006000000060000000600000006000000060000000600 00000600001C207D9A23>43 D<70F8FCFC74040404080810102040060E7C840D>II<70F8F8F87005057C840D>I<000100030003000600060006000C000C 000C00180018001800300030003000600060006000C000C000C001800180018003000300 03000600060006000C000C000C00180018001800300030003000600060006000C000C000 C000102D7DA117>I<03F0000E1C001C0E00180600380700700380700380700380700380 F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0 F003C07003807003807003807807803807001806001C0E000E1C0003F000121F7E9D17> I<018003800F80F380038003800380038003800380038003800380038003800380038003 80038003800380038003800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C 1C00100E00200700400780800780F007C0F803C0F803C0F803C02007C00007C000078000 0780000F00000E00001C0000380000700000600000C0000180000300000600400C004018 00401000803FFF807FFF80FFFF80121E7E9D17>I<03F0000C1C00100E00200F00780F80 780780780780380F80000F80000F00000F00000E00001C0000380003F000003C00000E00 000F000007800007800007C02007C0F807C0F807C0F807C0F00780400780400F00200E00 1C3C0003F000121F7E9D17>I<000600000600000E00000E00001E00002E00002E00004E 00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00200E00400E 00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0141E7F9D17 >I<1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011 F000161C00180E001007001007800003800003800003C00003C00003C07003C0F003C0F0 03C0E00380400380400700200600100E000C380003E000121F7E9D17>I<007C00018200 0701000E03800C07801C0780380300380000780000700000700000F1F000F21C00F40600 F80700F80380F80380F003C0F003C0F003C0F003C0F003C07003C07003C0700380380380 3807001807000C0E00061C0001F000121F7E9D17>I<4000007FFFC07FFF807FFF804001 0080020080020080040000080000080000100000200000200000400000400000C00000C0 0001C0000180000380000380000380000380000780000780000780000780000780000780 00078000030000121F7D9D17>I<03F0000C0C0010060030030020018060018060018060 01807001807803003E03003F06001FC8000FF00003F80007FC000C7E00103F00300F8060 03804001C0C001C0C000C0C000C0C000C0C000806001802001001002000C0C0003F00012 1F7E9D17>I<03F0000E18001C0C00380600380700700700700380F00380F00380F003C0 F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C0000380000380 000380000700300700780600780E00700C002018001070000FC000121F7E9D17>I<70F8 F8F8700000000000000000000070F8F8F87005147C930D>I<70F8F8F870000000000000 0000000070F0F8F878080808101010202040051D7C930D>I<7FFFFFE0FFFFFFF0000000 0000000000000000000000000000000000000000000000000000000000FFFFFFF07FFFFF E01C0C7D9023>61 D<000100000003800000038000000380000007C0000007C0000007C0 000009E0000009E0000009E0000010F0000010F0000010F0000020780000207800002078 0000403C0000403C0000403C0000801E0000801E0000FFFE0001000F0001000F0001000F 00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE1F207F9F22>65 DI<000FC040007030C001C009C0 038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000407C00004078000040 F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000 780000007C0000407C0000403C0000401C0000401E0000800E0000800700010003800200 01C0040000703800000FC0001A217D9F21>IIII<000FE0200078186000E004E0038002E0070001E0 0F0000E01E0000601E0000603C0000603C0000207C00002078000020F8000000F8000000 F8000000F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E07C0001E0 3C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E000E0046000781820 000FE0001E217D9F24>III<0FFFC0007C 00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C 00003C00003C00003C00003C00003C00003C00003C00003C00003C00203C00F83C00F83C 00F83C00F0380040780040700030E0000F800012207E9E17>IIIII<001F800000F0F00001C0380007801E000F000F000E0007001E00 07803C0003C03C0003C07C0003E0780001E0780001E0F80001F0F80001F0F80001F0F800 01F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E07C0003E03C00 03C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0F000001F80001C21 7D9F23>II<001F800000F0F000 01C0380007801E000F000F000E0007001E0007803C0003C03C0003C07C0003E07C0003E0 780001E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0 F80001F0780001E0780001E07C0003E03C0003C03C0F03C01E1087800E2047000F204F00 07A03E0001E0380000F0F010001FB01000003010000038300000387000003FF000001FE0 00001FE000000FC0000007801C297D9F23>II<07E0800C1980100780300380600180600180E00180E00080E000 80E00080F00000F000007800007F00003FF0001FFC000FFE0003FF00001F800007800003 C00003C00001C08001C08001C08001C08001C0C00180C00380E00300F00600CE0C0081F8 0012217D9F19>I<7FFFFFE0780F01E0600F0060400F0020400F0020C00F0030800F0010 800F0010800F0010800F0010000F0000000F0000000F0000000F0000000F0000000F0000 000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 000F0000000F0000000F0000000F0000001F800007FFFE001C1F7E9E21>IIII<7FF83FF8 0FE00FC007C0070003C0020001E0040001F00C0000F0080000781000007C1000003C2000 003E4000001E4000000F8000000F8000000780000003C0000007E0000005E0000009F000 0018F8000010780000207C0000603C0000401E0000801F0001800F0001000780020007C0 070003C01F8007E0FFE01FFE1F1F7F9E22>I<7FFFF87C00F87000F06001E04001E0C003 C0C003C0800780800F80800F00001E00001E00003C00003C0000780000F80000F00001E0 0001E00003C00403C0040780040F80040F000C1E000C1E00083C00183C0018780038F801 F8FFFFF8161F7D9E1C>90 DI<0804100820102010 40204020804080408040B85CFC7EFC7E7C3E381C0F0E7B9F17>II<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E 001E0E00380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317 >97 D<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E0000 0E00000E3E000EC3800F01C00F00E00E00E00E00700E00700E00780E00780E00780E0078 0E00780E00780E00700E00700E00E00F00E00D01C00CC300083E0015207F9F19>I<03F8 0E0C1C1E381E380C70007000F000F000F000F000F000F00070007000380138011C020E0C 03F010147E9314>I<000380003F80000380000380000380000380000380000380000380 00038000038000038003E380061B801C0780380380380380700380700380F00380F00380 F00380F00380F00380F003807003807003803803803807801C07800E1B8003E3F815207E 9F19>I<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80F000 00F00000F000007000007000003800801800800C010007060001F80011147F9314>I<00 7C00C6018F038F07060700070007000700070007000700FFF00700070007000700070007 000700070007000700070007000700070007000700070007007FF01020809F0E>I<0000 E003E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E38 0033E0002000002000003000003000003FFE001FFF800FFFC03001E0600070C00030C000 30C00030C000306000603000C01C038003FC00141F7F9417>I<0E0000FE00000E00000E 00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E81800F 01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C0FFE7FC16207F9F19>I<1C001E003E001E001C000000000000 000000000000000E007E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000E00000000000000000 00000000007007F000F00070007000700070007000700070007000700070007000700070 007000700070007000700070007000706070F060F0C061803F000C28829E0E>I<0E0000 FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF0 0E03C00E03000E02000E04000E08000E10000E30000E70000EF8000F38000E1C000E1E00 0E0E000E07000E07800E03800E03C00E03E0FFCFF815207F9F18>I<0E00FE000E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E00FFE00B20809F0C>I<0E1F01F000FE618618 000E81C81C000F00F00E000F00F00E000E00E00E000E00E00E000E00E00E000E00E00E00 0E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E 00E00E000E00E00E000E00E00E00FFE7FE7FE023147F9326>I<0E3E00FE43000E81800F 01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C0FFE7FC16147F9319>I<01F800070E001C03803801C03801C0 7000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C03801C0 1C0380070E0001F80014147F9317>I<0E3E00FEC3800F01C00F00E00E00E00E00F00E00 700E00780E00780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C00EC3 000E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000151D7F9319 >I<03E0800619801C05803C0780380380780380700380F00380F00380F00380F00380F0 0380F003807003807803803803803807801C0B800E138003E38000038000038000038000 0380000380000380000380000380003FF8151D7E9318>I<0E78FE8C0F1E0F1E0F0C0E00 0E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00F147F9312>I<1F 9030704030C010C010C010E00078007F803FE00FF00070803880188018C018C018E030D0 608F800D147E9312>I<020002000200060006000E000E003E00FFF80E000E000E000E00 0E000E000E000E000E000E000E000E080E080E080E080E080610031001E00D1C7F9B12> I<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC16147F9319>III<7FC3FC0F01E00701C007018003810001C20000E40000EC00007800003800 003C00007C00004E000087000107000303800201C00601E01E01E0FF07FE1714809318> II<3FFF380E200E201C4038407840 7000E001E001C00380078007010E011E011C0338027006700EFFFE10147F9314>III E /Fu 45 122 df<70F8FCFC7404040404080810102040060F7C840E>44 DI<70 F8F8F87005057C840E>I<01F000071C000C06001803003803803803807001C07001C070 01C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F0 01E0F001E0F001E0F001E07001C07001C07001C07803C03803803803801C07000C060007 1C0001F00013227EA018>48 D<008003800F80F380038003800380038003800380038003 800380038003800380038003800380038003800380038003800380038003800380038003 80038007C0FFFE0F217CA018>I<03F8000C1E001007002007804007C07807C07803C078 07C03807C0000780000780000700000F00000E0000380003F000001C00000F0000078000 07800003C00003C00003E02003E07003E0F803E0F803E0F003C04003C040078020078010 0F000C1C0003F00013227EA018>51 D<000200000600000E00000E00001E00001E00002E 00004E00004E00008E00008E00010E00020E00020E00040E00040E00080E00100E00100E 00200E00200E00400E00800E00FFFFF8000E00000E00000E00000E00000E00000E00000E 00001F0001FFF015217FA018>I<1000801E07001FFF001FFE001FF80013E00010000010 000010000010000010000010000010F800130E001407001803801003800001C00001C000 01E00001E00001E00001E07001E0F001E0F001E0E001C08001C04003C040038020070010 06000C1C0003F00013227EA018>I<007E0001C1000300800601C00E03C01C03C0180180 380000380000780000700000700000F0F800F30C00F40600F40300F80380F801C0F001C0 F001E0F001E0F001E0F001E0F001E07001E07001E07001E03801C03801C01803801C0300 0C0600070C0001F00013227EA018>I<01F800060E000803001001802001802000C06000 C06000C06000C07000C07801803E01003F02001FC4000FF80003F80003FC00067F00083F 80100F803007C06001C06000E0C000E0C00060C00060C00060C000606000406000C03000 801803000E0E0003F00013227EA018>56 D<01F000060C000C0600180700380380700380 700380F001C0F001C0F001C0F001E0F001E0F001E0F001E0F001E07001E07003E03803E0 1805E00C05E00619E003E1E00001C00001C00001C0000380000380300300780700780600 700C002018001030000FC00013227EA018>I<0001800000018000000180000003C00000 03C0000003C0000005E0000005E000000DF0000008F0000008F0000010F8000010780000 10780000203C0000203C0000203C0000401E0000401E0000401E0000800F0000800F0000 FFFF000100078001000780030007C0020003C0020003C0040003E0040001E0040001E00C 0000F00C0000F03E0001F8FF800FFF20237EA225>65 D<0007E0100038183000E0063001 C00170038000F0070000F00E0000701E0000701C0000303C0000303C0000307C00001078 00001078000010F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8 00000078000000780000107C0000103C0000103C0000101C0000201E0000200E00004007 0000400380008001C0010000E0020000381C000007E0001C247DA223>67 D69 DI< FFFC0FC00780078007800780078007800780078007800780078007800780078007800780 078007800780078007800780078007800780078007800780078007800FC0FFFC0E227EA1 12>73 D 77 DI 80 D82 D<03F0200C0C601802603001E07000E0600060E00060E00060E00020E00020 E00020F00000F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E00001E0 0000F00000F0000070800070800070800070800070C00060C00060E000C0F000C0C80180 C6070081FC0014247DA21B>I<7FFFFFF878078078600780184007800840078008400780 08C007800C80078004800780048007800480078004000780000007800000078000000780 000007800000078000000780000007800000078000000780000007800000078000000780 000007800000078000000780000007800000078000000780000007800000078000000FC0 0003FFFF001E227EA123>I<0FE0001838003C0C003C0E00180700000700000700000700 00FF0007C7001E07003C0700780700700700F00708F00708F00708F00F087817083C2390 0FC1E015157E9418>97 D<0E0000FE00001E00000E00000E00000E00000E00000E00000E 00000E00000E00000E00000E00000E00000E1F000E61C00E80600F00300E00380E003C0E 001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00700C 80600C41C0083F0017237FA21B>I<01FE000703000C07801C0780380300780000700000 F00000F00000F00000F00000F00000F00000F000007000007800403800401C00800C0100 07060001F80012157E9416>I<0000E0000FE00001E00000E00000E00000E00000E00000 E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E01C01E03800E07800 E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03800E01801 E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C03801C01C03801C07801E070 00E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00400E 008007030000FC0013157F9416>I<003C00C6018F038F030F0700070007000700070007 00070007000700FFF8070007000700070007000700070007000700070007000700070007 00070007000700070007807FF8102380A20F>I<00007001F198071E180E0E181C07001C 07003C07803C07803C07803C07801C07001C07000E0E000F1C0019F00010000010000018 00001800001FFE000FFFC00FFFE03800F0600030400018C00018C00018C0001860003060 00303800E00E038003FE0015217F9518>I<0E0000FE00001E00000E00000E00000E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E1F800E60C00E80E00F0070 0F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070 0E00700E00700E00700E0070FFE7FF18237FA21B>I<1C001E003E001E001C0000000000 0000000000000000000000000E00FE001E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E00FFC00A227FA10E>I<01C003E003E003E001C000 00000000000000000000000000000001E00FE001E000E000E000E000E000E000E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0F1 8061803E000B2C82A10F>I<0E0000FE00001E00000E00000E00000E00000E00000E0000 0E00000E00000E00000E00000E00000E00000E03FC0E01F00E01C00E01800E02000E0400 0E08000E10000E38000EF8000F1C000E1E000E0E000E07000E07800E03C00E01C00E01E0 0E00F00E00F8FFE3FE17237FA21A>I<0E00FE001E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E00FFE00B237FA20E>I<0E1FC07F00FE60E183801E807201C0 0F003C00E00F003C00E00E003800E00E003800E00E003800E00E003800E00E003800E00E 003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E00 3800E00E003800E00E003800E0FFE3FF8FFE27157F942A>I<0E1F80FE60C01E80E00F00 700F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00 700E00700E00700E00700E0070FFE7FF18157F941B>I<01FC000707000C01801800C038 00E0700070700070F00078F00078F00078F00078F00078F00078F000787000707800F038 00E01C01C00E038007070001FC0015157F9418>I<0E1F00FE61C00E80600F00700E0038 0E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E0038 0F00700E80E00E41C00E3F000E00000E00000E00000E00000E00000E00000E00000E0000 0E0000FFE000171F7F941B>I<0E3CFE461E8F0F0F0F060F000E000E000E000E000E000E 000E000E000E000E000E000E000E000F00FFF010157F9413>114 D<0F8830786018C018C008C008E008F0007F803FE00FF001F8003C801C800C800CC00CC0 08E018D0308FC00E157E9413>I<02000200020002000600060006000E001E003E00FFF8 0E000E000E000E000E000E000E000E000E000E000E000E040E040E040E040E040E040708 030801F00E1F7F9E13>I<0E0070FE07F01E00F00E00700E00700E00700E00700E00700E 00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F006017003827800 FC7F18157F941B>III121 D E /Fv 20 118 df45 D68 D73 D77 D 80 D<007F802001FFE02007C078600F001C601E0006E03C0003E0380001E0780000E070 0000E070000060F0000060F0000060F0000020F0000020F0000020F8000020F80000007C 0000007E0000003F0000003FC000001FF800000FFF800007FFF80003FFFC0000FFFF0000 0FFF800000FFC000001FE0000007E0000003F0000001F0000000F0000000F8000000F880 00007880000078800000788000007880000078C0000078C0000070E00000F0E00000E0F0 0000E0F80001C0EC000380C7000700C1F01E00807FFC00800FF0001D337CB125>83 D<00FE00000303C0000C00E00010007000100038003C003C003E001C003E001E003E001E 0008001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E000F801E001F001E 003E001E003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E0478003E 047C005E043E008F080F0307F003FC03E01E1F7D9E21>97 D<003F8000E0600380180700 040F00041E001E1C003E3C003E7C003E7C0008780000F80000F80000F80000F80000F800 00F80000F80000F80000F800007800007C00007C00003C00011E00011E00020F00020700 0403801800E060003F80181F7D9E1D>99 D<000001E000003FE000003FE0000003E00000 01E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E00000 01E0000001E0000001E0000001E0000001E0000001E0001F81E000F061E001C019E00780 05E00F0003E00E0003E01E0001E03C0001E03C0001E07C0001E0780001E0F80001E0F800 01E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0780001E07800 01E03C0001E03C0001E01C0001E01E0003E00E0005E0070009E0038011F000E061FF003F 81FF20327DB125>I<003F800000E0E0000380380007003C000E001E001E001E001C000F 003C000F007C000F0078000F8078000780F8000780F8000780FFFFFF80F8000000F80000 00F8000000F8000000F8000000F8000000780000007C0000003C0000003C0000801E0000 800E0001000F0002000780020001C00C0000F03000001FC000191F7E9E1D>I<0007E000 1C1000383800707C00E07C01E07C01C03803C00003C00003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C000FFFFC0FFFFC003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C00003C00003C00003C00003C00007E0007FFF007F FF0016327FB114>I<000000F0007F030801C1C41C0380E81C070070080F0078001E003C 001E003C003E003E003E003E003E003E003E003E003E003E003E003E001E003C001E003C 000F007800070070000780E00009C1C000087F0000180000001800000018000000180000 00180000001C0000000E0000000FFFF80007FFFF0003FFFF800E000FC0180001E0300000 F070000070E0000038E0000038E0000038E0000038E00000387000007070000070380000 E01C0001C00700070001C01C00003FE0001E2F7E9F21>I<07000F801F801F800F800700 000000000000000000000000000000000000000000000780FF80FF800F80078007800780 078007800780078007800780078007800780078007800780078007800780078007800780 0780078007800FC0FFF8FFF80D307EAF12>105 D<0780FE001FC000FF83078060F000FF 8C03C18078000F9001E2003C0007A001E4003C0007A000F4001E0007C000F8001E0007C0 00F8001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000 F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0 001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F000 1E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E 000FC001F8003F00FFFC1FFF83FFF0FFFC1FFF83FFF0341F7E9E38>109 D<0780FE0000FF83078000FF8C03C0000F9001E00007A001E00007A000F00007C000F000 07C000F000078000F000078000F000078000F000078000F000078000F000078000F00007 8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 00F000078000F000078000F000078000F000078000F000078000F000078000F0000FC001 F800FFFC1FFF80FFFC1FFF80211F7E9E25>I<001FC00000F0780001C01C00070007000F 0007801E0003C01C0001C03C0001E03C0001E0780000F0780000F0780000F0F80000F8F8 0000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001F03C 0001E03C0001E01E0003C01E0003C00F00078007800F0001C01C0000F07800001FC0001D 1F7E9E21>I<0783E0FF8C18FF907C0F907C07A07C07C03807C00007C00007C000078000 078000078000078000078000078000078000078000078000078000078000078000078000 0780000780000780000780000780000780000FC000FFFE00FFFE00161F7E9E19>114 D<01FC100E03301800F0300070600030E00030E00010E00010E00010F00010F800007E00 003FF0001FFF000FFFC003FFE0003FF00001F80000F880003C80003C80001CC0001CC000 1CE0001CE00018F00038F00030CC0060C301C080FE00161F7E9E1A>I<00400000400000 400000400000400000C00000C00000C00001C00001C00003C00007C0000FC0001FFFE0FF FFE003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C01003C01003C01003C01003C01003C01003C01003 C01001C02001E02000E0400078C0001F00142C7FAB19>I<078000F000FF801FF000FF80 1FF0000F8001F000078000F000078000F000078000F000078000F000078000F000078000 F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0 00078000F000078000F000078000F000078000F000078000F000078000F000078001F000 078001F000078001F000038002F00003C004F00001C008F800007030FF80001FC0FF8021 1F7E9E25>I E /Fw 5 85 df<00000000C00000000000E00000000001E00000000003E0 0000000003E00000000007E00000000007E0000000000FE0000000000FE0000000001FE0 000000001FE00000000037E00000000067E00000000067E000000000C7E000000000C7F0 0000000183F00000000183F00000000303F00000000703F00000000603F00000000C03F0 0000000C03F00000001803F00000001803F00000003003F00000003003F00000006003F0 000000C003F0000000C003F00000018003F00000018003F8000003FFFFF8000003FFFFF8 0000060001F800000E0001F800000C0001F80000180001F80000180001F80000300001F8 0000300001F80000600001F80000E00001F80000C00001F80001C00001F80001C00001F8 0007C00001FC001FC00003FC00FFF8007FFFE0FFF8007FFFE02B327BB135>65 D<000FFFFFFE0000000FFFFFFF800000007F000FE00000007E0003F00000007E0000F800 00007E0000FC0000007E00007C000000FC00003E000000FC00003E000000FC00003F0000 00FC00001F000001F800001F000001F800001F800001F800001F800001F800001F800003 F000001F800003F000001F800003F000001F800003F000001F800007E000003F800007E0 00003F800007E000003F800007E000003F80000FC000003F00000FC000007F00000FC000 007F00000FC000007F00001F8000007E00001F800000FE00001F800000FE00001F800000 FC00003F000001FC00003F000001F800003F000001F800003F000003F000007E000003E0 00007E000007E000007E00000FC000007E00000F800000FC00001F800000FC00003F0000 00FC00007E000000FC0000FC000001F80001F0000001F80003E0000001F8000FC0000003 F8007F000000FFFFFFFC000000FFFFFFE000000031317BB036>68 D<000FFFFFFFFC000FFFFFFFFC00007F0001FC00007E00007C00007E00003C00007E0000 3C00007E0000180000FC0000180000FC0000180000FC0000180000FC0000180001F80000 180001F80000180001F80000180001F80000180003F00080100003F00180000003F00180 000003F00180000007E00300000007E00300000007E00700000007E01F0000000FFFFE00 00000FFFFE0000000FC01E0000000FC00E0000001F800C0000001F800C0000001F800C00 00001F800C0000003F00180000003F00080000003F00000000003F00000000007E000000 00007E00000000007E00000000007E0000000000FC0000000000FC0000000000FC000000 0000FC0000000001F80000000001F80000000001F80000000003F800000000FFFFF00000 00FFFFF00000002E317BB02F>70 D<000FFFFFF000000FFFFFFE0000007F003F8000007E 000FC000007E0007E000007E0003F000007E0001F80000FC0001F80000FC0001F80000FC 0001F80000FC0001F80001F80003F80001F80003F80001F80003F80001F80003F00003F0 0007F00003F00007E00003F0000FC00003F0000FC00007E0001F000007E0007E000007E0 00FC000007E007F000000FFFFFC000000FFFFF0000000FC00F8000000FC003C000001F80 03E000001F8001F000001F8001F000001F8001F800003F0001F800003F0001F800003F00 01F800003F0001F800007E0003F800007E0003F800007E0003F000007E0003F00000FC00 07F00000FC0007F00000FC0007F00800FC0007F00C01F80007F01801F80007F01801F800 03F03003F80003F030FFFFE001F0E0FFFFE000FFC0000000003F002E327BB034>82 D<07FFFFFFFFF00FFFFFFFFFF00FC00FE003F01E000FC000F01C000FC000E018000FC000 E038000FC0006030001F8000E030001F8000E060001F8000C060001F8000C060003F0000 C0C0003F0000C0C0003F0000C0C0003F0000C080007E00008000007E00000000007E0000 0000007E0000000000FC0000000000FC0000000000FC0000000000FC0000000001F80000 000001F80000000001F80000000001F80000000003F00000000003F00000000003F00000 000003F00000000007E00000000007E00000000007E00000000007E0000000000FC00000 00000FC0000000000FC0000000000FC0000000001F80000000001F80000000001F800000 00001F80000000003F00000000003F00000000003F0000000000FF00000000FFFFFF0000 00FFFFFF0000002C3173B033>84 D E end %%EndProlog %%BeginSetup %%Feature: *Resolution 300dpi TeXDict begin %%EndSetup %%Page: 0 1 0 0 bop 795 908 a Fw(D)26 b(R)g(A)f(F)h(T)225 999 y Fv(Do)r(cumen)n(t) 20 b(for)i(a)f(Standard)g(Message-P)n(assing)f(In)n(terface)621 1194 y Fu(Message)c(P)o(assing)h(In)o(terface)e(F)l(orum)832 1320 y(Ma)o(y)h(30,)g(1995)77 1378 y(This)h(w)o(ork)f(w)o(as)h(supp)q (orted)g(in)f(part)h(b)o(y)e(ARP)l(A)h(and)h(NSF)e(under)h(gran)o(t)h (ASC-9310330,)i(the)192 1436 y(National)d(Science)f(F)l(oundation)i (Science)e(and)i(T)l(ec)o(hnology)f(Cen)o(ter)f(Co)q(op)q(erativ)o(e)76 1494 y(Agreemen)o(t)e(No.)22 b(CCR-8809615,)d(and)e(b)o(y)e(the)h (Commission)e(of)j(the)f(Europ)q(ean)i(Comm)o(unit)n(y)654 1552 y(through)f(Esprit)f(pro)s(ject)g(P6643.)p eop %%Page: 1 2 1 1 bop 166 45 a Ft(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 102 y(Rep)q(ort)d(do)q(cumen)o(t.)969 2828 y(i)p eop %%Page: 1 3 1 2 bop 75 356 a Fs(Chapter)34 b(1)75 564 y Fr(Groups,)40 b(Con)m(texts,)g(and)75 689 y(Comm)m(unicators)75 929 y Fq(1.1)59 b(Intro)r(duction)75 1031 y Ft(This)20 b(c)o(hapter)g(in)o (tro)q(duces)h Fp(MPI)e Ft(features)g(that)h(supp)q(ort)g(the)f(dev)o (elopmen)o(t)i(of)e(parallel)j(libraries.)75 1087 y(P)o(arallel)15 b(libraries)h(are)f(needed)g(to)f(encapsulate)i(the)e(distracting)h (complications)h(inheren)o(t)f(in)h(paral-)75 1144 y(lel)i(implemen)o (tations)g(of)f(k)o(ey)g(algorithms.)24 b(They)18 b(help)g(to)e(ensure) h(consisten)o(t)g(correctness)g(of)g(suc)o(h)75 1200 y(pro)q(cedures,)22 b(and)e(pro)o(vide)h(a)f(\\higher)h(lev)o(el")g(of) f(p)q(ortabilit)o(y)h(than)f Fp(MPI)g Ft(itself)h(can)f(pro)o(vide.)36 b(As)75 1257 y(suc)o(h,)23 b(libraries)g(prev)o(en)o(t)e(eac)o(h)g (programmer)f(from)h(rep)q(eating)h(the)g(w)o(ork)e(of)h(de\014ning)i (consisten)o(t)75 1313 y(data)14 b(structures,)f(data)h(la)o(y)o(outs,) g(and)g(metho)q(ds)g(that)g(implemen)o(t)i(k)o(ey)e(algorithms)g(\(suc) o(h)g(as)g(matrix)75 1369 y(op)q(erations\).)24 b(Since)18 b(the)e(b)q(est)h(libraries)h(come)e(with)h(sev)o(eral)g(v)m(ariations) g(on)f(parallel)i(systems)e(\(dif-)75 1426 y(feren)o(t)f(data)g(la)o(y) o(outs,)g(di\013eren)o(t)g(strategies)g(dep)q(ending)j(on)e(the)f(size) i(of)e(the)g(system)h(or)f(problem,)g(or)75 1482 y(t)o(yp)q(e)g(of)g (\015oating)g(p)q(oin)o(t\),)g(this)h(to)q(o)e(needs)i(to)f(b)q(e)h (hidden)h(from)d(the)h(user.)166 1539 y(W)l(e)i(refer)g(the)g(reader)g (to)f([4])g(and)i([1)o(])f(for)f(further)h(information)g(on)g(writing)g (libraries)i(in)f Fp(MPI)p Ft(,)75 1595 y(using)e(the)f(features)g (describ)q(ed)i(in)f(this)g(c)o(hapter.)75 1717 y Fo(1.1.1)49 b(F)o(eatures)14 b(Needed)i(to)g(Supp)q(o)o(rt)g(Lib)o(ra)o(ries)75 1803 y Ft(The)f(k)o(ey)h(features)e(needed)j(to)d(supp)q(ort)i(the)f (creation)g(of)g(robust)g(parallel)i(libraries)f(are)f(as)g(follo)o (ws:)143 1897 y Fn(\017)23 b Ft(Safe)18 b(comm)o(unication)i(space,)g (that)e(guaran)o(tees)g(that)g(libraries)i(can)f(comm)o(unicate)g(as)g (they)189 1953 y(need)d(to,)e(without)h(con\015icting)i(with)e(comm)o (unication)h(extraneous)f(to)g(the)g(library)l(,)143 2047 y Fn(\017)23 b Ft(Group)14 b(scop)q(e)h(for)g(collectiv)o(e)h(op)q (erations,)f(that)f(allo)o(w)h(libraries)h(to)e(a)o(v)o(oid)h (unnecessarily)i(syn-)189 2103 y(c)o(hronizing)f(unin)o(v)o(olv)o(ed)h (pro)q(cesses)e(\(p)q(oten)o(tially)i(running)f(unrelated)g(co)q(de\),) 143 2197 y Fn(\017)23 b Ft(Abstract)15 b(pro)q(cess)h(naming)h(to)e (allo)o(w)h(libraries)i(to)d(describ)q(e)j(their)e(comm)o(unication)h (in)g(terms)189 2254 y(suitable)f(to)f(their)g(o)o(wn)g(data)g (structures)f(and)i(algorithms,)143 2347 y Fn(\017)23 b Ft(The)14 b(abilit)o(y)i(to)e(\\adorn")f(a)h(set)h(of)f(comm)o (unicating)h(pro)q(cesses)g(with)f(additional)i(user-de\014ned)189 2404 y(attributes,)23 b(suc)o(h)f(as)g(extra)g(collectiv)o(e)i(op)q (erations.)41 b(This)23 b(mec)o(hanism)f(should)i(pro)o(vide)e(a)189 2460 y(means)15 b(for)f(the)h(user)g(or)g(library)h(writer)f (e\013ectiv)o(ely)h(to)e(extend)i(a)f(message-passing)g(notation.)75 2554 y(In)f(addition,)h(a)f(uni\014ed)h(mec)o(hanism)g(or)e(ob)s(ject)g (is)i(needed)g(for)e(con)o(v)o(enien)o(tly)i(denoting)f(comm)o(unica-) 75 2611 y(tion)g(con)o(text,)f(the)h(group)f(of)g(comm)o(unicating)h (pro)q(cesses,)g(to)f(house)h(abstract)f(pro)q(cess)h(naming,)g(and)75 2667 y(to)h(store)f(adornmen)o(ts.)-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: 2 4 2 3 bop 75 -100 a Ft(2)411 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fo(1.1.2)49 b(MPI's)16 b(Supp)q(o)o(rt)g(fo)o(r)g(Lib)o(ra)o(ries)75 131 y Ft(The)f(corresp)q(onding)h(concepts)g(that)e Fp(MPI)h Ft(pro)o(vides,)g(sp)q(eci\014cally)j(to)c(supp)q(ort)h(robust)g (libraries,)h(are)75 187 y(as)f(follo)o(ws:)143 281 y Fn(\017)23 b Fk(Con)o(texts)14 b Ft(of)h(comm)o(unication,)143 375 y Fn(\017)23 b Fk(Groups)14 b Ft(of)h(pro)q(cesses,)143 469 y Fn(\017)23 b Fk(Virtual)18 b(top)q(ologies)p Ft(,)143 563 y Fn(\017)23 b Fk(A)o(ttribute)17 b(cac)o(hing)p Ft(,)143 656 y Fn(\017)23 b Fk(Comm)o(unicators)p Ft(.)75 750 y Fk(Comm)o(unicators)17 b Ft(\(see)g([2)o(,)g(3,)g(5)o(]\))g (encapsulate)h(all)h(of)d(these)i(ideas)g(in)g(order)f(to)g(pro)o(vide) g(the)h(ap-)75 807 y(propriate)e(scop)q(e)g(for)f(all)i(comm)o (unication)f(op)q(erations)g(in)h Fp(MPI)p Ft(.)e(Comm)o(unicators)g (are)g(divided)j(in)o(to)75 863 y(t)o(w)o(o)11 b(kinds:)20 b(in)o(tra-comm)o(unicators)12 b(for)f(op)q(erations)i(within)h(a)e (single)i(group)e(of)g(pro)q(cesses,)h(and)g(in)o(ter-)75 920 y(comm)o(unicators,)h(for)h(p)q(oin)o(t-to-p)q(oin)o(t)h(comm)o (unication)g(b)q(et)o(w)o(een)f(t)o(w)o(o)f(groups)h(of)g(pro)q (cesses.)75 1040 y Fp(Caching.)46 b Ft(Comm)o(unicators)17 b(\(see)g(b)q(elo)o(w\))i(pro)o(vide)f(a)f(\\cac)o(hing")h(mec)o (hanism)h(that)e(allo)o(ws)h(one)g(to)75 1096 y(asso)q(ciate)h(new)g (attributes)g(with)g(comm)o(unicators,)g(on)g(a)g(par)g(with)g Fp(MPI)f Ft(built-in)k(features.)30 b(This)75 1153 y(can)15 b(b)q(e)h(used)g(b)o(y)f(adv)m(anced)h(users)f(to)f(adorn)h(comm)o (unicators)g(further,)f(and)i(b)o(y)f Fp(MPI)f Ft(to)h(implemen)o(t)75 1209 y(some)20 b(comm)o(unicator)g(functions.)35 b(F)l(or)19 b(example,)j(the)f(virtual-top)q(ology)f(functions)h(describ)q(ed)h(in) 75 1266 y(Chapter)15 b Fk(??)k Ft(are)c(lik)o(ely)i(to)e(b)q(e)h(supp)q (orted)f(this)h(w)o(a)o(y)l(.)75 1386 y Fp(Groups.)46 b Ft(Groups)16 b(de\014ne)h(an)f(ordered)g(collection)i(of)e(pro)q (cesses,)g(eac)o(h)g(with)h(a)f(rank,)f(and)i(it)f(is)h(this)75 1442 y(group)d(that)g(de\014nes)i(the)f(lo)o(w-lev)o(el)h(names)e(for)g (in)o(ter-pro)q(cess)i(comm)o(unication)f(\(ranks)f(are)g(used)i(for)75 1498 y(sending)k(and)g(receiving\).)33 b(Th)o(us,)20 b(groups)e(de\014ne)j(a)d(scop)q(e)i(for)f(pro)q(cess)g(names)g(in)h(p) q(oin)o(t-to-p)q(oin)o(t)75 1555 y(comm)o(unication.)i(In)16 b(addition,)h(groups)e(de\014ne)i(the)e(scop)q(e)i(of)e(collectiv)o(e)i (op)q(erations.)k(Groups)16 b(ma)o(y)75 1611 y(b)q(e)k(manipulated)h (separately)f(from)e(comm)o(unicators)h(in)i Fp(MPI)p Ft(,)d(but)i(only)g(comm)o(unicators)f(can)g(b)q(e)75 1668 y(used)d(in)g(comm)o(unication)g(op)q(erations.)75 1788 y Fp(Intra-communicato)o(rs.)44 b Ft(The)18 b(most)f(commonly)g (used)i(means)e(for)g(message)g(passing)h(in)h Fp(MPI)e Ft(is)h(via)75 1844 y(in)o(tra-comm)o(unicators.)41 b(In)o(tra-comm)o (unicators)22 b(con)o(tain)g(an)h(instance)g(of)f(a)g(group,)i(con)o (texts)d(of)75 1901 y(comm)o(unication)g(for)e(b)q(oth)h(p)q(oin)o (t-to-p)q(oin)o(t)h(and)f(collectiv)o(e)i(comm)o(unication,)g(and)e (the)g(abilit)o(y)i(to)75 1957 y(include)c(virtual)d(top)q(ology)g(and) h(other)e(attributes.)20 b(These)c(features)f(w)o(ork)f(as)h(follo)o (ws:)143 2051 y Fn(\017)23 b Fk(Con)o(texts)13 b Ft(pro)o(vide)i(the)g (abilit)o(y)h(to)d(ha)o(v)o(e)h(separate)g(safe)g(\\univ)o(erses")h(of) f(message)g(passing)h(in)189 2108 y Fp(MPI)p Ft(.)f(A)h(con)o(text)g (is)h(akin)f(to)g(an)g(additional)i(tag)d(that)h(di\013eren)o(tiates)g (messages.)20 b(The)15 b(system)189 2164 y(manages)20 b(this)h(di\013eren)o(tiation)g(pro)q(cess.)36 b(The)21 b(use)g(of)f(separate)g(comm)o(unication)i(con)o(texts)189 2220 y(b)o(y)13 b(distinct)i(libraries)g(\(or)e(distinct)i(library)f (in)o(v)o(o)q(cations\))g(insulates)h(comm)o(unication)f(in)o(ternal) 189 2277 y(to)h(the)h(library)h(execution)g(from)e(external)h(comm)o (unication.)23 b(This)17 b(allo)o(ws)f(the)g(in)o(v)o(o)q(cation)g(of) 189 2333 y(the)e(library)g(ev)o(en)h(if)f(there)g(are)g(p)q(ending)i (comm)o(unications)e(on)g(\\other")f(comm)o(unicators,)h(and)189 2390 y(a)o(v)o(oids)f(the)h(need)g(to)f(sync)o(hronize)i(en)o(try)e(or) g(exit)i(in)o(to)e(library)i(co)q(de.)20 b(P)o(ending)14 b(p)q(oin)o(t-to-p)q(oin)o(t)189 2446 y(comm)o(unications)j(are)g(also) f(guaran)o(teed)h(not)f(to)g(in)o(terfere)i(with)f(collectiv)o(e)h (comm)o(unications)189 2503 y(within)e(a)f(single)h(comm)o(unicator.) 143 2597 y Fn(\017)23 b Fk(Groups)12 b Ft(de\014ne)i(the)e(participan)o (ts)i(in)f(the)g(comm)o(unication)g(\(see)g(ab)q(o)o(v)o(e\))f(of)g(a)h (comm)o(unicator.)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 Fl(1.1.)34 b(INTR)o(ODUCTION)1301 b Ft(3)143 45 y Fn(\017)23 b Ft(A)14 b Fk(virtual)j(top)q(ology)f Ft(de\014nes)f(a)f(sp)q(ecial)i(mapping)f(of)f(the)h(ranks)f(in)h(a)f (group)g(to)f(and)i(from)e(a)189 102 y(top)q(ology)l(.)18 b(Sp)q(ecial)c(constructors)d(for)g(comm)o(unicators)h(are)f(de\014ned) i(in)g(c)o(hapter)f Fk(??)18 b Ft(to)11 b(pro)o(vide)189 158 y(this)i(feature.)19 b(In)o(tra-comm)o(unicators)12 b(as)h(describ)q(ed)i(in)f(this)f(c)o(hapter)g(do)g(not)f(ha)o(v)o(e)h (top)q(ologies.)143 252 y Fn(\017)23 b Fk(A)o(ttributes)14 b Ft(de\014ne)h(the)g(lo)q(cal)g(information)g(that)f(the)g(user)h(or)f (library)h(has)f(added)h(to)f(a)g(com-)189 308 y(m)o(unicator)h(for)f (later)h(reference.)189 415 y Fj(A)n(dvic)n(e)f(to)i(users.)40 b Ft(The)15 b(curren)o(t)f(practice)i(in)f(man)o(y)f(comm)o(unication)i (libraries)g(is)f(that)f(there)189 471 y(is)k(a)f(unique,)i (prede\014ned)g(comm)o(unication)g(univ)o(erse)f(that)f(includes)j(all) e(pro)q(cesses)g(a)o(v)m(ailable)189 527 y(when)f(the)f(parallel)i (program)d(is)i(initiated;)i(the)d(pro)q(cesses)h(are)f(assigned)h (consecutiv)o(e)h(ranks.)189 584 y(P)o(articipan)o(ts)d(in)h(a)g(p)q (oin)o(t-to-p)q(oin)o(t)g(comm)o(unication)g(are)g(iden)o(ti\014ed)h(b) o(y)f(their)g(rank;)f(a)g(collec-)189 640 y(tiv)o(e)i(comm)o(unication) h(\(suc)o(h)g(as)f(broadcast\))f(alw)o(a)o(ys)g(in)o(v)o(olv)o(es)i (all)h(pro)q(cesses.)26 b(This)18 b(practice)189 697 y(can)e(b)q(e)g(follo)o(w)o(ed)h(in)g Fp(MPI)e Ft(b)o(y)h(using)h(the)f (prede\014ned)i(comm)o(unicator)d Fp(MPI)p 1529 697 14 2 v 16 w(COMM)p 1687 697 V 16 w(W)o(ORLD)p Ft(.)189 753 y Fj(Users)i(who)h(ar)n(e)g(satis\014e)n(d)f(with)h(this)g(pr)n(actic)n (e)f(c)n(an)h(plug)g(in)f Fp(MPI)p 1351 753 V 16 w(COMM)p 1509 753 V 16 w(W)o(ORLD)h Fj(wher)n(ever)189 810 y(a)f(c)n(ommunic)n (ator)g(ar)n(gument)g(is)f(r)n(e)n(quir)n(e)n(d,)g(and)h(c)n(an)f(c)n (onse)n(quently)f(disr)n(e)n(gar)n(d)h(the)h(r)n(est)f(of)h(this)189 866 y(chapter.)k Ft(\()p Fj(End)15 b(of)i(advic)n(e)f(to)g(users.)p Ft(\))75 986 y Fp(Inter-communicato)o(rs.)44 b Ft(The)18 b(discussion)h(has)f(dealt)g(so)f(far)g(with)g Fk(in)o(tra-comm)o (unication)p Ft(:)27 b(com-)75 1043 y(m)o(unication)21 b(within)h(a)e(group.)36 b Fp(MPI)19 b Ft(also)i(supp)q(orts)f Fk(in)o(ter-comm)o(unication)p Ft(:)32 b(comm)o(unication)75 1099 y(b)q(et)o(w)o(een)18 b(t)o(w)o(o)f(non-o)o(v)o(erlapping)i (groups.)28 b(When)18 b(an)g(application)i(is)e(built)h(b)o(y)f(comp)q (osing)h(sev)o(eral)75 1156 y(parallel)e(mo)q(dules,)g(it)f(is)h(con)o (v)o(enien)o(t)f(to)f(allo)o(w)h(one)g(mo)q(dule)h(to)e(comm)o(unicate) i(with)f(another)f(using)75 1212 y(lo)q(cal)22 b(ranks)e(for)f (addressing)i(within)h(the)f(second)f(mo)q(dule.)37 b(This)21 b(is)g(esp)q(ecially)i(con)o(v)o(enien)o(t)e(in)g(a)75 1269 y(clien)o(t-serv)o(er)e(computing)f(paradigm,)g(where)g(either)h (clien)o(t)g(or)e(serv)o(er)g(are)h(parallel.)29 b(The)18 b(supp)q(ort)75 1325 y(of)f(in)o(ter-comm)o(unication)h(also)f(pro)o (vides)g(a)g(mec)o(hanism)g(for)f(the)i(extension)f(of)g Fp(MPI)f Ft(to)g(a)h(dynamic)75 1381 y(mo)q(del)h(where)g(not)f(all)i (pro)q(cesses)f(are)f(preallo)q(cated)h(at)f(initialization)k(time.)27 b(In)18 b(suc)o(h)g(a)f(situation,)75 1438 y(it)h(b)q(ecomes)g (necessary)g(to)g(supp)q(ort)f(comm)o(unication)i(across)e(\\univ)o (erses.")28 b(In)o(ter-comm)o(unication)75 1494 y(is)17 b(supp)q(orted)f(b)o(y)g(ob)s(jects)g(called)h Fk(in)o(ter-comm)o (unicators)p Ft(.)23 b(These)16 b(ob)s(jects)g(bind)h(t)o(w)o(o)e (groups)g(to-)75 1551 y(gether)c(with)h(comm)o(unication)g(con)o(texts) e(shared)i(b)o(y)f(b)q(oth)g(groups.)18 b(F)l(or)11 b(in)o(ter-comm)o (unicators,)h(these)75 1607 y(features)j(w)o(ork)f(as)h(follo)o(ws:)143 1701 y Fn(\017)23 b Fk(Con)o(texts)16 b Ft(pro)o(vide)i(the)f(abilit)o (y)i(to)d(ha)o(v)o(e)h(a)g(separate)g(safe)f(\\univ)o(erse")i(of)f (message)g(passing)189 1758 y(b)q(et)o(w)o(een)k(the)f(t)o(w)o(o)g (groups.)36 b(A)21 b(send)g(in)g(the)g(lo)q(cal)h(group)e(is)i(alw)o(a) o(ys)e(a)g(receiv)o(e)i(in)f(the)g(re-)189 1814 y(mote)d(group,)g(and)h (vice)h(v)o(ersa.)29 b(The)19 b(system)f(manages)g(this)h(di\013eren)o (tiation)g(pro)q(cess.)31 b(The)189 1870 y(use)19 b(of)f(separate)g (comm)o(unication)i(con)o(texts)e(b)o(y)g(distinct)i(libraries)h(\(or)d (distinct)h(library)h(in-)189 1927 y(v)o(o)q(cations\))f(insulates)i (comm)o(unication)g(in)o(ternal)f(to)g(the)g(library)g(execution)h (from)f(external)189 1983 y(comm)o(unication.)29 b(This)19 b(allo)o(ws)f(the)g(in)o(v)o(o)q(cation)h(of)f(the)g(library)h(ev)o(en) f(if)h(there)f(are)g(p)q(ending)189 2040 y(comm)o(unications)c(on)f (\\other")f(comm)o(unicators,)h(and)h(a)o(v)o(oids)f(the)g(need)h(to)f (sync)o(hronize)h(en)o(try)189 2096 y(or)k(exit)h(in)o(to)g(library)h (co)q(de.)32 b(There)19 b(is)g(no)g(general-purp)q(ose)i(collectiv)o(e) f(comm)o(unication)g(on)189 2153 y(in)o(ter-comm)o(unicators,)d(so)g (con)o(texts)f(are)h(used)h(just)e(to)h(isolate)h(p)q(oin)o(t-to-p)q (oin)o(t)f(comm)o(unica-)189 2209 y(tion.)143 2303 y Fn(\017)23 b Ft(A)c(lo)q(cal)i(and)e(remote)g(group)g(sp)q(ecify)i(the) f(recipien)o(ts)h(and)e(destinations)h(for)f(an)h(in)o(ter-com-)189 2359 y(m)o(unicator.)143 2453 y Fn(\017)j Ft(Virtual)16 b(top)q(ology)e(is)i(unde\014ned)h(for)e(an)g(in)o(ter-comm)o (unicator.)143 2547 y Fn(\017)23 b Ft(As)16 b(b)q(efore,)g(attributes)g (cac)o(he)h(de\014nes)g(the)f(lo)q(cal)i(information)e(that)g(the)g (user)g(or)g(library)h(has)189 2604 y(added)e(to)g(a)g(comm)o(unicator) g(for)f(later)i(reference.)-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 Ft(4)411 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)166 45 y Fp(MPI)i Ft(pro)o(vides)i(mec)o(hanisms)g(for)e(creating)h(and)h(manipulating)g (in)o(ter-comm)o(unicators.)29 b(They)75 102 y(are)18 b(used)h(for)f(p)q(oin)o(t-to-p)q(oin)o(t)h(comm)o(unication)g(in)g(an) f(related)h(manner)f(to)g(in)o(tra-comm)o(unicators.)75 158 y(Users)j(who)g(do)g(not)g(need)h(in)o(ter-comm)o(unication)h(in)f (their)f(applications)i(can)e(safely)h(ignore)g(this)75 214 y(extension.)k(Users)18 b(who)e(need)i(collectiv)o(e)h(op)q (erations)f(via)f(in)o(ter-comm)o(unicators)g(m)o(ust)g(la)o(y)o(er)g (it)g(on)75 271 y(top)e(of)h Fp(MPI)p Ft(.)f(Users)g(who)h(require)h (in)o(ter-comm)o(unication)g(b)q(et)o(w)o(een)f(o)o(v)o(erlapping)g (groups)g(m)o(ust)f(also)75 327 y(la)o(y)o(er)g(this)h(capabilit)o(y)g (on)f(top)g(of)g Fp(MPI)p Ft(.)75 471 y Fq(1.2)59 b(Basic)19 b(Concepts)75 572 y Ft(In)d(this)f(section,)h(w)o(e)f(turn)g(to)f(a)h (more)g(formal)g(de\014nition)i(of)e(the)g(concepts)h(in)o(tro)q(duced) g(ab)q(o)o(v)o(e.)75 694 y Fo(1.2.1)49 b(Groups)75 780 y Ft(A)24 b Fk(group)h Ft(is)g(an)f(ordered)h(set)f(of)g(pro)q(cess)g (iden)o(ti\014ers)i(\(henceforth)f(pro)q(cesses\);)j(pro)q(cesses)d (are)75 836 y(implemen)o(tation-dep)q(endent)e(ob)s(jects.)36 b(Eac)o(h)20 b(pro)q(cess)i(in)f(a)g(group)f(is)h(asso)q(ciated)g(with) h(an)e(in)o(te-)75 893 y(ger)e Fk(rank)p Ft(.)28 b(Ranks)18 b(are)g(con)o(tiguous)g(and)g(start)f(from)g(zero.)28 b(Groups)18 b(are)f(represen)o(ted)i(b)o(y)f(opaque)75 949 y Fk(group)g(ob)s(jects)p Ft(,)f(and)f(hence)h(cannot)f(b)q(e)h (directly)g(transferred)f(from)f(one)i(pro)q(cess)f(to)g(another.)22 b(A)75 1005 y(group)13 b(is)h(used)g(within)g(a)f(comm)o(unicator)g(to) g(describ)q(e)i(the)e(participan)o(ts)h(in)g(a)f(comm)o(unication)h (\\uni-)75 1062 y(v)o(erse")d(and)i(to)e(rank)g(suc)o(h)i(participan)o (ts)f(\(th)o(us)f(giving)i(them)f(unique)h(names)f(within)h(that)f (\\univ)o(erse")75 1118 y(of)j(comm)o(unication\).)166 1175 y(There)20 b(is)f(a)h(sp)q(ecial)h(pre-de\014ned)g(group:)28 b Fi(MPI)p 1017 1175 13 2 v 14 w(GROUP)p 1173 1175 V 13 w(EMPTY)p Ft(,)19 b(whic)o(h)h(is)g(a)f(group)g(with)h(no)75 1231 y(mem)o(b)q(ers.)33 b(The)20 b(prede\014ned)h(constan)o(t)d Fi(MPI)p 884 1231 V 15 w(GROUP)p 1041 1231 V 13 w(NULL)i Ft(is)g(the)g(v)m(alue)g(used)h(for)d(in)o(v)m(alid)k(group)75 1288 y(handles.)189 1394 y Fj(A)n(dvic)n(e)c(to)i(users.)62 b Fi(MPI)p 650 1394 V 14 w(GROUP)p 806 1394 V 13 w(EMPTY)p Ft(,)18 b(whic)o(h)i(is)f(a)g(v)m(alid)h(handle)g(to)e(an)h(empt)o(y)g (group,)189 1450 y(should)h(not)f(b)q(e)h(confused)h(with)e Fi(MPI)p 863 1450 V 15 w(GROUP)p 1020 1450 V 13 w(NULL)p Ft(,)h(whic)o(h)g(in)g(turn)g(is)g(an)f(in)o(v)m(alid)j(handle.)189 1507 y(The)e(former)f(ma)o(y)g(b)q(e)h(used)g(as)g(an)f(argumen)o(t)g (to)h(group)f(op)q(erations;)j(the)e(latter,)g(whic)o(h)g(is)189 1563 y(returned)15 b(when)h(a)f(group)g(is)g(freed,)h(in)g(not)e(a)h(v) m(alid)i(argumen)o(t.)i(\()p Fj(End)d(of)g(advic)n(e)g(to)h(users.)p Ft(\))189 1670 y Fj(A)n(dvic)n(e)g(to)h(implementors.)53 b Ft(A)18 b(group)f(ma)o(y)f(b)q(e)i(represen)o(ted)g(b)o(y)f(a)g (virtual-to-real)i(pro)q(cess-)189 1726 y(address-translation)11 b(table.)19 b(Eac)o(h)11 b(comm)o(unicator)f(ob)s(ject)h(\(see)g(b)q (elo)o(w\))g(w)o(ould)g(ha)o(v)o(e)g(a)f(p)q(oin)o(ter)189 1782 y(to)k(suc)o(h)i(a)f(table.)189 1858 y(Simple)j(implemen)o (tations)g(of)e Fp(MPI)g Ft(will)i(en)o(umerate)e(groups,)g(suc)o(h)h (as)f(in)i(a)e(table.)24 b(Ho)o(w)o(ev)o(er,)189 1914 y(more)11 b(adv)m(anced)i(data)e(structures)g(mak)o(e)g(sense)i(in)f (order)g(to)f(impro)o(v)o(e)g(scalabilit)o(y)j(and)e(memory)189 1971 y(usage)j(with)g(large)h(n)o(um)o(b)q(ers)f(of)g(pro)q(cesses.)21 b(Suc)o(h)16 b(implemen)o(tations)g(are)f(p)q(ossible)i(with)f Fp(MPI)p Ft(.)189 2027 y(\()p Fj(End)f(of)i(advic)n(e)f(to)g (implementors.)p Ft(\))75 2149 y Fo(1.2.2)49 b(Contexts)75 2235 y Ft(A)18 b Fk(con)o(text)g Ft(is)h(a)f(prop)q(ert)o(y)f(of)h (comm)o(unicators)g(\(de\014ned)h(next\))f(that)f(allo)o(ws)h (partitioning)h(of)f(the)75 2291 y(comm)o(unication)13 b(space.)19 b(A)12 b(message)g(sen)o(t)g(in)h(one)f(con)o(text)g (cannot)g(b)q(e)h(receiv)o(ed)g(in)g(another)f(con)o(text.)75 2347 y(F)l(urthermore,)17 b(where)g(p)q(ermitted,)h(collectiv)o(e)h(op) q(erations)e(are)g(indep)q(enden)o(t)i(of)e(p)q(ending)i(p)q(oin)o (t-to-)75 2404 y(p)q(oin)o(t)g(op)q(erations.)28 b(Con)o(texts)17 b(are)h(not)f(explicit)k Fp(MPI)c Ft(ob)s(jects;)h(they)g(app)q(ear)h (only)f(as)g(part)f(of)h(the)75 2460 y(realization)e(of)f(comm)o (unicators)g(\(b)q(elo)o(w\).)189 2567 y Fj(A)n(dvic)n(e)h(to)i (implementors.)48 b Ft(Distinct)17 b(comm)o(unicators)f(in)h(the)g (same)f(pro)q(cess)h(ha)o(v)o(e)f(distinct)189 2623 y(con)o(texts.)31 b(A)20 b(con)o(text)f(is)g(essen)o(tially)i(a)e(system-managed)g(tag)g (\(or)f(tags\))g(needed)j(to)d(mak)o(e)189 2680 y(a)i(comm)o(unicator)h (safe)g(for)f(p)q(oin)o(t-to-p)q(oin)o(t)i(and)f Fp(MPI)p Ft(-de\014ned)h(collectiv)o(e)h(comm)o(unication.)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 Fl(1.2.)34 b(BASIC)16 b(CONCEPTS)1260 b Ft(5)189 45 y(Safet)o(y)18 b(means)h(that)f(collectiv)o(e)j(and)e(p)q (oin)o(t-to-p)q(oin)o(t)g(comm)o(unication)h(within)g(one)f(comm)o(u-) 189 102 y(nicator)d(do)g(not)g(in)o(terfere,)h(and)g(that)e(comm)o (unication)i(o)o(v)o(er)f(distinct)h(comm)o(unicators)f(don't)189 158 y(in)o(terfere.)189 230 y(A)c(p)q(ossible)i(implemen)o(tation)f (for)e(a)h(con)o(text)g(is)g(as)g(a)g(supplemen)o(tal)h(tag)f(attac)o (hed)f(to)g(messages)189 287 y(on)j(send)g(and)h(matc)o(hed)f(on)g (receiv)o(e.)20 b(Eac)o(h)14 b(in)o(tra-comm)o(unicator)g(stores)g(the) g(v)m(alue)h(of)f(its)g(t)o(w)o(o)189 343 y(tags)i(\(one)i(for)f(p)q (oin)o(t-to-p)q(oin)o(t)h(and)g(one)g(for)f(collectiv)o(e)i(comm)o (unication\).)28 b(Comm)o(unicator-)189 400 y(generating)19 b(functions)i(use)f(a)f(collectiv)o(e)j(comm)o(unication)e(to)f(agree)g (on)h(a)f(new)h(group-wide)189 456 y(unique)c(con)o(text.)189 528 y(Analogously)l(,)c(in)f(in)o(ter-comm)o(unication)h(\(whic)o(h)f (is)g(strictly)g(p)q(oin)o(t-to-p)q(oin)o(t)g(comm)o(unication\),)189 585 y(t)o(w)o(o)f(con)o(text)h(tags)g(are)h(stored)f(p)q(er)i(comm)o (unicator,)f(one)g(used)g(b)o(y)g(group)g(A)f(to)h(send)g(and)g(group) 189 641 y(B)j(to)g(receiv)o(e,)g(and)h(a)f(second)g(used)h(b)o(y)f (group)g(B)g(to)g(send)h(and)f(for)g(group)g(A)g(to)f(receiv)o(e.)189 713 y(Since)h(con)o(texts)f(are)f(not)h(explicit)i(ob)s(jects,)e(other) f(implemen)o(tations)j(are)d(also)h(p)q(ossible.)22 b(\()p Fj(End)189 770 y(of)16 b(advic)n(e)g(to)h(implementors.)p Ft(\))75 889 y Fo(1.2.3)49 b(Intra-Communicato)o(rs)75 975 y Ft(In)o(tra-comm)o(unicators)26 b(bring)i(together)e(the)h (concepts)h(of)e(group)h(and)g(con)o(text.)55 b(T)l(o)27 b(supp)q(ort)75 1031 y(implemen)o(tation-sp)q(eci\014c)15 b(optimizations,)e(and)f(application)h(top)q(ologies)g(\(de\014ned)f (in)h(the)f(next)g(c)o(hap-)75 1087 y(ter,)i(c)o(hapter)g Fk(??)p Ft(\),)g(comm)o(unicators)g(ma)o(y)g(also)h(\\cac)o(he")f (additional)i(information)f(\(see)f(section)i(1.7\).)75 1144 y Fp(MPI)j Ft(comm)o(unication)g(op)q(erations)h(reference)f(comm) o(unicators)g(to)g(determine)h(the)f(scop)q(e)h(and)f(the)75 1200 y(\\comm)o(unication)d(univ)o(erse")g(in)g(whic)o(h)g(a)e(p)q(oin) o(t-to-p)q(oin)o(t)i(or)f(collectiv)o(e)i(op)q(eration)e(is)h(to)f(op)q (erate.)166 1257 y(Eac)o(h)g(comm)o(unicator)h(con)o(tains)g(a)f(group) g(of)h(v)m(alid)h(participan)o(ts;)f(this)g(group)g(alw)o(a)o(ys)f (includes)75 1313 y(the)k(lo)q(cal)h(pro)q(cess.)32 b(The)20 b(source)f(and)g(destination)h(of)f(a)f(message)h(is)h(iden)o(ti\014ed) h(b)o(y)e(pro)q(cess)g(rank)75 1370 y(within)d(that)f(group.)166 1426 y(F)l(or)10 b(collectiv)o(e)j(comm)o(unication,)f(the)f(in)o (tra-comm)o(unicator)g(sp)q(eci\014es)i(the)e(set)g(of)f(pro)q(cesses)i (that)75 1483 y(participate)g(in)g(the)g(collectiv)o(e)h(op)q(eration)e (\(and)h(their)f(order,)h(when)g(signi\014can)o(t\).)19 b(Th)o(us,)12 b(the)f(comm)o(u-)75 1539 y(nicator)16 b(restricts)g(the)g(\\spatial")g(scop)q(e)h(of)e(comm)o(unication,)i (and)f(pro)o(vides)h(mac)o(hine-indep)q(endent)75 1596 y(pro)q(cess)e(addressing)h(through)f(ranks.)166 1652 y(In)o(tra-comm)o(unicators)h(are)h(represen)o(ted)g(b)o(y)g(opaque)g Fk(in)o(tra-comm)o(unicator)k(ob)s(jects)p Ft(,)c(and)75 1708 y(hence)f(cannot)f(b)q(e)h(directly)h(transferred)d(from)h(one)g (pro)q(cess)h(to)e(another.)75 1827 y Fo(1.2.4)49 b(Prede\014ned)15 b(Intra-Communicato)o(rs)75 1913 y Ft(An)22 b(initial)i(in)o(tra-comm)o (unicator)e Fi(MPI)p 785 1913 13 2 v 14 w(COMM)p 929 1913 V 15 w(W)o(ORLD)f Ft(of)h(all)h(pro)q(cesses)f(the)g(lo)q(cal)h (pro)q(cess)f(can)75 1970 y(comm)o(unicate)d(with)g(after)f (initialization)k(\(itself)d(included\))j(is)d(de\014ned)h(once)f Fp(MPI)p 1578 1970 14 2 v 16 w(INIT)f Ft(has)h(b)q(een)75 2026 y(called.)i(In)13 b(addition,)h(the)e(comm)o(unicator)g Fi(MPI)p 911 2026 13 2 v 15 w(COMM)p 1056 2026 V 14 w(SELF)h Ft(is)g(pro)o(vided,)g(whic)o(h)h(includes)h(only)e(the)75 2083 y(pro)q(cess)i(itself.)166 2139 y(The)i(prede\014ned)i(constan)o (t)d Fi(MPI)p 745 2139 V 14 w(COMM)p 889 2139 V 15 w(NULL)i Ft(is)f(the)g(v)m(alue)h(used)g(for)e(in)o(v)m(alid)j(comm)o(unicator) 75 2195 y(handles.)166 2252 y(In)d(a)g(static-pro)q(cess-mo)q(del)h (implemen)o(tation)g(of)f Fp(MPI)p Ft(,)e(all)j(pro)q(cesses)g(that)e (participate)h(in)h(the)75 2308 y(computation)i(are)f(a)o(v)m(ailable)j (after)d Fp(MPI)g Ft(is)h(initialized.)34 b(F)l(or)18 b(this)h(case,)g Fi(MPI)p 1479 2308 V 15 w(COMM)p 1624 2308 V 14 w(W)o(ORLD)g Ft(is)g(a)75 2365 y(comm)o(unicator)g(of)g(all)i (pro)q(cesses)f(a)o(v)m(ailable)h(for)e(the)g(computation;)i(this)f (comm)o(unicator)g(has)f(the)75 2421 y(same)h(v)m(alue)h(in)g(all)f (pro)q(cesses.)35 b(In)21 b(an)e(implemen)o(tation)j(of)d Fp(MPI)h Ft(where)g(pro)q(cesses)g(can)g(dynami-)75 2478 y(cally)d(join)g(an)f Fp(MPI)g Ft(execution,)h(it)f(ma)o(y)g(b)q(e)g (the)h(case)f(that)f(a)h(pro)q(cess)g(starts)f(an)h Fp(MPI)g Ft(computation)75 2534 y(without)j(ha)o(ving)g(access)g(to)f(all)i (other)f(pro)q(cesses.)31 b(In)20 b(suc)o(h)f(situations,)h Fi(MPI)p 1479 2534 V 14 w(COMM)p 1623 2534 V 15 w(W)o(ORLD)f Ft(is)g(a)75 2591 y(comm)o(unicator)d(incorp)q(orating)h(all)h(pro)q (cesses)f(with)g(whic)o(h)g(the)g(joining)h(pro)q(cess)f(can)f (immediately)75 2647 y(comm)o(unicate.)28 b(Therefore,)17 b Fi(MPI)p 675 2647 V 15 w(COMM)p 820 2647 V 14 w(W)o(ORLD)h Ft(ma)o(y)f(sim)o(ultaneously)i(ha)o(v)o(e)e(di\013eren)o(t)h(v)m (alues)h(in)75 2704 y(di\013eren)o(t)c(pro)q(cesses.)-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 Ft(6)411 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)166 45 y Ft(All)j Fp(MPI)d Ft(implemen)o(tations)j(are)e(required)h(to)f(pro)o(vide)h (the)f Fi(MPI)p 1315 45 13 2 v 15 w(COMM)p 1460 45 V 14 w(W)o(ORLD)g Ft(comm)o(unica-)75 102 y(tor.)34 b(It)21 b(cannot)f(b)q(e)h(deallo)q(cated)h(during)f(the)f(life)i(of)e(a)g(pro) q(cess.)36 b(The)20 b(group)g(corresp)q(onding)i(to)75 158 y(this)14 b(comm)o(unicator)g(do)q(es)g(not)g(app)q(ear)g(as)g(a)f (pre-de\014ned)j(constan)o(t,)d(but)h(it)h(ma)o(y)e(b)q(e)i(accessed)f (using)75 214 y Fp(MPI)p 160 214 14 2 v 16 w(COMM)p 318 214 V 16 w(GROUP)21 b Ft(\(see)f(b)q(elo)o(w\).)34 b Fp(MPI)19 b Ft(do)q(es)h(not)g(sp)q(ecify)h(the)f(corresp)q(ondence)h (b)q(et)o(w)o(een)f(the)75 271 y(pro)q(cess)15 b(rank)f(in)h Fi(MPI)p 466 271 13 2 v 15 w(COMM)p 611 271 V 14 w(W)o(ORLD)g Ft(and)f(its)h(\(mac)o(hine-dep)q(enden)o(t\))i(absolute)d(address.)20 b(Neither)75 327 y(do)q(es)14 b Fp(MPI)e Ft(sp)q(ecify)j(the)f (function)g(of)f(the)g(host)g(pro)q(cess,)h(if)g(an)o(y)l(.)19 b(Other)13 b(implemen)o(tation-dep)q(end)q(en)o(t,)75 384 y(prede\014ned)k(comm)o(unicators)e(ma)o(y)f(also)h(b)q(e)h(pro)o (vided.)75 527 y Fq(1.3)59 b(Group)20 b(Management)75 629 y Ft(This)h(section)g(describ)q(es)h(the)e(manipulation)i(of)e(pro) q(cess)h(groups)f(in)h Fp(MPI)p Ft(.)e(These)i(op)q(erations)f(are)75 685 y(lo)q(cal)c(and)g(their)f(execution)i(do)e(not)g(require)h(in)o (terpro)q(cess)f(comm)o(unication.)75 807 y Fo(1.3.1)49 b(Group)16 b(Accesso)o(rs)75 987 y Fp(MPI)p 160 987 14 2 v 16 w(GROUP)p 328 987 V 18 w(SIZE\(group,)e(size\))117 1064 y Fh(IN)155 b Fp(group)479 b Fh(group)14 b(\(handle\))117 1139 y(OUT)108 b Fp(size)519 b Fh(n)o(um)o(b)q(er)13 b(of)h(pro)q(cesses)i(in)e(the)g(group)g(\(in)o(teger\))75 1264 y Fg(int)23 b(MPI)p 245 1264 15 2 v 17 w(Group)p 382 1264 V 17 w(size\(MPI)p 591 1264 V 16 w(Group)g(group,)g(int)g (*size\))75 1350 y(MPI)p 150 1350 V 17 w(GROUP)p 287 1350 V 16 w(SIZE\(GROUP,)g(SIZE,)g(IERROR\))170 1407 y(INTEGER)g(GROUP,)g(SIZE,)h(IERROR)75 1588 y Fp(MPI)p 160 1588 14 2 v 16 w(GROUP)p 328 1588 V 18 w(RANK\(group,)14 b(rank\))117 1665 y Fh(IN)155 b Fp(group)479 b Fh(group)14 b(\(handle\))117 1740 y(OUT)108 b Fp(rank)504 b Fh(rank)50 b(of)g(the)h(calling)e(pro)q(cess)j(in)e(group,)59 b(or)905 1796 y Fi(MPI)p 982 1796 13 2 v 15 w(UNDEFINED)13 b Fh(if)h(the)h(pro)q (cess)i(is)d(not)h(a)f(mem)o(b)q(er)f(\(in-)905 1853 y(teger\))75 1977 y Fg(int)23 b(MPI)p 245 1977 15 2 v 17 w(Group)p 382 1977 V 17 w(rank\(MPI)p 591 1977 V 16 w(Group)g(group,)g(int)g(*rank\))75 2064 y(MPI)p 150 2064 V 17 w(GROUP)p 287 2064 V 16 w(RANK\(GROUP,)g(RANK,)g(IERROR\))170 2120 y(INTEGER)g(GROUP,)g(RANK,)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: 7 9 7 8 bop 75 -100 a Fl(1.3.)34 b(GR)o(OUP)15 b(MANA)o(GEMENT)1138 b Ft(7)75 45 y Fp(MPI)p 160 45 14 2 v 16 w(GROUP)p 328 45 V 18 w(TRANSLA)l(TE)p 602 45 V 17 w(RANKS)16 b(\(group1,)e(n,)h (ranks1,)g(group2,)g(ranks2\))117 122 y Fh(IN)155 b Fp(group1)456 b Fh(group1)14 b(\(handle\))117 197 y(IN)155 b Fp(n)564 b Fh(n)o(um)o(b)q(er)11 b(of)h(ranks)g(in)23 b Fi(ranks1)13 b Fh(and)f Fi(ranks2)g Fh(arra)o(ys)g(\(in)o(teger\))117 273 y(IN)155 b Fp(ranks1)464 b Fh(arra)o(y)14 b(of)f(zero)i(or)f(more)f (v)n(alid)f(ranks)i(in)g(group1)117 348 y(IN)155 b Fp(group2)456 b Fh(group2)14 b(\(handle\))117 423 y(OUT)108 b Fp(ranks2)464 b Fh(arra)o(y)17 b(of)g(corresp)q(onding)h(ranks)f(in)g(group2,)g Fi(MPI)p 1736 423 13 2 v 14 w(UNDE-)905 479 y(FINED)c Fh(when)i(no)e(corresp)q(ondence)k(exists.)75 604 y Fg(int)23 b(MPI)p 245 604 15 2 v 17 w(Group)p 382 604 V 17 w(translate)p 615 604 V 16 w(ranks)g(\(MPI)p 870 604 V 16 w(Group)h(group1,)f(int)g (n,)h(int)f(*ranks1,)393 660 y(MPI)p 468 660 V 17 w(Group)g(group2,)g (int)g(*ranks2\))75 747 y(MPI)p 150 747 V 17 w(GROUP)p 287 747 V 16 w(TRANSLATE)p 519 747 V 16 w(RANKS\(GROUP1,)f(N,)i (RANKS1,)f(GROUP2,)g(RANKS2,)g(IERROR\))170 803 y(INTEGER)g(GROUP1,)g (N,)h(RANKS1\(*\),)e(GROUP2,)h(RANKS2\(*\),)g(IERROR)166 890 y Ft(This)12 b(function)g(is)g(imp)q(ortan)o(t)f(for)f(determining) j(the)e(relativ)o(e)h(n)o(um)o(b)q(ering)g(of)f(the)h(same)f(pro)q (cesses)75 946 y(in)h(t)o(w)o(o)e(di\013eren)o(t)h(groups.)18 b(F)l(or)11 b(instance,)h(if)g(one)f(kno)o(ws)f(the)i(ranks)e(of)h (certain)h(pro)q(cesses)f(in)h(the)f(group)75 1002 y(of)k Fi(MPI)p 204 1002 13 2 v 14 w(COMM)p 348 1002 V 15 w(W)o(ORLD)p Ft(,)f(one)i(migh)o(t)f(w)o(an)o(t)f(to)g(kno)o(w)h(their)h(ranks)f(in) h(a)f(subset)g(of)g(that)f(group.)75 1153 y Fp(MPI)p 160 1153 14 2 v 16 w(GROUP)p 328 1153 V 18 w(COMP)l(ARE\(group1,)h (group2,)g(result\))117 1231 y Fh(IN)155 b Fp(group1)456 b Fh(\014rst)15 b(group)f(\(handle\))117 1306 y(IN)155 b Fp(group2)456 b Fh(second)15 b(group)f(\(handle\))117 1381 y(OUT)108 b Fp(result)484 b Fh(result)15 b(\(in)o(teger\))75 1505 y Fg(int)23 b(MPI)p 245 1505 15 2 v 17 w(Group)p 382 1505 V 17 w(compare\(MPI)p 663 1505 V 15 w(Group)h(group1,MPI)p 1062 1505 V 15 w(Group)g(group2,)e(int)i(*result\))75 1592 y(MPI)p 150 1592 V 17 w(GROUP)p 287 1592 V 16 w(COMPARE\(GROUP1,)e (GROUP2,)h(RESULT,)g(IERROR\))170 1648 y(INTEGER)g(GROUP1,)g(GROUP2,)g (RESULT,)g(IERROR)75 1735 y Fi(MPI)p 152 1735 13 2 v 14 w(IDENT)12 b Ft(results)g(if)h(the)f(group)f(mem)o(b)q(ers)h(and)g (group)g(order)g(is)g(exactly)g(the)g(same)g(in)h(b)q(oth)f(groups.)75 1791 y(This)i(happ)q(ens)h(for)f(instance)g(if)h Fp(group1)e Ft(and)h Fp(group2)g Ft(are)f(the)h(same)g(handle.)21 b Fi(MPI)p 1520 1791 V 14 w(SIMILAR)13 b Ft(results)h(if)75 1848 y(the)f(group)f(mem)o(b)q(ers)h(are)f(the)h(same)f(but)h(the)g (order)f(is)h(di\013eren)o(t.)19 b Fi(MPI)p 1316 1848 V 15 w(UNEQUAL)11 b Ft(results)i(otherwise.)75 1969 y Fo(1.3.2)49 b(Group)16 b(Constructo)o(rs)75 2055 y Ft(Group)j (constructors)f(are)h(used)g(to)g(subset)g(and)g(sup)q(erset)h (existing)g(groups.)31 b(These)20 b(constructors)75 2112 y(construct)14 b(new)g(groups)g(from)f(existing)i(groups.)k(These)14 b(are)g(lo)q(cal)h(op)q(erations,)f(and)g(distinct)h(groups)75 2168 y(ma)o(y)20 b(b)q(e)h(de\014ned)h(on)e(di\013eren)o(t)g(pro)q (cesses;)j(a)e(pro)q(cess)f(ma)o(y)g(also)g(de\014ne)i(a)e(group)g (that)g(do)q(es)g(not)75 2225 y(include)i(itself.)33 b(Consisten)o(t)19 b(de\014nitions)i(are)e(required)h(when)g(groups)f (are)g(used)h(as)f(argumen)o(ts)f(in)75 2281 y(comm)o (unicator-building)23 b(functions.)39 b Fp(MPI)20 b Ft(do)q(es)h(not)g (pro)o(vide)h(a)e(mec)o(hanism)i(to)f(build)i(a)d(group)75 2337 y(from)j(scratc)o(h,)i(but)f(only)h(from)e(other,)i(previously)g (de\014ned)g(groups.)46 b(The)24 b(base)g(group,)h(up)q(on)75 2394 y(whic)o(h)d(all)g(other)e(groups)g(are)h(de\014ned,)i(is)f(the)f (group)f(asso)q(ciated)h(with)g(the)g(initial)i(comm)o(unica-)75 2450 y(tor)14 b Fp(MPI)p 233 2450 14 2 v 16 w(COMM)p 391 2450 V 17 w(W)o(ORLD)h Ft(\(accessible)h(through)f(the)h(function)g Fp(MPI)p 1318 2450 V 15 w(COMM)p 1475 2450 V 17 w(GROUP)p Ft(\).)189 2557 y Fj(R)n(ationale.)74 b Ft(In)21 b(what)g(follo)o(ws,)h (there)e(is)i(no)f(group)f(duplication)j(function)f(analogous)f(to)189 2613 y Fp(MPI)p 274 2613 V 15 w(COMM)p 431 2613 V 17 w(DUP)p Ft(,)16 b(de\014ned)j(later)e(in)g(this)h(c)o(hapter.)24 b(There)17 b(is)h(no)f(need)g(for)g(a)f(group)h(dupli-)189 2670 y(cator.)27 b(A)18 b(group,)g(once)g(created,)g(can)g(ha)o(v)o(e)g (sev)o(eral)g(references)g(to)g(it)g(b)o(y)g(making)g(copies)g(of)-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 Ft(8)411 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)189 45 y Ft(the)g(handle.)23 b(The)15 b(follo)o(wing)i(constructors)d(address)i(the)g(need)g(for)f (subsets)h(and)f(sup)q(ersets)h(of)189 102 y(existing)g(groups.)j(\()p Fj(End)d(of)g(r)n(ationale.)p Ft(\))189 208 y Fj(A)n(dvic)n(e)j(to)h (implementors.)65 b Ft(Eac)o(h)19 b(group)g(constructor)g(b)q(eha)o(v)o (es)h(as)e(if)i(it)g(returned)g(a)f(new)189 264 y(group)h(ob)s(ject.)35 b(When)20 b(this)h(new)g(group)f(is)h(a)f(cop)o(y)g(of)g(an)g(existing) i(group,)f(then)f(one)h(can)189 321 y(a)o(v)o(oid)16 b(creating)g(suc)o(h)h(new)g(ob)s(jects,)e(using)j(a)e(reference-coun)o (t)h(mec)o(hanism.)24 b(\()p Fj(End)17 b(of)g(advic)n(e)189 377 y(to)f(implementors.)p Ft(\))75 578 y Fp(MPI)p 160 578 14 2 v 16 w(COMM)p 318 578 V 16 w(GROUP\(comm,)e(group\))117 655 y Fh(IN)155 b Fp(comm)470 b Fh(comm)o(unicator)11 b(\(handle\))117 730 y(OUT)108 b Fp(group)479 b Fh(group)14 b(corresp)q(onding)h(to)f Fi(comm)e Fh(\(handle\))75 855 y Fg(int)23 b(MPI)p 245 855 15 2 v 17 w(Comm)p 358 855 V 17 w(group\(MPI)p 591 855 V 16 w(Comm)g(comm,)g(MPI)p 941 855 V 17 w(Group)g(*group\))75 941 y(MPI)p 150 941 V 17 w(COMM)p 263 941 V 16 w(GROUP\(COMM,)g(GROUP,)g(IERROR\))170 998 y(INTEGER)g(COMM,)h(GROUP,)f(IERROR)166 1084 y Fp(MPI)p 251 1084 14 2 v 16 w(COMM)p 409 1084 V 16 w(GROUP)17 b Ft(returns)e(in)h Fp(group)f Ft(a)g(handle)h(to)f(the)g(group)g(of)g Fp(comm)p Ft(.)75 1235 y Fp(MPI)p 160 1235 V 16 w(GROUP)p 328 1235 V 18 w(UNION\(group1,)f(group2,)h(newgroup\))117 1312 y Fh(IN)155 b Fp(group1)456 b Fh(\014rst)15 b(group)f(\(handle\)) 117 1387 y(IN)155 b Fp(group2)456 b Fh(second)15 b(group)f(\(handle\)) 117 1463 y(OUT)108 b Fp(newgroup)405 b Fh(union)14 b(group)f (\(handle\))75 1587 y Fg(int)23 b(MPI)p 245 1587 15 2 v 17 w(Group)p 382 1587 V 17 w(union\(MPI)p 615 1587 V 16 w(Group)g(group1,)g(MPI)p 1037 1587 V 17 w(Group)g(group2,)g(MPI)p 1460 1587 V 16 w(Group)h(*newgroup\))75 1673 y(MPI)p 150 1673 V 17 w(GROUP)p 287 1673 V 16 w(UNION\(GROUP1,)e(GROUP2,)h (NEWGROUP,)g(IERROR\))170 1730 y(INTEGER)g(GROUP1,)g(GROUP2,)g (NEWGROUP,)g(IERROR)75 1911 y Fp(MPI)p 160 1911 14 2 v 16 w(GROUP)p 328 1911 V 18 w(INTERSECTION\(group1,)15 b(group2,)f(newgroup\))117 1988 y Fh(IN)155 b Fp(group1)456 b Fh(\014rst)15 b(group)f(\(handle\))117 2063 y(IN)155 b Fp(group2)456 b Fh(second)15 b(group)f(\(handle\))117 2138 y(OUT)108 b Fp(newgroup)405 b Fh(in)o(tersection)15 b(group)f(\(handle\))75 2263 y Fg(int)23 b(MPI)p 245 2263 15 2 v 17 w(Group)p 382 2263 V 17 w(intersection\(MPI)p 783 2263 V 15 w(Group)g(group1,)g(MPI)p 1204 2263 V 17 w(Group)g(group2,)393 2319 y(MPI)p 468 2319 V 17 w(Group)g(*newgroup\)) 75 2406 y(MPI)p 150 2406 V 17 w(GROUP)p 287 2406 V 16 w(INTERSECTION\(GROUP1,)e(GROUP2,)i(NEWGROUP,)g(IERROR\))170 2462 y(INTEGER)g(GROUP1,)g(GROUP2,)g(NEWGROUP,)g(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: 9 11 9 10 bop 75 -100 a Fl(1.3.)34 b(GR)o(OUP)15 b(MANA)o(GEMENT)1138 b Ft(9)75 45 y Fp(MPI)p 160 45 14 2 v 16 w(GROUP)p 328 45 V 18 w(DIFFERENCE\(group1,)14 b(group2,)g(newgroup\))117 122 y Fh(IN)155 b Fp(group1)456 b Fh(\014rst)15 b(group)f(\(handle\)) 117 197 y(IN)155 b Fp(group2)456 b Fh(second)15 b(group)f(\(handle\)) 117 273 y(OUT)108 b Fp(newgroup)405 b Fh(di\013erence)16 b(group)e(\(handle\))75 397 y Fg(int)23 b(MPI)p 245 397 15 2 v 17 w(Group)p 382 397 V 17 w(difference\(MPI)p 735 397 V 15 w(Group)g(group1,)g(MPI)p 1156 397 V 17 w(Group)g(group2,)393 453 y(MPI)p 468 453 V 17 w(Group)g(*newgroup\))75 540 y(MPI)p 150 540 V 17 w(GROUP)p 287 540 V 16 w(DIFFERENCE\(GROUP1,)f (GROUP2,)h(NEWGROUP,)f(IERROR\))170 596 y(INTEGER)h(GROUP1,)g(GROUP2,)g (NEWGROUP,)g(IERROR)75 683 y Ft(The)15 b(set-lik)o(e)i(op)q(erations)e (are)g(de\014ned)i(as)d(follo)o(ws:)75 777 y Fk(union)24 b Ft(All)19 b(elemen)o(ts)g(of)f(the)h(\014rst)f(group)g(\()p Fp(group1)p Ft(\),)g(follo)o(w)o(ed)h(b)o(y)f(all)h(elemen)o(ts)g(of)f (second)h(group)189 833 y(\()p Fp(group2)p Ft(\))14 b(not)h(in)h (\014rst.)75 927 y Fk(in)o(tersect)23 b Ft(all)18 b(elemen)o(ts)h(of)e (the)g(\014rst)h(group)f(that)g(are)g(also)g(in)i(the)f(second)g (group,)f(ordered)h(as)f(in)189 983 y(\014rst)d(group.)75 1077 y Fk(di\013erence)22 b Ft(all)c(elemen)o(ts)f(of)g(the)g(\014rst)f (group)g(that)g(are)h(not)f(in)h(the)g(second)g(group,)g(ordered)g(as)f (in)189 1134 y(the)f(\014rst)g(group.)75 1227 y(Note)k(that)g(for)g (these)h(op)q(erations)g(the)f(order)h(of)f(pro)q(cesses)h(in)g(the)g (output)f(group)h(is)g(determined)75 1284 y(primarily)g(b)o(y)f(order)g (in)h(the)f(\014rst)g(group)f(\(if)h(p)q(ossible\))i(and)e(then,)h(if)f (necessary)l(,)h(b)o(y)f(order)g(in)h(the)75 1340 y(second)c(group.)j (Neither)d(union)h(nor)e(in)o(tersection)h(are)e(comm)o(utativ)o(e,)h (but)g(b)q(oth)g(are)g(asso)q(ciativ)o(e.)166 1397 y(The)g(new)h(group) f(can)g(b)q(e)h(empt)o(y)l(,)f(that)f(is,)h(equal)h(to)f Fi(MPI)p 1184 1397 13 2 v 14 w(GROUP)p 1340 1397 V 13 w(EMPTY)p Ft(.)75 1548 y Fp(MPI)p 160 1548 14 2 v 16 w(GROUP)p 328 1548 V 18 w(INCL\(group,)e(n,)j(ranks,)f(newgroup\))117 1625 y Fh(IN)155 b Fp(group)479 b Fh(group)14 b(\(handle\))117 1700 y(IN)155 b Fp(n)564 b Fh(n)o(um)o(b)q(er)16 b(of)h(elemen)o(ts)g (in)f(arra)o(y)h(ranks)g(\(and)g(size)h(of)e Fi(new-)905 1757 y(group)p Fh(\))f(\(in)o(teger\))117 1832 y(IN)155 b Fp(ranks)487 b Fh(ranks)13 b(of)f(pro)q(cesses)i(in)e Fi(group)h Fh(to)f(app)q(ear)h(in)f Fi(newgroup)i Fh(\(ar-)905 1888 y(ra)o(y)g(of)f(in)o(tegers\))117 1963 y(OUT)108 b Fp(newgroup)405 b Fh(new)12 b(group)f(deriv)o(ed)h(from)e(ab)q(o)o(v) o(e,)h(in)g(the)h(order)h(de\014ned)f(b)o(y)905 2020 y Fi(ranks)j Fh(\(handle\))75 2144 y Fg(int)23 b(MPI)p 245 2144 15 2 v 17 w(Group)p 382 2144 V 17 w(incl\(MPI)p 591 2144 V 16 w(Group)g(group,)g(int)g(n,)h(int)g(*ranks,)e(MPI)p 1442 2144 V 17 w(Group)h(*newgroup\))75 2231 y(MPI)p 150 2231 V 17 w(GROUP)p 287 2231 V 16 w(INCL\(GROUP,)g(N,)g(RANKS,)g (NEWGROUP,)g(IERROR\))170 2287 y(INTEGER)g(GROUP,)g(N,)h(RANKS\(*\),)f (NEWGROUP,)f(IERROR)166 2374 y Ft(The)17 b(function)h Fp(MPI)p 526 2374 14 2 v 16 w(GROUP)p 694 2374 V 18 w(INCL)f Ft(creates)g(a)g(group)f Fp(newgroup)i Ft(that)f(consists)g(of)g(the)g Fp(n)h Ft(pro-)75 2430 y(cesses)e(in)h Fp(group)f Ft(with)h(ranks)e Fp(rank[0],)p Ff(:)8 b(:)g(:)n Fp(,)16 b(rank[n-1])p Ft(;)g(the)h(pro)q(cess)f(with)g(rank)g Fp(i)g Ft(in)h Fp(newgroup)f Ft(is)h(the)75 2487 y(pro)q(cess)h(with)f(rank)g Fp(ranks[i])h Ft(in)g Fp(group)p Ft(.)26 b(Eac)o(h)17 b(of)g(the)g Fp(n)h Ft(elemen)o(ts)g(of)f Fp(ranks)h Ft(m)o(ust)e(b)q(e)i(a)f(v)m(alid)i(rank)75 2543 y(in)h Fp(group)f Ft(and)g(all)h(elemen)o(ts)g(m)o(ust)f(b)q(e)g(distinct,)i (or)e(else)h(the)f(program)f(is)i(erroneous.)31 b(If)20 b Fp(n)f Ft(=)39 b(0,)75 2599 y(then)19 b Fp(newgroup)f Ft(is)h Fi(MPI)p 508 2599 13 2 v 14 w(GROUP)p 664 2599 V 13 w(EMPTY)p Ft(.)f(This)g(function)h(can,)g(for)f(instance,)h(b)q(e) g(used)g(to)e(reorder)75 2656 y(the)e(elemen)o(ts)h(of)f(a)g(group.)k (See)d(also)f Fp(MPI)p 832 2656 14 2 v 16 w(GROUP)p 1000 2656 V 18 w(COMP)l(ARE)p Ft(.)-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 Ft(10)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fp(MPI)p 160 45 14 2 v 16 w(GROUP)p 328 45 V 18 w(EX)o(CL\(group,)f(n,)h(ranks,)g(newgroup\))117 122 y Fh(IN)155 b Fp(group)479 b Fh(group)14 b(\(handle\))117 196 y(IN)155 b Fp(n)564 b Fh(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f (in)h(arra)o(y)f(ranks)i(\(in)o(teger\))117 269 y(IN)155 b Fp(ranks)487 b Fh(arra)o(y)15 b(of)f(in)o(teger)i(ranks)f(in)g Fi(group)g Fh(not)g(to)g(app)q(ear)g(in)g Fi(new-)905 326 y(group)117 399 y Fh(OUT)108 b Fp(newgroup)405 b Fh(new)18 b(group)g(deriv)o(ed)g(from)e(ab)q(o)o(v)o(e,)i(preserving)h (the)f(order)905 455 y(de\014ned)d(b)o(y)28 b Fi(group)14 b Fh(\(handle\))75 580 y Fg(int)23 b(MPI)p 245 580 15 2 v 17 w(Group)p 382 580 V 17 w(excl\(MPI)p 591 580 V 16 w(Group)g(group,)g(int)g(n,)h(int)g(*ranks,)e(MPI)p 1442 580 V 17 w(Group)h(*newgroup\))75 666 y(MPI)p 150 666 V 17 w(GROUP)p 287 666 V 16 w(EXCL\(GROUP,)g(N,)g(RANKS,)g (NEWGROUP,)g(IERROR\))170 723 y(INTEGER)g(GROUP,)g(N,)h(RANKS\(*\),)f (NEWGROUP,)f(IERROR)166 809 y Ft(The)12 b(function)h Fp(MPI)p 516 809 14 2 v 16 w(GROUP)p 684 809 V 17 w(EX)o(CL)f Ft(creates)g(a)f(group)h(of)g(pro)q(cesses)g Fp(newgroup)h Ft(that)e(is)h(obtained)75 866 y(b)o(y)k(deleting)i(from)e Fp(group)g Ft(those)g(pro)q(cesses)h(with)f(ranks)g Fp(ranks[0])h(,)p Ff(:)8 b(:)g(:)14 b Fp(ranks[n-1])p Ft(.)24 b(The)17 b(ordering)f(of)75 922 y(pro)q(cesses)f(in)h Fp(newgroup)g Ft(is)f(iden)o(tical)i(to)e(the)g(ordering)g(in)h Fp(group)p Ft(.)j(Eac)o(h)c(of)g(the)g Fp(n)g Ft(elemen)o(ts)h(of)e Fp(ranks)75 979 y Ft(m)o(ust)h(b)q(e)h(a)f(v)m(alid)i(rank)e(in)h Fp(group)f Ft(and)h(all)g(elemen)o(ts)g(m)o(ust)f(b)q(e)h(distinct;)g (otherwise,)f(the)g(program)f(is)75 1035 y(erroneous.)20 b(If)15 b Fp(n)h Ft(=)28 b(0,)14 b(then)i Fp(newgroup)g Ft(is)g(iden)o(tical)h(to)d Fp(group)p Ft(.)75 1186 y Fp(MPI)p 160 1186 V 16 w(GROUP)p 328 1186 V 18 w(RANGE)p 494 1186 V 17 w(INCL\(group,)g(n,)h(ranges,)g(newgroup\))117 1263 y Fh(IN)155 b Fp(group)479 b Fh(group)14 b(\(handle\))117 1336 y(IN)155 b Fp(n)564 b Fh(n)o(um)o(b)q(er)13 b(of)h(triplets)g(in)f (arra)o(y)28 b Fi(ranges)14 b Fh(\(in)o(teger\))117 1410 y(IN)155 b Fp(ranges)466 b Fh(an)11 b(arra)o(y)g(of)f(in)o(teger)i (triplets,)g(of)e(the)i(form)d(\(\014rst)j(rank,)f(last)905 1466 y(rank,)j(stride\))g(indicating)f(ranks)h(in)g Fi(group)g Fh(of)g(pro)q(cesses)i(to)905 1523 y(b)q(e)f(included)f(in)f Fi(newgroup)117 1596 y Fh(OUT)108 b Fp(newgroup)405 b Fh(new)12 b(group)f(deriv)o(ed)h(from)e(ab)q(o)o(v)o(e,)h(in)g(the)h (order)h(de\014ned)f(b)o(y)905 1653 y Fi(ranges)j Fh(\(handle\))75 1777 y Fg(int)23 b(MPI)p 245 1777 15 2 v 17 w(Group)p 382 1777 V 17 w(range)p 519 1777 V 16 w(incl\(MPI)p 727 1777 V 16 w(Group)g(group,)h(int)f(n,)h(int)f(ranges[][3],)393 1834 y(MPI)p 468 1834 V 17 w(Group)g(*newgroup\))75 1920 y(MPI)p 150 1920 V 17 w(GROUP)p 287 1920 V 16 w(RANGE)p 423 1920 V 17 w(INCL\(GROUP,)f(N,)i(RANGES,)f(NEWGROUP,)f(IERROR\))170 1976 y(INTEGER)h(GROUP,)g(N,)h(RANGES\(3,*\),)e(NEWGROUP,)h(IERROR)75 2063 y Ft(If)31 b Fp(ranges)15 b Ft(consist)g(of)g(the)h(triplets)189 2148 y(\()p Ff(f)5 b(ir)q(st)309 2155 y Fe(1)328 2148 y Ff(;)j(l)q(ast)425 2155 y Fe(1)444 2148 y Ff(;)g(str)q(ide)585 2155 y Fe(1)604 2148 y Ft(\))p Ff(;)g(:::;)g Ft(\()p Ff(f)d(irst)822 2155 y Fd(n)844 2148 y Ff(;)j(l)q(ast)941 2155 y Fd(n)964 2148 y Ff(;)g(str)q(ide)1105 2155 y Fd(n)1127 2148 y Ft(\))75 2233 y(then)16 b Fp(newgroup)f Ft(consists)h(of)f(the)g (sequence)h(of)f(pro)q(cesses)h(in)g Fp(group)f Ft(with)g(ranks)189 2337 y Ff(f)5 b(ir)q(st)291 2344 y Fe(1)311 2337 y Ff(;)j(f)d(ir)q(st) 434 2344 y Fe(1)463 2337 y Ft(+)10 b Ff(str)q(ide)628 2344 y Fe(1)648 2337 y Ff(;)e(:::;)g(f)d(ir)q(st)831 2344 y Fe(1)859 2337 y Ft(+)904 2277 y Fc(\026)933 2306 y Ff(l)q(ast)1009 2313 y Fe(1)1039 2306 y Fn(\000)11 b Ff(f)5 b(ir)q(st)1187 2313 y Fe(1)p 933 2326 274 2 v 1000 2368 a Ff(str)q(ide)1120 2375 y Fe(1)1212 2277 y Fc(\027)1243 2337 y Ff(str)q(ide)1363 2344 y Fe(1)1383 2337 y Ff(;)j(:::)189 2479 y(f)d(ir)q(st)291 2486 y Fd(n)314 2479 y Ff(;)j(f)d(ir)q(st)437 2486 y Fd(n)471 2479 y Ft(+)10 b Ff(str)q(ide)636 2486 y Fd(n)659 2479 y Ff(;)e(:::;)g(f)d(ir) q(st)842 2486 y Fd(n)874 2479 y Ft(+)919 2420 y Fc(\026)948 2448 y Ff(l)q(ast)1024 2455 y Fd(n)1058 2448 y Fn(\000)10 b Ff(f)5 b(ir)q(st)1205 2455 y Fd(n)p 948 2469 282 2 v 1017 2510 a Ff(str)q(ide)1137 2517 y Fd(n)1234 2420 y Fc(\027)1266 2479 y Ff(str)q(ide)1386 2486 y Fd(n)1409 2479 y Ff(:)166 2591 y Ft(Eac)o(h)17 b(computed)h(rank)f(m)o(ust)g(b)q (e)i(a)e(v)m(alid)i(rank)e(in)i Fp(group)e Ft(and)h(all)g(computed)g (ranks)f(m)o(ust)g(b)q(e)75 2647 y(distinct,)c(or)f(else)g(the)g (program)f(is)h(erroneous.)19 b(Note)11 b(that)g(w)o(e)h(ma)o(y)f(ha)o (v)o(e)h Ff(f)5 b(ir)q(st)1466 2654 y Fd(i)1493 2647 y Ff(>)13 b(l)q(ast)1617 2654 y Fd(i)1631 2647 y Ft(,)f(and)g Ff(str)q(ide)1861 2654 y Fd(i)75 2704 y Ft(ma)o(y)i(b)q(e)i(negativ)o (e,)f(but)h(cannot)f(b)q(e)g(zero.)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 Fl(1.3.)34 b(GR)o(OUP)15 b(MANA)o(GEMENT)1116 b Ft(11)166 45 y(The)18 b(functionalit)o(y)h(of)e(this)i(routine)f(is)g (sp)q(eci\014ed)i(to)d(b)q(e)i(equiv)m(alen)o(t)g(to)e(expanding)i(the) f(arra)o(y)75 102 y(of)g(ranges)g(to)g(an)h(arra)o(y)e(of)h(the)h (included)i(ranks)d(and)h(passing)g(the)g(resulting)g(arra)o(y)e(of)i (ranks)f(and)75 158 y(other)e(argumen)o(ts)g(to)g Fp(MPI)p 560 158 14 2 v 16 w(GROUP)p 728 158 V 18 w(INCL)p Ft(.)g(A)g(call)i(to) e Fp(MPI)p 1148 158 V 16 w(GROUP)p 1316 158 V 18 w(INCL)g Ft(is)h(equiv)m(alen)o(t)h(to)e(a)h(call)75 214 y(to)e Fp(MPI)p 216 214 V 16 w(GROUP)p 384 214 V 18 w(RANGE)p 550 214 V 18 w(INCL)g Ft(with)i(eac)o(h)f(rank)g Fp(i)g Ft(in)h Fp(ranks)f Ft(replaced)i(b)o(y)e(the)g(triplet)h Fg(\(i,i,1\))e Ft(in)75 271 y(the)g(argumen)o(t)g Fp(ranges)p Ft(.)75 422 y Fp(MPI)p 160 422 V 16 w(GROUP)p 328 422 V 18 w(RANGE)p 494 422 V 17 w(EX)o(CL\(group,)g(n,)g(ranges,)g (newgroup\))117 499 y Fh(IN)155 b Fp(group)479 b Fh(group)14 b(\(handle\))117 574 y(IN)155 b Fp(n)564 b Fh(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(arra)o(y)f(ranks)i(\(in)o(teger\))117 649 y(IN)155 b Fp(ranges)466 b Fh(a)13 b(one-dimensional)d(arra)o(y)j (of)f(in)o(teger)h(triplets)g(of)f(the)i(form)905 706 y(\(\014rst)j(rank,)f(last)g(rank,)g(stride\),)h(indicating)e(the)i (ranks)f(in)905 762 y Fi(group)22 b Fh(of)f(pro)q(cesses)j(to)d(b)q(e)h (excluded)g(from)e(the)i(output)905 819 y(group)14 b Fi(newgroup)p Fh(.)117 894 y(OUT)108 b Fp(newgroup)405 b Fh(new)18 b(group)g(deriv)o(ed)g(from)e(ab)q(o)o(v)o(e,)i(preserving) h(the)f(order)905 950 y(in)c Fi(group)g Fh(\(handle\))75 1075 y Fg(int)23 b(MPI)p 245 1075 15 2 v 17 w(Group)p 382 1075 V 17 w(range)p 519 1075 V 16 w(excl\(MPI)p 727 1075 V 16 w(Group)g(group,)h(int)f(n,)h(int)f(ranges[][3],)393 1131 y(MPI)p 468 1131 V 17 w(Group)g(*newgroup\))75 1218 y(MPI)p 150 1218 V 17 w(GROUP)p 287 1218 V 16 w(RANGE)p 423 1218 V 17 w(EXCL\(GROUP,)f(N,)i(RANGES,)f(NEWGROUP,)f(IERROR\))170 1274 y(INTEGER)h(GROUP,)g(N,)h(RANGES\(3,*\),)e(NEWGROUP,)h(IERROR)75 1361 y Ft(Eac)o(h)12 b(computed)g(rank)g(m)o(ust)f(b)q(e)i(a)f(v)m (alid)h(rank)f(in)h Fp(group)f Ft(and)g(all)h(computed)f(ranks)g(m)o (ust)f(b)q(e)i(distinct,)75 1417 y(or)i(else)h(the)f(program)f(is)i (erroneous.)166 1473 y(The)i(functionalit)o(y)h(of)e(this)i(routine)f (is)g(sp)q(eci\014ed)i(to)d(b)q(e)i(equiv)m(alen)o(t)g(to)e(expanding)i (the)f(arra)o(y)75 1530 y(of)g(ranges)f(to)h(an)g(arra)o(y)f(of)h(the)g (excluded)i(ranks)e(and)g(passing)h(the)f(resulting)h(arra)o(y)e(of)h (ranks)g(and)75 1586 y(other)c(argumen)o(ts)g(to)g Fp(MPI)p 554 1586 14 2 v 16 w(GROUP)p 722 1586 V 18 w(EX)o(CL)p Ft(.)g(A)h(call)h(to)e Fp(MPI)p 1146 1586 V 16 w(GROUP)p 1314 1586 V 18 w(EX)o(CL)g Ft(is)i(equiv)m(alen)o(t)g(to)e(a)h(call)75 1643 y(to)g Fp(MPI)p 216 1643 V 15 w(GROUP)p 383 1643 V 18 w(RANGE)p 549 1643 V 18 w(EX)o(CL)g Ft(with)h(eac)o(h)f(rank)g Fp(i)g Ft(in)h Fp(ranks)g Ft(replaced)g(b)o(y)f(the)h(triplet)g Fg(\(i,i,1\))e Ft(in)75 1699 y(the)h(argumen)o(t)g Fp(ranges)p Ft(.)189 1806 y Fj(A)n(dvic)n(e)22 b(to)h(users.)86 b Ft(The)23 b(range)f(op)q(erations)h(do)f(not)h(explicitly)i(en)o (umerate)e(ranks,)h(and)189 1862 y(therefore)c(are)h(more)f(scalable)i (if)f(implemen)o(ted)i(e\016cien)o(tly)l(.)38 b(Hence,)23 b(w)o(e)d(recommend)i Fp(MPI)189 1918 y Ft(programmers)14 b(to)i(use)g(them)h(whenenev)o(er)g(p)q(ossible,)g(as)f(high-qualit)o (y)i(implemen)o(tations)f(will)189 1975 y(tak)o(e)d(adv)m(an)o(tage)h (of)g(this)g(fact.)k(\()p Fj(End)d(of)g(advic)n(e)h(to)f(users.)p Ft(\))189 2081 y Fj(A)n(dvic)n(e)h(to)h(implementors.)52 b Ft(The)17 b(range)g(op)q(erations)g(should)h(b)q(e)g(implemen)o(ted,) h(if)f(p)q(ossible,)189 2138 y(without)e(en)o(umerating)i(the)f(group)f (mem)o(b)q(ers,)h(in)h(order)e(to)g(obtain)i(b)q(etter)e(scalabilit)o (y)j(\(time)189 2194 y(and)c(space\).)20 b(\()p Fj(End)15 b(of)i(advic)n(e)f(to)g(implementors.)p Ft(\))75 2316 y Fo(1.3.3)49 b(Group)16 b(Destructo)o(rs)75 2496 y Fp(MPI)p 160 2496 V 16 w(GROUP)p 328 2496 V 18 w(FREE\(group\))117 2573 y Fh(INOUT)62 b Fp(group)479 b Fh(group)14 b(\(handle\))75 2698 y Fg(int)23 b(MPI)p 245 2698 15 2 v 17 w(Group)p 382 2698 V 17 w(free\(MPI)p 591 2698 V 16 w(Group)g(*group\))-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 Ft(12)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fg(MPI)p 150 45 15 2 v 17 w(GROUP)p 287 45 V 16 w(FREE\(GROUP,)23 b(IERROR\))170 102 y(INTEGER)g(GROUP,)g(IERROR)166 188 y Ft(This)f(op)q(eration)h(marks)e(a)g(group)h(ob)s(ject)f(for)h (deallo)q(cation.)41 b(The)22 b(handle)i Fp(group)d Ft(is)i(set)f(to)75 244 y Fi(MPI)p 152 244 13 2 v 14 w(GROUP)p 308 244 V 13 w(NULL)17 b Ft(b)o(y)g(the)f(call.)24 b(An)o(y)17 b(on-going)f(op)q(eration)g(using)h(this)g(group)f(will)i(complete)f (nor-)75 301 y(mally)l(.)189 395 y Fj(A)n(dvic)n(e)c(to)h (implementors.)39 b Ft(One)13 b(can)h(k)o(eep)f(a)f(reference)i(coun)o (t)f(that)f(is)h(incremen)o(ted)i(for)d(eac)o(h)189 452 y(call)j(to)f Fp(MPI)p 411 452 14 2 v 16 w(COMM)p 569 452 V 16 w(CREA)l(TE)i Ft(and)e Fp(MPI)p 939 452 V 16 w(COMM)p 1097 452 V 17 w(DUP)p Ft(,)g(and)g(decremen)o(ted)i(for)d(eac) o(h)i(call)h(to)189 508 y Fp(MPI)p 274 508 V 15 w(GROUP)p 441 508 V 18 w(FREE)h Ft(or)g Fp(MPI)p 725 508 V 15 w(COMM)p 882 508 V 17 w(FREE)p Ft(;)g(the)g(group)f(ob)s(ject)g(is)i(ultimately) g(deallo)q(cated)189 565 y(when)d(the)h(reference)g(coun)o(t)f(drops)g (to)f(zero.)20 b(\()p Fj(End)c(of)g(advic)n(e)g(to)h(implementors.)p Ft(\))75 706 y Fq(1.4)59 b(Communicato)n(r)19 b(Management)75 808 y Ft(This)e(section)g(describ)q(es)h(the)f(manipulation)h(of)e (comm)o(unicators)g(in)h Fp(MPI)p Ft(.)f(Op)q(erations)h(that)f(access) 75 864 y(comm)o(unicators)f(are)g(lo)q(cal)h(and)f(their)h(execution)g (do)q(es)g(not)f(require)h(in)o(terpro)q(cess)g(comm)o(unication.)75 921 y(Op)q(erations)g(that)e(create)h(comm)o(unicators)f(are)h (collectiv)o(e)i(and)e(ma)o(y)f(require)i(in)o(terpro)q(cess)f(comm)o (u-)75 977 y(nication.)189 1072 y Fj(A)n(dvic)n(e)k(to)h(implementors.) 65 b Ft(High-qualit)o(y)21 b(implemen)o(tations)g(should)f(amortize)f (the)h(o)o(v)o(er-)189 1128 y(heads)15 b(asso)q(ciated)h(with)g(the)f (creation)h(of)e(comm)o(unicators)h(\(for)g(the)g(same)g(group,)g(or)g (subsets)189 1185 y(thereof)t(\))d(o)o(v)o(er)h(sev)o(eral)g(calls,)i (b)o(y)e(allo)q(cating)i(m)o(ultiple)g(con)o(texts)e(with)g(one)h (collectiv)o(e)h(comm)o(u-)189 1241 y(nication.)21 b(\()p Fj(End)15 b(of)i(advic)n(e)f(to)g(implementors.)p Ft(\))75 1361 y Fo(1.4.1)49 b(Communicato)o(r)16 b(Accesso)o(rs)75 1447 y Ft(The)f(follo)o(wing)h(are)f(all)h(lo)q(cal)h(op)q(erations.)75 1598 y Fp(MPI)p 160 1598 V 16 w(COMM)p 318 1598 V 16 w(SIZE\(comm,)c(size\))117 1675 y Fh(IN)155 b Fp(comm)470 b Fh(comm)o(unicator)11 b(\(handle\))117 1749 y(OUT)108 b Fp(size)519 b Fh(n)o(um)o(b)q(er)13 b(of)h(pro)q(cesses)i(in)e(the)g (group)g(of)27 b Fi(comm)12 b Fh(\(in)o(teger\))75 1873 y Fg(int)23 b(MPI)p 245 1873 15 2 v 17 w(Comm)p 358 1873 V 17 w(size\(MPI)p 567 1873 V 16 w(Comm)g(comm,)g(int)h(*size\))75 1960 y(MPI)p 150 1960 V 17 w(COMM)p 263 1960 V 16 w(SIZE\(COMM,)f (SIZE,)g(IERROR\))170 2016 y(INTEGER)g(COMM,)h(SIZE,)f(IERROR)189 2140 y Fj(R)n(ationale.)51 b Ft(This)17 b(function)h(is)g(equiv)m(alen) o(t)g(to)f(accessing)h(the)f(comm)o(unicator's)f(group)h(with)189 2197 y Fp(MPI)p 274 2197 14 2 v 15 w(COMM)p 431 2197 V 17 w(GROUP)k Ft(\(see)g(b)q(elo)o(w\),)g(computing)g(the)f(size)i (using)f Fp(MPI)p 1494 2197 V 15 w(GROUP)p 1661 2197 V 18 w(SIZE)p Ft(,)f(and)189 2253 y(then)13 b(freeing)h(the)f(group)g (temp)q(orary)f(via)h Fp(MPI)p 1016 2253 V 16 w(GROUP)p 1184 2253 V 18 w(FREE)p Ft(.)g(Ho)o(w)o(ev)o(er,)f(this)i(function)g (is)f(so)189 2310 y(commonly)i(used,)g(that)g(this)h(shortcut)e(w)o(as) h(in)o(tro)q(duced.)21 b(\()p Fj(End)15 b(of)i(r)n(ationale.)p Ft(\))189 2404 y Fj(A)n(dvic)n(e)k(to)i(users.)80 b Ft(This)23 b(function)f(indicates)i(the)e(n)o(um)o(b)q(er)g(of)f(pro)q(cesses)i (in)o(v)o(olv)o(ed)g(in)f(a)189 2461 y(comm)o(unicator.)35 b(F)l(or)21 b Fi(MPI)p 684 2461 13 2 v 14 w(COMM)p 828 2461 V 14 w(W)o(ORLD)p Ft(,)g(it)g(indicates)h(the)e(total)g(n)o(um)o (b)q(er)h(of)g(pro)q(cesses)189 2517 y(a)o(v)m(ailable)c(\(for)f(this)g (v)o(ersion)h(of)f Fp(MPI)p Ft(,)f(there)h(is)h(no)f(standard)g(w)o(a)o (y)f(to)g(c)o(hange)i(the)f(n)o(um)o(b)q(er)g(of)189 2574 y(pro)q(cesses)f(once)h(initialization)i(has)d(tak)o(en)g (place\).)189 2647 y(This)20 b(call)h(is)f(often)g(used)g(with)h(the)f (next)g(call)h(to)e(determine)i(the)f(amoun)o(t)f(of)g(concurrency)189 2704 y(a)o(v)m(ailable)j(for)e(a)h(sp)q(eci\014c)i(library)e(or)g (program.)36 b(The)21 b(follo)o(wing)g(call,)i Fp(MPI)p 1580 2704 14 2 v 16 w(COMM)p 1738 2704 V 17 w(RANK)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 Fl(1.4.)34 b(COMMUNICA)l(TOR)16 b(MANA)o(GEMENT)883 b Ft(13)189 45 y(indicates)15 b(the)f(rank)f(of)h(the)g(pro)q(cess)g (that)f(calls)i(it)f(in)h(the)f(range)f(from)g(0)8 b Ff(:)g(:)g(:)n Fp(size)p Fn(\000)p Ft(1,)14 b(where)g Fp(size)189 102 y Ft(is)h(the)h(return)f(v)m(alue)h(of)f Fp(MPI)p 706 102 14 2 v 16 w(COMM)p 864 102 V 16 w(SIZE)p Ft(.\()p Fj(End)g(of)i(advic)n(e)f(to)g(users.)p Ft(\))75 302 y Fp(MPI)p 160 302 V 16 w(COMM)p 318 302 V 16 w(RANK\(comm,)d (rank\))117 380 y Fh(IN)155 b Fp(comm)470 b Fh(comm)o(unicator)11 b(\(handle\))117 455 y(OUT)108 b Fp(rank)504 b Fh(rank)12 b(of)f(the)h(calling)e(pro)q(cess)j(in)f(group)f(of)23 b Fi(comm)9 b Fh(\(in)o(teger\))75 579 y Fg(int)23 b(MPI)p 245 579 15 2 v 17 w(Comm)p 358 579 V 17 w(rank\(MPI)p 567 579 V 16 w(Comm)g(comm,)g(int)h(*rank\))75 666 y(MPI)p 150 666 V 17 w(COMM)p 263 666 V 16 w(RANK\(COMM,)f(RANK,)g(IERROR\))170 722 y(INTEGER)g(COMM,)h(RANK,)f(IERROR)1937 758 y Fn(>)189 858 y Fj(R)n(ationale.)51 b Ft(This)17 b(function)h(is)g(equiv)m(alen)o (t)g(to)f(accessing)h(the)f(comm)o(unicator's)f(group)h(with)189 915 y Fp(MPI)p 274 915 14 2 v 15 w(COMM)p 431 915 V 17 w(GROUP)11 b Ft(\(see)f(ab)q(o)o(v)o(e\),)h(and)f(then)g(computing)h (the)f(rank)g(using)h Fp(MPI)p 1623 915 V 16 w(GROUP)p 1791 915 V 18 w(RANK)p Ft(.)189 971 y(\()p Fj(End)k(of)i(r)n(ationale.) p Ft(\))1937 1032 y Fn(?)189 1127 y Fj(A)n(dvic)n(e)c(to)h(users.)38 b Ft(This)14 b(function)f(giv)o(es)g(the)g(rank)f(of)h(the)f(pro)q (cess)h(in)h(the)f(particular)g(comm)o(u-)189 1184 y(nicator's)h (group.)20 b(It)15 b(is)h(useful,)g(as)f(noted)g(ab)q(o)o(v)o(e,)f(in)i (conjunction)h(with)e Fp(MPI)p 1569 1184 V 16 w(COMM)p 1727 1184 V 16 w(SIZE)p Ft(.)189 1259 y(Man)o(y)e(programs)g(will)i(b)q (e)g(written)f(with)g(the)g(master-sla)o(v)o(e)f(mo)q(del,)i(where)f (one)g(pro)q(cess)g(\(suc)o(h)189 1315 y(as)19 b(the)g(rank-zero)h(pro) q(cess\))f(will)i(pla)o(y)f(a)f(sup)q(ervisory)h(role,)h(and)f(the)f (other)g(pro)q(cesses)h(will)189 1372 y(serv)o(e)g(as)f(compute)h(no)q (des.)35 b(In)21 b(this)g(framew)o(ork,)e(the)h(t)o(w)o(o)f(preceding)j (calls)f(are)e(useful)j(for)189 1428 y(determining)c(the)e(roles)h(of)f (the)h(v)m(arious)g(pro)q(cesses)g(of)f(a)g(comm)o(unicator.)24 b(\()p Fj(End)17 b(of)g(advic)n(e)h(to)189 1485 y(users.)p Ft(\))75 1685 y Fp(MPI)p 160 1685 V 16 w(COMM)p 318 1685 V 16 w(COMP)l(ARE\(comm1,)c(comm2,)f(result\))117 1763 y Fh(IN)155 b Fp(comm1)447 b Fh(\014rst)15 b(comm)o(unicator)c (\(handle\))117 1838 y(IN)155 b Fp(comm2)447 b Fh(second)15 b(comm)o(unicator)c(\(handle\))117 1913 y(OUT)108 b Fp(result)484 b Fh(result)15 b(\(in)o(teger\))75 2037 y Fg(int)23 b(MPI)p 245 2037 15 2 v 17 w(Comm)p 358 2037 V 17 w(compare\(MPI)p 639 2037 V 16 w(Comm)g(comm1,MPI)p 990 2037 V 16 w(Comm)g(comm2,)g(int) h(*result\))75 2124 y(MPI)p 150 2124 V 17 w(COMM)p 263 2124 V 16 w(COMPARE\(COMM1,)e(COMM2,)h(RESULT,)g(IERROR\))170 2180 y(INTEGER)g(COMM1,)g(COMM2,)g(RESULT,)g(IERROR)75 2267 y Fi(MPI)p 152 2267 13 2 v 14 w(IDENT)11 b Ft(results)g(if)h(and)f (only)g(if)h Fp(comm1)d Ft(and)i Fp(comm2)d Ft(are)j(handles)h(for)e (the)h(same)g(ob)s(ject)f(\(iden)o(tical)75 2323 y(groups)15 b(and)g(same)g(con)o(texts\).)j Fi(MPI)p 715 2323 V 15 w(CONGRUENT)c Ft(results)h(if)h(the)f(underlying)i(groups)d(are)h(iden) o(tical)75 2380 y(in)j(constituen)o(ts)f(and)h(rank)f(order;)h(these)f (comm)o(unicators)g(di\013er)h(only)f(b)o(y)h(con)o(text.)25 b Fi(MPI)p 1703 2380 V 15 w(SIMILAR)75 2436 y Ft(results)12 b(if)h(the)f(group)g(mem)o(b)q(ers)g(of)g(b)q(oth)g(comm)o(unicators)g (are)g(the)g(same)g(but)g(the)g(rank)g(order)g(di\013ers.)75 2493 y Fi(MPI)p 152 2493 V 14 w(UNEQUAL)i Ft(results)i(otherwise.)-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 Ft(14)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fo(1.4.2)49 b(Communicato)o(r)16 b(Constructo)o(rs)75 131 y Ft(The)f(follo)o(wing)g(are)g(collectiv)o(e)h(functions)f(that)f (are)h(in)o(v)o(ok)o(ed)g(b)o(y)f(all)i(pro)q(cesses)f(in)g(the)g (group)f(asso)q(ci-)75 187 y(ated)h(with)h Fp(comm)p Ft(.)189 266 y Fj(R)n(ationale.)37 b Ft(Note)10 b(that)g(there)h(is)g (a)g(c)o(hic)o(k)o(en-and-egg)h(asp)q(ect)f(to)f Fp(MPI)g Ft(in)i(that)e(a)g(comm)o(unicator)189 323 y(is)18 b(needed)h(to)e (create)g(a)h(new)f(comm)o(unicator.)27 b(The)18 b(base)g(comm)o (unicator)f(for)g(all)i Fp(MPI)e Ft(com-)189 379 y(m)o(unicators)f(is)h (prede\014ned)h(outside)f(of)f Fp(MPI)p Ft(,)g(and)g(is)h Fi(MPI)p 1227 379 13 2 v 15 w(COMM)p 1372 379 V 14 w(W)o(ORLD)p Ft(.)f(This)h(mo)q(del)h(w)o(as)189 435 y(arriv)o(ed)c(at)g(after)g (considerable)i(debate,)e(and)h(w)o(as)e(c)o(hosen)i(to)f(increase)h (\\safet)o(y")e(of)h(programs)189 492 y(written)h(in)h Fp(MPI)p Ft(.)e(\()p Fj(End)i(of)g(r)n(ationale.)p Ft(\))75 665 y Fp(MPI)p 160 665 14 2 v 16 w(COMM)p 318 665 V 16 w(DUP\(comm,)d(new)o(comm\))117 742 y Fh(IN)155 b Fp(comm)470 b Fh(comm)o(unicator)11 b(\(handle\))117 814 y(OUT)108 b Fp(new)o(comm)397 b Fh(cop)o(y)14 b(of)f Fi(comm)f Fh(\(handle\))75 938 y Fg(int)23 b(MPI)p 245 938 15 2 v 17 w(Comm)p 358 938 V 17 w(dup\(MPI)p 543 938 V 16 w(Comm)g(comm,)h(MPI)p 894 938 V 16 w(Comm)g(*newcomm\))75 1024 y(MPI)p 150 1024 V 17 w(COMM)p 263 1024 V 16 w(DUP\(COMM,)f (NEWCOMM,)g(IERROR\))170 1081 y(INTEGER)g(COMM,)h(NEWCOMM,)e(IERROR)166 1167 y Fp(MPI)p 251 1167 14 2 v 16 w(COMM)p 409 1167 V 16 w(DUP)12 b Ft(Duplicates)i(the)e(existing)h(comm)o(unicator)f Fp(comm)e Ft(with)j(asso)q(ciated)f(k)o(ey)g(v)m(al-)75 1224 y(ues.)19 b(F)l(or)11 b(eac)o(h)h(k)o(ey)f(v)m(alue,)j(the)d(resp) q(ectiv)o(e)i(cop)o(y)f(callbac)o(k)g(function)h(determines)f(the)g (attribute)g(v)m(alue)75 1280 y(asso)q(ciated)f(with)h(this)f(k)o(ey)g (in)h(the)f(new)h(comm)o(unicator;)f(one)h(particular)f(action)h(that)e (a)h(cop)o(y)g(callbac)o(k)75 1337 y(ma)o(y)18 b(tak)o(e)g(is)h(to)f (delete)h(the)g(attribute)g(from)e(the)i(new)g(comm)o(unicator.)30 b(Returns)19 b(in)g Fp(new)o(comm)e Ft(a)75 1393 y(new)d(comm)o (unicator)f(with)g(the)h(same)f(group,)g(an)o(y)g(copied)i(cac)o(hed)f (information,)f(but)h(a)f(new)h(con)o(text)75 1450 y(\(see)h(section)h (1.7.1\).)189 1528 y Fj(A)n(dvic)n(e)d(to)h(users.)39 b Ft(This)14 b(op)q(eration)f(is)g(used)h(to)e(pro)o(vide)i(a)e (parallel)j(library)f(call)g(with)f(a)g(dupli-)189 1585 y(cate)f(comm)o(unication)i(space)f(that)f(has)h(the)f(same)h(prop)q (erties)g(as)g(the)g(original)h(comm)o(unicator.)189 1641 y(This)g(includes)j(an)o(y)d(attributes)g(\(see)g(b)q(elo)o(w\),)g (and)h(top)q(ologies)f(\(see)h(c)o(hapter)f Fk(??)p Ft(\).)k(This)d (call)g(is)189 1698 y(v)m(alid)i(ev)o(en)g(if)f(there)g(are)g(p)q (ending)i(p)q(oin)o(t-to-p)q(oin)o(t)e(comm)o(unications)h(in)o(v)o (olving)g(the)f(comm)o(u-)189 1754 y(nicator)i Fp(comm)p Ft(.)26 b(A)18 b(t)o(ypical)h(call)g(migh)o(t)e(in)o(v)o(olv)o(e)i(a)f Fp(MPI)p 1206 1754 V 15 w(COMM)p 1363 1754 V 17 w(DUP)g Ft(at)f(the)h(b)q(eginning)i(of)189 1811 y(the)e(parallel)h(call,)g (and)f(an)g Fp(MPI)p 775 1811 V 16 w(COMM)p 933 1811 V 16 w(FREE)h Ft(of)e(that)g(duplicated)j(comm)o(unicator)e(at)f(the) 189 1867 y(end)e(of)g(the)h(call.)21 b(Other)15 b(mo)q(dels)h(of)f (comm)o(unicator)g(managemen)o(t)f(are)h(also)g(p)q(ossible.)189 1938 y(This)g(call)i(applies)g(to)d(b)q(oth)h(in)o(tra-)h(and)f(in)o (ter-comm)o(unicators.)20 b(\()p Fj(End)15 b(of)i(advic)n(e)f(to)g (users.)p Ft(\))189 2017 y Fj(A)n(dvic)n(e)c(to)j(implementors.)38 b Ft(One)13 b(need)g(not)f(actually)i(cop)o(y)e(the)h(group)f (information,)h(but)f(only)189 2073 y(add)17 b(a)g(new)g(reference)h (and)g(incremen)o(t)g(the)f(reference)h(coun)o(t.)26 b(Cop)o(y)17 b(on)g(write)g(can)g(b)q(e)h(used)189 2130 y(for)c(the)h(cac)o(hed)h(information.\()p Fj(End)g(of)g(advic)n(e)g (to)h(implementors.)p Ft(\))75 2303 y Fp(MPI)p 160 2303 V 16 w(COMM)p 318 2303 V 16 w(CREA)l(TE\(comm,)d(group,)h(new)o(comm\)) 117 2380 y Fh(IN)155 b Fp(comm)470 b Fh(comm)o(unicator)11 b(\(handle\))117 2451 y(IN)155 b Fp(group)479 b Fh(Group,)14 b(whic)o(h)h(is)f(a)g(subset)i(of)e(the)h(group)g(of)e Fi(comm)g Fh(\(han-)905 2508 y(dle\))117 2579 y(OUT)108 b Fp(new)o(comm)397 b Fh(new)15 b(comm)o(uni)o(cator)d(\(handle\))75 2704 y Fg(int)23 b(MPI)p 245 2704 15 2 v 17 w(Comm)p 358 2704 V 17 w(create\(MPI)p 615 2704 V 16 w(Comm)g(comm,)g(MPI)p 965 2704 V 17 w(Group)g(group,)g(MPI)p 1364 2704 V 17 w(Comm)g(*newcomm\))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 Fl(1.4.)34 b(COMMUNICA)l(TOR)16 b(MANA)o(GEMENT)883 b Ft(15)75 45 y Fg(MPI)p 150 45 15 2 v 17 w(COMM)p 263 45 V 16 w(CREATE\(COMM,)23 b(GROUP,)g(NEWCOMM,)f(IERROR\))170 102 y(INTEGER)h(COMM,)h(GROUP,)f(NEWCOMM,)f(IERROR)75 188 y Ft(This)14 b(function)g(creates)f(a)g(new)h(comm)o(unicator)f Fp(new)o(comm)f Ft(with)i(comm)o(unication)g(group)f(de\014ned)i(b)o(y) 75 244 y Fp(group)f Ft(and)h(a)e(new)i(con)o(text.)k(No)14 b(cac)o(hed)h(information)f(propagates)f(from)h Fp(comm)e Ft(to)i Fp(new)o(comm)p Ft(.)k(The)75 301 y(function)e(returns)f Fi(MPI)p 487 301 13 2 v 14 w(COMM)p 631 301 V 15 w(NULL)h Ft(to)e(pro)q(cesses)i(that)e(are)h(not)g(in)h Fp(group)p Ft(.)k(The)15 b(call)h(is)g(erroneous)75 357 y(if)k(not)f(all)h Fp(group)f Ft(argumen)o(ts)g(ha)o(v)o(e)f(the)i(same)f(v)m(alue,)i(or)e (if)h Fp(group)f Ft(is)h(not)f(a)f(subset)i(of)f(the)g(group)75 414 y(asso)q(ciated)d(with)f Fp(comm)p Ft(.)k(Note)c(that)g(the)g(call) i(is)f(to)e(b)q(e)i(executed)h(b)o(y)e(all)h(pro)q(cesses)g(in)g Fp(comm)p Ft(,)e(ev)o(en)75 470 y(if)i(they)f(do)g(not)g(b)q(elong)h (to)f(the)g(new)g(group.)20 b(This)c(call)g(applies)h(only)f(to)e(in)o (tra-comm)o(unicators.)189 562 y Fj(R)n(ationale.)58 b Ft(The)19 b(requiremen)o(t)g(that)f(the)g(en)o(tire)h(group)f(of)g Fp(comm)e Ft(participate)j(in)g(the)g(call)189 619 y(stems)14 b(from)h(the)g(follo)o(wing)h(considerations:)243 708 y Fn(\017)23 b Ft(It)e(allo)o(ws)g(the)g(implemen)o(tation)h(to)e(la)o (y)o(er)h Fp(MPI)p 1161 708 14 2 v 16 w(COMM)p 1319 708 V 16 w(CREA)l(TE)h Ft(on)f(top)f(of)h(regular)289 765 y(collectiv)o(e)c(comm)o(unications.)243 834 y Fn(\017)23 b Ft(It)12 b(pro)o(vides)h(additional)h(safet)o(y)l(,)e(in)h (particular)g(in)g(the)g(case)f(where)h(partially)g(o)o(v)o(erlapping) 289 890 y(groups)h(are)h(used)h(to)f(create)g(new)g(comm)o(unicators.) 243 959 y Fn(\017)23 b Ft(It)11 b(p)q(ermits)g(implemen)o(tations)i (sometimes)e(to)f(a)o(v)o(oid)h(comm)o(unication)h(related)f(to)g(con)o (text)289 1016 y(creation.)189 1105 y(\()p Fj(End)k(of)i(r)n(ationale.) p Ft(\))189 1197 y Fj(A)n(dvic)n(e)g(to)i(users.)53 b Fp(MPI)p 647 1197 V 16 w(COMM)p 805 1197 V 16 w(CREA)l(TE)19 b Ft(pro)o(vides)f(a)f(means)g(to)g(subset)h(a)f(group)g(of)g(pro-)189 1254 y(cesses)e(for)f(the)g(purp)q(ose)i(of)e(separate)g(MIMD)g (computation,)g(with)h(separate)f(comm)o(unication)189 1310 y(space.)33 b Fp(new)o(comm)p Ft(,)20 b(whic)o(h)g(emerges)g(from) f Fp(MPI)p 1072 1310 V 16 w(COMM)p 1230 1310 V 16 w(CREA)l(TE)i Ft(can)f(b)q(e)g(used)h(in)f(subse-)189 1367 y(quen)o(t)15 b(calls)i(to)e Fp(MPI)p 558 1367 V 16 w(COMM)p 716 1367 V 16 w(CREA)l(TE)i Ft(\(or)d(other)i(comm)o(unicator)f(constructors\))f (further)i(to)189 1423 y(sub)q(divide)21 b(a)d(computation)h(in)o(to)g (parallel)h(sub-computations.)31 b(A)18 b(more)h(general)g(service)g (is)189 1480 y(pro)o(vided)d(b)o(y)f Fp(MPI)p 524 1480 V 16 w(COMM)p 682 1480 V 16 w(SPLIT)p Ft(,)f(b)q(elo)o(w.)21 b(\()p Fj(End)15 b(of)i(advic)n(e)f(to)g(users.)p Ft(\))189 1572 y Fj(A)n(dvic)n(e)32 b(to)i(implementors.)151 b Ft(Since)35 b(all)g(pro)q(cesses)f(calling)h Fp(MPI)p 1536 1572 V 16 w(COMM)p 1694 1572 V 17 w(DUP)e Ft(or)189 1628 y Fp(MPI)p 274 1628 V 15 w(COMM)p 431 1628 V 17 w(CREA)l(TE)21 b Ft(pro)o(vide)f(the)g(same)g Fp(group)g Ft(argumen)o(t,)f(it)i(is)f(theoretically)h(p)q(ossible)189 1684 y(to)13 b(agree)g(on)g(a)h(group-wide)g(unique)h(con)o(text)e (with)h(no)g(comm)o(unication.)20 b(Ho)o(w)o(ev)o(er,)13 b(lo)q(cal)h(exe-)189 1741 y(cution)f(of)f(these)h(functions)g (requires)h(use)f(of)f(a)g(larger)h(con)o(text)f(name)h(space)f(and)h (reduces)h(error)189 1797 y(c)o(hec)o(king.)20 b(Implemen)o(tations)c (ma)o(y)e(strik)o(e)h(v)m(arious)g(compromises)g(b)q(et)o(w)o(een)g (these)f(con\015icting)189 1854 y(goals,)g(suc)o(h)i(as)e(bulk)j(allo)q (cation)f(of)f(m)o(ultiple)i(con)o(texts)d(in)i(one)g(collectiv)o(e)h (op)q(eration.)189 1927 y(Imp)q(ortan)o(t:)28 b(If)20 b(new)g(comm)o(unicators)g(are)f(created)h(without)g(sync)o(hronizing)i (the)e(pro)q(cesses)189 1983 y(in)o(v)o(olv)o(ed)11 b(then)g(the)g (comm)o(unication)g(system)f(should)i(b)q(e)f(able)g(to)f(cop)q(e)h (with)g(messages)f(arriving)189 2040 y(in)16 b(a)g(con)o(text)f(that)g (has)g(not)h(y)o(et)f(b)q(een)i(allo)q(cated)f(at)f(the)h(receiving)i (pro)q(cess.)j(\()p Fj(End)16 b(of)h(advic)n(e)189 2096 y(to)f(implementors.)p Ft(\))75 2283 y Fp(MPI)p 160 2283 V 16 w(COMM)p 318 2283 V 16 w(SPLIT\(comm,)c(colo)o(r,)i(k)o(ey)l(,)h (new)o(comm\))117 2360 y Fh(IN)155 b Fp(comm)470 b Fh(comm)o(unicator) 11 b(\(handle\))117 2433 y(IN)155 b Fp(colo)o(r)495 b Fh(con)o(trol)14 b(of)f(subset)i(assignmen)o(t)e(\(in)o(teger\))117 2506 y(IN)155 b Fp(k)o(ey)525 b Fh(con)o(trol)14 b(of)f(rank)h (assigmen)o(t)f(\(in)o(teger\))117 2579 y(OUT)108 b Fp(new)o(comm)397 b Fh(new)15 b(comm)o(uni)o(cator)d(\(handle\))75 2704 y Fg(int)23 b(MPI)p 245 2704 15 2 v 17 w(Comm)p 358 2704 V 17 w(split\(MPI)p 591 2704 V 16 w(Comm)g(comm,)g(int)h(color,)f(int)g (key,)h(MPI)p 1419 2704 V 16 w(Comm)g(*newcomm\))-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 Ft(16)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fg(MPI)p 150 45 15 2 v 17 w(COMM)p 263 45 V 16 w(SPLIT\(COMM,)23 b(COLOR,)g(KEY,)g(NEWCOMM,)g(IERROR\))170 102 y(INTEGER)g(COMM,)h (COLOR,)f(KEY,)g(NEWCOMM,)g(IERROR)75 188 y Ft(This)c(function)f (partitions)g(the)h(group)e(asso)q(ciated)h(with)h Fp(comm)d Ft(in)o(to)i(disjoin)o(t)g(subgroups,)h(one)f(for)75 244 y(eac)o(h)g(v)m(alue)g(of)f Fp(colo)o(r)p Ft(.)26 b(Eac)o(h)17 b(subgroup)h(con)o(tains)f(all)i(pro)q(cesses)f(of)f(the)g (same)g(color.)27 b(Within)19 b(eac)o(h)75 301 y(subgroup,)24 b(the)f(pro)q(cesses)g(are)f(rank)o(ed)h(in)g(the)g(order)g(de\014ned)h (b)o(y)e(the)h(v)m(alue)h(of)e(the)h(argumen)o(t)75 357 y Fp(k)o(ey)p Ft(,)d(with)g(ties)g(brok)o(en)g(according)g(to)f(their)h (rank)f(in)i(the)f(old)g(group.)33 b(A)19 b(new)h(comm)o(unicator)f(is) 75 414 y(created)14 b(for)f(eac)o(h)h(subgroup)g(and)g(returned)g(in)g Fp(new)o(comm)p Ft(.)k(A)c(pro)q(cess)g(ma)o(y)f(supply)i(the)f(color)g (v)m(alue)75 470 y Fp(MPI)p 160 470 14 2 v 16 w(UNDEFINED)p Ft(,)19 b(in)i(whic)o(h)g(case)e Fp(new)o(comm)g Ft(returns)h Fi(MPI)p 1200 470 13 2 v 14 w(COMM)p 1344 470 V 15 w(NULL)p Ft(.)g(This)g(is)h(a)e(collectiv)o(e)75 527 y(call,)d(but)f(eac)o(h)h (pro)q(cess)f(is)h(p)q(ermitted)g(to)e(pro)o(vide)i(di\013eren)o(t)f(v) m(alues)i(for)d Fp(colo)o(r)g Ft(and)i Fp(k)o(ey)p Ft(.)166 583 y(A)47 b(call)i(to)e Fp(MPI)p 536 583 14 2 v 16 w(COMM)p 694 583 V 16 w(CREA)l(TE\(comm,)54 b(group,)i(new)o(comm\))45 b Ft(is)j(equiv)m(alen)o(t)i(to)75 640 y(a)15 b(call)i(to)d Fp(MPI)p 337 640 V 16 w(COMM)p 495 640 V 17 w(SPLIT\(comm,)e(colo)o(r,) i(k)o(ey)l(,)h(new)o(comm\))p Ft(,)e(where)j(all)g(mem)o(b)q(ers)g(of)f Fp(group)g Ft(pro-)75 696 y(vide)i Fp(colo)o(r)e Ft(=)30 b(0)15 b(and)h Fp(k)o(ey)h Ft(=)32 b(rank)15 b(in)i Fp(group)p Ft(,)f(and)g(all)h(pro)q(cesses)f(that)f(are)h(not)f(mem)o(b)q(ers)i (of)e Fp(group)75 753 y Ft(pro)o(vide)k Fp(colo)o(r)e Ft(=)37 b Fp(MPI)p 506 753 V 16 w(UNDEFINED)p Ft(.)18 b(The)g(function)h Fp(MPI)p 1166 753 V 16 w(COMM)p 1324 753 V 16 w(SPLIT)f Ft(allo)o(ws)h(more)e(general)75 809 y(partitioning)22 b(of)e(a)g(group)h(in)o(to)g(one)g(or)f(more)g (subgroups)h(with)g(optional)h(reordering.)36 b(This)22 b(call)75 865 y(applies)17 b(only)f(in)o(tra-comm)o(unicators.)-910 b Fn(>)166 922 y Ft(The)15 b(v)m(alue)i(of)e Fp(colo)o(r)e Ft(should)k(b)q(e)f(nonnegativ)o(e)-1138 b Fn(?)189 1017 y Fj(A)n(dvic)n(e)14 b(to)h(users.)39 b Ft(This)15 b(is)f(an)g (extremely)h(p)q(o)o(w)o(erful)f(mec)o(hanism)h(for)e(dividing)j(a)e (single)h(com-)189 1074 y(m)o(unicating)h(group)e(of)h(pro)q(cesses)g (in)o(to)g Ff(k)h Ft(subgroups,)f(with)g Ff(k)h Ft(c)o(hosen)g (implicitly)i(b)o(y)d(the)g(user)189 1130 y(\(b)o(y)f(the)h(n)o(um)o(b) q(er)g(of)g(colors)g(asserted)f(o)o(v)o(er)g(all)i(the)f(pro)q (cesses\).)20 b(Eac)o(h)14 b(resulting)i(comm)o(unica-)189 1187 y(tor)g(will)i(b)q(e)f(non-o)o(v)o(erlapping.)26 b(Suc)o(h)17 b(a)g(division)i(could)e(b)q(e)h(useful)g(for)e (de\014ning)i(a)f(hierarc)o(h)o(y)189 1243 y(of)d(computations,)h(suc)o (h)h(as)e(for)h(m)o(ultigrid,)h(or)f(linear)h(algebra.)189 1317 y(Multiple)k(calls)f(to)f Fp(MPI)p 623 1317 V 16 w(COMM)p 781 1317 V 16 w(SPLIT)g Ft(can)h(b)q(e)g(used)g(to)f(o)o(v)o (ercome)f(the)i(requiremen)o(t)g(that)189 1373 y(an)o(y)d(call)h(ha)o (v)o(e)f(no)g(o)o(v)o(erlap)g(of)g(the)g(resulting)i(comm)o(unicators)e (\(eac)o(h)g(pro)q(cess)g(is)h(of)f(only)h(one)189 1430 y(color)i(p)q(er)g(call\).)32 b(In)19 b(this)g(w)o(a)o(y)l(,)g(m)o (ultiple)i(o)o(v)o(erlapping)e(comm)o(unication)h(structures)e(can)h(b) q(e)189 1486 y(created.)h(Creativ)o(e)14 b(use)i(of)f(the)g Fp(colo)o(r)f Ft(and)h Fp(k)o(ey)h Ft(in)g(suc)o(h)f(splitting)i(op)q (erations)e(is)h(encouraged.)189 1560 y(Note)g(that,)g(for)h(a)f (\014xed)i(color,)f(the)g(k)o(eys)f(need)i(not)e(b)q(e)i(unique.)26 b(It)17 b(is)h Fp(MPI)p 1551 1560 V 16 w(COMM)p 1709 1560 V 16 w(SPLIT)p Ft('s)189 1616 y(resp)q(onsibilit)o(y)f(to)c(sort)h (pro)q(cesses)h(in)g(ascending)h(order)e(according)h(to)e(this)i(k)o (ey)l(,)g(and)f(to)g(break)189 1672 y(ties)19 b(in)h(a)e(consisten)o(t) i(w)o(a)o(y)l(.)30 b(If)19 b(all)h(the)f(k)o(eys)g(are)f(sp)q (eci\014ed)k(in)d(the)g(same)g(w)o(a)o(y)l(,)g(then)g(all)h(the)189 1729 y(pro)q(cesses)15 b(in)g(a)f(giv)o(en)h(color)g(will)h(ha)o(v)o(e) e(the)g(relativ)o(e)h(rank)g(order)f(as)g(they)g(did)i(in)f(their)g (paren)o(t)189 1785 y(group.)k(\(In)d(general,)f(they)g(will)i(ha)o(v)o (e)e(di\013eren)o(t)g(ranks.\))189 1859 y(Essen)o(tially)l(,)f(making)e (the)h(k)o(ey)f(v)m(alue)i(zero)f(for)e(all)j(pro)q(cesses)f(of)f(a)g (giv)o(en)h(color)g(means)f(that)g(one)189 1915 y(do)q(esn't)17 b(really)i(care)e(ab)q(out)h(the)f(rank-order)h(of)f(the)h(pro)q (cesses)g(in)g(the)g(new)g(comm)o(unicator.)189 1972 y(\()p Fj(End)d(of)i(advic)n(e)f(to)g(users.)p Ft(\))-160 2022 y Fn(>)189 2106 y Fj(R)n(ationale.)49 b Fp(colo)o(r)15 b Ft(is)i(restricted)g(to)f(b)q(e)i(nonnegativ)o(e,)f(so)f(as)h(not)f (to)g(con\014ct)h(with)g(the)g(v)m(alue)189 2163 y(assigned)e(to)g Fi(MPI)p 501 2163 13 2 v 14 w(UNDEFINED)p Ft(.)f(\()p Fj(End)i(of)g(r)n(ationale.)p Ft(\))-160 2213 y Fn(?)75 2322 y Fo(1.4.3)49 b(Communicato)o(r)16 b(Destructo)o(rs)75 2502 y Fp(MPI)p 160 2502 14 2 v 16 w(COMM)p 318 2502 V 16 w(FREE\(comm\))117 2579 y Fh(INOUT)62 b Fp(comm)470 b Fh(comm)o(unicator)11 b(to)j(b)q(e)h(destro)o(y)o(ed)g(\(handle\))75 2704 y Fg(int)23 b(MPI)p 245 2704 15 2 v 17 w(Comm)p 358 2704 V 17 w(free\(MPI)p 567 2704 V 16 w(Comm)g(*comm\))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 Fl(1.5.)29 b(MOTIV)-5 b(A)l(TING)16 b(EXAMPLES)1078 b Ft(17)75 45 y Fg(MPI)p 150 45 15 2 v 17 w(COMM)p 263 45 V 16 w(FREE\(COMM,)23 b(IERROR\))170 102 y(INTEGER)g(COMM,)h(IERROR)166 188 y Ft(This)13 b(collectiv)o(e)g (op)q(eration)g(marks)e(the)h(comm)o(unication)h(ob)s(ject)f(for)f (deallo)q(cation.)20 b(The)13 b(handle)75 244 y(is)e(set)g(to)f Fi(MPI)p 311 244 13 2 v 14 w(COMM)p 455 244 V 15 w(NULL)p Ft(.)h(An)o(y)g(p)q(ending)h(op)q(erations)f(that)f(use)h(this)g(comm)o (unicator)g(will)h(complete)75 301 y(normally;)18 b(the)f(ob)s(ject)g (is)g(actually)h(deallo)q(cated)h(only)e(if)h(there)f(are)g(no)g(other) g(activ)o(e)g(references)h(to)75 357 y(it.)28 b(This)18 b(call)h(applies)g(to)e(in)o(tra-)h(and)f(in)o(ter-comm)o(unicators.)28 b(The)18 b(delete)g(callbac)o(k)h(functions)g(for)75 414 y(all)d(cac)o(hed)g(attributes)f(\(see)g(section)h(1.7\))e(are)h (called)h(in)g(arbitrary)f(order.)189 520 y Fj(A)n(dvic)n(e)i(to)h (implementors.)52 b Ft(A)17 b(reference-coun)o(t)h(mec)o(hanism)f(ma)o (y)g(b)q(e)h(used:)24 b(the)17 b(reference)189 577 y(coun)o(t)d(is)h (incremen)o(ted)h(b)o(y)e(eac)o(h)h(call)g(to)f Fp(MPI)p 1000 577 14 2 v 16 w(COMM)p 1158 577 V 17 w(DUP)p Ft(,)g(and)g (decremen)o(ted)i(b)o(y)e(eac)o(h)h(call)189 633 y(to)j Fp(MPI)p 333 633 V 16 w(COMM)p 491 633 V 16 w(FREE)p Ft(.)h(The)h(ob)s(ject)e(is)i(ultimately)g(deallo)q(cated)g(when)g(the) f(coun)o(t)g(reac)o(hes)189 689 y(zero.)189 765 y(Though)10 b(collectiv)o(e,)j(it)d(is)h(an)o(ticipated)g(that)f(this)g(op)q (eration)h(will)h(normally)f(b)q(e)g(implemen)o(ted)h(to)189 821 y(b)q(e)h(lo)q(cal,)h(though)f(the)f(debugging)i(v)o(ersion)f(of)f (an)h Fp(MPI)f Ft(library)i(migh)o(t)e(c)o(ho)q(ose)h(to)f(sync)o (hronize.)189 878 y(\()p Fj(End)j(of)i(advic)n(e)f(to)g(implementors.)p Ft(\))75 1021 y Fq(1.5)59 b(Motivating)19 b(Examples)75 1124 y Fo(1.5.1)49 b(Current)15 b(Practice)g(#1)75 1210 y Ft(Example)h(#1a:)147 1303 y Fg(main\(int)22 b(argc,)i(char)f (**argv\))147 1360 y({)194 1416 y(int)h(me,)f(size;)194 1473 y(...)194 1529 y(MPI_Init)g(\()h(&argc,)f(&argv)g(\);)194 1586 y(MPI_Comm_rank)f(\(MPI_COMM_WORLD,)g(&me\);)194 1642 y(MPI_Comm_size)g(\(MPI_COMM_WORLD,)g(&size\);)194 1755 y(\(void\)printf)h(\("Process)f(\045d)i(size)f(\045d\\n",)g(me,)h (size\);)194 1812 y(...)194 1868 y(MPI_Finalize\(\);)147 1924 y(})75 2018 y Ft(Example)19 b(#1a)f(is)h(a)f(do-nothing)h(program) e(that)h(initializes)k(itself)d(legally)l(,)i(and)d(refers)g(to)g(the)h (the)75 2075 y(\\all")f(comm)o(unicator,)g(and)g(prin)o(ts)g(a)f (message.)27 b(It)18 b(terminates)g(itself)h(legally)g(to)q(o.)27 b(This)18 b(example)75 2131 y(do)q(es)e(not)e(imply)j(that)d Fp(MPI)h Ft(supp)q(orts)g Fg(printf)p Ft(-lik)o(e)h(comm)o(unication)g (itself.)75 2188 y(Example)g(#1b)f(\(supp)q(osing)h(that)e Fg(size)h Ft(is)h(ev)o(en\):)170 2281 y Fg(main\(int)23 b(argc,)g(char)h(**argv\))170 2338 y({)242 2394 y(int)f(me,)h(size;)242 2451 y(int)f(SOME_TAG)g(=)h(0;)242 2507 y(...)242 2564 y(MPI_Init\(&argc,)e(&argv\);)242 2677 y(MPI_Comm_rank\(MPI_COMM_WOR)o (LD,)f(&me\);)71 b(/*)23 b(local)h(*/)-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 Ft(18)393 b Fl(CHAPTER)15 b(1.)30 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)242 45 y Fg(MPI_Comm_size\(MPI_COMM_WOR)o(LD,)21 b(&size\);)i(/*)g(local)h (*/)242 158 y(if\(\(me)f(\045)h(2\))f(==)h(0\))242 214 y({)314 271 y(/*)f(send)h(unless)f(highest-numbered)e(process)i(*/)314 327 y(if\(\(me)g(+)g(1\))h(<)g(size\))385 384 y(MPI_Send\(...,)e(me)i (+)g(1,)f(SOME_TAG,)g(MPI_COMM_WORLD\);)242 440 y(})242 497 y(else)314 553 y(MPI_Recv\(...,)f(me)h(-)h(1,)g(SOME_TAG,)e (MPI_COMM_WORLD\);)242 666 y(...)242 723 y(MPI_Finalize\(\);)170 779 y(})75 873 y Ft(Example)16 b(#1b)f(sc)o(hematically)i(illustrates)g (message)e(exc)o(hanges)h(b)q(et)o(w)o(een)g(\\ev)o(en")f(and)h(\\o)q (dd")f(pro-)75 929 y(cesses)h(in)g(the)f(\\all")g(comm)o(unicator.)75 1051 y Fo(1.5.2)49 b(Current)15 b(Practice)g(#2)147 1137 y Fg(main\(int)22 b(argc,)i(char)f(**argv\))147 1193 y({)194 1250 y(int)h(me,)f(count;)194 1306 y(void)h(*data;)194 1363 y(...)194 1476 y(MPI_Init\(&argc,)e(&argv\);)194 1532 y(MPI_Comm_rank\(MPI_COMM_WORLD)o(,)f(&me\);)194 1645 y(if\(me)i(==)h(0\))194 1701 y({)290 1758 y(/*)f(get)h(input,)f (create)g(buffer)g(``data'')g(*/)290 1814 y(...)194 1871 y(})194 1984 y(MPI_Bcast\(data,)f(count,)h(MPI_BYTE,)g(0,)g (MPI_COMM_WORLD\);)194 2097 y(...)194 2209 y(MPI_Finalize\(\);)147 2266 y(})75 2372 y Ft(This)16 b(example)g(illustrates)g(the)f(use)h(of) f(a)g(collectiv)o(e)h(comm)o(unication.)75 2494 y Fo(1.5.3)49 b(\(App)o(ro)o(ximate\))16 b(Current)f(Practice)g(#3)123 2580 y Fg(main\(int)22 b(argc,)i(char)f(**argv\))123 2636 y({)170 2693 y(int)h(me,)f(count,)g(count2;)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 Fl(1.5.)29 b(MOTIV)-5 b(A)l(TING)16 b(EXAMPLES)1078 b Ft(19)170 45 y Fg(void)24 b(*send_buf,)e(*recv_buf,)h (*send_buf2,)f(*recv_buf2;)170 102 y(MPI_Group)h(MPI_GROUP_WORLD,)f (grprem;)170 158 y(MPI_Comm)h(commslave;)170 214 y(static)g(int)h (ranks[])f(=)h({0};)170 271 y(...)170 327 y(MPI_Init\(&argc,)e (&argv\);)170 384 y(MPI_Comm_group\(MPI_COMM_WORLD)o(,)f (&MPI_GROUP_WORLD\);)170 440 y(MPI_Comm_rank\(MPI_COMM_WORLD,)f(&me\);) 47 b(/*)24 b(local)f(*/)170 553 y(MPI_Group_excl\(MPI_GROUP_WORL)o(D,)e (1,)j(ranks,)f(&grprem\);)46 b(/*)24 b(local)f(*/)170 610 y(MPI_Comm_create\(MPI_COMM_WORL)o(D,)e(grprem,)i(&commslave\);)170 723 y(if\(me)h(!=)f(0\))170 779 y({)218 835 y(/*)h(compute)f(on)g (slave)g(*/)218 892 y(...)218 948 y(MPI_Reduce\(send_buf,recv_bu)o (ff,count)o(,)e(MPI_INT,)i(MPI_SUM,)g(1,)g(commslave\);)218 1005 y(...)170 1061 y(})170 1118 y(/*)h(zero)f(falls)h(through)e (immediately)h(to)g(this)h(reduce,)f(others)g(do)g(later...)g(*/)170 1174 y(MPI_Reduce\(send_buf2,)e(recv_buff2,)i(count2,)433 1231 y(MPI_INT,)g(MPI_SUM,)f(0,)i(MPI_COMM_WORLD\);)170 1344 y(MPI_Comm_free\(&commslave\);)170 1400 y (MPI_Group_free\(&MPI_GROUP_WOR)o(LD\);)170 1456 y (MPI_Group_free\(&grprem\);)170 1513 y(MPI_Finalize\(\);)123 1569 y(})75 1672 y Ft(This)18 b(example)h(illustrates)g(ho)o(w)e(a)h (group)f(consisting)i(of)e(all)i(but)f(the)g(zeroth)f(pro)q(cess)h(of)g (the)g(\\all")75 1728 y(group)13 b(is)h(created,)f(and)h(then)g(ho)o(w) f(a)g(comm)o(unicator)g(is)h(formed)f(\()g Fp(commslave)p Ft(\))e(for)i(that)g(new)h(group.)75 1785 y(The)f(new)h(comm)o (unicator)e(is)i(used)g(in)g(a)e(collectiv)o(e)j(call,)g(and)e(all)h (pro)q(cesses)f(execute)h(a)f(collectiv)o(e)i(call)75 1841 y(in)j(the)33 b Fi(MPI)p 303 1841 13 2 v 15 w(COMM)p 448 1841 V 14 w(W)o(ORLD)18 b Ft(con)o(text.)25 b(This)18 b(example)h(illustrates)f(ho)o(w)f(the)g(t)o(w)o(o)f(comm)o(unicators) 75 1898 y(\(that)c(inheren)o(tly)k(p)q(ossess)d(distinct)i(con)o (texts\))d(protect)h(comm)o(unication.)20 b(That)13 b(is,)h(comm)o (unication)75 1954 y(in)30 b Fi(MPI)p 219 1954 V 14 w(COMM)p 363 1954 V 15 w(W)o(ORLD)15 b Ft(is)h(insulated)g(from)f(comm)o (unication)h(in)31 b Fp(commslave)p Ft(,)13 b(and)i(vice)i(v)o(ersa.) 166 2010 y(In)h(summary)l(,)g(\\group)f(safet)o(y")f(is)i(ac)o(hiev)o (ed)h(via)f(comm)o(unicators)f(b)q(ecause)i(distinct)g(con)o(texts)75 2067 y(within)d(comm)o(unicators)f(are)g(enforced)h(to)e(b)q(e)i (unique)h(on)e(an)o(y)g(pro)q(cess.)75 2188 y Fo(1.5.4)49 b(Example)17 b(#4)75 2274 y Ft(The)e(follo)o(wing)g(example)g(is)g (mean)o(t)f(to)f(illustrate)j(\\safet)o(y")d(b)q(et)o(w)o(een)h(p)q (oin)o(t-to-p)q(oin)o(t)i(and)e(collectiv)o(e)75 2330 y(comm)o(unication.)20 b Fp(MPI)13 b Ft(guaran)o(tees)f(that)h(a)g (single)h(comm)o(unicator)f(can)h(do)f(safe)g(p)q(oin)o(t-to-p)q(oin)o (t)h(and)75 2387 y(collectiv)o(e)j(comm)o(unication.)147 2478 y Fg(#define)22 b(TAG_ARBITRARY)h(12345)147 2534 y(#define)f(SOME_COUNT)166 b(50)147 2647 y(main\(int)22 b(argc,)i(char)f(**argv\))147 2704 y({)-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 Ft(20)393 b Fl(CHAPTER)15 b(1.)30 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)194 45 y Fg(int)24 b(me;)194 102 y(MPI_Request)f(request[2];)194 158 y(MPI_Status)g(status[2];)194 214 y(MPI_Group)g(MPI_GROUP_WORLD,)f (subgroup;)194 271 y(int)i(ranks[])f(=)g({2,)h(4,)f(6,)h(8};)194 327 y(MPI_Comm)f(the_comm;)194 384 y(...)194 440 y(MPI_Init\(&argc,)f (&argv\);)194 497 y(MPI_Comm_group\(MPI_COMM_WORL)o(D,)f (&MPI_GROUP_WORLD\);)194 610 y(MPI_Group_incl\(MPI_GROUP_WOR)o(LD,)g (4,)j(ranks,)f(&subgroup\);)f(/*)i(local)f(*/)194 666 y(MPI_Group_rank\(subgroup,)e(&me\);)119 b(/*)23 b(local)g(*/)194 779 y(MPI_Comm_create\(MPI_COMM_WOR)o(LD,)e(subgroup,)i(&the_comm\);) 194 892 y(if\(me)g(!=)h(MPI_UNDEFINED\))194 948 y({)290 1005 y(MPI_Irecv\(buff1,)d(count,)i(MPI_DOUBLE,)g(MPI_ANY_SOURCE,)f (TAG_ARBITRARY,)719 1061 y(the_comm,)h(request\);)290 1118 y(MPI_Isend\(buff2,)e(count,)i(MPI_DOUBLE,)g(\(me+1\)\0454,)f (TAG_ARBITRARY,)719 1174 y(the_comm,)h(request+1\);)194 1231 y(})194 1344 y(for\(i)g(=)h(0;)g(i)g(<)f(SOME_COUNT,)g(i++\))242 1400 y(MPI_Reduce\(...,)f(the_comm\);)194 1456 y(MPI_Waitall\(2,)g (request,)h(status\);)194 1569 y(MPI_Comm_free\(t&he_comm\);)194 1626 y(MPI_Group_free\(&MPI_GROUP_WO)o(RLD\);)194 1682 y(MPI_Group_free\(&subgroup\);)194 1739 y(MPI_Finalize\(\);)147 1795 y(})75 1915 y Fo(1.5.5)49 b(Lib)o(ra)o(ry)16 b(Example)h(#1)75 2001 y Ft(The)e(main)h(program:)147 2083 y Fg(main\(int)22 b(argc,)i(char)f(**argv\))147 2139 y({)194 2195 y(int)h(done)f(=)h(0;) 194 2252 y(user_lib_t)f(*libh_a,)g(*libh_b;)194 2308 y(void)h(*dataset1,)e(*dataset2;)194 2365 y(...)194 2421 y(MPI_Init\(&argc,)g(&argv\);)194 2478 y(...)194 2534 y(init_user_lib\(MPI_COMM_WORLD)o(,)f(&libh_a\);)194 2591 y(init_user_lib\(MPI_COMM_WORLD)o(,)g(&libh_b\);)194 2647 y(...)194 2704 y(user_start_op\(libh_a,)g(dataset1\);)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 Fl(1.5.)29 b(MOTIV)-5 b(A)l(TING)16 b(EXAMPLES)1078 b Ft(21)194 45 y Fg(user_start_op\(libh_b,)21 b(dataset2\);)194 102 y(...)194 158 y(while\(!done\))194 214 y({)266 271 y(/*)i(work)h(*/)266 327 y(...)266 384 y(MPI_Reduce\(...,)e(MPI_COMM_WORLD\);)266 440 y(...)266 497 y(/*)h(see)h(if)g(done)f(*/)266 553 y(...)194 610 y(})194 666 y(user_end_op\(libh_a\);)194 723 y(user_end_op\(libh_b\);) 194 835 y(uninit_user_lib\(libh_a\);)194 892 y (uninit_user_lib\(libh_b\);)194 948 y(MPI_Finalize\(\);)147 1005 y(})75 1099 y Ft(The)15 b(user)h(library)g(initialization)i(co)q (de:)147 1192 y Fg(void)23 b(init_user_lib\(MPI_Comm)e(comm,)i (user_lib_t)f(**handle\))147 1249 y({)194 1305 y(user_lib_t)h(*save;) 194 1418 y(user_lib_initsave\(&save\);)e(/*)i(local)h(*/)194 1475 y(MPI_Comm_dup\(comm,)e(&\(save)h(->)g(comm\)\);)194 1588 y(/*)h(other)f(inits)g(*/)194 1644 y(...)194 1757 y(*handle)g(=)h(save;)147 1813 y(})75 1907 y Ft(User)15 b(start-up)g(co)q(de:)147 2001 y Fg(void)23 b (user_start_op\(user_lib_t)d(*handle,)j(void)h(*data\))147 2058 y({)194 2114 y(MPI_Irecv\()f(...,)g(handle->comm,)f(&\(handle)h (->)h(irecv_handle\))e(\);)194 2170 y(MPI_Isend\()h(...,)g (handle->comm,)f(&\(handle)h(->)h(isend_handle\))e(\);)147 2227 y(})75 2321 y Ft(User)15 b(comm)o(unication)h(clean-up)h(co)q(de:) 147 2415 y Fg(void)23 b(user_end_op\(user_lib_t)e(*handle\))147 2471 y({)194 2527 y(MPI_Status)i(*status;)194 2584 y(MPI_Wait\(handle)f (->)i(isend_handle,)e(status\);)194 2640 y(MPI_Wait\(handle)g(->)i (irecv_handle,)e(status\);)147 2697 y(})-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 Ft(22)393 b Fl(CHAPTER)15 b(1.)30 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Ft(User)g(ob)s(ject)g(clean-up)i(co)q(de:)147 139 y Fg(void)23 b(uninit_user_lib\(user_lib_)o(t)e(*handle\))147 195 y({)194 252 y(MPI_Comm_free\(&\(handle)g(->)j(comm\)\);)194 308 y(free\(handle\);)147 365 y(})75 486 y Fo(1.5.6)49 b(Lib)o(ra)o(ry)16 b(Example)h(#2)75 572 y Ft(The)e(main)h(program:)147 666 y Fg(main\(int)22 b(argc,)i(char)f(**argv\))147 723 y({)194 779 y(int)h(ma,)f(mb;)194 835 y(MPI_Group)g(MPI_GROUP_WORLD,)f (group_a,)g(group_b;)194 892 y(MPI_Comm)h(comm_a,)g(comm_b;)194 1005 y(static)g(int)h(list_a[])f(=)g({0,)h(1};)75 1061 y(#if)47 b(defined\(EXAMPLE_2B\))22 b(|)h(defined\(EXAMPLE_2C\))194 1118 y(static)g(int)h(list_b[])f(=)g({0,)h(2)f(,3};)75 1174 y(#else/*)g(EXAMPLE_2A)f(*/)194 1231 y(static)h(int)h(list_b[])f (=)g({0,)h(2};)75 1287 y(#endif)194 1344 y(int)g(size_list_a)e(=)i (sizeof\(list_a\)/sizeof\(int)o(\);)194 1400 y(int)g(size_list_b)e(=)i (sizeof\(list_b\)/sizeof\(int)o(\);)194 1513 y(...)194 1569 y(MPI_Init\(&argc,)e(&argv\);)194 1626 y (MPI_Comm_group\(MPI_COMM_WORL)o(D,)f(&MPI_GROUP_WORLD\);)194 1739 y(MPI_Group_incl\(MPI_GROUP_WOR)o(LD,)g(size_list_a,)h(list_a,)h (&group_a\);)194 1795 y(MPI_Group_incl\(MPI_GROUP_WOR)o(LD,)e (size_list_b,)h(list_b,)h(&group_b\);)194 1908 y (MPI_Comm_create\(MPI_COMM_WOR)o(LD,)e(group_a,)i(&comm_a\);)194 1965 y(MPI_Comm_create\(MPI_COMM_WOR)o(LD,)e(group_b,)i(&comm_b\);)194 2077 y(if\(comm_a)g(!=)h(MPI_COMM_NULL\))266 2134 y (MPI_Comm_rank\(comm_a,)d(&ma\);)194 2190 y(if\(comm_a)i(!=)h (MPI_COMM_NULL\))266 2247 y(MPI_Comm_rank\(comm_b,)d(&mb\);)194 2360 y(if\(comm_a)i(!=)h(MPI_COMM_NULL\))266 2416 y (lib_call\(comm_a\);)194 2529 y(if\(comm_b)f(!=)h(MPI_COMM_NULL\))194 2586 y({)242 2642 y(lib_call\(comm_b\);)242 2698 y(lib_call\(comm_b\);) 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 Fl(1.5.)34 b(MOTIV)-5 b(A)l(TING)16 b(EXAMPLES)1073 b Ft(23)194 45 y Fg(})194 158 y(if\(comm_a)23 b(!=)h(MPI_COMM_NULL\))242 214 y(MPI_Comm_free\(&comm_a\);)194 271 y(if\(comm_b)f(!=)h(MPI_COMM_NULL\))242 327 y (MPI_Comm_free\(&comm_b\);)194 384 y(MPI_Group_free\(&group_a\);)194 440 y(MPI_Group_free\(&group_b\);)194 497 y (MPI_Group_free\(&MPI_GROUP_WO)o(RLD\);)194 553 y(MPI_Finalize\(\);)147 610 y(})75 703 y Ft(The)15 b(library:)147 797 y Fg(void)23 b(lib_call\(MPI_Comm)e(comm\))147 854 y({)194 910 y(int)j(me,)f(done)h (=)f(0;)194 967 y(MPI_Comm_rank\(comm,)f(&me\);)194 1023 y(if\(me)h(==)h(0\))266 1080 y(while\(!done\))266 1136 y({)337 1192 y(MPI_Recv\(...,)f(MPI_ANY_SOURCE,)e(MPI_ANY_TAG,)i (comm\);)337 1249 y(...)266 1305 y(})194 1362 y(else)194 1418 y({)242 1475 y(/*)h(work)f(*/)242 1531 y(MPI_Send\(...,)f(0,)i (ARBITRARY_TAG,)e(comm\);)242 1588 y(....)194 1644 y(})75 1701 y(#ifdef)h(EXAMPLE_2C)194 1757 y(/*)h(include)f(\(resp,)g (exclude\))g(for)g(safety)g(\(resp,)g(no)h(safety\):)f(*/)194 1813 y(MPI_Barrier\(comm\);)75 1870 y(#endif)147 1926 y(})75 2020 y Ft(The)13 b(ab)q(o)o(v)o(e)f(example)h(is)h(really)f (three)g(examples,)g(dep)q(ending)i(on)e(whether)f(or)g(not)h(one)f (includes)j(rank)75 2077 y(3)f(in)h Fp(list)p 222 2077 14 2 v 17 w(b)p Ft(,)g(and)f(whether)h(or)f(not)f(a)i(sync)o(hronize)g (is)g(included)i(in)e Fp(lib)p 1290 2077 V 17 w(call)p Ft(.)k(This)c(example)g(illustrates)75 2133 y(that,)i(despite)h(con)o (texts,)f(subsequen)o(t)h(calls)h(to)d Fp(lib)p 984 2133 V 17 w(call)h Ft(with)h(the)f(same)g(con)o(text)g(need)h(not)f(b)q(e)h (safe)75 2190 y(from)g(one)h(another)g(\(collo)q(quially)l(,)j(\\bac)o (k-masking"\).)30 b(Safet)o(y)18 b(is)i(realized)g(if)g(the)37 b Fp(MPI)p 1684 2190 V 16 w(Ba)o(rrier)17 b Ft(is)75 2246 y(added.)34 b(What)19 b(this)h(demonstrates)f(is)h(that)f (libraries)i(ha)o(v)o(e)f(to)f(b)q(e)h(written)g(carefully)l(,)i(ev)o (en)e(with)75 2302 y(con)o(texts.)j(When)17 b(rank)f(3)g(is)h (excluded,)i(then)d(the)h(sync)o(hronize)g(is)g(not)g(needed)g(to)f (get)g(safet)o(y)g(from)75 2359 y(bac)o(k)f(masking.)166 2415 y(Algorithms)i(lik)o(e)h(\\reduce")e(and)h(\\allreduce")h(ha)o(v)o (e)e(strong)g(enough)h(source)g(selectivit)o(y)h(prop-)75 2472 y(erties)c(so)g(that)g(they)g(are)f(inheren)o(tly)j(ok)m(a)o(y)e (\(no)f(bac)o(kmasking\),)h(pro)o(vided)h(that)e Fp(MPI)h Ft(pro)o(vides)g(basic)75 2528 y(guaran)o(tees.)21 b(So)16 b(are)g(m)o(ultiple)i(calls)f(to)e(a)h(t)o(ypical)h(tree-broadcast)e (algorithm)h(with)g(the)g(same)g(ro)q(ot)75 2585 y(or)j(di\013eren)o(t) g(ro)q(ots)f(\(see)h([6)o(]\).)31 b(Here)20 b(w)o(e)e(rely)i(on)f(t)o (w)o(o)f(guaran)o(tees)g(of)h Fp(MPI)p Ft(:)f(pairwise)i(ordering)f(of) 75 2641 y(messages)e(b)q(et)o(w)o(een)h(pro)q(cesses)g(in)g(the)g(same) f(con)o(text,)g(and)h(source)f(selectivit)o(y)i(|)f(deleting)h(either) 75 2698 y(feature)c(remo)o(v)o(es)f(the)i(guaran)o(tee)e(that)g(bac)o (kmasking)i(cannot)f(b)q(e)h(required.)-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 Ft(24)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)166 45 y Ft(Algorithms)d(that)g(try)g(to)f(do)h(non-deterministic)j (broadcasts)c(or)h(other)g(calls)h(that)f(include)j(wild-)75 102 y(card)g(op)q(erations)g(will)i(not)e(generally)h(ha)o(v)o(e)f(the) g(go)q(o)q(d)g(prop)q(erties)h(of)f(the)g(deterministic)i(implemen-)75 158 y(tations)g(of)h(\\reduce,")g(\\allreduce,")i(and)e(\\broadcast.") 27 b(Suc)o(h)18 b(algorithms)g(w)o(ould)g(ha)o(v)o(e)g(to)f(utilize)75 214 y(the)e(monotonically)h(increasing)h(tags)d(\(within)i(a)f(comm)o (unicator)g(scop)q(e\))g(to)g(k)o(eep)g(things)h(straigh)o(t.)166 271 y(All)k(of)e(the)h(foregoing)f(is)h(a)g(supp)q(osition)h(of)e (\\collectiv)o(e)i(calls")f(implemen)o(ted)i(with)e(p)q(oin)o(t-to-)75 327 y(p)q(oin)o(t)g(op)q(erations.)30 b Fp(MPI)18 b Ft(implemen)o (tations)i(ma)o(y)e(or)g(ma)o(y)g(not)g(implemen)o(t)i(collectiv)o(e)h (calls)e(using)75 384 y(p)q(oin)o(t-to-p)q(oin)o(t)e(op)q(erations.)22 b(These)16 b(algorithms)g(are)f(used)i(to)e(illustrate)i(the)f(issues)h (of)e(correctness)75 440 y(and)g(safet)o(y)l(,)g(indep)q(enden)o(t)i (of)e(ho)o(w)g Fp(MPI)f Ft(implemen)o(ts)j(its)e(collectiv)o(e)i (calls.)k(See)16 b(also)f(section)h(1.8.)75 584 y Fq(1.6)59 b(Inter-Communication)75 685 y Ft(This)18 b(section)h(in)o(tro)q(duces) f(the)g(concept)g(of)f(in)o(ter-comm)o(unication)i(and)f(describ)q(es)i (the)d(p)q(ortions)h(of)75 741 y Fp(MPI)j Ft(that)g(supp)q(ort)h(it.)40 b(It)22 b(describ)q(es)h(supp)q(ort)f(for)f(writing)i(programs)d(that)h (con)o(tain)h(user-lev)o(el)75 798 y(serv)o(ers.)166 854 y(All)c(p)q(oin)o(t-to-p)q(oin)o(t)g(comm)o(unication)g(describ)q (ed)h(th)o(us)d(far)h(has)g(in)o(v)o(olv)o(ed)g(comm)o(unication)h(b)q (e-)75 911 y(t)o(w)o(een)c(pro)q(cesses)g(that)f(are)h(mem)o(b)q(ers)g (of)f(the)h(same)g(group.)19 b(This)c(t)o(yp)q(e)f(of)f(comm)o (unication)i(is)f(called)75 967 y(\\in)o(tra-comm)o(unication")j(and)g (the)h(comm)o(unicator)e(used)i(is)f(called)i(an)e(\\in)o(tra-comm)o (unicator,")f(as)75 1024 y(w)o(e)f(ha)o(v)o(e)g(noted)g(earlier)h(in)g (the)f(c)o(hapter.)166 1080 y(In)c(mo)q(dular)g(and)f(m)o(ulti-discipl) q(inary)j(applications,)g(di\013eren)o(t)d(pro)q(cess)h(groups)f (execute)h(distinct)75 1137 y(mo)q(dules)i(and)f(pro)q(cesses)h(within) g(di\013eren)o(t)f(mo)q(dules)h(comm)o(unicate)f(with)h(one)f(another)f (in)i(a)f(pip)q(eline)75 1193 y(or)j(a)f(more)h(general)h(mo)q(dule)g (graph.)j(In)d(these)f(applications,)i(the)e(most)f(natural)h(w)o(a)o (y)f(for)h(a)g(pro)q(cess)75 1250 y(to)g(sp)q(ecify)i(a)e(target)f(pro) q(cess)i(is)g(b)o(y)g(the)g(rank)f(of)g(the)h(target)e(pro)q(cess)i (within)h(the)e(target)g(group.)20 b(In)75 1306 y(applications)13 b(that)e(con)o(tain)h(in)o(ternal)h(user-lev)o(el)g(serv)o(ers,)f(eac)o (h)f(serv)o(er)h(ma)o(y)f(b)q(e)h(a)f(pro)q(cess)h(group)g(that)75 1362 y(pro)o(vides)17 b(services)f(to)g(one)g(or)g(more)f(clien)o(ts,)i (and)g(eac)o(h)f(clien)o(t)h(ma)o(y)f(b)q(e)g(a)g(pro)q(cess)h(group)e (that)h(uses)75 1419 y(the)h(services)h(of)f(one)g(or)g(more)g(serv)o (ers.)25 b(It)17 b(is)h(again)f(most)f(natural)i(to)e(sp)q(ecify)j(the) e(target)f(pro)q(cess)75 1475 y(b)o(y)d(rank)g(within)i(the)e(target)f (group)i(in)g(these)f(applications.)21 b(This)14 b(t)o(yp)q(e)g(of)e (comm)o(unication)j(is)e(called)75 1532 y(\\in)o(ter-comm)o(unication") 18 b(and)g(the)g(comm)o(unicator)f(used)h(is)g(called)h(an)f(\\in)o (ter-comm)o(unicator,")f(as)75 1588 y(in)o(tro)q(duced)f(earlier.)166 1645 y(An)d(in)o(ter-comm)o(unication)g(is)g(a)f(p)q(oin)o(t-to-p)q (oin)o(t)h(comm)o(unication)g(b)q(et)o(w)o(een)g(pro)q(cesses)f(in)h (di\013er-)75 1701 y(en)o(t)f(groups.)19 b(The)12 b(group)g(con)o (taining)h(a)f(pro)q(cess)h(that)e(initiates)j(an)e(in)o(ter-comm)o (unication)i(op)q(eration)75 1758 y(is)i(called)i(the)d(\\lo)q(cal)i (group,")e(that)g(is,)h(the)g(sender)g(in)h(a)e(send)i(and)f(the)g (receiv)o(er)g(in)h(a)e(receiv)o(e.)23 b(The)75 1814 y(group)16 b(con)o(taining)g(the)g(target)f(pro)q(cess)h(is)g(called)i (the)e(\\remote)f(group,")g(that)g(is,)h(the)g(receiv)o(er)h(in)f(a)75 1871 y(send)f(and)f(the)g(sender)h(in)g(a)f(receiv)o(e.)20 b(As)14 b(in)h(in)o(tra-comm)o(unication,)g(the)f(target)f(pro)q(cess)h (is)h(sp)q(eci\014ed)75 1927 y(using)k(a)g Fp(\(communicato)o(r,)e (rank\))i Ft(pair.)30 b(Unlik)o(e)21 b(in)o(tra-comm)o(unication,)e (the)g(rank)g(is)g(relativ)o(e)g(to)f(a)75 1983 y(second,)d(remote)g (group.)166 2040 y(All)e(in)o(ter-comm)o(unicator)f(constructors)g(are) f(blo)q(c)o(king)j(and)e(require)h(that)e(the)h(lo)q(cal)h(and)g (remote)75 2096 y(groups)i(b)q(e)h(disjoin)o(t)g(in)g(order)f(to)f(a)o (v)o(oid)h(deadlo)q(c)o(k.)166 2153 y(Here)f(is)h(a)f(summary)g(of)g (the)g(prop)q(erties)h(of)f(in)o(ter-comm)o(unication)i(and)e(in)o (ter-comm)o(unicators:)143 2247 y Fn(\017)23 b Ft(The)c(syn)o(tax)g(of) g(p)q(oin)o(t-to-p)q(oin)o(t)h(comm)o(unication)g(is)g(the)f(same)g (for)g(b)q(oth)h(in)o(ter-)f(and)h(in)o(tra-)189 2303 y(comm)o(unication.)26 b(The)17 b(same)g(comm)o(unicator)g(can)g(b)q(e) g(used)h(b)q(oth)f(for)g(send)g(and)h(for)e(receiv)o(e)189 2360 y(op)q(erations.)143 2453 y Fn(\017)23 b Ft(A)14 b(target)g(pro)q(cess)h(is)g(addressed)h(b)o(y)f(its)g(rank)f(in)i(the) f(remote)f(group,)g(b)q(oth)h(for)f(sends)i(and)f(for)189 2510 y(receiv)o(es.)143 2604 y Fn(\017)23 b Ft(Comm)o(unications)12 b(using)i(an)e(in)o(ter-comm)o(unicator)h(are)f(guaran)o(teed)g(not)g (to)g(con\015ict)h(with)g(an)o(y)189 2660 y(comm)o(unications)i(that)g (use)h(a)e(di\013eren)o(t)i(comm)o(unicator.)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 Fl(1.6.)34 b(INTER-COMMUNICA)l(TION)1070 b Ft(25)143 45 y Fn(\017)23 b Ft(An)15 b(in)o(ter-comm)o(unicator)g (cannot)g(b)q(e)h(used)g(for)f(collectiv)o(e)i(comm)o(unication.)143 139 y Fn(\017)23 b Ft(A)15 b(comm)o(unicator)g(will)i(pro)o(vide)e (either)h(in)o(tra-)f(or)g(in)o(ter-comm)o(unication,)h(nev)o(er)f(b)q (oth.)75 233 y(The)i(routine)f Fp(MPI)p 412 233 14 2 v 16 w(COMM)p 570 233 V 17 w(TEST)p 701 233 V 16 w(INTER)h Ft(ma)o(y)e(b)q(e)i(used)g(to)f(determine)h(if)g(a)f(comm)o(unicator)g (is)h(an)75 289 y(in)o(ter-)12 b(or)f(in)o(tra-comm)o(unicator.)19 b(In)o(ter-comm)o(unicators)11 b(can)h(b)q(e)h(used)f(as)f(argumen)o (ts)g(to)g(some)h(of)f(the)75 346 y(other)i(comm)o(unicator)h(access)g (routines.)20 b(In)o(ter-comm)o(unicators)13 b(cannot)h(b)q(e)g(used)h (as)e(input)i(to)e(some)75 402 y(of)i(the)g(constructor)f(routines)i (for)f(in)o(tra-comm)o(unicators)f(\(for)h(instance,)g Fp(MPI)p 1476 402 V 16 w(COMM)p 1634 402 V 17 w(CREA)l(TE)p Ft(\).)189 508 y Fj(A)n(dvic)n(e)g(to)i(implementors.)41 b Ft(F)l(or)15 b(the)g(purp)q(ose)h(of)f(p)q(oin)o(t-to-p)q(oin)o(t)h (comm)o(unication,)g(comm)o(u-)189 565 y(nicators)f(can)g(b)q(e)h (represen)o(ted)g(in)g(eac)o(h)f(pro)q(cess)g(b)o(y)g(a)g(tuple)i (consisting)f(of:)189 659 y Fk(group)189 732 y(send)p 295 732 16 2 v 18 w(con)o(text)189 805 y(receiv)o(e)p 350 805 V 18 w(con)o(text)189 878 y(source)189 972 y Ft(F)l(or)9 b(in)o(ter-comm)o(unicators,)i Fk(group)g Ft(describ)q(es)h(the)e(remote)g(group,)h(and)f Fk(source)g Ft(is)h(the)f(rank)g(of)189 1028 y(the)k(pro)q(cess)h(in)g(the)g(lo)q (cal)g(group.)20 b(F)l(or)14 b(in)o(tra-comm)o(unicators,)f Fk(group)i Ft(is)g(the)f(comm)o(unicator)189 1085 y(group)20 b(\(remote=lo)q(cal\),)j Fk(source)d Ft(is)i(the)f(rank)g(of)f(the)i (pro)q(cess)f(in)h(this)f(group,)h(and)f Fk(send)189 1141 y(con)o(text)e Ft(and)g Fk(receiv)o(e)h(con)o(text)f Ft(are)g(iden)o(tical.)32 b(A)19 b(group)g(is)g(represen)o(ted)g(b)o(y) g(a)g(rank-to-)189 1197 y(absolute-address)c(translation)h(table.)189 1273 y(The)11 b(in)o(ter-comm)o(unicator)h(cannot)g(b)q(e)g(discussed)h (sensibly)g(without)f(considering)h(pro)q(cesses)f(in)189 1329 y(b)q(oth)f(the)h(lo)q(cal)g(and)g(remote)e(groups.)19 b(Imagine)12 b(a)f(pro)q(cess)g Fk(P)g Ft(in)i(group)e Fn(P)t Ft(,)g(whic)o(h)h(has)f(an)h(in)o(ter-)189 1385 y(comm)o(unicator)18 b Fk(C)527 1392 y Fb(P)556 1385 y Ft(,)i(and)f(a)f(pro)q(cess)h Fk(Q)g Ft(in)h(group)e Fn(Q)p Ft(,)i(whic)o(h)f(has)g(an)g(in)o(ter-comm)o(unicator)189 1442 y Fk(C)227 1449 y Fb(Q)257 1442 y Ft(.)h(Then)243 1536 y Fn(\017)j Fk(C)327 1543 y Fb(P)356 1536 y Fk(.group)14 b Ft(describ)q(es)j(the)f(group)e Fn(Q)i Ft(and)f Fk(C)1097 1543 y Fb(Q)1128 1536 y Fk(.group)f Ft(describ)q(es)j(the)e(group)g Fn(P)t Ft(.)243 1609 y Fn(\017)23 b Fk(C)327 1616 y Fb(P)356 1609 y Fk(.send)p 477 1609 V 18 w(con)o(text)17 b(=)h Ft(C)770 1616 y Fb(Q)800 1609 y Fk(.receiv)o(e)p 976 1609 V 18 w(con)o(text)d Ft(and)h(the)f(con)o(text)g(is)g(unique)i(in)f Fn(Q)p Ft(;)289 1665 y Fk(C)327 1672 y Fb(P)356 1665 y Fk(.receiv)o(e)p 532 1665 V 18 w(con)o(text)h(=)35 b(C)847 1672 y Fb(Q)877 1665 y Fk(.send)p 998 1665 V 18 w(con)o(text)16 b Ft(and)f(this)h(con)o(text)e(is)i(unique)h(in)f Fn(P)t Ft(.)243 1738 y Fn(\017)23 b Fk(C)327 1745 y Fb(P)356 1738 y Fk(.source)14 b Ft(is)i(rank)f(of)f Fk(P)h Ft(in)h Fn(P)j Ft(and)c Fk(C)1013 1745 y Fb(Q)1044 1738 y Fk(.source)f Ft(is)i(rank)f(of)g Fk(Q)g Ft(in)h Fn(Q)p Ft(.)189 1832 y(Assume)j(that)f Fk(P)g Ft(sends)i(a)e(message)g(to)h Fk(Q)g Ft(using)g(the)g(in)o(ter-comm)o(unicator.)31 b(Then)19 b Fk(P)g Ft(uses)189 1889 y(the)g Fk(group)f Ft(table)i(to)e(\014nd)h(the)g(absolute)g(address)g(of)g Fk(Q)p Ft(;)f Fk(source)h Ft(and)g Fk(send)p 1611 1889 V 18 w(con)o(text)g Ft(are)189 1945 y(app)q(ended)d(to)f(the)g (message.)189 2020 y(Assume)22 b(that)f Fk(Q)h Ft(p)q(osts)f(a)h (receiv)o(e)g(with)h(an)e(explicit)j(source)e(argumen)o(t)f(using)i (the)f(in)o(ter-)189 2077 y(comm)o(unicator.)c(Then)c Fk(Q)f Ft(matc)o(hes)g Fk(receiv)o(e)p 1006 2077 V 18 w(con)o(text)g Ft(to)f(the)i(message)e(con)o(text)h(and)g(source)189 2133 y(argumen)o(t)h(to)h(the)g(message)g(source.)189 2208 y(The)g(same)g(algorithm)g(is)h(appropriate)f(for)g(in)o(tra-comm) o(unicators)f(as)h(w)o(ell.)189 2283 y(In)g(order)g(to)f(supp)q(ort)h (in)o(ter-comm)o(unicator)g(accessors)g(and)g(constructors,)f(it)h(is)g (necessary)h(to)189 2340 y(supplemen)o(t)j(this)f(mo)q(del)h(with)f (additional)i(structures,)e(that)f(store)g(information)h(ab)q(out)g (the)189 2396 y(lo)q(cal)i(comm)o(unication)f(group,)h(and)f (additional)h(safe)f(con)o(texts.)30 b(\()p Fj(End)19 b(of)h(advic)n(e)g(to)g(imple-)189 2453 y(mentors.)p Ft(\))-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: 26 28 26 27 bop 75 -100 a Ft(26)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fo(1.6.1)49 b(Inter-communicato)o(r)15 b(Accesso)o(rs)75 225 y Fp(MPI)p 160 225 14 2 v 16 w(COMM)p 318 225 V 16 w(TEST)p 448 225 V 17 w(INTER\(comm,)e(\015ag\))117 303 y Fh(IN)171 b Fp(comm)454 b Fh(comm)o(unicator)11 b(\(handle\))117 378 y(OUT)108 b Fp(\015ag)518 b Fh(\(logical\))75 502 y Fg(int)23 b(MPI)p 245 502 15 2 v 17 w(Comm)p 358 502 V 17 w(test)p 471 502 V 16 w(inter\(MPI)p 703 502 V 16 w(Comm)h(comm,)f(int)g(*flag\))75 589 y(MPI)p 150 589 V 17 w(COMM)p 263 589 V 16 w(TEST)p 375 589 V 17 w(INTER\(COMM,)f (FLAG,)i(IERROR\))170 645 y(INTEGER)f(COMM,)h(IERROR)170 702 y(LOGICAL)f(FLAG)75 788 y Ft(This)d(lo)q(cal)g(routine)g(allo)o(ws) f(the)g(calling)i(pro)q(cess)f(to)e(determine)i(if)g(a)f(comm)o (unicator)g(is)g(an)h(in)o(ter-)75 844 y(comm)o(unicator)g(or)h(an)f (in)o(tra-comm)o(unicator.)36 b(It)21 b(returns)g Fi(true)g Ft(if)g(it)g(is)h(an)e(in)o(ter-comm)o(unicator,)75 901 y(otherwise)15 b Fi(false)p Ft(.)166 957 y(When)j(an)f(in)o(ter-comm)o (unicator)h(is)g(used)g(as)f(an)g(input)i(argumen)o(t)d(to)h(the)h (comm)o(unicator)f(ac-)75 1014 y(cessors)d(describ)q(ed)i(ab)q(o)o(v)o (e)e(under)h(in)o(tra-comm)o(unication,)f(the)h(follo)o(wing)f(table)h (describ)q(es)h(b)q(eha)o(vior.)p 270 1108 1410 2 v 269 1165 2 57 v 652 1148 a Fp(MPI)p 737 1148 14 2 v 16 w(COMM)p 895 1148 V 17 w(*)e Ft(F)l(unction)j(Beha)o(vior)p 1679 1165 2 57 v 269 1221 V 655 1204 a(\(in)f(In)o(ter-Comm)o(unication)f (Mo)q(de\))p 1679 1221 V 270 1223 1410 2 v 270 1233 V 269 1289 2 57 v 295 1272 a Fp(MPI)p 380 1272 14 2 v 16 w(COMM)p 538 1272 V 16 w(SIZE)p 729 1289 2 57 v 111 w Ft(returns)g(the)g(size)h(of)f(the)g(lo)q(cal)i(group.)p 1679 1289 V 269 1346 V 295 1329 a Fp(MPI)p 380 1329 14 2 v 16 w(COMM)p 538 1329 V 16 w(GROUP)p 729 1346 2 57 v 52 w Ft(returns)e(the)g(lo)q(cal)h(group.)p 1679 1346 V 269 1402 V 295 1385 a Fp(MPI)p 380 1385 14 2 v 16 w(COMM)p 538 1385 V 16 w(RANK)p 729 1402 2 57 v 81 w Ft(returns)f(the)g(rank)g (in)h(the)f(lo)q(cal)i(group)p 1679 1402 V 270 1404 1410 2 v 75 1489 a(F)l(urthermore,)d(the)g(op)q(eration)g Fp(MPI)p 715 1489 14 2 v 16 w(COMM)p 873 1489 V 17 w(COMP)l(ARE)h Ft(is)g(v)m(alid)h(for)e(in)o(ter-comm)o(unicators.)19 b(Both)75 1546 y(comm)o(unicators)13 b(m)o(ust)h(b)q(e)g(either)g(in)o (tra-)g(or)f(in)o(ter-comm)o(unicators,)h(or)f(else)i Fi(MPI)p 1515 1546 13 2 v 14 w(UNEQUAL)e Ft(results.)75 1602 y(Both)22 b(corresp)q(onding)g(lo)q(cal)h(and)f(remote)f(groups)h (m)o(ust)f(compare)g(correctly)h(to)f(get)h(the)g(results)75 1659 y Fi(MPI)p 152 1659 V 14 w(CONGRUENT)c Ft(and)g Fi(MPI)p 603 1659 V 15 w(SIMILAR)p Ft(.)f(In)i(particular,)h(it)e(is)h (p)q(ossible)i(for)d Fi(MPI)p 1515 1659 V 14 w(SIMILAR)g Ft(to)g(result)75 1715 y(b)q(ecause)e(either)g(the)f(lo)q(cal)i(or)d (remote)h(groups)g(w)o(ere)g(similar)h(but)f(not)g(iden)o(tical.)166 1772 y(The)23 b(follo)o(wing)g(accessors)f(pro)o(vide)h(consisten)o(t)f (access)h(to)f(the)g(remote)g(group)g(of)g(an)h(in)o(ter-)75 1828 y(comm)o(unicator:)166 1885 y(The)15 b(follo)o(wing)h(are)f(all)h (lo)q(cal)h(op)q(erations.)75 2036 y Fp(MPI)p 160 2036 14 2 v 16 w(COMM)p 318 2036 V 16 w(REMOTE)p 521 2036 V 17 w(SIZE\(comm,)c(size\))117 2113 y Fh(IN)155 b Fp(comm)470 b Fh(in)o(ter-comm)o(unicator)11 b(\(handle\))117 2188 y(OUT)108 b Fp(size)519 b Fh(n)o(um)o(b)q(er)19 b(of)g(pro)q(cesses)j (in)d(the)h(remote)f(group)g(of)38 b Fi(comm)905 2244 y Fh(\(in)o(teger\))75 2369 y Fg(int)23 b(MPI)p 245 2369 15 2 v 17 w(Comm)p 358 2369 V 17 w(remote)p 519 2369 V 16 w(size\(MPI)p 727 2369 V 16 w(Comm)h(comm,)f(int)g(*size\))75 2455 y(MPI)p 150 2455 V 17 w(COMM)p 263 2455 V 16 w(REMOTE)p 423 2455 V 17 w(SIZE\(COMM,)f(SIZE,)h(IERROR\))170 2512 y(INTEGER)g(COMM,)h(SIZE,)f(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 Fl(1.6.)34 b(INTER-COMMUNICA)l(TION)1070 b Ft(27)75 45 y Fp(MPI)p 160 45 14 2 v 16 w(COMM)p 318 45 V 16 w(REMOTE)p 521 45 V 17 w(GROUP\(comm,)14 b(group\))117 122 y Fh(IN)155 b Fp(comm)470 b Fh(in)o(ter-comm)o(unicator)11 b(\(handle\))117 197 y(OUT)108 b Fp(group)479 b Fh(remote)14 b(group)f(corresp)q(onding)i(to)f Fi(comm)e Fh(\(handle\))75 322 y Fg(int)23 b(MPI)p 245 322 15 2 v 17 w(Comm)p 358 322 V 17 w(remote)p 519 322 V 16 w(group\(MPI)p 751 322 V 16 w(Comm)g(comm,)h(MPI)p 1102 322 V 16 w(Group)g(*group\))75 408 y(MPI)p 150 408 V 17 w(COMM)p 263 408 V 16 w(REMOTE)p 423 408 V 17 w(GROUP\(COMM,)e(GROUP,)h(IERROR\))170 465 y(INTEGER)g(COMM,)h(GROUP,)f(IERROR)189 601 y Fj(R)n(ationale.)83 b Ft(Symmetric)23 b(access)g(to)f(b)q(oth)g(the)h(lo)q(cal)g(and)g (remote)f(groups)g(of)g(an)h(in)o(ter-)189 658 y(comm)o(unicator)17 b(is)h(imp)q(ortan)o(t,)g(so)f(this)h(function,)h(as)f(w)o(ell)g(as)g Fp(MPI)p 1407 658 14 2 v 16 w(COMM)p 1565 658 V 16 w(REMOTE)p 1768 658 V 17 w(SIZE)189 714 y Ft(ha)o(v)o(e)c(b)q(een)j(pro)o(vided.)j (\()p Fj(End)c(of)g(r)n(ationale.)p Ft(\))75 836 y Fo(1.6.2)49 b(Inter-communicato)o(r)15 b(Op)q(erations)75 922 y Ft(This)j(section)g (in)o(tro)q(duces)g(four)f(blo)q(c)o(king)h(in)o(ter-comm)o(unicator)g (op)q(erations.)26 b Fp(MPI)p 1573 922 V 16 w(INTERCOMM-)p 75 978 V 89 978 a(CREA)l(TE)13 b Ft(is)f(used)h(to)f(bind)h(t)o(w)o(o)e (in)o(tra-comm)o(unicators)h(in)o(to)g(an)g(inter-comm)o(unicator;)h (the)f(function)75 1034 y Fp(MPI)p 160 1034 V 16 w(INTERCOMM)p 450 1034 V 16 w(MERGE)h Ft(creates)f(an)g(in)o(tra-comm)o(unicator)g(b) o(y)g(merging)h(the)f(lo)q(cal)h(and)g(remote)75 1091 y(groups)18 b(of)g(an)g(in)o(ter-comm)o(unicator.)30 b(The)19 b(functions)p Fp(MPI)p 1140 1091 V 16 w(COMM)p 1298 1091 V 17 w(DUP)f Ft(and)p Fp(MPI)p 1581 1091 V 16 w(COMM)p 1739 1091 V 17 w(FREE)p Ft(,)75 1147 y(in)o(tro)q(duced)e (previously)l(,)h(duplicate)g(and)e(free)g(an)h(in)o(ter-comm)o (unicator,)e(resp)q(ectiv)o(ely)l(.)166 1204 y(Ov)o(erlap)23 b(of)f(lo)q(cal)h(and)g(remote)f(groups)g(that)g(are)g(b)q(ound)h(in)o (to)g(an)f(in)o(ter-comm)o(unicator)g(is)75 1260 y(prohibited.)h(If)15 b(there)h(is)g(o)o(v)o(erlap,)f(then)h(the)f(program)g(is)h(erroneous)f (and)h(is)g(lik)o(ely)h(to)e(deadlo)q(c)o(k.)22 b(\(If)75 1317 y(a)16 b(pro)q(cess)g(is)g(m)o(ultithreaded,)h(and)f Fp(MPI)f Ft(calls)i(blo)q(c)o(k)g(only)f(a)g(thread,)f(rather)g(than)h (a)g(pro)q(cess,)g(then)75 1373 y(\\dual)f(mem)o(b)q(ership")g(can)f(b) q(e)g(supp)q(orted.)20 b(It)14 b(is)h(then)f(the)g(user's)g(resp)q (onsibilit)o(y)j(to)c(mak)o(e)h(sure)g(that)75 1430 y(calls)i(on)f(b)q (ehalf)i(of)e(the)g(t)o(w)o(o)f(\\roles")h(of)f(a)h(pro)q(cess)h(are)f (executed)h(b)o(y)f(t)o(w)o(o)f(indep)q(enden)o(t)j(threads.\))166 1486 y(The)12 b(function)h Fp(MPI)p 516 1486 V 16 w(INTERCOMM)p 806 1486 V 17 w(CREA)l(TE)g Ft(can)g(b)q(e)f(used)h(to)f(create)g(an)g (in)o(ter-comm)o(unicator)75 1543 y(from)19 b(t)o(w)o(o)g(existing)i (in)o(tra-comm)o(unicators,)g(in)g(the)f(follo)o(wing)h(situation:)30 b(A)o(t)20 b(least)g(one)h(selected)75 1599 y(mem)o(b)q(er)f(from)g (eac)o(h)g(group)g(\(the)g(\\group)g(leader"\))g(has)g(the)h(abilit)o (y)g(to)f(comm)o(unicate)g(with)h(the)75 1655 y(selected)14 b(mem)o(b)q(er)f(from)g(the)g(other)f(group;)h(that)g(is,)g(a)g(\\p)q (eer")g(comm)o(unicator)f(exists)i(to)e(whic)o(h)i(b)q(oth)75 1712 y(leaders)e(b)q(elong,)g(and)g(eac)o(h)f(leader)h(kno)o(ws)e(the)i (rank)e(of)h(the)g(other)g(leader)h(in)g(this)g(p)q(eer)f(comm)o (unicator)75 1768 y(\(the)18 b(t)o(w)o(o)e(leaders)j(could)g(b)q(e)g (the)f(same)f(pro)q(cess\).)28 b(F)l(urthermore,)18 b(mem)o(b)q(ers)g (of)g(eac)o(h)g(group)f(kno)o(w)75 1825 y(the)e(rank)g(of)g(their)h (leader.)166 1881 y(Construction)10 b(of)h(an)f(in)o(ter-comm)o (unicator)h(from)f(t)o(w)o(o)f(in)o(tra-comm)o(unicators)h(requires)h (separate)75 1938 y(collectiv)o(e)16 b(op)q(erations)e(in)h(the)f(lo)q (cal)h(group)e(and)i(in)f(the)g(remote)g(group,)f(as)h(w)o(ell)h(as)f (a)f(p)q(oin)o(t-to-p)q(oin)o(t)75 1994 y(comm)o(unication)j(b)q(et)o (w)o(een)f(a)g(pro)q(cess)h(in)g(the)f(lo)q(cal)h(group)f(and)h(a)f (pro)q(cess)g(in)h(the)f(remote)g(group.)166 2051 y(In)g(standard)g Fp(MPI)f Ft(implemen)o(tations)i(\(with)f(static)g(pro)q(cess)g(allo)q (cation)h(at)f(initialization\),)i(the)75 2107 y Fp(MPI)p 160 2107 V 16 w(COMM)p 318 2107 V 16 w(W)o(ORLD)j Ft(comm)o(unicator)f (\(or)f(preferably)i(a)f(dedicated)i(duplicate)g(thereof)t(\))e(can)g (b)q(e)75 2164 y(this)e(p)q(eer)g(comm)o(unicator.)24 b(In)18 b(dynamic)f Fp(MPI)f Ft(implemen)o(tations,)i(where,)f(for)f (example,)h(a)g(pro)q(cess)75 2220 y(ma)o(y)g(spa)o(wn)h(new)g(c)o (hild)i(pro)q(cesses)f(during)g(an)f Fp(MPI)f Ft(execution,)j(the)e (paren)o(t)f(pro)q(cess)i(ma)o(y)e(b)q(e)i(the)75 2276 y(\\bridge")d(b)q(et)o(w)o(een)g(the)g(old)g(comm)o(unication)h(univ)o (erse)g(and)f(the)f(new)h(comm)o(unication)h(w)o(orld)f(that)75 2333 y(includes)h(the)f(paren)o(t)f(and)g(its)g(c)o(hildren.)166 2389 y(The)21 b(application)i(top)q(ology)d(functions)i(describ)q(ed)g (in)g(c)o(hapter)f Fk(??)36 b Ft(do)21 b(not)g(apply)g(to)g(in)o(ter-) 75 2446 y(comm)o(unicators.)d(Users)11 b(that)g(require)h(this)g (capabilit)o(y)h(should)f(utilize)i Fp(MPI)p 1418 2446 V 16 w(INTERCOMM)p 1708 2446 V 16 w(MERGE)75 2502 y Ft(to)g(build)j(an) e(in)o(tra-comm)o(unicator,)f(then)i(apply)f(the)g(graph)g(or)g (cartesian)g(top)q(ology)f(capabilities)k(to)75 2559 y(that)i(in)o(tra-comm)o(unicator,)h(creating)f(an)h(appropriate)f(top) q(ology-orien)o(ted)h(in)o(tra-comm)o(unicator.)75 2615 y(Alternativ)o(ely)l(,)f(it)e(ma)o(y)f(b)q(e)h(reasonable)g(to)g (devise)h(one's)e(o)o(wn)g(application)j(top)q(ology)d(mec)o(hanisms)75 2672 y(for)e(this)g(case,)g(without)g(loss)h(of)e(generalit)o(y)l(.) 1085 b Fn(>)-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 Ft(28)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fp(MPI)p 160 45 14 2 v 16 w(INTERCOMM)p 450 45 V 16 w(CREA)l(TE\(lo)q(cal)p 741 45 V 17 w(comm,)46 b(lo)q(cal)p 1022 45 V 16 w(leader,)i(p)q(eer)p 1291 45 V 17 w(comm,)e(remote)p 1616 45 V 16 w(leader,)h(tag,)75 102 y(newintercomm\))117 179 y Fh(IN)155 b Fp(lo)q(cal)p 409 179 V 17 w(comm)365 b Fh(lo)q(cal)13 b(in)o(tra-comm)o(unicator)e(\(handle\))117 254 y(IN)155 b Fp(lo)q(cal)p 409 254 V 17 w(leader)370 b Fh(rank)14 b(of)f(lo)q(cal)g(group)h(leader)g(in)g Fi(lo)q(cal)p 1517 254 13 2 v 15 w(comm)e Fh(\(in)o(teger\))117 329 y(IN)155 b Fp(p)q(eer)p 401 329 14 2 v 18 w(comm)372 b Fh(\\p)q(eer")10 b(comm)o(unicator;)e(signi\014can)o(t)h(only)f(at)h (the)h Fi(lo)q(cal)p 1787 329 13 2 v 15 w(leader)905 385 y Fh(\(handle\))117 461 y(IN)155 b Fp(remote)p 453 461 14 2 v 16 w(leader)327 b Fh(rank)12 b(of)f(remote)g(group)h(leader) g(in)23 b Fi(p)q(eer)p 1548 461 13 2 v 16 w(comm)p Fh(;)10 b(signi\014can)o(t)905 517 y(only)j(at)h(the)h Fi(lo)q(cal)p 1201 517 V 15 w(leader)g Fh(\(in)o(teger\))117 592 y(IN)155 b Fp(tag)526 b Fh(\\safe")14 b(tag)f(\(in)o(teger\))117 667 y(OUT)108 b Fp(newintercomm)310 b Fh(new)15 b(in)o(ter-comm)o (unicator)c(\(handle\))-160 746 y Fn(?)75 792 y Fg(int)23 b(MPI)p 245 792 15 2 v 17 w(Intercomm)p 478 792 V 16 w(create\(MPI)p 734 792 V 16 w(Comm)g(local)p 989 792 V 17 w(comm,)g(int)g(local)p 1364 792 V 17 w(leader,)393 848 y(MPI)p 468 848 V 17 w(Comm)g(peer)p 700 848 V 17 w(comm,)g(int)h(remote)p 1100 848 V 16 w(leader,)f(int)g(tag,)393 905 y(MPI)p 468 905 V 17 w(Comm)g(*newintercomm\))75 991 y(MPI)p 150 991 V 17 w(INTERCOMM)p 383 991 V 16 w(CREATE\(LOCAL)p 687 991 V 15 w(COMM,)g(LOCAL)p 965 991 V 17 w(LEADER,)g(PEER)p 1269 991 V 16 w(COMM,)h(REMOTE)p 1573 991 V 16 w(LEADER,)f(TAG,)393 1048 y(NEWINTERCOMM,)f(IERROR\))170 1104 y(INTEGER)h(LOCAL)p 484 1104 V 17 w(COMM,)g(LOCAL)p 764 1104 V 17 w(LEADER,)f(PEER)p 1067 1104 V 17 w(COMM,)h(REMOTE)p 1371 1104 V 17 w(LEADER,)g(TAG,)170 1161 y(NEWINTERCOMM,)g(IERROR)75 1247 y Ft(This)d(call)h(creates)e(an)h (in)o(ter-comm)o(unicator.)33 b(It)20 b(is)g(collectiv)o(e)i(o)o(v)o (er)d(the)g(union)i(of)e(the)h(lo)q(cal)h(and)75 1303 y(remote)d(groups.)28 b(Pro)q(cesses)18 b(should)h(pro)o(vide)g(iden)o (tical)h Fp(lo)q(cal)p 1197 1303 14 2 v 16 w(comm)c Ft(and)i Fp(lo)q(cal)p 1525 1303 V 17 w(leader)g Ft(argumen)o(ts)75 1360 y(within)e(eac)o(h)g(group.)j(Wildcards)e(are)d(not)h(p)q (ermitted)h(for)f Fp(remote)p 1254 1360 V 15 w(leader,)g(lo)q(cal)p 1497 1360 V 16 w(leader)p Ft(,)g(and)h Fp(tag)p Ft(.)166 1416 y(This)g(call)g(uses)f(p)q(oin)o(t-to-p)q(oin)o(t)h(comm)o (unication)g(with)f(comm)o(unicator)g Fp(p)q(eer)p 1542 1416 V 17 w(comm)p Ft(,)d(and)k(with)75 1473 y(tag)e Fp(tag)g Ft(b)q(et)o(w)o(een)h(the)g(leaders.)20 b(Th)o(us,)15 b(care)f(m)o(ust)g(b)q(e)h(tak)o(en)f(that)g(there)h(b)q(e)g(no)g(p)q (ending)h(comm)o(uni-)75 1529 y(cation)f(on)g Fp(p)q(eer)p 357 1529 V 18 w(comm)e Ft(that)h(could)j(in)o(terfere)e(with)h(this)f (comm)o(unication.)189 1636 y Fj(A)n(dvic)n(e)j(to)i(users.)60 b Ft(W)l(e)19 b(recommend)g(using)g(a)f(dedicated)i(p)q(eer)f(comm)o (unicator,)g(suc)o(h)g(as)f(a)189 1692 y(duplicate)e(of)e(MPI)p 528 1692 V 16 w(COMM)p 696 1692 V 16 w(W)o(ORLD,)h(to)e(a)o(v)o(oid)i (trouble)g(with)f(p)q(eer)h(comm)o(unicators.)20 b(\()p Fj(End)189 1748 y(of)c(advic)n(e)g(to)h(users.)p Ft(\))75 1949 y Fp(MPI)p 160 1949 V 16 w(INTERCOMM)p 450 1949 V 16 w(MERGE\(intercomm,)d(high,)i(newintracomm\))117 2026 y Fh(IN)155 b Fp(intercomm)384 b Fh(In)o(ter-Comm)o(unicator)11 b(\(handle\))117 2102 y(IN)155 b Fp(high)507 b Fh(\(logical\))117 2177 y(OUT)108 b Fp(newintracomm)308 b Fh(new)15 b(in)o(tra-comm)n (unicator)c(\(handle\))75 2301 y Fg(int)23 b(MPI)p 245 2301 15 2 v 17 w(Intercomm)p 478 2301 V 16 w(merge\(MPI)p 710 2301 V 16 w(Comm)g(intercomm,)g(int)g(high,)393 2358 y(MPI)p 468 2358 V 17 w(Comm)g(*newintracomm\))75 2444 y(MPI)p 150 2444 V 17 w(INTERCOMM)p 383 2444 V 16 w(MERGE\(INTERCOMM,)e (HIGH,)j(INTRACOMM,)e(IERROR\))170 2501 y(INTEGER)h(INTERCOMM,)g (INTRACOMM,)f(IERROR)170 2557 y(LOGICAL)h(HIGH)75 2643 y Ft(This)e(function)f(creates)g(an)g(in)o(tra-comm)o(unicator)g(from)f (the)h(union)h(of)f(the)g(t)o(w)o(o)e(groups)i(that)f(are)75 2700 y(asso)q(ciated)f(with)g Fp(intercomm)p Ft(.)26 b(All)19 b(pro)q(cesses)f(should)h(pro)o(vide)f(the)g(same)f Fp(high)h Ft(v)m(alue)h(within)g(eac)o(h)1967 46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p eop %%Page: 29 31 29 30 bop 75 -100 a Fl(1.6.)29 b(INTER-COMMUNICA)l(TION)1075 b Ft(29)383 4 y 18945146 4357381 0 0 24865505 5920358 startTexFig 383 4 a %%BeginDocument: context-fig-1.ps /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 0 setlinecap 0 setlinejoin -90.0 198.0 translate 0.900 -0.900 scale 0.500 setlinewidth % Polyline n 199 219 m 199 119 l 99 119 l 99 219 l clp gs col-1 s gr % Polyline n 359 219 m 359 119 l 259 119 l 259 219 l clp gs col-1 s gr % Polyline n 519 219 m 519 119 l 419 119 l 419 219 l clp gs col-1 s gr 1.000 setlinewidth n 220.000 173.000 m 204.000 169.000 l 220.000 165.000 l gs 2 setlinejoin col-1 s gr % Polyline n 204 169 m 254 169 l gs col-1 s gr n 238.000 165.000 m 254.000 169.000 l 238.000 173.000 l gs 2 setlinejoin col-1 s gr n 380.000 173.000 m 364.000 169.000 l 380.000 165.000 l gs 2 setlinejoin col-1 s gr % Polyline n 364 169 m 414 169 l gs col-1 s gr n 398.000 165.000 m 414.000 169.000 l 398.000 173.000 l gs 2 setlinejoin col-1 s gr /Times-Roman findfont 16.00 scalefont setfont 279 174 m gs 1 -1 scale (Group 1) col-1 show gr /Times-Roman findfont 16.00 scalefont setfont 439 174 m gs 1 -1 scale (Group 2) col-1 show gr /Times-Roman findfont 16.00 scalefont setfont 119 174 m gs 1 -1 scale (Group 0) col-1 show gr $F2psEnd %%EndDocument endTexFig 644 378 a Ft(Figure)15 b(1.1:)k(Three-group)c(pip)q(eline)q(.)75 509 y(of)h(the)g(t)o(w)o(o)e(groups.)22 b(If)16 b(pro)q(cesses)h(in)g (one)f(group)f(pro)o(vided)i(the)f(v)m(alue)h Fp(high)g(=)f(false)g Ft(and)h(pro)q(cesses)75 566 y(in)h(the)g(other)f(group)g(pro)o(vided)i (the)e(v)m(alue)i Fp(high)f(=)g(true)g Ft(then)g(the)f(union)i(orders)e (the)g(\\lo)o(w")g(group)75 622 y(b)q(efore)g(the)g(\\high")g(group.)23 b(If)17 b(all)h(pro)q(cesses)f(pro)o(vided)g(the)g(same)g Fp(high)g Ft(argumen)o(t)f(then)g(the)h(order)75 679 y(of)g(the)h(union)h(is)f(arbitrary)l(.)27 b(This)18 b(call)h(is)f(blo)q(c)o(king)h(and)f(collectiv)o(e)i(within)f(the)e (union)i(of)f(the)f(t)o(w)o(o)75 735 y(groups.)189 839 y Fj(A)n(dvic)n(e)27 b(to)h(implementors.)118 b Ft(The)29 b(implemen)o(tation)g(of)f Fp(MPI)p 1405 839 14 2 v 16 w(INTERCOMM)p 1695 839 V 17 w(MERGE)p Ft(,)189 895 y Fp(MPI)p 274 895 V 15 w(COMM)p 431 895 V 17 w(FREE)k Ft(and)g Fp(MPI)p 776 895 V 16 w(COMM)p 934 895 V 16 w(DUP)g Ft(are)f(similar)i(to)e(the)h(implemen)o(tation)h(of)189 952 y Fp(MPI)p 274 952 V 15 w(INTERCOMM)p 563 952 V 17 w(CREA)l(TE)p Ft(,)13 b(except)h(that)e(con)o(texts)f(priv)m(ate)j(to)e (the)h(input)g(inter-comm)o(un-)189 1008 y(icator)h(are)h(used)h(for)e (comm)o(unication)i(b)q(et)o(w)o(een)g(group)e(leaders)i(rather)f(than) g(con)o(texts)f(inside)189 1065 y(a)h(bridge)h(comm)o(unicator.)j(\()p Fj(End)d(of)g(advic)n(e)g(to)h(implementors.)p Ft(\))75 1186 y Fo(1.6.3)49 b(Inter-Communication)16 b(Examples)75 1272 y Fp(Example)f(1:)k(Three-Group)e(\\Pip)q(eline")75 1358 y Ft(Groups)f(0)g(and)h(1)f(comm)o(unicate.)24 b(Groups)16 b(1)h(and)f(2)g(comm)o(unicate.)24 b(Therefore,)17 b(group)f(0)g (requires)75 1414 y(one)f(in)o(ter-comm)o(unicator,)f(group)g(1)g (requires)i(t)o(w)o(o)d(in)o(ter-comm)o(unicators,)h(and)h(group)f(2)g (requires)h(1)75 1471 y(in)o(ter-comm)o(unicator.)147 1574 y Fg(main\(int)22 b(argc,)i(char)f(**argv\))147 1631 y({)194 1687 y(MPI_Comm)71 b(myComm;)166 b(/*)23 b(intra-communicator)f(of)h(local)h(sub-group)e(*/)194 1744 y(MPI_Comm)71 b(myFirstComm;)46 b(/*)23 b(inter-communicator)f(*/) 194 1800 y(MPI_Comm)71 b(mySecondComm;)22 b(/*)h(second)h (inter-communicator)d(\(group)i(1)h(only\))f(*/)194 1857 y(int)h(membershipKey;)194 1913 y(int)g(rank;)194 2026 y(MPI_Init\(&argc,)e(&argv\);)194 2083 y(MPI_Comm_rank\(MPI_COMM_WORLD) o(,)f(&rank\);)194 2195 y(/*)j(User)f(code)h(must)f(generate)g (membershipKey)f(in)h(the)h(range)f([0,)g(1,)h(2])g(*/)194 2252 y(membershipKey)e(=)i(rank)f(\045)h(3;)194 2365 y(/*)g(Build)f(intra-communicator)e(for)j(local)f(sub-group)g(*/)194 2421 y(MPI_Comm_split\(MPI_COMM_WORL)o(D,)e(membershipKey,)h(rank,)h (&myComm\);)194 2534 y(/*)h(Build)f(inter-communicators.)45 b(Tags)23 b(are)h(hard-coded.)e(*/)194 2591 y(if)i(\(membershipKey)e (==)h(0\))194 2647 y({)501 b(/*)24 b(Group)f(0)h(communicates)e(with)h (group)h(1.)f(*/)242 2704 y(MPI_Intercomm_create\()e(myComm,)i(0,)h (MPI_COMM_WORLD,)d(1,)-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 Ft(30)393 b Fl(CHAPTER)15 b(1.)30 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)383 4 y 18945146 5115185 0 0 28417720 7696465 startTexFig 383 4 a %%BeginDocument: context-fig-2.ps /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 0 setlinecap 0 setlinejoin -63.0 198.0 translate 0.900 -0.900 scale 0.500 setlinewidth % Polyline n 199 219 m 199 119 l 99 119 l 99 219 l clp gs col-1 s gr % Polyline n 359 219 m 359 119 l 259 119 l 259 219 l clp gs col-1 s gr % Polyline n 519 219 m 519 119 l 419 119 l 419 219 l clp gs col-1 s gr 1.000 setlinewidth n 220.000 173.000 m 204.000 169.000 l 220.000 165.000 l gs 2 setlinejoin col-1 s gr % Polyline n 204 169 m 254 169 l gs col-1 s gr n 238.000 165.000 m 254.000 169.000 l 238.000 173.000 l gs 2 setlinejoin col-1 s gr n 380.000 173.000 m 364.000 169.000 l 380.000 165.000 l gs 2 setlinejoin col-1 s gr % Polyline n 364 169 m 414 169 l gs col-1 s gr n 398.000 165.000 m 414.000 169.000 l 398.000 173.000 l gs 2 setlinejoin col-1 s gr n 78.000 165.000 m 94.000 169.000 l 78.000 173.000 l gs 2 setlinejoin col-1 s gr % Polyline n 94 169 m 69 169 l 69 89 l 549 89 l 549 169 l 524 169 l gs col-1 s gr n 540.000 173.000 m 524.000 169.000 l 540.000 165.000 l gs 2 setlinejoin col-1 s gr /Times-Roman findfont 16.00 scalefont setfont 279 174 m gs 1 -1 scale (Group 1) col-1 show gr /Times-Roman findfont 16.00 scalefont setfont 439 174 m gs 1 -1 scale (Group 2) col-1 show gr /Times-Roman findfont 16.00 scalefont setfont 119 174 m gs 1 -1 scale (Group 0) col-1 show gr $F2psEnd %%EndDocument endTexFig 682 426 a Ft(Figure)h(1.2:)i(Three-group)e(ring.)743 559 y Fg(1,)24 b(&myFirstComm\);)194 615 y(})194 672 y(else)g(if)f(\(membershipKey)f(==)i(1\))194 728 y({)334 b(/*)24 b(Group)f(1)h(communicates)e(with)h(groups)g(0)h(and)g(2.)f(*/) 242 785 y(MPI_Intercomm_create\()e(myComm,)i(0,)h(MPI_COMM_WORLD,)d(0,) 743 841 y(1,)j(&myFirstComm\);)242 898 y(MPI_Intercomm_create\()d (myComm,)i(0,)h(MPI_COMM_WORLD,)d(2,)743 954 y(12,)j(&mySecondComm\);) 194 1011 y(})194 1067 y(else)g(if)f(\(membershipKey)f(==)i(2\))194 1123 y({)501 b(/*)24 b(Group)f(2)h(communicates)e(with)h(group)h(1.)f (*/)242 1180 y(MPI_Intercomm_create\()e(myComm,)i(0,)h(MPI_COMM_WORLD,) d(1,)743 1236 y(12,)j(&myFirstComm\);)194 1293 y(})194 1406 y(/*)g(Do)f(work)h(...)f(*/)194 1519 y(switch\(membershipKey\))45 b(/*)24 b(free)f(communicators)f(appropriately)g(*/)194 1575 y({)194 1632 y(case)i(1:)266 1688 y(MPI_Comm_free\(&mySecondCo)o (mm\);)194 1744 y(case)g(0:)194 1801 y(case)g(2:)266 1857 y(MPI_Comm_free\(&myFirstCom)o(m\);)266 1914 y(break;)194 1970 y(})194 2083 y(MPI_Finalize\(\);)147 2140 y(})75 2260 y Fp(Example)15 b(2:)k(Three-Group)e(\\Ring")75 2346 y Ft(Groups)12 b(0)g(and)h(1)f(comm)o(unicate.)19 b(Groups)13 b(1)f(and)g(2)h(comm)o(unicate.)19 b(Groups)12 b(0)g(and)h(2)f(comm)o(unicate.)75 2402 y(Therefore,)j(eac)o(h)g (requires)h(t)o(w)o(o)e(in)o(ter-comm)o(unicators.)147 2508 y Fg(main\(int)22 b(argc,)i(char)f(**argv\))147 2565 y({)194 2621 y(MPI_Comm)71 b(myComm;)142 b(/*)24 b(intra-communicator)d(of)j(local)f(sub-group)f(*/)194 2678 y(MPI_Comm)71 b(myFirstComm;)22 b(/*)i(inter-communicators)d(*/) 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 Fl(1.6.)34 b(INTER-COMMUNICA)l(TION)1070 b Ft(31)194 45 y Fg(MPI_Comm)71 b(mySecondComm;)194 102 y(MPI_Status)23 b(status;)194 158 y(int)h(membershipKey;)194 214 y(int)g(rank;)194 327 y(MPI_Init\(&argc,)e(&argv\);)194 384 y(MPI_Comm_rank\(MPI_COMM_WORLD)o(,)f(&rank\);)194 440 y(...)194 553 y(/*)j(User)f(code)h(must)f(generate)g(membershipKey) f(in)h(the)h(range)f([0,)g(1,)h(2])g(*/)194 610 y(membershipKey)e(=)i (rank)f(\045)h(3;)194 723 y(/*)g(Build)f(intra-communicator)e(for)j (local)f(sub-group)g(*/)194 779 y(MPI_Comm_split\(MPI_COMM_WORL)o(D,)e (membershipKey,)h(rank,)h(&myComm\);)194 892 y(/*)h(Build)f (inter-communicators.)45 b(Tags)23 b(are)h(hard-coded.)e(*/)194 948 y(if)i(\(membershipKey)e(==)h(0\))194 1005 y({)310 b(/*)24 b(Group)f(0)h(communicates)e(with)h(groups)g(1)h(and)g(2.)f(*/) 242 1061 y(MPI_Intercomm_create\()e(myComm,)i(0,)h(MPI_COMM_WORLD,)d (1,)743 1118 y(1,)j(&myFirstComm\);)242 1174 y(MPI_Intercomm_create\()d (myComm,)i(0,)h(MPI_COMM_WORLD,)d(2,)743 1231 y(2,)j(&mySecondComm\);) 194 1287 y(})194 1344 y(else)g(if)f(\(membershipKey)f(==)i(1\))194 1400 y({)215 b(/*)24 b(Group)f(1)g(communicates)g(with)g(groups)g(0)h (and)f(2.)h(*/)242 1456 y(MPI_Intercomm_create\()d(myComm,)i(0,)h (MPI_COMM_WORLD,)d(0,)743 1513 y(1,)j(&myFirstComm\);)242 1569 y(MPI_Intercomm_create\()d(myComm,)i(0,)h(MPI_COMM_WORLD,)d(2,)743 1626 y(12,)j(&mySecondComm\);)194 1682 y(})194 1739 y(else)g(if)f (\(membershipKey)f(==)i(2\))194 1795 y({)191 b(/*)24 b(Group)f(2)h(communicates)e(with)h(groups)g(0)h(and)f(1.)h(*/)242 1852 y(MPI_Intercomm_create\()d(myComm,)i(0,)h(MPI_COMM_WORLD,)d(0,)743 1908 y(2,)j(&myFirstComm\);)242 1965 y(MPI_Intercomm_create\()d (myComm,)i(0,)h(MPI_COMM_WORLD,)d(1,)743 2021 y(12,)j(&mySecondComm\);) 194 2077 y(})194 2190 y(/*)g(Do)f(some)h(work)f(...)h(*/)194 2303 y(/*)g(Then)f(free)h(communicators)e(before)h(terminating...)f(*/) 194 2360 y(MPI_Comm_free\(&myFirstComm\);)194 2416 y (MPI_Comm_free\(&mySecondComm\))o(;)194 2473 y (MPI_Comm_free\(&myComm\);)194 2529 y(MPI_Finalize\(\);)147 2586 y(})-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 Ft(32)393 b Fl(CHAPTER)15 b(1.)30 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fp(Example)g(3:)k(Building)e(Name)d(Service)h(fo)o(r)f (Intercommunication)75 131 y Ft(The)i(follo)o(wing)g(pro)q(cedures)h (exemplify)g(the)f(pro)q(cess)g(b)o(y)f(whic)o(h)i(a)e(user)h(could)h (create)e(name)h(service)75 187 y(for)g(building)j(in)o(tercomm)o (unicators)e(via)g(a)f(rendezv)o(ous)h(in)o(v)o(olving)h(a)f(serv)o(er) f(comm)o(unicator,)g(and)h(a)75 244 y(tag)d(name)h(selected)i(b)o(y)e (b)q(oth)g(groups.)166 300 y(After)k(all)h Fp(MPI)f Ft(pro)q(cesses)h (execute)g Fp(MPI)p 910 300 14 2 v 15 w(INIT)p Ft(,)f(ev)o(ery)g(pro)q (cess)h(calls)g(the)f(example)h(function,)75 357 y Fp(Init)p 141 357 V 17 w(server\(\))p Ft(,)c(de\014ned)i(b)q(elo)o(w.)26 b(Then,)18 b(if)g(the)f Fp(new)p 975 357 V 17 w(w)o(o)o(rld)f Ft(returned)h(is)h(NULL,)g(the)f(pro)q(cess)g(getting)75 413 y(NULL)e(is)g(required)h(to)e(implemen)o(t)i(a)e(serv)o(er)g (function,)h(in)g(a)f(reactiv)o(e)h(lo)q(op,)g Fp(Do)p 1502 413 V 16 w(server\(\))p Ft(.)j(Ev)o(ery)o(one)75 470 y(else)g(just)f(do)q(es)g(their)h(prescrib)q(ed)g(computation,)f (using)h Fp(new)p 1168 470 V 17 w(w)o(o)o(rld)e Ft(as)h(the)g(new)h (e\013ectiv)o(e)f(\\global")75 526 y(comm)o(unicator.)k(One)16 b(designated)h(pro)q(cess)e(calls)i Fp(Undo)p 1076 526 V 17 w(Server\(\))e Ft(to)g(get)g(rid)h(of)g(the)f(serv)o(er)h(when)g (it)75 583 y(is)g(not)f(needed)h(an)o(y)f(longer.)166 639 y(F)l(eatures)g(of)g(this)g(approac)o(h)g(include:)143 745 y Fn(\017)23 b Ft(Supp)q(ort)15 b(for)g(m)o(ultiple)i(name)e(serv)o (ers)143 839 y Fn(\017)23 b Ft(Abilit)o(y)16 b(to)f(scop)q(e)h(the)f (name)g(serv)o(ers)g(to)f(sp)q(eci\014c)k(pro)q(cesses)143 933 y Fn(\017)23 b Ft(Abilit)o(y)16 b(to)f(mak)o(e)g(suc)o(h)g(serv)o (ers)g(come)g(and)g(go)g(as)g(desired.)75 1039 y Fg(#define)23 b(INIT_SERVER_TAG_1)e(666)75 1096 y(#define)i(UNDO_SERVER_TAG_1)93 b(777)75 1209 y(static)23 b(int)g(server_key_val;)75 1321 y(/*)h(for)f(attribute)g(management)f(for)i(server_comm,)46 b(copy)23 b(callback:)g(*/)75 1378 y(void)g(handle_copy_fn\(MPI_Comm)e (*oldcomm,)i(int)g(*keyval,)g(void)g(*extra_state,)75 1434 y(void)g(*attribute_val_in,)f(void)h(**attribute_val_out,)e(int)j (*flag\))75 1491 y({)147 1547 y(/*)f(copy)g(the)h(handle)f(*/)147 1604 y(*attribute_val_out)e(=)j(attribute_val_in;)147 1660 y(*flag)f(=)g(1;)h(/*)g(indicate)e(that)i(copy)f(to)h(happen)f(*/) 75 1717 y(})75 1830 y(int)g(Init_server\(peer_comm,)e(rank_of_server,)h (server_comm,)g(new_world\))75 1886 y(MPI_Comm)h(peer_comm;)75 1942 y(int)g(rank_of_server;)75 1999 y(MPI_Comm)g(*server_comm;)75 2055 y(MPI_Comm)g(*new_world;)94 b(/*)23 b(new)h(effective)e(world,)h (sans)h(server)f(*/)75 2112 y({)170 2168 y(MPI_Comm)g(temp_comm,)g (lone_comm;)170 2225 y(MPI_Group)g(peer_group,)f(temp_group;)170 2281 y(int)i(rank_in_peer_comm,)d(size,)i(color,)h(key)f(=)h(0;)170 2338 y(int)g(peer_leader,)e(peer_leader_rank_in_temp_co)o(mm;)170 2451 y(MPI_Comm_rank\(peer_comm,)f(&rank_in_peer_comm\);)170 2507 y(MPI_Comm_size\(peer_comm,)g(&size\);)170 2620 y(if)j(\(\(size)f(<)h(2\))f(||)h(\(0)g(>)f(rank_of_server\))f(||)i (\(rank_of_server)e(>=)h(size\)\))266 2676 y(return)g (\(MPI_ERR_OTHER\);)1967 46 y Fm(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p eop %%Page: 33 35 33 34 bop 75 -100 a Fl(1.6.)34 b(INTER-COMMUNICA)l(TION)1070 b Ft(33)170 102 y Fg(/*)24 b(create)f(two)h(communicators,)d(by)j (splitting)f(peer_comm)242 158 y(into)g(the)h(server)f(process,)g(and)g (everyone)g(else)g(*/)170 271 y(peer_leader)g(=)h(\(rank_of_server)d(+) j(1\))g(\045)f(size;)47 b(/*)24 b(arbitrary)f(choice)g(*/)170 384 y(if)h(\(\(color)f(=)h(\(rank_in_peer_comm)d(==)j (rank_of_server\)\)\))170 440 y({)266 497 y(MPI_Comm_split\(peer_comm,) c(color,)j(key,)h(&lone_comm\);)266 610 y(MPI_Intercomm_create\(lone)o (_comm,)d(0,)i(peer_comm,)g(peer_leader,)719 666 y(INIT_SERVER_TAG_1,)f (server_comm\);)266 779 y(MPI_Comm_free\(&lone_comm\))o(;)266 835 y(*new_world)g(=)i(MPI_COMM_NULL;)170 892 y(})170 948 y(else)170 1005 y({)266 1061 y(MPI_Comm_Split\(peer_comm,)c(color,) j(key,)h(&temp_comm\);)266 1174 y(MPI_Comm_group\(peer_comm,)c (&peer_group\);)266 1231 y(MPI_Comm_group\(temp_comm,)g(&temp_group\);) 266 1287 y(MPI_Group_translate_ranks)o(\(peer_gr)o(oup,)h(1,)i (&peer_leader,)123 1344 y(temp_group,)f(&peer_leader_rank_in_temp_c)o (omm\);)266 1456 y(MPI_Intercomm_create\(temp)o(_comm,)f (peer_leader_rank_in_tem)o(p_comm,)719 1513 y(peer_comm,)i (rank_of_server,)719 1569 y(INIT_SERVER_TAG_1,)f(server_comm\);)266 1682 y(/*)h(attach)h(new_world)e(communication)g(attribute)h(to)g (server_comm:)g(*/)266 1795 y(/*)g(CRITICAL)g(SECTION)g(FOR)h (MULTITHREADING)e(*/)266 1852 y(if\(server_keyval)g(==)h (MPI_KEYVAL_INVALID\))266 1908 y({)361 1965 y(/*)h(acquire)f(the)g (process-local)f(name)i(for)f(the)h(server)f(keyval)g(*/)361 2021 y(MPI_keyval_create\(handle_copy)o(_fn,)e(NULL,)1197 2077 y(&server_keyval,)g(NULL\);)266 2134 y(})266 2247 y(*new_world)h(=)i(temp_comm;)266 2360 y(/*)f(Cache)h(handle)f(of)g (intra-communicator)f(on)h(inter-communicator:)f(*/)266 2416 y(MPI_Attr_put\(server_comm,)e(server_keyval,)i(\(void)h (*\)\(*new_world\)\);)170 2473 y(})170 2586 y(return)g (\(MPI_SUCCESS\);)75 2642 y(})-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 Ft(34)393 b Fl(CHAPTER)15 b(1.)30 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)166 45 y Ft(The)g(actual)h(serv)o(er)f(pro)q(cess)g(w)o(ould)h(commit)f(to) f(running)j(the)e(follo)o(wing)h(co)q(de:)75 139 y Fg(int)23 b(Do_server\(server_comm\))75 195 y(MPI_Comm)g(server_comm;)75 252 y({)170 308 y(void)h(init_queue\(\);)170 365 y(int)g(en_queue\(\),) e(de_queue\(\);)h(/*)g(keep)h(triplets)e(of)i(integers)910 421 y(for)g(later)f(matching)g(\(fns)g(not)g(shown\))g(*/)170 534 y(MPI_Comm)g(comm;)170 591 y(MPI_Status)g(status;)170 647 y(int)h(client_tag,)e(client_source;)170 703 y(int)i (client_rank_in_new_world,)c(pairs_rank_in_new_world;)170 760 y(int)k(buffer[10],)e(count)h(=)h(1;)170 873 y(void)g(*queue;)170 929 y(init_queue\(&queue\);)170 1099 y(for)g(\(;;\))170 1155 y({)266 1212 y(MPI_Recv\(buffer,)e(count,)h(MPI_INT,)f (MPI_ANY_SOURCE,)g(MPI_ANY_TAG,)481 1268 y(server_comm,)g(&status\);)h (/*)g(accept)g(from)g(any)h(client)f(*/)266 1381 y(/*)g(determine)g (client:)g(*/)266 1437 y(client_tag)f(=)i(status.MPI_TAG;)266 1494 y(client_source)e(=)i(status.MPI_SOURCE;)266 1550 y(client_rank_in_new_world)c(=)k(buffer[0];)266 1663 y(if)f(\(client_tag)g(==)g(UNDO_SERVER_TAG_1\))165 b(/*)24 b(client)f(that)1292 1720 y(terminates)g(server)g(*/)266 1776 y({)361 1833 y(while)h(\(de_queue\(queue,)d(MPI_ANY_TAG,)h (&pairs_rank_in_new_world,)743 1889 y(&pairs_rank_in_server\)\))457 1945 y(;)361 2058 y(MPI_Intercomm_free\(&server_co)o(mm\);)361 2115 y(break;)266 2171 y(})266 2284 y(if)h(\(de_queue\(queue,)f (client_tag,)h(&pairs_rank_in_new_worl)o(d,)648 2341 y(&pairs_rank_in_server\)\))266 2397 y({)361 2454 y(/*)h(matched)f (pair)g(with)g(same)h(tag,)f(tell)g(them)433 2510 y(about)g(each)g (other!)g(*/)361 2566 y(buffer[0])g(=)h(pairs_rank_in_new_world;)361 2623 y(MPI_Send\(buffer,)e(1,)i(MPI_INT,)e(client_src,)h(client_tag,) 1340 2679 y(server_comm\);)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 Fl(1.6.)29 b(INTER-COMMUNICA)l(TION)1075 b Ft(35)361 102 y Fg(buffer[0])23 b(=)h(client_rank_in_new_world)o(;) 361 158 y(MPI_Send\(buffer,)e(1,)i(MPI_INT,)e(pairs_rank_in_server,)f (client_tag,)576 214 y(server_comm\);)266 271 y(})266 327 y(else)361 384 y(en_queue\(queue,)h(client_tag,)h(client_source,) 1030 440 y(client_rank_in_new_worl)o(d\);)170 553 y(})75 610 y(})166 703 y Ft(A)18 b(particular)h(pro)q(cess)g(w)o(ould)f(b)q(e) h(resp)q(onsible)h(for)e(ending)h(the)g(serv)o(er)f(when)g(it)h(is)f (no)h(longer)75 760 y(needed.)i(Its)15 b(call)i(to)d Fp(Undo)p 553 760 14 2 v 18 w(server)h Ft(w)o(ould)g(terminate)g(serv)o (er)g(function.)75 854 y Fg(int)23 b(Undo_server\(server_comm\))116 b(/*)24 b(example)f(client)g(that)g(ends)h(server)f(*/)75 910 y(MPI_Comm)g(*server_comm;)75 967 y({)170 1023 y(int)h(buffer)f(=)h (0;)170 1080 y(MPI_Send\(&buffer,)e(1,)i(MPI_INT,)e(0,)i (UNDO_SERVER_TAG_1,)d(*server_comm\);)170 1136 y (MPI_Intercomm_free\(server_com)o(m\);)75 1192 y(})166 1286 y Ft(The)15 b(follo)o(wing)g(is)g(a)f(blo)q(c)o(king)i (name-service)f(for)f(in)o(ter-comm)o(unication,)i(with)f(same)f(seman) o(tic)75 1343 y(restrictions)k(as)g Fp(MPI)p 457 1343 V 16 w(Intercomm)p 678 1343 V 14 w(create)p Ft(,)h(but)f(simpli\014ed)i (syn)o(tax.)27 b(It)18 b(uses)g(the)g(functionalit)o(y)h(just)75 1399 y(de\014ned)e(to)d(create)h(the)g(name)h(service.)75 1493 y Fg(int)23 b(Intercomm_name_create\(local_c)o(omm,)e (server_comm,)h(tag,)h(comm\))75 1549 y(MPI_Comm)g(local_comm,)f (server_comm;)75 1606 y(int)h(tag;)75 1662 y(MPI_Comm)g(*comm;)75 1719 y({)170 1775 y(int)h(error;)170 1832 y(int)g(found;)71 b(/*)23 b(attribute)g(acquisition)f(mgmt)i(for)f(new_world)g(*/)481 1888 y(/*)g(comm)h(in)f(server_comm)g(*/)170 1945 y(void)h(*val;)170 2058 y(MPI_Comm)f(new_world;)170 2170 y(int)h(buffer[10],)e(rank;)170 2227 y(int)i(local_leader)e(=)i(0;)170 2340 y (MPI_Attr_get\(server_comm,)d(server_keyval,)h(&val,)h(&found\);)170 2396 y(new_world)g(=)h(\(MPI_Comm\)val;)e(/*)h(retrieve)g(cached)g (handle)g(*/)170 2509 y(MPI_Comm_rank\(server_comm,)e(&rank\);)47 b(/*)23 b(rank)g(in)h(local)f(group)g(*/)170 2622 y(if)h(\(rank)f(==)h (local_leader\))170 2679 y({)-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 Ft(36)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)266 45 y Fg(buffer[0])23 b(=)g(rank;)266 102 y(MPI_Send\(&buffer,)e(1,)j (MPI_INT,)f(0,)g(tag,)h(server_comm\);)266 158 y(MPI_Recv\(&buffer,)d (1,)j(MPI_INT,)f(0,)g(tag,)h(server_comm\);)170 214 y(})170 327 y(error)g(=)f(MPI_Intercomm_create\(local_co)o(mm,)e(local_leader,) h(new_world,)862 384 y(buffer[0],)h(tag,)g(comm\);)170 497 y(return\(error\);)75 553 y(})75 696 y Fq(1.7)59 b(Caching)75 798 y Fp(MPI)18 b Ft(pro)o(vides)g(a)g(\\cac)o(hing")g (facilit)o(y)h(that)f(allo)o(ws)g(an)g(application)i(to)d(attac)o(h)g (arbitrary)h(pieces)h(of)75 854 y(information,)24 b(called)g Fk(attributes)p Ft(,)g(to)e(comm)o(unicators.)40 b(More)22 b(precisely)l(,)k(the)c(cac)o(hing)h(facilit)o(y)75 911 y(allo)o(ws)15 b(a)g(p)q(ortable)h(library)g(to)e(do)i(the)f(follo)o (wing:)143 1005 y Fn(\017)23 b Ft(pass)14 b(information)g(b)q(et)o(w)o (een)h(calls)g(b)o(y)f(asso)q(ciating)h(it)f(with)h(an)f Fp(MPI)f Ft(in)o(tra-)i(or)e(inter-comm)o(un-)189 1061 y(icator,)143 1155 y Fn(\017)23 b Ft(quic)o(kly)16 b(retriev)o(e)g (that)e(information,)h(and)143 1249 y Fn(\017)23 b Ft(b)q(e)18 b(guaran)o(teed)e(that)h(out-of-date)g(information)g(is)h(nev)o(er)g (retriev)o(ed,)f(ev)o(en)h(if)g(the)f(comm)o(uni-)189 1305 y(cator)d(is)i(freed)f(and)h(its)f(handle)h(subsequen)o(tly)h (reused)f(b)o(y)f Fp(MPI)p Ft(.)166 1399 y(The)i(cac)o(hing)h (capabilities,)h(in)f(some)e(form,)g(are)h(required)h(b)o(y)e(built-in) k Fp(MPI)c Ft(routines)h(suc)o(h)g(as)75 1455 y(collectiv)o(e)22 b(comm)o(unication)e(and)g(application)i(top)q(ology)l(.)33 b(De\014ning)21 b(an)f(in)o(terface)g(to)f(these)h(capa-)75 1512 y(bilities)h(as)c(part)h(of)f(the)h Fp(MPI)g Ft(standard)f(is)i(v) m(aluable)h(b)q(ecause)f(it)f(p)q(ermits)h(routines)f(lik)o(e)h (collectiv)o(e)75 1568 y(comm)o(unication)h(and)f(application)h(top)q (ologies)g(to)e(b)q(e)h(implemen)o(ted)i(as)d(p)q(ortable)i(co)q(de,)g (and)f(also)75 1625 y(b)q(ecause)h(it)g(mak)o(es)e Fp(MPI)h Ft(more)g(extensible)i(b)o(y)e(allo)o(wing)h(user-written)g(routines)f (to)g(use)g(standard)75 1681 y Fp(MPI)c Ft(calling)i(sequences.)189 1788 y Fj(A)n(dvic)n(e)d(to)i(users.)40 b Ft(The)15 b(comm)o(unicator)f Fi(MPI)p 1009 1788 13 2 v 15 w(COMM)p 1154 1788 V 14 w(SELF)h Ft(is)g(a)f(suitable)i(c)o(hoice)g(for)e(p)q(osting)189 1844 y(pro)q(cess-lo)q(cal)21 b(attributes,)e(via)h(this)g (attributing-cac)o(hing)g(mec)o(hanism.)33 b(\()p Fj(End)20 b(of)g(advic)n(e)g(to)189 1900 y(users.)p Ft(\))75 2022 y Fo(1.7.1)49 b(F)o(unctionalit)o(y)75 2108 y Ft(A)o(ttributes)15 b(are)g(attac)o(hed)g(to)g(comm)o(unicators.)20 b(A)o(ttributes)c(are)f (lo)q(cal)h(to)f(the)h(pro)q(cess)f(and)h(sp)q(eci\014c)75 2164 y(to)h(the)i(comm)o(unicator)e(to)h(whic)o(h)h(they)f(are)g(attac) o(hed.)28 b(A)o(ttributes)18 b(are)f(not)h(propagated)g(b)o(y)g Fp(MPI)75 2221 y Ft(from)k(one)h(comm)o(unicator)f(to)g(another)g (except)h(when)g(the)g(comm)o(unicator)f(is)i(duplicated)g(using)75 2277 y Fp(MPI)p 160 2277 14 2 v 16 w(COMM)p 318 2277 V 16 w(DUP)e Ft(\(and)f(ev)o(en)h(then)f(the)h(application)h(m)o(ust)e (giv)o(e)g(sp)q(eci\014c)i(p)q(ermission)g(through)75 2334 y(callbac)o(k)16 b(functions)g(for)f(the)g(attribute)g(to)g(b)q(e) h(copied\).)-1219 b Fn(>)189 2440 y Fj(A)n(dvic)n(e)18 b(to)h(users.)59 b Ft(A)o(ttributes)18 b(are)g(in)i(C)e(of)g(t)o(yp)q (e)g Fi(void)f(*)p Ft(.)29 b(T)o(ypically)l(,)20 b(suc)o(h)f(attribute) f(will)189 2496 y(b)q(e)e(a)g(p)q(oin)o(ter)h(to)e(a)h(structure)f (that)h(con)o(tains)g(further)g(information,)g(or)f(a)h(handle)h(to)f (an)g Fp(MPI)189 2553 y Ft(ob)s(ject.)j(In)14 b(F)l(ortran,)f (attributes)h(are)f(of)h(t)o(yp)q(e)g Fi(INTEGER)p Ft(.)f(Suc)o(h)h (attribute)g(can)g(b)q(e)h(a)e(handle)j(to)189 2609 y(an)f Fp(MPI)f Ft(ob)s(ject,)h(or)f(just)h(an)g(in)o(teger-v)m(alued)i (attribute.)j(\()p Fj(End)c(of)g(advic)n(e)g(to)h(users.)p Ft(\))-160 2671 y Fn(?)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 Fl(1.7.)29 b(CA)o(CHING)1435 b Ft(37)189 45 y Fj(A)n(dvic)n(e)14 b(to)i(implementors.)39 b Ft(A)o(ttributes)15 b(are)f(scalar)g(v)m(alues,)h(equal)g(in)g(size)h(to,)d(or)h(larger)g (than)189 102 y(a)i(C-language)g(p)q(oin)o(ter.)24 b(A)o(ttributes)17 b(can)f(alw)o(a)o(ys)g(hold)h(an)g Fp(MPI)e Ft(handle.)25 b(\()p Fj(End)17 b(of)g(advic)n(e)h(to)189 158 y(implementors.)p Ft(\))166 242 y(The)12 b(cac)o(hing)g(in)o(terface)g(de\014ned)g(here)g (represen)o(ts)g(that)e(attributes)i(b)q(e)g(stored)f(b)o(y)g Fp(MPI)g Ft(opaquely)75 299 y(within)16 b(a)f(comm)o(unicator.)20 b(Accessor)15 b(functions)h(include)i(the)d(follo)o(wing:)143 377 y Fn(\017)23 b Ft(obtain)16 b(a)f(k)o(ey)h(v)m(alue)h(\(used)f(to)g (iden)o(tify)h(an)f(attribute\);)f(the)h(user)g(sp)q(eci\014es)i (\\callbac)o(k")e(func-)189 433 y(tions)h(b)o(y)g(whic)o(h)h Fp(MPI)f Ft(informs)g(the)h(application)h(when)f(the)f(comm)o(unicator) g(is)h(destro)o(y)o(ed)e(or)189 490 y(copied.)143 577 y Fn(\017)23 b Ft(store)14 b(and)i(retriev)o(e)f(the)g(v)m(alue)i(of)d (an)i(attribute;)189 661 y Fj(A)n(dvic)n(e)10 b(to)i(implementors.)37 b Ft(Cac)o(hing)10 b(and)h(callbac)o(k)g(functions)g(are)f(only)g (called)i(sync)o(hronously)l(,)189 718 y(in)k(resp)q(onse)f(to)g (explicit)j(application)e(requests.)k(This)c(a)o(v)o(oid)f(problems)h (that)f(result)g(from)g(re-)189 774 y(p)q(eated)h(crossings)h(b)q(et)o (w)o(een)f(user)h(and)f(system)g(space.)24 b(\(This)16 b(sync)o(hronous)g(calling)i(rule)f(is)g(a)189 831 y(general)e(prop)q (ert)o(y)g(of)g Fp(MPI)p Ft(.\))189 903 y(The)20 b(c)o(hoice)h(of)f(k)o (ey)g(v)m(alues)i(is)f(under)g(con)o(trol)f(of)f Fp(MPI)p Ft(.)h(This)h(allo)o(ws)f Fp(MPI)g Ft(to)f(optimize)j(its)189 959 y(implemen)o(tation)14 b(of)e(attribute)h(sets.)19 b(It)12 b(also)h(a)o(v)o(oids)g(con\015ict)h(b)q(et)o(w)o(een)f(indep)q (enden)o(t)i(mo)q(dules)189 1016 y(cac)o(hing)h(information)f(on)g(the) g(same)g(comm)o(unicators.)189 1088 y(A)g(m)o(uc)o(h)g(smaller)h(in)o (terface,)f(consisting)h(of)e(just)h(a)g(callbac)o(k)h(facilit)o(y)l(,) g(w)o(ould)f(allo)o(w)g(the)g(en)o(tire)189 1144 y(cac)o(hing)f (facilit)o(y)h(to)e(b)q(e)h(implemen)o(ted)h(b)o(y)f(p)q(ortable)g(co)q (de.)20 b(Ho)o(w)o(ev)o(er,)13 b(with)h(the)f(minimal)j(call-)189 1200 y(bac)o(k)c(in)o(terface,)h(some)f(form)g(of)g(table)h(searc)o (hing)g(is)g(implied)i(b)o(y)d(the)h(need)g(to)f(handle)i(arbitrary)189 1257 y(comm)o(unicators.)23 b(In)17 b(con)o(trast,)e(the)i(more)f (complete)h(in)o(terface)g(de\014ned)g(here)g(p)q(ermits)g(rapid)189 1313 y(access)11 b(to)f(attributes)h(through)f(the)h(use)g(of)g(p)q (oin)o(ters)g(in)h(comm)o(unicators)f(\(to)e(\014nd)j(the)f(attribute) 189 1370 y(table\))h(and)h(clev)o(erly)g(c)o(hosen)g(k)o(ey)f(v)m (alues)i(\(to)d(retriev)o(e)i(individual)j(attributes\).)i(In)13 b(ligh)o(t)g(of)f(the)189 1426 y(e\016ciency)j(\\hit")e(inheren)o(t)h (in)h(the)e(minimal)i(in)o(terface,)f(the)g(more)f(complete)h(in)o (terface)g(de\014ned)189 1483 y(here)h(is)h(seen)g(to)e(b)q(e)i(sup)q (erior.)21 b(\()p Fj(End)15 b(of)i(advic)n(e)f(to)g(implementors.)p Ft(\))75 1567 y Fp(MPI)f Ft(pro)o(vides)g(the)h(follo)o(wing)f (services)i(related)e(to)g(cac)o(hing.)20 b(They)c(are)f(all)h(pro)q (cess)f(lo)q(cal.)75 1718 y Fp(MPI)p 160 1718 14 2 v 16 w(KEYV)l(AL)p 346 1718 V 17 w(CREA)l(TE\(cop)o(y)p 636 1718 V 17 w(fn,)g(delete)p 828 1718 V 18 w(fn,)g(k)o(eyval,)g (extra)p 1150 1718 V 16 w(state\))117 1795 y Fh(IN)155 b Fp(cop)o(y)p 407 1795 V 17 w(fn)447 b Fh(Cop)o(y)14 b(callbac)o(k)f(function)g(for)h Fi(k)o(eyval)117 1867 y Fh(IN)155 b Fp(delete)p 431 1867 V 18 w(fn)422 b Fh(Delete)15 b(callbac)o(k)e(function)g(for)h Fi(k)o(eyval)117 1939 y Fh(OUT)108 b Fp(k)o(eyval)471 b Fh(k)o(ey)14 b(v)n(alue)f(for)h (future)g(access)i(\(in)o(teger\))117 2011 y(IN)155 b Fp(extra)p 416 2011 V 17 w(state)384 b Fh(Extra)14 b(state)h(for)f (callbac)o(k)f(functions)75 2135 y Fg(int)23 b(MPI)p 245 2135 15 2 v 17 w(Keyval)p 406 2135 V 17 w(create\(MPI)p 663 2135 V 15 w(Copy)p 774 2135 V 17 w(function)g(*copy)p 1126 2135 V 16 w(fn,)h(MPI)p 1310 2135 V 17 w(Delete)p 1471 2135 V 16 w(function)393 2192 y(*delete)p 564 2192 V 16 w(fn,)g(int)f(*keyval,)g(void*)g(extra)p 1249 2192 V 17 w(state\))75 2278 y(MPI)p 150 2278 V 17 w(KEYVAL)p 311 2278 V 16 w(CREATE\(COPY)p 591 2278 V 16 w(FN,)g(DELETE)p 846 2278 V 17 w(FN,)g(KEYVAL,)g(EXTRA)p 1269 2278 V 16 w(STATE,)h(IERROR\))170 2335 y(EXTERNAL)f(COPY)p 484 2335 V 17 w(FN,)g(DELETE)p 740 2335 V 17 w(FN)170 2391 y(INTEGER)g(KEYVAL,)g(EXTRA)p 675 2391 V 17 w(STATE,)g(IERROR)166 2478 y Ft(Generates)18 b(a)g(new)g(attribute)h(k)o(ey)l(.)29 b(Keys)19 b(are)f(lo)q(cally)i(unique)g(in)f(a)f(pro)q(cess,)h(and)f (opaque)h(to)75 2534 y(user,)g(though)g(they)f(are)h(explicitly)i (stored)d(in)i(in)o(tegers.)30 b(Once)19 b(allo)q(cated,)i(the)d(k)o (ey)h(v)m(alue)h(can)e(b)q(e)75 2591 y(used)e(to)e(asso)q(ciate)i (attributes)e(and)i(access)f(them)g(on)h(an)o(y)e(lo)q(cally)j (de\014ned)g(comm)o(unicator.)166 2647 y(The)10 b Fp(cop)o(y)p 343 2647 14 2 v 17 w(fn)g Ft(function)h(is)g(in)o(v)o(ok)o(ed)f(when)h (a)f(comm)o(unicator)f(is)i(duplicated)h(b)o(y)e Fp(MPI)p 1617 2647 V 16 w(COMM)p 1775 2647 V 17 w(DUP)p Ft(.)75 2704 y Fp(cop)o(y)p 164 2704 V 16 w(fn)16 b Ft(should)g(b)q(e)g(of)f(t) o(yp)q(e)g Fi(MPI)p 667 2704 13 2 v 14 w(Cop)o(y)p 768 2704 V 15 w(function)p Ft(,)h(whic)o(h)g(is)g(de\014ned)g(as)f(follo)o (ws:)452 b Fn(>)-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 Ft(38)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fg(typedef)23 b(int)g(MPI_Copy_function\(MPI_Comm)e(oldcomm,)h (int)i(keyval,)791 102 y(void)f(*extra_state,)f(void)i (*attribute_val_in,)791 158 y(void)f(*attribute_val_out,)e(int)j (*flag\))-160 203 y Fn(?)166 250 y Ft(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:)-160 256 y Fn(>)75 306 y Fg(PROCEDURE)23 b(COPY)p 413 306 15 2 v 16 w(FUNCTION\(OLDCOMM,)f(KEYVAL,)h(EXTRA)p 1170 306 V 16 w(STATE,)g(ATTRIBUTE)p 1569 306 V 16 w(VAL)p 1657 306 V 17 w(IN,)393 363 y(ATTRIBUTE)p 612 363 V 16 w(VAL)p 700 363 V 17 w(OUT,)g(FLAG,)g(IERR\))170 419 y(INTEGER)g(OLDCOMM,)g(KEYVAL,)g(EXTRA)p 890 419 V 17 w(STATE,)g(ATTRIBUTE)p 1290 419 V 16 w(VAL)p 1378 419 V 16 w(IN,)170 475 y(ATTRIBUTE)p 389 475 V 16 w(VAL)p 477 475 V 17 w(OUT,)g(IERR)170 532 y(LOGICAL)g(FLAG)-160 562 y Fn(?)166 618 y Ft(The)13 b(cop)o(y)g(callbac)o(k)i(function)f(is) f(in)o(v)o(ok)o(ed)h(for)e(eac)o(h)h(k)o(ey)g(v)m(alue)i(in)f Fp(oldcomm)d Ft(in)j(arbitrary)f(order.)75 675 y(Eac)o(h)18 b(call)i(to)e(the)g(cop)o(y)g(callbac)o(k)i(is)f(made)f(with)h(a)f(k)o (ey)g(v)m(alue)i(and)e(its)h(corresp)q(onding)g(attribute.)75 731 y(If)f(it)g(returns)g Fi(\015ag)e(=)g(0)p Ft(,)i(then)g(the)g (attribute)f(is)h(deleted)h(in)g(the)f(duplicated)i(comm)o(unicator.)27 b(Oth-)75 788 y(erwise)19 b(\()p Fi(\015ag)d(=)g(1)p Ft(\),)i(the)g(new)h(attribute)f(v)m(alue)h(is)g(set)e(to)h(the)g(v)m (alue)h(returned)g(in)g Fp(attribute)p 1715 788 14 2 v 18 w(val)p 1787 788 V 16 w(out)p Ft(.)-2035 b Fn(>)75 844 y Ft(The)17 b(function)g(returns)g Fi(MPI)p 585 844 13 2 v 14 w(SUCCESS)e Ft(on)i(success)g(and)g(an)g(error)f(co)q(de)h (on)g(failure)g(\(in)g(whic)o(h)h(case)-2035 b Fn(?)75 901 y Fp(MPI)p 160 901 14 2 v 16 w(COMM)p 318 901 V 16 w(DUP)15 b Ft(will)i(fail\).)-777 b Fn(>)166 957 y Fp(cop)o(y)p 255 957 V 16 w(fn)21 b Ft(ma)o(y)e(b)q(e)i(sp)q(eci\014ed)i(as)d Fp(MPI)p 831 957 V 15 w(NULL)p 959 957 V 16 w(COPY)p 1096 957 V 18 w(FN)g Ft(or)g Fp(MPI)p 1335 957 V 15 w(DUP)p 1443 957 V 17 w(FN)g Ft(from)g(either)g(C)g(or)75 1014 y(F)o(OR)l(TRAN;)15 b Fp(MPI)p 415 1014 V 15 w(NULL)p 543 1014 V 17 w(COPY)p 681 1014 V 17 w(FN)f Ft(is)h(a)f(function)h (that)e(do)q(es)i(nothing)f(other)g(than)g(returning)h Fi(\015ag)75 1070 y(=)i(0)h Ft(and)g Fi(MPI)p 331 1070 13 2 v 15 w(SUCCESS)p Ft(.)e Fp(MPI)p 635 1070 14 2 v 16 w(DUP)p 744 1070 V 16 w(FN)j Ft(is)f(a)g(simple-minded)k(cop)o(y)c (function)h(that)e(sets)h Fi(\015ag)f(=)g(1)p Ft(,)75 1126 y(returns)e(the)g(v)m(alue)i(of)e Fp(attribute)p 646 1126 V 18 w(val)p 718 1126 V 16 w(in)g Ft(in)h Fp(attribute)p 999 1126 V 18 w(val)p 1071 1126 V 16 w(out)p Ft(,)g(and)f(returns)g Fi(MPI)p 1497 1126 13 2 v 14 w(SUCCESS)p Ft(.)189 1230 y Fj(A)n(dvic)n(e)j(to)h(users.)58 b Ft(Ev)o(en)19 b(b)q(oth)f(formal)g (argumen)o(ts)f Fp(attribute)p 1332 1230 14 2 v 18 w(val)p 1404 1230 V 16 w(in)i Ft(and)f Fp(attribute)p 1727 1230 V 18 w(val)p 1799 1230 V 16 w(out)189 1286 y Ft(are)g(of)h(t)o(yp)q(e)g Fi(void)f(*)p Ft(,)h(their)g(usage)g(di\013er.)32 b(The)19 b(C)g(cop)o(y)g(function)h(is)f(passed)g(b)o(y)g Fp(MPI)g Ft(in)h Fp(at-)189 1343 y(tribute)p 317 1343 V 17 w(val)p 388 1343 V 16 w(in)i Ft(the)f Fj(value)g Ft(of)g(the)g(attribute,)h (and)f(in)h Fp(attribute)p 1336 1343 V 18 w(val)p 1408 1343 V 16 w(out)f Ft(the)h Fj(addr)n(ess)e Ft(of)h(the)189 1399 y(attribute,)15 b(so)g(as)g(to)f(allo)o(w)i(the)f(function)i(to)d (return)i(the)f(\(new\))g(attribute)g(v)m(alue.)22 b(The)16 b(use)f(of)189 1456 y(t)o(yp)q(e)g Fi(void)f(*)h Ft(for)f(b)q(oth)i(is) g(to)e(a)o(v)o(oid)h(messy)g(t)o(yp)q(e)g(casts.)-1315 b Fn(?)189 1530 y Ft(A)18 b(v)m(alid)i(cop)o(y)f(function)g(is)g(one)f (that)g(completely)i(duplicates)g(the)f(information)f(b)o(y)h(making) 189 1587 y(a)f(full)i(duplicate)g(cop)o(y)e(of)h(the)f(data)g (structures)g(implied)j(b)o(y)e(an)f(attribute;)i(another)e(migh)o(t) 189 1643 y(just)k(mak)o(e)f(another)h(reference)h(to)e(that)h(data)f (structure,)j(while)f(using)g(a)f(reference-coun)o(t)189 1700 y(mec)o(hanism.)k(Other)18 b(t)o(yp)q(es)f(of)g(attributes)g(migh) o(t)g(not)g(cop)o(y)g(at)g(all)h(\(they)f(migh)o(t)g(b)q(e)h(sp)q (eci\014c)189 1756 y(to)c Fp(oldcomm)g Ft(only\).)20 b(\()p Fj(End)15 b(of)i(advic)n(e)f(to)g(users.)p Ft(\))-160 1814 y Fn(>)189 1906 y Fj(A)n(dvic)n(e)21 b(to)i(implementors.)81 b Ft(A)22 b(C)g(in)o(terface)g(should)h(b)q(e)g(assumed)f(for)g(cop)o (y)g(and)g(delete)189 1962 y(functions)17 b(asso)q(ciated)g(with)h(k)o (ey)e(v)m(alues)i(created)f(in)h(C;)e(a)h(F)l(ortran)e(calling)k(in)o (terface)e(should)189 2019 y(b)q(e)f(assumed)f(for)f(k)o(ey)h(v)m (alues)i(created)e(in)h(F)l(ortran.)j(\()p Fj(End)c(of)i(advic)n(e)f (to)g(implementors.)p Ft(\))-160 2077 y Fn(?)166 2122 y Ft(Analogous)g(to)g Fp(cop)o(y)p 534 2122 V 17 w(fn)h Ft(is)g(a)f(callbac)o(k)i(deletion)g(function,)f(de\014ned)h(as)e (follo)o(ws.)24 b(The)17 b Fp(delete)p 1823 2122 V 18 w(fn)75 2179 y Ft(function)h(is)g(in)o(v)o(ok)o(ed)g(when)g(a)g(comm)o (unicator)f(is)h(deleted)h(b)o(y)e Fp(MPI)p 1289 2179 V 16 w(COMM)p 1447 2179 V 16 w(FREE)h Ft(or)g(when)g(a)f(call)75 2235 y(is)j(made)f(explicitly)k(to)18 b Fp(MPI)p 596 2235 V 16 w(A)l(TTR)p 729 2235 V 17 w(DELETE)p Ft(.)h Fp(delete)p 1058 2235 V 18 w(fn)h Ft(should)g(b)q(e)g(of)f(t)o(yp)q(e)h Fi(MPI)p 1584 2235 13 2 v 14 w(Delete)p 1707 2235 V 16 w(function)p Ft(,)75 2291 y(whic)o(h)c(is)g(de\014ned)g(as)f(follo)o (ws:)-770 b Fn(>)75 2395 y Fg(typedef)23 b(int)g (MPI_Delete_function\(MPI_Comm)d(comm,)k(int)f(keyval,)75 2451 y(void)g(*attribute_val,)f(void)h(*extra_state\);)166 2554 y Ft(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 2611 y Fg(PROCEDURE)23 b(DELETE)p 461 2611 15 2 v 16 w(FUNCTION\(COMM,)f(KEYVAL,)h(ATTRIBUTE)p 1242 2611 V 16 w(VAL,)g(EXTRA)p 1497 2611 V 17 w(STATE,)g(IERR\))170 2667 y(INTEGER)g(COMM,)h(KEYVAL,)e(ATTRIBUTE)p 914 2667 V 16 w(VAL,)i(EXTRA)p 1170 2667 V 16 w(STATE,)f(IERR)-160 2704 y Fn(?)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 Fl(1.7.)34 b(CA)o(CHING)1430 b Ft(39)166 45 y(This)16 b(function)h(is)f(called)h(b)o(y)f Fp(MPI)p 773 45 14 2 v 16 w(COMM)p 931 45 V 16 w(FREE)g Ft(and)g Fp(MPI)p 1243 45 V 16 w(A)l(TTR)p 1376 45 V 17 w(DELETE)g Ft(to)f(do)h(whatev)o(er)75 102 y(is)j(needed)i(to)d(remo)o(v)o(e)g(an) h(attribute.)31 b(The)19 b(function)h(returns)f Fi(MPI)p 1303 102 13 2 v 14 w(SUCCESS)e Ft(on)i(success)h(and)f(an)-2035 b Fn(>)75 158 y Ft(error)14 b(co)q(de)i(on)f(failure)i(\(in)e(whic)o(h) h(case)g Fp(MPI)p 877 158 14 2 v 15 w(COMM)p 1034 158 V 17 w(FREE)g Ft(will)g(fail\).)166 214 y Fp(delete)p 279 214 V 18 w(fn)21 b Ft(ma)o(y)g(b)q(e)h(sp)q(eci\014ed)i(as)d Fp(MPI)p 862 214 V 16 w(NULL)p 991 214 V 16 w(DELETE)p 1177 214 V 16 w(FN)g Ft(from)g(either)h(C)g(or)e(F)o(OR)l(TRAN;)75 271 y Fp(MPI)p 160 271 V 16 w(NULL)p 289 271 V 16 w(DELETE)p 475 271 V 16 w(FN)12 b Ft(is)h(a)f(function)h(that)e(do)q(es)h (nothing,)h(other)f(than)g(returning)g Fi(MPI)p 1674 271 13 2 v 15 w(SUCCESS)p Ft(.)1937 327 y Fn(?)166 384 y Ft(The)e(sp)q(ecial)i(k)o(ey)e(v)m(alue)i Fi(MPI)p 664 384 V 14 w(KEYV)m(AL)p 835 384 V 14 w(INV)m(ALID)c Ft(is)j(nev)o(er)f(returned)h(b)o(y)f Fp(MPI)p 1493 384 14 2 v 16 w(KEYV)l(AL)p 1679 384 V 17 w(CREA)l(TE)p Ft(.)75 440 y(Therefore,)15 b(it)g(can)g(b)q(e)h(used)g(for)f(static)g (initialization)j(of)d(k)o(ey)g(v)m(alues.)75 591 y Fp(MPI)p 160 591 V 16 w(KEYV)l(AL)p 346 591 V 17 w(FREE\(k)o(eyval\))117 668 y Fh(INOUT)62 b Fp(k)o(eyval)471 b Fh(F)m(rees)15 b(the)g(in)o(teger)f(k)o(ey)g(v)n(alue)f(\(in)o(teger\))75 793 y Fg(int)23 b(MPI)p 245 793 15 2 v 17 w(Keyval)p 406 793 V 17 w(free\(int)f(*keyval\))75 879 y(MPI)p 150 879 V 17 w(KEYVAL)p 311 879 V 16 w(FREE\(KEYVAL,)g(IERROR\))170 936 y(INTEGER)h(KEYVAL,)g(IERROR)166 1022 y Ft(F)l(rees)37 b(an)g(extan)o(t)g(attribute)g(k)o(ey)l(.)87 b(This)37 b(function)i(sets)e(the)g(v)m(alue)i(of)e Fp(k)o(eyval)g Ft(to)75 1079 y Fi(MPI)p 152 1079 13 2 v 14 w(KEYV)m(AL)p 323 1079 V 14 w(INV)m(ALID)p Ft(.)15 b(Note)h(that)f(it)i(is)g(not)f (erroneous)g(to)f(free)i(an)f(attribute)g(k)o(ey)g(that)g(is)h(in)g (use,)75 1135 y(b)q(ecause)e(the)e(actual)h(free)f(do)q(es)h(not)f (transpire)h(un)o(til)h(after)e(all)h(references)g(\(in)g(other)f(comm) o(unicators)75 1192 y(on)20 b(the)g(pro)q(cess\))f(to)h(the)g(k)o(ey)f (ha)o(v)o(e)h(b)q(een)h(freed.)34 b(These)20 b(references)g(need)h(to)e (b)q(e)i(explictly)h(freed)75 1248 y(b)o(y)d(the)h(program,)f(either)h (via)f(calls)i(to)e Fp(MPI)p 887 1248 14 2 v 15 w(A)l(TTR)p 1019 1248 V 18 w(DELETE)g Ft(that)f(free)i(one)f(attribute)h(instance,) 75 1305 y(or)c(b)o(y)g(calls)h(to)e Fp(MPI)p 439 1305 V 16 w(COMM)p 597 1305 V 17 w(FREE)h Ft(that)g(free)g(all)h(attribute)f (instances)h(asso)q(ciated)f(with)g(the)h(freed)75 1361 y(comm)o(unicator.)1567 b Fn(>)1937 1413 y(?)75 1512 y Fp(MPI)p 160 1512 V 16 w(A)l(TTR)p 293 1512 V 17 w(PUT\(comm,)13 b(k)o(eyval,)h(attribute)p 868 1512 V 18 w(val\))117 1589 y Fh(IN)155 b Fp(comm)470 b Fh(comm)o(unicator)7 b(to)i(whic)o(h)g(attribute)h(will)e(b)q(e)h(attac)o(hed)h(\(han-)905 1646 y(dle\))117 1721 y(IN)155 b Fp(k)o(eyval)471 b Fh(k)o(ey)14 b(v)n(alue,)f(as)h(returned)h(b)o(y)905 1777 y Fi(MPI)p 982 1777 13 2 v 15 w(KEYV)m(AL)p 1154 1777 V 13 w(CREA)m(TE)d Fh(\(in)o(teger\))117 1852 y(IN)155 b Fp(attribute)p 484 1852 14 2 v 18 w(val)352 b Fh(attribute)15 b(v)n(alue)75 1977 y Fg(int)23 b(MPI)p 245 1977 15 2 v 17 w(Attr)p 358 1977 V 17 w(put\(MPI)p 543 1977 V 16 w(Comm)g(comm,)h(int)f (keyval,)g(void*)g(attribute)p 1467 1977 V 16 w(val\))75 2063 y(MPI)p 150 2063 V 17 w(ATTR)p 263 2063 V 16 w(PUT\(COMM,)g (KEYVAL,)g(ATTRIBUTE)p 925 2063 V 16 w(VAL,)g(IERROR\))170 2120 y(INTEGER)g(COMM,)h(KEYVAL,)e(ATTRIBUTE)p 914 2120 V 16 w(VAL,)i(IERROR)166 2206 y Ft(This)14 b(function)g(stores)f(the)g (stipulated)i(attribute)e(v)m(alue)i Fp(attribute)p 1331 2206 14 2 v 18 w(val)e Ft(for)g(subsequen)o(t)h(retriev)m(al)75 2263 y(b)o(y)j Fp(MPI)p 225 2263 V 16 w(A)l(TTR)p 358 2263 V 17 w(GET)p Ft(.)h(If)g(the)f(v)m(alue)i(is)f(already)g(presen)o (t,)g(then)f(the)h(outcome)f(is)h(as)f(if)h Fp(MPI)p 1729 2263 V 16 w(A)l(TTR-)p 75 2319 V 89 2319 a(DELETE)f Ft(w)o(as)f(\014rst)h(called)i(to)d(delete)j(the)e(previous)h(v)m(alue) g(\(and)f(the)h(callbac)o(k)g(function)g Fp(delete)p 1823 2319 V 18 w(fn)75 2376 y Ft(w)o(as)f(executed\),)i(and)f(a)f(new)i (v)m(alue)g(w)o(as)e(next)h(stored.)27 b(The)18 b(call)h(is)g (erroneous)f(if)g(there)g(is)g(no)g(k)o(ey)75 2432 y(with)h(v)m(alue)h Fp(k)o(eyval)p Ft(;)f(in)g(particular)h Fi(MPI)p 798 2432 13 2 v 14 w(KEYV)m(AL)p 969 2432 V 14 w(INV)m(ALID)d Ft(is)i(an)f(erroneous)h(k)o(ey)f(v)m(alue.)31 b(The)19 b(call)63 b Fn(>)75 2488 y Ft(will)17 b(fail)f(if)g(the)f Fp(delete)p 471 2488 14 2 v 18 w(fn)g Ft(function)h(returned)g(an)f (error)f(co)q(de)i(other)f(than)g Fi(MPI)p 1482 2488 13 2 v 14 w(SUCCESS)p Ft(.)253 b Fn(?)-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: 40 42 40 41 bop 75 -100 a Ft(40)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)75 45 y Fp(MPI)p 160 45 14 2 v 16 w(A)l(TTR)p 293 45 V 17 w(GET\(comm,)e(k)o(eyval,)h(attribute)p 865 45 V 18 w(val,)h(\015ag\)) 117 122 y Fh(IN)155 b Fp(comm)470 b Fh(comm)o(unicator)10 b(to)i(whic)o(h)g(attribute)h(is)f(attac)o(hed)h(\(handle\))117 197 y(IN)155 b Fp(k)o(eyval)471 b Fh(k)o(ey)14 b(v)n(alue)f(\(in)o (teger\))117 273 y(OUT)108 b Fp(attribute)p 484 273 V 18 w(val)352 b Fh(attribute)15 b(v)n(alue,)d(unless)j Fi(\015ag)f Fh(=)g(false)117 348 y(OUT)108 b Fp(\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 404 y(attribute)h(is)e(asso)q(ciated)i (with)f(the)g(k)o(ey)-160 480 y Fn(>)75 529 y Fg(int)23 b(MPI)p 245 529 15 2 v 17 w(Attr)p 358 529 V 17 w(get\(MPI)p 543 529 V 16 w(Comm)g(comm,)h(int)f(keyval,)g(void)g(*attribute)p 1467 529 V 16 w(val,)g(int)h(*flag\))-160 569 y Fn(?)75 615 y Fg(MPI)p 150 615 V 17 w(ATTR)p 263 615 V 16 w(GET\(COMM,)f (KEYVAL,)g(ATTRIBUTE)p 925 615 V 16 w(VAL,)g(FLAG,)g(IERROR\))170 672 y(INTEGER)g(COMM,)h(KEYVAL,)e(ATTRIBUTE)p 914 672 V 16 w(VAL,)i(IERROR)170 728 y(LOGICAL)f(FLAG)166 814 y Ft(Retriev)o(es)c(attribute)g(v)m(alue)h(b)o(y)f(k)o(ey)l(.)30 b(The)19 b(call)h(is)f(erroneous)g(if)g(there)g(is)g(no)g(k)o(ey)g (with)g(v)m(alue)75 871 y Fp(k)o(eyval)p Ft(.)30 b(On)19 b(the)g(other)f(hand,)h(the)g(call)h(is)f(correct)f(if)h(the)g(k)o(ey)f (v)m(alue)i(exists,)g(but)e(no)h(attribute)f(is)75 927 y(attac)o(hed)e(on)h Fg(comm)f Ft(for)g(that)g(k)o(ey;)g(in)i(suc)o(h)f (case,)g(the)f(call)i(returns)f Fg(flag)23 b(=)h(false)p Ft(.)f(In)17 b(particular)75 984 y Fi(MPI)p 152 984 13 2 v 14 w(KEYV)m(AL)p 323 984 V 14 w(INV)m(ALID)d Ft(is)i(an)f (erroneous)g(k)o(ey)g(v)m(alue.)-1177 b Fn(>)189 1090 y Fj(A)n(dvic)n(e)19 b(to)i(users.)66 b Ft(The)20 b(call)h(to)e Fp(MPI)p 910 1090 14 2 v 15 w(A)o(ttr)p 1002 1090 V 17 w(put)i Ft(passes)f(in)g Fp(attribute)p 1464 1090 V 18 w(val)f Ft(the)h Fj(value)g Ft(of)f(the)189 1147 y(attribute;)12 b(the)g(call)g(to)f Fp(MPI)p 682 1147 V 16 w(A)o(ttr)p 775 1147 V 17 w(get)h Ft(passes)f(in)i Fp(attribute)p 1209 1147 V 18 w(val)e Ft(the)h Fj(addr)n(ess)f Ft(of)g(the)g(the)h(lo) q(cation)189 1203 y(where)19 b(the)g(attribute)g(v)m(alue)h(is)g(to)e (b)q(e)i(returned.)32 b(Th)o(us,)19 b(if)h(the)f(attribute)g(v)m(alue)h (itself)g(is)f(a)189 1259 y(p)q(oin)o(ter)f(of)g(t)o(yp)q(e)h Fi(void*)p Ft(,)f(the)g(the)h(actual)f Fp(attribute)p 1100 1259 V 18 w(val)g Ft(parameter)g(to)f Fp(MPI)p 1551 1259 V 16 w(A)o(ttr)p 1644 1259 V 17 w(put)i Ft(will)h(b)q(e)189 1316 y(of)e(t)o(yp)q(e)g Fi(void*)h Ft(and)f(the)h(actual)g Fp(attribute)p 939 1316 V 18 w(val)f Ft(parameter)f(to)h Fp(MPI)p 1390 1316 V 16 w(A)o(ttr)p 1483 1316 V 17 w(put)i Ft(will)g(b)q(e)f(of)f(t)o(yp)q(e)189 1372 y Fi(void**)p Ft(.)h(\()p Fj(End)d(of)g(advic)n(e)g(to)h(users.)p Ft(\))189 1479 y Fj(R)n(ationale.)62 b Ft(The)19 b(use)g(of)f(a)h(formal)f (parameter)h Fp(attribute)p 1263 1479 V 18 w(val)f Ft(or)g(t)o(yp)q(e)h Fi(void*)g Ft(\(rather)f(than)189 1535 y Fi(void**)p Ft(\))e(a)o(v)o(oids)h(the)h(messy)f(t)o(yp)q(e)h(casting)f(that)g(w)o (ould)h(b)q(e)g(needed)g(if)g(the)g(attribute)f(v)m(alue)h(is)189 1592 y(declared)e(with)g(a)e(t)o(yp)q(e)i(other)f(than)g Fi(void*)p Ft(.)k(\()p Fj(End)d(of)g(r)n(ationale.)p Ft(\))-160 1653 y Fn(?)75 1792 y Fp(MPI)p 160 1792 V 16 w(A)l(TTR)p 293 1792 V 17 w(DELETE\(comm,)c(k)o(eyval\))117 1870 y Fh(IN)155 b Fp(comm)470 b Fh(comm)o(unicator)10 b(to)i(whic)o(h)g(attribute)h(is)f(attac)o(hed)h(\(handle\))117 1945 y(IN)155 b Fp(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 2069 y Fg(int)23 b(MPI)p 245 2069 15 2 v 17 w(Attr)p 358 2069 V 17 w(delete\(MPI)p 615 2069 V 16 w(Comm)g(comm,)g(int)h(keyval\))75 2156 y(MPI)p 150 2156 V 17 w(ATTR)p 263 2156 V 16 w(DELETE\(COMM,)f (KEYVAL,)g(IERROR\))170 2212 y(INTEGER)g(COMM,)h(KEYVAL,)e(IERROR)166 2298 y Ft(Delete)14 b(attribute)g(from)f(cac)o(he)h(b)o(y)f(k)o(ey)l(.) 20 b(This)14 b(function)g(in)o(v)o(ok)o(es)g(the)g(attribute)f(delete)i (function)75 2355 y Fp(delete)p 188 2355 14 2 v 18 w(fn)j Ft(sp)q(eci\014ed)i(when)e(the)g Fp(k)o(eyval)f Ft(w)o(as)g(created.)28 b(The)18 b(call)h(will)h(fail)e(if)g(the)g Fp(delete)p 1642 2355 V 18 w(fn)g Ft(function)-2034 b Fn(>)75 2411 y Ft(returns)15 b(an)g(error)g(co)q(de)g(other)g(than)g Fi(MPI)p 813 2411 13 2 v 15 w(SUCCESS)p Ft(.)-1176 b Fn(?)166 2468 y Ft(Whenev)o(er)16 b(a)g(comm)o(unicator)f(is)h (replicated)i(using)e(the)g(function)h Fp(MPI)p 1435 2468 14 2 v 16 w(COMM)p 1593 2468 V 16 w(DUP)p Ft(,)f(all)h(call-)75 2524 y(bac)o(k)h(cop)o(y)f(functions)i(for)e(attributes)g(that)g(are)h (curren)o(tly)g(set)f(are)h(in)o(v)o(ok)o(ed)g(\(in)g(arbitrary)f (order\).)75 2581 y(Whenev)o(er)23 b(a)f(comm)o(unicator)g(is)g (deleted)i(using)f(the)g(function)g Fp(MPI)p 1343 2581 V 15 w(COMM)p 1500 2581 V 17 w(FREE)g Ft(all)g(callbac)o(k)75 2637 y(delete)16 b(functions)g(for)f(attributes)g(that)f(are)h(curren)o (tly)h(set)f(are)g(in)o(v)o(ok)o(ed.)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: 41 43 41 42 bop 75 -100 a Fl(1.7.)29 b(CA)o(CHING)1435 b Ft(41)75 45 y Fo(1.7.2)49 b(A)o(ttributes)14 b(Example)189 131 y Fj(A)n(dvic)n(e)22 b(to)h(users.)83 b Ft(This)23 b(example)h(sho)o (ws)e(ho)o(w)g(to)f(write)i(a)f(collectiv)o(e)i(comm)o(unication)189 187 y(op)q(eration)16 b(that)f(uses)i(cac)o(hing)g(to)e(b)q(e)i(more)f (e\016cien)o(t)h(after)e(the)i(\014rst)e(call.)24 b(The)17 b(co)q(ding)g(st)o(yle)189 244 y(assumes)11 b(that)h Fp(MPI)f Ft(function)i(results)f(return)g(only)h(error)e(statuses.)18 b(\()p Fj(End)13 b(of)g(advic)n(e)g(to)h(users.)p Ft(\))147 332 y Fg(/*)23 b(key)h(for)f(this)g(module's)g(stuff:)g(*/)147 389 y(static)g(int)g(gop_key)g(=)h(MPI_KEYVAL_INVALID;)147 502 y(typedef)e(struct)147 558 y({)218 615 y(int)i(ref_count;)237 b(/*)23 b(reference)g(count)g(*/)218 671 y(/*)h(other)f(stuff,)g (whatever)g(else)g(we)h(want)f(*/)147 728 y(})g(gop_stuff_type;)147 841 y(Efficient_Collective_Op)d(\(comm,)j(...\))147 897 y(MPI_Comm)f(comm;)147 953 y({)194 1010 y(gop_stuff_type)g(*gop_stuff;) 194 1066 y(MPI_Group)166 b(group;)194 1123 y(int)310 b(foundflag;)194 1236 y(MPI_Comm_group\(comm,)21 b(&group\);)194 1349 y(if)j(\(gop_key)f(==)g(MPI_KEYVAL_INVALID\))f(/*)h(get)h(a)f(key) h(on)f(first)h(call)f(ever)g(*/)194 1405 y({)242 1462 y(if)h(\()f(!)h(MPI_keyval_create\()d(gop_stuff_copier,)839 1518 y(gop_stuff_destructor,)839 1574 y(&gop_key,)h(\(void)h(*\)0\)\);) 242 1631 y(/*)h(get)f(the)h(key)f(while)g(assigning)g(its)g(copy)h(and) f(delete)g(callback)314 1687 y(behavior.)f(*/)242 1800 y(MPI_Abort)h(\(comm,)g(99\);)194 1857 y(})194 1970 y(MPI_Attr_get)g (\(comm,)g(gop_key,)f(&gop_stuff,)h(&foundflag\);)194 2026 y(if)h(\(foundflag\))194 2083 y({)g(/*)g(This)f(module)g(has)g (executed)g(in)h(this)f(group)g(before.)314 2139 y(We)g(will)h(use)f (the)g(cached)g(information)g(*/)194 2195 y(})194 2252 y(else)194 2308 y({)h(/*)g(This)f(is)h(a)f(group)g(that)h(we)f(have)h (not)f(yet)h(cached)f(anything)f(in.)314 2365 y(We)h(will)h(now)f(do)h (so.)242 2421 y(*/)242 2534 y(/*)g(First,)f(allocate)f(storage)h(for)h (the)f(stuff)g(we)h(want,)314 2591 y(and)f(initialize)g(the)g (reference)g(count)g(*/)242 2704 y(gop_stuff)g(=)g(\(gop_stuff_type)f (*\))i(malloc)f(\(sizeof\(gop_stuff_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: 42 44 42 43 bop 75 -100 a Ft(42)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)242 45 y Fg(if)24 b(\(gop_stuff)e(==)i(NULL\))f({)h(/*)f(abort)g(on)h (out-of-memory)e(error)h(*/)h(})242 158 y(gop_stuff)f(->)g(ref_count)g (=)h(1;)242 271 y(/*)g(Second,)f(fill)g(in)g(*gop_stuff)g(with)g (whatever)g(we)h(want.)314 327 y(This)f(part)g(isn't)g(shown)h(here)f (*/)242 440 y(/*)h(Third,)f(store)g(gop_stuff)f(as)i(the)g(attribute)e (value)h(*/)242 497 y(MPI_Attr_put)f(\()i(comm,)f(gop_key,)g (gop_stuff\);)194 553 y(})194 610 y(/*)h(Then,)f(in)h(any)f(case,)g (use)h(contents)f(of)g(*gop_stuff)266 666 y(to)g(do)h(the)g(global)f (op)g(...)h(*/)147 723 y(})147 835 y(/*)f(The)h(following)e(routine)h (is)h(called)f(by)g(MPI)h(when)f(a)h(group)f(is)h(freed)f(*/)147 948 y(gop_stuff_destructor)e(\(comm,)i(keyval,)g(gop_stuff,)f(extra\)) 147 1005 y(MPI_Comm)g(comm;)147 1061 y(int)h(keyval;)147 1118 y(gop_stuff_type)f(*gop_stuff;)147 1174 y(void)h(*extra;)147 1231 y({)194 1287 y(if)h(\(keyval)f(!=)g(gop_key\))g({)h(/*)f(abort)h (--)f(programming)g(error)g(*/)g(})194 1400 y(/*)h(The)f(group's)g (being)g(freed)h(removes)f(one)g(reference)g(to)g(gop_stuff)g(*/)194 1456 y(gop_stuff)g(->)h(ref_count)e(-=)i(1;)194 1569 y(/*)g(If)f(no)h(references)f(remain,)f(then)i(free)f(the)h(storage)e (*/)194 1626 y(if)i(\(gop_stuff)e(->)i(ref_count)f(==)g(0\))h({)242 1682 y(free\(\(void)f(*\)gop_stuff\);)194 1739 y(})147 1795 y(})147 1908 y(/*)g(The)h(following)e(routine)h(is)h(called)f(by)g (MPI)h(when)f(a)h(group)f(is)h(copied)f(*/)147 1965 y(gop_stuff_copier) e(\(comm,)i(keyval,)g(extra,)g(gop_stuff_in,)f(gop_stuff_out,)g(flag\)) 147 2021 y(MPI_Comm)g(comm;)147 2077 y(int)h(keyval;)147 2134 y(gop_stuff_type)f(*gop_stuff_in,)f(*gop_stuff_out;)147 2190 y(void)i(*extra;)147 2247 y({)194 2303 y(if)h(\(keyval)f(!=)g (gop_key\))g({)h(/*)f(abort)h(--)f(programming)g(error)g(*/)g(})194 2416 y(/*)h(The)f(new)h(group)f(adds)g(one)h(reference)e(to)i(this)f (gop_stuff)g(*/)194 2473 y(gop_stuff)g(->)h(ref_count)e(+=)i(1;)194 2529 y(gop_stuff_out)e(=)i(gop_stuff_in;)147 2586 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: 43 45 43 44 bop 75 -100 a Fl(1.8.)34 b(F)o(ORMALIZING)16 b(THE)f(LOOSEL)l(Y)i (SYNCHR)o(ONOUS)g(MODEL)417 b Ft(43)75 45 y Fq(1.8)59 b(F)n(o)n(rmalizing)21 b(the)e(Lo)r(osely)g(Synchronous)g(Mo)r(del)75 147 y Ft(In)i(this)h(section,)g(w)o(e)f(mak)o(e)f(further)h(statemen)o (ts)e(ab)q(out)i(the)g(lo)q(osely)h(sync)o(hronous)f(mo)q(del,)i(with) 75 203 y(particular)16 b(atten)o(tion)f(to)f(in)o(tra-comm)o (unication.)75 325 y Fo(1.8.1)49 b(Basic)17 b(Statements)75 411 y Ft(When)e(a)g(caller)h(passes)e(a)h(comm)o(unicator)f(\(that)g (con)o(tains)h(a)g(con)o(text)f(and)h(group\))f(to)g(a)h(callee,)h (that)75 467 y(comm)o(unicator)g(m)o(ust)h(b)q(e)g(free)g(of)f(side)i (e\013ects)e(throughout)g(execution)i(of)f(the)g(subprogram:)22 b(there)75 523 y(should)16 b(b)q(e)f(no)g(activ)o(e)g(op)q(erations)g (on)g(that)f(comm)o(unicator)g(that)g(migh)o(t)h(in)o(v)o(olv)o(e)g (the)g(pro)q(cess.)20 b(This)75 580 y(pro)o(vides)i(one)g(mo)q(del)h (in)f(whic)o(h)h(libraries)g(can)f(b)q(e)h(written,)g(and)f(w)o(ork)f (\\safely)l(.")39 b(F)l(or)21 b(libraries)75 636 y(so)e(designated,)h (the)g(callee)h(has)e(p)q(ermission)h(to)f(do)g(whatev)o(er)g(comm)o (unication)h(it)f(lik)o(es)h(with)g(the)75 693 y(comm)o(unicator,)e (and)h(under)g(the)f(ab)q(o)o(v)o(e)g(guaran)o(tee)g(kno)o(ws)g(that)f (no)h(other)g(comm)o(unications)h(will)75 749 y(in)o(terfere.)36 b(Since)22 b(w)o(e)f(p)q(ermit)g(go)q(o)q(d)f(implemen)o(tations)i(to)e (create)g(new)h(comm)o(unicators)f(without)75 806 y(sync)o(hronization) 14 b(\(suc)o(h)g(as)f(b)o(y)g(preallo)q(cated)i(con)o(texts)e(on)g (comm)o(unicators\),)g(this)g(do)q(es)h(not)f(imp)q(ose)75 862 y(a)i(signi\014can)o(t)h(o)o(v)o(erhead.)166 919 y(This)k(form)f(of)g(safet)o(y)f(is)i(analogous)f(to)g(other)g(common)g (computer-science)j(usages,)e(suc)o(h)f(as)75 975 y(passing)c(a)f (descriptor)h(of)f(an)h(arra)o(y)e(to)h(a)g(library)i(routine.)k(The)15 b(library)g(routine)g(has)g(ev)o(ery)f(righ)o(t)h(to)75 1032 y(exp)q(ect)h(suc)o(h)f(a)g(descriptor)h(to)f(b)q(e)g(v)m(alid)i (and)f(mo)q(di\014able.)75 1153 y Fo(1.8.2)49 b(Mo)q(dels)17 b(of)g(Execution)75 1239 y Ft(In)12 b(the)g(lo)q(osely)h(sync)o (hronous)f(mo)q(del,)h(transfer)e(of)h(con)o(trol)f(to)h(a)f Fk(parallel)16 b(pro)q(cedure)c Ft(is)g(e\013ected)g(b)o(y)75 1296 y(ha)o(ving)f(eac)o(h)g(executing)g(pro)q(cess)g(in)o(v)o(ok)o(e)g (the)f(pro)q(cedure.)19 b(The)11 b(in)o(v)o(o)q(cation)g(is)g(a)g (collectiv)o(e)h(op)q(eration:)75 1352 y(it)i(is)h(executed)g(b)o(y)f (all)h(pro)q(cesses)f(in)h(the)g(execution)g(group,)e(and)i(in)o(v)o(o) q(cations)f(are)g(similarly)i(ordered)75 1408 y(at)f(all)h(pro)q (cesses.)k(Ho)o(w)o(ev)o(er,)14 b(the)h(in)o(v)o(o)q(cation)h(need)g (not)f(b)q(e)h(sync)o(hronized.)166 1465 y(W)l(e)d(sa)o(y)g(that)g(a)g (parallel)i(pro)q(cedure)f(is)g Fj(active)f Ft(in)h(a)g(pro)q(cess)f (if)h(the)f(pro)q(cess)h(b)q(elongs)g(to)f(a)g(group)75 1521 y(that)j(ma)o(y)h(collectiv)o(ely)i(execute)f(the)f(pro)q(cedure,) h(and)f(some)f(mem)o(b)q(er)h(of)g(that)f(group)h(is)g(curren)o(tly)75 1578 y(executing)c(the)f(pro)q(cedure)h(co)q(de.)19 b(If)13 b(a)e(parallel)j(pro)q(cedure)f(is)f(activ)o(e)g(in)h(a)f(pro)q(cess,)g (then)g(this)h(pro)q(cess)75 1634 y(ma)o(y)e(b)q(e)i(receiving)g (messages)e(p)q(ertaining)i(to)f(this)g(pro)q(cedure,)h(ev)o(en)f(if)g (it)g(do)q(es)h(not)e(curren)o(tly)h(execute)75 1691 y(the)j(co)q(de)h(of)f(this)g(pro)q(cedure.)75 1811 y Fp(Static)h(communicato)o(r)e(allo)q(cation)75 1897 y Ft(This)22 b(co)o(v)o(ers)f(the)h(case)g(where,)h(at)e(an)o(y)g(p)q (oin)o(t)h(in)h(time,)g(at)e(most)g(one)h(in)o(v)o(o)q(cation)g(of)f(a) g(parallel)75 1953 y(pro)q(cedure)c(can)f(b)q(e)h(activ)o(e)f(at)f(an)o (y)h(pro)q(cess,)g(and)g(the)g(group)f(of)h(executing)h(pro)q(cesses)f (is)h(\014xed.)23 b(F)l(or)75 2010 y(example,)d(all)g(in)o(v)o(o)q (cations)f(of)g(parallel)h(pro)q(cedures)g(in)o(v)o(olv)o(e)f(all)h (pro)q(cesses,)g(pro)q(cesses)f(are)f(single-)75 2066 y(threaded,)d(and)h(there)f(are)g(no)g(recursiv)o(e)h(in)o(v)o(o)q (cations.)166 2122 y(In)k(suc)o(h)g(a)g(case,)g(a)g(comm)o(unicator)f (can)h(b)q(e)g(statically)h(allo)q(cated)f(to)g(eac)o(h)f(pro)q (cedure.)35 b(The)75 2179 y(static)18 b(allo)q(cation)h(can)f(b)q(e)h (done)g(in)g(a)e(pream)o(ble,)j(as)d(part)h(of)g(initialization)j(co)q (de.)29 b(If)18 b(the)g(parallel)75 2235 y(pro)q(cedures)g(can)f(b)q(e) g(organized)g(in)o(to)g(libraries,)h(so)f(that)f(only)h(one)g(pro)q (cedure)h(of)e(eac)o(h)h(library)h(can)75 2292 y(b)q(e)e(concurren)o (tly)g(activ)o(e)g(in)g(eac)o(h)f(pro)q(cessor,)g(then)h(it)g(is)g (su\016cien)o(t)g(to)f(allo)q(cate)h(one)f(comm)o(unicator)75 2348 y(p)q(er)h(library)l(.)75 2468 y Fp(Dynamic)e(communicato)o(r)g (allo)q(cation)75 2554 y Ft(Calls)h(of)g(parallel)h(pro)q(cedures)g (are)e(w)o(ell-nested)i(if)g(a)e(new)h(parallel)h(pro)q(cedure)g(is)f (alw)o(a)o(ys)f(in)o(v)o(ok)o(ed)h(in)75 2611 y(a)j(subset)h(of)e(a)h (group)g(executing)i(the)e(same)g(parallel)i(pro)q(cedure.)30 b(Th)o(us,)19 b(pro)q(cesses)g(that)e(execute)75 2667 y(the)e(same)g(parallel)i(pro)q(cedure)f(ha)o(v)o(e)f(the)g(same)g (execution)h(stac)o(k.)-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: 44 46 44 45 bop 75 -100 a Ft(44)388 b Fl(CHAPTER)15 b(1.)35 b(GR)o(OUPS,)15 b(CONTEXTS,)g(AND)g(COMMUNICA)l(TORS)166 45 y Ft(In)j(suc)o(h)g(a)g(case,)f(a)h(new)g(comm)o(unicator)f(needs)h (to)f(b)q(e)i(dynamically)g(allo)q(cated)g(for)e(eac)o(h)h(new)75 102 y(in)o(v)o(o)q(cation)11 b(of)f(a)g(parallel)i(pro)q(cedure.)19 b(The)11 b(allo)q(cation)g(is)g(done)g(b)o(y)f(the)h(caller.)19 b(A)11 b(new)f(comm)o(unicator)75 158 y(can)k(b)q(e)h(generated)g(b)o (y)f(a)g(call)h(to)f Fp(MPI)p 746 158 14 2 v 15 w(COMM)p 903 158 V 17 w(DUP)p Ft(,)g(if)g(the)h(callee)g(execution)h(group)e(is) g(iden)o(tical)j(to)75 214 y(the)f(caller)h(execution)g(group,)e(or)g (b)o(y)h(a)f(call)i(to)e Fp(MPI)p 1005 214 V 16 w(COMM)p 1163 214 V 16 w(SPLIT)g Ft(if)i(the)f(caller)g(execution)h(group)75 271 y(is)f(split)h(in)o(to)f(sev)o(eral)f(subgroups)h(executing)h (distinct)g(parallel)g(routines.)22 b(The)15 b(new)h(comm)o(unicator)75 327 y(is)g(passed)f(as)g(an)g(argumen)o(t)g(to)f(the)h(in)o(v)o(ok)o (ed)h(routine.)166 384 y(The)h(need)h(for)e(generating)h(a)f(new)h (comm)o(unicator)f(at)h(eac)o(h)f(in)o(v)o(o)q(cation)i(can)f(b)q(e)g (alleviated)h(or)75 440 y(a)o(v)o(oided)e(altogether)e(in)j(some)e (cases:)20 b(If)15 b(the)h(execution)g(group)f(is)h(not)f(split,)h (then)f(one)h(can)f(allo)q(cate)75 497 y(a)g(stac)o(k)g(of)g(comm)o (unicators)h(in)g(a)f(pream)o(ble,)h(and)g(next)g(manage)f(the)h(stac)o (k)f(in)h(a)f(w)o(a)o(y)g(that)g(mimics)75 553 y(the)g(stac)o(k)g(of)f (recursiv)o(e)i(calls.)166 610 y(One)h(can)f(also)g(tak)o(e)f(adv)m(an) o(tage)g(of)h(the)g(w)o(ell-ordering)h(prop)q(ert)o(y)f(of)f(comm)o (unication)i(to)e(a)o(v)o(oid)75 666 y(confusing)g(caller)g(and)f (callee)h(comm)o(unication,)f(ev)o(en)h(if)f(b)q(oth)g(use)g(the)g (same)f(comm)o(unicator.)19 b(T)l(o)14 b(do)75 723 y(so,)g(one)i(needs) g(to)e(abide)j(b)o(y)e(the)g(follo)o(wing)h(t)o(w)o(o)e(rules:)143 816 y Fn(\017)23 b Ft(messages)13 b(sen)o(t)g(b)q(efore)h(a)f(pro)q (cedure)h(call)h(\(or)e(b)q(efore)h(a)f(return)g(from)g(the)h(pro)q (cedure\))g(are)f(also)189 873 y(receiv)o(ed)j(b)q(efore)f(the)h(matc)o (hing)f(call)h(\(or)f(return\))g(at)f(the)h(receiving)i(end;)143 967 y Fn(\017)23 b Ft(messages)14 b(are)h(alw)o(a)o(ys)g(selected)h(b)o (y)f(source)g(\(no)g(use)h(is)g(made)f(of)g Fi(MPI)p 1430 967 13 2 v 14 w(ANY)p 1529 967 V 15 w(SOURCE)p Ft(\).)75 1087 y Fp(The)h(General)f(case)75 1173 y Ft(In)22 b(the)g(general)g (case,)h(there)e(ma)o(y)g(b)q(e)h(m)o(ultiple)i(concurren)o(tly)e (activ)o(e)g(in)o(v)o(o)q(cations)g(of)f(the)g(same)75 1229 y(parallel)i(pro)q(cedure)g(within)g(the)f(same)f(group;)j(in)o(v) o(o)q(cations)e(ma)o(y)f(not)h(b)q(e)g(w)o(ell-nested.)41 b(A)22 b(new)75 1285 y(comm)o(unicator)11 b(needs)i(to)e(b)q(e)i (created)e(for)h(eac)o(h)f(in)o(v)o(o)q(cation.)20 b(It)11 b(is)i(the)f(user's)f(resp)q(onsibilit)o(y)j(to)d(mak)o(e)75 1342 y(sure)18 b(that,)f(should)h(t)o(w)o(o)e(distinct)j(parallel)g (pro)q(cedures)f(b)q(e)g(in)o(v)o(ok)o(ed)g(concurren)o(tly)g(on)f(o)o (v)o(erlapping)75 1398 y(sets)e(of)g(pro)q(cesses,)g(then)g(comm)o (unicator)g(creation)h(b)q(e)f(prop)q(erly)i(co)q(ordinated.)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: 45 47 45 46 bop 75 377 a Fr(Biblio)q(graph)m(y)75 600 y Ft([1])22 b(Purushotham)16 b(V.)h(Bangalore,)g(Nathan)g(E.)g(Doss,)f(and)i(An)o (thon)o(y)f(Skjellum.)27 b(MPI++:)d(Issues)146 656 y(and)15 b(Features.)k(In)d Fj(OON-SKI)f('94)p Ft(,)g(page)g(in)h(press,)f (1994.)75 750 y([2])22 b(D.)d(F)l(eitelson.)35 b(Comm)o(unicators:)29 b(Ob)s(ject-based)20 b(m)o(ultipart)o(y)g(in)o(teractions)g(for)g (parallel)h(pro-)146 806 y(gramming.)16 b(T)l(ec)o(hnical)f(Rep)q(ort)f (91-12,)e(Dept.)h(Computer)g(Science,)i(The)f(Hebrew)f(Univ)o(ersit)o (y)h(of)146 863 y(Jerusalem,)h(No)o(v)o(em)o(b)q(er)g(1991.)75 957 y([3])22 b(A.)15 b(Skjellum)j(and)e(A.)g(Leung.)23 b(Zip)q(co)q(de:)g(a)16 b(p)q(ortable)h(m)o(ulticomputer)f(comm)o (unication)h(library)146 1013 y(atop)j(the)h(reactiv)o(e)g(k)o(ernel.) 37 b(In)21 b(D.)f(W.)g(W)l(alk)o(er)h(and)g(Q.)g(F.)f(Stout,)h (editors,)h Fj(Pr)n(o)n(c)n(e)n(e)n(dings)d(of)146 1070 y(the)c(Fifth)g(Distribute)n(d)g(Memory)h(Concurr)n(ent)e(Computing)h (Confer)n(enc)n(e)p Ft(,)d(pages)h(767{776.)f(IEEE)146 1126 y(Press,)i(1990.)75 1220 y([4])22 b(An)o(thon)o(y)14 b(Skjellum,)i(Nathan)e(E.)g(Doss,)f(and)i(Purushotham)f(V.)g (Bangalore.)19 b(W)l(riting)c(Libraries)146 1276 y(in)h(MPI.)21 b(In)c(An)o(thon)o(y)e(Skjellum)j(and)d(Donna)h(S.)f(Reese,)i(editors,) e Fj(Pr)n(o)n(c)n(e)n(e)n(dings)g(of)h(the)h(Sc)n(alable)146 1333 y(Par)n(al)r(lel)g(Libr)n(aries)h(Confer)n(enc)n(e)p Ft(,)d(pages)i(166{173.)e(IEEE)j(Computer)f(So)q(ciet)o(y)h(Press,)g (Octob)q(er)146 1389 y(1993.)75 1483 y([5])k(An)o(thon)o(y)c(Skjellum,) i(Stev)o(en)e(G.)g(Smith,)h(Nathan)f(E.)f(Doss,)h(Alvin)i(P)e(.)g (Leung,)h(and)f(Manfred)146 1539 y(Morari.)35 b(The)21 b(Design)g(and)g(Ev)o(olution)g(of)f(Zip)q(co)q(de.)38 b Fj(Par)n(al)r(lel)21 b(Computing)p Ft(,)g(1994.)35 b(\(In)o(vited)146 1596 y(P)o(ap)q(er,)14 b(to)h(app)q(ear)g(in)h(Sp)q (ecial)i(Issue)e(on)f(Message)f(P)o(assing\).)75 1690 y([6])22 b(An)o(thon)o(y)d(Skjellum,)k(Stev)o(en)d(G.)f(Smith,)j (Nathan)d(E.)h(Doss,)g(Charles)g(H.)g(Still,)i(Alvin)g(P)l(.)d(Le-)146 1746 y(ung,)g(and)g(Manfred)f(Morari.)29 b(Zip)q(co)q(de:)g(A)18 b(Portable)h(Comm)o(unication)g(La)o(y)o(er)f(for)g(High)h(P)o(er-)146 1803 y(formance)g(Multicomputing.)35 b(T)l(ec)o(hnical)22 b(Rep)q(ort)e(UCRL-JC-106725)g(\(revised)g(9/92,)g(12/93,)146 1859 y(4/94\),)e(La)o(wrence)h(Liv)o(ermore)h(National)f(Lab)q(oratory) l(,)g(Marc)o(h)g(1991.)30 b(T)l(o)19 b(app)q(ear)g(in)h(Concur-)146 1916 y(rency:)g(Practice)c(&)f(Exp)q(erience.)-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 .