%!PS-Adobe-2.0 %%Creator: dvips 5.526 Copyright 1986, 1994 Radical Eye Software %%Title: book.dvi %%CreationDate: Fri Nov 11 10:57:38 1994 %%Pages: 298 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%EndComments %DVIPSCommandLine: dvips book -o book.ps %DVIPSParameters: dpi=300, comments removed %DVIPSSource: TeX output 1994.11.11:1055 %%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 (/white/homes/dongarra/PVM/PVM_BOOK/book.dvi) @start /Fa 1 43 df<003000007800007800007800007800007800F0783CF8787CFE79FC7F7BF8 1FFFE007FF8001FE0001FE0007FF801FFFE07F7BF8FE79FCF8787CF0783C007800007800 007800007800007800003000161A7C9E1F>42 D E /Fb 1 124 df<FFFFF81501808A16> 123 D E /Fc 1 104 df<7C000000FFC0000007F0000001F80000007C0000003E000000 1F0000001F8000001F8000000FC000000FC000000FC000000FC000000FC000000FC00000 0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 0FC000000FC000000FC0000007E0000007E0000003F0000001F8000000FC0000007F0000 001FF8000003FC00001FF800007F000000FC000001F8000003F0000007E0000007E00000 0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000 1F8000001F8000001F0000003E0000007C000001F8000007F00000FFC000007C0000001E 577AC02B>103 D E /Fd 33 122 df<0003FB80000E0F80001C1F8000181B8000380700 00380700003807000070070000700E0000700E0007FFFE0000700E0000E01C0000E01C00 00E01C0000E01C0000E0380001C0380001C0380001C0380001C0720001C0720003807200 03807200038034000380180003000000070000000700000066000000E6000000CC000000 780000001921819917>13 D<1838783808101020204080050B7D830C>44 D<3078F06005047C830C>46 D<001F80006060018010020008040004081E0410610410C0 822180E22380E24700E24700E28E01C48E01C48E01C48E01C48E03888E0388860790831B 9081E1E04000002000003000700807C007FC00171A7A991D>64 D<0000200000600000E0 0000E00001E00001F0000270000270000470000870000870001070001070002070004070 00407000803800FFF8010038020038020038040038040038080038180038FE01FF181A7E 991D>I<03FFF800700E00700600700700E00700E00700E00700E00701C00E01C01C01C0 3801C07003FFE003807803803803801C07001C07001C07001C07001C0E00380E00380E00 700E00E01C03C0FFFF00181A7D991B>I<000F8200706200C01603801E07000C0E000C1C 000C18000C380008300008700000700000E00000E00000E00000E00000E00020E00020E0 0020E000406000406000803001001006000C180003E000171A7A991B>I<03FFFF007007 00700300700100E00100E00100E00100E00101C08001C08001C08001C18003FF00038100 0381000381000702000700040700040700080E00080E00180E00100E00301C00E0FFFFE0 181A7D991A>69 D<03FF1FF800700380007003800070038000E0070000E0070000E00700 00E0070001C00E0001C00E0001C00E0001C00E0003FFFC0003801C0003801C0003801C00 070038000700380007003800070038000E0070000E0070000E0070000E0070001C00E000 FF87FC001D1A7D991D>72 D<001F8000706001C03003001806001C0E000C1C000C18000E 38000E30000E70000E70000EE0001CE0001CE0001CE00038E00038E00030E00070E000E0 E000C06001807003003806001C1C0007E000171A7A991D>79 D<03FFF000701C00700E00 700700E00700E00700E00700E00701C00E01C01C01C03801C0E003FF800380C003806003 80700700700700700700700700700E00E00E00E00E00E10E00E21C0062FF803C181A7D99 1C>82 D<003F1000609001807001007003002006002006002006002006000007000007C0 0003F80001FE00007F00000F800003800001800001802001802001806003006003006006 00700C00C8180087E000141A7D9916>I<03CC0E2E181C381C301C701CE038E038E038E0 38C072C072C07260F261341E180F107C8F14>97 D<7E000E000E000E001C001C001C001C 00380038003BC03C307830701870187018E038E038E038E038C070C060C0E060C063801E 000D1A7C9912>I<001F80000380000380000380000700000700000700000700000E0000 0E0003CE000E2E00181C00381C00301C00701C00E03800E03800E03800E03800C07200C0 7200C0720060F2006134001E1800111A7C9914>100 D<01E00E181C08380870087010FF E0E000E000E000E000E0086010602030C01F000D107C8F12>I<00F300038B800607000E 07000C07001C0700380E00380E00380E00380E00301C00301C00301C00183C0018780007 B800003800003800007000607000E0E000C1C0007F000011177E8F12>103 D<1F80000380000380000380000700000700000700000700000E00000E00000E7C000F86 001E07001E07001C07001C0700380E00380E00380E00381C00701C80701C807038807039 00E01900600E00111A7E9914>I<030706000000000000384C4E8E9C9C1C3838707272E2 E4643808197C980C>I<1F8003800380038007000700070007000E000E000E0E0E131C27 1C431C801F003C003F8039C038E070E270E270E270E4E0646038101A7E9912>107 D<1F0707070E0E0E0E1C1C1C1C3838383870707070E4E4E4E4E830081A7D990A>I<307C 1E00598663009E0783809E0703809C0703809C070380380E0700380E0700380E0700380E 0E00701C0E40701C0E40701C1C40701C1C80E0380C80601807001A107C8F1F>I<307C00 5986009E07009E07009C07009C0700380E00380E00380E00381C00701C80701C80703880 703900E01900600E0011107C8F16>I<01F006180C0C180E300E700E600EE00EE00EE00C E01CE018E030606030C01F000F107C8F14>I<030F000590C009E0C009C06009C06009C0 600380E00380E00380E00380E00701C00701800703800703000E8E000E78000E00000E00 001C00001C00001C00001C0000FF00001317808F14>I<30F05D189E389C189C009C0038 003800380038007000700070007000E00060000D107C8F10>114 D<03E004300830187018601C001F801FC00FE000E00060E060E06080C041803E000C107D 8F10>I<06000E000E000E000E001C001C00FFC01C003800380038003800700070007000 7000E100E100E100E200E40038000A177C960D>I<38064C074E0E8E0E9C0E9C0E1C1C38 1C381C381C7039703970393079389A0F0C10107C8F15>I<38184C1C4E1C8E0C9C0C9C0C 1C08380838083810701070107020304018C00F000E107C8F12>I<380C104C0E384E1C38 8E1C189C1C189C1C181C381038381038381038381070702070702070704030704018B880 0F0F0015107C8F19>I<078F0008D18010F38020E18020E00020E00001C00001C00001C0 0001C000038200038200C38200E78400C5880078F00011107E8F12>I<38064C074E0E8E 0E9C0E9C0E1C1C381C381C381C703870387038307838F00F700070006060E0E1C0C18047 003C0010177C8F13>I E /Fe 26 123 df<03F7000E1D80181800181800181800181800 FFFF001818001818001818001818001818001818001818001818001818007E7E00111180 9012>11 D<0408103020606040C0C0C0C0C0C0C0C0C0C04060602030100804061A7D920C >40 D<80402030101818080C0C0C0C0C0C0C0C0C0C0818181030204080061A7F920C>I< FEFE070280850A>45 D<187898181818181818181818181818FF08107D8F0F>49 D<1F00618040C08060C0600060006000C00180030006000C00102020207FC0FFC00B107F 8F0F>I<FFF800180C001803001801001801801800801800C01800C01800C01800C01800 C01800C0180180180100180300180E00FFF80012117F9017>68 D<FFFE18061802180318 011821182018601FE01860182018201800180018001800FF0010117F9014>70 D<3E006300018001800F8031804180C190C19063903DE00C0B7F8A0F>97 D<F0003000300030003000300037C038603030301830183018301830183030386027800D 117F9011>I<1F8030C06000C000C000C000C000C000604030801F000A0B7F8A0E>I<01E0 006000600060006000600F6030E06060C060C060C060C060C060606030E01F780D117F90 11>I<1F00318060C0C0C0FFC0C000C000C000604030801F000A0B7F8A0E>I<1EF0331061 806180618033003E00400060003F803FC060E0C060C060C06060C01F000C117F8A0F> 103 D<20702000000000F0303030303030303030FC0612809108>105 D<F0003000300030003000300031F030C03080330036003F003300318031C030C0FDF00C 117F9010>107 D<F3C3C03C2C2038383030303030303030303030303030303030303030 3030FCFCFC160B7F8A1A>109 D<F3C03C6030603060306030603060306030603060FCF8 0D0B7F8A11>I<F7C0386030303018301830183018301830303860378030003000300030 00FC000D107F8A11>112 D<F700398038003000300030003000300030003000FC00090B 7F8A0C>114 D<3D038181783E038181C2BC080B7F8A0C>I<0800080018003800FF001800 180018001800180018801880188018800F00090F808E0C>I<F1E0306030603060306030 6030603060306030E00F780D0B7F8A11>I<F8F0706030403040188018800D000D000D00 060006000C0B7F8A10>I<F8F030C0188019000E0006000F00198011C020C0F1F00C0B7F 8A10>120 D<FFC0C1808380830006000C0018403040704060C0FFC00A0B7F8A0E>122 D E /Ff 4 121 df<00000180000000018000000000C000000000C00000000060000000 006000000000300000000018000000000C00FFFFFFFF80FFFFFFFF800000000C00000000 1800000000300000000060000000006000000000C000000000C000000001800000000180 0021147E9226>33 D<003C00E001C0038003800380038003800380038003800380038003 800380038007001E00F8001E000700038003800380038003800380038003800380038003 800380038001C000E0003C0E257E9B13>102 D<F8001E00070003800380038003800380 0380038003800380038003800380038001C000E0003C00E001C003800380038003800380 0380038003800380038003800380038007001E00F8000E257E9B13>I<0F0030C07040E0 60E0E0E040E000E000700030000C001F00318070C0E060E070E070E070607030E018C00F 80030000C000E00070007020707070607020E030C00F000C217E9911>120 D E /Fg 89 127 df<C060E0E0E0E0E0E0E0E0C060C060C060C060C06040400B0B7C9614 >34 D<00800180018007E01FF039BC619CC18EC18EC18EE18471807F801FE00FF001F801 9C018E4186E186E186E186718C39B81FF00FC00180018000800F1D7E9914>36 D<3806007C0E006C0E00EE1C00EE1C00EE3800EE38006C38007C700038700000700000E0 0000E00001C00001C00001C000038000038000070000070E00071F000E1B000E3B800E3B 801C3B801C3B80381B00381F00180E00111D7F9914>I<0700000F800018C00038E00038 E00038E00038C00039CF80398F801F1C001E1C001E1C000E38001E3800377000677000E3 F000E3E000E1C380E1E38063F3803F3F001E1E0011177F9614>I<60F0F8781818183030 60C080050C789614>I<0180038006000C001C0018003800700070007000E000E000E000 E000E000E000E000E000E000700070007000380018001C000C00060003800180091D7999 14>I<80C0603038181C0E0E0E0707070707070707070E0E0E1C18383060C080081D7C99 14>I<038003800380638CF39E7FFC3FF80FE00FE03FF87FFCF39E638C0380038003800F 107E9214>I<70F8FCFC7C0C1830E0C0060A798414>44 D<FFFEFFFEFFFE0F037E8C14>I< 70F8F8F8700505798414>I<0006000E000E001C001C003800380070007000E000E001C0 01C0038003800380070007000E000E001C001C003800380070007000E000E000C0000F1D 7E9914>I<07C00FE01C7038383018701C701CE00EE00EE00EE00EE00EE00EE00EE00EE0 0E701C701C383838381C700FE007C00F177E9614>I<0300030007000F003F00F7004700 070007000700070007000700070007000700070007000700070007007FF07FF00C177C96 14>I<0FC01FF03838701CE00EE00EE00E400E000E001C001C00380030007000E001C003 0006000C00180E300E7FFE7FFE0F177E9614>I<0FC01FF03838701C701C201C001C0018 003800700FE00FF00038001C000E000E400EE00EE00E701C78383FF00FC00F177E9614> I<00780000F80001B80001B8000338000338000638000E38000C38001C38003838003038 00703800E03800FFFF80FFFF8000380000380000380000380000380001FF0001FF001117 7F9614>I<7FFC7FFC700070007000700070007000700077C07FF07838601C000C000E00 0E400EE00EE01C601C78783FF00FC00F177E9614>I<01F007F80E1C1C1C381C30007000 7000E000E7C0EFF0F838F01CF00CE00EE00E600E700E700C381C1C380FF007C00F177E96 14>I<E000FFFEFFFEE01CE0380030007000E000C001C001800380038007000700070007 000E000E000E000E000E000E0004000F187E9714>I<0FE03FF8783C701CE00EE00EE00E E00E701C1EF003801FF03838701CE00EE00EE00EE00EF01E701C38381FF007C00F177E96 14>I<07C01FE038307038601CE01CE00CE00EE00E601E701E383E1FEE07CE000E001C00 1C001C7038703070E03FC01F000F177E9614>I<70F8F8F87000000000000070F8F8F870 0510798F14>I<70F8F8F87000000000000060F0F8F878183070E0800515798F14>I<000E 003E007C00F003E007C01F003E00F800F000F8003E001F0007C003E000F0007C003E000E 0F137E9414>I<FFFF80FFFF807FFF800000000000000000007FFF80FFFF80FFFF801109 7F8F14>I<4000E000F8007C001E000F8007C001F000F8003E001E003E00F801F007C00F 801E007C00F800E00040000F157E9514>I<1FE03FF8701CE00EE00E400E003C007000E0 01C003800380038003800300000000000000000003000780078003000F177E9614>I<01 E007F00E38181C38FC71FC731E771EEE0EEE0EEE0EEE0EEE0EEE0EEE0E771C731871F038 E018060E1E07F801F00F177E9614>I<01C00003E00003E0000360000360000770000770 000770000770000630000E38000E38000E38000E38001C1C001FFC001FFC001C1C001C1C 00380E00380E00FE3F80FE3F8011177F9614>I<FFF0FFFC381E380E3807380738073807 380E381E3FFC3FFC381E380E38073807380738073807380E381EFFFCFFF810177F9614> I<01F18007FF800E1F801C0780380780700380700380700380E00000E00000E00000E000 00E00000E00000E000007003807003807003803807001C07000E0E0007FC0001F0001117 7F9614>I<FFE000FFF800383C00381E00380E0038070038070038070038038038038038 0380380380380380380380380380380380380700380700380E00381E00383C00FFF800FF E00011177F9614>I<FFFF00FFFF00380700380700380700380700380000380000383800 3838003FF8003FF800383800383800380000380000380000380380380380380380380380 FFFF80FFFF8011177F9614>I<FFFF80FFFF803803803803803803803803803800003800 003838003838003FF8003FF8003838003838003800003800003800003800003800003800 00380000FF0000FF000011177F9614>I<03C60FFE1C3E181E381E700E700E600EE000E0 00E000E000E07FE07FE00E600E700E700E381E181E1C3E0FFE03CE10177F9614>I<FE3F 80FE3F80380E00380E00380E00380E00380E00380E00380E00380E003FFE003FFE00380E 00380E00380E00380E00380E00380E00380E00380E00380E00FE3F80FE3F8011177F9614 >I<FFF8FFF8070007000700070007000700070007000700070007000700070007000700 0700070007000700FFF8FFF80D177D9614>I<FE3F00FE3F00381C003838003878003870 0038E00039E00039C0003B80003FC0003FE0003EE0003CF0003C7000387800383800381C 00381C00380E00380E00FE1F80FE1F8011177F9614>75 D<FF00FF003800380038003800 380038003800380038003800380038003800380038003807380738073807FFFFFFFF1017 7E9614>I<FC1F80FC1F807C1F0076370076370076370076370077770077770073670073 670073670073E70071C70071C700700700700700700700700700700700700700F80F80F8 0F8011177F9614>I<FE3F80FE3F803E0E003B0E003B0E003B0E003B0E003B8E00398E00 398E0039CE0039CE0039CE0038CE0038CE0038EE00386E00386E00386E00386E00383E00 FE3E00FE3E0011177F9614>I<1FF07FFC783C701CE00EE00EE00EE00EE00EE00EE00EE0 0EE00EE00EE00EE00EE00EE00EE00E701C783C7FFC1FF00F177E9614>I<FFF0FFFC381E 380E38073807380738073807380E381E3FFC3FF038003800380038003800380038003800 FE00FE0010177F9614>I<1FF07FFC783C701CE00EE00EE00EE00EE00EE00EE00EE00EE0 0EE00EE00EE00EE00EE38EE1CE71DC78FC7FFC1FF000780038003C001C001E0F1C7E9614 >I<FFE000FFF800383C00381C00380E00380E00380E00380E00381C00383C003FF8003F F000383800381C00381C00381C00381C00381C00381C80381DC0381DC0FE0F80FE070012 177F9614>I<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE00FF001F8001C001E 000E600EE00EE00EF01CF838FFF0C7E00F177E9614>I<7FFF80FFFF80E1C380E1C380E1 C380E1C38001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001 C00001C00001C00001C00001C0000FF8000FF80011177F9614>I<FE0FE0FE0FE0380380 380380380380380380380380380380380380380380380380380380380380380380380380 3803803803803803801C07001C07000E0E0007FC0001F0001317809614>I<FC1F80FC1F 80380E00380E00380E003C1E001C1C001C1C001C1C001C1C000E38000E38000E38000E38 0006300007700007700007700003600003600003E00003E00001C00011177F9614>I<FC 1F80FC1F8070070070070070070070070070070070070070070031C60033E6003BEE003B 6E003B6E003B6E003B6E003B6E001B6C001B6C001A2C001E3C001E3C001E3C0011177F96 14>I<7E3E007E3E001C3C001E38000E78000F700007700007E00003E00003C00001C000 03C00003E00003E0000770000770000E78000E38001C3C001C1C003C1E00FE3F80FE3F80 11177F9614>I<FC1F80FC1F80380E003C1E001C1C001E3C000E38000E38000770000770 0003600003E00003E00001C00001C00001C00001C00001C00001C00001C00001C00007F0 0007F00011177F9614>I<7FFEFFFEE01CE01CE038E038007000E000E001C001C0038007 0007000E000E001C00380E380E700E700EFFFEFFFE0F177E9614>I<FFE0FFE0E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000 E000E000E000E000E000FFE0FFE00B1D799914>I<C000E000E00070007000380038001C 001C000E000E000700070003800380038001C001C000E000E00070007000380038001C00 1C000E000E00060F1D7E9914>I<FFE0FFE000E000E000E000E000E000E000E000E000E0 00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0FFE0FFE0 0B1D7F9914>I<04001F007FC0F1E0E0E00B057C9614>I<FFFEFFFEFFFE0F037E7E14>I< 0818306060C0C0C0F0F87830050C799914>I<1FC0007FF000707800201800001C00001C 0007FC001FFC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14 >I<FC0000FC00001C00001C00001C00001C00001C00001CF8001DFE001F07001E03001C 03801C01C01C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC000CF80012 17809614>I<03F80FFE1C0E380470006000E000E000E000E00060007000380E1C1E0FFC 03F00F107E8F14>I<007E00007E00000E00000E00000E00000E00000E0007CE000FFE00 1C3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00383E00 1FEFC007CFC012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE000600070 00380E1C1E0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007FFEFFFE0700 07000700070007000700070007000700070007000700FFF8FFF80F177F9614>I<07CF00 1FFF80383B80301800701C00701C00701C003018003838003FF00037C000700000700000 3FF8001FFC003FFE00700F00E00380E00380E00380E003807007003C1E001FFC0007F000 11197F8F14>I<FC0000FC00001C00001C00001C00001C00001C00001C78001DFE001F86 001E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8F E0FF8FE01317809614>I<06000F000F0006000000000000000000FF00FF000700070007 00070007000700070007000700070007000700FFF8FFF80D187C9714>I<FC0000FC0000 1C00001C00001C00001C00001C00001CFF801CFF801C1C001C38001C70001CE0001DC000 1FE0001FE0001E70001C38001C3C001C1C001C0E00FF1F80FF1F801117809614>107 D<FF80FF8003800380038003800380038003800380038003800380038003800380038003 80038003800380FFFEFFFE0F177E9614>I<FB8E00FFDF003CF3803CF38038E38038E380 38E38038E38038E38038E38038E38038E38038E38038E380FEFBE0FE79E01310808F14> I<FC7800FDFE001F86001E07001C07001C07001C07001C07001C07001C07001C07001C07 001C07001C0700FF8FE0FF8FE01310808F14>I<07C01FF03C78701C701CE00EE00EE00E E00EE00EE00E701C783C3C781FF007C00F107E8F14>I<FCF800FDFE001F07001E03001C 03801C01C01C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC001CF8001C 00001C00001C00001C00001C00001C0000FF8000FF80001218808F14>I<03E7000FF700 1C1F00300F00700F00E00700E00700E00700E00700E00700E00700700F00300F001C3F00 0FF70007C700000700000700000700000700000700000700003FE0003FE013187F8F14> I<FE1F00FE7F800EE3800F81000F00000F00000E00000E00000E00000E00000E00000E00 000E00000E0000FFF000FFF00011107F8F14>I<0FD83FF86038C038C038F0007F803FF0 07F8001C6006E006F006F81CFFF8CFE00F107E8F14>I<06000E000E000E000E007FFCFF FC0E000E000E000E000E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F9414>I< FC3F00FC3F001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700 1C07001C1F000FFFE003E7E01310808F14>I<FE3F80FE3F803C1E001C1C001C1C001C1C 000E38000E38000E380006300007700007700007700003E00003E00003E00011107F8F14 >I<FE3F80FE3F80700700380E00380E00380E0039CE0039CE0039CE001B6C001A6C001A 6C001A6C001E7C001E7C000E380011107F8F14>I<7E3F007E3F001E3C000E7800077000 07E00003E00001C00003C00003E0000770000E78000E38001C1C00FE3F80FE3F8011107F 8F14>I<FE3F80FE3F801C0E001C1C001C1C000E1C000E38000E38000738000730000730 0003700003700003E00001E00001E00001C00001C00001C0000380007380007700007E00 003C000011187F8F14>I<3FFF7FFF700E701C7038007000E001C0038007000E001C0738 077007FFFFFFFF10107F8F14>I<003E00FE01E003800380038003800380038003800380 038003807F00FE007F00038003800380038003800380038003800380038001E000FE003E 0F1D7E9914>I<E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0 031D789914>I<7800FE000F00038003800380038003800380038003800380038001FC00 FE01FC03800380038003800380038003800380038003800F00FE0078000F1D7E9914>I< 1C103F38E7E041C00D047D9614>I E /Fh 3 121 df<072018E0306060606060C0C0C0C0 C0C841C862D03C600D0B7E8A11>97 D<71F1F09A1A189C1C189818181818183030303030 30303032303062606064606038170B7E8A1B>109 D<0F381144218C2180018003000300 03084310C73079C00E0B7F8A11>120 D E /Fi 3 77 df<60F0F06004047D830B>58 D<03FF07FE007000E0007000E0007000E000E001C000E001C000E001C000E001C001C003 8001C0038001C0038001C0038003FFFF0003800700038007000380070007000E0007000E 0007000E0007000E000E001C000E001C000E001C000E001C001C003800FFC1FF801F1A7E 9920>72 D<03FF8000700000700000700000E00000E00000E00000E00001C00001C00001 C00001C0000380000380000380000380000700000700040700040700080E00080E00180E 00300E00701C01E0FFFFE0161A7E991A>76 D E /Fj 1 1 df<FFFFC0FFFFC012027D87 1A>0 D E /Fk 8 111 df<40E06020202040408003097D820A>59 D<000100000300000700000780000B80001B800013800023800023800043800083800083 C00101C003FFC00201C00401C00C01C00801C01801E0FE07F815147F9319>65 D<07FFE000E03801C01801C01C01C01C01C01C0380380380700380E003FFC00700E00700 700700300700380E00700E00700E00E00E00E01C0380FFFE0016147F9319>I<07FC7FC0 00E00E0001C01C0001C01C0001C01C0001C01C0003803800038038000380380003FFF800 070070000700700007007000070070000E00E0000E00E0000E00E0000E00E0001C01C000 FF8FF8001A147F931B>72 D<06070600000000384C4C8C98181830323264643808147F93 0C>105 D<003000380030000000000000000001C002600430046008600060006000C000 C000C000C001800180018001806300E300C60078000D1A81930E>I<30F87C00590C8600 4E0D06009C0E0600980C0600180C0600180C060030180C0030180C803018188030181880 6030190060300E00190D7F8C1D>109 D<30F8590C4E0C9C0C980C180C180C3018301930 3130316032601C100D7F8C15>I E /Fl 7 57 df<02040818103020604040C0C0C0C0C0 C0C0C0C0C040406020301018080402071E7D950D>40 D<804020301018080C0404060606 0606060606060604040C08181030204080071E7E950D>I<006000006000006000006000 006000006000006000006000006000006000FFFFF0FFFFF0006000006000006000006000 00600000600000600000600000600000600014167E9119>43 D<0F0030C0606060604020 C030C030C030C030C030C030C030C030C03040206060606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C000C000C000C000C000C000C000C000C000C000C 00FFC00A137D9211>I<1F0060C06060F070F030603000700070006000C001C001800200 04000810101020207FE0FFE00C137E9211>I<0FC0107020186018601870183C303F600F 800FE031F06078C01CC00CC00CC00C601830300FC00E137F9211>56 D E /Fm 38 122 df<FFFE08027D870D>45 D<3078F06005047D830B>I<004000C000C0 03801D8001800180030003000300030006000600060006000C000C000C000C001800FF80 0A157C9412>49 D<00F00308040C0904090611061106220C240C18180030006000C00300 040018002004200C7C18C7F081E00F157D9412>I<00E0031006080C0818081808181830 1830183038103818F00730003000600060E0C0E0808100860078000D157C9412>57 D<000180000180000380000380000780000780000B800013800013800021C00021C00041 C00081C00081C00101C001FFC00201C00201C00401C00801C00801C01801E0FE07F81517 7E961A>65 D<003F0400E0880380580600380C00381C0010380010300010700010600000 E00000E00000E00000C00000C00040C00040C00080E00080E00100600200300400181800 07E00016177A961A>67 D<03FFF000E01800E00C00E00600E00701C00301C00301C00301 C00303800703800703800703800707000E07000E07000C07001C0E00180E00300E00600E 00C01C0380FFFC0018177E961B>I<03FFFE00E00E00E00400E00400E00401C00401C004 01C08001C08003810003830003FF000383000702000702080702080700100E00100E0030 0E00200E00601C01C0FFFFC017177E9618>I<07FE00E000E000E000E001C001C001C001 C0038003800380038007000700070007000E000E000E000E001C00FF800F177E960E>73 D<03F0003F8000F000780000B800780000B800B80000B801380001380170000138027000 01380270000138047000023808E000021C08E000021C10E000021C10E000041C21C00004 1C41C000041C41C000041C81C000081D038000081D038000080E038000080E038000180C 070000FE083FE00021177E9620>77 D<03FFE000E03800E01C00E00C00E00C01C01C01C0 1C01C01C01C0380380700380E003FF800380000700000700000700000700000E00000E00 000E00000E00001C0000FF800016177E9618>80 D<03FFE000E03800E01C00E01C00E01C 01C01C01C01C01C01C01C0380380700381C003FF000381800700C00700E00700E00700E0 0E01C00E01C00E01C20E01C21C00C4FF807817177E961A>82 D<007C4001828003018006 01800601800C01000C01000E00000E00000FC00007F80003FC00007C00000E00000E0000 0600200600400C00400C00600800601000D8600087C00012177D9614>I<1FFFFC38381C 20380860380840380840700880700800700000700000E00000E00000E00000E00001C000 01C00001C00001C0000380000380000380000380000700007FF00016177A961A>I<0390 0C70187030303060606060606060C0C0C0C840C841C862D01C700D0E7C8D12>97 D<7C0018001800180018003000300030003000678068C070406060C060C060C060C06080 C080C08180C10046003C000B177C9610>I<07C00C6030E020E06000C000C000C0008000 8000C020C04061803E000B0E7C8D10>I<003E000C000C000C000C001800180018001803 B00C70187030303060606060606060C0C0C0C840C841C862D01C700F177C9612>I<0780 1840302060206040FF80C000C000C000C000C020C04061803E000B0E7C8D10>I<001C00 36003E006C00600060006000C000C007F800C000C000C001800180018001800180030003 00030003000200060006006600E400C80070000F1D81960B>I<01C4063C0C1C181C1818 301830183018203020302030307011E00E600060006060C0E0C0C3807E000E147E8D10> I<1F0006000600060006000C000C000C000C0019E01A301C101810303030303030303060 60606460C460C8C048C0700E177D9612>I<030706000000000000182C4C4C8C18181830 326264243808177D960B>I<1F0006000600060006000C000C000C000C001838184C189C 191832003C003F00318060C060C860C860C8C0D0C0600E177E9610>107 D<3E0C0C0C0C181818183030303060606060C0C8C8C8D06007177D9609>I<30783C0049 8CC6004E0502004C0602009C0E0600180C0600180C0600180C060030180C0030180C8030 181880301818806030090060300E00190E7D8D1D>I<3078498C4E044C049C0C180C180C 180C30183019303130316012601C100E7D8D14>I<078018C0304060606060C060C060C0 6080C080C08180C10046003C000B0E7B8D12>I<0C3812C4130613062606060606060606 0C0C0C0C0C180C101A2019C018001800300030003000FC000F147F8D12>I<30F04B184E 384C3098001800180018003000300030003000600060000D0E7D8D0F>114 D<07800C4018E018E038001E001F8007C000C060C0E0C0C180C3003E000B0E7D8D0F>I< 060006000C000C000C000C00FF8018001800180030003000300030006000610061006200 6400380009147D930C>I<38042C0C4C0C4C0C8C18181818181818303030323032307218 B40F1C0F0E7D8D13>I<38102C184C184C188C1018101810181030203020304030401880 0F000D0E7D8D10>I<3804104C0C184C0C184C0C188C1810181810181810181810303020 303020303020103040185880078F00150E7D8D18>I<0E3C1346218E218C430003000300 030006000608C608E610CA2071C00F0E7E8D10>I<38042C0C4C0C4C0C8C181818181818 18303030303030307018E00F60006000C0E0C0E18043003C000E147D8D11>I E /Fn 37 123 df<0FFFF81FFFF83FFFF8608400418400810400010400030C00030C0002 0C00060C00060C000E0C000C0C001C0E001C0E00380E0018060015127E9118>25 D<60F0F06004047C830C>58 D<60F0F0701010101020204080040C7C830C>I<00000380 00000F0000003C000000F0000003C000000F0000003C000000F0000003C000000F000000 3C000000F0000000F00000003C0000000F00000003C0000000F00000003C0000000F0000 0003C0000000F00000003C0000000F000000038019187D9520>I<000100030006000600 06000C000C000C0018001800180030003000300060006000C000C000C001800180018003 0003000300060006000C000C000C00180018001800300030003000600060006000C000C0 0010297E9E15>I<E0000000780000001E0000000780000001E0000000780000001E0000 000780000001E0000000780000001E00000007800000078000001E00000078000001E000 00078000001E00000078000001E00000078000001E00000078000000E000000019187D95 20>I<003E0000C3000100C00200C0030060078060078070030030000030000030000030 00FC700382700601700C01701800F03800E03000E07000E07001C0E001C0E001C0E00180 E00380E00300E00600E00600600C003018001860000F8000141F7E9D16>64 D<00000C0000000C0000001C0000001C0000003C0000005C0000005C0000009E0000008E 0000010E0000020E0000020E0000040E0000040E0000080E0000100E0000100E00002007 00003FFF0000400700008007000080070001000700010007000200070004000700040007 001C000780FF803FF01C1D7F9C1F>I<01FFFF00003C01C0003800E0003800F000380070 0038007000700070007000F0007000F0007001E000E003C000E0078000E01F0000FFFC00 01C00F0001C0078001C003C001C003C0038003C0038003C0038003C0038003C007000780 0700070007000E0007001C000E007800FFFFC0001C1C7E9B1F>I<0001F808000E061800 380138006000F001C0007003800070070000300F0000200E0000201C0000203C0000203C 000000780000007800000078000000F0000000F0000000F0000000F0000000F0000100F0 000100F0000100700002007000020030000400380008001C0010000E0060000701800000 FE00001D1E7E9C1E>I<01FE0000FF003E0000F0002E0001E0002E0002E0002E0002E000 2E0004E0004E0009C0004E0009C000470011C000470011C0008700238000870043800087 004380008700838001070107000107010700010382070001038207000203840E00020388 0E000203880E000203900E000403A01C000403A01C000401C01C000C01C01C001C01803C 00FF8103FF80281C7E9B28>77 D<01FC00FF80001C001C00002E001800002E001000002E 001000002700100000470020000043002000004380200000438020000081C040000081C0 40000081C040000080E040000100E0800001007080000100708000010070800002003900 000200390000020039000002001D000004001E000004000E000004000E00000C000E0000 1C00040000FF80040000211C7E9B21>I<01FFFF00003C03C0003800E0003800F0003800 7000380070007000F0007000F0007000F0007000E000E001E000E003C000E0070000E01E 0001FFF00001C0000001C0000001C0000003800000038000000380000003800000070000 000700000007000000070000000F000000FFE000001C1C7E9B1B>80 D<1FFFFFF01C03807030070030200700206007002040070020400E0020800E0020800E00 20000E0000001C0000001C0000001C0000001C0000003800000038000000380000003800 000070000000700000007000000070000000E0000000E0000000E0000000E0000001E000 007FFF00001C1C7F9B18>84 D<FFC00FF01C0003801C0003001C0002001C0002001C0004 001C0008001E0008000E0010000E0030000E0020000E0040000E0040000E0080000E0100 000F0100000702000007040000070400000708000007080000071000000720000003A000 0003C00000038000000380000003000000030000001C1D7D9B18>86 D<01E3000717000C0F00180F00380E00300E00700E00700E00E01C00E01C00E01C00E01C 00E03880E03880E038806078803199001E0E0011127E9116>97 D<3F00070007000E000E 000E000E001C001C001C001C0039E03A303C1838187018701C701C701CE038E038E038E0 30E070E060E0C061C023001E000E1D7E9C12>I<01F0030C0C0C1C1E383C301870007000 E000E000E000E000E000E0046008601030601F800F127E9112>I<0007E00000E00000E0 0001C00001C00001C00001C000038000038000038000038001E7000717000C0F00180F00 380E00300E00700E00700E00E01C00E01C00E01C00E01C00E03880E03880E03880607880 3199001E0E00131D7E9C16>I<01F007080C0818043808300870307FC0E000E000E000E0 00E000E0046008601030600F800E127E9113>I<0038C000C5C00183C00303C007038006 03800E03800E03801C07001C07001C07001C07001C0E001C0E001C0E000C1E00047C0003 9C00001C00001C00003800603800F03000F07000E0C0007F0000121A809114>103 D<0FC00001C00001C0000380000380000380000380000700000700000700000700000E3E 000EC3000F03800E03801E03801C03801C03801C0380380700380700380700380E00700E 20700E20701C20701C40E00C80600700131D7E9C18>I<01C003C003C001800000000000 000000000000001C00270047004700870087000E000E001C001C001C0038003880388070 80710032001C000A1C7E9B0E>I<0007000F000F00060000000000000000000000000078 009C010C020C021C041C001C001C0038003800380038007000700070007000E000E000E0 00E001C061C0F180F300E6007C001024809B11>I<0FC00001C00001C000038000038000 0380000380000700000700000700000700000E07000E08800E11C00E23C01C47801C8300 1D00001E00003FC00038E000387000387000707100707100707100707200E03200601C00 121D7E9C16>I<1F800380038007000700070007000E000E000E000E001C001C001C001C 0038003800380038007000700070007000E200E200E200E40064003800091D7F9C0C>I< 381F81F04E20C6184640E81C4680F01C8F00F01C8E00E01C0E00E01C0E00E01C1C01C038 1C01C0381C01C0381C01C0703803807138038071380380E1380380E27007006430030038 20127E9124>I<3C1F004E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03 801C03801C0700380710380710380E10380E2070064030038014127E9119>I<00F80003 0C000E06001C0300180300300300700380700380E00700E00700E00700E00E00E00E00E0 1C0060180060300030E0000F800011127E9114>I<07878009C86008D03008E03011C030 11C03801C03801C0380380700380700380700380600700E00700C00701800783000E8600 0E78000E00000E00001C00001C00001C00001C00003C0000FF0000151A819115>I<3C3C 4E424687470F8E1E8E0C0E000E001C001C001C001C003800380038003800700030001012 7E9113>114 D<01F0060C0C040C0E180C1C001F000FE00FF003F80038201C7018F018F0 10803060601F800F127E9113>I<00C001C001C001C00380038003800380FFF007000700 07000E000E000E000E001C001C001C001C00382038203840384018800F000C1A80990F> I<1C00C02701C04701C04701C08703808703800E03800E03801C07001C07001C07001C07 00180E20180E20180E201C1E200C264007C38013127E9118>I<07878008C84010F0C020 F1E020E3C040E18000E00000E00001C00001C00001C00001C000638080F38080F38100E5 810084C60078780013127E9118>120 D<1C00C02701C04701C04701C08703808703800E 03800E03801C07001C07001C07001C0700180E00180E00180E001C1E000C3C0007DC0000 1C00001800603800F03000F06000E0C0004180003E0000121A7E9114>I<038107C10FF6 081C10080010002000400080010002000400080410043C1867F843F081E010127E9113> I E /Fo 21 118 df<70F8F8F87005057D840B>46 D<07F0001C1C00380E00780F007007 00700700F00780F00780F00780F00780F00780F00780F00780F00780F007807007007007 00780F00380E001C1C0007F00011157F9414>48 D<01800780FF80FF8007800780078007 8007800780078007800780078007800780078007800780FFF8FFF80D157D9414>I<0FC0 3FF870FCF83CF83EF81E701E003E003C0038007000E001C0038006060C06180E3FFC7FFC FFFCFFFC0F157E9414>I<0FC01FF03078787C783C783C107C007800E00FE00078003C00 3C003E703EF83EF83EF83C70783FF00FC00F157E9414>I<000C00001C00003C00007C00 00FC0001BC00033C00063C000C3C00183C00303C00603C00C03C00FFFF80FFFF80003C00 003C00003C00003C0003FF8003FF8011157F9414>I<700C7FF87FF07FE07F8060006000 600067E07870603C003C003E003E703EF03EF03EE03C70783FF00FC00F157E9414>I<03 F00FF81E1C383C383C70187000F000F3E0F438F81CF01CF01EF01EF01E701E701E781C3C 381FF007E00F157E9414>I<60007FFF7FFF7FFE7FFCE018C030C030006000C001C00180 03800780070007000F000F000F000F000F00060010167E9514>I<07E01FF03838701C70 1C781C7E1C7FB83FE01FF00FF83BFC70FEE07EE01EE00EE00EF00C781C3FF00FE00F157E 9414>I<0FC01FF03838703CF01CF01CF01EF01EF01E701E703E385E0F9E001E001C301C 783C783870F03FE01F800F157E9414>I<FFFFF0FFFFF01F00F01F00701F00381F00181F 06181F06181F06001F0E001FFE001FFE001F0E001F06001F06001F06001F00001F00001F 00001F00001F0000FFF000FFF00015177E961A>70 D<7FFFFF007FFFFF00783E0F00603E 0300E03E0380C03E0180C03E0180C03E0180003E0000003E0000003E0000003E0000003E 0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E000007FF F00007FFF00019177F961C>84 D<0FE0003838003C1C003C1E00181E00001E0000FE000F 9E003C1E00781E00F01E00F01E00F01E00786FC01F87C0120F7F8E14>97 D<FC0000FC00003C00003C00003C00003C00003C00003C00003DFC003F0F003C03803C03 C03C01C03C01E03C01E03C01E03C01E03C01E03C01C03C03C03C03803B0F0031F8001317 7E9617>I<07F01C18380C78067007F007F007FFFFF000F0007000780038031E0603FC10 0F7F8E13>101 D<0FE700183B80301B80701C00701C00701C00701C003018001830002F E0002000003000003FF8003FFE003FFF00700780E00380E00380E00380700700380E000F F80011167F8E14>103 D<387C7C7C3800000000FCFC3C3C3C3C3C3C3C3C3C3C3CFFFF08 187F970B>105 D<FCFC3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3CFFFF08177F960B> 108 D<F870F99C3A3C3A3C3C183C003C003C003C003C003C003C003C00FF80FF800E0F7F 8E11>114 D<FC3F00FC3F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F00 3C0F003C0F003C1F001C2FC00FCFC0120F7E8E17>117 D E /Fp 11 67 df<000000003E000000000000007F00000000000001FF00000000000007FF0000 000000000FFF0000000000007FFF000000000001FFFF00000000001FFFFF0000000001FF FFFF00000007FFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF0000 00FFFFFFFFFF000000FFFFE3FFFF000000FFFE03FFFF000000F80003FFFF000000000003 FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF0000 00000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003 FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF0000 00000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003 FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF0000 00000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003 FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF0000 00000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003 FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF0000 00000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003 FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF0000 00000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003 FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF0000 00000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003 FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF0000 00000003FFFF000000000003FFFF000000000003FFFF000000000003FFFF000000000003 FFFF0000007FFFFFFFFFFFFFF07FFFFFFFFFFFFFF07FFFFFFFFFFFFFF07FFFFFFFFFFFFF F07FFFFFFFFFFFFFF07FFFFFFFFFFFFFF07FFFFFFFFFFFFFF03C6173E056>49 D<0000007FFF0000000000000FFFFFFC0000000000FFFFFFFF8000000003FFFFFFFFF000 00000FFFFFFFFFFC0000003FFFFFFFFFFF0000007FFFFFFFFFFF800001FFFE007FFFFFE0 0003FFE0000FFFFFF00007FF800003FFFFF8000FFE000000FFFFFC001FFE0000003FFFFE 001FFF8000001FFFFF003FFFC000000FFFFF803FFFE000000FFFFF807FFFF0000007FFFF C07FFFF8000003FFFFC0FFFFF8000003FFFFE0FFFFFC000001FFFFE0FFFFFC000001FFFF F0FFFFFC000001FFFFF0FFFFFC000000FFFFF0FFFFFC000000FFFFF8FFFFFC000000FFFF F8FFFFFC000000FFFFF8FFFFFC000000FFFFF87FFFF8000000FFFFF87FFFF8000000FFFF F83FFFF0000000FFFFF81FFFE0000000FFFFF80FFFC0000000FFFFF807FF80000000FFFF F801FE00000000FFFFF8000000000000FFFFF0000000000001FFFFF0000000000001FFFF F0000000000001FFFFE0000000000001FFFFE0000000000003FFFFC0000000000003FFFF C0000000000007FFFF80000000000007FFFF8000000000000FFFFF0000000000000FFFFE 0000000000001FFFFC0000000000001FFFF80000000000003FFFF00000000000003FFFE0 0000000000007FFFC0000000000000FFFF80000000000001FFFF00000000000001FFFE00 000000000003FFFC00000000000007FFF00000000000000FFFE00000000000001FFFC000 00000000001FFF000000000000003FFE000000000000007FF800000000000000FFF00000 0000000001FFE000000000000003FF8000000000000007FF000000000000000FFE000003 F80000001FF8000003F80000003FF0000003F80000007FE0000007F0000000FFC0000007 F0000001FF00000007F0000003FE00000007F0000007FC00000007F000000FF80000000F F000001FE00000000FF000003FC00000000FE000007F800000000FE00000FF000000001F E00001FC000000001FE00003F800000000FFE00007FFFFFFFFFFFFE0000FFFFFFFFFFFFF E0001FFFFFFFFFFFFFC0003FFFFFFFFFFFFFC0007FFFFFFFFFFFFFC000FFFFFFFFFFFFFF C001FFFFFFFFFFFFFFC003FFFFFFFFFFFFFFC007FFFFFFFFFFFFFFC00FFFFFFFFFFFFFFF 801FFFFFFFFFFFFFFF803FFFFFFFFFFFFFFF807FFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF 80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFF00456178E056>I<0000001FFFC0000000000003FFFFFE00000000 001FFFFFFFE0000000007FFFFFFFF800000001FFFFFFFFFE00000003FFFFFFFFFF800000 07FFF007FFFFC000000FFF0000FFFFE000001FF800003FFFF000003FE000001FFFF80000 7FC000001FFFFC0000FFF000000FFFFE0001FFFC00000FFFFF0001FFFE000007FFFF0003 FFFF000007FFFF8003FFFF000007FFFF8003FFFF800007FFFFC007FFFFC00007FFFFC007 FFFFC00007FFFFC007FFFFC00007FFFFC007FFFFC00007FFFFC007FFFFC00007FFFFC007 FFFFC00007FFFFC007FFFFC00007FFFFC007FFFFC00007FFFFC003FFFF800007FFFFC003 FFFF800007FFFF8001FFFF000007FFFF8000FFFE00000FFFFF80007FFC00000FFFFF0000 1FF000000FFFFF0000038000000FFFFE0000000000001FFFFC0000000000001FFFFC0000 000000003FFFF80000000000003FFFF00000000000007FFFE0000000000000FFFFC00000 00000000FFFF80000000000003FFFE00000000000007FFFC0000000000001FFFF0000000 000003FFFFE00000000003FFFFFF000000000007FFFFFC000000000007FFFFFF00000000 0007FFFFFFE00000000003FFFFFFFC00000000000007FFFF00000000000000FFFFC00000 000000003FFFF00000000000001FFFF80000000000000FFFFC00000000000007FFFE0000 0000000007FFFF00000000000003FFFF80000000000003FFFFC0000000000001FFFFE000 0000000001FFFFF0000000000001FFFFF0000000000001FFFFF8000000000001FFFFF800 0000000000FFFFFC000000000000FFFFFC003800000000FFFFFC03FF80000000FFFFFE07 FFC0000000FFFFFE0FFFE0000000FFFFFE1FFFF0000000FFFFFE3FFFF8000000FFFFFE7F FFFC000000FFFFFE7FFFFC000000FFFFFEFFFFFE000000FFFFFEFFFFFE000000FFFFFEFF FFFE000000FFFFFEFFFFFE000000FFFFFCFFFFFE000000FFFFFCFFFFFE000000FFFFFCFF FFFE000001FFFFFCFFFFFE000001FFFFF87FFFFC000001FFFFF87FFFFC000001FFFFF07F FFF8000001FFFFF03FFFF0000003FFFFE03FFFE0000003FFFFC01FFFC0000007FFFF800F FF00000007FFFF800FFE0000000FFFFF0007FF8000001FFFFE0003FFE000003FFFFC0000 FFFC0000FFFFF000007FFFE007FFFFE000003FFFFFFFFFFF8000000FFFFFFFFFFF000000 03FFFFFFFFF8000000007FFFFFFFE0000000000FFFFFFE0000000000007FFFC000000047 6279E056>I<00000000000007F000000000000000000FF800000000000000000FF80000 0000000000001FF800000000000000003FF800000000000000007FF80000000000000000 FFF80000000000000001FFF80000000000000001FFF80000000000000003FFF800000000 00000007FFF8000000000000000FFFF8000000000000001FFFF8000000000000001FFFF8 000000000000003FFFF8000000000000007FFFF800000000000000FFFFF8000000000000 01FFFFF800000000000001FFFFF800000000000003FFFFF800000000000007FFFFF80000 000000000FFFFFF80000000000001FEFFFF80000000000003FCFFFF80000000000003F8F FFF80000000000007F0FFFF8000000000000FF0FFFF8000000000001FE0FFFF800000000 0003FC0FFFF8000000000003F80FFFF8000000000007F00FFFF800000000000FE00FFFF8 00000000001FE00FFFF800000000003FC00FFFF800000000003F800FFFF800000000007F 000FFFF80000000000FE000FFFF80000000001FE000FFFF80000000003FC000FFFF80000 000007F8000FFFF80000000007F0000FFFF8000000000FE0000FFFF8000000001FE0000F FFF8000000003FC0000FFFF8000000007F80000FFFF8000000007F00000FFFF800000000 FE00000FFFF800000001FC00000FFFF800000003FC00000FFFF800000007F800000FFFF8 00000007F000000FFFF80000000FE000000FFFF80000001FC000000FFFF80000003FC000 000FFFF80000007F8000000FFFF80000007F0000000FFFF8000000FE0000000FFFF80000 01FC0000000FFFF8000003FC0000000FFFF8000007F80000000FFFF800000FF00000000F FFF800000FE00000000FFFF800001FC00000000FFFF800003F800000000FFFF800007F80 0000000FFFF80000FF000000000FFFF80000FFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFF FFE0FFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFE0FFFFFFFF FFFFFFFFFFE0FFFFFFFFFFFFFFFFFFE000000000003FFFF8000000000000003FFFF80000 00000000003FFFF8000000000000003FFFF8000000000000003FFFF8000000000000003F FFF8000000000000003FFFF8000000000000003FFFF8000000000000003FFFF800000000 0000003FFFF8000000000000003FFFF8000000000000003FFFF8000000000000003FFFF8 000000000000003FFFF8000000000000003FFFF8000000000000003FFFF8000000000000 003FFFF800000000007FFFFFFFFFFFE00000007FFFFFFFFFFFE00000007FFFFFFFFFFFE0 0000007FFFFFFFFFFFE00000007FFFFFFFFFFFE00000007FFFFFFFFFFFE00000007FFFFF FFFFFFE04B617BE056>I<00700000000000380000FC0000000000FC0000FFC00000000F FC0000FFF8000000FFFC0000FFFFE0003FFFF80000FFFFFFFFFFFFF80000FFFFFFFFFFFF F00000FFFFFFFFFFFFE00000FFFFFFFFFFFFC00000FFFFFFFFFFFF800000FFFFFFFFFFFF 000000FFFFFFFFFFFE000000FFFFFFFFFFFC000000FFFFFFFFFFF8000000FFFFFFFFFFF0 000000FFFFFFFFFFE0000000FFFFFFFFFFC0000000FFFFFFFFFF00000000FFFFFFFFFC00 000000FFFFFFFFF000000000FFFFFFFFC000000000FFFFFFFE0000000000FFFFFFF00000 000000FF0070000000000000FF0000000000000000FF0000000000000000FF0000000000 000000FF0000000000000000FF0000000000000000FF0000000000000000FF0000000000 000000FF0000000000000000FF0000000000000000FF0000000000000000FF0000000000 000000FF0000000000000000FF0000000000000000FF000FFFE000000000FF00FFFFFE00 000000FF07FFFFFFC0000000FF3FFFFFFFF0000000FFFFFFFFFFFC000000FFFFF003FFFF 000000FFFF00007FFF800000FFF800001FFFE00000FFE000000FFFF00000FFC0000007FF F80000FF00000007FFFC0000FE00000003FFFE0000FC00000003FFFE00007800000001FF FF00000000000001FFFF80000000000001FFFF80000000000001FFFFC0000000000001FF FFC0000000000000FFFFE0000000000000FFFFE0000000000000FFFFF0000000000000FF FFF0000000000000FFFFF0000000000000FFFFF0000000000000FFFFF8000000000000FF FFF803FE00000000FFFFF80FFF00000000FFFFF81FFF80000000FFFFF83FFFC0000000FF FFF87FFFE0000000FFFFF87FFFF0000000FFFFF8FFFFF0000000FFFFF8FFFFF0000000FF FFF8FFFFF0000000FFFFF8FFFFF0000000FFFFF8FFFFF0000000FFFFF0FFFFF0000000FF FFF0FFFFF0000000FFFFF0FFFFF0000000FFFFF0FFFFE0000001FFFFE07FFFE0000001FF FFE07FFFC0000001FFFFC07FFF80000001FFFFC03FFE00000001FFFF803FF800000003FF FF801FE000000003FFFF001FE000000007FFFE000FF000000007FFFC0007FC0000000FFF F80003FE0000001FFFF00001FF8000003FFFE00000FFE00000FFFFC000007FF80003FFFF 8000003FFF801FFFFF0000001FFFFFFFFFFC00000007FFFFFFFFF000000001FFFFFFFFC0 000000007FFFFFFE00000000000FFFFFF0000000000000FFFE00000000456278E056>I< 0000000007FFE0000000000000FFFFFE000000000007FFFFFF80000000001FFFFFFFE000 000000FFFFFFFFF000000003FFFFFFFFF800000007FFFF007FFC0000001FFFF80007FE00 00003FFFC00001FF0000007FFF000000FF800000FFFE000007FF800003FFF800000FFFC0 0007FFF000001FFFC0000FFFE000003FFFC0000FFFE000007FFFE0001FFFC000007FFFE0 003FFF800000FFFFE0007FFF800000FFFFE000FFFF000000FFFFE000FFFF000000FFFFE0 01FFFE000000FFFFE003FFFE000000FFFFE003FFFE0000007FFFC007FFFC0000007FFFC0 07FFFC0000003FFF800FFFFC0000001FFF000FFFFC0000000FFE000FFFF800000007FC00 1FFFF80000000000001FFFF80000000000001FFFF80000000000003FFFF8000000000000 3FFFF80000000000003FFFF00000000000003FFFF00000000000007FFFF0000C00000000 7FFFF001FFFF0000007FFFF007FFFFE000007FFFF01FFFFFFC00007FFFF03FFFFFFF0000 FFFFF07FFFFFFF8000FFFFF0FE001FFFE000FFFFF1F80007FFF000FFFFF3F00003FFF800 FFFFF3E00001FFFC00FFFFF7C00000FFFE00FFFFFF8000007FFF00FFFFFF8000007FFF80 FFFFFF0000003FFFC0FFFFFF0000003FFFC0FFFFFE0000003FFFE0FFFFFE0000003FFFF0 FFFFFC0000003FFFF0FFFFFC0000001FFFF8FFFFFC0000001FFFF8FFFFF80000001FFFFC FFFFF80000001FFFFCFFFFF80000001FFFFCFFFFF80000001FFFFCFFFFF80000001FFFFE FFFFF00000001FFFFE7FFFF00000001FFFFE7FFFF00000001FFFFE7FFFF00000001FFFFE 7FFFF00000001FFFFE7FFFF00000001FFFFE7FFFF00000001FFFFE7FFFF00000001FFFFE 3FFFF00000001FFFFE3FFFF00000001FFFFE3FFFF00000001FFFFE3FFFF00000001FFFFE 1FFFF80000001FFFFE1FFFF80000001FFFFC1FFFF80000001FFFFC0FFFF80000001FFFFC 0FFFF80000001FFFFC0FFFF80000001FFFF807FFF80000001FFFF807FFF80000003FFFF8 03FFFC0000003FFFF003FFFC0000003FFFF001FFFC0000003FFFE000FFFE0000003FFFC0 00FFFE0000007FFFC0007FFF0000007FFF80003FFF000000FFFF00001FFF800000FFFE00 000FFFC00001FFFC000007FFF00007FFF8000003FFF8001FFFF0000001FFFF00FFFFC000 0000FFFFFFFFFF800000003FFFFFFFFF000000000FFFFFFFFC0000000003FFFFFFF00000 0000007FFFFF80000000000007FFF0000000476279E056>I<03F8000000000000000003 F8000000000000000007FC000000000000000007FF000000000000000007FFFFC0000000 00000007FFFFFFFFFFFFFFFFC007FFFFFFFFFFFFFFFFC007FFFFFFFFFFFFFFFFC00FFFFF FFFFFFFFFFFFC00FFFFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFFF 800FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFE000FFFFFFFFFFFFFFFFC001FFFFFFFFF FFFFFFFC001FFFFFFFFFFFFFFFF8001FFFFFFFFFFFFFFFF0001FFFFFFFFFFFFFFFE0001F FFFFFFFFFFFFFFC0001FFFFFFFFFFFFFFF80001FFFFFFFFFFFFFFF00003FFFFFFFFFFFFF FE00003FFFFFFFFFFFFFFE00003FF8000000000FFC00003FE0000000001FF800003FC000 0000001FF000003FC0000000003FE000003F80000000007FC000007F8000000000FF8000 007F8000000001FF8000007F0000000003FF0000007F0000000007FE0000007F00000000 0FFC0000007F000000000FF80000007F000000001FF0000000FE000000003FE0000000FE 000000007FC0000000FE00000000FFC00000000000000001FF800000000000000001FF00 0000000000000003FE000000000000000007FE00000000000000000FFC00000000000000 000FF800000000000000001FF800000000000000003FF000000000000000003FF0000000 00000000007FE00000000000000000FFE00000000000000000FFE00000000000000001FF C00000000000000001FFC00000000000000003FFC00000000000000007FF800000000000 000007FF80000000000000000FFF80000000000000000FFF80000000000000001FFF0000 0000000000001FFF00000000000000003FFF00000000000000003FFF0000000000000000 7FFF00000000000000007FFE00000000000000007FFE0000000000000000FFFE00000000 00000000FFFE0000000000000001FFFE0000000000000001FFFE0000000000000001FFFE 0000000000000003FFFE0000000000000003FFFE0000000000000003FFFC000000000000 0003FFFC0000000000000007FFFC0000000000000007FFFC0000000000000007FFFC0000 000000000007FFFC000000000000000FFFFC000000000000000FFFFC000000000000000F FFFC000000000000000FFFFC000000000000000FFFFC000000000000000FFFFC00000000 0000001FFFFC000000000000001FFFFC000000000000001FFFFC000000000000001FFFFC 000000000000001FFFFC000000000000001FFFFC000000000000001FFFFC000000000000 001FFFFC000000000000001FFFFC000000000000001FFFFC000000000000001FFFFC0000 00000000001FFFFC000000000000000FFFF8000000000000000FFFF80000000000000007 FFF00000000000000003FFE00000000000000001FFC000000000000000003E0000000000 004A6677E456>I<0000000FFFF0000000000000FFFFFF800000000007FFFFFFF0000000 001FFFFFFFFC000000007FFFFFFFFF00000001FFFFFFFFFFC0000003FFF8007FFFE00000 07FF000007FFF000000FFC000001FFF800001FF00000007FFC00003FC00000003FFE0000 7FC00000001FFE00007F800000000FFF0000FF8000000007FF0001FF0000000007FF8001 FF0000000003FF8001FF0000000003FF8003FF0000000003FFC003FF0000000001FFC003 FF0000000001FFC007FF8000000001FFC007FF8000000001FFC007FFC000000001FFC007 FFE000000001FFC007FFF000000001FFC007FFFC00000001FFC007FFFF00000003FF8007 FFFFC0000003FF8007FFFFE0000003FF8007FFFFF8000007FF0007FFFFFE000007FF0003 FFFFFF80000FFE0003FFFFFFC0001FFE0003FFFFFFF0001FFC0001FFFFFFFC003FF80001 FFFFFFFF007FF00000FFFFFFFF81FFE00000FFFFFFFFE3FFC000007FFFFFFFFFFF000000 3FFFFFFFFFFE0000003FFFFFFFFFF80000001FFFFFFFFFE00000000FFFFFFFFFF0000000 07FFFFFFFFFC00000003FFFFFFFFFF00000001FFFFFFFFFF800000007FFFFFFFFFE00000 003FFFFFFFFFF00000003FFFFFFFFFF8000000FFFFFFFFFFFC000003FFFFFFFFFFFE0000 07FFFFFFFFFFFF00001FFF9FFFFFFFFF80003FFE07FFFFFFFFC0007FFC01FFFFFFFFC000 FFF800FFFFFFFFE001FFE0003FFFFFFFF003FFE0000FFFFFFFF007FFC00003FFFFFFF80F FF800000FFFFFFF81FFF0000007FFFFFFC1FFF0000001FFFFFFC3FFE00000007FFFFFC3F FE00000001FFFFFE7FFE00000000FFFFFE7FFC000000003FFFFE7FFC000000000FFFFEFF FC0000000007FFFEFFF80000000003FFFEFFF80000000001FFFEFFF80000000000FFFEFF F80000000000FFFEFFF800000000007FFEFFF800000000007FFEFFF800000000003FFEFF F800000000003FFCFFF800000000003FFCFFFC00000000003FFC7FFC00000000003FF87F FC00000000003FF87FFC00000000003FF87FFE00000000007FF03FFE00000000007FF03F FF0000000000FFE01FFF8000000000FFC00FFF8000000001FFC00FFFC000000003FF8007 FFF000000007FF0003FFF80000000FFE0001FFFE0000007FFC0000FFFFC00001FFF80000 3FFFFC003FFFE000001FFFFFFFFFFFC0000007FFFFFFFFFF00000001FFFFFFFFFC000000 003FFFFFFFF00000000007FFFFFF0000000000001FFFE0000000476279E056>I<000000 0FFFE0000000000001FFFFFE00000000000FFFFFFFC0000000003FFFFFFFF000000000FF FFFFFFFC00000003FFFFFFFFFE00000007FFFE00FFFF0000000FFFF0003FFFC000003FFF C0000FFFE000007FFF800007FFF00000FFFF000003FFF80001FFFE000001FFF80003FFFC 000000FFFC0007FFFC000000FFFE0007FFFC0000007FFF000FFFF80000007FFF001FFFF8 0000007FFF801FFFF80000003FFF803FFFF80000003FFFC03FFFF00000003FFFC03FFFF0 0000003FFFE07FFFF00000003FFFE07FFFF00000003FFFE07FFFF00000003FFFF07FFFF0 0000003FFFF0FFFFF00000001FFFF0FFFFF00000001FFFF8FFFFF00000001FFFF8FFFFF0 0000001FFFF8FFFFF00000001FFFF8FFFFF00000001FFFFCFFFFF00000001FFFFCFFFFF0 0000001FFFFCFFFFF00000001FFFFCFFFFF00000001FFFFCFFFFF00000001FFFFCFFFFF0 0000001FFFFCFFFFF00000001FFFFEFFFFF00000003FFFFE7FFFF00000003FFFFE7FFFF0 0000003FFFFE7FFFF00000003FFFFE7FFFF00000003FFFFE3FFFF00000007FFFFE3FFFF0 0000007FFFFE1FFFF80000007FFFFE1FFFF8000000FFFFFE0FFFF8000000FFFFFE07FFF8 000001FFFFFE07FFF8000001FFFFFE03FFFC000003FFFFFE01FFFC000003FFFFFE00FFFE 000007DFFFFE007FFF00000F9FFFFE003FFF80001F9FFFFE001FFFC0003F1FFFFE000FFF F000FE1FFFFE0003FFFFFFFC1FFFFE0001FFFFFFF81FFFFC00007FFFFFF01FFFFC00000F FFFFC01FFFFC000001FFFF001FFFFC0000000060001FFFFC0000000000001FFFFC000000 0000001FFFF80000000000003FFFF80000000000003FFFF80000000000003FFFF8000000 0000003FFFF00000000000003FFFF0007FC00000003FFFF000FFE00000003FFFE001FFF0 0000003FFFE003FFF80000007FFFC007FFFC0000007FFFC007FFFC0000007FFF800FFFFE 0000007FFF800FFFFE000000FFFF000FFFFE000000FFFF000FFFFE000001FFFE000FFFFE 000001FFFC000FFFFE000003FFFC000FFFFC000003FFF8000FFFFC000007FFF00007FFF8 000007FFE00007FFF000000FFFC00007FFE000001FFF800003FFC000007FFF000001FE00 0000FFFE000001FF800003FFFC000000FFE0000FFFF80000007FFE007FFFE00000003FFF FFFFFFC00000001FFFFFFFFF0000000007FFFFFFFC0000000001FFFFFFE000000000007F FFFF00000000000007FFE000000000476279E056>I<00000000000001FC000000000000 0000000000000003FE0000000000000000000000000007FF000000000000000000000000 0007FF000000000000000000000000000FFF800000000000000000000000000FFF800000 000000000000000000000FFF800000000000000000000000001FFFC00000000000000000 000000001FFFC00000000000000000000000003FFFE00000000000000000000000003FFF E00000000000000000000000007FFFF00000000000000000000000007FFFF00000000000 000000000000007FFFF0000000000000000000000000FFFFF80000000000000000000000 00FFFFF8000000000000000000000001FFFFFC000000000000000000000001FFFFFC0000 00000000000000000001FFFFFC000000000000000000000003FFFFFE0000000000000000 00000003FFFFFE000000000000000000000007FFFFFF000000000000000000000007FFFF FF000000000000000000000007FFFFFF00000000000000000000000FFFFFFF8000000000 0000000000000FFFFFFF80000000000000000000001FFFFFFFC000000000000000000000 1FFFFFFFC0000000000000000000003FE7FFFFC0000000000000000000003FE7FFFFE000 0000000000000000003FC3FFFFE0000000000000000000007FC3FFFFF000000000000000 0000007FC3FFFFF000000000000000000000FF81FFFFF800000000000000000000FF81FF FFF800000000000000000000FF00FFFFF800000000000000000001FF00FFFFFC00000000 000000000001FE00FFFFFC00000000000000000003FE007FFFFE00000000000000000003 FE007FFFFE00000000000000000003FC003FFFFE00000000000000000007FC003FFFFF00 000000000000000007F8003FFFFF0000000000000000000FF8001FFFFF80000000000000 00000FF8001FFFFF8000000000000000000FF0000FFFFF8000000000000000001FF0000F FFFFC000000000000000001FE0000FFFFFC000000000000000003FE00007FFFFE0000000 00000000003FE00007FFFFE000000000000000007FC00003FFFFF000000000000000007F C00003FFFFF000000000000000007F800001FFFFF00000000000000000FF800001FFFFF8 0000000000000000FF000001FFFFF80000000000000001FF000000FFFFFC000000000000 0001FF000000FFFFFC0000000000000001FE0000007FFFFC0000000000000003FE000000 7FFFFE0000000000000003FC0000007FFFFE0000000000000007FC0000003FFFFF000000 0000000007FC0000003FFFFF0000000000000007F80000001FFFFF000000000000000FF8 0000001FFFFF800000000000000FF00000001FFFFF800000000000001FF00000000FFFFF C00000000000001FF00000000FFFFFC00000000000001FE000000007FFFFC00000000000 003FFFFFFFFFFFFFFFE00000000000003FFFFFFFFFFFFFFFE00000000000007FFFFFFFFF FFFFFFF00000000000007FFFFFFFFFFFFFFFF0000000000000FFFFFFFFFFFFFFFFF80000 00000000FFFFFFFFFFFFFFFFF8000000000000FFFFFFFFFFFFFFFFF8000000000001FF00 00000000FFFFFC000000000001FE0000000000FFFFFC000000000003FE00000000007FFF FE000000000003FE00000000007FFFFE000000000003FC00000000003FFFFE0000000000 07FC00000000003FFFFF000000000007F800000000003FFFFF00000000000FF800000000 001FFFFF80000000000FF800000000001FFFFF80000000000FF000000000000FFFFF8000 0000001FF000000000000FFFFFC0000000001FE000000000000FFFFFC0000000003FE000 0000000007FFFFE0000000003FE0000000000007FFFFE0000000003FC0000000000003FF FFE0000000007FC0000000000003FFFFF0000000007F80000000000001FFFFF000000000 FF80000000000001FFFFF800000000FF80000000000001FFFFF800000001FF0000000000 0000FFFFFC00000001FF00000000000000FFFFFC0000000FFFF00000000000007FFFFC00 00FFFFFFFFF80000001FFFFFFFFFFFF8FFFFFFFFF80000001FFFFFFFFFFFF8FFFFFFFFF8 0000001FFFFFFFFFFFF8FFFFFFFFF80000001FFFFFFFFFFFF8FFFFFFFFF80000001FFFFF FFFFFFF8FFFFFFFFF80000001FFFFFFFFFFFF8FFFFFFFFF80000001FFFFFFFFFFFF87568 7AE782>65 D<FFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFC00000000FFFF FFFFFFFFFFFFFFFF80000000FFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFFFFFFFFFFFF FC000000FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFC000000000FFFF E00000001FFFFFE000000000FFFFE000000003FFFFF800000000FFFFE000000000FFFFFC 00000000FFFFE0000000007FFFFE00000000FFFFE0000000001FFFFF00000000FFFFE000 0000001FFFFF00000000FFFFE0000000000FFFFF80000000FFFFE00000000007FFFFC000 0000FFFFE00000000007FFFFC0000000FFFFE00000000003FFFFE0000000FFFFE0000000 0003FFFFE0000000FFFFE00000000001FFFFF0000000FFFFE00000000001FFFFF0000000 FFFFE00000000001FFFFF0000000FFFFE00000000001FFFFF8000000FFFFE00000000001 FFFFF8000000FFFFE00000000000FFFFF8000000FFFFE00000000000FFFFF8000000FFFF E00000000000FFFFF8000000FFFFE00000000000FFFFF8000000FFFFE00000000000FFFF F8000000FFFFE00000000000FFFFF8000000FFFFE00000000001FFFFF8000000FFFFE000 00000001FFFFF0000000FFFFE00000000001FFFFF0000000FFFFE00000000001FFFFF000 0000FFFFE00000000001FFFFF0000000FFFFE00000000003FFFFE0000000FFFFE0000000 0003FFFFE0000000FFFFE00000000007FFFFC0000000FFFFE00000000007FFFF80000000 FFFFE0000000000FFFFF80000000FFFFE0000000001FFFFF00000000FFFFE0000000001F FFFE00000000FFFFE0000000003FFFFC00000000FFFFE000000000FFFFF800000000FFFF E000000001FFFFE000000000FFFFE000000007FFFFC000000000FFFFE00000001FFFFF00 00000000FFFFE0000001FFFFFC0000000000FFFFFFFFFFFFFFFFE00000000000FFFFFFFF FFFFFFFF000000000000FFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFF8000000 0000FFFFFFFFFFFFFFFFFF0000000000FFFFE000000003FFFFC000000000FFFFE0000000 007FFFF000000000FFFFE0000000001FFFFC00000000FFFFE0000000000FFFFE00000000 FFFFE00000000007FFFF80000000FFFFE00000000003FFFFC0000000FFFFE00000000001 FFFFE0000000FFFFE00000000000FFFFF0000000FFFFE00000000000FFFFF8000000FFFF E000000000007FFFFC000000FFFFE000000000007FFFFC000000FFFFE000000000003FFF FE000000FFFFE000000000003FFFFE000000FFFFE000000000001FFFFF000000FFFFE000 000000001FFFFF000000FFFFE000000000001FFFFF800000FFFFE000000000001FFFFF80 0000FFFFE000000000001FFFFF800000FFFFE000000000000FFFFFC00000FFFFE0000000 00000FFFFFC00000FFFFE000000000000FFFFFC00000FFFFE000000000000FFFFFC00000 FFFFE000000000000FFFFFC00000FFFFE000000000000FFFFFC00000FFFFE00000000000 0FFFFFC00000FFFFE000000000000FFFFFC00000FFFFE000000000000FFFFFC00000FFFF E000000000001FFFFFC00000FFFFE000000000001FFFFF800000FFFFE000000000001FFF FF800000FFFFE000000000001FFFFF800000FFFFE000000000003FFFFF000000FFFFE000 000000003FFFFF000000FFFFE000000000003FFFFF000000FFFFE000000000007FFFFE00 0000FFFFE00000000000FFFFFE000000FFFFE00000000000FFFFFC000000FFFFE0000000 0001FFFFF8000000FFFFE00000000003FFFFF8000000FFFFE00000000007FFFFF0000000 FFFFE0000000001FFFFFE0000000FFFFE0000000003FFFFFC0000000FFFFE000000000FF FFFF80000000FFFFE00000000FFFFFFE0000FFFFFFFFFFFFFFFFFFFFFFFC0000FFFFFFFF FFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFFFFFFFFC00000FFFFFFFFFFFFFFFFFFFFFF00 0000FFFFFFFFFFFFFFFFFFFFF8000000FFFFFFFFFFFFFFFFFFFFC0000000FFFFFFFFFFFF FFFFFFF0000000006A677AE67A>I E /Fq 24 122 df<70F8F8F8700000000000000000 00000070F8F8F87005157C940E>58 D<FFFC001F80000F00000F00000F00000F00000F00 000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00 000F00000F00000F00000F00010F00010F00010F00010F00030F00030F00020F00060F00 060F001E1F007EFFFFFE18227DA11E>76 D<FFC00003FF0FC00003F007C00003E005E000 05E005E00005E004F00009E004F00009E004F00009E004780011E004780011E004780011 E0043C0021E0043C0021E0043C0021E0041E0041E0041E0041E0040F0081E0040F0081E0 040F0081E004078101E004078101E004078101E00403C201E00403C201E00401E401E004 01E401E00401E401E00400F801E00400F801E00400F801E004007001E00E007001E01F00 7003F0FFE0203FFF28227EA12D>I<FFFFF0000F803C0007800F0007800780078007C007 8003C0078003E0078003E0078003E0078003E0078003E0078003E0078003C0078007C007 80078007800F0007803C0007FFF000078000000780000007800000078000000780000007 80000007800000078000000780000007800000078000000780000007800000078000000F C00000FFFC00001B227EA121>80 D<FFF0007FC01F80001F000F00000C000F80000C0007 80000800078000080003C000100003C000100003C000100001E000200001E000200001F0 00600000F000400000F000400000780080000078008000007C008000003C010000003C01 0000001E020000001E020000001E020000000F040000000F040000000F8C000000078800 0000078800000003D000000003D000000003F000000001E000000001E000000000C00000 0000C000000000C0000022237FA125>86 D<1FE000303800780C00780E00300700000700 00070000070000FF0007C7001E07003C0700780700700700F00708F00708F00708F00F08 7817083C23900FC1E015157E9418>97 D<01FE000703000C07801C078038030078000070 0000F00000F00000F00000F00000F00000F00000F000007000007800403800401C00800C 010007060001F80012157E9416>99 D<0000E0000FE00001E00000E00000E00000E00000 E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E01C01E03800 E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03800 E01801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C03801C01C03801C078 01E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C 00400E008007030000FC0013157F9416>I<003E0000E30001C780038780030780070000 070000070000070000070000070000070000070000070000FFF800070000070000070000 070000070000070000070000070000070000070000070000070000070000070000070000 0700000700000700000780007FF000112380A20F>I<00007003F1980E1E181C0E183807 003807007807807807807807807807803807003807001C0E001E1C0033F0002000002000 003000003800003FFE001FFFC00FFFE03000F0600030C00018C00018C00018C000186000 306000303800E00E038003FE0015217F9518>I<0E0000FE00001E00000E00000E00000E 00000E00000E00000E00000E00000E00000E00000E00000E00000E1F800E60C00E80E00F 00700F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E 00700E00700E00700E00700E0070FFE7FF18237FA21B>I<1C003E003E003E001C000000 00000000000000000000000000000E007E001E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E00FFC00A227FA10E>I<0E0000FE00001E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E03FC 0E01F00E01C00E01800E02000E04000E08000E10000E38000EF8000F1C000E1E000E0E00 0E07000E07800E03C00E01C00E01E00E00F00E00F8FFE3FE17237FA21A>107 D<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B 237FA20E>I<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E003800E0 0E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E 003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E0FFE3 FF8FFE27157F942A>I<0E1F80FE60C01E80E00F00700F00700E00700E00700E00700E00 700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070FFE7 FF18157F941B>I<01FC000707000C01801800C03800E0700070700070F00078F00078F0 0078F00078F00078F00078F000787000707800F03800E01C01C00E038007070001FC0015 157F9418>I<0E1F00FE61C00E80600F00700E00380E003C0E003C0E001E0E001E0E001E 0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80E00E41C00E3F000E0000 0E00000E00000E00000E00000E00000E00000E00000E0000FFE000171F7F941B>I<0E3C FE461E8F0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E000E00 0F00FFF010157F9413>114 D<0F8830786018C018C008C008E008F0007F003FE00FF001 F8003C801C800C800CC00CC008E018D0308FC00E157E9413>I<02000200020002000600 060006000E001E003E00FFFC0E000E000E000E000E000E000E000E000E000E000E000E04 0E040E040E040E040E040708030801F00E1F7F9E13>I<0E0070FE07F01E00F00E00700E 00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E 00F00E00F006017003827800FC7F18157F941B>I<FF80FE1E00781E00300E00200E0020 0700400700400780C003808003808001C10001C10000E20000E20000E200007400007400 003800003800003800001000001000002000002000002000004000F04000F08000F18000 4300003C0000171F7F941A>121 D E /Fr 69 124 df<003FE3F801F03F1C03C03E3E07 C07C3E0F807C3E0F807C1C0F807C000F807C000F807C000F807C000F807C00FFFFFFC0FF FFFFC00F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F 807C000F807C000F807C000F807C000F807C000F807C007FE1FF807FE1FF801F1D809C1C >11 D<003FC00001F0300003C0380007C07C000F807C000F807C000F8038000F8000000F 8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F807C000F 807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F 807C007FE1FF807FE1FF80191D809C1B>I<003FC1FE0001F03F818003C03E01C007C07E 03E00F807C03E00F807C03E00F807C01C00F807C00000F807C00000F807C00000F807C00 00FFFFFFFFE0FFFFFFFFE00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E0 0F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F 807C03E00F807C03E07FE1FF0FFC7FE1FF0FFC261D809C28>14 D<78FCFCFEFE7A020204 0408081060070E7D9C0D>39 D<FFF8FFF8FFF8FFF80D04808A10>45 D<78FCFCFCFC7806067D850D>I<000180000380000380000700000700000700000E0000 0E00001C00001C00001C0000380000380000380000700000700000E00000E00000E00001 C00001C00001C0000380000380000380000700000700000E00000E00000E00001C00001C 00001C0000380000380000700000700000700000E00000E00000C0000011297D9E18>I< 03F8000F1E001C07003C07803803807803C07803C07803C0F803E0F803E0F803E0F803E0 F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E07803C07803C03803803C0780 1C07000F1E0003F800131B7E9A18>I<00600001E0000FE000FFE000F3E00003E00003E0 0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0 0003E00003E00003E00003E00003E00003E0007FFF807FFF80111B7D9A18>I<07F8001F FE00383F80780FC0FC07C0FC07E0FC03E0FC03E07803E00007E00007C00007C0000F8000 1F00001E0000380000700000E0000180600300600600600800E01FFFC03FFFC07FFFC0FF FFC0FFFFC0131B7E9A18>I<07F8001FFE003C1F003C0F807C07C07E07C07C07C03807C0 000F80000F80001E00003C0003F800001E00000F800007C00007C00007E03007E07807E0 FC07E0FC07E0FC07C0780F80781F001FFE0007F800131B7E9A18>I<0001800003800007 80000F80001F80003F80006F8000CF80008F80018F80030F80060F800C0F80180F80300F 80600F80C00F80FFFFF8FFFFF8000F80000F80000F80000F80000F80000F8000FFF800FF F8151B7F9A18>I<3801803FFF003FFE003FFC003FF8003FC00030000030000030000030 000031F800361E00380F803007800007C00007E00007E00007E07807E0F807E0F807E0F8 07C0F007C0600F80381F001FFE0007F000131B7E9A18>I<007E0003FF000781800F03C0 1E07C03C07C07C0380780000780000F80000F8F800FB0E00FA0780FC0380FC03C0F803E0 F803E0F803E0F803E07803E07803E07803C03C03C03C07801E0F0007FE0003F800131B7E 9A18>I<6000007FFFE07FFFE07FFFC07FFF807FFF80E00300C00600C00C00C018000030 0000300000600000E00000E00001E00001C00003C00003C00003C00003C00007C00007C0 0007C00007C00007C00007C000038000131C7D9B18>I<03F8000FFE001E0F8038078038 03C07803C07C03C07E03C07F83803FC7003FFE001FFC000FFE0007FF001DFF80387FC078 1FE0700FE0F003E0F001E0F001E0F001E07801C07803803E07801FFE0003F800131B7E9A 18>I<03F8000FFE001E0F003C07807807807803C0F803C0F803C0F803E0F803E0F803E0 F803E07807E03807E03C0BE00E1BE003E3E00003E00003C00003C03807C07C07807C0700 780F00383C001FF8000FE000131B7E9A18>I<78FCFCFCFC7800000000000078FCFCFCFC 7806127D910D>I<FFFFFFFCFFFFFFFC7FFFFFFC00000000000000000000000000000000 0000000000000000000000007FFFFFFCFFFFFFFCFFFFFFFC1E0D7D9025>61 D<0FF0303C601EF01FF81FF81F701F003E003C007000E001C00180018003000300030003 000300000000000000000007800FC00FC00FC00FC00780101D7D9C17>63 D<001FE00000E01C0003000300060001800C0000C018000060300FC0302038601060F010 1860F01F18C1E01F0CC1E01F0CC3E01F0CC3E01F0CC3E01F0CC3E01F0CC3E01F0CC1E01F 0CC1E01F0C60F01F0860F01F1820386F10300FC7E0180000000C00000006000000030000 3C00E007F0001FFC001E1D7D9C25>I<00038000000380000007C0000007C0000007C000 000FE000000FE000001FF000001BF000003BF8000031F8000031F8000060FC000060FC00 00E0FE0000C07E0000C07E0001803F0001FFFF0003FFFF8003001F8007001FC006000FC0 06000FC00C0007E00C0007E0FF803FFEFF803FFE1F1C7E9B24>I<FFFFF800FFFFFF000F C01F800FC00FC00FC007C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007C00F C00F800FC03F000FFFFE000FC00F800FC007C00FC003E00FC003E00FC003F00FC003F00F C003F00FC003F00FC003F00FC007E00FC007E00FC01FC0FFFFFF00FFFFFC001C1C7E9B22 >I<001FE02000FFF8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E00 00607C000060FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00 00007C0000607E0000603E0000603E0000C01F0000C00F80018007C0030003F80E0000FF FC00001FE0001B1C7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00FC001 F80FC000F80FC000FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC000 7E0FC0007E0FC0007E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001 F00FC007E00FC01FC0FFFFFF00FFFFF8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F00 0FC007000FC003000FC003800FC003800FC0C1800FC0C1800FC0C1800FC1C0000FC3C000 0FFFC0000FFFC0000FC3C0000FC1C0000FC0C0000FC0C0600FC0C0600FC000E00FC000C0 0FC000C00FC001C00FC001C00FC003C00FC00F80FFFFFF80FFFFFF801B1C7E9B1F>I<FF FFFF00FFFFFF000FC01F000FC007000FC003000FC003800FC003800FC001800FC0C1800F C0C1800FC0C0000FC1C0000FC3C0000FFFC0000FFFC0000FC3C0000FC1C0000FC0C0000F C0C0000FC0C0000FC000000FC000000FC000000FC000000FC000000FC00000FFFE0000FF FE0000191C7E9B1E>I<000FF008007FFE3801FC07F807E001F80F8000781F0000783F00 00383E0000387E0000187C000018FC000000FC000000FC000000FC000000FC000000FC00 0000FC007FFFFC007FFF7C0001F87E0001F83E0001F83F0001F81F0001F80F8001F807E0 01F801FC07F8007FFE78000FF818201C7D9B26>I<FFFC3FFFFFFC3FFF0FC003F00FC003 F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FFFFF F00FFFFFF00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003 F00FC003F00FC003F00FC003F00FC003F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFCFFFC 0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0 0FC00FC00FC00FC00FC00FC0FFFCFFFC0E1C7E9B12>I<FFFE00FFFE000FC0000FC0000F C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F C0000FC0030FC0030FC0030FC0070FC0070FC0060FC00E0FC01E0FC07EFFFFFEFFFFFE18 1C7E9B1D>76 D<FFC00003FFFFE00007FF0FE00007F00DF0000DF00DF0000DF00DF0000D F00CF80019F00CF80019F00C7C0031F00C7C0031F00C3E0061F00C3E0061F00C1F00C1F0 0C1F00C1F00C1F00C1F00C0F8181F00C0F8181F00C07C301F00C07C301F00C03E601F00C 03E601F00C01FC01F00C01FC01F00C01FC01F00C00F801F00C00F801F0FFC0701FFFFFC0 701FFF281C7E9B2D>I<FFE003FFFFE003FF0FF000300FF800300DFC00300CFE00300C7E 00300C3F00300C1F80300C1FC0300C0FE0300C07F0300C03F0300C01F8300C01FC300C00 FE300C007F300C003F300C001FB00C001FF00C000FF00C0007F00C0003F00C0001F00C00 00F00C0000F0FFC00070FFC00030201C7E9B25>I<003FE00001F07C0003C01E000F800F 801F0007C01E0003C03E0003E07E0003F07C0001F07C0001F0FC0001F8FC0001F8FC0001 F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F87C0001F07E0003F07E0003F03E0003 E03F0007E01F0007C00F800F8003C01E0001F07C00003FE0001D1C7D9B24>I<FFFFF800 FFFFFE000FC03F800FC00F800FC007C00FC007E00FC007E00FC007E00FC007E00FC007E0 0FC007C00FC007C00FC00F800FC03F000FFFFC000FC000000FC000000FC000000FC00000 0FC000000FC000000FC000000FC000000FC000000FC000000FC00000FFFC0000FFFC0000 1B1C7E9B21>I<FFFFF00000FFFFFE00000FC03F00000FC00F80000FC007C0000FC007E0 000FC007E0000FC007E0000FC007E0000FC007E0000FC007C0000FC00F80000FC03E0000 0FFFF000000FC07C00000FC03E00000FC03F00000FC01F80000FC01F80000FC01F80000F C01F80000FC01F80000FC01F80000FC01F81800FC01F81800FC00FC180FFFC07C300FFFC 01FE00211C7E9B24>82 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F8 0000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C0 00F0C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFFE07FFF FFE0781F81E0701F80E0601F8060E01F8070C01F8030C01F8030C01F8030C01F8030001F 8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F 8000001F8000001F8000001F8000001F8000001F8000001F800007FFFE0007FFFE001C1C 7E9B21>I<FFFC03FFFFFC03FF0FC000300FC000300FC000300FC000300FC000300FC000 300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000 300FC000300FC000300FC000300FC0003007C0003007C0006003E000E001F001C000FC07 80007FFE00000FF800201C7E9B25>I<FFFC01FF80FFFC01FF800FC00018000FE0003800 07E000300007F000700003F000600003F800600001F800C00001F800C00000FC01800000 FC01800000FE038000007E030000007F070000003F060000003F860000001F8C0000001F 8C0000000FD80000000FD80000000FF800000007F000000007F000000003E000000003E0 00000001C000000001C00000211C7F9B24>I<FFF87FFE0FFCFFF87FFE0FFC0FC007E000 C00FC007F000C00FE003F001C007E003F0018007E007F8018007F007F8038003F00FFC03 0003F00CFC030001F80CFC060001F81CFE060001FC187E0E0000FC187E0C0000FC303F0C 0000FE303F1C00007E703F9800007E601F9800003F601FB000003FE01FF000003FC00FF0 00001FC00FE000001F8007E000001F8007E000000F8007C000000F0003C0000007000380 000007000380002E1C7F9B31>I<7FFE1FFE007FFE1FFE0007F001800003F803800001F8 07000001FC06000000FE0C0000007F1C0000003F380000003FB00000001FE00000000FE0 0000000FE000000007F000000003F800000007F80000000FFC0000000CFE000000187E00 0000387F000000703F800000601FC00000C01FC00001C00FE000038007F000030003F000 FFF01FFF80FFF01FFF80211C7F9B24>I<0FF8001C1E003E0F803E07803E07C01C07C000 07C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F815 127F9117>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00 001F00001F3F801FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F00 3E1F003E1F003C1F003C1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E001C 1F003C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C 01801C03000E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001F0 0001F00001F00001F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801F0 F801F0F801F0F801F0F801F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D7E 9C1B>I<03FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F80000F800 00F800007800007800603C00601E00C00F038001FC0013127F9116>I<007F0001E38003 C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF800FFF8000F80000F 80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F 80007FF0007FF000121D809C0F>I<03F0F00E1F383C0F38380730780780780780780780 7807803807003C0F001E1C0033F0003000003000003000003FFF003FFFC01FFFE01FFFF0 7801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>I<FF0000FF00 001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC01F31E01F40 F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00 F81F00F8FFE7FFFFE7FF181D7F9C1B>I<1E003F003F003F003F001E0000000000000000 00000000007F007F001F001F001F001F001F001F001F001F001F001F001F001F001F001F 00FFC0FFC00A1E7F9D0E>I<007800FC00FC00FC00FC0078000000000000000000000000 03FC03FC007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C 007C007C707CF87CF878F8F070E01F800E26839D0F>I<FF0000FF00001F00001F00001F 00001F00001F00001F00001F00001F00001F00001F03FC1F03FC1F01C01F03001F0E001F 1C001F38001F78001FFC001FBE001F1F001F0F001F0F801F07C01F03E01F01E0FFE7FEFF E7FE171D7F9C19>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F 001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C0E >I<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C01F00F807 C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C0 1F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40F0 1F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8 1F00F8FFE7FFFFE7FF18127F911B>I<01FC000F07801C01C03C01E07800F07800F0F800 F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC001512 7F9118>I<FF3F80FFE1E01F80F01F00781F007C1F003C1F003E1F003E1F003E1F003E1F 003E1F003E1F003C1F007C1F00781F80F01FC1E01F3F001F00001F00001F00001F00001F 00001F0000FFE000FFE000171A7F911B>I<03F0600F0CE01E07E03C03E07C03E07803E0 F803E0F803E0F803E0F803E0F803E0F803E07803E07C03E03C03E01C07E00E0FE003F3E0 0003E00003E00003E00003E00003E00003E0001FFC001FFC161A7E9119>I<FE3E00FE47 001E8F801E8F801E8F801F07001F00001F00001F00001F00001F00001F00001F00001F00 001F00001F0000FFE000FFE00011127F9114>I<1FD830786018E018E018F000FF807FE0 7FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<030003000300030007 0007000F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F 0C0F08079803F00E1A7F9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F 00F81F00F81F00F81F00F81F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F91 1B>I<FFC1FCFFC1FC1F00601F80600F80C00F80C007C18007C18003E30003E30003F700 01F60001FE0000FC0000FC0000780000780000300016127F9119>I<FF8FF8FEFF8FF8FE 1F03E0301F03E0301F03E0300F87F0600F86F0600FC6F8E007CC78C007CC78C003FC7D80 03F83D8003F83F8001F01F0001F01F0000F01E0000E00E0000E00E001F127F9122>I<FF C7FCFFC7FC1F81C00F838007C70003EE0001FC0001F80000F800007C0000FE0001DF0003 9F80070F800607C00C03E0FF07FCFF07FC16127F9119>I<FFC1FCFFC1FC1F00601F8060 0F80C00F80C007C18007C18003E30003E30003F70001F60001FE0000FC0000FC00007800 007800003000003000006000706000F8E000F8C000F980007300003E0000161A7F9119> I<7FFF80781F00703F00603E00607C0060FC0060F80001F00003F00007E00007C1800F81 801F81801F03803E03007E07007C0F00FFFF0011127F9115>I<FFFFFE1701808B18>I E /Fs 93 127 df<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060F0F060041977 9816>33 D<E038F078F078F078F078F078F078F078E038E03860300D0B7C9816>I<0387 000387000387000387000387000387007FFFC0FFFFE0FFFFE0070E00070E00070E000E1C 000E1C000E1C000E1C00FFFFE0FFFFE07FFFC01C38001C38001C38001C38001C38001C38 0013197F9816>I<00C00001C00001C00001C00007F0001FFC003FFE007DCF0071C780E1 C380E1C780E1C780F1C30079C0003FC0001FF00007FC0001FE0001CF0001C70061C380F1 C380F1C380E1C38071C70079DF003FFE001FF80007E00001C00001C00000C00011207E9C 16>I<3801807C03807C0380EE0700EE0700EE0E00EE0E00EE0E00EE1C007C1C007C3800 38380000700000700000700000E00000E00001C00001C00001C0000380000383800707C0 0707C00E0EE00E0EE00E0EE01C0EE01C0EE03807C03807C018038013207F9C16>I<0380 0007E0000FE0001E70001C70001C70001C70001CF7E01CE7E01DC7E00FC7000F8E000F0E 001F0E003F1C007B9C00739C00E1F800E1F800E0F0E0E0F0E071F8E07FFFC03F9FC01E07 0013197F9816>I<30787C3C1C1C1C1C3878F0E040060D789816>I<00E001E0038007000E 001C001C0038003800700070007000E000E000E000E000E000E000E000E000E000700070 007000380038001C001C000E000700038001E000E00B217A9C16>I<C000E00070003800 1C000E000E000700070003800380038001C001C001C001C001C001C001C001C001C00380 03800380070007000E000E001C0038007000E000C0000A217B9C16>I<03800380038003 80E38EF39EFFFE3FF80FE00FE03FF8FFFEF39EE38E03800380038003800F127D9516>I< 00E00000E00000E00000E00000E00000E00000E00000E000FFFFE0FFFFE0FFFFE000E000 00E00000E00000E00000E00000E00000E00000E00013137F9516>I<387C7E7E3E0E1E1C 78F060070B798416>I<FFFF80FFFF80FFFF8011037E8D16>I<70F8F8F8700505788416> I<000180000380000380000700000700000E00000E00001C00001C000038000038000070 0000700000E00000E00001C00001C0000380000380000700000700000E00000E00001C00 001C0000380000380000700000700000E00000E00000C0000011207E9C16>I<03E0000F F8001FFC001E3C00380E00780F00700700700700E00380E00380E00380E00380E00380E0 0380E00380E00380F00780700700700700780F003C1E001E3C001FFC000FF80003E00011 197E9816>I<0300070007000F001F00FF00FF00E7000700070007000700070007000700 0700070007000700070007000700FFF8FFF8FFF80D197B9816>I<07E0001FF8003FFC00 783E00E00700F00780F00380600380000380000380000700000700000E00001C00003800 00700000E00001C0000380000F00001E03803803807FFF80FFFF807FFF8011197E9816> I<07E0001FF8003FFC00781E00780700300700000700000700000E00003E0007FC0007F0 0007FC00001E00000700000300000380000380600380F00380E00700781E003FFC001FF8 0007E00011197E9816>I<007C0000FC0000DC0001DC00039C00039C00071C000F1C000E 1C001E1C003C1C00381C00781C00F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C0000 1C00001C0001FFC001FFC001FFC013197F9816>I<3FFE007FFE007FFE00700000700000 70000070000070000070000070000077F0007FFC007FFE00780F00300700000380000380 600380F00380F00380E00700781E003FFC001FF80007E00011197E9816>I<00F80003FC 0007FE000F07001C0F00380F00780600700000700000E3F800EFFC00FFFE00F80F00F007 00F00380E00380E003807003807003807007803807003C1E001FFC000FF80003E0001119 7E9816>I<E00000FFFF80FFFF80FFFF80E00F00E01E00001C0000380000780000700000 E00000E00001C00001C00001C00003800003800003800003800007000007000007000007 0000070000070000070000111A7E9916>I<07F0001FFC003FFE007C1F00F00780E00380 E00380E003807007007C1F001FFC0007F0001FFC003C1E00700700F00780E00380E00380 E00380F007807007007C1F003FFE001FFC0007F00011197E9816>I<03E0000FF8001FFC 003C1E00700E00700700E00700E00780E00380E00380E00780700780780F803FFF801FFB 800FE380000700000700300700780E00781C00707C003FF8001FE0000F800011197E9816 >I<70F8F8F870000000000000000070F8F8F8700512789116>I<387C7C7C380000000000 00000038787C7C3C1C1C3870F0400618799116>I<000180000780001F80003E0000F800 01F00007C0000F80003E0000FC0000F00000FC00003E00000F800007C00001F00000F800 003E00001F8000078000018011157E9616>I<7FFFC0FFFFE0FFFFE00000000000000000 00000000000000FFFFE0FFFFE07FFFC0130B7F9116>I<C00000F00000FC00003E00000F 800007C00001F00000F800003E00001F80000780001F80003E0000F80001F00007C0000F 80003E0000FC0000F00000C0000011157E9616>I<0FF0003FFE007FFF00F00F80F00380 F00380600780001F00003E0000780000F00001C00001C00001C00001C00001C000018000 00000000000000000000000001800003C00003C00001800011197E9816>I<00F80003FC 0007FE000F07001C3B8038FF8079FF8073C7C07383C0E701C0E701C0E701C0E701C0E701 C0E701C0E701C073838073C78079FF0038FE001C38000F03C007FFC003FF0000FC001219 7E9816>I<00E00001F00001F00001B00001B00003B80003B80003B800031800071C0007 1C00071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007E 0FC0FF1FE07E0FC013197F9816>I<7FF800FFFE007FFF001C07001C07801C03801C0380 1C03801C03801C07001FFF001FFE001FFE001C1F001C03801C03C01C01C01C01C01C01C0 1C01C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<01F18007FB800FFF801F0F 803C0780380380700380700380F00000E00000E00000E00000E00000E00000E00000E000 00F000007003807003803803803C07001F0F000FFE0007FC0001F00011197E9816>I<7F F800FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00E01C 00E01C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE007F F8001319809816>I<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C0000 1C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E0 1C00E07FFFE0FFFFE07FFFE013197F9816>I<7FFFE0FFFFE07FFFE01C00E01C00E01C00 E01C00E01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00 001C00001C00001C00001C00007F8000FFC0007F800013197F9816>I<01F18007FB800F FF801F0F803C0780380380700380700380F00000E00000E00000E00000E00000E01FC0E0 1FE0E01FC0F003807003807007803807803C07801E0F800FFF8007FB8001F38013197F98 16>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC0 1FFFC01FFFC01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0 FF8FF87F07F01519809816>I<7FFCFFFE7FFC0380038003800380038003800380038003 8003800380038003800380038003800380038003807FFCFFFE7FFC0F197D9816>I<01FF 0003FF8001FF00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C 00001C00001C00001C00001C00001C00001C00601C00F01C00F038007FF8007FF0001FC0 0011197E9816>I<7F0FE0FF8FF07F0FE01C07801C0F001C0E001C1C001C3C001C78001C F0001CE0001DF0001FF0001FF8001F38001E1C001C1C001C0E001C0E001C07001C07001C 03807F07E0FF8FF07F07E01419809816>I<FF8000FFC000FF80001C00001C00001C0000 1C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0040 1C00E01C00E01C00E01C00E0FFFFE0FFFFE0FFFFE013197F9816>I<FC07E0FE0FE0FE0F E03A0B803B1B803B1B803B1B803B1B803B1B803BBB8039B38039B38039B38039B38039F3 8038E38038E380380380380380380380380380380380FE0FE0FE0FE0FE0FE013197F9816 >I<7E07F0FF0FF87F07F01D81C01D81C01D81C01DC1C01CC1C01CE1C01CE1C01C61C01C 71C01C71C01C71C01C31C01C39C01C39C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF 87C07F03C01519809816>I<1FFC003FFE007FFF00780F00F00780E00380E00380E00380 E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380F00780 F00780780F007FFF003FFE001FFC0011197E9816>I<7FF800FFFE007FFF001C0F801C03 801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FF8001C00001C00 001C00001C00001C00001C00001C00007F0000FF80007F000012197F9816>I<1FFC003F FE007FFF00780F00F00780E00380E00380E00380E00380E00380E00380E00380E00380E0 0380E00380E00380E00380E00380E0E380E1E380F0F780787F007FFF003FFE001FFC0000 1C00001E00000E00000F00000700000700111F7E9816>I<7FF000FFFC007FFE001C0F00 1C07801C03801C03801C03801C03801C07801C0F001FFE001FFC001FFE001C0E001C0700 1C07001C07001C07001C07101C07381C07387F03F0FF83F07F01E01519809816>I<07E3 001FFF003FFF00781F00F00700E00700E00700E00000F000007800003F80001FF00007FC 0000FE00000F00000700000380000380600380E00380E00700F80F00FFFE00FFFC00C7F0 0011197E9816>I<7FFFE0FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0E0E0E000E00000E00000 E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 E00007FC000FFE0007FC0013197F9816>I<7F07F0FF8FF87F07F01C01C01C01C01C01C0 1C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C0 1C01C00E03800E038007070007FF0003FE0000F8001519809816>I<FE0FE0FE0FE0FE0F E03803803C07801C07001C07001C07001E0F000E0E000E0E000E0E000E0E00071C00071C 00071C00071C0003180003B80003B80003B80001B00001F00001F00000E00013197F9816 >I<7E03F0FF07F87E03F03800E03800E03800E03800E01C01C01C01C01C01C01C71C01C F9C01CF9C01CD9C01CD9C00CD9800CD9800CD9800DDD800D8D800D8D800D8D80078F0007 8F000707001519809816>I<7F1F807F3FC07F1F800E1E000E1C00071C0007380003B800 03F00001F00001E00000E00001E00001F00003F00003B80007B800071C000F1C000E0E00 0E0E001C07007E0FC0FF1FE07E0FC013197F9816>I<FE0FE0FF1FE0FE0FE01C07001C07 000E0E000E0E00071C00071C00071C0003B80003B80001F00001F00000E00000E00000E0 0000E00000E00000E00000E00000E00003F80007FC0003F80013197F9816>I<7FFF80FF FF80FFFF80E00700E00F00E01E00E01C00003C0000780000700000F00001E00001C00003 C0000780000700000F00001E03801C03803C0380780380700380FFFF80FFFF80FFFF8011 197E9816>I<FFF0FFF0FFF0E000E000E000E000E000E000E000E000E000E000E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF0FFF0FFF00C20 789C16>I<C00000E00000E000007000007000003800003800001C00001C00000E00000E 000007000007000003800003800001C00001C00000E00000E00000700000700000380000 3800001C00001C00000E00000E0000070000070000038000038000018011207E9C16>I< FFF0FFF0FFF0007000700070007000700070007000700070007000700070007000700070 00700070007000700070007000700070007000700070FFF0FFF0FFF00C207F9C16>I<03 000F803FE0FDF8F07840100D067C9816>I<FFFF80FFFF80FFFF8011037E7E16>I<1FE000 3FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E00E00E00 E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<FC0000FC0000FC00001C00001C 00001C00001C00001C7C001DFE001FFF001F07801E03C01C01C01C00E01C00E01C00E01C 00E01C00E01C00E01C01C01E03C01F07801FFF001DFE000C780013197F9816>I<03F80F FC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803F010127D 9116>I<003F00003F00003F0000070000070000070000070003C7000FF7001FFF003C1F 00780F00700700E00700E00700E00700E00700E00700E00700700F00780F003C1F001FFF E00FF7E007C7E013197F9816>I<03F0000FFC001FFE003C0F00780700700380E00380FF FF80FFFF80FFFF80E00000E000007003807803803E07801FFF0007FE0001F80011127E91 16>I<001E00007F0001FF8001C7800383000380000380007FFF00FFFF00FFFF00038000 0380000380000380000380000380000380000380000380000380000380000380007FFC00 FFFE007FFC0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E 00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF807003C0E000 E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116>I<FC0000FC 0000FC00001C00001C00001C00001C00001C78001DFC001FFE001F0F001E07001C07001C 07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF9FE0FF8FE013 197F9816>I<03000780078003000000000000000000FF80FF80FF800380038003800380 03800380038003800380038003800380FFFCFFFEFFFC0F1A7C9916>I<00300078007800 3000000000000000000FF81FF80FF8003800380038003800380038003800380038003800 38003800380038003800380038003800386070F0F0FFE07FC03F800D237E9916>I<7E00 00FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E1E000E3C 000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FFCFF07F87 F01419809816>I<7FC000FFC0007FC00001C00001C00001C00001C00001C00001C00001 C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001 C0007FFF00FFFF807FFF0011197E9816>I<F9C380FFEFC0FFFFE03C78E03C78E03870E0 3870E03870E03870E03870E03870E03870E03870E03870E03870E0FE7CF8FE7CF8FE7CF8 1512809116>I<FC7800FDFC00FFFE001F0F001E07001C07001C07001C07001C07001C07 001C07001C07001C07001C07001C0700FF8FE0FF9FE0FF8FE013127F9116>I<03E0000F F8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F0078070070078 0F003C1E001FFC000FF80003E00011127E9116>I<FC7C00FDFE00FFFF001F07801E03C0 1C01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01E03C01F07801FFF001DFE00 1C78001C00001C00001C00001C00001C00001C0000FF8000FF8000FF8000131B7F9116> I<03E3800FF3801FFB803E0F80780780700780E00380E00380E00380E00380E00380E003 807007807807803C1F801FFB800FF38003E3800003800003800003800003800003800003 80001FF0003FF8001FF0151B7F9116>I<7F0FC0FF3FE07F7FE007F04007C00007800007 80000700000700000700000700000700000700000700000700007FFC00FFFC007FFC0013 127F9116>I<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81E FFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007FFF00FFFF00FFFF 000700000700000700000700000700000700000700000701000703800703800703800787 0003FE0001FC0000F80011177F9616>I<FC3F00FC3F00FC3F001C07001C07001C07001C 07001C07001C07001C07001C07001C07001C07001C07001C1F001FFFE00FF7E007C7E013 127F9116>I<7F1FC0FF9FE07F1FC01C07001C07000E0E000E0E000E0E00071C00071C00 071C00071C0003B80003B80003B80001F00001F00000E00013127F9116>I<FF1FE0FF1F E0FF1FE038038038038038038038038039F38039F38019F30019B30019B30019B3001DB7 001D17001F1F000F1E000E0E0013127F9116>I<7F1FC07F3FC07F1FC00F1E00073C0003 B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0FF3FE07F 1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C00 071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E00000E000 01C00079C0007BC0007F80007F00003C0000131B7F9116>I<3FFFC07FFFC07FFFC07007 80700F00701E00003C0000780001F00003E0000780000F00001E01C03C01C07801C0FFFF C0FFFFC0FFFFC012127F9116>I<001F80007F8000FF8001E00001C00001C00001C00001 C00001C00001C00001C00001C00001C00003C0007F8000FF0000FF00007F800003C00001 C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000FF80007F8000 1F8011207E9C16>I<E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0 E0E0E0E0E00320779C16>I<7C0000FF0000FF800003C00001C00001C00001C00001C000 01C00001C00001C00001C00001C00001E00000FF00007F80007F8000FF0001E00001C000 01C00001C00001C00001C00001C00001C00001C00001C00003C000FF8000FF00007C0000 11207E9C16>I<1C303F78FFF8F7E061C00D057C9816>I E /Ft 12 125 df<FFFFFF80FFFFFF8019027D8A20>0 D<400020C000606000C03001801803000C06 00060C0003180001B00000E00000E00001B000031800060C000C06001803003001806000 C0C0006040002013147A9320>2 D<0300030003000300C30CE31C73381FE0078007801F E07338E31CC30C03000300030003000E127D9215>I<03C00FF01FF83FFC7FFE7FFEFFFF FFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C010107E9115>15 D<00000180000007800000 1E00000078000001E00000078000001E00000078000001E00000078000001E0000007800 0000E0000000780000001E0000000780000001E0000000780000001E0000000780000001 E0000000780000001E000000078000000180000000000000000000000000000000000000 000000000000000000007FFFFF00FFFFFF8019227D9920>20 D<C0000000F00000003C00 00000F00000003C0000000F00000003C0000000F00000003C0000000F00000003C000000 0F000000038000000F0000003C000000F0000003C000000F0000003C000000F0000003C0 00000F0000003C00000070000000C0000000000000000000000000000000000000000000 000000000000000000007FFFFF00FFFFFF8019227D9920>I<0000003000000000180000 0000180000000018000000000C000000000C000000000600000000030000000003800000 0000C0FFFFFFFFF8FFFFFFFFF800000000C0000000038000000003000000000600000000 0C000000000C00000000180000000018000000001800000000300025167E942A>33 D<00018000000180000003C0000003C0000006600000066000000C3000000C3000001818 0000300C0000300C00006006000060060000C0030000C003000180018001800180030000 C0030000C006000060060000600C00003018000018180000183000000C3000000C600000 0660000006FFFFFFFF7FFFFFFF201E7E9D25>52 D<003C00E001C0018003800380038003 80038003800380038003800380038003800380030007001C00F0001C0007000300038003 8003800380038003800380038003800380038003800380018001C000E0003C0E297D9E15 >102 D<F0001C0007000300038003800380038003800380038003800380038003800380 0380018001C000E0003C00E001C001800380038003800380038003800380038003800380 038003800380030007001C00F0000E297D9E15>I<1F00308070406060E0E0E0E0E040E0 0060007000300018001C003300718061C0E0C0E0E0E0E0E0E060E070C031C01980070003 00018001C000C000E040E0E0E0E0E0C0C041C021801F000B257D9C12>120 D<000FC000001FE000003FF000007FF800007FF80000FFFC0000FFFC0000FFFC0000FFFC 0000FFFC0000FFFC00007FF800007FF800003FF000001FE0000F3FF3C01FFFFFE03FFFFF F07FFFFFF87FFFFFF8FFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC7FF13F F87FF33FF83FF33FF01FE31FE00FC30FC0000300000007800000078000000780001E237F 9D21>124 D E /Fu 72 124 df<00FE7C0381C60603CE0E03841C03801C03801C03801C 03801C03801C0380FFFFF01C03801C03801C03801C03801C03801C03801C03801C03801C 03801C03801C03801C03801C03801C0380FF8FF0171A809916>11 D<00FE000381000601800E03801C01001C00001C00001C00001C00001C0000FFFF801C03 801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03 801C0380FF8FF0141A809915>I<00FF800383800603800E03801C03801C03801C03801C 03801C03801C0380FFFF801C03801C03801C03801C03801C03801C03801C03801C03801C 03801C03801C03801C03801C03801C0380FF9FF0141A809915>I<60F0F8680808081010 2040050B7D990B>39 D<00800100020004000C0008001800300030003000600060006000 6000E000E000E000E000E000E000E000E000E000E0006000600060006000300030003000 180008000C00040002000100008009267D9B0F>I<8000400020001000180008000C0006 000600060003000300030003000380038003800380038003800380038003800380030003 00030003000600060006000C0008001800100020004000800009267E9B0F>I<60F0F070 10101020204040040B7D830B>44 D<FFC0FFC00A0280880D>I<60F0F06004047D830B>I< 0004000C00180018001800300030003000600060006000C000C000C00180018001800300 030003000600060006000C000C000C00180018001800300030003000600060006000C000 C0000E257E9B13>I<07E01C38381C300C700E60066006E007E007E007E007E007E007E0 07E007E007E00760066006700E300C381C1C3807E010187F9713>I<03000700FF000700 070007000700070007000700070007000700070007000700070007000700070007000700 07007FF80D187D9713>I<0F80106020304038803CC01CE01C401C003C00380038007000 6000C001800100020004040804100430083FF87FF8FFF80E187E9713>I<07E01838201C 601E700E201E001E001C001C0038007007E00038001C000E000F000FE00FE00FC00F400E 601C183807E010187F9713>I<001800180038007800F800B80138023802380438083818 38103820384038C038FFFF00380038003800380038003803FF10187F9713>I<30183FF0 3FE03F80200020002000200020002FC03060203000380018001C001C401CE01CE01C8018 4038403030E00F800E187E9713>I<01F807040C06180E300E300070006000E000E3E0E4 18E80CF00EE006E007E007E007600760077006300E180C0C3807E010187F9713>I<4000 7FFF7FFE7FFE400480088010801000200040004000800180010003000300070006000600 0E000E000E000E000E00040010197E9813>I<07E01818300C2006600660067006780C3E 181F3007C003E00CF8307C601E600FC007C003C003C00360022004181807E010187F9713 >I<07E01C303018700C600EE006E006E007E007E0076007700F3017182707C700070006 000E000C700C7018603030600F8010187F9713>I<60F0F060000000000000000060F0F0 6004107D8F0B>I<60F0F060000000000000000060F0F0701010102020404004177D8F0B> I<000C0000000C0000000C0000001E0000001E0000002F00000027000000270000004380 0000438000004380000081C0000081C0000181E0000100E0000100E00003FFF000020070 000200700004003800040038000400380008001C0008001C003C001E00FF00FFC01A1A7F 991D>65 D<FFFF800E00E00E00700E00380E003C0E003C0E003C0E003C0E003C0E00780E 00700E01E00FFFC00E00F00E00780E003C0E001C0E001E0E001E0E001E0E001E0E001C0E 003C0E00780E00F0FFFFC0171A7F991B>I<003F0201C0C603002E0E001E1C000E1C0006 380006780002700002700002F00000F00000F00000F00000F00000F00000700002700002 7800023800041C00041C00080E000803003001C0C0003F00171A7E991C>I<FFFF80000E 00E0000E0070000E0038000E001C000E000E000E000E000E0007000E0007000E0007800E 0007800E0007800E0007800E0007800E0007800E0007800E0007800E0007000E0007000E 000F000E000E000E001C000E001C000E0078000E00E000FFFF8000191A7F991D>I<FFFF F80E00380E00180E00080E000C0E00040E00040E00040E01000E01000E01000E03000FFF 000E03000E01000E01000E01000E00020E00020E00020E00060E00040E00040E000C0E00 3CFFFFFC171A7F991A>I<FFFFF80E00380E00180E00080E000C0E00040E00040E00040E 01000E01000E01000E03000FFF000E03000E01000E01000E01000E00000E00000E00000E 00000E00000E00000E00000E0000FFE000161A7F9919>I<003F020001C0C60003002E00 0E001E001C000E001C00060038000600780002007000020070000200F0000000F0000000 F0000000F0000000F0000000F001FFC070000E0070000E0078000E0038000E001C000E00 1C000E000E000E000300160001C06600003F82001A1A7E991E>I<FFE1FFC00E001C000E 001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E 001C000FFFFC000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E 001C000E001C000E001C000E001C000E001C00FFE1FFC01A1A7F991D>I<FF801C001C00 1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00 1C001C001C001C00FF80091A7E990E>I<FFE0000E00000E00000E00000E00000E00000E 00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00080E 00080E00080E00180E00100E00300E00700E00F0FFFFF0151A7F9918>76 D<FF0000FF0F0000F00F0000F00B8001700B80017009C0027009C0027009C0027008E004 7008E00470087008700870087008700870083810700838107008381070081C2070081C20 70080E4070080E4070080E40700807807008078070080300701C030070FF8307FF201A7F 9923>I<FE007FC00F000E000F0004000B80040009C0040009C0040008E0040008700400 0870040008380400081C0400081C0400080E04000807040008038400080384000801C400 0800E4000800E4000800740008003C0008003C0008001C0008000C001C000C00FF800400 1A1A7F991D>I<007F000001C1C000070070000E0038001C001C003C001E0038000E0078 000F0070000700F0000780F0000780F0000780F0000780F0000780F0000780F0000780F0 00078078000F0078000F0038000E003C001E001C001C000E0038000700700001C1C00000 7F0000191A7E991E>I<FFFF800E01E00E00700E00780E00380E003C0E003C0E003C0E00 3C0E00380E00780E00700E01E00FFF800E00000E00000E00000E00000E00000E00000E00 000E00000E00000E00000E0000FFE000161A7F991A>I<007F000001C1C000070070000E 0038001C001C003C001E0038000E0078000F0070000700F0000780F0000780F0000780F0 000780F0000780F0000780F0000780F00007807000070078000F0038000E003C1C1E001C 221C000E4138000741F00001E1C000007F80800000C0800000C0800000E18000007F0000 007F0000003E0000001C0019217E991E>I<FFFF00000E01C0000E0070000E0078000E00 3C000E003C000E003C000E003C000E003C000E0078000E0070000E01C0000FFF00000E03 80000E00C0000E00E0000E0070000E0070000E0070000E0078000E0078000E0078000E00 78400E003C400E001C80FFE00F001A1A7F991C>I<0FC21836200E6006C006C002C002C0 02E00070007E003FE01FF803FC007E000E00070003800380038003C002C006E004D81887 E0101A7E9915>I<7FFFFF00701C0700401C0100401C0100C01C0180801C0080801C0080 801C0080001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000 001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000 03FFE000191A7F991C>I<FFE07FC00E000E000E0004000E0004000E0004000E0004000E 0004000E0004000E0004000E0004000E0004000E0004000E0004000E0004000E0004000E 0004000E0004000E0004000E0004000E0004000600080007000800030010000180200000 E0C000003F00001A1A7F991D>I<FF801FC01C0007001C0006000E0004000E0004000E00 0400070008000700080003801000038010000380100001C0200001C0200000E0400000E0 400000E040000070800000708000007980000039000000390000001E0000001E0000001E 0000000C0000000C00001A1A7F991D>I<FF81FF07F03C007801C01C007800801C007800 801C007800800E009C01000E009C01000E009C010007010E020007010E020007010E0200 03830F0400038207040003820704000382070C0001C403880001C403880001C403880000 E801D00000E801D00000E801D000007000E000007000E000007000E000003000C0000020 004000241A7F9927>I<FFC0FF800F003C000F001000070020000380200003C0400001C0 800000E1800000F10000007A0000003E0000001C0000001E0000001E0000001700000027 8000004380000041C0000081E0000100E0000300700002007800040038000C001C001E00 3E00FF007FC01A1A7F991D>I<FF801FE01E0007001E0006000F00040007000C00078008 000380100001C0100001E0200000E06000007040000078800000388000001D0000001F00 00000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E00 00000E000000FFC0001B1A7F991D>I<1FC000387000383800101C00001C00001C0003FC 001E1C00381C00701C00E01C00E01C80E01C80E03C80705F801F8F0011107F8F13>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001CFC001D07 001E03801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01801E03 0019060010F800131A809915>I<07F81C1C381C70087000E000E000E000E000E000E000 7000700438081C1807E00E107F8F11>I<003F0000070000070000070000070000070000 070000070000070000070003E7000C1700180F00300700700700E00700E00700E00700E0 0700E00700E00700600700700700380F001C370007C7E0131A7F9915>I<07C01C303018 7018600CE00CFFFCE000E000E000E0006000700438081C1807E00E107F8F11>I<01F007 180E381C101C001C001C001C001C001C00FFC01C001C001C001C001C001C001C001C001C 001C001C001C001C001C00FF800D1A80990C>I<0FCF0018718030300070380070380070 38007038003030001860002FC0006000006000007000003FF0003FFC001FFE00600F00C0 0300C00300C00300C00300600600381C0007E00011187F8F13>I<FC00001C00001C0000 1C00001C00001C00001C00001C00001C00001C00001C7C001D87001E03801E03801C0380 1C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0141A80 9915>I<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C1C1C1C1C1CFF081A80990A>I< 018003C003C001800000000000000000000000000FC001C001C001C001C001C001C001C0 01C001C001C001C001C001C001C001C001C001C001C041C0E180E3007E000A2182990C> I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C1FC01C0F 001C0C001C18001C20001C40001CE0001DE0001E70001C78001C38001C1C001C1E001C0F 001C0F80FF9FE0131A809914>I<FC001C001C001C001C001C001C001C001C001C001C00 1C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091A80990A> I<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701C01C0701C01C0701C01C0701 C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D107F8F20>I< FC7C001D87001E03801E03801C03801C03801C03801C03801C03801C03801C03801C0380 1C03801C03801C0380FF9FF01410808F15>I<07E01C38300C700E6006E007E007E007E0 07E007E0076006700E381C1C3807E010107F8F13>I<FCFC001D07001E03801C01C01C01 C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01801E03001D06001CF8001C00 001C00001C00001C00001C00001C0000FF80001317808F15>I<03E1000C1300180B0030 0F00700700E00700E00700E00700E00700E00700E00700700700700700380F001C370007 C700000700000700000700000700000700000700003FE013177F8F14>I<FC781D9C1E1C 1E081C001C001C001C001C001C001C001C001C001C001C00FF800E10808F0F>I<1F2060 E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F800C107F8F0F>I< 0800080008000800180018003800FFC03800380038003800380038003800380038203820 3820382018201C4007800B177F960F>I<FC1F801C03801C03801C03801C03801C03801C 03801C03801C03801C03801C03801C03801C07800C07800E0B8003F3F01410808F15>I< FF0F803C07001C06001C04001C04000E08000E080007100007100007100003A00003A000 01C00001C00001C00000800011107F8F14>I<FE7F1F80381C07003C1C06001C0C04001C 0E04000E1608000E1708000E170800072310000723900007A3900003C1A00003C1E00001 80C0000180C0000180C00019107F8F1C>I<FE3F803C1E001C08000E10000F3000076000 03C00001C00001E00003E000027000043800083800181C00381E00FC3FC012107F8F14> I<FF0F803C07001C06001C04001C04000E08000E080007100007100007100003A00003A0 0001C00001C00001C000008000008000010000010000E10000E20000E400007800001117 7F8F14>I<FFF8E070C07080E081C081C00380070007000E041C041C04380870087038FF F80E107F8F11>I<FFFFC01201808913>I E /Fv 29 120 df<FFF8FFF8FFF80D037E8B12 >45 D<60F0F0600404798312>I<0018003800380070007000E000E001C001C001C00380 0380070007000E000E001C001C001C003800380070007000E000E000C0000D1A7E9612> I<0F803FC070E0E070E038E038403800380030007000E000C00180030006000C00183830 387FF87FF80D147E9312>50 D<0FC03FF07838701C201C001C0038007007E007F0003800 1C000E000E400EE00EE01C78383FF00FC00F147F9312>I<60F0F06000000000000060F0 F060040E798D12>58 D<03E007F01E18381C30FC71FE739EE30EE70EE70EE70EE70EE30C 739C71F830F038001E0E07FE03F80F147F9312>64 D<1FC0003FF000383800101C00001C 0007FC003FFC00781C00E01C00E01C00E01C00703C003FFF801FCF80110E7F8D12>97 D<F800F80038003800380038003BE03FF03C38381C380C380E380E380E380E380C381C3C 383FF01BC00F147F9312>I<07F01FF8383870106000E000E000E000E000600070383838 1FF007E00D0E7E8D12>I<00F800F8003800380038003807B81FF8387870386038E038E0 38E038E0386038707838781FFE0FBE0F147F9312>I<07801FE0387070706038E038FFF8 FFF8E0006000703838381FF007C00D0E7E8D12>I<007E00FF01C70382038003807FFEFF FE03800380038003800380038003800380038003803FF83FF81014809312>I<0F9E1FFF 38E7707070707070707038E03FC03F8070003FE03FF83FFC701EE00EE00EE00E600C783C 1FF00FE010167F8D12>I<F800F800380038003800380039E03FF03E383C383838383838 3838383838383838383838FE3EFE3E0F147F9312>I<06000F000F000600000000000000 7F007F000700070007000700070007000700070007000700FFF0FFF00C157D9412>I<F8 00F80038003800380038003BFC3BFC38F039E03BC03F803F803FC03DE038E038703838FC 7EFC7E0F147F9312>107 D<FF00FF000700070007000700070007000700070007000700 070007000700070007000700FFF8FFF80D147E9312>I<F71C00FFBE0079E70079E70071 C70071C70071C70071C70071C70071C70071C70071C700F9E780F8E380110E808D12>I< F9E0FFF03E383C3838383838383838383838383838383838FE3EFE3E0F0E7F8D12>I<0F 803FE038E07070E038E038E038E038E038F078707038E03FE00F800D0E7E8D12>I<FBE0 FFF03C38381C380C380E380E380E380E380C381C3C383FF03BC038003800380038003800 FE00FE000F157F8D12>I<079C1FFC387C703C601CE01CE01CE01CE01C601C703C387C1F FC079C001C001C001C001C001C007F007F10157F8D12>I<FC78FDFC1F9C1E081E001C00 1C001C001C001C001C001C00FFC0FFC00E0E7E8D12>I<1FF03FF06070C070E0007F003F E00FF000786018E018F030FFE0DFC00D0E7E8D12>I<06000E000E000E007FF8FFF80E00 0E000E000E000E000E000E000E1C0E1C0E1C07F801E00E127F9112>I<F8F8F8F8383838 38383838383838383838383838383838781FFE0FBE0F0E7F8D12>I<FC7EFC7E38383838 1C701C701C700EE00EE00EE00EE007C007C003800F0E7F8D12>I<FEFEFEFE701C701C70 1C30183BB83FF83FF83AB838B81CF01CF01CF00F0E7F8D12>I E /Fw 1 98 df<00200000700000700000700000B80000B80000B800011C00011C00031E00 020E00020E0004070007FF000407000803800803801803C01801C03801C0FC07F815157F 9419>97 D E /Fx 2 16 df<000FC000007FF80001F03E0003800700060001800C0000C0 1800006030000030300000306000001860000018C000000CC000000CC000000CC000000C C000000CC000000CC000000C60000018600000183000003030000030180000600C0000C0 060001800380070001F03E00007FF800000FC0001E1D7E9623>13 D<0F801FC03FE07FF07FF0FFF8FFF8FFF8FFF87FF07FF03FE01FC00F800D0E7E8E12>15 D E /Fy 79 124 df<00FCF807839C0E079C1C07081C07001C07001C07001C07001C0700 FFFFE01C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700 1C07007F1FE01617809615>11 D<00FC000782000E07001C07001C02001C00001C00001C 00001C0000FFFF001C07001C07001C07001C07001C07001C07001C07001C07001C07001C 07001C07001C07007F1FC01217809614>I<00FF000707000E07001C07001C07001C0700 1C07001C07001C0700FFFF001C07001C07001C07001C07001C07001C07001C07001C0700 1C07001C07001C07001C07007F1FC01217809614>I<60C0F1E0F1E070E0102010202040 2040408040800B0A7F9612>34 D<00183000183000183000306000306000306000306000 30600060C00060C0FFFFFFFFFFFF00C18000C18000C180018300018300018300FFFFFFFF FFFF030600060C00060C00060C00060C00060C000C18000C18000C1800181D7E961D>I< 60F0F070101020204040040A7D960A>39 D<0102040C1818303070606060E0E0E0E0E0E0 E0E0E0E060606070303018180C04020108227D980E>I<8040203018180C0C0E06060607 0707070707070707070606060E0C0C18183020408008227E980E>I<0030000030000030 00003000003000003000003000003000003000003000003000FFFFFCFFFFFC0030000030 0000300000300000300000300000300000300000300000300000300016187E931B>43 D<60F0F070101020204040040A7D830A>I<FF80FF80090280870C>I<60F0F06004047D83 0A>I<0008001800300030003000600060006000C000C000C00180018001800300030006 00060006000C000C000C00180018001800300030003000600060006000C000C0000D217E 9812>I<07C018303018701C600C600CE00EE00EE00EE00EE00EE00EE00EE00EE00E600C 600C701C30181C7007C00F157F9412>I<06000E00FE000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E00FFE00B157D9412>I<0F8030E04070 8030C038E0384038003800700070006000C00180030006000C08080810183FF07FF0FFF0 0D157E9412>I<0FE030306018701C701C001C00180038006007E000300018000C000E00 0EE00EE00EC00C401830300FE00F157F9412>I<00300030007000F001F0017002700470 08701870107020704070C070FFFE0070007000700070007003FE0F157F9412>I<60307F E07FC0440040004000400040004F8070E040700030003800384038E038E0388030406020 C01F000D157E9412>I<01F00608080C181C301C70006000E000E3E0EC30F018F00CE00E E00EE00E600E600E300C3018183007C00F157F9412>I<40007FFE7FFC7FF8C008801080 200040008000800100030003000200060006000E000E000E000E000E0004000F167E9512 >I<07E018302018600C600C700C78183E101F6007C00FF018F8607C601EC00EC006C006 C004600C38300FE00F157F9412>I<07C0183030186018E00CE00CE00EE00EE00E601E30 1E186E0F8E000E000C001C70187018603020E01F800F157F9412>I<60F0F06000000000 000060F0F060040E7D8D0A>I<001000003800003800003800005C00005C00005C00008E 00008E00008E0001070001070002038002038002038007FFC00401C00401C00800E00800 E01800F03800F0FE03FE17177F961A>65 D<FFFE001C03801C00E01C00601C00701C0070 1C00701C00701C00E01C01C01FFF801FFFC01C00E01C00701C00301C00381C00381C0038 1C00381C00701C00E01C01C0FFFF0015177F9619>I<00FC100383300E00B01C00703800 30300030700010600010E00010E00000E00000E00000E00000E00000E000106000107000 103000203800201C00400E008003830000FC0014177E9619>I<FFFF001C01C01C00E01C 00301C00381C00181C001C1C000C1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C 000C1C001C1C001C1C00381C00301C00601C01C0FFFF0017177F961B>I<FFFFE01C00E0 1C00601C00201C00101C00101C00101C04001C04001C04001C0C001FFC001C0C001C0400 1C04081C04081C00081C00181C00101C00101C00301C00F0FFFFF015177F9618>I<FFFF E01C00E01C00601C00201C00101C00101C00101C04001C04001C04001C0C001FFC001C0C 001C04001C04001C04001C00001C00001C00001C00001C00001C0000FFC00014177F9617 >I<007E080381980600580C0038180018300018700008700008E00008E00000E00000E0 0000E00000E003FEE000387000387000383000381800380C00380600380380D8007F0817 177E961C>I<FF83FE1C00701C00701C00701C00701C00701C00701C00701C00701C0070 1C00701FFFF01C00701C00701C00701C00701C00701C00701C00701C00701C00701C0070 FF83FE17177F961A>I<FFE00E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E00FFE00B177F960D>I<0FF800E000E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E0E0E0E0E0C1C061801F 000D177E9612>I<FF80FE1C00781C00601C00401C00801C01001C06001C08001C10001C 38001C78001C9C001D0E001E0E001C07001C03801C01C01C01C01C00E01C00701C00781C 007CFF80FF18177F961B>I<FFC0001C00001C00001C00001C00001C00001C00001C0000 1C00001C00001C00001C00001C00001C00001C00201C00201C00201C00601C00601C0040 1C00C01C03C0FFFFC013177F9616>I<FE0003F81E0003C0170005C0170005C0170005C0 138009C0138009C011C011C011C011C011C011C010E021C010E021C0107041C0107041C0 107041C0103881C0103881C0101D01C0101D01C0100E01C0100E01C0380E01C0FE040FF8 1D177F9620>I<FC00FE1E00381F001017001013801011C01011C01010E0101070101038 10103810101C10100E10100F101007101003901001D01001D01000F01000701000303800 30FE001017177F961A>I<00FC000303000E01C01C00E0380070300030700038600018E0 001CE0001CE0001CE0001CE0001CE0001CE0001C7000387000383000303800701C00E00E 01C003030000FC0016177E961B>I<FFFE001C03801C00C01C00601C00701C00701C0070 1C00701C00601C00C01C03801FFE001C00001C00001C00001C00001C00001C00001C0000 1C00001C00001C0000FF800014177F9618>I<00FC000303000E01C01C00E03800703000 30700038700038E0001CE0001CE0001CE0001CE0001CE0001CE0001C6000187000383000 303878701C84E00E85C003830000FE0400020400030400038C0001F80001F80000F0161D 7E961B>I<FFFC001C03801C00C01C00E01C00701C00701C00701C00701C00E01C00C01C 03801FFE001C07801C01C01C00E01C00E01C00E01C00E01C00E01C00E11C00E11C0072FF 803C18177F961A>I<0FC4302C601C400CC004C004C004E00070007F003FE00FF801FC00 1C000E0006800680068006C004E008D81087E00F177E9614>I<7FFFF860381840380840 380880380480380480380400380000380000380000380000380000380000380000380000 380000380000380000380000380000380000380003FF8016177F9619>I<FF80FE1C0038 1C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C0010 1C00101C00101C00101C00100E0020060020030040018180007E0017177F961A>I<FF00 7E3C00381C00101C00100E00200E00200F006007004007004003808003808003C18001C1 0001C10000E20000E20000F20000740000740000380000380000380000100017177F961A >I<FF07FC3F803C00E00E001C00E004001C00E004001C017004000E017008000E017008 000E023808000702381000070238100007041C100003841C200003841C200003880E2000 01C80E400001C80E400001D007400000F007800000F007800000F007800000E003800000 60030000006003000021177F9624>I<FF83FC1F01E00E008007008007810003820001C2 0001E40000E800007800007800003800007C00005E00008E000187000107800203800601 C00401E00C00E01C00F0FF03FE17177F961A>I<FF803F801E001C000E00080007001000 078030000380200001C0400001E0400000E0800000F1800000710000003A0000003E0000 001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000 00FF8000191780961A>I<FCFCC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0FCFC06217D980A>91 D<204020404080408081008100E1C0F1E0F1E060C0 0B0A7B9612>I<FCFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0CFCFC062180980A>I<3FC0706070302038003803F81E3830387038E039E039E07970 FF1F1E100E7F8D12>97 D<F8000038000038000038000038000038000038000038000038 000039F0003E0C0038060038070038030038038038038038038038038038030038070038 0600361C0021F00011177F9614>I<07F01838303870106000E000E000E000E000600070 083008183007C00D0E7F8D10>I<003E00000E00000E00000E00000E00000E00000E0000 0E00000E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E0070 0E00301E00182E0007CF8011177F9614>I<0FC0186030307038E018FFF8E000E000E000 600070083010183007C00D0E7F8D10>I<03E006700E701C201C001C001C001C001C00FF 801C001C001C001C001C001C001C001C001C001C001C001C007F800C1780960B>I<0F9E 18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C006C006600C 38380FE010157F8D12>I<F8000038000038000038000038000038000038000038000038 000038F8003B1C003C0E00380E00380E00380E00380E00380E00380E00380E00380E0038 0E00380E00FE3F8011177F9614>I<307878300000000000F83838383838383838383838 38FE07177F960A>I<0300078007800300000000000000000000001F8003800380038003 80038003800380038003800380038003800380038003804380E300E7007C00091D82960B >I<F80038003800380038003800380038003800383E383838303840388039803FC039E0 38E038F03878383C383CFE7F10177F9613>I<F838383838383838383838383838383838 3838383838FE07177F960A>I<F8F83E003B1CC7003C0F0380380E0380380E0380380E03 80380E0380380E0380380E0380380E0380380E0380380E0380380E0380FE3F8FE01B0E7F 8D1E>I<F8F8003B1C003C0E00380E00380E00380E00380E00380E00380E00380E00380E 00380E00380E00FE3F80110E7F8D14>I<07C018303018600C600CE00EE00EE00EE00EE0 0E701C3018183007C00F0E7F8D12>I<F9F0003E1C003806003807003803003803803803 80380380380380380300380700380E003E1C0039F0003800003800003800003800003800 00FE000011147F8D14>I<07C2001C2600381E00700E00600E00E00E00E00E00E00E00E0 0E00600E00700E00301E001C2E0007CE00000E00000E00000E00000E00000E00003F8011 147F8D13>I<F9E03A703C703820380038003800380038003800380038003800FF000C0E 7F8D0E>I<1F4060C0C040C040E000FF007F801FC001E080608060C060E0C09F000B0E7F 8D0E>I<080008000800180018003800FFC0380038003800380038003800380038403840 384038401C800F000A147F930E>I<F83E00380E00380E00380E00380E00380E00380E00 380E00380E00380E00380E00381E001C2E0007CF80110E7F8D14>I<FE1F380E3C0C1C08 1C080E100E100720072007E003C003C001800180100E7F8D13>I<FEFE7C383838383810 383C101C3C201C4C201E4E600ECE400E8740078780070380070380030300020100160E7F 8D19>I<FE3F3C1C1C100E20074007C0038001C002E004F008701838383CFC7F100E7F8D 13>I<FE1F380E3C0C1C081C080E100E100720072007E003C003C00180018001000100E2 00E200A400780010147F8D13>I<FFF0C0E080E081C08380878007000E001E081C083818 70107030FFF00D0E7F8D10>I<FFFF801101808812>I E /Fz 30 120 df<3C007E00FF00FF00FF80FF807F803D800180018003000300070006000C001C00 3800200009127CA210>39 D<3C7EFFFFFFFF7E3C0000000000003C7EFFFFFFFF7E3C0816 7C9510>58 D<0000300000000078000000007800000000FC00000000FC00000000FC0000 0001FE00000001FE00000003FF000000037F000000037F000000063F800000063F800000 0C3FC000000C1FC000001C1FE00000180FE00000180FE000003007F000003007F0000070 07F800006003F800007FFFF80000FFFFFC0000C001FC00018001FE00018000FE00038000 FF000300007F000300007F000600003F800F00003F80FFE007FFFCFFE007FFFC26227EA1 2B>65 D<0001FF0040001FFFC1C0007F80F3C001FC001FC003F0000FC007E00007C00FC0 0003C01FC00003C03F800001C03F800001C07F800000C07F000000C07F000000C0FF0000 0000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000 007F000000007F000000C07F800000C03F800000C03F800001C01FC00001800FC0000180 07E000030003F000060001FC001C00007F807800001FFFE0000001FF000022227DA129> 67 D<0001FF0020001FFFE0E0007F8079E001FC001FE003F80007E007E00003E00FC000 01E01FC00001E03F800000E03F800000E07F800000607F000000607F00000060FF000000 00FF00000000FF00000000FF00000000FF00000000FF00000000FF0007FFFEFF0007FFFE 7F00000FE07F00000FE07F80000FE03F80000FE03F80000FE01FC0000FE00FE0000FE007 E0000FE003F8000FE001FC001FE0007F8073E0001FFFE1E00001FF806027227DA12D>71 D<FFF0000007FF80FFF800000FFF8007F800000FF00006FC00001BF00006FC00001BF000 067E000033F000067E000033F000067E000033F000063F000063F000063F000063F00006 1F8000C3F000061F8000C3F000060FC00183F000060FC00183F0000607E00303F0000607 E00303F0000603F00603F0000603F00603F0000603F00603F0000601F80C03F0000601F8 0C03F0000600FC1803F0000600FC1803F00006007E3003F00006007E3003F00006003F60 03F00006003F6003F00006001FC003F00006001FC003F00006001FC003F00006000F8003 F00006000F8003F000FFF007007FFF80FFF007007FFF8031227EA136>77 D<FFF0000FFFFFF8000FFF07FC00006007FE00006006FF000060067F000060063F800060 061FC00060060FE00060060FF000600607F800600603FC00600601FE00600600FE006006 007F006006003F806006001FC06006001FE06006000FF060060007F860060003FC600600 01FC60060000FE600600007F600600003FE00600003FE00600001FE00600000FE0060000 07E006000003E006000001E006000000E0FFF0000060FFF000006028227EA12D>I<FFFF FF8000FFFFFFF00007F003F80007F001FC0007F000FE0007F0007F0007F0007F0007F000 7F8007F0007F8007F0007F8007F0007F8007F0007F8007F0007F0007F0007F0007F000FE 0007F001FC0007F003F80007FFFFF00007FFFF800007F000000007F000000007F0000000 07F000000007F000000007F000000007F000000007F000000007F000000007F000000007 F000000007F000000007F0000000FFFF800000FFFF80000021227EA127>80 D<7FFFFFFFC07FFFFFFFC07E03F80FC07803F803C07003F801C06003F800C0E003F800E0 E003F800E0C003F80060C003F80060C003F80060C003F800600003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 00000003F800000003F8000001FFFFF00001FFFFF00023217EA028>84 D<FFFF801FFEFFFF801FFE07F00000C007F00000C007F00000C007F00000C007F00000C0 07F00000C007F00000C007F00000C007F00000C007F00000C007F00000C007F00000C007 F00000C007F00000C007F00000C007F00000C007F00000C007F00000C007F00000C007F0 0000C007F00000C007F00000C007F00000C007F00000C003F000018003F800018001F800 030000FC000600007E000C00003F807800000FFFF0000000FF800027227EA12C>I<FFFF 8007FFFFFF8007FF07F00000E007F800006003F80000C003FC0000C001FC00018001FC00 018001FE00038000FE00030000FF000700007F000600007F800600003F800C00003FC00C 00001FC01800001FC01800000FE03000000FE03000000FF070000007F060000007F86000 0003F8C0000003FCC0000001FD80000001FD80000000FF00000000FF00000000FF000000 007E000000007E000000003C000000003C0000000018000028227FA12B>I<07FE00001F FF80003F07E0003F03F0003F01F0003F01F8001E01F8000001F8000001F800003FF80003 FDF8001F81F8003E01F8007C01F800F801F800F801F800F801F800F801F8007C02F8007E 0CF8001FF87F8007E03F8019167E951C>97 D<00FF8007FFE00F83F01F03F03E03F07E03 F07C01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00 181F00300FC06007FFC000FF0015167E9519>99 D<0001FF000001FF0000003F0000003F 0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F 0000FE3F0007FFBF000FC1FF001F007F003E003F007E003F007C003F007C003F00FC003F 00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F007C003F007E003F003E003F 001F007F000F81FF0007FF3FE001FC3FE01B237EA220>I<00FE0007FF800F83C01E01E0 3E00F07E00F07C00F87C0078FC0078FFFFF8FFFFF8FC0000FC0000FC00007C00007C0000 3E00183E00181F00300F80E003FFC000FF0015167E951A>I<001F8000FFE001F1F003E3 F007E3F00FC3F00FC1E00FC0000FC0000FC0000FC0000FC0000FC000FFFE00FFFE000FC0 000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0 000FC0000FC0000FC0000FC0000FC0007FFC007FFC0014237EA212>I<00FE0F8003FF9F C00F83E3C01F01F3C01E00F0003E00F8003E00F8003E00F8003E00F8003E00F8001E00F0 001F01F0000F83E0000BFF800008FE000018000000180000001C0000001FFFE0001FFFFC 000FFFFF0007FFFF001FFFFF807C001FC078000FC0F80007C0F80007C0F80007C07C000F 803E001F001F807E000FFFFC0001FFE0001A217F951D>I<FF800000FF8000001F800000 1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000 1F8000001F83F0001F8FFC001F987E001FA03E001FC03F001FC03F001F803F001F803F00 1F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F00 1F803F001F803F001F803F00FFF1FFE0FFF1FFE01B237DA220>I<1E003F007F807F807F 807F803F001E00000000000000000000000000FF80FF801F801F801F801F801F801F801F 801F801F801F801F801F801F801F801F801F801F801F80FFF0FFF00C247EA30F>I<FF80 0000FF8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 00001F8000001F8000001F8000001F80FF801F80FF801F803C001F8030001F80E0001F81 C0001F8300001F8600001F9E00001FBE00001FFF00001FDF80001F8FC0001F07C0001F07 E0001F03F0001F01F8001F00F8001F00FC001F007E00FFE1FFC0FFE1FFC01A237EA21E> 107 D<FF80FF801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F 801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F80FFF0FF F00C237EA20F>I<FF03F803F800FF0FFE0FFE001F183F183F001F201F201F001F401FC0 1F801F401FC01F801F801F801F801F801F801F801F801F801F801F801F801F801F801F80 1F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F80 1F801F801F801F801F801F801F801F801F801F80FFF0FFF0FFF0FFF0FFF0FFF02C167D95 31>I<FF03F000FF0FFC001F187E001F203E001F403F001F403F001F803F001F803F001F 803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F 803F001F803F001F803F00FFF1FFE0FFF1FFE01B167D9520>I<00FF0007FFE00F81F01F 00F83E007C7C003E7C003E7C003EFC003FFC003FFC003FFC003FFC003FFC003FFC003F7C 003E7E007E3E007C1F00F80F81F007FFE000FF0018167E951D>I<FF87F000FFBFFC001F F07E001FC01F001F800F801F800FC01F800FC01F8007E01F8007E01F8007E01F8007E01F 8007E01F8007E01F8007E01F8007C01F800FC01F800FC01F801F801FC01F001FF07E001F BFFC001F8FE0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F 800000FFF00000FFF000001B207E9520>I<FF0F80FF1FE01F33F01F63F01F43F01F43F0 1FC1E01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8000 1F80001F8000FFF800FFF80014167E9518>114 D<07F9801FFF80380780700380F00180 F00180F80000FF0000FFF8007FFE003FFF001FFF8007FF80003FC0C007C0C003C0E003C0 E003C0F00380FC0F00EFFE00C3F80012167E9517>I<0180000180000180000180000380 000380000780000780000F80003F8000FFFF00FFFF001F80001F80001F80001F80001F80 001F80001F80001F80001F80001F80001F80001F81801F81801F81801F81801F81800F83 000FC30007FE0001F80011207F9F16>I<FF81FF00FF81FF001F803F001F803F001F803F 001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F 001F803F001F803F001F803F001F807F001F80FF000FC1BF0007FF3FE001FC3FE01B167D 9520>I<FFF3FF83FCFFF3FF83FC1F807C00E00FC07C00C00FC03E00C00FE03E01C007E0 7F018007E07F018003F07F030003F0CF830003F8CF870001F9CFC60001F987C60000FD87 EC0000FF03EC0000FF03FC00007F03F800007E01F800003E01F000003C00F000003C00F0 00001800600026167F9529>119 D E /FA 90 125 df<00030000000300000007800000 078000000FC000000BC0000013E0000011E0000021F0000020F0000040F8000040780000 807C0000803C0001003E0001001E0002001F0002000F0004000F8004000780080007C008 0003C0100001E0300001F0200000F0600000F87FFFFFF8FFFFFFFCFFFFFFFC1E1D7E9C23 >1 D<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E 01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E 01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E 01C0000E01C0007F87FC001A1D809C18>11 D<007E0001C1800301800703C00E03C00E01 800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8151D 809C17>I<007FC001C1C00303C00703C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17>I<003F07E00001C09C18 000380F018000701F03C000E01E03C000E00E018000E00E000000E00E000000E00E00000 0E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00 E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D809C23>I<00 3F07FC0001C0DC1C000381F03C000701F03C000E01E01C000E00E01C000E00E01C000E00 E01C000E00E01C000E00E01C000E00E01C00FFFFFFFC000E00E01C000E00E01C000E00E0 1C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C 000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80 211D809C23>I<6060F0F0F8F86868080808080808101010102020404080800D0C7F9C15> 34 D<000301800003018000030180000603000006030000060300000603000006030000 0C0600000C0600000C0600000C060000180C007FFFFFF8FFFFFFFC003018000030180000 3018000030180000603000006030000060300000603000FFFFFFFC7FFFFFF800C0600001 80C0000180C0000180C0000180C000030180000301800003018000030180000603000006 030000060300001E257E9C23>I<0080008007E01898308460824081C087C08FC08FC086 E08070807E803FC01FF00FF803FC00BE008E00876087F083F083E0838082408240842088 189007E00080008010217E9E15>I<00E000000310000006080000060800000E0800000E 0800000E0800000E0800000E1000000E1000000E2000000740000007403FE007800F8007 800600038004000780040009C0080011C0100030E0100020F0200060702000E0384000E0 3C8000E01C8000E00F0020E0070020700780403009C0401830E1800FC03F001B1F7E9D20 >38 D<60F0F8680808081010204080050C7C9C0C>I<00800100020006000C000C001800 18003000300030006000600060006000E000E000E000E000E000E000E000E000E000E000 E000E0006000600060006000300030003000180018000C000C000600020001000080092A 7C9E10>I<8000400020003000180018000C000C00060006000600030003000300030003 800380038003800380038003800380038003800380038003000300030003000600060006 000C000C00180018003000200040008000092A7E9E10>I<0300030003000300C30CE31C 73381FE0078007801FE07338E31CC30C03000300030003000E127D9E15>I<0006000000 060000000600000006000000060000000600000006000000060000000600000006000000 0600000006000000060000FFFFFFE0FFFFFFE00006000000060000000600000006000000 06000000060000000600000006000000060000000600000006000000060000000600001B 1C7E9720>I<60F0F0701010101020204080040C7C830C>I<FFE0FFE00B0280890E>I<60 F0F06004047C830C>I<00010003000600060006000C000C000C00180018001800300030 00300060006000C000C000C0018001800180030003000300060006000C000C000C001800 18001800300030003000600060006000C000C00010297E9E15>I<03C00C301818300C30 0C700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E007600660 06700E300C300C18180C3007E0101D7E9B15>I<010007003F00C7000700070007000700 070007000700070007000700070007000700070007000700070007000700070007000700 0700FFF80D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E00 0E001C001C00380070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15 >I<07E01830201C201C781E780E781E381E001C001C00180030006007C00030001C001C 000E000F000F700FF80FF80FF80FF00E401C201C183007C0101D7E9B15>I<000C00000C 00001C00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C 00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C 00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E0 2C303018301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0 101D7E9B15>I<00F0030C04040C0E181E301E300C700070006000E3E0E430E818F00CF0 0EE006E007E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I< 4000007FFF807FFF007FFF00400200800400800400800800001000001000002000006000 00400000C00000C00001C000018000018000038000038000038000038000078000078000 078000078000078000078000030000111D7E9B15>I<03E00C301008200C200660066006 700670067C0C3E183FB01FE007F007F818FC307E601E600FC007C003C003C003C0036002 6004300C1C1007E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E0 07E007E0076007700F300F18170C2707C700060006000E300C780C78187018203010C00F 80101D7E9B15>I<60F0F0600000000000000000000060F0F06004127C910C>I<60F0F060 0000000000000000000060F0F0701010101020204080041A7C910C>I<7FFFFFC0FFFFFF E00000000000000000000000000000000000000000000000000000000000000000FFFFFF E07FFFFFC01B0C7E8F20>61 D<0FE03038401CE00EF00EF00EF00E000C001C0030006000 C0008001800100010001000100010001000000000000000000000003000780078003000F 1D7E9C14>63 D<000600000006000000060000000F0000000F0000000F00000017800000 1780000037C0000023C0000023C0000043E0000041E0000041E0000080F0000080F00000 80F000010078000100780001FFF80002003C0002003C0002003C0004001E0004001E000C 001F000C000F001E001F00FF00FFF01C1D7F9C1F>65 D<FFFFC0000F0078000F003C000F 001E000F000E000F000F000F000F000F000F000F000F000F000E000F001E000F003C000F 00F8000FFFF0000F003C000F001E000F000F000F0007000F0007800F0007800F0007800F 0007800F0007800F000F000F000F000F001E000F007800FFFFE000191C7F9B1D>I<001F 808000E0618001801980070007800E0003801C0003801C00018038000180780000807800 008070000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000 0000700000807800008078000080380000801C0001001C0001000E000200070004000180 080000E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E000F0007 000F0007000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E00F0001 E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007 800F0007000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F00 0C0F00040F00040F00060F00020F00020F01020F01000F01000F01000F03000FFF000F03 000F01000F01000F01000F01010F00010F00020F00020F00020F00060F00060F000C0F00 3CFFFFFC181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F00040F00040F 01040F01000F01000F01000F03000FFF000F03000F01000F01000F01000F01000F00000F 00000F00000F00000F00000F00000F00000F0000FFF800161C7E9B1B>I<001F808000E0 618001801980070007800E0003801C0003801C0001803800018078000080780000807000 0080F0000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0000F807000 07807800078078000780380007801C0007801C0007800E00078007000B800180118000E0 6080001F80001C1E7E9C21>I<FFF0FFF00F000F000F000F000F000F000F000F000F000F 000F000F000F000F000F000F000F000F000F000F000F000F000F000F000FFFFF000F000F 000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F 000F000F000F000F000F000F00FFF0FFF01C1C7F9B1F>I<FFF00F000F000F000F000F00 0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00 0F000F000F00FFF00C1C7F9B0F>I<07FF80007C00003C00003C00003C00003C00003C00 003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00 003C00003C00703C00F83C00F83C00F8380070780040700030E0000F8000111D7F9B15> I<FFF01FE00F0007800F0006000F0004000F0008000F0010000F0020000F0040000F0080 000F0100000F0200000F0600000F0F00000F1780000F2780000F43C0000F81E0000F01E0 000F00F0000F0078000F0078000F003C000F003E000F001E000F000F000F000F800F000F C0FFF03FF01C1C7F9B20>I<FFF8000F80000F00000F00000F00000F00000F00000F0000 0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00080F0008 0F00080F00180F00180F00100F00300F00700F01F0FFFFF0151C7E9B1A>I<FF8000FF80 0F8000F8000F8000F8000BC00178000BC00178000BC001780009E002780009E002780008 F004780008F004780008F0047800087808780008780878000878087800083C107800083C 107800083C107800081E207800081E207800081E207800080F407800080F407800080780 78000807807800080780780008030078001C03007800FF8307FF80211C7E9B26>I<FF00 1FF00F8003800FC001000BC0010009E0010008F0010008F0010008780100083C0100083E 0100081E0100080F0100080F8100080781000803C1000801E1000801F1000800F1000800 790008007D0008003D0008001F0008001F0008000F0008000700080003001C000300FF80 01001C1C7F9B1F>I<003F800000E0E0000380380007001C000E000E001C0007003C0007 8038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001 E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C0007 000E000E0007001C000380380000E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00 780F003C0F001C0F001E0F001E0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF 800F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00 00FFF000171C7E9B1C>I<003F800000E0E0000380380007001C000E000E001C0007003C 00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F0 0001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C0E07801C 1107000E208E0007205C0003A0780000F0E020003FE0200000602000003060000038E000 003FC000003FC000001F8000000F001B257E9C20>I<FFFF00000F01E0000F0078000F00 3C000F001C000F001E000F001E000F001E000F001E000F001C000F003C000F0078000F01 E0000FFF00000F01E0000F0070000F0078000F003C000F003C000F003C000F003C000F00 3C000F003C000F003C100F003C100F001C100F001C10FFF00E20000003C01C1D7E9B1F> I<07E0801C1980300580300380600180E00180E00080E00080E00080F00000F800007C00 007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001 C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F 00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E> I<FFF01FF00F0003800F0001000F0001000F0001000F0001000F0001000F0001000F0001 000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F0001 000F0001000F0001000F0001000F00010007000200078002000380040001C0040000E018 0000706000000F80001C1D7F9B1F>I<FFE00FF01F0003C01F0001800F0001000F000100 078002000780020007C0020003C0040003C0040003E00C0001E0080001E0080000F01000 00F0100000F810000078200000782000003C4000003C4000003C4000001E8000001E8000 001F8000000F0000000F00000006000000060000000600001C1D7F9B1F>I<FFE1FFC0FF 1F003E003C1E003C00180F001E00100F001E00100F001E001007801F002007801F002007 801F002003C027804003C027804003C027804001E043C08001E043C08001E043C08000F0 81E10000F081E10000F081E10000F900F300007900F200007900F200007E007E00003E00 7C00003E007C00003C003C00001C003800001C00380000180018000008001000281D7F9B 2B>I<FFF07FC00FC01E0007800C0007C0080003C0100001E0200001F0200000F0400000 788000007C8000003D0000003E0000001F0000000F0000000F8000000F80000013C00000 23E0000021E0000040F0000080F8000080780001007C0002003E0002001E0006001F001F 001F80FF807FF01C1C7F9B1F>I<FFF003FC0F8001E0078000C007C0008003C0010003E0 030001E0020000F0040000F8040000780800007C1800003C1000003E2000001F2000000F 4000000FC000000780000007800000078000000780000007800000078000000780000007 8000000780000007800000078000007FF8001E1C809B1F>I<7FFFF07C01F07001E06003 C06003C0400780400F80400F00401E00001E00003C00007C0000780000F00000F00001E0 0003E00003C0100780100780100F00101F00301E00203C00203C00607800E0F803E0FFFF E0141C7E9B19>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0FEFE07297C9E0C>I<08081010202040404040808080808080 B0B0F8F8787830300D0C7A9C15>I<FEFE06060606060606060606060606060606060606 060606060606060606060606060606060606FEFE0729809E0C>I<1FC000307000783800 781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40 603C40304E801F870012127E9115>97 D<FC00001C00001C00001C00001C00001C00001C 00001C00001C00001C00001C00001C7C001D87001E01801C00C01C00E01C00601C00701C 00701C00701C00701C00701C00701C00601C00E01C00C01E018019070010FC00141D7F9C 17>I<03F80C0C181E301E700C6000E000E000E000E000E000E00060007002300218040C 1803E00F127F9112>I<001F800003800003800003800003800003800003800003800003 8000038000038003F3800E0B80180780300380700380600380E00380E00380E00380E003 80E00380E003806003807003803003801807800E1B8003E3F0141D7F9C17>I<07E00C30 1818300C700E6006E006FFFEE000E000E000E00060007002300218040C1803E00F127F91 12>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<00038007 C4C01C78C0383880301800701C00701C00701C00701C003018003838001C700027C00020 00002000003000003FF8001FFF001FFF802003806001C0C000C0C000C0C000C060018030 03001C0E0007F800121C7F9215>I<FC00001C00001C00001C00001C00001C00001C0000 1C00001C00001C00001C00001C7C001C87001D03001E03801C03801C03801C03801C0380 1C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0141D7F9C17> I<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C001C 001C001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<00C001E001E0 00C0000000000000000000000000000007E000E000E000E000E000E000E000E000E000E0 00E000E000E000E000E000E000E000E000E000E000E060E0F0C0F1C061803E000B25839C 0D>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000 1C0FE01C07801C06001C0C001C10001C20001C40001CE0001DE0001E70001C78001C3800 1C3C001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC001C001C001C001C001C 001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C001C001C00FF80091D7F9C0C>I<FC7E07E0001C838838001D019018001E01E0 1C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C 001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF80 21127F9124>I<FC7C001C87001D03001E03801C03801C03801C03801C03801C03801C03 801C03801C03801C03801C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E 1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0E001C060018070 03803003001806000E1C0003F00012127F9115>I<FC7C001D87001E01801C01C01C00E0 1C00E01C00701C00701C00701C00701C00701C00701C00E01C00E01C01C01E01801D0700 1CFC001C00001C00001C00001C00001C00001C00001C0000FF8000141A7F9117>I<03E0 800E1980180580380780700380700380E00380E00380E00380E00380E00380E003807003 807003803807801807800E1B8003E3800003800003800003800003800003800003800003 80001FF0141A7F9116>I<FCE01D381E781E781C301C001C001C001C001C001C001C001C 001C001C001C001C00FFC00D127F9110>I<1F9020704030C010C010E010F8007F803FE0 0FF000F880388018C018C018E010D0608FC00D127F9110>I<04000400040004000C000C 001C003C00FFE01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C 100E2003C00C1A7F9910>I<FC1F801C03801C03801C03801C03801C03801C03801C0380 1C03801C03801C03801C03801C03801C03801C07800C07800E1B8003E3F014127F9117> I<FF07E03C03801C01001C01000E02000E02000F060007040007040003880003880003C8 0001D00001D00000E00000E00000E00000400013127F9116>I<FF3FC7E03C0703C01C07 01801C0701001C0B01000E0B82000E0B82000E1182000711C4000711C4000720C40003A0 E80003A0E80003C0680001C0700001C0700001803000008020001B127F911E>I<FF0FE0 1E07001C06000E040007080003900003B00001E00000E00000F00001F000013800021C00 041C000C0E001807003C0780FE1FF014127F9116>I<FF07E03C03801C01001C01000E02 000E02000F060007040007040003880003880003C80001D00001D00000E00000E00000E0 00004000004000008000008000F08000F10000F30000660000380000131A7F9116>I<7F FC70386038407040F040E041C003C0038007000F040E041C043C0C380870087038FFF80E 127F9112>I<FFFFF01401808B15>I<FFFFFFFFFF802901808B2A>I E /FB 58 124 df<0000FE000003018000060180000C0380001C0180001C000000180000 0038000000380000003800000038000003FFFE0000700E0000700E0000700E0000701C00 00701C0000E01C0000E01C0000E0380000E0380000E0380001C0380001C0720001C07200 01C0720001C07200038034000380180003800000030000000300000007000000C6000000 E6000000CC000000780000001925819C17>12 D<0000FE0FF0000307380C000607700C00 0E06601C001C00E00C001C00C000001C01C000001C01C000003801C000003801C0000038 03800003FFFFFFF000380380700070038070007003807000700700E000700700E0007007 00E000E00700E000E00701C000E00701C000E00E01C000E00E01C001C00E038801C00E03 8801C00E038801C01C039001C01C019001801C00E003801C000003803800000300380000 0300300000C730300000E638600000CC30C00000781F0000002625819C25>14 D<183C3C3C0404080810204080060C779C0D>39 D<00030006000800180030006000C000 C0018003000300060006000C000C001C0018001800380030003000700070006000600060 006000E000E000E000E000E0006000600060006000600020003000100008000800102A7B 9E11>I<001000100008000C000400060006000600060006000700070007000700070006 000600060006000E000E000C000C001C001800180038003000300060006000C000C00180 0300030006000C00180010006000C000102A809E11>I<18387838080810102040408005 0C7D830D>44 D<FFC0FFC0FFC00A037D890F>I<3078F06005047C830D>I<001F000060C0 0080C00100600200600240600440E00440E00440E00481C00301C000038000070000FC00 001C00000600000600000700000700000700000700700700E00E00800E00801C00401800 40300020E0001F8000131D7D9B15>51 D<060F0F06000000000000000000003078F06008 127C910D>58 D<0FFFFFE01FFFFFF0000000000000000000000000000000000000000000 0000000000000000000000FFFFFF807FFFFF001C0C7C8F20>61 D<000018000000180000 0038000000380000007800000078000000B800000138000001380000023C0000021C0000 041C00000C1C0000081C0000101C0000101C0000201C0000201C00007FFC0000C01C0000 801C0001001C0001001E0002000E0002000E0004000E000C000E001C001E00FF00FFC01A 1D7E9C1F>65 D<01FFFF00003C0380003801C0003800E0003800E0003800E0007000E000 7001E0007001E0007003C000E0038000E00F0000E01E0000FFFC0001C00E0001C0070001 C0078001C007800380078003800780038007800380078007000F0007000E0007001E0007 003C000E00F000FFFFC0001B1C7E9B1D>I<0003F020001E0C60003002E000E003C001C0 01C0038001C0070000C00E0000801E0000801C0000803C0000803C000000780000007800 000078000000F0000000F0000000F0000000F0000000F0000400F0000400F0000400F000 0800700008007000100038002000180040000C0180000706000001F800001B1E7A9C1E> I<01FFFF00003C03C0003800E0003800E000380070003800700070007800700038007000 380070007800E0007800E0007800E0007800E0007801C000F001C000F001C000F001C000 E0038001E0038001C0038003C0038003800700070007000E0007001C00070038000E00E0 00FFFF80001D1C7E9B1F>I<01FFFFF0003C00F000380030003800200038002000380020 0070002000700020007008200070080000E0100000E0100000E0300000FFF00001C02000 01C0200001C0200001C02000038040800380008003800080038001000700010007000300 07000200070006000E003C00FFFFFC001C1C7E9B1C>I<01FFFFF0003C00F00038003000 38002000380020003800200070002000700020007008200070080000E0100000E0100000 E0300000FFF00001C0200001C0200001C0200001C0200003804000038000000380000003 800000070000000700000007000000070000000F000000FFF000001C1C7E9B1B>I<0003 F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000801E0000801C00 00803C0000803C000000780000007800000078000000F0000000F0000000F001FF80F000 1E00F0001C00F0001C00F0001C00F0001C00700038007000380038003800180078000C00 90000707100001F800001B1E7A9C20>I<01FFC3FF80003C007800003800700000380070 0000380070000038007000007000E000007000E000007000E000007000E00000E001C000 00E001C00000E001C00000FFFFC00001C003800001C003800001C003800001C003800003 8007000003800700000380070000038007000007000E000007000E000007000E00000700 0E00000F001E0000FFE1FFC000211C7E9B1F>I<03FF0078007000700070007000E000E0 00E000E001C001C001C001C0038003800380038007000700070007000E000E000E000E00 1E00FFC0101C7D9B10>I<01FFC07F80003C001E00003800180000380020000038004000 0038008000007002000000700400000070080000007010000000E040000000E0C0000000 E1C0000000E2E0000001C4E0000001D070000001E070000001C070000003803800000380 380000038018000003801C000007001C000007000E000007000E000007000E00000F000F 0000FFE07FC000211C7E9B20>75 D<01FE0001FE003E0001E0002E0003C0002E0005C000 2E0005C0002E0009C0004E000B80004E001380004E002380004700238000870047000087 004700008700870000870107000107010E000107020E000107040E000107040E00020708 1C000203881C000203901C000203A01C000403A038000403C038000403C038000C038038 001C03007800FF8307FF00271C7E9B25>77 D<01FC00FF80001C001C00002E001800002E 001000002E001000002700100000470020000043002000004380200000438020000081C0 40000081C040000081C040000080E040000100E080000100708000010070800001007080 0002003900000200390000020039000002001D000004001E000004000E000004000E0000 0C000E00001C00040000FF80040000211C7E9B1F>I<0007F000001C1C0000700E0000E0 070001C0038003800380070003800E0003C01E0003C01C0003C03C0003C03C0003C07800 03C0780003C0780003C0F0000780F0000780F0000780F0000F00F0000F00F0000E00F000 1E00F0003C0070003800700070007800E0003801C0001C0380000E0E000003F800001A1E 7A9C20>I<01FFFE00003C0380003801C0003800E0003800E0003800E0007001E0007001 E0007001E0007001C000E003C000E0038000E0070000E01C0001FFF00001C0000001C000 0001C0000003800000038000000380000003800000070000000700000007000000070000 000F000000FFE000001B1C7E9B1C>I<0007F000001C1C0000700E0000E0070001C00780 03800380070003800E0003C01E0003C01C0003C03C0003C03C0003C0780003C0780003C0 780003C0F0000780F0000780F0000780F0000F00F0000F00F0000E00F0001E00F0001C00 70783800708070007104E0003905C0001D0780000F0E040003FC040000040C0000060800 000E1800000FF0000007F0000007E000000380001A257A9C20>I<01FFFE00003C078000 3801C0003801E0003800E0003800E0007001E0007001E0007001E0007003C000E0038000 E0070000E01C0000FFE00001C0300001C0180001C01C0001C01C0003801C0003801C0003 801C0003801C0007003C0007003C2007003C2007003C200F003C40FFE01E8000000F001B 1D7E9B1E>I<000F8400304C00403C008018010018030018030018060010060010060000 07000007000003E00003FC0001FF00007F800007C00001C00001C00000C00000C02000C0 2000C0600180600180600300600200F00400CC180083E000161E7D9C17>I<1FFFFFC01C 0701C0300E00C0200E0080600E0080400E0080401C0080801C0080801C0080001C000000 3800000038000000380000003800000070000000700000007000000070000000E0000000 E0000000E0000000E0000001C0000001C0000001C0000001C0000003C000007FFE00001A 1C799B1E>I<7FF03FE00F0007000E0006000E0004000E0004000E0004001C0008001C00 08001C0008001C0008003800100038001000380010003800100070002000700020007000 200070002000E0004000E0004000E0004000E0008000E0008000E0010000600200006004 0000300800001830000007C000001B1D789B1F>I<FF801FC03C0007001C0004001C0004 001C0008001C0010001C0010001C0020001C0020001C0040001C0080001C0080000E0100 000E0100000E0200000E0400000E0400000E0800000E0800000E1000000E2000000F2000 00074000000740000007800000070000000700000006000000060000001A1D779B1F>I< FF83FF07F03C007001C038007001803800F001003800F001003801700200380170040038 027004003802700800380470080038047010003808701000380870200038107020003830 70400038207040001C407080001C407080001C807100001C807100001D007200001D0072 00001E007400001E007400001C003800001C003800001800300000180020000010002000 00241D779B29>I<01FF81FE003E0078001C0060001C00C0001E0080000E0100000F0200 0007040000070800000790000003A0000003E0000001C0000001C0000001E0000002E000 0004E0000008F00000107000002070000060380000C0380000803C0001001C0002001C00 06001E001E001E00FF007FC01F1C7E9B1F>I<01E307170C0F180F380E300E700E700EE0 1CE01CE01CE01CE039E039E0396079319A1E0C10127C9115>97 D<3F00070007000E000E 000E000E001C001C001C001C0039E03A183C0C380C700C700E700E700EE01CE01CE01CE0 18E038E030E06060C031801E000F1D7C9C13>I<00F803040E041C0E181C300070007000 E000E000E000E000E000E0046008601030600F800F127C9113>I<0007E00000E00000E0 0001C00001C00001C00001C000038000038000038000038001E7000717000C0F00180F00 380E00300E00700E00700E00E01C00E01C00E01C00E01C00E03900E03900E03900607900 319A001E0C00131D7C9C15>I<00F807040C0418023804300470087FF0E000E000E000E0 00E00060046008301030600F800F127C9113>I<0003C0000670000C70001C60001C0000 1C0000380000380000380000380000380003FF8000700000700000700000700000700000 E00000E00000E00000E00000E00001C00001C00001C00001C00001C00003800003800003 8000030000030000070000C60000E60000CC00007800001425819C0D>I<0078C001C5C0 0303C00603C00E03800C03801C03801C0380380700380700380700380700380E00380E00 380E00181E000C7C00079C00001C00001C00003800003800C03000E07000C1C0007F0000 121A7E9113>I<0FC00001C00001C0000380000380000380000380000700000700000700 000700000E3E000EC3000F03800E03801E03801C03801C03801C03803807003807003807 00380E00700E40700E40701C40701C80E00C80600700121D7E9C15>I<01800380010000 000000000000000000000000001C002600470047008E008E000E001C001C001C00380038 00710071007100720072003C00091C7C9B0D>I<00030007000300000000000000000000 000000000078008C010C020C021C041C001C001C00380038003800380070007000700070 00E000E000E000E001C001C0C180E300C60078001024819B0D>I<0FC00001C00001C000 0380000380000380000380000700000700000700000700000E07800E08800E11C00E21C0 1C41801C80001D00001E00003FC00038E000387000387000707100707100707100707200 E03200601C00121D7E9C13>I<1F800380038007000700070007000E000E000E000E001C 001C001C001C0038003800380038007000700070007000E200E200E200E4006400380009 1D7D9C0B>I<1C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E03 80E01C0701C01C0701C01C0701C01C070380380E0388380E0388380E0708380E0710701C 0320300C01C01D127C9122>I<383E004CC3004D03804E03809E03809C03801C03801C03 80380700380700380700380E00700E40700E40701C40701C80E00C8060070012127C9117 >I<00F800030C000E06001C0300180300300300700380700380E00700E00700E00700E0 0E00E00E00E01C0060180060300030E0000F800011127C9115>I<03878004C86004D030 04E03009C03009C03801C03801C0380380700380700380700380600700E00700C0070180 0783000E86000E78000E00000E00001C00001C00001C00001C0000380000FF0000151A80 9115>I<1C3C2642468747078E068E000E000E001C001C001C001C003800380038003800 7000300010127C9112>114 D<01F006080C080C1C18181C001F001FC00FF007F0007800 386030E030C030806060C01F000E127D9111>I<03000700070007000E000E000E000E00 FFE01C001C001C0038003800380038007000700070007000E080E080E100E10066003800 0B1A7C990E>I<1C01802E03804E03804E03808E07008E07001C07001C0700380E00380E 00380E00380E00301C80301C80301C80383C80184D000F860011127C9116>I<1C062E0E 4E064E068E028E021C021C023804380438043808300830083010382018400F800F127C91 13>I<1E01832703874703874703838707018707010E07010E07011C0E021C0E021C0E02 1C0E04180C04181C04181C081C1E080C263007C3C018127C911C>I<0387800CC8400870 E01070E020E0C020E00000E00000E00001C00001C00001C00001C000038100638100E382 00C5820085840078780013127E9113>I<1C01802E03804E03804E03808E07008E07001C 07001C0700380E00380E00380E00380E00301C00301C00301C00383C001878000FB80000 3800003000007000E06000E0C0008180004300003C0000111A7C9114>I<FFFFC012017C 8B15>123 D E /FC 44 123 df<001F83E000F06E3001C078780380F8780300F0300700 7000070070000700700007007000070070000700700007007000FFFFFF80070070000700 700007007000070070000700700007007000070070000700700007007000070070000700 7000070070000700700007007000070070000700700007007000070070003FE3FF001D20 809F1B>11 D<70F0F8F878080808101010202040050E7C840D>44 D<FFF0FFF00C02808A0F>I<70F8F8F87005057C840D>I<00010000000380000003800000 0380000007C0000007C0000007C0000009E0000009E0000009E0000010F0000010F00000 10F00000207800002078000020780000403C0000403C0000C03E0000801E0000801E0001 FFFF0001000F0001000F00020007800200078002000780040003C0040003C00C0003C01E 0003E0FF801FFE1F207F9F22>65 D<FFFFE0000F0078000F001E000F001E000F000F000F 000F800F000F800F000F800F000F800F000F800F000F000F001F000F001E000F007C000F FFF0000F007C000F001F000F000F800F0007C00F0003C00F0003E00F0003E00F0003E00F 0003E00F0003E00F0003C00F0007C00F0007800F000F000F003E00FFFFF0001B1F7E9E20 >I<000FE01000381C3000E0027003C00170078000F00F0000701E0000701E0000303C00 00303C0000107C00001078000010F8000000F8000000F8000000F8000000F8000000F800 0000F8000000F8000000F8000000780000007C0000103C0000103C0000101E0000201E00 00200F0000200780004003C0008000E0030000380C00000FF0001C217E9F21>I<FFFFF8 0007801E0007800780078003C0078001E0078000F0078000700780007807800078078000 3C0780003C0780003C0780003E0780003E0780003E0780003E0780003E0780003E078000 3E0780003E0780003C0780003C0780007C0780007807800078078000F0078001E0078003 C00780078007801E00FFFFF8001F1F7F9E23>I<FFFFFF800F000F800F0003800F000180 0F0000800F0000C00F0000400F0000400F0000400F0040400F0040000F0040000F00C000 0F01C0000FFFC0000F01C0000F00C0000F0040000F0040000F0040000F0000200F000020 0F0000200F0000400F0000400F0000400F0000C00F0001C00F0003800F000F80FFFFFF80 1B1F7E9E1F>I<000FE01000381C3000E0027003C00170078000F00F0000701E0000701E 0000303C0000303C0000107C00001078000010F8000000F8000000F8000000F8000000F8 000000F8000000F8000000F8003FFEF80001F0780000F07C0000F03C0000F03C0000F01E 0000F01E0000F00F0000F0078000F003C0017000E0023000380C10000FF0001F217E9F24 >71 D<FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F 000F000F000F000F000F000F000F000F000F000F000F000F000F00FFF00C1F7E9E10>73 D<07FFC0003E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E 00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00201E 00F81E00F81E00F81E00F01C00403C006038001070000FC00012207F9E17>I<FFF007FC 0F0003E00F0001800F0001000F0002000F0004000F0008000F0010000F0020000F004000 0F0080000F0100000F0300000F0780000F0F80000F13C0000F21E0000F41E0000F80F000 0F0078000F0078000F003C000F001E000F001E000F000F000F0007800F0007800F0003C0 0F0003E00F0003F0FFF01FFE1F1F7E9E23>I<FFF8000F80000F00000F00000F00000F00 000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00 000F00000F00000F00020F00020F00020F00020F00060F00040F00040F000C0F001C0F00 7CFFFFFC171F7E9E1C>I<FF800007FE07800007C007800007C005C0000BC005C0000BC0 04E00013C004E00013C004E00013C004700023C004700023C004380043C004380043C004 380043C0041C0083C0041C0083C0040E0103C0040E0103C0040E0103C004070203C00407 0203C004070203C004038403C004038403C00401C803C00401C803C00401C803C00400F0 03C00400F003C004006003C01F006003C0FFE0607FFE271F7F9E2A>I<FFFFE0000F007C 000F001E000F000F000F0007800F0007800F0007C00F0007C00F0007C00F0007C00F0007 800F0007800F000F000F001E000F007C000FFFE0000F0000000F0000000F0000000F0000 000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 000F000000FFF000001A1F7E9E1F>80 D<FFFF80000F00F0000F003C000F001E000F000F 000F000F000F000F800F000F800F000F800F000F800F000F000F000F000F001E000F003C 000F00F0000FFF80000F01C0000F0070000F0070000F0038000F003C000F003C000F003C 000F003E000F003E000F003E000F003E040F003F040F001F040F000F08FFF00788000001 F01E207E9E21>82 D<03F0400C0CC01803C03001C06000C06000C0E000C0E00040E00040 E00040F00000F800007C00007F80003FF8001FFF0007FF8000FFC0001FE00003E00001E0 0000F0000070800070800070800070800070C00060C000E0E000C0F80180C6030081FC00 14217E9F19>I<7FFFFFE0780F01E0600F0060400F0020400F0020C00F0030800F001080 0F0010800F0010800F0010000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000000F0000000F0000001F800003FFFC001C1F7E9E21>I<FFF003FE1F80 00F80F0000600F00002007800040078000400780004003C0008003C0008003E0018001E0 010001E0010000F0020000F0020000F802000078040000780400003C0800003C0800003C 0800001E1000001E1000001F1000000F2000000F20000007C0000007C0000007C0000003 80000003800000038000000100001F207F9E22>86 D<FFF07FF81FF01F000FC007C00F00 078001800F00078001000F0007C001000F8007C00300078007C00200078009E0020007C0 09E0020003C009E0040003C019F0040003C010F0040001E010F0080001E010F0080001E0 2078080000F02078100000F02078100000F0403C10000078403C20000078403C20000078 801E2000007C801E6000003C801E4000003D000F4000003F000F4000001F000F8000001F 000F8000001E00078000000E00070000000E00070000000C000300000004000200002C20 7F9E2F>I<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E001E 0E00380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317>97 D<1C0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00 001C7C001D87001E01801E00C01C00E01C00701C00701C00781C00781C00781C00781C00 781C00781C00701C00F01C00E01E00C01A0180198700107C0015207E9F19>I<01FC0007 06001C0F00380F00380600780000700000F00000F00000F00000F00000F00000F0000070 00007800003800803800801C010007060001F80011147F9314>I<0001C0000FC00001C0 0001C00001C00001C00001C00001C00001C00001C00001C00001C001F1C0070DC00C03C0 1801C03801C07801C07001C0F001C0F001C0F001C0F001C0F001C0F001C07001C07001C0 3801C01803C00C03C0070DC001F1F815207F9F19>I<03F0000E1C001C0E003807003807 00700700700380F00380F00380FFFF80F00000F00000F000007000007000003800803800 801C010007060001F80011147F9314>I<0000E003E3300E3C301C1C30380E00780F0078 0F00780F00780F00780F00380E001C1C001E380033E0002000002000003000003000003F FE001FFF801FFFC03001E0600070C00030C00030C00030C000306000603000C01C038003 FC00141F7F9417>103 D<1C0000FC00001C00001C00001C00001C00001C00001C00001C 00001C00001C00001C00001C7C001C86001D03001E03801E03801C03801C03801C03801C 03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF014 207E9F19>I<38007C007C007C0038000000000000000000000000001C00FC001C001C00 1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091F7F9E 0C>I<1C0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001C0000 1C00001C1FE01C07801C06001C04001C08001C10001C20001C60001CE0001DF0001E7000 1C38001C3C001C1C001C0E001C0F001C07001C07801C07C0FF9FF014207E9F18>107 D<1C00FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C001C001C001C001C001C001C001C001C001C001C001C00FF8009207F9F0C>I< 1C3E03E000FCC30C30001D039038001E01E01C001E01E01C001C01C01C001C01C01C001C 01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01 C01C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021147E9326>I<1C 7C00FC86001D03001E03801E03801C03801C03801C03801C03801C03801C03801C03801C 03801C03801C03801C03801C03801C03801C0380FF8FF014147E9319>I<01F800070E00 1C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E0 7000E03801C03801C01C0380070E0001F80014147F9317>I<1C7C00FD87001E01801E01 C01C00E01C00F01C00701C00781C00781C00781C00781C00781C00781C00701C00F01C00 E01E01C01E03801D87001C7C001C00001C00001C00001C00001C00001C00001C00001C00 00FF8000151D7E9319>I<1CF0FD181E3C1E3C1E181C001C001C001C001C001C001C001C 001C001C001C001C001C001C00FFC00E147E9312>114 D<0FC830386018C008C008C008 E0007C003FE01FF007F8003C800E8006C006C006C004E00CD81887E00F147F9312>I<02 0002000200060006000E000E003E00FFF80E000E000E000E000E000E000E000E000E000E 000E000E040E040E040E040E040708030801F00E1C7F9B12>I<1C0380FC1F801C03801C 03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C 03801C07800C0780061B8003E3F014147E9319>I<FF83F83E00E01C00C00E00800E0080 0E008007010007010007830003820003820001C40001C40001E40000E80000E800007000 00700000700000200015147F9318>I<FF9FE1FC3C0780701C0300601C0380200E038040 0E0380400E03C0400704C0800704E0800704E08003886100038871000388710001D03200 01D03A0001D03E0000E01C0000E01C0000601800004008001E147F9321>I<FF87F81E03 C00E01800E030007020003840001C80001D80000F00000700000780000F800009C00010E 00020E000607000403800C03C03C03E0FE07FC16147F9318>I<FF83F83E00E01C00C00E 00800E00800E008007010007010007830003820003820001C40001C40001E40000E80000 E800007000007000007000002000002000004000004000004000F08000F08000F1000062 00003C0000151D7F9318>I<7FFF700E600E401C40384078407000E001E001C003800780 07010E011E011C0338027006700EFFFE10147F9314>I E /FD 62 122 df<000FE000007FF80000F81C0001E07C0003E07C0007C07C0007C07C0007C03800 07C0000007C0000007C0000007C1FE00FFFFFE00FFFFFE0007C03E0007C03E0007C03E00 07C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E00 07C03E0007C03E0007C03E0007C03E003FF9FFC03FF9FFC01A20809F1D>12 D<FFF0FFF0FFF0FFF00C047F8B11>45 D<387CFEFEFE7C3807077C860F>I<01FC0007FF 001F07C01E03C03E03E07C01F07C01F07C01F0FC01F8FC01F8FC01F8FC01F8FC01F8FC01 F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F87C01F07C01F07C01F03E03E01E03 C01F8FC007FF0001FC00151D7E9C1A>48 D<00700000F00007F000FFF000F9F00001F000 01F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F000 01F00001F00001F00001F00001F00001F00001F00001F00001F0007FFFC07FFFC0121D7D 9C1A>I<03FC001FFF80381FC07C07E0FE03F0FE03F0FE03F8FE01F87C01F83801F80003 F80003F00003F00007E0000FC0000F00001E00003C0000700000E00001C0180380180600 180C00381FFFF03FFFF07FFFF0FFFFF0FFFFF0151D7E9C1A>I<03FC000FFF801C0FC03C 07E07E03F07E03F07E03F07E07F03C07E00007E0000FC0003F8003FE0003FC00000F8000 07C00003E00003F00003F83803F87C03F8FE03F8FE03F8FE03F0FC03F07807E03C0FC01F FF8003FC00151D7E9C1A>I<0001C00003C00007C00007C0000FC0001FC0003BC00073C0 0063C000C3C00183C00383C00703C00E03C00C03C01803C03803C07003C0E003C0FFFFFE FFFFFE0007C00007C00007C00007C00007C00007C000FFFE00FFFE171D7F9C1A>I<1C00 E01FFFE01FFFC01FFF801FFF001FFC001FC00018000018000018000018000019FE001FFF 801E07C01803E01001F00001F00001F80001F87801F8FC01F8FC01F8FC01F8FC01F07803 F07003E03C0FC00FFF0003FC00151D7E9C1A>I<003F0001FFC007C0E00F81E01F03F01E 03F03E03F07C03F07C01E07C0000FC1000FCFF00FDFFC0FD03E0FE01F0FE01F0FC01F8FC 01F8FC01F8FC01F87C01F87C01F87C01F83C01F03E01F01E03E00F07C007FF8001FE0015 1D7E9C1A>I<6000007FFFF87FFFF87FFFF07FFFE07FFFC0E00180C00300C00300C00600 000C0000180000380000300000700000F00000F00001E00001E00003E00003E00003E000 03E00007E00007E00007E00007E00007E00003C000018000151E7D9D1A>I<01FE000FFF 801E07C03801E03800F07800F07800F07C00F07F00F07FC1E03FE3C01FFF800FFE0007FF 8007FFC01FFFE03C3FF0780FF07803F8F001F8F000F8F00078F00078F000707800707C00 E03E03C00FFF8003FC00151D7E9C1A>I<01FC000FFF001F07803E03C07C03E07C01E0FC 01F0FC01F0FC01F0FC01F8FC01F8FC01F8FC01F87C03F87C03F83E05F81FFDF807F9F800 41F80001F03C01F07E01F07E03E07E03E07E03C03C0780381F001FFC0007F000151D7E9C 1A>I<387CFEFEFE7C38000000000000387CFEFEFE7C3807147C930F>I<07F8001FFE0038 1F80780F80FC0FC0FC0FC0FC0FC0780FC0301F80001F00003E00007C0000700000E00000 E00000C00000C00000C00000C00000C00000C00000000000000000000000000001C00003 E00007F00007F00007F00003E00001C00012207D9F19>63 D<0000E000000000E0000000 01F000000001F000000001F000000003F800000003F800000006FC00000006FC0000000E FE0000000C7E0000000C7E000000183F000000183F000000303F800000301F800000701F C00000600FC00000600FC00000C007E00000FFFFE00001FFFFF000018003F000038003F8 00030001F800030001F800060000FC00060000FC000E0000FE00FFE00FFFE0FFE00FFFE0 231F7E9E28>65 D<FFFFFE00FFFFFFC007C007E007C003F007C001F807C001FC07C001FC 07C001FC07C001FC07C001FC07C001F807C003F807C003F007C00FE007FFFF8007FFFFC0 07C003F007C001F807C001FC07C000FC07C000FE07C000FE07C000FE07C000FE07C000FE 07C000FC07C001FC07C003F807C007F0FFFFFFE0FFFFFF001F1F7E9E25>I<0007FC0200 3FFF0E00FE03DE03F000FE07E0003E0FC0001E1F80001E3F00000E3F00000E7F0000067E 0000067E000006FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E 0000007E0000067F0000063F0000063F00000C1F80000C0FC0001807E0003803F0007000 FE01C0003FFF800007FC001F1F7D9E26>I<FFFFFE0000FFFFFFC00007E007F00007E001 F80007E000FC0007E0007E0007E0003F0007E0003F0007E0001F8007E0001F8007E0001F 8007E0001FC007E0001FC007E0001FC007E0001FC007E0001FC007E0001FC007E0001FC0 07E0001FC007E0001FC007E0001F8007E0001F8007E0001F8007E0003F0007E0003F0007 E0007E0007E000FC0007E001F80007E007F000FFFFFFC000FFFFFE0000221F7E9E28>I< FFFFFFE0FFFFFFE007E007E007E001E007E000E007E0006007E0007007E0003007E00030 07E0303007E0303007E0300007E0700007E0F00007FFF00007FFF00007E0F00007E07000 07E0300007E0300C07E0300C07E0000C07E0001807E0001807E0001807E0003807E00078 07E000F807E003F0FFFFFFF0FFFFFFF01E1F7E9E22>I<FFFFFFE0FFFFFFE007E007E007 E001E007E000E007E0006007E0007007E0003007E0003007E0303007E0303007E0300007 E0700007E0F00007FFF00007FFF00007E0F00007E0700007E0300007E0300007E0300007 E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000FFFF8000FF FF80001C1F7E9E21>I<0007FC0200003FFF0E0000FE03DE0003F000FE0007E0003E000F C0001E001F80001E003F00000E003F00000E007F000006007E000006007E00000600FE00 000000FE00000000FE00000000FE00000000FE00000000FE001FFFE0FE001FFFE07E0000 7E007E00007E007F00007E003F00007E003F00007E001F80007E000FC0007E0007E0007E 0003F000FE0000FE01FE00003FFF8E000007FC0600231F7D9E29>I<FFFF0FFFF0FFFF0F FFF007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E 0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007FFFFFE0007FFFFFE00 07E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007 E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E00FFFF0FFFF0FFFF 0FFFF0241F7E9E29>I<FFFFFFFF07E007E007E007E007E007E007E007E007E007E007E0 07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0FFFFFFFF 101F7E9E14>I<03FFFC03FFFC000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F C0100FC07C0FC0FE0FC0FE0FC0FE0F80FC1F80783F003FFE000FF000161F7F9E1B>I<FF FF8000FFFF800007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E0000007E000C007E000C007E000C007E001C007E001C007E001C007E0038007E0038007 E00F8007E01F80FFFFFF80FFFFFF801A1F7E9E1F>76 D<FFE000003FF8FFF000007FF807 F000007F0006F80000DF0006F80000DF0006F80000DF00067C00019F00067C00019F0006 3E00031F00063E00031F00061F00061F00061F00061F00060F800C1F00060F800C1F0006 07C0181F000607C0181F000607C0181F000603E0301F000603E0301F000601F0601F0006 01F0601F000600F8C01F000600F8C01F0006007D801F0006007D801F0006003F001F0006 003F001F0006003F001F0006001E001F00FFF01E03FFF8FFF00C03FFF82D1F7E9E32>I< FFE000FFF0FFF000FFF007F000060007F800060006FC000600067E000600063F00060006 3F800600061F800600060FC006000607E006000603F006000601F806000601FC06000600 FC060006007E060006003F060006001F860006001FC60006000FE600060007E600060003 F600060001FE00060000FE00060000FE000600007E000600003E000600001E000600000E 00FFF0000600FFF0000600241F7E9E29>I<001FF80000FFFF0001F81F8007E007E00FC0 03F01F8001F81F0000F83F0000FC7F0000FE7E00007E7E00007EFE00007FFE00007FFE00 007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007F7E00007E7F0000FE7F00 00FE3F0000FC3F8001FC1F8001F80FC003F007E007E001F81F8000FFFF00001FF800201F 7D9E27>I<FFFFFE00FFFFFF8007E00FE007E003F007E001F807E001F807E001FC07E001 FC07E001FC07E001FC07E001FC07E001F807E001F807E003F007E00FE007FFFF8007FFFE 0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000 0007E0000007E0000007E00000FFFF0000FFFF00001E1F7E9E24>I<001FF80000FFFF00 01F81F8007E007E00FC003F01F8001F81F8001F83F0000FC7F0000FE7F0000FE7E00007E FE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE00007F 7E00007E7E00007E7F0000FE3F0000FC3F87C1FC1F8FE1F80FD833F007F81FE001F81F80 00FFFF00001FFE0300000E0300000F0700000FFF000007FF000007FE000007FE000003FC 000001F8000000F020287D9E27>I<FFFFFC0000FFFFFF800007E00FE00007E003F00007 E003F80007E001F80007E001FC0007E001FC0007E001FC0007E001FC0007E001F80007E0 03F80007E003F00007E00FE00007FFFF800007FFFC000007E03F000007E00F800007E00F C00007E007C00007E007E00007E007E00007E007E00007E007F00007E007F00007E007F0 0007E007F03007E003F83007E001F860FFFF00FFC0FFFF003F80241F7E9E27>I<03FC08 0FFF381E03F83800F8700078700038F00038F00018F00018F80000FC00007FC0007FFE00 3FFF801FFFC00FFFE007FFF000FFF80007F80000FC00007C00003CC0003CC0003CC0003C E00038E00078F80070FE01E0EFFFC081FF00161F7D9E1D>I<7FFFFFFC7FFFFFFC7C07E0 7C7007E01C6007E00C6007E00CE007E00EC007E006C007E006C007E006C007E0060007E0 000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0 000007E0000007E0000007E0000007E0000007E0000007E0000007E00003FFFFC003FFFF C01F1E7E9D24>I<FFFF01FFE0FFFF01FFE007E0000C0007E0000C0007E0000C0007E000 0C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C 0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C00 07E0000C0007E0000C0007E0000C0007E0000C0003E000180001F000180001F000300000 F8006000007E03C000001FFF80000003FC0000231F7E9E28>I<FFFE003FF8FFFE003FF8 0FE000038007E000030007F000070003F000060003F800060001F8000C0001FC000C0000 FC00180000FC001800007E003000007E003000007F007000003F006000003F80E000001F 80C000001FC0C000000FC18000000FC180000007E300000007E300000003F600000003F6 00000003FE00000001FC00000001FC00000000F800000000F80000000070000000007000 00251F7F9E28>I<FFFC0FFFC0FFE0FFFC0FFFC0FFE00FC000FC000E000FE000FC000E00 07E000FE000C0007E000FE000C0007F000FE001C0003F001BF00180003F001BF00180001 F801BF00300001F8031F80300001F8031F80300000FC071FC0600000FC060FC0600000FE 060FC0E000007E0C07E0C000007E0C07E0C000003F0C07E18000003F1803F18000003F18 03F18000001FB803FB0000001FB001FB0000001FF001FF0000000FE000FE0000000FE000 FE00000007E000FC00000007C0007C00000007C0007C00000003C0007800000003800038 000000018000300000331F7F9E36>I<FFFE07FF80FFFE07FF8007F000700003F000E000 03F800C00001FC01800000FE038000007E070000007F060000003F8C0000001FDC000000 0FF80000000FF000000007F000000003F800000003F800000003FC00000003FE00000006 7E0000000E7F0000001C3F800000181FC00000300FC00000700FE00000E007F00001C003 F800018001F800030001FC00070000FE00FFF007FFE0FFF007FFE0231F7E9E28>I<07FC 001FFF803F07C03F03E03F01F03F01F00C01F00001F0003FF007FDF01F81F03E01F07C01 F0F801F0F801F0F801F0FC02F07E0CF03FF87E0FE03E17147F9319>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00 001F1FC01F7FF01FE0F81F807C1F007E1F003E1F003E1F003F1F003F1F003F1F003F1F00 3F1F003F1F003E1F003E1F007C1F807C1EC1F81C7FE0181F8018207E9F1D>I<01FE0007 FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC0000FC00007C 00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<0007F80007F80000F8 0000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F807FEF81F83F8 3E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87C00F8 7E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF800F83C01E01E03E00 F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00003E00181E00 180F807007FFE000FF8015147F9318>I<003F8000FFC003E3E007C7E00787E00F87E00F 83C00F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F 80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80007F F8007FF80013207F9F10>I<03FC3C0FFFFE1E079E3C03DE7C03E07C03E07C03E07C03E0 7C03E03C03C01E07801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC 78007C70003EF0001EF0001EF0001E78003C78003C3F01F80FFFE001FF00171E7F931A> I<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00 001F0FC01F3FE01F61F01FC0F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00 F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF18207D9F1D>I<1C003E00 7F007F007F003E001C00000000000000000000000000FF00FF001F001F001F001F001F00 1F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B217EA00E>I<FF0000 FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F01FE 1F01FE1F00F01F00C01F03801F07001F0C001F18001F7C001FFC001F9E001F0F001E0F80 1E07C01E03C01E01E01E01F01E00F8FFC3FFFFC3FF18207E9F1C>107 D<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F 001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B207E9F0E>I< FE0FE03F80FE1FF07FC01E70F9C3E01E407D01F01E807E01F01F807E01F01F007C01F01F 007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F00 7C01F01F007C01F01F007C01F01F007C01F0FFE3FF8FFEFFE3FF8FFE27147D932C>I<FE 0FC0FE3FE01E61F01EC0F81E80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F 00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF18147D931D>I<01FF0007FFC0 1F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E7C007C 7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>I<FF1FC0FF7FF01FE1F81F80 FC1F007E1F007E1F003E1F003F1F003F1F003F1F003F1F003F1F003F1F003E1F007E1F00 7C1F80FC1FC1F81F7FE01F1F801F00001F00001F00001F00001F00001F00001F0000FFE0 00FFE000181D7E931D>I<01F81807FE381F87783F01F83E01F87E00F87C00F8FC00F8FC 00F8FC00F8FC00F8FC00F8FC00F87C00F87E00F87E00F83F01F81F87F80FFEF803F8F800 00F80000F80000F80000F80000F80000F80000F80007FF0007FF181D7E931C>I<FE3E00 FE7F801ECFC01E8FC01E8FC01F8FC01F03001F00001F00001F00001F00001F00001F0000 1F00001F00001F00001F00001F0000FFF000FFF00012147E9316>I<0FE63FFE701E600E E006E006F800FFC07FF83FFC1FFE03FE001FC007C007E007F006F81EFFFCC7F010147E93 15>I<0300030003000300070007000F000F003F00FFFCFFFC1F001F001F001F001F001F 001F001F001F001F001F061F061F061F061F060F8C07F803F00F1D7F9C14>I<FF07F8FF 07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F 00F81F00F81F01F81F01F80F06F807FCFF03F8FF18147D931D>I<FFE07F80FFE07F801F 001C000F8018000F80180007C0300007C0300003E0600003E0600003F0E00001F0C00001 F9C00000F9800000FF8000007F0000007F0000003E0000003E0000001C0000001C000019 147F931C>I<FFC7FE1FE0FFC7FE1FE01F00F003001F00F803000F80F806000F80F80600 0FC1BC0E0007C1BC0C0007C3BE0C0003E31E180003E31E180003F60F380001F60F300001 FE0FB00000FC07E00000FC07E00000F803E000007803C000007803C00000300180002314 7F9326>I<FFC0FF00FFC0FF000F80700007C0600007E0C00003E1800001F3800000FF00 00007E0000003E0000003F0000007F8000006F800000C7C0000183E0000381F0000700F8 000E00FC00FF81FF80FF81FF8019147F931C>I<FFE07F80FFE07F801F001C000F801800 0F80180007C0300007C0300003E0600003E0600003F0E00001F0C00001F9C00000F98000 00FF8000007F0000007F0000003E0000003E0000001C0000001C00000018000000180000 78300000FC300000FC600000C0E00000E1C000007F8000001E000000191D7F931C>I E /FE 36 125 df<0001FF81FE00001FFFEFFF80007F80FF87C000FC00FE0FE001F801FE 0FE003F801FC0FE007F001FC0FE007F001FC07C007F001FC000007F001FC000007F001FC 000007F001FC000007F001FC000007F001FC000007F001FC0000FFFFFFFFF800FFFFFFFF F800FFFFFFFFF80007F001FC000007F001FC000007F001FC000007F001FC000007F001FC 000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC 000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC 000007F001FC000007F001FC000007F001FC000007F001FC00007FFF1FFFE0007FFF1FFF E0007FFF1FFFE0002B2A7FA928>11 D<0001FF0000001FFFC000007F80F00000FC00F800 01F801F80003F803FC0007F003FC0007F003FC0007F003FC0007F001F80007F000F00007 F000000007F000000007F000000007F0000000FFFFFFFC00FFFFFFFC00FFFFFFFC0007F0 01FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001 FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC 0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC007FFF1FFFC0 7FFF1FFFC07FFF1FFFC0222A7FA926>I<0001FFFC00001FFFFC00007F81FC0000FC01FC 0001F801FC0003F801FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC00 07F001FC0007F001FC0007F001FC0007F001FC00FFFFFFFC00FFFFFFFC00FFFFFFFC0007 F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F0 01FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001 FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC007FFF1FFF C07FFF1FFFC07FFF1FFFC0222A7FA926>I<00030007000E001C0038007000F001E003C0 03C007C007800F800F001F001F003F003E003E007E007E007E007C007C00FC00FC00FC00 FC00FC00FC00FC00FC00FC00FC00FC00FC007C007C007E007E007E003E003E003F001F00 1F000F000F80078007C003C003C001E000F000700038001C000E00070003103C7AAC1B> 40 D<8000C000E000700038001C001E000F000780078007C003C003E001E001F001F001 F800F800F800FC00FC00FC007C007C007E007E007E007E007E007E007E007E007E007E00 7E007E007C007C00FC00FC00FC00F800F801F801F001F001E003E003C007C0078007800F 001E001C0038007000E000C00080000F3C7BAC1B>I<1C003E007F00FF80FF80FF807F00 3E001C000000000000000000000000000000000000001C003E007F00FF80FF80FF807F00 3E001C00091B7B9A13>58 D<FFFE0000001FFFC0FFFE0000001FFFC0FFFF0000003FFFC0 03FF0000003FF00003FF0000003FF00003BF80000077F00003BF80000077F000039FC000 00E7F000039FC00000E7F000038FE00001C7F000038FE00001C7F0000387F0000387F000 0387F0000387F0000387F0000387F0000383F8000707F0000383F8000707F0000381FC00 0E07F0000381FC000E07F0000380FE001C07F0000380FE001C07F0000380FF003807F000 03807F003807F00003807F003807F00003803F807007F00003803F807007F00003801FC0 E007F00003801FC0E007F00003800FE1C007F00003800FE1C007F00003800FE1C007F000 038007F38007F000038007F38007F000038003FF0007F000038003FF0007F000038001FE 0007F000038001FE0007F000038000FC0007F000038000FC0007F000FFFE00FC01FFFFC0 FFFE007801FFFFC0FFFE007801FFFFC03A297DA841>77 D<FFFFFFF800FFFFFFFF00FFFF FFFFC003FC003FE003FC000FF003FC0007F803FC0007FC03FC0003FC03FC0003FE03FC00 03FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FC03FC0007 FC03FC0007F803FC000FF003FC003FE003FFFFFF8003FFFFFE0003FC00000003FC000000 03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003 FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000FFFF F00000FFFFF00000FFFFF0000027297DA82F>80 D<FFFFF0003FFF80FFFFF0003FFF80FF FFF0003FFF8003FE000001E00001FE000001C00001FF000001C00000FF000003800000FF 000003800000FF8000078000007F8000070000007FC0000F0000003FC0000E0000003FE0 001E0000001FE0001C0000001FF0001C0000000FF000380000000FF000380000000FF800 7800000007F8007000000007FC00F000000003FC00E000000003FE01E000000001FE01C0 00000001FF01C000000000FF038000000000FF038000000000FF8780000000007F870000 0000007FCF00000000003FCE00000000003FEE00000000001FFC00000000001FFC000000 00000FF800000000000FF800000000000FF8000000000007F0000000000007F000000000 0003E0000000000003E0000000000001C000000031297FA834>86 D<03FF80000FFFF0001F01F8003F807E003F807E003F803F001F003F800E003F8000003F 8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F803F803F803F003F807F003F 80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC01FC03 FC1E1B7E9A21>97 D<FFE0000000FFE0000000FFE00000000FE00000000FE00000000FE0 0000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000 00000FE00000000FE00000000FE1FE00000FE7FF80000FFE07E0000FF801F0000FF000F8 000FE000FC000FE000FE000FE0007F000FE0007F000FE0007F000FE0007F800FE0007F80 0FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE0007F000F E0007F000FE000FE000FE000FC000FF001F8000FF803F0000F9E0FE0000F0FFF80000E01 FC0000212A7EA926>I<003FF80000FFFE0003F01F0007E03F800FC03F801F803F803F80 1F007F000E007F0000007F000000FF000000FF000000FF000000FF000000FF000000FF00 0000FF0000007F0000007F0000007F8000003F8001C01F8001C00FC0038007E0070003F0 1E0000FFFC00003FE0001A1B7E9A1F>I<00003FF80000003FF80000003FF800000003F8 00000003F800000003F800000003F800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800001FE3F80000FFFBF80003F83FF80007 E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003F800FF00 03F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003 F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003F03FFF 8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FFF80003F07E0007C01F000F80 1F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFF FFE0FF000000FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC0 01C007E0038003F81F0000FFFE00001FF0001B1B7E9A20>I<0007F0003FFC00FE3E01F8 7F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000FFFF C0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF 807FFF807FFF80182A7EA915>I<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F00 7E107F007F007F007F007F007F007F007F007F007F007F007F003F007E001F007C001F80 FC000FC1F8001FFFE00018FF800038000000380000003C0000003E0000003FFFF8001FFF FF001FFFFF800FFFFFC007FFFFE01FFFFFF03C0007F07C0001F8F80000F8F80000F8F800 00F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007FF0001E287E9A22> I<FFE0000000FFE0000000FFE00000000FE00000000FE00000000FE00000000FE0000000 0FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000F E00000000FE07F00000FE1FFC0000FE787E0000FEE03F0000FF803F0000FF803F8000FF0 03F8000FF003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003 F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8 000FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80212A7DA926 >I<07000F801FC03FE03FE03FE01FC00F8007000000000000000000000000000000FFE0 FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 0FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7DAA14>I<000700000F80001FC0003FE000 3FE0003FE0001FC0000F8000070000000000000000000000000000000000000000000000 FFE000FFE000FFE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000 0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000 0FE0000FE0000FE0000FE0000FE0000FE0000FE07C0FE0FE0FE0FE0FC0FE1F80FE1F007C 3E003FFC000FF000133784AA15>I<FFE00000FFE00000FFE000000FE000000FE000000F E000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000F E000000FE01FFC0FE01FFC0FE01FFC0FE007800FE00F000FE01E000FE03C000FE078000F E0E0000FE3C0000FE7C0000FEFE0000FFFE0000FFFF0000FF3F8000FE3F8000FC1FC000F C0FE000FC07F000FC07F000FC03F800FC01FC00FC00FC00FC00FE0FFFC3FFEFFFC3FFEFF FC3FFE1F2A7EA924>I<FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 0FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2A7DA914>I<FFC07F800FF000 FFC1FFE03FFC00FFC383F0707E000FC603F8C07F000FCC01F9803F000FD801FF003F800F F001FE003F800FF001FE003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0 01FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001 FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC 003F800FE001FC003F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFFC3FFF8FFFE1FFFC3 FFF8351B7D9A3A>I<FFC07F0000FFC1FFC000FFC787E0000FCE03F0000FD803F0000FD8 03F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003 F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8 000FE003F8000FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80 211B7D9A26>I<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F 0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF 0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001 FFFC00003FE0001D1B7E9A22>I<FFE1FE0000FFE7FF8000FFFE07E0000FF803F0000FF0 01F8000FE000FC000FE000FE000FE000FF000FE0007F000FE0007F000FE0007F800FE000 7F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE000FF 000FE000FF000FE000FE000FE001FC000FF001F8000FF803F0000FFE0FE0000FEFFF8000 0FE1FC00000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000F E00000000FE00000000FE0000000FFFE000000FFFE000000FFFE00000021277E9A26>I< FFC1F0FFC7FCFFCE3E0FD87F0FD87F0FF07F0FF03E0FF01C0FE0000FE0000FE0000FE000 0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000 FFFF00FFFF00FFFF00181B7E9A1C>114 D<03FE300FFFF01E03F03800F0700070F00070 F00070F80070FE0000FFE0007FFE007FFF803FFFE01FFFF007FFF800FFF80007FC6000FC E0007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1FF00161B7E9A1B>I<0070 0000700000700000700000F00000F00000F00001F00003F00003F00007F0001FFFF0FFFF F0FFFFF007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F03807F03807F03807F03807F03807F03803F03803F87001F86000FF C0001F8015267FA51B>I<FFE03FF800FFE03FF800FFE03FF8000FE003F8000FE003F800 0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F E003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0 03F8000FE003F8000FE007F80007E007F80007E00FF80003F03BFF8001FFF3FF80003FC3 FF80211B7D9A26>I<FFFE03FF80FFFE03FF80FFFE03FF800FF000780007F000700007F8 00F00003F800E00003FC01E00001FC01C00001FC01C00000FE03800000FE03800000FF07 8000007F070000007F8F0000003F8E0000003FCE0000001FDC0000001FDC0000000FF800 00000FF80000000FF800000007F000000007F000000003E000000003E000000001C00000 211B7F9A24>I<FFFC3FFC0FFEFFFC3FFC0FFEFFFC3FFC0FFE0FE007E000E007F003F001 C007F003F001C007F807F803C003F807F8038003F807F8038001FC0EFC070001FC0EFC07 0001FC1EFE0F0000FE1C7E0E0000FE1C7E0E0000FF383F1E00007F383F1C00007F783F1C 00003FF01FB800003FF01FB800003FE00FF800001FE00FF000001FE00FF000000FC007E0 00000FC007E000000FC007E00000078003C00000078003C0002F1B7F9A32>I<FFFC0FFF 00FFFC0FFF00FFFC0FFF0007F003C00003F803800001FC07800000FE0F000000FF1E0000 007F3C0000003FF80000001FF00000001FF00000000FF000000007F000000007F8000000 0FFC0000001FFE0000001EFE0000003C7F000000783F800000F01FC00001E01FE00003C0 0FE00003C007F000FFF01FFF80FFF01FFF80FFF01FFF80211B7F9A24>I<FFFE03FF80FF FE03FF80FFFE03FF800FF000780007F000700007F800F00003F800E00003FC01E00001FC 01C00001FC01C00000FE03800000FE03800000FF078000007F070000007F8F0000003F8E 0000003FCE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F000 000007F000000003E000000003E000000001C000000001C0000000038000000003800000 38078000007C07000000FE0F000000FE0E000000FE1C000000FE3C0000007C780000003F E00000000F8000000021277F9A24>I<3FFFFF803FFFFF803F007F003C00FE003801FE00 7803FC007803F8007007F800700FF000700FE000001FC000003FC000007F8000007F0000 00FF000001FE038001FC038003F8038007F803800FF007800FE007801FE007003FC00F00 3F801F007F007F00FFFFFF00FFFFFF00191B7E9A1F>I<FFFFFFFF80FFFFFFFF80210280 9122>I<FFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF04402809145>I E end %%EndProlog %%BeginSetup %%Feature: *Resolution 300dpi TeXDict begin %%EndSetup %%Page: 1 1 1 0 bop 291 507 a FE(PVM:)23 b(P)n(arallel)e(Virtual)g(Mac)n(hine)p eop %%Page: 2 2 2 1 bop 249 507 a FD(Scien)o(ti\014c)19 b(and)f(Engineering)h (Computation)249 561 y FC(Jan)o(usz)d(Ko)o(w)o(alik,)f(Editor)249 669 y FB(Data-Par)n(al)r(lel)f(Pr)n(o)n(gr)n(amming)h(on)g(MIMD)h (Computers)249 723 y FA(b)o(y)e(Philip)f(J.)g(Hatc)o(her)i(and)f(Mic)o (hael)f(J.)h(Quinn,)f(1991)249 835 y FB(Unstructur)n(e)n(d)h (Scienti\014c)i(Computation)f(on)g(Sc)n(alable)g(Multipr)n(o)n(c)n (essors)249 889 y FA(edited)g(b)o(y)e(Piyush)h(Mehrotra,)g(Jo)q(el)g (Saltz,)g(and)f(Rob)q(ert)i(V)m(oigt,)d(1991)249 1001 y FB(Par)n(al)r(lel)i(Computational)h(Fluid)g(Dynamics:)k (Implementations)d(and)f(R)n(esults)249 1055 y FA(edited)g(b)o(y)e (Horst)i(D.)e(Simon,)e(1992)249 1167 y FB(Enterprise)j(Inte)n(gr)n (ation)h(Mo)n(deling:)k(Pr)n(o)n(c)n(e)n(e)n(dings)c(of)g(the)g(First)f (International)h(Confer)n(enc)n(e)249 1221 y FA(edited)g(b)o(y)e (Charles)i(J.)e(P)o(etrie,)h(Jr.,)g(1992)249 1333 y FB(The)h(High)g (Performanc)n(e)f(F)m(ortr)n(an)h(Handb)n(o)n(ok)249 1387 y FA(b)o(y)g(Charles)g(H.)f(Ko)q(elb)q(el,)h(Da)o(vid)f(B.)h(Lo)o (v)o(eman,)d(Rob)q(ert)k(S.)e(Sc)o(hreib)q(er,)i(Guy)e(L.)h(Steele)h (Jr.,)e(and)249 1441 y(Mary)g(E.)f(Zosel,)h(1994)249 1547 y FB(Using)h(MPI:)g(Portable)f(Par)n(al)r(lel)g(Pr)n(o)n(gr)n (amming)h(with)f(the)h(Message-Passing)g(Interfac)n(e)249 1601 y FA(b)o(y)f(William)c(Gropp,)j(Ewing)g(Lusk,)h(and)g(An)o(thon)o (y)f(Skjellum,)e(1994)249 1713 y FB(PVM:)17 b(Par)n(al)r(lel)e(Virtual) h(Machine)i({)f(A)f(Users')g(Guide)h(and)g(T)m(utorial)f(for)g (Networke)n(d)g(Par)n(al)r(lel)249 1767 y(Computing)249 1819 y FA(b)o(y)j(Al)f(Geist,)i(Adam)d(Beguelin,)j(Jac)o(k)f(Dongarra,) g(W)m(eic)o(heng)f(Jiang,)h(Rob)q(ert)g(Manc)o(hek,)h(and)249 1873 y(V)m(aidy)13 b(Sunderam,)g(1994)p eop %%Page: 3 3 3 2 bop 249 263 a Fz(PVM:)20 b(P)n(arallel)i(Virtual)f(Mac)n(hine)249 321 y(A)d(Users')f(Guide)h(and)f(T)-5 b(utorial)19 b(for)d(Net)n(w)n (ork)n(ed)k(P)n(arallel)g(Computing)249 571 y FC(Al)c(Geist)249 625 y(Adam)f(Beguelin)249 679 y(Jac)o(k)g(Dongarra)249 733 y(W)l(eic)o(heng)h(Jiang)249 787 y(Rob)q(ert)g(Manc)o(hek)249 841 y(V)l(aidy)g(Sunderam)249 2391 y(The)g(MIT)f(Press)249 2445 y(Cam)o(bridge,)g(Massac)o(h)o(usetts)249 2499 y(London,)g (England)p eop %%Page: 4 4 4 3 bop 259 506 a Fy(c)249 507 y Fx(\015)12 b Fy(1994)e(Massac)o(h)o (usetts)g(Institute)f(of)i(T)m(ec)o(hnology)249 582 y(All)h(righ)o(ts)e (reserv)o(ed.)j(No)f(part)f(of)g(this)g(b)q(o)q(ok)f(ma)o(y)g(b)q(e)h (repro)q(duced)e(in)i(an)o(y)f(form)h(b)o(y)g(an)o(y)f(electronic)f(or) 249 619 y(mec)o(hanical)f(means)i(\(including)f(photo)q(cop)o(yin)o(g,) f(recording,)h(or)i(information)d(storage)i(and)h(retriev)n(al\))e (without)249 657 y(p)q(ermission)g(in)i(writing)g(from)f(the)h (publisher.)249 731 y(This)g(b)q(o)q(ok)e(w)o(as)h(set)g(in)g(L)584 727 y Fw(a)605 731 y Fy(T)624 741 y(E)644 731 y(X)h(b)o(y)f(the)g (authors)e(and)i(w)o(as)g(prin)o(ted)f(and)g(b)q(ound)g(in)h(the)f (United)h(States)f(of)h(America.)249 806 y(Library)g(of)h(Congress)g (Cataloging-in)o(-Pub)o(lica)o(tio)o(n)e(Data)249 1144 y(This)j(b)q(o)q(ok)e(is)h(also)g(a)o(v)n(ailable)e(in)i(p)q(ostscript) e(and)i(h)o(tml)f(forms)h(o)o(v)o(er)f(the)h(In)o(ternet.)249 1181 y(T)m(o)h(retriev)o(e)d(the)i(p)q(ostscript)e(\014le)i(y)o(ou)g (can)g(use)g(one)f(of)h(the)g(follo)o(wing)f(metho)q(ds:)211 1260 y Fx(\017)20 b Fy(anon)o(ymous)9 b(ftp)292 1304 y Fv(ftp)16 b(netlib2.cs.)o(utk)o(.e)o(du)292 1349 y(cd)h(pvm3/book)292 1395 y(get)f(pvm-book.ps)292 1441 y(quit)211 1497 y Fx(\017)k Fy(from)10 b(an)o(y)h(mac)o(hine)e(on)i(the)g(In)o(ternet)e(t)o(yp)q (e:)292 1541 y Fv(rcp)16 b(anon@netlib)o(2.c)o(s.)o(utk)o(.ed)o(u:p)o (vm3)o(/b)o(ook)o(/pv)o(m-b)o(ook)o(.p)o(s)f(pvm-book.p)o(s)211 1597 y Fx(\017)20 b Fy(sending)10 b(email)g(to)29 b Fv(netlib@or)o(nl.) o(gov)8 b Fy(and)j(in)g(the)f(message)g(t)o(yp)q(e:)267 1634 y Fv(send)16 b(pvm-book.p)o(s)f(from)h(pvm3/book)211 1688 y Fx(\017)k Fy(use)11 b(Xnetlib)f(and)h(clic)o(k)f(\\library",)f (clic)o(k)i(\\p)o(vm3",)e(clic)o(k)h(\\b)q(o)q(ok",)f(clic)o(k)i(\\p)o (vm3/p)o(vm)o(-bo)q(ok)o(.ps")o(,)e(clic)o(k)249 1726 y(\\do)o(wnload",)g(clic)o(k)h(\\Get)h(Files)g(No)o(w".)k(\(Xnetlib)c (is)g(an)g(X-windo)o(w)h(in)o(terface)d(to)i(the)g(netlib)f(soft)o(w)o (are)g(based)g(on)249 1763 y(a)h(clien)o(t-serv)o(er)e(mo)q(del.)k(The) f(soft)o(w)o(are)e(can)h(b)q(e)g(found)f(in)h(netlib,)f(\\send)g(index) g(from)h(xnetlib"\).)249 1842 y(T)m(o)h(view)f(the)g(h)o(tml)f(\014le)h (use)g(the)g(URL:)211 1921 y Fx(\017)20 b Fv(http://www)o(.ne)o(tli)o (b.o)o(rg/)o(pv)o(m3/)o(boo)o(k/p)o(vm-)o(bo)o(ok.)o(htm)o(l)p eop %%Page: 5 5 5 4 bop 249 260 a FD(Con)o(ten)o(ts)399 514 y FA(Series)14 b(F)m(orew)o(ord)1126 b(xi)399 580 y(Preface)1256 b(xiii)249 680 y FD(1)124 b(In)o(tro)q(duction)1136 b FA(1)249 755 y(1.1)96 b(Heterogeneous)15 b(Net)o(w)o(ork)g(Computing)776 b(2)249 821 y(1.2)96 b(T)m(rends)14 b(in)f(Distributed)i(Computing)811 b(3)249 888 y(1.3)96 b(PVM)14 b(Ov)o(erview)1143 b(5)249 954 y(1.4)96 b(Other)15 b(P)o(ac)o(k)n(ages)1142 b(6)399 1025 y(1.4.1)62 b(The)14 b(p4)g(System)1000 b(6)399 1083 y(1.4.2)62 b(Express)1135 b(7)399 1141 y(1.4.3)62 b(MPI)1193 b(7)399 1199 y(1.4.4)62 b(The)14 b(Linda)f(System)940 b(8)249 1298 y FD(2)124 b(The)17 b(PVM)g(System)988 b FA(11)249 1419 y FD(3)124 b(Using)17 b(PVM)1130 b FA(19)249 1494 y(3.1)96 b(Ho)o(w)13 b(to)h(Obtain)f(the)i(PVM)f(Soft)o(w)o(are) 779 b(19)249 1560 y(3.2)96 b(Setup)14 b(to)g(Use)h(PVM)1058 b(19)249 1626 y(3.3)96 b(Setup)14 b(Summary)1109 b(20)249 1693 y(3.4)96 b(Starting)13 b(PVM)1145 b(22)249 1759 y(3.5)96 b(Comm)o(on)11 b(Startup)j(Problems)904 b(24)249 1826 y(3.6)96 b(Running)12 b(PVM)j(Programs)948 b(25)249 1892 y(3.7)96 b(PVM)14 b(Console)g(Details)1010 b(27)249 1958 y(3.8)96 b(Host)14 b(File)f(Options)1080 b(29)249 2071 y FD(4)124 b(Basic)18 b(Programming)f(T)l(ec)o(hniques)682 b FA(33)249 2145 y(4.1)96 b(Comm)o(on)11 b(P)o(arallel)i(Programming)d (P)o(aradigms)620 b(33)399 2216 y(4.1.1)62 b(Cro)o(wd)14 b(Computations)863 b(34)399 2274 y(4.1.2)62 b(T)m(ree)14 b(Computations)903 b(37)249 2340 y(4.2)96 b(W)m(orkload)12 b(Allo)q(cation)1027 b(39)399 2411 y(4.2.1)62 b(Data)13 b(Decomp)q(osition)881 b(40)399 2469 y(4.2.2)62 b(F)m(unction)13 b(Decomp)q(osition)811 b(41)p eop %%Page: 6 6 6 5 bop 249 251 a Fu(vi)1415 b(Con)o(ten)o(ts)249 507 y FA(4.3)96 b(P)o(orting)13 b(Existing)g(Applications)h(to)f(PVM)702 b(43)249 619 y FD(5)124 b(PVM)16 b(User)h(In)o(terface)935 b FA(45)249 694 y(5.1)96 b(Pro)q(cess)15 b(Con)o(trol)1116 b(46)249 760 y(5.2)96 b(Information)1186 b(49)249 827 y(5.3)96 b(Dynamic)11 b(Con\014guration)978 b(50)249 893 y(5.4)96 b(Signaling)1235 b(51)249 960 y(5.5)96 b(Setting)13 b(and)h(Getting)g(Options)884 b(52)249 1026 y(5.6)96 b(Message)15 b(P)o(assing)1104 b(53)399 1097 y(5.6.1)62 b(Message)15 b(Bu\013ers)965 b(53)399 1155 y(5.6.2)62 b(P)o(ac)o(king)13 b(Data)1008 b(55)399 1213 y(5.6.3)62 b(Sending)14 b(and)f(Receiving)h(Data)738 b(57)399 1271 y(5.6.4)62 b(Unpac)o(king)13 b(Data)958 b(59)249 1337 y(5.7)96 b(Dynamic)11 b(Pro)q(cess)16 b(Groups)946 b(60)249 1450 y FD(6)124 b(Program)16 b(Examples)967 b FA(63)249 1524 y(6.1)96 b(F)m(ork-Join)1229 b(63)249 1591 y(6.2)96 b(Dot)13 b(Pro)q(duct)1175 b(68)249 1657 y(6.3)96 b(F)m(ailure)1277 b(73)249 1724 y(6.4)96 b(Matrix)13 b(Multiply)1107 b(76)249 1790 y(6.5)96 b(One-Dimensional)11 b(Heat)k(Equation)812 b(83)399 1861 y(6.5.1)62 b(Di\013eren)o(t)14 b(St)o(yles)h(of)e(Comm)o (uni)o(cation)624 b(91)249 1960 y FD(7)124 b(Ho)o(w)16 b(PVM)h(W)l(orks)993 b FA(93)249 2035 y(7.1)96 b(Comp)q(onen)o(ts)1176 b(93)399 2105 y(7.1.1)62 b(T)m(ask)13 b(Iden)o(ti\014ers)976 b(93)399 2164 y(7.1.2)62 b(Arc)o(hitecture)16 b(Classes)885 b(95)399 2222 y(7.1.3)62 b(Message)15 b(Mo)q(del)978 b(95)399 2280 y(7.1.4)62 b(Async)o(hronous)15 b(Noti\014cation)773 b(96)399 2338 y(7.1.5)62 b(PVM)14 b(Daemon)e(and)i(Programming)d (Library)501 b(96)249 2404 y(7.2)96 b(Messages)1239 b(97)399 2475 y(7.2.1)62 b(F)m(ragmen)o(ts)13 b(and)g(Databufs)806 b(97)p eop %%Page: 7 7 7 6 bop 249 251 a Fu(Con)o(ten)o(ts)1403 b(vii)399 507 y FA(7.2.2)62 b(Messages)15 b(in)f(Libp)o(vm)885 b(97)399 565 y(7.2.3)62 b(Messages)15 b(in)f(the)g(Pvmd)846 b(98)399 624 y(7.2.4)62 b(Pvmd)13 b(En)o(try)h(P)o(oin)o(ts)900 b(98)399 682 y(7.2.5)62 b(Con)o(trol)13 b(Messages)918 b(101)249 748 y(7.3)96 b(PVM)14 b(Daemon)1120 b(101)399 819 y(7.3.1)62 b(Startup)1095 b(101)399 877 y(7.3.2)62 b(Sh)o(utdo)o(wn)1053 b(102)399 935 y(7.3.3)62 b(Host)14 b(T)m(able)f(and)h(Mac)o(hine)g(Con\014guration)524 b(102)399 993 y(7.3.4)62 b(T)m(asks)1131 b(104)399 1051 y(7.3.5)62 b(W)m(ait)12 b(Con)o(texts)971 b(105)399 1109 y(7.3.6)62 b(F)m(ault)13 b(Detection)h(and)g(Reco)o(v)o(ery)691 b(106)399 1167 y(7.3.7)62 b(Pvmd')1112 b(106)399 1225 y(7.3.8)62 b(Starting)13 b(Sla)o(v)o(e)h(Pvmds)839 b(107)399 1284 y(7.3.9)62 b(Resource)15 b(Manager)899 b(109)249 1350 y(7.4)96 b(Libp)o(vm)11 b(Library)1094 b(111)399 1421 y(7.4.1)62 b(Language)13 b(Supp)q(ort)900 b(111)399 1479 y(7.4.2)62 b(Connecting)14 b(to)g(the)g(Pvmd)783 b(111)249 1545 y(7.5)96 b(Proto)q(cols)1212 b(112)399 1616 y(7.5.1)62 b(Messages)1069 b(112)399 1674 y(7.5.2)62 b(Pvmd-Pvmd)1001 b(112)399 1732 y(7.5.3)62 b(Pvmd-T)m(ask)12 b(and)i(T)m(ask-T)m(ask)745 b(116)249 1798 y(7.6)96 b(Message)15 b(Routing)1072 b(117)399 1869 y(7.6.1)62 b(Pvmd)1124 b(117)399 1927 y(7.6.2)62 b(Pvmd)13 b(and)g(F)m(oreign)h(T)m(asks)780 b(118)399 1985 y(7.6.3)62 b(Libp)o(vm)1092 b(119)399 2043 y(7.6.4)62 b(Multicasting)1005 b(120)249 2110 y(7.7)96 b(T)m(ask)13 b(En)o(vironmen)o(t)1047 b(121)399 2180 y(7.7.1)62 b(En)o(vironmen)o(t)13 b(V)m(ariables)817 b(121)399 2238 y(7.7.2)62 b(Standard)14 b(Input)g(and)g(Output)725 b(122)399 2296 y(7.7.3)62 b(T)m(racing)1095 b(124)399 2355 y(7.7.4)62 b(Debugging)1039 b(124)249 2421 y(7.8)96 b(Console)13 b(Program)1069 b(124)249 2487 y(7.9)96 b(Resource)15 b(Limitations)995 b(125)p eop %%Page: 8 8 8 7 bop 249 251 a Fu(viii)1395 b(Con)o(ten)o(ts)399 507 y FA(7.9.1)62 b(In)14 b(the)g(PVM)h(Daemon)847 b(125)399 565 y(7.9.2)62 b(In)14 b(the)g(T)m(ask)1024 b(126)249 632 y(7.10)75 b(Multipro)q(cessor)15 b(Systems)953 b(126)399 702 y(7.10.1)41 b(Message-P)o(assing)15 b(Arc)o(hitectures)680 b(127)399 760 y(7.10.2)41 b(Shared-Memory)13 b(Arc)o(hitectures)691 b(130)399 819 y(7.10.3)41 b(Optimized)13 b(Send)h(and)g(Receiv)o(e)h (on)e(MPP)546 b(132)249 918 y FD(8)124 b(Adv)m(anced)17 b(T)l(opics)996 b FA(135)249 993 y(8.1)96 b(XPVM)1254 b(135)399 1064 y(8.1.1)62 b(Net)o(w)o(ork)14 b(View)976 b(137)399 1122 y(8.1.2)62 b(Space-Time)13 b(View)916 b(138)399 1180 y(8.1.3)62 b(Other)15 b(Views)1006 b(139)249 1246 y(8.2)96 b(P)o(orting)13 b(PVM)h(to)g(New)g(Arc)o(hitectures)738 b(139)399 1317 y(8.2.1)62 b(Unix)13 b(W)m(orkstations)892 b(140)399 1375 y(8.2.2)62 b(Multipro)q(cessors)950 b(142)249 1474 y FD(9)124 b(T)l(roublesho)q(oting)1014 b FA(147)249 1549 y(9.1)96 b(Getting)13 b(PVM)h(Installed)963 b(147)399 1620 y(9.1.1)62 b(Set)14 b(PVM)p 718 1620 13 2 v 16 w(R)o(OOT)925 b(147)399 1678 y(9.1.2)62 b(On-Line)14 b(Man)o(ual)f(P)o(ages)818 b(148)399 1736 y(9.1.3)62 b(Building)13 b(the)h(Release)860 b(148)399 1794 y(9.1.4)62 b(Errors)15 b(During)e(Build)866 b(148)399 1852 y(9.1.5)62 b(Compatible)12 b(V)m(ersions)859 b(149)249 1919 y(9.2)96 b(Getting)13 b(PVM)h(Running)963 b(149)399 1989 y(9.2.1)62 b(Pvmd)13 b(Log)g(File)961 b(149)399 2047 y(9.2.2)62 b(Pvmd)13 b(So)q(c)o(k)o(et)h(Address)i(File) 752 b(150)399 2105 y(9.2.3)62 b(Starting)13 b(PVM)i(from)d(the)i (Console)650 b(150)399 2164 y(9.2.4)62 b(Starting)13 b(the)i(Pvmd)e(b)o(y)g(Hand)723 b(151)399 2222 y(9.2.5)62 b(Adding)13 b(Hosts)i(to)f(the)g(Virtual)f(Mac)o(hine)554 b(151)399 2280 y(9.2.6)62 b(PVM)14 b(Host)g(File)955 b(152)399 2338 y(9.2.7)62 b(Sh)o(utting)13 b(Do)o(wn)959 b(152)249 2404 y(9.3)96 b(Compili)o(ng)11 b(Applications)954 b(153)399 2475 y(9.3.1)62 b(Header)15 b(Files)1006 b(153)p eop %%Page: 9 9 9 8 bop 249 251 a Fu(Con)o(ten)o(ts)1414 b(ix)399 507 y FA(9.3.2)62 b(Linking)1094 b(153)249 574 y(9.4)96 b(Running)12 b(Applications)986 b(154)399 644 y(9.4.1)62 b(Spa)o(wn)14 b(Can't)f(Find)g(Executables)672 b(154)399 702 y(9.4.2)62 b(Group)13 b(F)m(unctions)928 b(154)399 760 y(9.4.3)62 b(Memory)13 b(Use)1004 b(154)399 819 y(9.4.4)62 b(Input)14 b(and)g(Output)905 b(155)399 877 y(9.4.5)62 b(Sc)o(heduling)14 b(Priorit)o(y)882 b(156)399 935 y(9.4.6)62 b(Resource)15 b(Limitations)846 b(157)249 1001 y(9.5)96 b(Debugging)12 b(and)i(T)m(racing)957 b(157)249 1068 y(9.6)96 b(Debugging)12 b(the)j(System)973 b(158)399 1138 y(9.6.1)62 b(Run)o(time)12 b(Debug)i(Masks)819 b(159)399 1196 y(9.6.2)62 b(Tic)o(kle)13 b(the)i(Pvmd)928 b(159)399 1254 y(9.6.3)62 b(Starting)13 b(Pvmd)g(under)i(a)e(Debugger)626 b(160)399 1313 y(9.6.4)62 b(Sane)14 b(Heap)1041 b(160)399 1371 y(9.6.5)62 b(Statistics)1067 b(161)399 1437 y(Glossary)1225 b(163)249 1537 y FD(A)110 b(History)17 b(of)g(PVM)f(V)l(ersions)799 b FA(175)249 1657 y FD(B)113 b(PVM)16 b(3)h(Routines)995 b FA(181)399 1744 y(Bibliograph)o(y)1148 b(275)399 1811 y(Index)1281 b(277)p eop %%Page: 10 10 10 9 bop eop %%Page: 11 11 11 10 bop 249 260 a FD(Series)17 b(F)l(orew)o(ord)249 561 y FA(The)g(w)o(orld)g(of)f(mo)q(dern)g(computing)f(p)q(oten)o (tially)h(o\013ers)i(man)o(y)d(helpful)h(metho)q(ds)h(and)g(to)q(ols)f (to)249 615 y(scien)o(tists)d(and)e(engineers,)i(but)f(the)g(fast)f (pace)i(of)e(c)o(hange)g(in)g(computer)h(hardw)o(are,)g(soft)o(w)o (are,)f(and)249 669 y(algorithms)h(often)j(mak)o(es)f(practical)g(use)i (of)e(the)h(new)o(est)h(computing)d(tec)o(hnology)h(di\016cult.)20 b(The)249 723 y(Scien)o(ti\014c)d(and)e(Engineering)i(Computation)c (series)18 b(fo)q(cuses)f(on)f(rapid)g(adv)n(ances)g(in)g(computing)249 777 y(tec)o(hnologies)k(and)f(attempts)h(to)f(facilitate)g (transferring)h(these)h(tec)o(hnologies)f(to)f(applications)249 831 y(in)g(science)j(and)e(engineering.)36 b(It)19 b(will)g(include)h (b)q(o)q(oks)g(on)f(theories,)j(metho)q(ds,)e(and)g(original)249 885 y(applications)10 b(in)h(suc)o(h)g(areas)h(as)f(parallelism,)d (large-scale)j(sim)o(ulations,)e(time-critical)g(computing,)249 939 y(computer-aided)i(design)g(and)g(engineering,)g(use)h(of)f (computers)g(in)g(man)o(ufacturing,)e(visualization)249 993 y(of)k(scien)o(ti\014c)i(data,)e(and)h(h)o(uman-ma)o(c)o(hine)e(in) o(terface)i(tec)o(hnology)m(.)291 1047 y(The)j(series)i(will)d(help)i (scien)o(tists)h(and)e(engineers)i(to)e(understand)i(the)f(curren)o(t)h (w)o(orld)e(of)f(ad-)249 1101 y(v)n(anced)g(computation)d(and)j(to)f (an)o(ticipate)g(future)h(dev)o(elopmen)o(ts)f(that)g(will)f(impact)g (their)h(com-)249 1155 y(puting)f(en)o(vironmen)o(ts)f(and)g(op)q(en)i (up)f(new)g(capabilities)f(and)h(mo)q(des)f(of)g(computation.)291 1209 y(This)i(v)o(olume)e(presen)o(ts)k(a)e(soft)o(w)o(are)g(pac)o(k)n (age)g(for)f(dev)o(eloping)h(parallel)f(programs)g(executable)249 1263 y(on)h(net)o(w)o(ork)o(ed)h(Unix)f(computers.)22 b(The)15 b(to)q(ol)g(called)g(P)o(arallel)f(Virtual)g(Mac)o(hine)h (\(PVM\))h(allo)o(ws)249 1317 y(a)h(heterogeneous)i(collection)e(of)g (w)o(orkstations)g(and)g(sup)q(ercomputers)h(to)f(function)g(as)g(a)g (single)249 1371 y(high-p)q(erformance)i(parallel)g(mac)o(hine.)35 b(PVM)21 b(is)f(p)q(ortable)g(and)g(runs)h(on)e(a)h(wide)g(v)n(ariet)o (y)g(of)249 1425 y(mo)q(dern)15 b(platforms.)23 b(It)16 b(has)g(b)q(een)h(w)o(ell)f(accepted)h(b)o(y)f(the)h(global)d (computing)g(comm)o(unit)o(y)f(and)249 1479 y(used)i(successfully)g (for)e(solving)g(large-scale)h(problems)f(in)h(science,)h(industry)m(,) e(and)h(business.)249 1632 y(Jan)o(usz)h(S.)e(Ko)o(w)o(alik)p eop %%Page: 12 12 12 11 bop eop %%Page: 13 13 13 12 bop 249 260 a FD(Preface)249 561 y FA(In)12 b(this)f(b)q(o)q(ok)h (w)o(e)g(describ)q(e)h(the)f(P)o(arallel)f(Virtual)g(Mac)o(hine)g (\(PVM\))i(system)e(and)g(ho)o(w)h(to)f(dev)o(elop)249 615 y(programs)g(using)h(PVM.)f(PVM)i(is)f(a)f(soft)o(w)o(are)h(system) g(that)g(p)q(ermits)g(a)f(heterogeneous)j(collection)249 669 y(of)19 b(Unix)g(computers)g(net)o(w)o(ork)o(ed)h(together)h(to)e (b)q(e)h(view)o(ed)f(b)o(y)h(a)f(user's)h(program)e(as)h(a)g(single)249 723 y(parallel)g(computer.)38 b(PVM)21 b(is)f(the)h(mainsta)o(y)e(of)h (the)h(Heterogeneous)h(Net)o(w)o(ork)f(Computing)249 777 y(researc)o(h)e(pro)r(ject,)f(a)e(collab)q(orativ)o(e)g(v)o(en)o (ture)i(b)q(et)o(w)o(een)g(Oak)f(Ridge)f(National)f(Lab)q(oratory)m(,)h (the)249 831 y(Univ)o(ersit)o(y)e(of)f(T)m(ennessee,)j(Emory)c(Univ)o (ersit)o(y)m(,)h(and)h(Carnegie)g(Mellon)f(Univ)o(ersit)o(y)m(.)291 885 y(The)k(PVM)h(system)f(has)g(ev)o(olv)o(ed)g(in)g(the)h(past)f(sev) o(eral)h(y)o(ears)g(in)o(to)e(a)h(viable)g(tec)o(hnology)f(for)249 939 y(distributed)f(and)e(parallel)g(pro)q(cessing)i(in)f(a)f(v)n (ariet)o(y)h(of)f(disciplines.)18 b(PVM)d(supp)q(orts)g(a)e(straigh)o (t-)249 993 y(forw)o(ard)h(but)g(functionally)e(complete)h (message-passing)h(mo)q(del.)291 1047 y(PVM)c(is)g(designed)g(to)g (link)f(computing)g(resources)j(and)e(pro)o(vide)g(users)h(with)f(a)f (parallel)g(platform)249 1101 y(for)h(running)g(their)h(computer)f (applications,)f(irresp)q(ectiv)o(e)j(of)e(the)h(n)o(um)o(b)q(er)e(of)h (di\013eren)o(t)h(computers)249 1155 y(they)19 b(use)h(and)f(where)g (the)h(computers)f(are)g(lo)q(cated.)33 b(When)19 b(PVM)g(is)g (correctly)h(installed,)e(it)249 1209 y(is)h(capable)f(of)g(harnessing) h(the)g(com)o(bined)f(resources)j(of)d(t)o(ypically)f(heterogeneous)j (net)o(w)o(ork)o(ed)249 1263 y(computing)12 b(platforms)g(to)i(deliv)o (er)g(high)f(lev)o(els)h(of)f(p)q(erformance)h(and)g(functionalit)o(y)m (.)291 1317 y(In)c(this)g(b)q(o)q(ok,)g(w)o(e)g(describ)q(e)h(the)g (arc)o(hitecture)h(of)d(the)i(PVM)f(system)g(and)g(discuss)h(its)f (computing)249 1371 y(mo)q(del;)21 b(the)f(programming)c(in)o(terface)k (it)g(supp)q(orts;)j(auxiliary)18 b(facilities)g(for)i(pro)q(cess)h (groups;)249 1425 y(the)c(use)h(of)e(PVM)h(on)g(highly)e(parallel)h (systems)h(suc)o(h)g(as)g(the)g(In)o(tel)g(P)o(aragon,)f(Cra)o(y)h (T3D,)e(and)249 1479 y(Thinking)9 b(Mac)o(hines)i(CM-5;)g(and)g(some)e (of)h(the)h(in)o(ternal)f(implemen)o(tation)d(tec)o(hniques)12 b(emplo)o(y)o(ed.)249 1533 y(P)o(erformance)h(issues,)h(dealing)f (primarily)e(with)i(comm)o(unicatio)o(n)e(o)o(v)o(erheads,)i(are)h (analyzed,)f(and)249 1587 y(recen)o(t)k(\014ndings)f(as)g(w)o(ell)f(as) g(enhancemen)o(ts)i(are)f(presen)o(ted.)25 b(T)m(o)15 b(demonstrate)h(the)g(viabilit)o(y)e(of)249 1641 y(PVM)g(for)f (large-scale)g(scien)o(ti\014c)h(sup)q(ercomputing,)f(w)o(e)g(also)g (pro)o(vide)g(some)g(example)f(programs.)291 1694 y(This)g(b)q(o)q(ok)f (is)h(not)g(a)g(textb)q(o)q(ok;)h(rather,)f(it)g(is)g(mean)o(t)f(to)h (pro)o(vide)g(a)g(fast)g(en)o(trance)h(to)f(the)h(w)o(orld)249 1748 y(of)k(heterogeneous)j(net)o(w)o(ork)e(computing.)28 b(W)m(e)17 b(in)o(tend)h(this)g(b)q(o)q(ok)f(to)h(b)q(e)g(used)h(b)o(y) f(t)o(w)o(o)f(groups)249 1802 y(of)e(readers:)23 b(studen)o(ts)17 b(and)e(researc)o(hers)k(w)o(orking)14 b(with)h(net)o(w)o(orks)i(of)e (computers.)23 b(As)16 b(suc)o(h,)g(w)o(e)249 1856 y(hop)q(e)f(this)f (b)q(o)q(ok)g(can)g(serv)o(e)i(b)q(oth)e(as)g(a)g(reference)j(and)d(as) g(a)g(supplemen)o(t)f(to)h(a)g(teac)o(hing)h(text)f(on)249 1910 y(asp)q(ects)i(of)d(net)o(w)o(ork)h(computing.)291 1964 y(This)h(guide)h(will)e(familiarize)f(readers)18 b(with)d(the)i(basics)f(of)g(PVM)g(and)g(the)g(concepts)i(used)e(in)249 2018 y(programming)11 b(on)j(a)f(net)o(w)o(ork.)20 b(The)14 b(information)e(pro)o(vided)i(here)h(will)e(help)h(with)g(the)h(follo)o (wing)249 2072 y(PVM)f(tasks:)208 2213 y Ft(\017)20 b FA(W)m(riting)12 b(a)i(program)e(in)i(PVM)208 2284 y Ft(\017)20 b FA(Building)13 b(PVM)h(on)g(a)f(system)208 2355 y Ft(\017)20 b FA(Starting)14 b(PVM)g(on)g(a)f(set)i(of)e(mac)o (hines)208 2425 y Ft(\017)20 b FA(Debugging)13 b(a)h(PVM)g(application) p eop %%Page: 14 14 14 13 bop 249 251 a Fu(xiv)1421 b(Preface)249 507 y FD(A)17 b(Bit)h(of)g(History)249 615 y FA(The)13 b(PVM)g(pro)r(ject)h(b)q(egan) f(in)f(the)h(summer)e(of)i(1989)e(at)i(Oak)f(Ridge)g(National)g(Lab)q (oratory)m(.)17 b(The)249 669 y(protot)o(yp)q(e)i(system,)h(PVM)f(1.0,) f(w)o(as)h(constructed)i(b)o(y)e(V)m(aidy)e(Sunderam)h(and)h(Al)f (Geist;)j(this)249 723 y(v)o(ersion)13 b(of)e(the)i(system)f(w)o(as)g (used)i(in)o(ternally)d(at)h(the)h(Lab)f(and)g(w)o(as)g(not)h(released) g(to)f(the)h(outside.)249 777 y(V)m(ersion)19 b(2)f(of)g(PVM)g(w)o(as)h (written)g(at)f(the)h(Univ)o(ersit)o(y)f(of)g(T)m(ennessee)j(and)d (released)i(in)e(Marc)o(h)249 831 y(1991.)f(During)c(the)h(follo)o (wing)e(y)o(ear,)h(PVM)h(b)q(egan)g(to)g(b)q(e)g(used)h(in)e(man)o(y)f (scien)o(ti\014c)j(applications.)249 885 y(After)h(user)h(feedbac)o(k)f (and)g(a)f(n)o(um)o(b)q(er)g(of)g(c)o(hanges)i(\(PVM)f(2.1)f(-)g (2.4\),)g(a)g(complete)g(rewrite)i(w)o(as)249 939 y(undertak)o(en,)e (and)g(v)o(ersion)f(3)h(w)o(as)f(completed)g(in)g(F)m(ebruary)h(1993.)k (It)14 b(is)h(PVM)g(v)o(ersion)f(3.3)g(that)249 993 y(w)o(e)k(describ)q (e)h(in)e(this)h(b)q(o)q(ok)g(\(and)f(refer)i(to)e(simply)f(as)i (PVM\).)f(The)h(PVM)g(soft)o(w)o(are)g(has)g(b)q(een)249 1047 y(distributed)d(freely)f(and)f(is)h(b)q(eing)g(used)h(in)e (computational)f(applications)g(around)i(the)h(w)o(orld.)249 1167 y FD(Who)j(Should)g(Read)g(This)g(Bo)q(ok?)249 1275 y FA(T)m(o)g(successfully)h(use)g(this)g(b)q(o)q(ok,)g(one)f(should)g (b)q(e)h(exp)q(erienced)i(with)d(common)e(programmi)o(ng)249 1329 y(tec)o(hniques)i(and)e(understand)i(some)d(basic)h(parallel)g (pro)q(cessing)h(concepts.)27 b(In)17 b(particular,)f(this)249 1383 y(guide)21 b(assumes)f(that)h(the)g(user)h(kno)o(ws)f(ho)o(w)f(to) h(write,)h(execute,)i(and)d(debug)g(F)m(ortran)f(or)h(C)249 1437 y(programs)13 b(and)g(is)h(familiar)d(with)i(Unix.)249 1558 y FD(T)o(yp)q(ographical)19 b(Con)o(v)o(en)o(tions)249 1665 y FA(W)m(e)14 b(use)g(the)h(follo)o(wing)c(con)o(v)o(en)o(tions)j (in)f(this)h(b)q(o)q(ok:)208 1739 y Ft(\017)20 b FA(T)m(erms)14 b(used)i(for)e(the)i(\014rst)f(time,)e(v)n(ariables,)h(and)h(b)q(o)q (ok)f(titles)h(are)g(in)g FB(italic)g(typ)n(e)p FA(.)20 b(F)m(or)15 b(example:)249 1793 y(F)m(or)h(further)h(information)c(on)j FB(PVM)h(daemon)g FA(see)g(the)g(description)g(in)e FB(PVM:)i(Par)n(al) r(lel)f(Virtual)249 1847 y(Machine)g({)f(A)g(Users')f(Guide)h(and)g(T)m (utorial)f(for)h(Networke)n(d)f(Par)n(al)r(lel)g(Computing)p FA(.)208 1910 y Ft(\017)20 b FA(T)m(ext)14 b(that)g(the)g(user)h(t)o (yp)q(es)g(is)f(in)f Fs(Courier)21 b(bold)g(font)p FA(.)c(F)m(or)c (example:)k Fs($)22 b(pvm)249 2031 y FD(The)c(Map)249 2139 y FA(This)e(guide)h(is)f(divided)g(in)o(to)f(three)j(ma)r(jor)d (parts;)i(it)f(includes)h(nine)g(c)o(hapters,)h(a)e(glossary)m(,)g(t)o (w)o(o)249 2193 y(app)q(endixes)f(and)e(a)h(bibliograph)o(y)m(.)208 2266 y Ft(\017)20 b FA(P)o(art)10 b(I)f({)g(Basics)h(\(Chapters)h (1{6\).)16 b(This)9 b(part)h(pro)o(vides)f(the)h(facts,)g(as)g(w)o(ell) f(as)g(some)g(in)o(terpretation)249 2320 y(of)15 b(the)h(underlying)g (system.)23 b(It)16 b(describ)q(es)h(the)g(o)o(v)o(erall)d(concepts,)k (system,)d(and)g(tec)o(hniques)i(for)249 2374 y(making)12 b(PVM)i(w)o(ork)f(for)h(applications.)225 2454 y Fr({)21 b FA(In)o(tro)q(duction)15 b(to)f(PVM)h({)f(in)o(tro)q(duction)g(to)h (net)o(w)o(ork)g(computing)d(and)j(PVM;)f(terms)h(and)f(con-)249 2508 y(cepts,)h(including)e(an)g(o)o(v)o(erview)h(of)f(the)i(system)p eop %%Page: 15 15 15 14 bop 249 251 a Fu(Preface)1431 b(xv)225 507 y Fr({)21 b FA(Ov)o(erview)14 b(of)g(PVM)285 577 y Ft(\003)21 b FA(C,)13 b(C++,)h(and)g(F)m(ortran)285 638 y Ft(\003)21 b FA(basic)14 b(principles)285 700 y Ft(\003)21 b FA(\\hello.c")12 b(example)285 762 y Ft(\003)21 b FA(other)14 b(systems)g(\(e.g.,)f (MPI\))225 831 y Fr({)21 b FA(PVM)14 b(T)m(utorial)285 901 y Ft(\003)21 b FA(setting)14 b(up)g(PVM)285 963 y Ft(\003)21 b FA(running)13 b(an)h(existing)g(program)285 1024 y Ft(\003)21 b FA(console)285 1086 y Ft(\003)g FA(XPVM)225 1155 y Fr({)g FA(Programming)285 1225 y Ft(\003)g FA(basic)14 b(programmi)o(ng)d(tec)o(hniques)285 1287 y Ft(\003)21 b FA(data)13 b(decomp)q(osition)g(/)g(partitioning)285 1348 y Ft(\003)21 b FA(function)13 b(decomp)q(osition)285 1410 y Ft(\003)21 b FA(putting)13 b(PVM)i(in)e(existing)h(co)q(de)225 1480 y Fr({)21 b FA(User)15 b(In)o(terface)285 1549 y Ft(\003)21 b FA(functions)285 1611 y Ft(\003)g FA(host\014le)225 1680 y Fr({)g FA(Program)12 b(Examples)285 1750 y Ft(\003)21 b FA(PVM)14 b(programs)208 1835 y Ft(\017)20 b FA(P)o(art)14 b(2)g({)f(Details)h(\(Chapters)h(7{9\).)i(This)d(part)g(describ)q(es)i (the)e(in)o(ternals)g(of)g(PVM.)225 1921 y Fr({)21 b FA(Ho)o(w)13 b(PVM)i(W)m(orks)285 1991 y Ft(\003)21 b FA(Unix)13 b(ho)q(oks)h(to)g(PVM)g(in)o(terfaces)285 2052 y Ft(\003)21 b FA(m)o(ultipro)q(cessors)13 b(-)h(shared)h(and)f (distributed)g(memory)225 2122 y Fr({)21 b FA(Adv)n(anced)14 b(T)m(opics)285 2191 y Ft(\003)21 b FA(p)q(ortabilit)o(y)285 2253 y Ft(\003)g FA(debugging)285 2315 y Ft(\003)g FA(tracing)285 2377 y Ft(\003)g FA(XPVM)14 b(details)225 2446 y Fr({)21 b FA(T)m(roublesho)q(oting;)k(in)o(teresting)e(tidbits)e(and)h (information)e(on)i(PVM,)g(including)f(frequen)o(tly)249 2500 y(ask)o(ed)14 b(questions.)p eop %%Page: 16 16 16 15 bop 249 251 a Fu(xvi)1421 b(Preface)208 507 y Ft(\017)20 b FA(P)o(art)e(3)f({)f(The)i(Remains.)27 b(This)17 b(part)g(pro)o (vides)h(some)e(useful)h(information)e(on)i(the)h(use)g(of)e(the)249 561 y(PVM)e(in)o(terface.)225 646 y Fr({)21 b FA(Glossary)13 b(of)g(T)m(erms:)18 b(giv)o(es)13 b(a)h(short)g(description)h(for)e (terms)h(used)h(in)e(the)i(PVM)f(con)o(text.)225 714 y Fr({)21 b FA(App)q(endix)15 b(A,)f(History)h(of)g(PVM)g(v)o(ersions:) 20 b(list)14 b(of)h(all)e(the)j(v)o(ersions)f(of)f(PVM)h(that)g(ha)o(v) o(e)g(b)q(een)249 768 y(released)f(from)d(the)j(\014rst)f(one)g(in)f(F) m(ebruary)h(1991)f(through)h(July)g(1994.)j(Along)c(with)h(eac)o(h)g(v) o(ersion)249 822 y(w)o(e)h(include)g(a)g(brief)g(synopsis)g(of)f(the)i (impro)o(v)o(em)o(en)o(ts)d(made)h(in)g(v)o(ersion)h(3.)225 890 y Fr({)21 b FA(App)q(endix)c(B,)f(Man)h(P)o(ages:)24 b(pro)o(vides)17 b(an)f(alphab)q(etical)g(listing)g(of)g(all)f(the)i (PVM)h(3)e(routines.)249 944 y(Eac)o(h)e(routine)g(is)g(describ)q(ed)h (in)f(detail)f(for)g(b)q(oth)h(C)g(and)g(F)m(ortran)f(use.)19 b(There)c(are)f(examples)f(and)249 998 y(diagnostics)h(for)f(eac)o(h)i (routine.)225 1066 y Fr({)21 b FA(Quic)o(k)15 b(Reference)h(Card)f(for) f(PVM:)h(pro)o(vides)g(the)g(name)f(and)h(calling)e(sequence)k(for)d (the)i(PVM)249 1120 y(routines)i(in)g(b)q(oth)g(C)g(and)f(F)m(ortran.) 30 b(\(If)18 b(this)g(card)g(is)g(missing)e(from)g(the)i(text)g(a)g (replacemen)o(t)249 1174 y(can)13 b(b)q(e)f(do)o(wnloaded)g(o)o(v)o(er) g(the)h(net)o(w)o(ork)f(b)o(y)g(ftp'ing)f(to)h Fs(netlib2.cs.utk.edu)p FA(;)d Fs(cd)21 b(pvm3/book)p FA(;)249 1228 y Fs(get)g(refcard.ps)p FA(.\))225 1296 y Fr({)g FA(Bibliograph)o(y)249 1416 y FD(Commen)o(ts)16 b(and)i(Questions)249 1524 y FA(PVM)c(is)g(an)g (ongoing)f(researc)o(h)i(pro)r(ject.)20 b(As)14 b(suc)o(h,)h(w)o(e)f (pro)o(vide)g(limited)d(supp)q(ort.)19 b(W)m(e)14 b(w)o(elcome)249 1578 y(feedbac)o(k)f(on)e(this)h(b)q(o)q(ok)g(and)g(other)h(asp)q(ects) g(of)f(the)g(system)g(to)g(help)g(in)f(enhancing)h(PVM.)g(Please)249 1632 y(send)k(commen)o(ts)e(and)h(questions)32 b(to)15 b Fs(pvm@msr.epm.ornl.go)o(v)p FA(.)20 b(b)o(y)15 b(e-mail.)20 b(While)15 b(w)o(e)h(w)o(ould)249 1686 y(lik)o(e)e(to)h(resp)q(ond)h (to)f(all)e(the)j(electronic)g(mail)c(receiv)o(ed,)k(this)f(ma)o(y)e (not)i(b)q(e)g(alw)o(a)o(ys)f(p)q(ossible.)21 b(W)m(e)249 1740 y(therefore)13 b(recommend)e(also)g(p)q(osting)h(messages)g(to)f (the)i(newsgroup)f Fs(comp.parallel.pvm)p FA(.)i(This)249 1794 y(unmo)q(derated)e(newsgroup)h(w)o(as)f(established)g(on)g(the)h (In)o(ternet)g(in)f(Ma)o(y)f(1993)g(to)h(pro)o(vide)g(a)g(forum)249 1848 y(for)17 b(discussing)g(issues)h(related)g(to)e(the)i(use)g(of)e (PVM.)h(Questions)h(\(from)d(b)q(eginner)i(to)g(the)h(v)o(ery)249 1902 y(exp)q(erienced\),)j(advice,)d(exc)o(hange)g(of)g(public-domain)d (extensions)j(to)g(PVM,)g(and)f(bug)h(rep)q(orts)249 1956 y(can)c(b)q(e)h(p)q(osted)g(to)e(the)i(newsgroup.)249 2076 y FD(Ac)o(kno)o(wledgmen)o(ts)249 2184 y FA(W)m(e)d(gratefully)g (ac)o(kno)o(wledge)h(the)g(v)n(aluable)f(assistance)i(of)e(man)o(y)f(p) q(eople)i(who)g(ha)o(v)o(e)f(con)o(tributed)249 2238 y(to)k(the)h(PVM)g(pro)r(ject.)26 b(In)16 b(particular,)g(w)o(e)h (thank)f(P)o(eter)i(Rigsb)q(ee)e(and)g(Neil)g(Lincoln)g(for)g(their)249 2292 y(help)d(and)g(insigh)o(tful)f(commen)o(ts.)k(W)m(e)d(thank)g(the) g(PVM)h(group)f(at)g(the)g(Univ)o(ersit)o(y)g(of)g(T)m(ennessee)249 2346 y(and)g(Oak)f(Ridge)g(National)g(Lab)q(oratory|Carolyn)f(Aebisc)o (her,)j(Martin)e(Do,)g(June)i(Donato,)e(Jim)249 2400 y(Kohl,)i(Keith)g(Mo)q(ore,)h(Phil)e(P)o(apadop)q(oulos,)g(and)h(Hon)o (b)q(o)h(Zhou|for)e(their)i(assistance)g(with)f(the)249 2454 y(dev)o(elopmen)o(t)h(of)h(v)n(arious)f(pieces)j(and)e(comp)q (onen)o(ts)g(of)f(PVM.)h(In)g(addition)f(w)o(e)i(express)h(appre-)249 2508 y(ciation)f(to)g(all)f(those)i(who)f(help)q(ed)h(in)f(the)h (preparation)g(of)f(this)g(w)o(ork,)h(in)f(particular)g(to)g(Clin)o(t)p eop %%Page: 17 17 17 16 bop 249 251 a Fu(Preface)1409 b(xvii)249 507 y FA(Whaley)13 b(and)g(Rob)q(ert)g(Seccom)o(b)g(for)g(help)g(on)g(the)h (examples,)e(Ken)i(Ha)o(wic)o(k)f(for)g(con)o(tributions)g(to)249 561 y(the)i(glossary)m(,)d(and)i(Gail)e(Piep)q(er)j(for)f(helping)f (with)g(the)i(task)f(of)f(editing)h(the)g(man)o(uscript.)291 615 y(A)k(n)o(um)o(b)q(er)f(of)g(computer)h(v)o(endors)h(ha)o(v)o(e)f (encouraged)h(and)f(pro)o(vided)g(v)n(aluable)e(suggestions)249 669 y(during)j(the)h(dev)o(elopmen)o(t)e(of)h(PVM.)g(W)m(e)g(thank)g (Cra)o(y)g(Researc)o(h)h(Inc.,)g(IBM,)f(Con)o(v)o(ex)g(Com-)249 723 y(puter,)e(Silicon)e(Graphics,)h(Sequen)o(t)h(Computer,)e(and)h (Sun)g(Microsystems)g(for)f(their)i(assistance)249 777 y(in)c(p)q(orting)h(the)h(soft)o(w)o(are)e(to)h(their)g(platforms.)291 831 y(This)e(w)o(ork)h(w)o(ould)f(not)h(ha)o(v)o(e)f(b)q(een)i(p)q (ossible)f(without)g(the)g(supp)q(ort)h(of)e(the)i(O\016ce)f(of)g (Scien)o(ti\014c)249 885 y(Computing,)e(U.S.)h(Departmen)o(t)h(of)f (Energy)m(,)h(under)h(Con)o(tract)g(DE-A)o(C05-84OR21400;)c(the)j(Na-) 249 939 y(tional)j(Science)i(F)m(oundation)d(Science)k(and)d(T)m(ec)o (hnology)g(Cen)o(ter)i(Co)q(op)q(erativ)o(e)f(Agreemen)o(t)g(No.)249 993 y(CCR-8809615;)11 b(and)i(the)h(Science)h(Alliance,)e(a)g (state-supp)q(orted)j(program)c(at)h(the)h(Univ)o(ersit)o(y)g(of)249 1047 y(T)m(ennessee.)p eop %%Page: 18 18 18 17 bop eop %%Page: 19 19 19 18 bop 249 507 a Fq(PVM:)15 b(P)o(arallel)g(Virtual)h(Mac)o(hine)p eop %%Page: 1 20 1 19 bop 249 325 a Fp(1)25 b FD(In)o(tro)q(duction)249 561 y FA(P)o(arallel)18 b(pro)q(cessing,)j(the)e(metho)q(d)f(of)h(ha)o (ving)e(man)o(y)g(small)g(tasks)i(solv)o(e)g(one)g(large)g(problem,)249 615 y(has)14 b(emerged)f(as)h(a)f(k)o(ey)h(enabling)f(tec)o(hnology)g (in)g(mo)q(dern)g(computing.)j(The)e(past)g(sev)o(eral)g(y)o(ears)249 669 y(ha)o(v)o(e)h(witnessed)i(an)f(ev)o(er-increasing)g(acceptance)i (and)d(adoption)g(of)g(parallel)f(pro)q(cessing,)j(b)q(oth)249 723 y(for)e(high-p)q(erformance)f(scien)o(ti\014c)h(computing)f(and)g (for)h(more)f(\\general-purp)q(ose")i(applications,)249 777 y(w)o(as)d(a)g(result)h(of)e(the)i(demand)e(for)h(higher)g(p)q (erformance,)g(lo)o(w)o(er)g(cost,)g(and)g(sustained)h(pro)q(ductiv-) 249 831 y(it)o(y)m(.)k(The)d(acceptance)h(has)f(b)q(een)g(facilitated)f (b)o(y)g(t)o(w)o(o)g(ma)r(jor)e(dev)o(elopmen)o(ts:)19 b(massiv)o(ely)12 b(parallel)249 885 y(pro)q(cessors)k(\(MPPs\))f(and)f (the)g(widespread)h(use)g(of)e(distributed)i(computing.)291 939 y(MPPs)i(are)f(no)o(w)g(the)h(most)d(p)q(o)o(w)o(erful)i(computers) g(in)g(the)h(w)o(orld.)24 b(These)17 b(mac)o(hines)e(com)o(bine)249 993 y(a)f(few)h(h)o(undred)g(to)f(a)g(few)g(thousand)h(CPUs)g(in)f(a)g (single)g(large)g(cabinet)h(connected)h(to)e(h)o(undreds)249 1047 y(of)k(gigab)o(ytes)g(of)f(memory)m(.)28 b(MPPs)19 b(o\013er)g(enormous)f(computational)e(p)q(o)o(w)o(er)i(and)g(are)h (used)g(to)249 1101 y(solv)o(e)h(computational)d(Grand)j(Challenge)g (problems)f(suc)o(h)h(as)h(global)d(climate)g(mo)q(deling)g(and)249 1155 y(drug)13 b(design.)18 b(As)13 b(sim)o(ulations)d(b)q(ecome)j (more)e(realistic,)i(the)g(computational)e(p)q(o)o(w)o(er)i(required)g (to)249 1209 y(pro)q(duce)k(them)e(gro)o(ws)h(rapidly)m(.)22 b(Th)o(us,)16 b(researc)o(hers)j(on)c(the)h(cutting)g(edge)h(turn)f(to) g(MPPs)g(and)249 1263 y(parallel)d(pro)q(cessing)i(in)e(order)i(to)f (get)g(the)g(most)f(computational)e(p)q(o)o(w)o(er)k(p)q(ossible.)291 1317 y(The)f(second)h(ma)r(jor)d(dev)o(elopmen)o(t)h(a\013ecting)i (scien)o(ti\014c)g(problem)d(solving)h(is)h FB(distribute)n(d)g(c)n (om-)249 1371 y(puting)p FA(.)30 b(Distributed)18 b(computing)f(is)g(a) h(pro)q(cess)h(whereb)o(y)g(a)f(set)g(of)g(computers)g(connected)h(b)o (y)249 1425 y(a)d(net)o(w)o(ork)h(are)f(used)i(collectiv)o(ely)d(to)h (solv)o(e)h(a)f(single)g(large)g(problem.)24 b(As)16 b(more)g(and)g(more)f(or-)249 1479 y(ganizations)h(ha)o(v)o(e)g (high-sp)q(eed)i(lo)q(cal)d(area)i(net)o(w)o(orks)g(in)o(terconnecting) h(man)o(y)d(general-purp)q(ose)249 1533 y(w)o(orkstations,)i(the)g(com) o(bined)e(computational)g(resources)k(ma)o(y)14 b(exceed)19 b(the)e(p)q(o)o(w)o(er)g(of)f(a)g(single)249 1587 y(high-p)q (erformance)i(computer.)31 b(In)19 b(some)e(cases,)k(sev)o(eral)e(MPPs) g(ha)o(v)o(e)f(b)q(een)i(com)o(bined)d(using)249 1641 y(distributed)e(computing)d(to)i(pro)q(duce)h(unequaled)f (computational)d(p)q(o)o(w)o(er.)291 1694 y(The)f(most)f(imp)q(ortan)o (t)g(factor)h(in)g(distributed)h(computing)d(is)j(cost.)17 b(Large)10 b(MPPs)h(t)o(ypically)e(cost)249 1748 y(more)14 b(than)i($10)e(million.)20 b(In)15 b(con)o(trast,)h(users)h(see)g(v)o (ery)e(little)g(cost)h(in)f(running)g(their)h(problems)249 1802 y(on)e(a)f(lo)q(cal)g(set)i(of)e(existing)h(computers.)k(It)c(is)g (uncommon)d(for)i(distributed-computing)g(users)i(to)249 1856 y(realize)e(the)f(ra)o(w)h(computational)c(p)q(o)o(w)o(er)k(of)e (a)h(large)g(MPP)m(,)g(but)h(they)f(are)h(able)f(to)g(solv)o(e)g (problems)249 1910 y(sev)o(eral)i(times)f(larger)h(than)g(they)h(could) e(using)h(one)g(of)f(their)h(lo)q(cal)f(computers.)291 1964 y(Comm)o(on)g(b)q(et)o(w)o(een)j(distributed)g(computing)e(and)h (MPP)h(is)f(the)h(notion)e(of)h(message)g(passing.)249 2018 y(In)h(all)g(parallel)f(pro)q(cessing,)j(data)e(m)o(ust)f(b)q(e)i (exc)o(hanged)g(b)q(et)o(w)o(een)h(co)q(op)q(erating)f(tasks.)26 b(Sev)o(eral)249 2072 y(paradigms)15 b(ha)o(v)o(e)h(b)q(een)h(tried)g (including)f(shared)h(memory)m(,)d(parallelizing)g(compilers,)i(and)g (mes-)249 2126 y(sage)f(passing.)20 b(The)15 b(message-passing)f(mo)q (del)g(has)g(b)q(ecome)h(the)g(paradigm)e(of)h(c)o(hoice,)h(from)d(the) 249 2180 y(p)q(ersp)q(ectiv)o(e)18 b(of)e(the)g(n)o(um)o(b)q(er)g(and)g (v)n(ariet)o(y)f(of)g(m)o(ultipro)q(cessors)h(that)g(supp)q(ort)h(it,)f (as)g(w)o(ell)f(as)h(in)249 2234 y(terms)e(of)f(applications,)f (languages,)h(and)h(soft)o(w)o(are)g(systems)g(that)g(use)h(it.)291 2288 y(The)e(P)o(arallel)f(Virtual)g(Mac)o(hine)h(\(PVM\))h(system)f (describ)q(ed)h(in)f(this)g(b)q(o)q(ok)g(uses)h(the)g(message-)249 2342 y(passing)20 b(mo)q(del)f(to)h(allo)o(w)e(programmers)g(to)i (exploit)g(distributed)h(computing)d(across)j(a)f(wide)249 2396 y(v)n(ariet)o(y)15 b(of)g(computer)h(t)o(yp)q(es,)h(including)d (MPPs.)25 b(A)16 b(k)o(ey)f(concept)i(in)f(PVM)g(is)g(that)f(it)h(mak)o (es)e(a)249 2450 y(collection)g(of)f(computers)h(app)q(ear)g(as)g(one)g (large)g FB(virtual)f FA(mac)o(hine,)f(hence)j(its)f(name.)p eop %%Page: 2 21 2 20 bop 249 251 a Fu(2)1394 b(Chapter)13 b(1)249 507 y FD(1.1)52 b(Heterogeneous)17 b(Net)o(w)o(ork)f(Computing)249 615 y FA(In)e(an)f(MPP)m(,)h(ev)o(ery)h(pro)q(cessor)g(is)f(exactly)g (lik)o(e)f(ev)o(ery)h(other)h(in)e(capabilit)o(y)m(,)f(resources,)j (soft)o(w)o(are,)249 669 y(and)f(comm)o(unicatio)o(n)d(sp)q(eed.)20 b(Not)14 b(so)g(on)f(a)h(net)o(w)o(ork.)k(The)d(computers)f(a)o(v)n (ailable)e(on)h(a)h(net)o(w)o(ork)249 723 y(ma)o(y)e(b)q(e)i(made)e(b)o (y)h(di\013eren)o(t)i(v)o(endors)f(or)g(ha)o(v)o(e)f(di\013eren)o(t)i (compilers.)h(Indeed,)f(when)f(a)f(program-)249 777 y(mer)f(wishes)i (to)f(exploit)f(a)h(collection)g(of)f(net)o(w)o(ork)o(ed)i(computers,)e (he)i(ma)o(y)d(ha)o(v)o(e)i(to)g(con)o(tend)g(with)249 831 y(sev)o(eral)h(di\013eren)o(t)h(t)o(yp)q(es)g(of)e(heterogeneit)o (y:)208 918 y Ft(\017)20 b FA(arc)o(hitecture,)208 989 y Ft(\017)g FA(data)14 b(format,)208 1059 y Ft(\017)20 b FA(computational)12 b(sp)q(eed,)208 1130 y Ft(\017)20 b FA(mac)o(hine)13 b(load,)f(and)208 1201 y Ft(\017)20 b FA(net)o(w)o(ork)14 b(load.)291 1288 y(The)g(set)h(of)e(computers)i (a)o(v)n(ailable)c(can)k(include)f(a)g(wide)g(range)g(of)f(arc)o (hitecture)j(t)o(yp)q(es)f(suc)o(h)g(as)249 1342 y(386/486)h(PC)i (class)g(mac)o(hines,)f(high-p)q(erformance)g(w)o(orkstations,)h (shared-memory)e(m)o(ultipro-)249 1396 y(cessors,)k(v)o(ector)e(sup)q (ercomputers,)h(and)f(ev)o(en)g(large)f(MPPs.)30 b(Eac)o(h)17 b(arc)o(hitecture)j(t)o(yp)q(e)d(has)h(its)249 1450 y(o)o(wn)13 b(optimal)f(programmi)o(ng)f(metho)q(d.)17 b(In)d(addition,)e(a)h(user) i(can)f(b)q(e)g(faced)h(with)e(a)g(hierarc)o(h)o(y)i(of)249 1504 y(programming)10 b(decisions.)19 b(The)14 b(parallel)f(virtual)f (mac)o(hine)h(ma)o(y)f(itself)h(b)q(e)i(comp)q(osed)e(of)g(parallel)249 1558 y(computers.)26 b(Ev)o(en)17 b(when)g(the)g(arc)o(hitectures)i (are)d(only)g(serial)g(w)o(orkstations,)h(there)h(is)e(still)f(the)249 1611 y(problem)d(of)h(incompatible)f(binary)h(formats)f(and)h(the)i (need)f(to)g(compile)e(a)h(parallel)f(task)i(on)g(eac)o(h)249 1665 y(di\013eren)o(t)h(mac)o(hine.)291 1719 y(Data)k(formats)g(on)h (di\013eren)o(t)h(computers)f(are)h(often)f(incompatible.)35 b(This)20 b(incompatibili)o(t)o(y)249 1773 y(is)d(an)h(imp)q(ortan)o(t) e(p)q(oin)o(t)h(in)g(distributed)h(computing)e(b)q(ecause)j(data)e(sen) o(t)i(from)d(one)h(computer)249 1827 y(ma)o(y)c(b)q(e)i(unreadable)g (on)g(the)g(receiving)g(computer.)20 b(Message-passing)15 b(pac)o(k)n(ages)g(dev)o(elop)q(ed)g(for)249 1881 y(heterogeneous)e(en) o(vironmen)o(ts)c(m)o(ust)h(mak)o(e)f(sure)i(all)f(the)h(computers)f (understand)i(the)f(exc)o(hanged)249 1935 y(data.)17 b(Unfortunately)m(,)c(the)g(early)g(message-passing)g(systems)g(dev)o (elop)q(ed)h(for)e(sp)q(eci\014c)j(MPPs)f(are)249 1989 y(not)f(amenable)f(to)h(distributed)h(computing)d(b)q(ecause)k(they)f (do)e(not)i(include)f(enough)g(information)249 2043 y(in)g(the)i (message)f(to)f(enco)q(de)j(or)d(deco)q(de)j(it)d(for)h(an)o(y)f(other) i(computer.)291 2097 y(Ev)o(en)g(if)e(the)j(set)f(of)f(computers)h(are) g(all)e(w)o(orkstations)h(with)h(the)g(same)f(data)g(format,)e(there)k (is)249 2151 y(still)10 b(heterogeneit)o(y)j(due)e(to)g(di\013eren)o(t) h(computational)d(sp)q(eeds.)19 b(As)12 b(an)f(simple)e(example,)h (consider)249 2205 y(the)i(problem)e(of)g(running)h(parallel)f(tasks)h (on)g(a)g(virtual)f(mac)o(hine)g(that)h(is)g(comp)q(osed)g(of)g(one)g (sup)q(er-)249 2259 y(computer)f(and)g(one)h(w)o(orkstation.)16 b(The)11 b(programmer)d(m)o(ust)i(b)q(e)h(careful)f(that)h(the)g(sup)q (ercomputer)249 2313 y(do)q(esn't)17 b(sit)f(idle)f(w)o(aiting)g(for)h (the)g(next)h(data)f(from)e(the)j(w)o(orkstation)e(b)q(efore)i(con)o (tin)o(uing.)24 b(The)249 2367 y(problem)14 b(of)g(computational)e(sp)q (eeds)17 b(can)e(b)q(e)g(v)o(ery)h(subtle.)21 b(The)15 b(virtual)f(mac)o(hine)g(can)h(b)q(e)g(com-)249 2421 y(p)q(osed)e(of)f(a)g(set)h(of)e(iden)o(tical)h(w)o(orkstations.)17 b(But)c(since)g(net)o(w)o(ork)o(ed)g(computers)f(can)g(ha)o(v)o(e)h (sev)o(eral)249 2475 y(other)j(users)g(on)f(them)g(running)f(a)h(v)n (ariet)o(y)g(of)f(jobs,)h(the)h(mac)o(hine)e(load)g(can)h(v)n(ary)g (dramatically)m(.)p eop %%Page: 3 22 3 21 bop 249 251 a Fu(In)o(tro)q(duction)1367 b(3)249 507 y FA(The)18 b(result)g(is)f(that)h(the)g(e\013ectiv)o(e)h (computational)c(p)q(o)o(w)o(er)i(across)i(iden)o(tical)e(w)o (orkstations)g(can)249 561 y(v)n(ary)c(b)o(y)h(an)g(order)g(of)g (magnitude.)291 615 y(Lik)o(e)k(mac)o(hine)f(load,)h(the)i(time)d(it)h (tak)o(es)h(to)f(send)i(a)e(message)g(o)o(v)o(er)h(the)g(net)o(w)o(ork) g(can)g(v)n(ary)249 669 y(dep)q(ending)f(on)f(the)h(net)o(w)o(ork)f (load)f(imp)q(osed)h(b)o(y)g(all)f(the)h(other)h(net)o(w)o(ork)g (users,)h(who)e(ma)o(y)e(not)249 723 y(ev)o(en)g(b)q(e)h(using)e(an)o (y)g(of)g(the)h(computers)g(in)f(the)h(virtual)f(mac)o(hine.)19 b(This)c(sending)g(time)e(b)q(ecomes)249 777 y(imp)q(ortan)o(t)c(when)j (a)f(task)g(is)g(sitting)g(idle)f(w)o(aiting)g(for)h(a)f(message,)h (and)g(it)g(is)g(ev)o(en)h(more)e(imp)q(ortan)o(t)249 831 y(when)18 b(the)g(parallel)f(algorithm)e(is)i(sensitiv)o(e)i(to)e (message)h(arriv)n(al)e(time.)28 b(Th)o(us,)18 b(in)f(distributed)249 885 y(computing,)12 b(heterogeneit)o(y)j(can)f(app)q(ear)g(dynamically) d(in)j(ev)o(en)g(simple)f(setups.)291 939 y(Despite)20 b(these)i(n)o(umerous)d(di\016culties)h(caused)h(b)o(y)e(heterogeneit)o (y)m(,)j(distributed)f(computing)249 993 y(o\013ers)15 b(man)o(y)d(adv)n(an)o(tages:)208 1065 y Ft(\017)20 b FA(By)14 b(using)g(existing)f(hardw)o(are,)h(the)h(cost)f(of)g(this)f (computing)g(can)h(b)q(e)g(v)o(ery)h(lo)o(w.)208 1128 y Ft(\017)20 b FA(P)o(erformance)12 b(can)h(b)q(e)g(optimized)e(b)o(y)h (assigning)g(eac)o(h)h(individual)d(task)i(to)h(the)g(most)e (appropriate)249 1182 y(arc)o(hitecture.)208 1245 y Ft(\017)20 b FA(One)g(can)f(exploit)f(the)i(heterogeneous)h(nature)f(of)e(a)h (computation.)32 b(Heterogeneous)21 b(net)o(w)o(ork)249 1299 y(computing)12 b(is)h(not)h(just)g(a)f(lo)q(cal)f(area)i(net)o(w)o (ork)g(connecting)g(w)o(orkstations)g(together.)k(F)m(or)c(exam-)249 1353 y(ple,)h(it)g(pro)o(vides)h(access)h(to)e(di\013eren)o(t)i(data)e (bases)h(or)f(to)g(sp)q(ecial)h(pro)q(cessors)i(for)d(those)h(parts)g (of)249 1407 y(an)e(application)e(that)i(can)g(run)g(only)g(on)f(a)h (certain)g(platform.)208 1470 y Ft(\017)20 b FA(The)g(virtual)f (computer)h(resources)i(can)f(gro)o(w)e(in)g(stages)i(and)f(tak)o(e)g (adv)n(an)o(tage)f(of)g(the)i(latest)249 1524 y(computational)12 b(and)h(net)o(w)o(ork)h(tec)o(hnologies.)208 1587 y Ft(\017)20 b FA(Program)14 b(dev)o(elopmen)o(t)g(can)h(b)q(e)h(enhanced)g(b)o(y)f (using)g(a)g(famili)o(ar)d(en)o(vironmen)o(t.)21 b(Programmers)249 1641 y(can)14 b(use)h(editors,)f(compilers,)e(and)i(debuggers)h(that)f (are)g(a)o(v)n(ailable)e(on)i(individual)d(mac)o(hines.)208 1704 y Ft(\017)20 b FA(The)14 b(individual)d(computers)i(and)g(w)o (orkstations)g(are)g(usually)g(stable,)g(and)g(substan)o(tial)f(exp)q (ertise)249 1758 y(in)h(their)i(use)f(is)g(readily)g(a)o(v)n(ailable.) 208 1821 y Ft(\017)20 b FA(User-lev)o(el)13 b(or)g(program-lev)o(el)d (fault)h(tolerance)j(can)e(b)q(e)h(implemen)o(ted)d(with)i(little)g (e\013ort)h(either)g(in)249 1875 y(the)i(application)d(or)i(in)f(the)i (underlying)e(op)q(erating)h(system.)208 1938 y Ft(\017)20 b FA(Distributed)14 b(computing)e(can)j(facilitate)d(collab)q(orativ)o (e)h(w)o(ork.)249 2010 y(All)h(these)j(factors)f(translate)f(in)o(to)g (reduced)i(dev)o(elopmen)o(t)d(and)h(debugging)g(time,)f(reduced)j (con-)249 2064 y(ten)o(tion)f(for)f(resources,)k(reduced)e(costs,)g (and)f(p)q(ossibly)f(more)g(e\013ectiv)o(e)i(implemen)o(tations)c(of)i (an)249 2118 y(application.)g(It)c(is)f(these)i(b)q(ene\014ts)g(that)e (PVM)h(seeks)g(to)f(exploit.)17 b(F)m(rom)8 b(the)j(b)q(eginning,)f (the)h(PVM)249 2172 y(soft)o(w)o(are)17 b(pac)o(k)n(age)f(w)o(as)g (designed)h(to)g(mak)o(e)e(programmi)o(ng)f(for)i(a)g(heterogeneous)j (collection)d(of)249 2226 y(mac)o(hines)d(straigh)o(tforw)o(ard.)249 2346 y FD(1.2)52 b(T)l(rends)17 b(in)h(Distributed)g(Computing)249 2454 y FA(Stand-alone)13 b(w)o(orkstations)g(deliv)o(ering)g(sev)o (eral)h(tens)h(of)e(milli)o(ons)e(of)i(op)q(erations)h(p)q(er)g(second) h(are)249 2508 y(commonplace,)f(and)i(con)o(tin)o(uing)g(increases)i (in)e(p)q(o)o(w)o(er)h(are)g(predicted.)27 b(When)16 b(these)i(computer)p eop %%Page: 4 23 4 22 bop 249 251 a Fu(4)1394 b(Chapter)13 b(1)249 507 y FA(systems)i(are)f(in)o(terconnected)j(b)o(y)d(an)g(appropriate)g (high-sp)q(eed)h(net)o(w)o(ork,)g(their)f(com)o(bined)f(com-)249 561 y(putational)g(p)q(o)o(w)o(er)h(can)g(b)q(e)g(applied)g(to)f(solv)o (e)h(a)g(v)n(ariet)o(y)f(of)g(computationally)e(in)o(tensiv)o(e)j (applica-)249 615 y(tions.)k(Indeed,)c(net)o(w)o(ork)f(computing)f(ma)o (y)f(ev)o(en)j(pro)o(vide)g(sup)q(ercomputer-lev)o(el)f(computational) 249 669 y(p)q(o)o(w)o(er.)18 b(F)m(urther,)12 b(under)h(the)f(righ)o(t) f(circumstances,)h(the)h(net)o(w)o(ork-based)f(approac)o(h)g(can)f(b)q (e)i(e\013ec-)249 723 y(tiv)o(e)j(in)f(coupling)g(sev)o(eral)h(similar) d(m)o(ultipro)q(cessors,)j(resulting)f(in)h(a)f(con\014guration)g(that) h(migh)o(t)249 777 y(b)q(e)f(economically)c(and)j(tec)o(hnically)f (di\016cult)h(to)f(ac)o(hiev)o(e)i(with)e(sup)q(ercomputer)i(hardw)o (are.)291 831 y(T)m(o)i(b)q(e)i(e\013ectiv)o(e,)h(distributed)e (computing)f(requires)i(high)e(comm)o(unication)e(sp)q(eeds.)32 b(In)18 b(the)249 885 y(past)f(\014fteen)g(y)o(ears)g(or)g(so,)g(net)o (w)o(ork)g(sp)q(eeds)h(ha)o(v)o(e)f(increased)h(b)o(y)e(sev)o(eral)h (orders)h(of)e(magnitude)249 939 y(\(see)f(Figure)f(1.1\).)409 1598 y @beginspecial 113 @llx 297 @lly 471 @urx 488 @ury 3060 @rwi 1440 @rhi @setspecial %%BeginDocument: fig1.ps /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Times-Bold reencodeISO def /Helvetica-Oblique reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.799705 0 0 0.799705 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 150 218 ] concat %I 81 200 437 200 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 150 218 ] concat %I 82 200 82 360 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 195 455 ] concat %I [ (10) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 188 507 ] concat %I [ (100) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 181 558 ] concat %I [ (1000) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I p u %I t [ 1 0 0 1 0 -26 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 144 632 ] concat %I [ (Bandwidth) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 169 618 ] concat %I [ (Mbit/s) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 261 408 ] concat %I [ (1980) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 335 408 ] concat %I [ (1985) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 403 408 ] concat %I [ (1990) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 478 408 ] concat %I [ (1995) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-helvetica-medium-o-*-140-* Helvetica-Oblique 14 SetF %I t [ 1 0 0 1 319 480 ] concat %I [ (Token ring) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-helvetica-medium-o-*-140-* Helvetica-Oblique 14 SetF %I t [ 1 0 0 1 400 508 ] concat %I [ (FDDI) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-helvetica-medium-o-*-140-* Helvetica-Oblique 14 SetF %I t [ 1 0 0 1 467 549 ] concat %I [ (Gigabit ) (Networks) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-helvetica-medium-o-*-140-* Helvetica-Oblique 14 SetF %I t [ 1 0 0 1 253 454 ] concat %I [ (Ethernet) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* Times-Bold 14 SetF %I t [ 1 0 0 1 368 387 ] concat %I [ (Year) ] Text End End %I eop showpage end %%EndDocument @endspecial 249 1661 a Fo(Figure)f(1.1)249 1698 y Fy(Net)o(w)o(orking) d(sp)q(eeds)291 1797 y FA(Among)i(the)i(most)e(notable)i(adv)n(ances)g (in)f(computer)h(net)o(w)o(orking)f(tec)o(hnology)h(are)g(the)g(follo)o (w-)249 1851 y(ing:)208 1937 y Ft(\017)20 b FA(Ethernet)14 b({)e(the)h(name)e(giv)o(en)g(to)h(the)h(p)q(opular)f(lo)q(cal)f(area)i (pac)o(k)o(et-switc)o(hed)g(net)o(w)o(ork)f(tec)o(hnology)249 1991 y(in)o(v)o(en)o(ted)k(b)o(y)f(Xero)o(x)h(P)m(AR)o(C.)f(The)h (Ethernet)i(is)d(a)h(10)f(Mbit/s)g(broadcast)i(bus)f(tec)o(hnology)f (with)249 2045 y(distributed)g(access)g(con)o(trol.)208 2115 y Ft(\017)20 b FA(FDDI)10 b({)h(the)g(Fib)q(er)h(Distributed)f (Data)f(In)o(terface.)18 b(FDDI)11 b(is)f(a)h(100-Mbit/sec)g(tok)o (en-passing)f(ring)249 2168 y(that)16 b(uses)h(optical)f(\014b)q(er)g (for)g(transmission)f(b)q(et)o(w)o(een)i(stations)f(and)g(has)g(dual)g (coun)o(ter-rotating)249 2222 y(rings)e(to)g(pro)o(vide)f(redundan)o(t) i(data)e(paths)i(for)e(reliabilit)o(y)m(.)208 2292 y Ft(\017)20 b FA(HiPPI)14 b({)g(the)h(high-p)q(erformance)e(parallel)g (in)o(terface.)20 b(HiPPI)14 b(is)g(a)g(copp)q(er-based)i(data)e(comm)o (u-)249 2346 y(nications)k(standard)g(capable)h(of)e(transferring)i (data)f(at)g(800)f(Mbit/sec)i(o)o(v)o(er)f(32)g(parallel)f(lines)249 2400 y(or)i(1.6)e(Gbit/sec)i(o)o(v)o(er)g(64)f(parallel)g(lines.)32 b(Most)19 b(commercially)c(a)o(v)n(ailable)i(high-p)q(erformance)249 2454 y(computers)e(o\013er)g(a)g(HIPPI)g(in)o(terface.)21 b(It)14 b(is)h(a)f(p)q(oin)o(t-to-p)q(oin)o(t)g(c)o(hannel)g(that)h(do) q(es)h(not)e(supp)q(ort)249 2508 y(m)o(ultidrop)e(con\014gurations.)p eop %%Page: 5 24 5 23 bop 249 251 a Fu(In)o(tro)q(duction)1367 b(5)208 507 y Ft(\017)20 b FA(SONET)h({)f(Sync)o(hronous)h(Optical)f(Net)o(w)o (ork.)37 b(SONET)21 b(is)f(a)g(series)h(of)f(optical)f(signals)h(that) 249 561 y(are)e(m)o(ultiples)d(of)h(a)h(basic)h(signal)e(rate)h(of)g (51.84)f(Mbit/sec)i(called)e(OC-1.)28 b(The)18 b(OC-3)f(\(155.52)249 615 y(Mbit/sec\))i(and)e(OC-12)h(\(622.08)e(Mbit/sec\))i(ha)o(v)o(e)g (b)q(een)h(designated)f(as)g(the)g(customer)g(access)249 669 y(rates)11 b(in)f(future)h(B-ISDN)g(net)o(w)o(orks,)g(and)f(signal) f(rates)i(of)f(OC-192)g(\(9.952)f(Gbit/sec\))i(are)f(de\014ned.)208 738 y Ft(\017)20 b FA(A)m(TM)12 b({)g(Async)o(hronous)h(T)m(ransfer)f (Mo)q(de.)18 b(A)m(TM)12 b(is)f(the)i(tec)o(hnique)g(for)f(transp)q (ort,)h(m)o(ultiplexing,)249 792 y(and)j(switc)o(hing)f(that)h(pro)o (vides)g(a)g(high)f(degree)i(of)e(\015exibilit)o(y)f(required)j(b)o(y)f (B-ISDN.)f(A)m(TM)h(is)f(a)249 846 y(connection-orien)o(ted)j(proto)q (col)e(emplo)o(ying)e(\014xed-size)k(pac)o(k)o(ets)f(with)g(a)f(5-b)o (yte)h(header)g(and)g(48)249 900 y(b)o(ytes)e(of)e(information.)291 985 y(These)k(adv)n(ances)g(in)f(high-sp)q(eed)g(net)o(w)o(orking)g (promise)f(high)h(throughput)h(with)e(lo)o(w)h(latency)249 1039 y(and)f(mak)o(e)f(it)h(p)q(ossible)g(to)h(utilize)f(distributed)g (computing)f(for)h(y)o(ears)h(to)f(come.)21 b(Consequen)o(tly)m(,)249 1093 y(increasing)13 b(n)o(um)o(b)q(ers)g(of)f(univ)o(ersities,)i(go)o (v)o(ernmen)o(t)d(and)i(industrial)g(lab)q(oratories,)f(and)h (\014nancial)249 1147 y(\014rms)h(are)h(turning)g(to)g(distributed)g (computing)f(to)g(solv)o(e)h(their)g(computational)e(problems.)20 b(The)249 1201 y(ob)r(jectiv)o(e)13 b(of)f(PVM)h(is)f(to)h(enable)g (these)h(institutions)e(to)g(use)i(distributed)f(computing)e FB(e\016ciently.)249 1321 y FD(1.3)52 b(PVM)16 b(Ov)o(erview)249 1429 y FA(The)j(PVM)h(soft)o(w)o(are)f(pro)o(vides)g(a)f(uni\014ed)h (framew)o(ork)f(within)g(whic)o(h)g(parallel)g(programs)g(can)249 1483 y(b)q(e)d(dev)o(elop)q(ed)g(in)f(an)g(e\016cien)o(t)h(and)f (straigh)o(tforw)o(ard)g(manner)f(using)h(existing)g(hardw)o(are.)20 b(PVM)249 1537 y(enables)14 b(a)g(collection)f(of)g(heterogeneous)j (computer)d(systems)h(to)g(b)q(e)g(view)o(ed)g(as)f(a)h(single)f (parallel)249 1591 y(virtual)h(mac)o(hine.)20 b(PVM)15 b(transparen)o(tly)h(handles)f(all)f(message)g(routing,)h(data)f(con)o (v)o(ersion,)h(and)249 1645 y(task)f(sc)o(heduling)g(across)h(a)f(net)o (w)o(ork)g(of)f(incompatible)f(computer)h(arc)o(hitectures.)291 1699 y(The)19 b(PVM)h(computing)d(mo)q(del)h(is)h(simple)f(y)o(et)h(v)o (ery)h(general,)g(and)f(accommo)q(dates)e(a)i(wide)249 1753 y(v)n(ariet)o(y)f(of)h(application)e(program)g(structures.)35 b(The)20 b(programmi)o(ng)c(in)o(terface)j(is)g(delib)q(erately)249 1807 y(straigh)o(tforw)o(ard,)13 b(th)o(us)g(p)q(ermitting)f(simple)g (program)g(structures)k(to)d(b)q(e)h(implemen)o(ted)e(in)g(an)i(in-)249 1861 y(tuitiv)o(e)c(manner.)16 b(The)11 b(user)g(writes)g(his)f (application)f(as)h(a)g(collection)g(of)g(co)q(op)q(erating)g FB(tasks)p FA(.)17 b(T)m(asks)249 1914 y(access)h(PVM)e(resources)i (through)e(a)f(library)g(of)h(standard)g(in)o(terface)g(routines.)24 b(These)17 b(routines)249 1968 y(allo)o(w)9 b(the)j(initiation)d(and)i (termination)e(of)h(tasks)i(across)f(the)h(net)o(w)o(ork)f(as)g(w)o (ell)f(as)i(comm)o(uni)o(cation)249 2022 y(and)k(sync)o(hronization)g (b)q(et)o(w)o(een)h(tasks.)24 b(The)17 b(PVM)f(message-passing)f (primitiv)o(es)f(are)j(orien)o(ted)249 2076 y(to)o(w)o(ards)f (heterogeneous)h(op)q(eration,)f(in)o(v)o(olving)d(strongly)i(t)o(yp)q (ed)h(constructs)i(for)d(bu\013ering)h(and)249 2130 y(transmission.)27 b(Comm)o(uni)o(cation)14 b(constructs)19 b(include)f(those)g(for)e (sending)i(and)f(receiving)g(data)249 2184 y(structures)d(as)e(w)o(ell) e(as)i(high-lev)o(el)e(primitiv)o(es)g(suc)o(h)i(as)g(broadcast,)g (barrier)g(sync)o(hronization,)f(and)249 2238 y(global)h(sum.)291 2292 y(PVM)h(tasks)h(ma)o(y)d(p)q(ossess)k(arbitrary)e(con)o(trol)g (and)g(dep)q(endency)i(structures.)20 b(In)14 b(other)f(w)o(ords,)249 2346 y(at)19 b(an)o(y)f(p)q(oin)o(t)g(in)g(the)h(execution)h(of)e(a)g (concurren)o(t)i(application,)e(an)o(y)h(task)f(in)h(existence)h(ma)o (y)249 2400 y(start)f(or)g(stop)g(other)h(tasks)f(or)g(add)f(or)h (delete)h(computers)f(from)e(the)i(virtual)f(mac)o(hine.)31 b(An)o(y)249 2454 y(pro)q(cess)16 b(ma)o(y)d(comm)o(unicate)f(and/or)i (sync)o(hronize)h(with)g(an)o(y)f(other.)20 b(An)o(y)14 b(sp)q(eci\014c)i(con)o(trol)e(and)249 2508 y(dep)q(endency)k (structure)g(ma)o(y)c(b)q(e)i(implemen)o(ted)d(under)k(the)f(PVM)g (system)g(b)o(y)f(appropriate)h(use)p eop %%Page: 6 25 6 24 bop 249 251 a Fu(6)1394 b(Chapter)13 b(1)249 507 y FA(of)g(PVM)i(constructs)h(and)d(host)h(language)f(con)o(trol-\015o)o (w)g(statemen)o(ts.)291 561 y(Owing)18 b(to)g(its)h(ubiquitous)f (nature)i(\(sp)q(eci\014cally)m(,)f(the)h(virtual)d(mac)o(hine)h (concept\))i(and)f(also)249 615 y(b)q(ecause)d(of)e(its)g(simple)f(but) i(complete)f(programmi)o(ng)d(in)o(terface,)k(the)g(PVM)g(system)f(has) g(gained)249 669 y(widespread)h(acceptance)h(in)d(the)i(high-p)q (erformance)e(scien)o(ti\014c)h(computing)f(comm)o(unit)o(y)l(.)249 790 y FD(1.4)52 b(Other)18 b(P)o(ac)o(k)m(ages)249 897 y FA(Sev)o(eral)12 b(researc)o(h)i(groups)e(ha)o(v)o(e)g(dev)o(elop)q (ed)h(soft)o(w)o(are)f(pac)o(k)n(ages)g(that)g(lik)o(e)f(PVM)h(assist)h (program-)249 951 y(mers)k(in)h(using)f(distributed)h(computing.)28 b(Among)16 b(the)i(most)f(w)o(ell)g(kno)o(wn)g(e\013orts)i(are)f(P4)g ([1)o(],)249 1005 y(Express)f([6)o(],)d(MPI)h([7],)f(and)h(Linda)f([3)o (].)21 b(V)m(arious)15 b(other)g(systems)g(with)g(similar)e (capabilities)h(are)249 1059 y(also)f(in)h(existence;)h(a)f(reasonably) f(comprehensiv)o(e)h(listing)f(ma)o(y)f(b)q(e)j(found)e(in)g([17)o(].) 249 1142 y Fr(1.4.1)48 b(The)15 b(p4)h(System)249 1225 y FA(P4)d([1)o(])g(is)f(a)h(library)f(of)g(macros)g(and)h(subroutines)h (dev)o(elop)q(ed)g(at)e(Argonne)i(National)d(Lab)q(oratory)249 1279 y(for)f(programming)d(a)k(v)n(ariet)o(y)f(of)g(parallel)f(mac)o (hines.)16 b(The)c(p4)e(system)g(supp)q(orts)i(b)q(oth)f(the)g(shared-) 249 1333 y(memory)g(mo)q(del)i(\(based)h(on)g(monitors\))e(and)i(the)g (distributed-memory)e(mo)q(del)g(\(using)i(message-)249 1387 y(passing\).)29 b(F)m(or)17 b(the)h(shared-memory)e(mo)q(del)g(of) h(parallel)f(computation,)g(p4)h(pro)o(vides)h(a)f(set)i(of)249 1441 y(useful)d(monitors)f(as)h(w)o(ell)f(as)h(a)g(set)h(of)e(primitiv) o(es)g(from)f(whic)o(h)i(monitors)e(can)j(b)q(e)f(constructed.)249 1495 y(F)m(or)f(the)i(distributed-memory)d(mo)q(del,)g(p4)h(pro)o (vides)h(t)o(yp)q(ed)h(send)f(and)g(receiv)o(e)h(op)q(erations)f(and) 249 1549 y(creation)e(of)g(pro)q(cesses)i(according)e(to)g(a)f(text)i (\014le)f(describing)g(group)g(and)g(pro)q(cess)h(structure.)291 1603 y FB(Pr)n(o)n(c)n(ess)i(management)h FA(in)f(the)h(p4)f(system)g (is)g(based)h(on)f(a)g(con\014guration)g(\014le)g(that)g(sp)q (eci\014es)249 1657 y(the)f(host)g(p)q(o)q(ol,)f(the)h(ob)r(ject)g (\014le)g(to)f(b)q(e)h(executed)h(on)f(eac)o(h)g(mac)o(hine,)e(the)i(n) o(um)o(b)q(er)f(of)f(pro)q(cesses)249 1711 y(to)j(b)q(e)h(started)g(on) f(eac)o(h)h(host)f(\(in)o(tended)h(primarily)c(for)j(m)o(ultipro)q (cessor)g(systems\),)g(and)g(other)249 1765 y(auxiliary)12 b(information.)j(An)f(example)f(of)g(a)h(con\014guration)f(\014le)h(is) 336 1861 y Fs(#)22 b(start)f(one)g(slave)g(on)g(each)g(of)g(sun2)g(and) g(sun3)336 1914 y(local)g(0)336 1968 y(sun2)43 b(1)g (/home/mylogin/p4pgm)o(s/sr_)o(test)336 2022 y(sun3)g(1)g (/home/mylogin/p4pgm)o(s/sr_)o(test)291 2118 y FA(Tw)o(o)17 b(issues)i(are)g(notew)o(orth)o(y)f(in)g(regard)g(to)g(the)h(pro)q (cess)h(managemen)o(t)15 b(mec)o(hanism)h(in)i(p4.)249 2172 y(First,)g(there)g(is)f(the)h(notion)e(a)h(\\master")f(pro)q(cess) i(and)f(\\sla)o(v)o(e")f(pro)q(cesses,)k(and)d(m)o(ultilev)o(el)e(hi-) 249 2226 y(erarc)o(hies)i(ma)o(y)c(b)q(e)j(formed)d(to)i(implemen)o(t)e (what)i(is)g(termed)g(a)g FB(cluster)f FA(mo)q(del)g(of)g(computation.) 249 2280 y(Second,)19 b(the)f(primary)f(mo)q(de)f(of)h(pro)q(cess)j (creation)e(is)g(static,)g(via)f(the)i(con\014guration)e(\014le;)i(dy-) 249 2334 y(namic)13 b(pro)q(cess)k(creation)e(is)f(p)q(ossible)h(only)f (b)o(y)h(a)f(statically)g(created)i(pro)q(cess)h(that)d(m)o(ust)g(in)o (v)o(ok)o(e)249 2388 y(a)k(sp)q(ecial)f(o4)h(function)f(that)h(spa)o (wns)g(a)f(new)i(pro)q(cess)g(on)f(the)g(lo)q(cal)f(mac)o(hine.)28 b(Despite)19 b(these)249 2442 y(restrictions,)14 b(a)f(v)n(ariet)o(y)g (of)f(application)g(paradigms)f(ma)o(y)g(b)q(e)j(implemen)o(ted)d(in)i (the)h(p4)f(system)f(in)249 2496 y(a)i(fairly)e(straigh)o(tforw)o(ard)h (manner.)p eop %%Page: 7 26 7 25 bop 249 251 a Fu(In)o(tro)q(duction)1367 b(7)291 507 y FB(Message)15 b(p)n(assing)f FA(in)g(the)g(p4)g(system)g(is)f(ac) o(hiev)o(ed)h(through)g(the)h(use)g(of)e(traditional)f Fs(send)h FA(and)249 561 y Fs(recv)d FA(primitiv)o(es,)f(parameterized) j(almost)d(exactly)i(as)g(other)g(message-passing)g(systems.)17 b(Sev)o(eral)249 615 y(v)n(arian)o(ts)i(are)g(pro)o(vided)g(for)g (seman)o(tics,)h(suc)o(h)g(as)f(heterogeneous)j(exc)o(hange)e(and)f (blo)q(c)o(king)f(or)249 669 y(non)o(blo)q(c)o(king)f(transfer.)34 b(A)18 b(signi\014can)o(t)g(prop)q(ortion)h(of)f(the)h(burden)h(of)e (bu\013er)h(allo)q(cation)e(and)249 723 y(managemen)o(t,)f(ho)o(w)o(ev) o(er,)i(is)g(left)f(to)h(the)g(user.)31 b(Apart)18 b(from)e(basic)i (message)f(passing,)h(p4)g(also)249 777 y(o\013ers)g(a)f(v)n(ariet)o(y) g(of)g(global)f(op)q(erations,)i(including)e(broadcast,)i(global)e (maxim)o(a)e(and)j(minima,)249 831 y(and)d(barrier)g(sync)o (hronization.)249 914 y Fr(1.4.2)48 b(Express)249 997 y FA(In)13 b(con)o(trast)h(to)e(the)i(other)f(parallel)f(pro)q(cessing) i(systems)f(describ)q(ed)i(in)d(this)h(section,)h(Express)g([6])249 1051 y(to)q(olkit)c(is)g(a)g(collection)g(of)g(to)q(ols)h(that)f (individually)e(address)k(v)n(arious)e(asp)q(ects)i(of)e(concurren)o(t) i(com-)249 1105 y(putation.)17 b(The)12 b(to)q(olkit)f(is)g(dev)o(elop) q(ed)h(and)g(mark)o(eted)f(commercially)d(b)o(y)k(P)o(araSoft)f(Corp)q (oration,)249 1159 y(a)16 b(compan)o(y)f(that)i(w)o(as)f(started)i(b)o (y)e(some)g(mem)o(b)q(ers)f(of)h(the)h(Caltec)o(h)g(concurren)o(t)h (computation)249 1213 y(pro)r(ject.)291 1267 y(The)10 b(philosoph)o(y)f(b)q(ehind)h(computing)f(with)g(Express)j(is)e(based)g (on)g(b)q(eginning)g(with)f(a)h(sequen)o(tial)249 1321 y(v)o(ersion)k(of)f(an)g(application)f(and)h(follo)o(wing)e(a)i (recommended)g(dev)o(elopmen)o(t)f(life)h(cycle)h(culminat-)249 1375 y(ing)h(in)f(a)h(parallel)f(v)o(ersion)h(that)h(is)f(tuned)g(for)g (optimalit)o(y)m(.)j(T)o(ypical)d(dev)o(elopmen)o(t)f(cycles)i(b)q (egin)249 1429 y(with)f(the)g(use)h(of)f(VTOOL,)g(a)g(graphical)f (program)f(that)j(allo)o(ws)d(the)j(progress)g(of)f(sequen)o(tial)g (al-)249 1483 y(gorithms)h(to)h(b)q(e)h(displa)o(y)o(ed)f(in)g(a)g (dynamic)e(manner.)28 b(Up)q(dates)18 b(and)g(references)i(to)d (individual)249 1537 y(data)d(structures)i(can)e(b)q(e)h(displa)o(y)o (ed)e(to)h(explicitly)f(demonstrate)h(algorithm)d(structure)16 b(and)e(pro-)249 1591 y(vide)19 b(the)g(detailed)g(kno)o(wledge)g (necessary)h(for)f(parallelization.)31 b(Related)18 b(to)h(this)g (program)e(is)249 1645 y(FTOOL,)h(whic)o(h)h(pro)o(vides)f(in-depth)h (analysis)e(of)h(a)g(program)f(including)g(v)n(ariable)g(use)i(analy-) 249 1699 y(sis,)f(\015o)o(w)f(structure,)j(and)d(feedbac)o(k)h (regarding)f(p)q(oten)o(tial)g(parallelization.)26 b(FTOOL)18 b(op)q(erates)249 1753 y(on)e(b)q(oth)g(sequen)o(tial)g(and)g(parallel) f(v)o(ersions)h(of)g(an)f(application.)23 b(A)16 b(third)g(to)q(ol)g (called)f(ASP)m(AR)249 1807 y(is)i(then)h(used;)h(this)e(is)g(an)g (automated)e(parallelizer)i(that)g(con)o(v)o(erts)h(sequen)o(tial)f(C)g (and)g(F)m(ortran)249 1861 y(programs)c(for)g(parallel)g(or)h (distributed)g(execution)h(using)f(the)g(Express)i(programmi)o(ng)11 b(mo)q(dels.)291 1914 y(The)f(core)i(of)d(the)i(Express)h(system)f(is)f (a)g(set)h(of)f(libraries)g(for)g(comm)o(unication,)d(I/O,)j(and)g (parallel)249 1968 y(graphics.)17 b(The)11 b(comm)o(uni)o(cation)c (primitiv)o(es)h(are)j(akin)e(to)h(those)h(found)e(in)h(other)h (message-passing)249 2022 y(systems)j(and)f(include)h(a)f(v)n(ariet)o (y)g(of)g(global)f(op)q(erations)i(and)g(data)f(distribution)g (primitiv)o(es.)j(Ex-)249 2076 y(tended)h(I/O)e(routines)h(enable)g (parallel)e(input)h(and)h(output,)f(and)g(a)g(similar)e(set)k(of)e (routines)h(are)249 2130 y(pro)o(vided)i(for)f(graphical)g(displa)o(ys) g(from)f(m)o(ultiple)f(concurren)o(t)20 b(pro)q(cesses.)32 b(Express)19 b(also)e(con-)249 2184 y(tains)12 b(the)g(NDB)g(to)q(ol,)f (a)g(parallel)f(debugger)j(that)e(uses)i(commands)d(based)i(on)f(the)h (p)q(opular)g(\\db)o(x")249 2238 y(in)o(terface.)249 2321 y Fr(1.4.3)48 b(MPI)249 2404 y FA(The)17 b(Message)h(P)o(assing)f (In)o(terface)h(\(MPI\))g([7)o(])e(standard,)i(whose)f(sp)q (eci\014cation)h(w)o(as)f(completed)249 2458 y(in)h(April)f(1994,)g(is) h(the)h(outcome)e(of)g(a)h(comm)o(uni)o(t)o(y)d(e\013ort)k(to)f(try)g (to)g(de\014ne)h(b)q(oth)f(the)g(syn)o(tax)p eop %%Page: 8 27 8 26 bop 249 251 a Fu(8)1394 b(Chapter)13 b(1)249 507 y FA(and)k(seman)o(tics)g(of)g(a)g(core)i(of)e(message-passing)f (library)h(routines)h(that)g(w)o(ould)e(b)q(e)i(useful)g(to)f(a)249 561 y(wide)e(range)h(of)e(users)j(and)e(e\016cien)o(tly)g(implemen)o (table)d(on)j(a)g(wide)h(range)f(of)g(MPPs.)22 b(The)16 b(main)249 615 y(adv)n(an)o(tage)e(of)f(establishing)h(a)g (message-passing)g(standard)h(is)f(p)q(ortabilit)o(y)m(.)j(One)f(of)d (the)i(goals)f(of)249 669 y(dev)o(eloping)c(MPI)g(is)h(to)f(pro)o(vide) g(MPP)h(v)o(endors)g(with)f(a)g(clearly)g(de\014ned)i(base)f(set)g(of)f (routines)h(that)249 723 y(they)k(can)g(implemen)o(t)d(e\016cien)o(tly) i(or,)h(in)f(some)f(cases,)j(pro)o(vide)f(hardw)o(are)g(supp)q(ort)g (for,)f(thereb)o(y)249 777 y(enhancing)g(scalabilit)o(y)m(.)291 831 y(MPI)h(is)g(not)f(in)o(tended)i(to)f(b)q(e)g(a)g(complete)f(and)h (self-con)o(tained)g(soft)o(w)o(are)g(infrastructure)h(that)249 885 y(can)d(b)q(e)h(used)g(for)e(distributed)i(computing.)i(MPI)d(do)q (es)h(not)f(include)g(necessities)i(suc)o(h)f(as)f(pro)q(cess)249 939 y(managemen)o(t)i(\(the)j(abilit)o(y)e(to)h(start)h(tasks\),)h (\(virtual\))d(mac)o(hine)h(con\014guration,)g(and)g(supp)q(ort)249 993 y(for)j(input)h(and)f(output.)38 b(As)21 b(a)f(result,)j(it)d(is)g (an)o(ticipated)g(that)h(MPI)g(will)e(b)q(e)i(realized)g(as)f(a)249 1047 y(comm)o(unications)10 b(in)o(terface)k(la)o(y)o(er)f(that)g(will) f(b)q(e)h(built)g(up)q(on)g(nativ)o(e)g(facilities)f(of)h(the)g (underlying)249 1101 y(hardw)o(are)h(platform,)c(with)j(the)h (exception)g(of)f(certain)g(data)g(transfer)i(op)q(erations)e(that)g (migh)o(t)e(b)q(e)249 1155 y(implemen)o(ted)g(at)i(a)g(lev)o(el)g (close)h(to)f(hardw)o(are.)19 b(This)13 b(scenario)h(p)q(ermits)f(the)h (pro)o(vision)e(of)h(PVM's)249 1209 y(b)q(eing)h(p)q(orted)h(to)e(MPI)i (to)e(exploit)g(an)o(y)h(comm)o(unicatio)o(n)d(p)q(erformance)j(a)g(v)o (endor)g(supplies.)249 1292 y Fr(1.4.4)48 b(The)15 b(Linda)g(System)249 1375 y FA(Linda)c([3)o(])h(is)f(a)h(concurren)o(t)h(programming)c(mo)q (del)h(that)i(has)g(ev)o(olv)o(ed)f(from)f(a)i(Y)m(ale)f(Univ)o(ersit)o (y)h(re-)249 1429 y(searc)o(h)j(pro)r(ject.)20 b(The)14 b(primary)f(concept)i(in)f(Linda)f(is)h(that)g(of)g(a)g (\\tuple-space",)g(an)g(abstraction)249 1483 y(via)j(whic)o(h)h(co)q (op)q(erating)g(pro)q(cesses)j(comm)o(unicate.)28 b(This)17 b(cen)o(tral)i(theme)e(of)h(Linda)f(has)h(b)q(een)249 1537 y(prop)q(osed)d(as)f(an)g(alternativ)o(e)g(paradigm)e(to)i(the)h (t)o(w)o(o)f(traditional)e(metho)q(ds)i(of)f(parallel)g(pro)q(cess-)249 1591 y(ing:)k(that)c(based)h(on)f(shared)h(memory)m(,)c(and)j(that)g (based)h(on)f(message)g(passing.)k(The)d(tuple-space)249 1645 y(concept)i(is)f(essen)o(tially)g(an)g(abstraction)h(of)e (distributed)i(shared)g(memory)m(,)c(with)i(one)i(imp)q(ortan)o(t)249 1699 y(di\013erence)g(\(tuple-spaces)f(are)g(asso)q(ciativ)o(e\),)e (and)h(sev)o(eral)h(minor)d(distinctions)i(\(destructiv)o(e)h(and)249 1753 y(nondestructiv)o(e)j(reads)e(and)g(di\013eren)o(t)h(coherency)h (seman)o(tics)e(are)g(p)q(ossible\).)25 b(Applications)15 b(use)249 1807 y(the)g(Linda)f(mo)q(del)f(b)o(y)h(em)o(b)q(edding)f (explicitly)m(,)g(within)h(co)q(op)q(erating)h(sequen)o(tial)f (programs,)f(con-)249 1861 y(structs)j(that)e(manipulate)d (\(insert/retriev)o(e)16 b(tuples\))f(the)f(tuple)g(space.)291 1914 y(F)m(rom)i(the)j(application)e(p)q(oin)o(t)h(of)g(view)g(Linda)g (is)g(a)g(set)h(of)f(programming)d(language)i(exten-)249 1968 y(sions)d(for)f(facilitating)e(parallel)i(programmi)o(ng.)i(It)f (pro)o(vides)f(a)h(shared-memory)e(abstraction)h(for)249 2022 y(pro)q(cess)19 b(comm)o(unication)14 b(without)j(requiring)g(the) h(underlying)f(hardw)o(are)h(to)f(ph)o(ysically)f(share)249 2076 y(memory)m(.)291 2130 y(The)c(Linda)f(system)g(usually)g(refers)j (to)d(a)h(sp)q(eci\014c)h(implemen)o(tatio)o(n)c(of)i(soft)o(w)o(are)h (that)g(supp)q(orts)249 2184 y(the)j(Linda)f(programming)d(mo)q(del.)18 b(System)c(soft)o(w)o(are)h(is)f(pro)o(vided)h(that)f(establishes)i (and)e(main-)249 2238 y(tains)g(tuple)h(spaces)h(and)f(is)f(used)i(in)e (conjunction)h(with)f(libraries)g(that)h(appropriately)f(in)o(terpret) 249 2292 y(and)e(execute)h(Linda)e(primitiv)o(es.)16 b(Dep)q(ending)c(on)f(the)i(en)o(vironmen)o(t)d(\(shared-memory)g(m)o (ultipro-)249 2346 y(cessors,)20 b(message-passing)d(parallel)f (computers,)h(net)o(w)o(orks)h(of)f(w)o(orkstations,)h(etc.\),)g(the)g (tuple)249 2400 y(space)d(mec)o(hanism)d(is)j(implem)o(en)o(ted)e (using)h(di\013eren)o(t)h(tec)o(hniques)g(and)g(with)e(v)n(arying)h (degrees)i(of)249 2454 y(e\016ciency)m(.)j(Recen)o(tly)m(,)13 b(a)h(new)g FB(system)g FA(sc)o(heme)g(has)g(b)q(een)h(prop)q(osed,)g (at)f(least)g(nominally)c(related)249 2508 y(to)j(the)g(Linda)f(pro)r (ject.)19 b(This)13 b(sc)o(heme,)g(termed)f(\\Pirhana")g([9],)g(prop)q (oses)i(a)e(proactiv)o(e)h(approac)o(h)p eop %%Page: 9 28 9 27 bop 249 251 a Fu(In)o(tro)q(duction)1367 b(9)249 507 y FA(to)15 b(concurren)o(t)h(computing:)j(computational)12 b(resources)17 b(\(view)o(ed)e(as)g(activ)o(e)g(agen)o(ts\))g(seize)h (com-)249 561 y(putational)f(tasks)h(from)e(a)i(w)o(ell-kno)o(wn)e(lo)q (cation)h(based)i(on)e(a)o(v)n(ailabilit)o(y)e(and)i(suitabilit)o(y)m (.)22 b(This)249 615 y(sc)o(heme)10 b(ma)o(y)f(b)q(e)h(implemen)o(ted)e (on)i(m)o(ultiple)e(platforms)h(and)h(manifested)f(as)h(a)g(\\Pirhana)f (system")249 669 y(or)14 b(\\Linda-Pirhana)e(system.")p eop %%Page: 10 29 10 28 bop eop %%Page: 11 30 11 29 bop 249 325 a Fp(2)25 b FD(The)18 b(PVM)e(System)249 561 y FA(PVM)i(\(P)o(arallel)f(Virtual)g(Mac)o(hine\))h(is)f(a)g(b)o (ypro)q(duct)i(of)e(an)g(ongoing)f(heterogeneous)k(net)o(w)o(ork)249 615 y(computing)d(researc)o(h)j(pro)r(ject)g(in)o(v)o(olving)c(the)k (authors)f(and)f(their)h(institutions.)32 b(The)19 b(general)249 669 y(goals)12 b(of)g(this)h(pro)r(ject)g(are)g(to)g(in)o(v)o(estigate) f(issues)i(in,)e(and)g(dev)o(elop)h(solutions)f(for,)g(heterogeneous) 249 723 y(concurren)o(t)20 b(computing.)31 b(PVM)19 b(is)f(an)h(in)o (tegrated)g(set)g(of)f(soft)o(w)o(are)h(to)q(ols)f(and)h(libraries)f (that)249 777 y(em)o(ulates)13 b(a)g(general-purp)q(ose,)h(\015exible,) f(heterogeneous)i(concurren)o(t)g(computing)d(framew)o(ork)f(on)249 831 y(in)o(terconnected)16 b(computers)f(of)f(v)n(aried)f(arc)o (hitecture.)22 b(The)14 b(o)o(v)o(erall)f(ob)r(jectiv)o(e)i(of)f(the)h (PVM)g(sys-)249 885 y(tem)c(is)g(to)g(to)h(enable)g(suc)o(h)g(a)f (collection)g(of)g(computers)h(to)f(b)q(e)h(used)h(co)q(op)q(erativ)o (ely)e(for)g(concurren)o(t)249 939 y(or)j(parallel)e(computation.)k (Detailed)d(descriptions)i(and)f(discussions)g(of)f(the)h(concepts,)h (logistics,)249 993 y(and)i(metho)q(dologies)f(in)o(v)o(olv)o(ed)g(in)h (this)g(net)o(w)o(ork-based)h(computing)e(pro)q(cess)j(are)f(con)o (tained)f(in)249 1047 y(the)d(remainder)f(of)g(the)h(b)q(o)q(ok.)k (Brie\015y)m(,)13 b(the)h(principles)g(up)q(on)f(whic)o(h)h(PVM)f(is)h (based)g(include)f(the)249 1101 y(follo)o(wing:)208 1196 y Ft(\017)20 b FA(User-con\014gured)g(host)f(p)q(o)q(ol:)26 b(The)18 b(application's)f(computational)f(tasks)j(execute)h(on)e(a)g (set)h(of)249 1250 y(mac)o(hines)11 b(that)h(are)g(selected)i(b)o(y)e (the)g(user)h(for)f(a)g(giv)o(en)f(run)h(of)g(the)g(PVM)h(program.)i (Both)e(single-)249 1304 y(CPU)e(mac)o(hines)f(and)g(hardw)o(are)i(m)o (ultipro)q(cessors)e(\(including)g(shared-memory)f(and)i(distributed-) 249 1358 y(memory)c(computers\))i(ma)o(y)f(b)q(e)i(part)f(of)g(the)h (host)g(p)q(o)q(ol.)15 b(The)10 b(host)g(p)q(o)q(ol)f(ma)o(y)e(b)q(e)j (altered)g(b)o(y)f(adding)249 1412 y(and)14 b(deleting)g(mac)o(hines)f (during)g(op)q(eration)h(\(an)g(imp)q(ortan)o(t)e(feature)i(for)g (fault)f(tolerance\).)208 1483 y Ft(\017)20 b FA(T)m(ranslucen)o(t)f (access)h(to)e(hardw)o(are:)27 b(Application)17 b(programs)g(either)i (ma)o(y)d(view)i(the)h(hardw)o(are)249 1537 y(en)o(vironmen)o(t)14 b(as)h(an)g(attributeless)h(collection)f(of)g(virtual)f(pro)q(cessing)i (elemen)o(ts)f(or)g(ma)o(y)e(c)o(ho)q(ose)249 1591 y(to)18 b(exploit)f(the)h(capabilities)f(of)g(sp)q(eci\014c)i(mac)o(hines)d(in) i(the)g(host)g(p)q(o)q(ol)f(b)o(y)g(p)q(ositioning)f(certain)249 1645 y(computational)c(tasks)i(on)g(the)g(most)f(appropriate)h (computers.)208 1715 y Ft(\017)20 b FA(Pro)q(cess-based)h(computation:) j(The)19 b(unit)e(of)h(parallelism)d(in)j(PVM)g(is)g(a)g(task)g (\(often)g(but)g(not)249 1769 y(alw)o(a)o(ys)c(a)g(Unix)g(pro)q (cess\),)j(an)d(indep)q(enden)o(t)i(sequen)o(tial)f(thread)g(of)f(con)o (trol)g(that)h(alternates)h(b)q(e-)249 1823 y(t)o(w)o(een)f(comm)o (unication)d(and)i(computation.)19 b(No)14 b(pro)q(cess-to-pro)q (cessor)k(mapping)12 b(is)j(implied)d(or)249 1877 y(enforced)j(b)o(y)f (PVM;)g(in)f(particular,)g(m)o(ultiple)f(tasks)i(ma)o(y)e(execute)k(on) d(a)h(single)g(pro)q(cessor.)208 1948 y Ft(\017)20 b FA(Explicit)f(message-passing)f(mo)q(del:)28 b(Collections)19 b(of)f(computational)f(tasks,)k(eac)o(h)f(p)q(erforming)249 2002 y(a)d(part)h(of)f(an)g(application's)f(w)o(orkload)h(using)g (data-,)g(functional-,)g(or)h(h)o(ybrid)f(decomp)q(osition,)249 2056 y(co)q(op)q(erate)g(b)o(y)e(explicitly)f(sending)i(and)f (receiving)h(messages)g(to)f(one)g(another.)23 b(Message)17 b(size)f(is)249 2110 y(limited)c(only)h(b)o(y)g(the)i(amoun)o(t)d(of)h (a)o(v)n(ailable)f(memory)m(.)208 2180 y Ft(\017)20 b FA(Heterogeneit)o(y)c(supp)q(ort:)21 b(The)16 b(PVM)f(system)g(supp)q (orts)h(heterogeneit)o(y)g(in)e(terms)h(of)f(mac)o(hines,)249 2234 y(net)o(w)o(orks,)19 b(and)f(applications.)29 b(With)18 b(regard)g(to)g(message)g(passing,)g(PVM)g(p)q(ermits)g(messages)249 2288 y(con)o(taining)c(more)g(than)g(one)h(datat)o(yp)q(e)h(to)e(b)q(e) i(exc)o(hanged)f(b)q(et)o(w)o(een)h(mac)o(hines)e(ha)o(ving)g (di\013eren)o(t)249 2342 y(data)g(represen)o(tations.)208 2413 y Ft(\017)20 b FA(Multipro)q(cessor)g(supp)q(ort:)29 b(PVM)20 b(uses)g(the)g(nativ)o(e)e(message-passing)h(facilities)f(on)g (m)o(ultipro-)249 2467 y(cessors)g(to)e(tak)o(e)g(adv)n(an)o(tage)f(of) g(the)i(underlying)e(hardw)o(are.)25 b(V)m(endors)16 b(often)g(supply)g(their)g(o)o(wn)p eop %%Page: 12 31 12 30 bop 249 251 a Fu(12)1375 b(Chapter)13 b(2)249 507 y FA(optimized)j(PVM)i(for)g(their)g(systems,)g(whic)o(h)g(can)g(still) e(comm)o(unicate)g(with)h(the)h(public)g(PVM)249 561 y(v)o(ersion.)291 657 y(The)c(PVM)g(system)g(is)g(comp)q(osed)f(of)g(t) o(w)o(o)h(parts.)k(The)d(\014rst)f(part)g(is)g(a)g(daemon,)e(called)h FB(pvmd3)249 711 y FA(and)d(sometimes)f(abbreviated)h FB(pvmd)p FA(,)h(that)f(resides)i(on)e(all)f(the)i(computers)f(making)e (up)i(the)h(virtual)249 765 y(mac)o(hine.)37 b(\(An)20 b(example)g(of)f(a)i(daemon)e(program)g(is)h(the)h(mail)d(program)h (that)h(runs)h(in)f(the)249 819 y(bac)o(kground)15 b(and)f(handles)i (all)d(the)j(incoming)c(and)j(outgoing)e(electronic)j(mail)c(on)j(a)g (computer.\))249 873 y(Pvmd3)e(is)h(designed)h(so)f(an)o(y)f(user)j (with)e(a)f(v)n(alid)g(login)g(can)h(install)f(this)h(daemon)f(on)h(a)g (mac)o(hine.)249 927 y(When)k(a)g(user)i(wishes)f(to)f(run)g(a)g(PVM)h (application,)e(he)i(\014rst)g(creates)h(a)e(virtual)f(mac)o(hine)g(b)o (y)249 981 y(starting)10 b(up)h(PVM.)f(\(Chapter)h(3)f(details)g(ho)o (w)f(this)i(is)f(done.\))17 b(The)11 b(PVM)f(application)f(can)i(then)f (b)q(e)249 1034 y(started)i(from)d(a)i(Unix)f(prompt)g(on)g(an)o(y)h (of)f(the)h(hosts.)18 b(Multiple)10 b(users)j(can)e(con\014gure)g(o)o (v)o(erlapping)249 1088 y(virtual)i(mac)o(hines,)g(and)g(eac)o(h)i (user)g(can)f(execute)i(sev)o(eral)e(PVM)g(applications)f(sim)o (ultaneously)m(.)291 1142 y(The)j(second)i(part)f(of)f(the)h(system)f (is)g(a)g(library)g(of)g(PVM)h(in)o(terface)g(routines.)26 b(It)17 b(con)o(tains)f(a)249 1196 y(functionally)f(complete)h(rep)q (ertoire)i(of)d(primitiv)o(es)g(that)h(are)h(needed)h(for)e(co)q(op)q (eration)h(b)q(et)o(w)o(een)249 1250 y(tasks)d(of)f(an)g(application.)k (This)c(library)g(con)o(tains)h(user-callable)f(routines)h(for)f (message)h(passing,)249 1304 y(spa)o(wning)f(pro)q(cesses,)j(co)q (ordinating)e(tasks,)f(and)h(mo)q(difying)d(the)k(virtual)e(mac)o (hine.)291 1358 y(The)19 b(PVM)g(computing)e(mo)q(del)g(is)i(based)g (on)g(the)g(notion)f(that)h(an)g(application)e(consists)j(of)249 1412 y(sev)o(eral)g(tasks.)35 b(Eac)o(h)20 b(task)g(is)f(resp)q (onsible)i(for)e(a)g(part)h(of)e(the)j(application's)c(computational) 249 1466 y(w)o(orkload.)g(Sometimes)10 b(an)j(application)e(is)i (parallelized)f(along)g(its)h(functions;)f(that)h(is,)g(eac)o(h)g(task) 249 1520 y(p)q(erforms)i(a)g(di\013eren)o(t)i(function,)e(for)g (example,)g(input,)g(problem)f(setup,)j(solution,)e(output,)g(and)249 1574 y(displa)o(y)m(.)29 b(This)18 b(pro)q(cess)i(is)e(often)g(called)g (functional)f(parallelism.)28 b(A)18 b(more)g(common)d(metho)q(d)249 1628 y(of)i(parallelizing)f(an)h(application)g(is)g(called)h(data)f (parallelism.)27 b(In)17 b(this)h(metho)q(d)f(all)f(the)j(tasks)249 1682 y(are)g(the)g(same,)g(but)g(eac)o(h)g(one)g(only)f(kno)o(ws)g(and) h(solv)o(es)g(a)f(small)e(part)j(of)f(the)i(data.)32 b(This)18 b(is)249 1736 y(also)12 b(referred)j(to)d(as)h(the)h(SPMD)e (\(single-program)f(m)o(ultiple-data\))f(mo)q(del)i(of)g(computing.)k (PVM)249 1790 y(supp)q(orts)e(either)g(or)f(a)g(mixture)f(of)h(these)h (metho)q(ds.)k(Dep)q(ending)13 b(on)g(their)g(functions,)g(tasks)h(ma)o (y)249 1844 y(execute)j(in)e(parallel)e(and)i(ma)o(y)e(need)k(to)d (sync)o(hronize)j(or)e(exc)o(hange)g(data,)g(although)f(this)h(is)g (not)249 1898 y(alw)o(a)o(ys)10 b(the)i(case.)18 b(An)11 b(exemplary)f(diagram)f(of)i(the)g(PVM)h(computing)d(mo)q(del)h(is)h (sho)o(wn)g(in)g(Figure)249 1952 y(2.1.)17 b(and)c(an)g(arc)o (hitectural)h(view)f(of)g(the)g(PVM)h(system,)f(highligh)o(ting)e(the)i (heterogeneit)o(y)i(of)d(the)249 2006 y(computing)g(platforms)g(supp)q (orted)k(b)o(y)d(PVM,)h(is)g(sho)o(wn)g(in)f(Figure)h(2.2.)291 2060 y(The)k(PVM)h(system)g(curren)o(tly)g(supp)q(orts)h(C,)e(C++,)h (and)f(F)m(ortran)h(languages.)31 b(This)18 b(set)i(of)249 2114 y(language)15 b(in)o(terfaces)i(ha)o(v)o(e)e(b)q(een)i(included)f (based)g(on)g(the)g(observ)n(ation)f(that)h(the)h(predominan)o(t)249 2168 y(ma)r(jorit)o(y)12 b(of)h(target)h(applications)f(are)h(written)g (in)g(C)f(and)h(F)m(ortran,)f(with)h(an)f(emerging)g(trend)h(in)249 2222 y(exp)q(erimen)o(ting)f(with)h(ob)r(ject-based)h(languages)e(and)h (metho)q(dologies.)291 2276 y(The)c(C)f(and)h(C++)g(language)f (bindings)19 b(for)9 b(the)i(PVM)f(user)h(in)o(terface)f(library)f(are) h(implemen)o(ted)249 2330 y(as)k(functions,)f(follo)o(wing)d(the)k (general)g(con)o(v)o(en)o(tions)f(used)i(b)o(y)e(most)f(C)h(systems,)g (including)g(Unix-)249 2384 y(lik)o(e)18 b(op)q(erating)g(systems.)33 b(T)m(o)18 b(elab)q(orate,)h(function)f(argumen)o(ts)g(are)h(a)g(com)o (bination)d(of)i(v)n(alue)249 2438 y(parameters)13 b(and)g(p)q(oin)o (ters)g(as)g(appropriate,)g(and)g(function)f(result)i(v)n(alues)f (indicate)f(the)i(outcome)249 2492 y(of)19 b(the)g(call.)33 b(In)19 b(addition,)g(macro)f(de\014nitions)h(are)g(used)h(for)f (system)g(constan)o(ts,)i(and)e(global)p eop %%Page: 13 32 13 31 bop 249 251 a Fu(The)13 b(PVM)g(System)1254 b(13)446 1666 y @beginspecial 0 @llx 0 @lly 248 @urx 360 @ury 2880 @rwi 2880 @rhi @setspecial %%BeginDocument: fig2.1.a.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 /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix } def end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 0 setlinecap 0 setlinejoin -238.0 396.0 translate 0.900 -0.900 scale 0.500 setlinewidth % Ellipse n 336 206 50 50 0 360 DrawEllipse gs col-1 s gr % Ellipse n 406 96 31 31 0 360 DrawEllipse gs col-1 s gr % Ellipse n 406 326 31 31 0 360 DrawEllipse gs col-1 s gr % Ellipse n 476 206 50 50 0 360 DrawEllipse gs col-1 s gr % Polyline n 539 414 m 539 39 l 264 39 l 264 414 l clp gs col-1 s gr % Polyline n 311 184 m 304 184 304 192 7 arcto 4 {pop} repeat 304 199 322 199 7 arcto 4 {pop} repeat 329 199 329 191 7 arcto 4 {pop} repeat 329 184 311 184 7 arcto 4 {pop} repeat clp gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 351 184 m 344 184 344 192 7 arcto 4 {pop} repeat 344 199 362 199 7 arcto 4 {pop} repeat 369 199 369 191 7 arcto 4 {pop} repeat 369 184 351 184 7 arcto 4 {pop} repeat clp gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 351 209 m 344 209 344 217 7 arcto 4 {pop} repeat 344 224 362 224 7 arcto 4 {pop} repeat 369 224 369 216 7 arcto 4 {pop} repeat 369 209 351 209 7 arcto 4 {pop} repeat clp gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 311 209 m 304 209 304 217 7 arcto 4 {pop} repeat 304 224 322 224 7 arcto 4 {pop} repeat 329 224 329 216 7 arcto 4 {pop} repeat 329 209 311 209 7 arcto 4 {pop} repeat clp gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 491 209 m 484 209 484 217 7 arcto 4 {pop} repeat 484 224 502 224 7 arcto 4 {pop} repeat 509 224 509 216 7 arcto 4 {pop} repeat 509 209 491 209 7 arcto 4 {pop} repeat clp gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 401 74 m 394 74 394 82 7 arcto 4 {pop} repeat 394 89 412 89 7 arcto 4 {pop} repeat 419 89 419 81 7 arcto 4 {pop} repeat 419 74 401 74 7 arcto 4 {pop} repeat clp gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 401 99 m 394 99 394 107 7 arcto 4 {pop} repeat 394 114 412 114 7 arcto 4 {pop} repeat 419 114 419 106 7 arcto 4 {pop} repeat 419 99 401 99 7 arcto 4 {pop} repeat clp gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 401 314 m 394 314 394 322 7 arcto 4 {pop} repeat 394 329 412 329 7 arcto 4 {pop} repeat 419 329 419 321 7 arcto 4 {pop} repeat 419 314 401 314 7 arcto 4 {pop} repeat clp gs 0.90 setgray fill gr gs col-1 s gr 1.000 setlinewidth % Polyline n 409 89 m 409 99 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 329 194 m 344 214 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 324 209 m 344 194 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 329 189 m 344 189 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 329 214 m 344 214 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 314 199 m 314 209 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 354 199 m 354 209 l gs 0.90 setgray fill gr gs col-1 s gr [6.000000] 0 setdash % Polyline n 394 124 m 364 164 l gs 0.90 setgray fill gr gs col-1 s gr [] 0 setdash n 376.800 153.600 m 364.000 164.000 l 370.400 148.800 l gs 2 setlinejoin col-1 s gr [6.000000] 0 setdash % Polyline n 419 124 m 444 164 l gs 0.90 setgray fill gr gs col-1 s gr [] 0 setdash n 438.912 148.312 m 444.000 164.000 l 432.128 152.552 l gs 2 setlinejoin col-1 s gr [6.000000] 0 setdash % Polyline n 359 249 m 394 294 l gs 0.90 setgray fill gr gs col-1 s gr [] 0 setdash n 387.334 278.915 m 394.000 294.000 l 381.020 283.826 l gs 2 setlinejoin col-1 s gr [6.000000] 0 setdash % Polyline n 449 249 m 414 294 l gs 0.90 setgray fill gr gs col-1 s gr [] 0 setdash n 426.980 283.826 m 414.000 294.000 l 420.666 278.915 l gs 2 setlinejoin col-1 s gr [6.000000] 0 setdash % Polyline n 279 369 m 299 369 l gs 0.90 setgray fill gr gs col-1 s gr [] 0 setdash % Polyline n 279 384 m 299 384 l gs 0.90 setgray fill gr gs col-1 s gr 0.500 setlinewidth % Polyline n 451 184 m 444 184 444 192 7 arcto 4 {pop} repeat 444 199 462 199 7 arcto 4 {pop} repeat 469 199 469 191 7 arcto 4 {pop} repeat 469 184 451 184 7 arcto 4 {pop} repeat clp gs 0.90 setgray fill gr gs col-1 s gr 1.000 setlinewidth % Polyline n 469 197 m 487 215 l gs col-1 s gr /Times-Roman findfont 12.00 scalefont setfont 444 84 m gs 1 -1 scale (Input &) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 444 104 m gs 1 -1 scale (Partitioning) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 459 149 m gs 1 -1 scale (Comp 2) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 304 154 m gs 1 -1 scale (Comp 1) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 444 329 m gs 1 -1 scale (Output &) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 444 344 m gs 1 -1 scale (Display) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 479 184 m gs 1 -1 scale (SPMD) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 309 369 m gs 1 -1 scale (Inter-component comm & sync) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 309 384 m gs 1 -1 scale (Inter-instance comm & sync) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 318 175 m gs 1 -1 scale (SPMD) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 319 439 m gs 1 -1 scale (\(a\) PVM Computation Model) col-1 show gr $F2psEnd %%EndDocument @endspecial 249 1728 a Fo(Figure)13 b(2.1)249 1765 y Fy(PVM)g(system)d(o)o(v)o(erview)249 1888 y FA(v)n(ariables)16 b(suc)o(h)i(as)f Fs(errno)f FA(and)g Fs(pvm)p 853 1888 14 2 v 15 w(errno)g FA(are)i(the)f(mec)o(hanism)e(for)h(discriminating) f(b)q(et)o(w)o(een)249 1942 y(m)o(ultiple)e(p)q(ossible)j(outcomes.)23 b(Application)15 b(programs)f(written)i(in)f(C)h(and)f(C++)h(access)i (PVM)249 1996 y(library)d(functions)h(b)o(y)g(linking)e(against)h(an)h (arc)o(hiv)n(al)e(library)h(\()p Fs(libpvm3.a)p FA(\))g(that)g(is)h (part)g(of)f(the)249 2050 y(standard)f(distribution.)291 2104 y(F)m(ortran)i(language)f(bindings)h(are)h(implemen)o(ted)d(as)j (subroutines)g(rather)h(than)e(as)g(functions.)249 2158 y(This)f(approac)o(h)f(w)o(as)h(tak)o(en)f(b)q(ecause)i(some)e (compilers)g(on)g(the)h(supp)q(orted)h(arc)o(hitectures)h(w)o(ould)249 2212 y(not)d(reliably)f(in)o(terface)h(F)m(ortran)f(functions)h(with)g (C)g(functions.)k(One)c(immediate)d(implication)g(of)249 2266 y(this)k(is)h(that)f(an)g(additional)f(argumen)o(t)g(is)h(in)o (tro)q(duced)h(in)o(to)f(eac)o(h)g(PVM)h(library)f(call)f(for)h(status) 249 2320 y(results)g(to)e(b)q(e)i(returned)g(to)f(the)g(in)o(v)o(oking) e(program.)k(Also,)d(library)g(routines)h(for)f(the)i(placemen)o(t)249 2374 y(and)f(retriev)n(al)f(of)h(t)o(yp)q(ed)g(data)g(in)f(message)g (bu\013ers)j(are)e(uni\014ed,)f(with)h(an)f(additional)f(parameter)249 2428 y(indicating)f(the)i(datat)o(yp)q(e.)18 b(Apart)13 b(from)d(these)k(di\013erences)g(\(and)f(the)g(standard)f(naming)f (pre\014xes)249 2482 y(|)f FB(pvm)p 378 2482 13 2 v 26 w FA(for)g(C,)h(and)f FB(pvmf)g FA(for)h(F)m(ortran\),)f(a)h (one-to-one)f(corresp)q(ondence)k(exists)d(b)q(et)o(w)o(een)h(the)g(t)o (w)o(o)p eop %%Page: 14 33 14 32 bop 249 251 a Fu(14)1375 b(Chapter)13 b(2)446 1666 y @beginspecial 0 @llx 0 @lly 247 @urx 369 @ury 2880 @rwi 2880 @rhi @setspecial %%BeginDocument: fig2.1.b.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 /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix } def end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 0 setlinecap 0 setlinejoin -234.0 432.0 translate 0.900 -0.900 scale 0.500 setlinewidth % Ellipse n 329 164 10 10 0 360 DrawEllipse gs 0.95 setgray fill gr gs col-1 s gr % Ellipse n 329 194 10 10 0 360 DrawEllipse gs 0.95 setgray fill gr gs col-1 s gr % Ellipse n 329 229 10 10 0 360 DrawEllipse gs 0.95 setgray fill gr gs col-1 s gr % Ellipse n 329 259 10 10 0 360 DrawEllipse gs 0.95 setgray fill gr gs col-1 s gr 1.000 setlinewidth % Polyline n 294 134 m 449 134 l 449 134 l 444 134 l gs 0.90 setgray fill gr gs col-1 s gr 0.500 setlinewidth % Polyline n 304 134 m 304 114 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 329 134 m 329 114 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 354 134 m 354 114 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 379 134 m 379 114 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 404 134 m 404 114 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 424 134 m 424 114 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 314 114 m 314 99 l 299 99 l 299 114 l clp gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 339 114 m 339 99 l 324 99 l 324 114 l clp gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 364 114 m 364 99 l 349 99 l 349 114 l clp gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 389 114 m 389 99 l 374 99 l 374 114 l clp gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 414 114 m 414 99 l 399 99 l 399 114 l clp gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 434 114 m 434 99 l 419 99 l 419 114 l clp gs 0.95 setgray fill gr gs col-1 s gr 1.000 setlinewidth % Polyline n 294 134 m 294 279 l gs 0.95 setgray fill gr gs col-1 s gr 0.500 setlinewidth % Polyline n 294 164 m 319 164 l gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 294 194 m 319 194 l gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 294 229 m 319 229 l gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 294 259 m 319 259 l gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 446 124 m 439 124 439 157 7 arcto 4 {pop} repeat 439 164 447 164 7 arcto 4 {pop} repeat 454 164 454 131 7 arcto 4 {pop} repeat 454 124 446 124 7 arcto 4 {pop} repeat clp gs 0.65 setgray fill gr gs col-1 s gr 1.000 setlinewidth 1 setlinecap [1 4.500000] 4.500000 setdash % Polyline n 439 159 m 409 214 l gs 0.65 setgray fill gr gs col-1 s gr [] 0 setdash 0 setlinecap [6.000000] 0 setdash % Polyline n 449 164 m 449 274 l 469 249 l 469 329 l gs col-1 s gr [] 0 setdash 0.500 setlinewidth % Polyline n 434 264 m 434 214 l 394 214 l 394 264 l clp gs col-1 s gr 1.000 setlinewidth % Polyline n 329 334 m 484 334 l 484 334 l 479 334 l gs 0.90 setgray fill gr gs col-1 s gr 0.500 setlinewidth % Polyline n 364 369 m 364 354 l 349 354 l 349 369 l clp gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 354 354 m 354 334 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 394 354 m 394 334 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 424 354 m 424 334 l gs 0.90 setgray fill gr gs col-1 s gr % Polyline n 404 369 m 404 354 l 389 354 l 389 369 l clp gs 0.95 setgray fill gr gs col-1 s gr % Polyline n 434 369 m 434 354 l 419 354 l 419 369 l clp gs 0.95 setgray fill gr gs col-1 s gr 1.000 setlinewidth 1 setlinecap [1 4.500000] 4.500000 setdash % Polyline n 482 333 m 452 388 l gs 0.65 setgray fill gr gs col-1 s gr [] 0 setdash 0 setlinecap 0.500 setlinewidth % Polyline n 509 419 m 509 389 l 444 389 l 444 419 l clp gs col-1 s gr % Polyline n 259 319 m 404 444 l 404 444 l 409 444 l gs col-1 s gr % Polyline n 259 314 m 409 444 l gs col-1 s gr % Polyline n 284 359 m 294 349 l gs col-1 s gr n 286.929 353.243 m 294.000 349.000 l 289.757 356.071 l gs 2 setlinejoin col-1 s gr % Polyline n 294 369 m 304 359 l gs col-1 s gr n 296.929 363.243 m 304.000 359.000 l 299.757 366.071 l gs 2 setlinejoin col-1 s gr % Polyline n 304 379 m 314 369 l gs col-1 s gr n 306.929 373.243 m 314.000 369.000 l 309.757 376.071 l gs 2 setlinejoin col-1 s gr % Polyline n 314 389 m 324 379 l gs col-1 s gr n 316.929 383.243 m 324.000 379.000 l 319.757 386.071 l gs 2 setlinejoin col-1 s gr % Polyline n 324 399 m 334 389 l gs col-1 s gr n 326.929 393.243 m 334.000 389.000 l 329.757 396.071 l gs 2 setlinejoin col-1 s gr % Polyline n 334 404 m 344 394 l gs col-1 s gr n 336.929 398.243 m 344.000 394.000 l 339.757 401.071 l gs 2 setlinejoin col-1 s gr % Polyline n 534 444 m 534 69 l 259 69 l 259 444 l clp gs col-1 s gr /Times-Roman findfont 12.00 scalefont setfont 299 94 m gs 1 -1 scale (Cluster 1) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 269 294 m gs 1 -1 scale (Cluster 2) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 399 244 m gs 1 -1 scale (MPP) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 459 149 m gs 1 -1 scale (Bridge/) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 459 164 m gs 1 -1 scale (Router) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 359 324 m gs 1 -1 scale (Cluster 3) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 449 409 m gs 1 -1 scale (Vector SC) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 264 374 m gs 1 -1 scale (PVM:) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 264 389 m gs 1 -1 scale (Uniform) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 264 404 m gs 1 -1 scale (View of) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 264 419 m gs 1 -1 scale (Multiprogrammed) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 264 434 m gs 1 -1 scale (Virtual Machine) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 319 479 m gs 1 -1 scale (\(b\) PVM Architectural Overview) col-1 show gr $F2psEnd %%EndDocument @endspecial 249 1728 a Fo(Figure)g(2.2)249 1765 y Fy(PVM)g(system)d(o) o(v)o(erview)249 1888 y FA(language)k(bindings.)k(F)m(ortran)d(in)o (terfaces)g(to)f(PVM)h(are)g(implem)o(en)o(ted)e(as)h(library)g(stubs)h (that)f(in)249 1942 y(turn)h(in)o(v)o(ok)o(e)e(the)h(corresp)q(onding)h (C)g(routines,)f(after)g(casting)g(and/or)g(dereferencing)i(argumen)o (ts)249 1996 y(as)e(appropriate.)k(Th)o(us,)13 b(F)m(ortran)g (applications)g(are)g(required)i(to)e(link)g(against)f(the)i(stubs)h (library)249 2050 y(\()p Fs(libfpvm3.a)p FA(\))d(as)i(w)o(ell)f(as)h (the)h(C)f(library)m(.)291 2104 y(All)h(PVM)i(tasks)f(are)h(iden)o (ti\014ed)f(b)o(y)g(an)g(in)o(teger)h FB(task)g(identi\014er)f FA(\(TID\))g(.)g(Messages)i(are)e(sen)o(t)249 2158 y(to)f(and)g(receiv) o(ed)h(from)d(tids.)22 b(Since)16 b(tids)f(m)o(ust)f(b)q(e)h(unique)g (across)h(the)g(en)o(tire)g(virtual)e(mac)o(hine,)249 2212 y(they)i(are)g(supplied)g(b)o(y)g(the)g(lo)q(cal)f(p)o(vmd)f(and)i (are)g(not)g(user)g(c)o(hosen.)25 b(Although)15 b(PVM)h(enco)q(des)249 2266 y(information)d(in)o(to)i(eac)o(h)h(TID)f(\(see)i(Chapter)f(7)g (for)f(details\))h(the)g(user)g(is)g(exp)q(ected)i(to)d(treat)h(the)249 2320 y(tids)d(as)g(opaque)g(in)o(teger)g(iden)o(ti\014ers.)19 b(PVM)13 b(con)o(tains)g(sev)o(eral)g(routines)h(that)f(return)h(TID)e (v)n(alues)249 2374 y(so)i(that)g(the)g(user)h(application)e(can)h (iden)o(tify)f(other)i(tasks)f(in)f(the)i(system.)291 2428 y(There)f(are)g(applications)f(where)h(it)f(is)h(natural)f(to)g (think)g(of)g(a)h FB(gr)n(oup)g(of)h(tasks)e FA(.)18 b(And)c(there)h(are)249 2482 y(cases)f(where)g(a)f(user)h(w)o(ould)e (lik)o(e)g(to)h(iden)o(tify)f(his)h(tasks)g(b)o(y)g(the)h(n)o(um)o(b)q (ers)e(0)7 b Ft(\000)h FA(\()p Fn(p)f Ft(\000)h FA(1\),)k(where)i Fn(p)f FA(is)p eop %%Page: 15 34 15 33 bop 249 251 a Fu(The)13 b(PVM)g(System)1254 b(15)249 507 y FA(the)12 b(n)o(um)o(b)q(er)e(of)g(tasks.)18 b(PVM)11 b(includes)h(the)f(concept)h(of)f(user)h(named)e(groups.)17 b(When)11 b(a)g(task)g(joins)249 561 y(a)g(group,)h(it)f(is)g(assigned) h(a)f(unique)g(\\instance")h(n)o(um)o(b)q(er)f(in)g(that)h(group.)17 b(Instance)12 b(n)o(um)o(b)q(ers)f(start)249 615 y(at)f(0)g(and)h(coun) o(t)f(up.)17 b(In)11 b(k)o(eeping)f(with)g(the)h(PVM)g(philosoph)o(y)m (,)e(the)i(group)f(functions)h(are)f(designed)249 669 y(to)17 b(b)q(e)g(v)o(ery)g(general)g(and)g(transparen)o(t)h(to)f(the)g (user.)28 b(F)m(or)17 b(example,)e(an)o(y)i(PVM)g(task)g(can)g(join)249 723 y(or)e(lea)o(v)o(e)f(an)o(y)h(group)f(at)h(an)o(y)f(time)f(without) i(ha)o(ving)e(to)i(inform)d(an)o(y)j(other)g(task)g(in)f(the)i (a\013ected)249 777 y(groups.)k(Also,)14 b(groups)g(can)h(o)o(v)o (erlap,)e(and)i(tasks)f(can)h(broadcast)g(messages)g(to)f(groups)g(of)g (whic)o(h)249 831 y(they)h(are)f(not)g(a)f(mem)o(b)q(er.)k(Details)c (of)h(the)g(a)o(v)n(ailable)e(group)i(functions)g(are)g(giv)o(en)g(in)f (Chapter)i(5.)249 885 y(T)m(o)e(use)i(an)o(y)e(of)h(the)g(group)g (functions,)f(a)h(program)e(m)o(ust)h(b)q(e)i(link)o(ed)e(with)g Fs(libgpvm3.a)p FA(.)291 939 y(The)j(general)h(paradigm)d(for)i (application)f(programming)e(with)j(PVM)h(is)f(as)g(follo)o(ws.)24 b(A)17 b(user)249 993 y(writes)j(one)g(or)f(more)g(sequen)o(tial)h (programs)e(in)h(C,)g(C++,)i(or)e(F)m(ortran)h(77)f(that)g(con)o(tain)g (em-)249 1047 y(b)q(edded)f(calls)e(to)g(the)h(PVM)g(library)m(.)24 b(Eac)o(h)17 b(program)e(corresp)q(onds)j(to)e(a)g(task)h(making)d(up)i (the)249 1101 y(application.)27 b(These)18 b(programs)f(are)g(compiled) f(for)h(eac)o(h)h(arc)o(hitecture)h(in)e(the)h(host)f(p)q(o)q(ol,)g (and)249 1155 y(the)g(resulting)g(ob)r(ject)h(\014les)f(are)g(placed)g (at)g(a)f(lo)q(cation)g(accessible)i(from)d(mac)o(hines)h(in)g(the)i (host)249 1209 y(p)q(o)q(ol.)f(T)m(o)12 b(execute)i(an)f(application,)e (a)h(user)i(t)o(ypically)d(starts)j(one)f(cop)o(y)g(of)f(one)h(task)f (\(usually)g(the)249 1263 y(\\master")e(or)g(\\initiating")f(task\))i (b)o(y)f(hand)h(from)d(a)j(mac)o(hine)e(within)h(the)h(host)g(p)q(o)q (ol.)17 b(This)10 b(pro)q(cess)249 1317 y(subsequen)o(tly)15 b(starts)g(other)f(PVM)h(tasks,)f(ev)o(en)o(tually)f(resulting)h(in)f (a)h(collection)f(of)h(activ)o(e)g(tasks)249 1371 y(that)g(then)g (compute)f(lo)q(cally)f(and)h(exc)o(hange)i(messages)e(with)h(eac)o(h)g (other)g(to)f(solv)o(e)h(the)g(problem.)249 1425 y(Note)j(that)g(while) g(the)g(ab)q(o)o(v)o(e)g(is)g(a)f(t)o(ypical)g(scenario,)i(as)f(man)o (y)e(tasks)j(as)f(appropriate)f(ma)o(y)f(b)q(e)249 1479 y(started)f(man)o(ually)m(.)h(As)e(men)o(tioned)f(earlier,)h(tasks)h (in)o(teract)g(through)f(explicit)g(message)g(passing,)249 1533 y(iden)o(tifying)f(eac)o(h)j(other)f(with)g(a)g(system-assigned,)f (opaque)h(TID.)291 1587 y(Sho)o(wn)i(in)h(Figure)g(2.3)f(is)g(the)i(b)q (o)q(dy)f(of)f(the)i(PVM)f(program)e FB(hel)r(lo)p FA(,)i(a)g(simple)e (example)h(that)249 1641 y(illustrates)i(the)h(basic)g(concepts)h(of)d (PVM)i(programming)o(.)28 b(This)19 b(program)d(is)i(in)o(tended)h(to)f (b)q(e)249 1694 y(in)o(v)o(ok)o(ed)d(man)o(ually;)e(after)j(prin)o (ting)e(its)i(task)g(id)f(\(obtained)g(with)h Fs(pvm)p 1410 1694 14 2 v 15 w(mytid\(\))p FA(\),)e(it)h(initiates)g(a)249 1748 y(cop)o(y)d(of)f(another)i(program)d(called)i FB(hel)r(lo)p 908 1748 13 2 v 15 w(other)g FA(using)g(the)g Fs(pvm)p 1270 1748 14 2 v 16 w(spawn\(\))e FA(function.)17 b(A)12 b(successful)249 1802 y(spa)o(wn)h(causes)i(the)f(program)d(to)i (execute)i(a)e(blo)q(c)o(king)f(receiv)o(e)j(using)e Fs(pvm)p 1446 1802 V 15 w(recv)p FA(.)k(After)d(receiving)249 1856 y(the)k(message,)g(the)h(program)d(prin)o(ts)i(the)g(message)g (sen)o(t)g(b)o(y)g(its)g(coun)o(terpart,)h(as)f(w)o(ell)f(its)h(task) 249 1910 y(id;)d(the)g(bu\013er)h(is)f(extracted)i(from)c(the)i (message)g(using)g Fs(pvm)p 1242 1910 V 15 w(upkstr)p FA(.)20 b(The)15 b(\014nal)g Fs(pvm)p 1667 1910 V 15 w(exit)f FA(call)249 1964 y(disso)q(ciates)h(the)f(program)f(from)f (the)i(PVM)h(system.)291 2018 y(Figure)k(2.4)g(is)g(a)h(listing)e(of)h (the)i(\\sla)o(v)o(e")d(or)i(spa)o(wned)g(program;)h(its)e(\014rst)i (PVM)f(action)f(is)249 2072 y(to)f(obtain)g(the)g(task)h(id)e(of)h(the) h(\\master")e(using)h(the)h Fs(pvm)p 1227 2072 V 15 w(parent)e FA(call.)30 b(This)18 b(program)e(then)249 2126 y(obtains)i(its)h (hostname)f(and)g(transmits)g(it)g(to)h(the)g(master)f(using)h(the)g (three-call)g(sequence)i(|)249 2180 y Fs(pvm)p 318 2180 V 15 w(initsend)8 b FA(to)h(initialize)f(the)h(send)i(bu\013er;)g Fs(pvm)p 1077 2180 V 15 w(pkstr)d FA(to)h(place)h(a)f(string,)h(in)e(a) h(strongly)g(t)o(yp)q(ed)249 2234 y(and)k(arc)o(hitecture-indep)q (endent)j(manner,)c(in)o(to)h(the)h(send)h(bu\013er;)f(and)f Fs(pvm)p 1484 2234 V 15 w(send)g FA(to)g(transmit)f(it)249 2288 y(to)i(the)g(destination)g(pro)q(cess)i(sp)q(eci\014ed)f(b)o(y)f FB(ptid)p FA(,)f(\\tagging")f(the)j(message)e(with)h(the)g(n)o(um)o(b)q (er)g(1.)p eop %%Page: 16 35 16 34 bop 249 251 a Fu(16)1375 b(Chapter)13 b(2)249 907 y Fs(#include)20 b("pvm3.h")249 1015 y(main\(\))249 1069 y({)249 1123 y(int)h(cc,)g(tid,)g(msgtag;)249 1177 y(char)g(buf[100];) 249 1285 y(printf\("i'm)f(t\045x\\n",)g(pvm_mytid\(\)\);)249 1393 y(cc)h(=)h(pvm_spawn\("hello_o)o(ther)o(",)d(\(char**\)0,)h(0,)h ("",)g(1,)h(&tid\);)249 1501 y(if)f(\(cc)h(==)f(1\))g({)423 1555 y(msgtag)g(=)h(1;)249 1608 y(pvm_recv\(tid,)d(msgtag\);)249 1662 y(pvm_upkstr\(buf\);)249 1716 y(printf\("from)g(t\045x:)i (\045s\\n",)g(tid,)g(buf\);)249 1770 y(})h(else)249 1824 y(printf\("can't)d(start)i(hello_other\\n"\);)249 1932 y(pvm_exit\(\);)249 1986 y(})249 2090 y Fo(Figure)13 b(2.3)249 2127 y Fy(PVM)g(program)c Fm(hel)r(lo.c)p eop %%Page: 17 36 17 35 bop 249 251 a Fu(The)13 b(PVM)g(System)1254 b(17)249 988 y Fs(#include)20 b("pvm3.h")249 1096 y(main\(\))249 1150 y({)249 1204 y(int)h(ptid,)g(msgtag;)249 1258 y(char)g(buf[100];) 249 1366 y(ptid)g(=)h(pvm_parent\(\);)249 1474 y(strcpy\(buf,)e ("hello,)g(world)h(from)g("\);)249 1528 y(gethostname\(buf)e(+)i (strlen\(buf\),)f(64\);)336 1581 y(msgtag)h(=)g(1;)249 1635 y(pvm_initsend\(PvmDa)o(taDef)o(ault)o(\);)249 1689 y(pvm_pkstr\(buf\);)249 1743 y(pvm_send\(ptid,)e(msgtag\);)249 1851 y(pvm_exit\(\);)249 1905 y(})249 2009 y Fo(Figure)13 b(2.4)249 2046 y Fy(PVM)g(program)c Fm(hel)r(lo)p 559 2046 11 2 v 14 w(other.c)p eop %%Page: 18 37 18 36 bop eop %%Page: 19 38 19 37 bop 249 325 a Fp(3)25 b FD(Using)18 b(PVM)249 561 y FA(This)g(c)o(hapter)i(describ)q(es)g(ho)o(w)e(to)g(set)i(up)e(the)h (PVM)g(soft)o(w)o(are)f(pac)o(k)n(age,)h(ho)o(w)f(to)g(con\014gure)h(a) 249 615 y(simple)e(virtual)i(mac)o(hine,)f(and)h(ho)o(w)f(to)h(compile) e(and)i(run)g(the)h(example)d(programs)h(supplied)249 669 y(with)c(PVM.)f(The)i(c)o(hapter)g(is)e(written)i(as)f(a)f (tutorial,)g(so)h(the)g(reader)h(can)f(follo)o(w)e(along)h(with)g(the) 249 723 y(b)q(o)q(ok)f(b)q(eside)i(the)f(terminal.)j(The)d(\014rst)h (part)e(of)g(the)i(c)o(hapter)f(describ)q(es)i(the)e(straigh)o(tforw)o (ard)f(use)249 777 y(of)j(PVM)h(and)g(the)g(most)e(common)f(errors)k (and)e(problems)g(in)g(set)i(up)e(and)h(running.)23 b(The)16 b(latter)249 831 y(part)f(of)e(the)i(c)o(hapter)h(describ)q(es)g(some)e (of)g(the)h(more)e(adv)n(anced)i(options)f(a)o(v)n(ailable)e(to)i (customize)249 885 y(the)h(reader's)g(PVM)f(en)o(vironmen)o(t.)249 1005 y FD(3.1)52 b(Ho)o(w)17 b(to)h(Obtain)h(the)f(PVM)e(Soft)o(w)o (are)249 1113 y FA(The)10 b(latest)h(v)o(ersion)f(of)f(the)i(PVM)f (source)h(co)q(de)g(and)f(do)q(cumen)o(tation)f(is)g(alw)o(a)o(ys)g(a)o (v)n(ailable)f(through)249 1167 y FB(netlib)p FA(.)27 b(Netlib)17 b(is)g(a)g(soft)o(w)o(are)g(distribution)g(service)i(set)f (up)f(on)g(the)h(In)o(ternet)g(that)f(con)o(tains)g(a)249 1221 y(wide)d(range)h(of)f(computer)g(soft)o(w)o(are.)19 b(Soft)o(w)o(are)c(can)f(b)q(e)h(retriev)o(ed)h(from)c(netlib)j(b)o(y)f (ftp,)g(WWW,)249 1275 y(xnetlib,)f(or)h(email.)291 1329 y(PVM)f(\014les)g(can)g(b)q(e)g(obtained)g(b)o(y)f(anon)o(ymous)f(ftp)i (to)f Fs(netlib2.cs.utk.edu)o FA(.)j(Lo)q(ok)d(in)h(direc-)249 1383 y(tory)h(p)o(vm3.)i(The)e(\014le)g Fs(index)f FA(describ)q(es)j (the)f(\014les)f(in)f(this)h(directory)h(and)f(its)f(sub)q (directories.)291 1437 y(Using)k(a)g(w)o(orld)g(wide)h(w)o(eb)f(to)q (ol)g(lik)o(e)g(Xmosaic)f(the)i(PVM)g(\014les)g(are)g(accessed)i(b)o(y) d(using)g(the)249 1491 y(address)e Fs(http://www.netlib.o)o(rg/p)o (vm3/i)o(ndex.)o(html)p FA(.)291 1545 y(Xnetlib)d(is)h(a)f(X-Windo)o(w) f(in)o(terface)j(that)e(allo)o(ws)g(a)g(user)i(to)e(bro)o(wse)i(or)e (query)i(netlib)e(for)g(a)o(v)n(ail-)249 1599 y(able)h(soft)o(w)o(are)f (and)h(to)g(automatically)c(transfer)14 b(the)f(selected)i(soft)o(w)o (are)e(to)g(the)g(user's)h(computer.)249 1653 y(T)m(o)i(get)i(xnetlib)e (send)i(email)d(to)i Fs(netlib@ornl.gov)d FA(with)i(the)i(message)f Fs(send)k(xnetlib.shar)249 1707 y(from)g(xnetlib)12 b FA(or)i(anon)o(ymous)e(ftp)i(from)e Fs(cs.utk.edu)20 b(pub/xnetlib)p FA(.)291 1761 y(The)14 b(PVM)h(soft)o(w)o(are)f(can)h (b)q(e)g(requested)h(b)o(y)e(email.)j(T)m(o)d(receiv)o(e)h(this)g(soft) o(w)o(are)f(send)h(email)d(to)249 1815 y Fs(netlib@ornl.gov)g FA(with)i(the)h(message:)20 b Fs(send)g(index)h(from)g(pvm3)p FA(.)f(An)15 b(automatic)d(mail)g(han-)249 1869 y(dler)i(will)f(return) i(a)f(list)f(of)g(a)o(v)n(ailable)f(\014les)i(and)g(further)h (instructions)g(b)o(y)e(email.)k(The)d(adv)n(an)o(tage)249 1923 y(of)f(this)h(metho)q(d)f(is)h(that)g(an)o(y)o(one)g(with)f(email) f(access)j(to)f(In)o(ternet)h(can)g(obtain)e(the)h(soft)o(w)o(are.)291 1977 y(The)k(PVM)h(soft)o(w)o(are)f(is)g(distributed)h(as)g(a)f(uuenco) q(ded,)i(compressed,)g(tar)e(\014le.)31 b(T)m(o)18 b(unpac)o(k)249 2031 y(the)e(distribution)f(the)h(\014le)g(m)o(ust)f(b)q(e)h(uudeco)q (ded,)h(uncompressed,)f(and)g(tar)f(xvf)g(\014lename.)22 b(This)249 2085 y(will)12 b(create)k(a)d(directory)i(called)e(p)o(vm3)f (wherev)o(er)j(it)f(is)f(un)o(tarred.)19 b(The)14 b(PVM)h(do)q(cumen)o (tation)d(is)249 2139 y(distributed)k(as)f(p)q(ostscript)h(\014les)f (and)g(includes)g(a)g(User's)h(Guide,)e(reference)j(man)o(ual,)c(and)h (quic)o(k)249 2193 y(reference)i(card.)249 2313 y FD(3.2)52 b(Setup)18 b(to)g(Use)f(PVM)249 2421 y FA(One)g(of)f(the)i(reasons)f (for)f(PVM's)h(p)q(opularit)o(y)f(is)g(that)h(it)f(is)h(simple)e(to)h (set)i(up)e(and)h(use.)27 b(PVM)249 2475 y(do)q(es)13 b(not)f(require)h(sp)q(ecial)g(privileges)f(to)g(b)q(e)g(installed.)17 b(An)o(y)o(one)12 b(with)g(a)g(v)n(alid)f(login)g(on)h(the)g(hosts)p eop %%Page: 20 39 20 38 bop 249 251 a Fu(20)1375 b(Chapter)13 b(3)249 507 y FA(can)g(do)g(so.)k(In)c(addition,)f(only)g(one)h(p)q(erson)h(at)e (an)h(organization)e(needs)k(to)d(get)h(and)g(install)f(PVM)249 561 y(for)i(ev)o(ery)o(one)g(at)g(that)g(organization)f(to)g(use)i(it.) 291 615 y(PVM)j(uses)i(t)o(w)o(o)e(en)o(vironmen)o(t)g(v)n(ariables)g (when)h(starting)f(and)g(running.)32 b(Eac)o(h)19 b(PVM)g(user)249 669 y(needs)14 b(to)f(set)h(these)g(t)o(w)o(o)f(v)n(ariables)f(to)h (use)h(PVM.)f(The)g(\014rst)h(v)n(ariable)e(is)h(PVM)p 1536 669 13 2 v 15 w(R)o(OOT,)f(whic)o(h)h(is)249 723 y(set)j(to)e(the)h(lo)q(cation)f(of)g(the)h(installed)f Fs(pvm3)g FA(directory)m(.)21 b(The)15 b(second)h(v)n(ariable)d(is)i (PVM)p 1697 723 V 15 w(AR)o(CH,)249 777 y(whic)o(h)i(tells)f(PVM)h(the) g(arc)o(hitecture)i(of)d(this)g(host)h(and)f(th)o(us)h(what)g (executables)h(to)e(pic)o(k)h(from)249 831 y(the)e(PVM)p 420 831 V 15 w(R)o(OOT)f(directory)m(.)291 885 y(The)d(easiest)g(metho) q(d)f(is)h(to)f(set)i(these)g(t)o(w)o(o)e(v)n(ariables)g(in)g(y)o(our)h Fs(.cshrc)e FA(\014le.)17 b(W)m(e)10 b(assume)g(y)o(ou)h(are)249 939 y(using)j FB(csh)g FA(as)g(y)o(ou)f(follo)o(w)f(along)h(this)g (tutorial.)18 b(Here)d(is)e(an)h(example)e(for)i(setting)g(PVM)p 1694 939 V 16 w(R)o(OOT:)249 1026 y Fs(setenv)21 b(PVM_ROOT)f ($HOME/pvm3)249 1113 y FA(It)c(is)g(recommended)f(that)h(the)h(user)g (set)g(PVM)p 1027 1113 V 15 w(AR)o(CH)f(b)o(y)g(concatenating)g(to)g (the)h(\014le)f Fs(.cshrc)p FA(,)249 1167 y(the)f(con)o(ten)o(t)g(of)f (\014le)g Fs($PVM)p 675 1167 14 2 v 15 w(ROOT/lib/cshrc.stub)o FA(.)j(The)e(stub)g(should)f(b)q(e)h(placed)g(after)g(P)m(A)m(TH)249 1221 y(and)f(PVM)p 429 1221 13 2 v 16 w(R)o(OOT)g(are)h(de\014ned.)21 b(This)14 b(stub)h(automatically)c(determines)k(the)g(PVM)p 1644 1221 V 15 w(AR)o(CH)f(for)249 1275 y(this)h(host)g(and)f(is)h (particularly)e(useful)i(when)g(the)h(user)f(shares)h(a)f(common)c (\014le)k(system)f(\(suc)o(h)i(as)249 1329 y(NFS\))e(across)h(sev)o (eral)g(di\013eren)o(t)f(arc)o(hitectures.)291 1383 y(T)m(able)g(1)g (lists)h(the)g(PVM)p 699 1383 V 15 w(AR)o(CH)g(names)f(and)g(their)h (corresp)q(onding)h(arc)o(hitecture)g(t)o(yp)q(es)g(that)249 1437 y(are)e(supp)q(orted)i(in)d(PVM)h(3.3.)291 1491 y(The)g(PVM)h(source)h(comes)e(with)g(directories)i(and)e(mak)o (e\014les)g(for)g(most)f(arc)o(hitectures)k(y)o(ou)d(are)249 1545 y(lik)o(ely)c(to)g(ha)o(v)o(e.)17 b(Chapter)12 b(8)f(describ)q(es) i(ho)o(w)d(to)h(p)q(ort)g(the)h(PVM)f(source)h(to)f(an)g(unsupp)q (orted)h(arc)o(hi-)249 1599 y(tecture.)19 b(Building)9 b(for)h(eac)o(h)h(arc)o(hitecture)i(t)o(yp)q(e)e(is)f(done)h (automatically)c(b)o(y)k(logging)d(on)j(to)f(a)g(host,)249 1653 y(going)i(in)o(to)g(the)i(PVM)p 612 1653 V 16 w(R)o(OOT)f (directory)m(,)g(and)g(t)o(yping)f Fs(make)p FA(.)17 b(The)d(mak)o(e\014le)d(will)h(automatically)249 1707 y(determine)j(whic)o(h)f(arc)o(hitecture)i(it)f(is)f(b)q(eing)h (executed)h(on,)e(create)i(appropriate)f(sub)q(directories,)249 1761 y(and)g(build)g Fs(pvm)p FA(,)f Fs(pvmd3)p FA(,)g Fs(libpvm3.a)p FA(,)g(and)h Fs(libfpvm3.a)p FA(,)e Fs(pvmgs)p FA(,)h(and)h Fs(libgpvm3.a)p FA(.)20 b(It)15 b(places)249 1815 y(all)e(these)i(\014les)g(in)e Fs($PVM)p 636 1815 14 2 v 15 w(ROOT/lib/PVM)p 915 1815 V 13 w(ARCH)p FA(,)g(with)h(the)g (exception)h(of)e(p)o(vmgs)g(whic)o(h)h(is)g(placed)249 1869 y(in)f Fs($PVM)p 388 1869 V 15 w(ROOT/bin/PVM)p 667 1869 V 14 w(ARCH)p FA(.)249 1989 y FD(3.3)52 b(Setup)18 b(Summary)208 2097 y Ft(\017)i FA(Set)15 b(PVM)p 420 2097 13 2 v 15 w(R)o(OOT)f(and)f(PVM)p 750 2097 V 16 w(AR)o(CH)g(in)h(y)o(our)f(.cshrc)i(\014le)208 2168 y Ft(\017)20 b FA(Build)13 b(PVM)i(for)e(eac)o(h)i(arc)o(hitecture)g(t)o (yp)q(e)208 2238 y Ft(\017)20 b FA(Create)15 b(a)f(.rhosts)g(\014le)g (on)f(eac)o(h)i(host)f(listing)f(all)f(the)j(hosts)f(y)o(ou)g(wish)g (to)f(use)208 2309 y Ft(\017)20 b FA(Create)c(a)g Fs($HOME/.xpvm)p 666 2309 14 2 v 13 w(hosts)e FA(\014le)i(listing)e(all)g(the)i(hosts)g (y)o(ou)f(wish)g(to)g(use)i(prep)q(ended)g(b)o(y)e(an)249 2363 y(\\&".)p eop %%Page: 21 40 21 39 bop 249 251 a Fu(Using)14 b(PVM)1358 b(21)p 376 788 1330 2 v 375 821 2 34 v 401 811 a Fy(PVM)p 485 811 11 2 v 13 w(AR)o(CH)p 623 821 2 34 v 51 w(Mac)o(hine)p 1161 821 V 407 w(Notes)p 1704 821 V 376 823 1330 2 v 375 858 2 35 v 401 848 a(AFX8)p 623 858 V 155 w(Allian)o(t)11 b(FX/8)p 1161 858 V 1704 858 V 375 891 2 34 v 401 881 a(ALPHA)p 623 891 V 124 w(DEC)h(Alpha)p 1161 891 V 356 w(DEC)g(OSF-1)p 1704 891 V 375 924 V 401 914 a(BAL)p 623 924 V 175 w(Sequen)o(t)d(Balance)p 1161 924 V 282 w(D)o(YNIX)p 1704 924 V 375 957 V 401 947 a(BFL)m(Y)p 623 957 V 155 w(BBN)j(Butter\015y)e(TC2000)p 1161 957 V 1704 957 V 375 992 2 35 v 401 982 a(BSD386)p 623 992 V 122 w(80386/486)f(PC)j(runnning)d(Unix)p 1161 992 V 80 w(BSDI,)i(386BSD,)f(NetBSD)p 1704 992 V 375 1025 2 34 v 401 1015 a(CM2)p 623 1025 V 173 w(Thinking)g(Mac)o(hines)g(CM2)p 1161 1025 V 156 w(Sun)h(fron)o(t-end)p 1704 1025 V 375 1059 V 401 1049 a(CM5)p 623 1059 V 173 w(Thinking)f(Mac)o(hines)g(CM5)p 1161 1059 V 156 w(Uses)i(nativ)o(e)e(messages)p 1704 1059 V 375 1092 V 401 1082 a(CNVX)p 623 1092 V 145 w(Con)o(v)o(ex)h (C-series)p 1161 1092 V 291 w(IEEE)g(f.p.)p 1704 1092 V 375 1125 V 401 1115 a(CNVXN)p 623 1125 V 119 w(Con)o(v)o(ex)g (C-series)p 1161 1125 V 291 w(nativ)o(e)f(f.p.)p 1704 1125 V 375 1158 V 401 1148 a(CRA)m(Y)p 623 1158 V 148 w(C-90,)h(YMP)m(,)i(T3D)e(p)q(ort)g(a)o(v)n(ailable)p 1161 1158 V 47 w(UNICOS)p 1704 1158 V 375 1191 V 401 1181 a(CRA)m(Y2)p 623 1191 V 130 w(Cra)o(y-2)p 1161 1191 V 1704 1191 V 375 1225 V 401 1215 a(CRA)m(YSMP)p 623 1225 V 72 w(Cra)o(y)g(S-MP)p 1161 1225 V 1704 1225 V 375 1258 V 401 1248 a(DGA)l(V)p 623 1258 V 145 w(Data)g(General)e (Aviion)p 1161 1258 V 1704 1258 V 375 1291 V 401 1281 a(E88K)p 623 1291 V 161 w(Encore)h(88000)p 1161 1291 V 1704 1291 V 375 1324 V 401 1314 a(HP300)p 623 1324 V 144 w(HP-9000)h(mo)q(del)f(300)p 1161 1324 V 234 w(HPUX)p 1704 1324 V 375 1357 V 401 1347 a(HPP)m(A)p 623 1357 V 151 w(HP-9000)h(P)m(A-RISC)p 1161 1357 V 1704 1357 V 375 1392 2 35 v 401 1382 a(I860)p 623 1392 V 181 w(In)o(tel)f (iPSC/860)p 1161 1392 V 305 w(Uses)i(nativ)o(e)e(messages)p 1704 1392 V 375 1427 V 401 1417 a(IPSC2)p 623 1427 V 148 w(In)o(tel)g(iPSC/2)h(386)g(host)p 1161 1427 V 199 w(SysV,)g(Uses)h(nativ)o(e)e(messages)p 1704 1427 V 375 1460 2 34 v 401 1450 a(KSR1)p 623 1460 V 157 w(Kendall)g(Square)g (KSR-1)p 1161 1460 V 187 w(OSF-1,)h(uses)g(shared)f(memory)p 1704 1460 V 375 1495 2 35 v 401 1485 a(LINUX)p 623 1495 V 135 w(80386/486)f(PC)j(running)d(Unix)p 1161 1495 V 100 w(LINUX)p 1704 1495 V 375 1528 2 34 v 401 1518 a(MASP)m(AR)p 623 1528 V 97 w(Maspar)p 1161 1528 V 422 w(DEC)j(fron)o(t-end)p 1704 1528 V 375 1562 V 401 1552 a(MIPS)p 623 1562 V 159 w(MIPS)f(4680)p 1161 1562 V 1704 1562 V 375 1595 V 401 1585 a(NEXT)p 623 1595 V 147 w(NeXT)p 1161 1595 V 1704 1595 V 375 1628 V 401 1618 a(PGON)p 623 1628 V 143 w(In)o(tel)f(P)o (aragon)p 1161 1628 V 327 w(Uses)i(nativ)o(e)e(messages)p 1704 1628 V 375 1661 V 401 1651 a(PMAX)p 623 1661 V 140 w(DECstation)g(3100,)g(5100)p 1161 1661 V 180 w(Ultrix)p 1704 1661 V 375 1696 2 35 v 401 1686 a(RS6K)p 623 1696 V 157 w(IBM/RS6000)p 1161 1696 V 332 w(AIX)i(3.2)p 1704 1696 V 375 1729 2 34 v 401 1719 a(R)m(T)p 623 1729 V 200 w(IBM)g(R)m(T)p 1161 1729 V 1704 1729 V 375 1763 V 401 1753 a(SGI)p 623 1763 V 187 w(Silicon)e(Graphics)f(IRIS)p 1161 1763 V 203 w(IRIX)j(4.x)p 1704 1763 V 375 1796 V 401 1786 a(SGI5)p 623 1796 V 169 w(Silicon)e(Graphics)f(IRIS)p 1161 1796 V 203 w(IRIX)j(5.x)p 1704 1796 V 375 1829 V 401 1819 a(SGIMP)p 623 1829 V 131 w(SGI)f(m)o(ultipro)q(ces)o(sor)p 1161 1829 V 239 w(Uses)h(shared)e(memory)p 1704 1829 V 375 1862 V 401 1852 a(SUN3)p 623 1862 V 158 w(Sun)h(3)p 1161 1862 V 449 w(SunOS)g(4.2)p 1704 1862 V 375 1895 V 401 1885 a(SUN4)p 623 1895 V 158 w(Sun)g(4,)g(SP)m(AR)o(Cstation)p 1161 1895 V 203 w(SunOS)g(4.2)p 1704 1895 V 375 1929 V 401 1919 a(SUN4SOL2)p 623 1929 V 71 w(Sun)g(4,)g(SP)m(AR)o(Cstation)p 1161 1929 V 203 w(Solaris)f(2.x)p 1704 1929 V 375 1962 V 401 1952 a(SUNMP)p 623 1962 V 120 w(SP)m(AR)o(C)i(m)o(ultipro)q (cessor)p 1161 1962 V 181 w(Solaris)e(2.x,)h(uses)f(shared)g(memory)p 1704 1962 V 375 1995 V 401 1985 a(SYMM)p 623 1995 V 138 w(Sequen)o(t)f(Symmetry)p 1161 1995 V 1704 1995 V 375 2028 V 401 2018 a(TITN)p 623 2028 V 159 w(Starden)o(t)g(Titan)p 1161 2028 V 1704 2028 V 375 2061 V 401 2051 a(U370)p 623 2061 V 168 w(IBM)j(370)p 1161 2061 V 402 w(AIX)p 1704 2061 V 375 2095 V 401 2085 a(UV)l(AX)p 623 2095 V 148 w(DEC)g(MicroV)l(AX)p 1161 2095 V 1704 2095 V 376 2096 1330 2 v 249 2192 a Fo(T)m(able)h(3.1)249 2229 y Fy(PVM)p 333 2229 11 2 v 14 w(AR)o(CH)g(names)d(used)g(in)h(PVM)i(3)p eop %%Page: 22 41 22 40 bop 249 251 a Fu(22)1375 b(Chapter)13 b(3)249 507 y FD(3.4)52 b(Starting)19 b(PVM)249 615 y FA(Before)d(w)o(e)f(go)g(o)o (v)o(er)g(the)g(steps)i(to)e(compile)e(and)i(run)g(parallel)f(PVM)h (programs,)f(y)o(ou)h(should)f(b)q(e)249 669 y(sure)f(y)o(ou)e(can)g (start)h(up)g(PVM)g(and)f(con\014gure)h(a)f(virtual)g(mac)o(hine.)16 b(On)11 b(an)o(y)g(host)h(on)f(whic)o(h)h(PVM)249 723 y(has)i(b)q(een)h(installed)e(y)o(ou)h(can)g(t)o(yp)q(e)249 810 y Fs(\045)22 b(pvm)249 897 y FA(and)13 b(y)o(ou)f(should)h(get)g (bac)o(k)g(a)g(PVM)g(console)g(prompt)f(signifying)f(that)i(PVM)g(is)g (no)o(w)g(running)f(on)249 951 y(this)i(host.)k(Y)m(ou)c(can)g(add)f (hosts)i(to)f(y)o(our)f(virtual)g(mac)o(hine)g(b)o(y)h(t)o(yping)f(at)h (the)g(console)g(prompt)249 1039 y Fs(pvm>)21 b(add)g(hostname)249 1126 y FA(And)e(y)o(ou)f(can)h(delete)h(hosts)f(\(except)h(the)g(one)f (y)o(ou)f(are)h(on\))g(from)e(y)o(our)h(virtual)g(mac)o(hine)f(b)o(y) 249 1180 y(t)o(yping)249 1267 y Fs(pvm>)k(delete)g(hostname)249 1354 y FA(If)16 b(y)o(ou)g(get)g(the)h(message)f(\\Can't)f(Start)i(p)o (vmd,")d(then)j(c)o(hec)o(k)g(the)g(common)c(startup)k(problems)249 1408 y(section)e(and)e(try)i(again.)291 1462 y(T)m(o)e(see)i(what)f (the)g(presen)o(t)i(virtual)d(mac)o(hine)f(lo)q(oks)h(lik)o(e,)g(y)o (ou)h(can)g(t)o(yp)q(e)249 1549 y Fs(pvm>)21 b(conf)249 1636 y FA(T)m(o)13 b(see)i(what)f(PVM)g(tasks)h(are)f(running)g(on)f (the)i(virtual)e(mac)o(hine,)f(y)o(ou)h(t)o(yp)q(e)249 1724 y Fs(pvm>)21 b(ps)g(-a)249 1811 y FA(Of)15 b(course)h(y)o(ou)f (don't)f(ha)o(v)o(e)h(an)o(y)g(tasks)g(running)g(y)o(et;)g(that's)g(in) g(the)h(next)f(section.)22 b(If)15 b(y)o(ou)g(t)o(yp)q(e)249 1865 y(\\quit")g(at)g(the)h(console)f(prompt,)g(the)g(console)h(will)e (quit)h(but)h(y)o(our)f(virtual)f(mac)o(hine)g(and)i(tasks)249 1919 y(will)e(con)o(tin)o(ue)h(to)g(run.)22 b(A)o(t)15 b(an)o(y)g(Unix)g(prompt)f(on)h(an)o(y)f(host)i(in)e(the)i(virtual)e (mac)o(hine,)g(y)o(ou)h(can)249 1973 y(t)o(yp)q(e)249 2060 y Fs(\045)22 b(pvm)249 2147 y FA(and)12 b(y)o(ou)g(will)e(get)j (the)f(message)g(\\p)o(vm)e(already)i(running")g(and)g(the)h(console)f (prompt.)k(When)d(y)o(ou)249 2201 y(are)h(\014nished)h(with)e(the)i (virtual)e(mac)o(hine,)f(y)o(ou)h(should)h(t)o(yp)q(e)249 2288 y Fs(pvm>)21 b(halt)249 2375 y FA(This)f(command)d(kills)i(an)o(y) g(PVM)i(tasks,)g(sh)o(uts)g(do)o(wn)f(the)g(virtual)g(mac)o(hine,)f (and)h(exits)g(the)249 2429 y(console.)f(This)14 b(is)g(the)h (recommended)f(metho)q(d)f(to)h(stop)h(PVM)f(b)q(ecause)i(it)e(mak)o (es)f(sure)i(that)f(the)249 2483 y(virtual)f(mac)o(hine)g(sh)o(uts)h (do)o(wn)g(cleanly)m(.)p eop %%Page: 23 42 23 41 bop 249 251 a Fu(Using)14 b(PVM)1358 b(23)291 507 y FA(Y)m(ou)17 b(should)h(practice)i(starting)e(and)g(stopping)g(and)g (adding)g(hosts)h(to)f(PVM)g(un)o(til)g(y)o(ou)g(are)249 561 y(comfortable)12 b(with)g(the)i(PVM)f(console.)18 b(A)c(full)d(description)j(of)e(the)i(PVM)g(console)f(and)g(its)g(man)o (y)249 615 y(command)e(options)j(is)f(giv)o(en)h(at)g(the)g(end)g(of)g (this)g(c)o(hapter.)291 669 y(If)d(y)o(ou)g(don't)f(w)o(an)o(t)h(to)h (t)o(yp)q(e)g(in)e(a)i(bunc)o(h)f(of)g(host)h(names)e(eac)o(h)i(time,)e (there)j(is)e(a)h(host\014le)f(option.)249 723 y(Y)m(ou)i(can)h(list)g (the)g(hostnames)g(in)f(a)h(\014le)g(one)g(p)q(er)h(line)e(and)h(then)g (t)o(yp)q(e)249 810 y Fs(\045)22 b(pvm)f(hostfile)249 897 y FA(PVM)11 b(will)f(then)i(add)e(all)g(the)i(listed)f(hosts)g(sim) o(ultaneously)e(b)q(efore)j(the)g(console)f(prompt)f(app)q(ears.)249 951 y(Sev)o(eral)15 b(options)f(can)h(b)q(e)g(sp)q(eci\014ed)h(on)e(a)g (p)q(er-host)i(basis)e(in)g(the)h(host\014le.)21 b(These)15 b(are)g(describ)q(ed)249 1005 y(at)e(the)h(end)f(of)g(this)g(c)o (hapter)h(for)f(the)h(user)g(who)f(wishes)h(to)f(customize)f(his)h (virtual)g(mac)o(hine)f(for)g(a)249 1059 y(particular)i(application)e (or)i(en)o(vironmen)o(t.)291 1113 y(There)e(are)f(other)h(w)o(a)o(ys)e (to)h(start)g(up)g(PVM.)g(The)h(functions)f(of)f(the)i(console)f(and)g (a)f(p)q(erformance)249 1167 y(monitor)e(ha)o(v)o(e)i(b)q(een)h(com)o (bined)e(in)g(a)h(graphical)f(user)i(in)o(terface)g(called)f(XPVM,)g (whic)o(h)f(is)h(a)o(v)n(ailable)249 1221 y(precompiled)h(on)h(netlib)g (\(see)i(Chapter)f(8)f(for)f(XPVM)i(details\).)k(If)12 b(XPVM)h(has)f(b)q(een)i(installed)d(at)249 1275 y(y)o(our)h(site,)g (then)g(it)g(can)g(b)q(e)g(used)h(to)f(start)g(PVM.)g(T)m(o)f(start)h (PVM)h(with)e(this)h(X)g(windo)o(w)f(in)o(terface,)249 1329 y(t)o(yp)q(e)249 1416 y Fs(\045)22 b(xpvm)249 1504 y FA(The)15 b(men)o(u)e(button)i(labled)f(\\hosts")g(will)f(pull)h(do)o (wn)g(a)g(list)g(of)f(hosts)j(y)o(ou)d(can)i(add.)k(If)14 b(y)o(ou)g(clic)o(k)249 1558 y(on)h(a)h(hostname,)e(it)i(is)f(added)h (and)g(an)f(icon)g(of)g(the)h(mac)o(hine)f(app)q(ears)h(in)f(an)h (animation)c(of)j(the)249 1611 y(virtual)10 b(mac)o(hine.)16 b(A)11 b(host)g(is)g(deleted)h(if)e(y)o(ou)g(clic)o(k)h(on)f(a)h (hostname)f(that)h(is)f(already)h(in)f(the)i(virtual)249 1665 y(mac)o(hine)i(\(see)j(Figure)e(3.1\).)22 b(On)15 b(startup)h(XPVM)g(reads)g(the)g(\014le)g Fs($HOME/.xpvm)p 1592 1665 14 2 v 13 w(hosts)p FA(,)e(whic)o(h)249 1719 y(is)e(a)f(list)h(of)f(hosts)i(to)e(displa)o(y)g(in)h(this)g(men)o(u.)k (Hosts)c(without)g(leading)f(\\&")h(are)g(added)g(all)f(at)g(once)249 1773 y(at)j(startup.)291 1827 y(The)j(quit)f(and)g(halt)g(buttons)h(w)o (ork)f(just)h(lik)o(e)f(the)h(PVM)g(console.)26 b(If)16 b(y)o(ou)g(quit)g(XPVM)h(and)249 1881 y(then)12 b(restart)h(it,)d(XPVM) i(will)e(automatically)e(displa)o(y)i(what)h(the)h(running)f(virtual)g (mac)o(hine)f(lo)q(oks)249 1935 y(lik)o(e.)23 b(Practice)18 b(starting)e(and)f(stopping)h(and)g(adding)f(hosts)h(with)g(XPVM.)g(If) g(there)h(are)f(errors,)249 1989 y(they)e(should)g(app)q(ear)g(in)g (the)g(windo)o(w)f(where)i(y)o(ou)f(started)h(XPVM.)p eop %%Page: 24 43 24 42 bop 249 251 a Fu(24)1375 b(Chapter)13 b(3)249 507 y FD(3.5)52 b(Common)17 b(Startup)h(Problems)249 615 y FA(If)f(PVM)g(has)g(a)g(problem)f(starting)h(up,)h(it)e(will)g(prin)o (t)h(an)g(error)h(message)e(either)i(to)f(the)h(screen)249 669 y(or)g(in)f(the)h(log)e(\014le)i Fs(/tmp/pvml.<uid>)p FA(.)26 b(This)17 b(section)h(describ)q(es)i(the)e(most)f(common)d (startup)249 723 y(problems)g(and)h(ho)o(w)g(to)g(solv)o(e)g(them.)22 b(Chapter)15 b(9)g(con)o(tains)g(a)g(more)g(complete)f(troublesho)q (oting)249 777 y(guide.)291 831 y(If)f(the)i(message)e(sa)o(ys)249 906 y Fs([t80040000])20 b(Can't)g(start)h(pvmd)249 981 y FA(\014rst)14 b(c)o(hec)o(k)f(that)g(y)o(our)g Fs(.rhosts)e FA(\014le)i(on)g(the)g(remote)f(host)h(con)o(tains)g(the)h(name)d(of)h (the)i(host)f(from)249 1034 y(whic)o(h)g(y)o(ou)f(are)i(starting)e (PVM.)h(An)g(external)h(c)o(hec)o(k)g(that)f(y)o(our)f Fs(.rhosts)g FA(\014le)h(is)f(set)i(correctly)g(is)249 1088 y(to)g(t)o(yp)q(e)249 1163 y Fs(\045)22 b(rsh)f(remote_host)e(ls) 249 1238 y FA(If)13 b(y)o(our)g Fs(.rhosts)f FA(is)h(set)h(up)f (correctly)m(,)h(then)g(y)o(ou)e(will)g(see)i(a)f(listing)f(of)h(y)o (our)g(\014les)h(on)f(the)g(remote)249 1292 y(host.)291 1346 y(Other)i(reasons)g(to)f(get)h(this)f(message)g(include)g(not)g (ha)o(ving)f(PVM)i(installed)f(on)g(a)f(host)i(or)f(not)249 1400 y(ha)o(ving)f(PVM)p 482 1400 13 2 v 15 w(R)o(OOT)h(set)h (correctly)g(on)e(some)h(host.)k(Y)m(ou)13 b(can)h(c)o(hec)o(k)h(these) g(b)o(y)f(t)o(yping)249 1474 y Fs(\045)22 b(rsh)f(remote_host)e ($PVM_ROOT/lib/pvmd)249 1549 y FA(Some)d(Unix)i(shells,)g(for)f (example)g(ksh,)h(do)f(not)h(set)g(en)o(vironmen)o(t)f(v)n(ariables)g (on)g(remote)g(hosts)249 1603 y(when)c(using)g(rsh.)18 b(In)13 b(PVM)g(3.3)f(there)i(are)g(t)o(w)o(o)e(w)o(ork)h(arounds)g (for)f(suc)o(h)i(shells.)k(First,)13 b(if)f(y)o(ou)g(set)249 1657 y(the)18 b(en)o(vironmen)o(t)f(v)n(ariable,)f(PVM)p 837 1657 V 16 w(DP)m(A)m(TH,)g(on)h(the)h(master)f(host)h(to)f Fs(pvm3/lib/pvmd)p FA(,)e(then)249 1711 y(this)e(will)e(o)o(v)o(erride) j(the)f(default)g(dx)g(path.)k(The)d(second)g(metho)q(d)e(is)h(to)f (tell)h(PVM)g(explicitly)f(w)o(ere)249 1765 y(to)i(\014nd)g(the)g (remote)g(p)o(vmd)e(executable)j(b)o(y)f(using)f(the)i Fs(dx=)e FA(option)g(in)h(the)g(host\014le.)291 1819 y(If)d(PVM)g(is)h(man)o(ually)c(killed,)j(or)g(stopp)q(ed)h(abnormally) d(\(e.g.,)i(b)o(y)g(a)g(system)h(crash\),)g(then)g(c)o(hec)o(k)249 1873 y(for)k(the)h(existence)h(of)e(the)g(\014le)h Fs(/tmp/pvmd.<uid>)p FA(.)22 b(This)16 b(\014le)g(is)g(used)h(for)f(authen)o(tication)g(and) 249 1927 y(should)d(exist)g(only)f(while)h(PVM)g(is)g(running.)k(If)c (this)g(\014le)g(is)g(left)g(b)q(ehind,)g(it)f(prev)o(en)o(ts)i(PVM)g (from)249 1981 y(starting.)k(Simply)12 b(delete)j(this)e(\014le.)291 2035 y(If)g(the)i(message)e(sa)o(ys)249 2110 y Fs([t80040000])20 b(Login)g(incorrect)249 2184 y FA(it)c(probably)f(means)g(that)h(no)f (accoun)o(t)i(is)e(on)h(the)g(remote)g(mac)o(hine)e(with)i(y)o(our)f (login)g(name.)22 b(If)249 2238 y(y)o(our)15 b(login)g(name)f(is)i (di\013eren)o(t)g(on)f(the)i(remote)e(mac)o(hine,)f(then)i(y)o(ou)g(m)o (ust)e(use)j(the)f Fs(lo=)f FA(option)249 2292 y(in)e(the)i(host\014le) f(\(see)h(Section)g(3.7\).)291 2346 y(If)h(y)o(ou)g(get)h(an)o(y)f (other)i(strange)f(messages,)g(then)g(c)o(hec)o(k)h(y)o(our)f Fs(.cshrc)e FA(\014le.)26 b(It)17 b(is)g(imp)q(ortan)o(t)249 2400 y(that)c(y)o(ou)g(not)g(ha)o(v)o(e)g(an)o(y)g(I/O)g(in)g(the)h Fs(.cshrc)e FA(\014le)h(b)q(ecause)i(this)e(will)f(in)o(terfere)j(with) d(the)i(startup)249 2454 y(of)f(PVM.)h(If)g(y)o(ou)f(wish)h(to)g(prin)o (t)g(out)g(information)d(\(suc)o(h)k(as)f(who)f(or)h(uptime\))f(when)i (y)o(ou)e(log)g(in,)249 2508 y(y)o(ou)f(should)h(do)f(it)g(in)h(y)o (our)f Fs(.login)f FA(script,)j(not)e(when)h(y)o(ou're)g(running)f(a)g (csh)i(command)c(script.)p eop %%Page: 25 44 25 43 bop 249 251 a Fu(Using)14 b(PVM)1358 b(25)249 507 y FD(3.6)52 b(Running)19 b(PVM)d(Programs)249 615 y FA(In)g(this)h (section)g(y)o(ou'll)d(learn)j(ho)o(w)f(to)g(compile)e(and)j(run)f(PVM) h(programs.)24 b(Later)17 b(c)o(hapters)h(of)249 669 y(this)f(b)q(o)q(ok)g(describ)q(e)i(ho)o(w)d(to)h(write)g(parallel)f (PVM)i(programs.)26 b(In)17 b(this)g(section)h(w)o(e)f(will)e(w)o(ork) 249 723 y(with)f(the)i(example)d(programs)h(supplied)g(with)h(the)g (PVM)g(soft)o(w)o(are.)21 b(These)16 b(example)d(programs)249 777 y(mak)o(e)f(useful)i(templates)g(on)f(whic)o(h)h(to)g(base)g(y)o (our)g(o)o(wn)g(PVM)g(programs.)291 831 y(The)g(\014rst)h(step)f(is)g (to)g(cop)o(y)g(the)g(example)f(programs)g(in)o(to)g(y)o(our)g(o)o(wn)h (area:)249 918 y Fs(\045)22 b(cp)f(-r)g($PVM_ROOT/examples)d ($HOME/pvm3/examples)249 972 y(\045)k(cd)f($HOME/pvm3/example)o(s)249 1059 y FA(The)g(examples)e(directory)h(con)o(tains)g(a)g FB(Make\014le.aimk)g FA(and)g FB(R)n(e)n(adme)h FA(\014le)f(that)g (describ)q(e)h(ho)o(w)249 1113 y(to)e(build)g(the)h(examples.)35 b(PVM)19 b(supplies)h(an)g(arc)o(hitecture-indep)q(enden)o(t)i(mak)o (e,)d Fs(aimk)p FA(,)h(that)249 1167 y(automatically)11 b(determines)k(PVM)p 821 1167 13 2 v 15 w(AR)o(CH)f(and)g(links)g(an)o (y)f(op)q(erating)i(system)f(sp)q(eci\014c)h(libraries)249 1221 y(to)e(y)o(our)f(application.)k Fs(aimk)c FA(w)o(as)h (automatically)d(added)j(to)f(y)o(our)h($P)m(A)m(TH)f(when)h(y)o(ou)f (placed)h(the)249 1275 y Fs(cshrc.stub)i FA(in)i(y)o(our)h Fs(.cshrc)e FA(\014le.)29 b(Using)17 b Fs(aimk)f FA(allo)o(ws)h(y)o(ou) g(to)g(lea)o(v)o(e)g(the)h(source)h(co)q(de)f(and)249 1329 y(mak)o(e\014le)12 b(unc)o(hanged)j(as)f(y)o(ou)f(compile)f (across)j(di\013eren)o(t)g(arc)o(hitectures.)291 1383 y(The)g(master/sla)o(v)o(e)f(programmi)o(ng)e(mo)q(del)h(is)i(the)g (most)f(p)q(opular)g(mo)q(del)f(used)j(in)e(distributed)249 1437 y(computing.)j(\(In)e(the)f(general)h(parallel)e(programmi)o(ng)e (arena,)j(the)h(SPMD)f(mo)q(del)f(is)h(more)f(p)q(op-)249 1491 y(ular.\))18 b(T)m(o)13 b(compile)f(the)j(master/sla)o(v)o(e)d(C)i (example,)e(t)o(yp)q(e)249 1578 y Fs(\045)22 b(aimk)f(master)f(slave) 249 1665 y FA(If)14 b(y)o(ou)f(prefer)i(to)f(w)o(ork)f(with)h(F)m (ortran,)f(compile)f(the)j(F)m(ortran)f(v)o(ersion)g(with)249 1753 y Fs(\045)22 b(aimk)f(fmaster)f(fslave)249 1840 y FA(Dep)q(ending)f(on)f(the)h(lo)q(cation)e(of)h(PVM)p 913 1840 V 15 w(R)o(OOT,)g(the)h Fs(INCLUDE)e FA(statemen)o(t)h(at)g (the)h(top)g(of)e(the)249 1894 y(F)m(ortran)f(examples)f(ma)o(y)f(need) j(to)f(b)q(e)h(c)o(hanged.)25 b(If)15 b(PVM)p 1211 1894 V 16 w(R)o(OOT)h(is)g(not)g(HOME/p)o(vm3,)e(then)249 1948 y(c)o(hange)g(the)g(include)f(to)h(p)q(oin)o(t)e(to)i Fs($PVM)p 899 1948 14 2 v 15 w(ROOT/include/fp)o(vm3.h)o FA(.)h(Note)f(that)g(PVM)p 1665 1948 13 2 v 15 w(R)o(OOT)f(is)249 2002 y(not)h(expanded)h(inside)e(the)i(F)m(ortran,)e(so)h(y)o(ou)f(m)o (ust)g(insert)i(the)f(actual)g(path.)291 2056 y(The)c(mak)o(e\014le)f (mo)o(v)o(es)f(the)j(executables)h(to)d Fs($HOME/pvm3/bin/PVM)p 1378 2056 14 2 v 12 w(ARCH)p FA(,)g(whic)o(h)h(is)g(the)g(default)249 2110 y(lo)q(cation)k(PVM)h(will)f(lo)q(ok)g(for)g(them)g(on)h(all)e (hosts.)22 b(If)14 b(y)o(our)h(\014le)g(system)g(is)f(not)h(common)d (across)249 2164 y(all)f(y)o(our)g(PVM)h(hosts,)g(then)h(y)o(ou)e(will) f(ha)o(v)o(e)i(to)f(build)g(or)h(cop)o(y)g(\(dep)q(ending)g(on)f(the)i (arc)o(hitectures\))249 2218 y(these)i(executables)h(on)e(all)e(y)o (our)i(PVM)g(hosts.)291 2271 y(No)o(w,)k(from)e(one)i(windo)o(w,)g (start)g(PVM)h(and)f(con\014gure)g(some)f(hosts.)31 b(These)20 b(examples)d(are)249 2325 y(designed)22 b(to)g(run)g(on)f(an)o(y)g(n)o (um)o(b)q(er)g(of)g(hosts,)i(including)e(one.)41 b(In)21 b(another)h(windo)o(w)f Fs(cd)g FA(to)249 2379 y Fs($HOME/pvm3/bin/PVM) p 647 2379 V 12 w(ARCH)13 b FA(and)h(t)o(yp)q(e)249 2467 y Fs(\045)22 b(master)p eop %%Page: 26 45 26 44 bop 249 251 a Fu(26)1375 b(Chapter)13 b(3)249 507 y FA(The)g(program)f(will)f(ask)i(ho)o(w)f(man)o(y)f(tasks.)18 b(The)c(n)o(um)o(b)q(er)e(of)g(tasks)h(do)q(es)h(not)e(ha)o(v)o(e)h(to) g(matc)o(h)e(the)249 561 y(n)o(um)o(b)q(er)i(of)h(hosts)g(in)f(these)j (examples.)h(T)m(ry)c(sev)o(eral)i(com)o(binations.)291 615 y(The)c(\014rst)h(example)e(illustrates)i(the)g(abilit)o(y)d(to)j (run)f(a)g(PVM)h(program)e(from)f(a)i(Unix)g(prompt)f(on)249 669 y(an)o(y)k(host)h(in)f(the)h(virtual)f(mac)o(hine.)19 b(This)14 b(is)h(just)g(lik)o(e)e(the)j(w)o(a)o(y)e(y)o(ou)g(w)o(ould)f (run)i(a)g(serial)f Fs(a.out)249 723 y FA(program)j(on)h(a)g(w)o (orkstation.)32 b(In)18 b(the)h(next)g(example,)f(whic)o(h)h(is)f(also) g(a)g(master/sla)o(v)o(e)g(mo)q(del)249 777 y(called)c Fs(hitc)p FA(,)f(y)o(ou)h(will)f(see)i(ho)o(w)f(to)g(spa)o(wn)h(PVM)f (jobs)g(from)f(the)i(PVM)f(console)h(and)f(also)g(from)249 831 y(XPVM.)291 885 y Fs(hitc)d FA(illustrates)i(dynamic)e(load)h (balancing)g(using)g(the)h(p)q(o)q(ol-of-tasks)f(paradigm.)k(In)c(the)i (p)q(o)q(ol)249 939 y(of)g(tasks)i(paradigm,)c(the)k(master)e(program)g (manages)f(a)i(large)g(queue)g(of)g(tasks,)g(alw)o(a)o(ys)f(sending)249 993 y(idle)e(sla)o(v)o(e)g(programs)g(more)f(w)o(ork)i(to)f(do)g(un)o (til)g(the)h(queue)h(is)e(empt)o(y)m(.)k(This)d(paradigm)d(is)j (e\013ectiv)o(e)249 1047 y(in)e(situations)h(where)h(the)f(hosts)h(ha)o (v)o(e)e(v)o(ery)h(di\013eren)o(t)h(computational)d(p)q(o)o(w)o(ers,)i (b)q(ecause)h(the)g(least)249 1101 y(loaded)g(or)h(more)e(p)q(o)o(w)o (erful)h(hosts)h(do)f(more)g(of)g(the)h(w)o(ork)f(and)g(all)f(the)i (hosts)h(sta)o(y)e(busy)h(un)o(til)e(the)249 1155 y(end)i(of)g(the)g (problem.)j(T)m(o)c(compile)f Fs(hitc)p FA(,)h(t)o(yp)q(e)249 1237 y Fs(\045)22 b(aimk)f(hitc)g(hitc_slave)291 1319 y FA(Since)13 b Fs(hitc)f FA(do)q(es)i(not)f(require)h(an)o(y)f(user)h (input,)e(it)h(can)g(b)q(e)h(spa)o(wned)f(directly)h(from)d(the)j(PVM) 249 1373 y(console.)23 b(Start)16 b(up)f(the)h(PVM)g(console)g(and)f (add)g(a)g(few)h(hosts.)23 b(A)o(t)16 b(the)g(PVM)f(console)h(prompt) 249 1427 y(t)o(yp)q(e)249 1509 y Fs(pvm>)21 b(spawn)g(->)g(hitc)249 1591 y FA(The)11 b(\\-)p Fn(>)p FA(")f(spa)o(wn)g(option)g(causes)h (all)e(the)i(prin)o(t)f(statemen)o(ts)h(in)f Fs(hitc)f FA(and)h(in)g(the)h(sla)o(v)o(es)f(to)h(app)q(ear)249 1645 y(in)k(the)g(console)h(windo)o(w.)k(This)15 b(feature)h(can)f(b)q (e)h(useful)f(when)g(debugging)g(y)o(our)g(\014rst)h(few)f(PVM)249 1699 y(programs.)j(Y)m(ou)c(ma)o(y)e(wish)j(to)f(exp)q(erimen)o(t)g (with)g(this)g(option)g(b)o(y)g(placing)g(prin)o(t)g(statemen)o(ts)g (in)249 1753 y(hitc.f)f(and)h(hitc)p 508 1753 13 2 v 15 w(sla)o(v)o(e.f)f(and)h(recompiling.)291 1807 y Fs(hitc)k FA(can)i(b)q(e)f(used)i(to)e(illustrate)g(XPVM's)h(real-time)d (animation)g(capabilities.)33 b(Start)20 b(up)249 1861 y(XPVM)d(and)g(build)e(a)i(virtual)f(mac)o(hine)f(with)h(four)g(hosts.) 27 b(Clic)o(k)16 b(on)h(the)g(\\tasks")f(button)h(and)249 1914 y(select)g(\\spa)o(wn")f(from)e(the)i(men)o(u.)23 b(T)o(yp)q(e)16 b(\\hitc")g(where)h(XPVM)f(asks)g(for)g(the)g(command,) d(and)249 1968 y(clic)o(k)h(on)f(\\start".)18 b(Y)m(ou)c(will)e(see)j (the)g(host)f(icons)g(ligh)o(t)f(up)h(as)f(the)i(mac)o(hines)e(b)q (ecome)h(busy)m(.)k(Y)m(ou)249 2022 y(will)e(see)i(the)g(hitc)p 547 2022 V 15 w(sla)o(v)o(e)e(tasks)i(get)f(spa)o(wned)h(and)f(see)h (all)e(the)i(messages)f(that)g(tra)o(v)o(el)g(b)q(et)o(w)o(een)249 2076 y(the)e(tasks)f(in)g(the)g FB(Sp)n(ac)n(e)i(Time)d FA(displa)o(y)m(.)k(Sev)o(eral)d(other)h(views)f(are)h(selectable)g (from)d(the)j(XPVM)249 2130 y(\\views")i(men)o(u.)28 b(The)17 b(\\task)h(output")f(view)g(is)g(equiv)n(alen)o(t)g(to)g(the)h (\\-)p Fn(>)p FA(")f(option)g(in)g(the)h(PVM)249 2184 y(console.)g(It)13 b(causes)i(the)e(standard)h(output)f(from)e(all)h (tasks)h(to)g(app)q(ear)g(in)g(the)h(windo)o(w)e(that)h(p)q(ops)249 2238 y(up.)291 2292 y(There)18 b(is)f(one)g(restriction)h(on)f (programs)f(that)h(are)h(spa)o(wned)g(from)d(XPVM)j(\(and)f(the)h(PVM) 249 2346 y(console\).)j(The)15 b(programs)f(m)o(ust)g(not)g(con)o(tain) h(an)o(y)f(in)o(teractiv)o(e)h(input,)g(suc)o(h)g(as)g(asking)f(for)g (ho)o(w)249 2400 y(man)o(y)e(sla)o(v)o(es)i(to)g(start)h(up)f(or)g(ho)o (w)g(big)f(a)h(problem)f(to)h(solv)o(e.)k(This)c(t)o(yp)q(e)h(of)e (information)e(can)j(b)q(e)249 2454 y(read)g(from)e(a)i(\014le)f(or)h (put)g(on)f(the)i(command)c(line)i(as)h(argumen)o(ts,)e(but)i(there)h (is)f(nothing)f(in)g(place)249 2508 y(to)h(get)g(user)h(input)f(from)e (the)i(k)o(eyb)q(oard)g(to)g(a)g(p)q(oten)o(tially)e(remote)i(task.)p eop %%Page: 27 46 27 45 bop 249 251 a Fu(Using)14 b(PVM)1358 b(27)249 507 y FD(3.7)52 b(PVM)16 b(Console)i(Details)249 615 y FA(The)d(PVM)g (console,)g(called)g Fs(pvm)p FA(,)f(is)g(a)h(stand-alone)g(PVM)g(task) g(that)f(allo)o(ws)g(the)h(user)h(to)f(in)o(ter-)249 669 y(activ)o(ely)g(start,)g(query)m(,)g(and)g(mo)q(dify)e(the)i (virtual)f(mac)o(hine.)20 b(The)c(console)f(ma)o(y)e(b)q(e)j(started)g (and)249 723 y(stopp)q(ed)d(m)o(ultiple)c(times)h(on)i(an)o(y)f(of)f (the)j(hosts)f(in)f(the)h(virtual)f(mac)o(hine)f(without)h(a\013ecting) h(PVM)249 777 y(or)i(an)o(y)f(applications)g(that)h(ma)o(y)e(b)q(e)j (running.)291 831 y(When)20 b(started,)j Fs(pvm)d FA(determines)h (whether)h(PVM)e(is)h(already)f(running;)j(if)d(it)g(is)g(not,)i Fs(pvm)249 885 y FA(automatically)11 b(executes)16 b(p)o(vmd)c(on)i (this)f(host,)h(passing)g(p)o(vmd)e(the)i(command)d(line)j(options)f (and)249 939 y(host\014le.)18 b(Th)o(us)d(PVM)f(need)h(not)f(b)q(e)g (running)g(to)f(start)i(the)f(console.)423 1026 y Fs(pvm)22 b([-n<hostname>])c([hostfile])291 1113 y FA(The)12 b(-n)f(option)h(is)f (useful)h(for)g(sp)q(ecifying)f(an)h(alternativ)o(e)g(name)e(for)i(the) g(master)f(p)o(vmd)g(\(in)g(case)249 1167 y(hostname)k(do)q(esn't)i (matc)o(h)e(the)i(IP)f(address)i(y)o(ou)e(w)o(an)o(t\).)24 b(Once)18 b(PVM)e(is)g(started,)i(the)f(console)249 1221 y(prin)o(ts)d(the)h(prompt)249 1308 y Fs(pvm>)249 1396 y FA(and)f(accepts)h(commands)d(from)g(standard)i(input.)k(The)c(a)o(v) n(ailable)e(commands)g(are)249 1462 y Fr(add)20 b FA(follo)o(w)o(ed)12 b(b)o(y)i(one)g(or)g(more)f(host)h(names,)f(adds)h(these)h(hosts)g(to)e (the)i(virtual)e(mac)o(hine.)249 1533 y Fr(alias)20 b FA(de\014nes)15 b(or)f(lists)g(command)d(aliases.)249 1603 y Fr(conf)20 b FA(lists)c(the)g(con\014guration)f(of)g(the)i (virtual)e(mac)o(hine)f(including)h(hostname,)g(p)o(vmd)f(task)i(ID,) 249 1657 y(arc)o(hitecture)g(t)o(yp)q(e,)e(and)f(a)h(relativ)o(e)g(sp)q (eed)h(rating.)249 1728 y Fr(delete)k FA(follo)o(w)o(ed)9 b(b)o(y)h(one)h(or)f(more)g(host)h(names,)f(deletes)i(these)g(hosts)f (from)e(the)i(virtual)f(mac)o(hine.)249 1782 y(PVM)k(pro)q(cesses)j (still)c(running)g(on)h(these)h(hosts)g(are)f(lost.)249 1852 y Fr(ec)o(ho)20 b FA(ec)o(ho)14 b(argumen)o(ts.)249 1923 y Fr(halt)19 b FA(kills)12 b(all)f(PVM)h(pro)q(cesses)j(including) d(console,)g(and)g(then)h(sh)o(uts)g(do)o(wn)f(PVM.)h(All)e(daemons)249 1977 y(exit.)249 2047 y Fr(help)19 b FA(can)14 b(b)q(e)g(used)h(to)e (get)h(information)d(ab)q(out)i(an)o(y)g(of)g(the)i(in)o(teractiv)o(e)f (commands.)h(Help)f(ma)o(y)249 2101 y(b)q(e)g(follo)o(w)o(ed)d(b)o(y)i (a)f(command)e(name)i(that)h(lists)g(options)f(and)h(\015ags)g(a)o(v)n (ailable)e(for)h(this)h(command.)249 2172 y Fr(id)20 b FA(prin)o(ts)14 b(the)g(console)g(task)g(id.)249 2242 y Fr(jobs)20 b FA(lists)13 b(running)h(jobs.)249 2313 y Fr(kill)19 b FA(can)14 b(b)q(e)g(used)h(to)f(terminate)f(an)o(y)h (PVM)g(pro)q(cess.)249 2384 y Fr(mstat)20 b FA(sho)o(ws)14 b(the)g(status)h(of)e(sp)q(eci\014ed)j(hosts.)249 2454 y Fr(ps)f(-a)21 b FA(lists)13 b(all)e(pro)q(cesses)16 b(curren)o(tly)d(on)g(the)g(virtual)f(mac)o(hine,)f(their)i(lo)q (cations,)f(their)h(task)g(id's,)249 2508 y(and)h(their)g(paren)o(ts')g (task)g(id's.)p eop %%Page: 28 47 28 46 bop 249 251 a Fu(28)1375 b(Chapter)13 b(3)249 507 y Fr(pstat)20 b FA(sho)o(ws)14 b(the)g(status)h(of)e(a)h(single)f(PVM)i (pro)q(cess.)249 576 y Fr(quit)k FA(exits)c(the)f(console,)g(lea)o (ving)f(daemons)f(and)i(PVM)g(jobs)g(running.)249 644 y Fr(reset)20 b FA(kills)c(all)f(PVM)j(pro)q(cesses)i(except)e (consoles,)g(and)f(resets)i(all)d(the)i(in)o(ternal)e(PVM)i(tables)249 698 y(and)c(message)f(queues.)20 b(The)14 b(daemons)f(are)h(left)g(in)f (an)h(idle)f(state.)249 766 y Fr(seten)o(v)19 b FA(displa)o(ys)14 b(or)f(sets)j(en)o(vironmen)o(t)c(v)n(ariables.)249 834 y Fr(sig)20 b FA(follo)o(w)o(ed)12 b(b)o(y)i(a)f(signal)g(n)o(um)o(b)q (er)g(and)h(TID,)f(sends)i(the)g(signal)e(to)g(the)i(task.)249 902 y Fr(spa)o(wn)20 b FA(starts)15 b(a)f(PVM)g(application.)i(Options) e(include)g(the)h(follo)o(wing:)249 979 y Fr(-coun)o(t)k FA(n)o(um)o(b)q(er)13 b(of)h(tasks;)f(default)h(is)g(1.)249 1047 y Fr(-host)20 b FA(spa)o(wn)13 b(on)h(host;)g(default)f(is)h(an)o (y)m(.)249 1116 y Fr(-AR)o(CH)21 b FA(spa)o(wn)14 b(of)f(hosts)i(of)e (t)o(yp)q(e)i(AR)o(CH.)249 1184 y Fr(-?)20 b FA(enable)14 b(debugging.)249 1252 y Fr(-)p Fn(>)21 b FA(redirect)15 b(task)f(output)h(to)e(console.)249 1320 y Fr(-)p Fn(>)p Fr(\014le)20 b FA(redirect)15 b(task)f(output)g(to)g(\014le.)249 1389 y Fr(-)p Fn(>>)p Fr(\014le)20 b FA(redirect)15 b(task)f(output)g (app)q(end)h(to)f(\014le.)249 1457 y Fr(-@)21 b FA(trace)15 b(job,)e(displa)o(y)g(output)h(on)f(console)249 1525 y Fr(-@\014le)20 b FA(trace)14 b(job,)f(output)h(to)g(\014le)249 1602 y Fr(trace)20 b FA(sets)c(or)d(displa)o(ys)h(the)g(trace)h(ev)o (en)o(t)g(mask.)249 1670 y Fr(unalias)k FA(unde\014nes)c(command)c (alias.)249 1738 y Fr(v)o(ersion)19 b FA(prin)o(ts)14 b(v)o(ersion)g(of)f(PVM)h(b)q(eing)g(used.)291 1803 y(The)i(console)g (reads)h Fs($HOME/.pvmrc)d FA(b)q(efore)i(reading)g(commands)e(from)g (the)j(tt)o(y)m(,)e(so)h(y)o(ou)g(can)249 1857 y(do)e(things)f(lik)o(e) 336 1940 y Fs(alias)21 b(?)h(help)336 1994 y(alias)f(h)h(help)336 2048 y(alias)f(j)h(jobs)336 2102 y(setenv)f(PVM_EXPORT)f(DISPLAY)336 2156 y(#)i(print)f(my)g(id)336 2210 y(echo)g(new)g(pvm)h(shell)336 2264 y(id)249 2346 y FA(PVM)16 b(supp)q(orts)g(the)g(use)g(of)f(m)o (ultiple)d(consoles.)23 b(It)15 b(is)h(p)q(ossible)f(to)g(run)h(a)e (console)i(on)f(an)o(y)g(host)249 2400 y(in)i(an)g(existing)g(virtual)f (mac)o(hine)g(and)i(ev)o(en)f(m)o(ultiple)e(consoles)j(on)g(the)f(same) g(mac)o(hine.)27 b(It)17 b(is)249 2454 y(also)d(p)q(ossible)g(to)h (start)g(up)f(a)g(console)h(in)f(the)h(middle)e(of)g(a)h(PVM)h (application)e(and)i(c)o(hec)o(k)g(on)f(its)249 2508 y(progress.)p eop %%Page: 29 48 29 47 bop 249 251 a Fu(Using)14 b(PVM)1358 b(29)249 507 y FD(3.8)52 b(Host)18 b(File)g(Options)249 615 y FA(As)13 b(w)o(e)g(stated)h(earlier,)e(only)g(one)h(p)q(erson)h(at)e(a)h(site)g (needs)h(to)f(install)e(PVM,)i(but)g(eac)o(h)g(PVM)g(user)249 669 y(can)h(ha)o(v)o(e)g(his)g(o)o(wn)f(host\014le,)h(whic)o(h)g (describ)q(es)i(his)d(o)o(wn)h(p)q(ersonal)g(virtual)f(mac)o(hine.)291 723 y(The)f FB(host\014le)g FA(de\014nes)h(the)g(initial)d (con\014guration)h(of)g(hosts)i(that)f(PVM)g(com)o(bines)f(in)o(to)g(a) h(virtual)249 777 y(mac)o(hine.)32 b(It)19 b(also)f(con)o(tains)h (information)d(ab)q(out)j(hosts)h(that)f(y)o(ou)f(ma)o(y)f(wish)i(to)g (add)g(to)f(the)249 831 y(con\014guration)c(later.)291 885 y(The)20 b(host\014le)h(in)f(its)g(simplest)g(form)e(is)i(just)h(a) f(list)g(of)g(hostnames)g(one)g(to)g(a)g(line.)37 b(Blank)249 939 y(lines)15 b(are)h(ignored,)f(and)g(lines)g(that)g(b)q(egin)g(with) g(a)g(#)f(are)i(commen)o(t)d(lines.)22 b(This)15 b(allo)o(ws)f(y)o(ou)g (to)249 993 y(do)q(cumen)o(t)f(the)h(host\014le)g(and)g(also)f(pro)o (vides)g(a)h(handy)f(w)o(a)o(y)g(to)g(mo)q(dify)f(the)i(initial)d (con\014guration)249 1047 y(b)o(y)j(commen)o(ting)d(out)j(v)n(arious)f (hostnames)g(\(see)i(Figure)f(3.2\).)291 1101 y(Sev)o(eral)19 b(options)f(can)h(b)q(e)h(sp)q(eci\014ed)g(on)f(eac)o(h)g(line)g(after) g(the)h(hostname.)32 b(The)19 b(options)g(are)249 1155 y(separated)c(b)o(y)f(white)g(space.)249 1221 y Fr(lo=)h(userid)k FA(allo)o(ws)9 b(y)o(ou)i(to)f(sp)q(ecify)i(an)e(alternativ)o(e)h (login)f(name)f(for)i(this)g(host;)g(otherwise,)h(y)o(our)249 1275 y(login)h(name)f(on)i(the)g(start-up)h(mac)o(hine)d(is)i(used.)249 1346 y Fr(so=p)o(w)20 b FA(will)11 b(cause)i(PVM)g(to)e(prompt)g(y)o (ou)h(for)g(a)f(passw)o(ord)i(on)f(this)g(host.)18 b(This)12 b(is)g(useful)g(in)f(the)249 1400 y(cases)j(where)f(y)o(ou)f(ha)o(v)o (e)f(a)h(di\013eren)o(t)h(userid)g(and)f(passw)o(ord)h(on)f(a)g(remote) f(system.)18 b(PVM)12 b(uses)h(rsh)249 1454 y(b)o(y)j(default)g(to)g (start)h(up)f(remote)g(p)o(vmd's,)e(but)j(when)f(p)o(w)g(is)g(sp)q (eci\014ed,)i(PVM)f(will)d(use)j(rexec\(\))249 1508 y(instead.)249 1578 y Fr(dx=)f(lo)q(cation)e(of)h(p)o(vmd)20 b FA(allo)o(ws)11 b(y)o(ou)h(to)h(sp)q(ecify)g(a)f(lo)q(cation)g(other)h(than)g(the)g (default)g(for)f(this)249 1632 y(host.)18 b(This)c(is)g(useful)g(if)f (y)o(ou)g(w)o(an)o(t)h(to)g(use)g(y)o(our)g(o)o(wn)f(p)q(ersonal)i(cop) o(y)f(of)f(p)o(vmd,)249 1703 y Fr(ep=)j(paths)e(to)h(user)g (executables)k FA(allo)o(ws)10 b(y)o(ou)h(to)g(sp)q(ecify)g(a)g(series) i(of)d(paths)i(to)f(searc)o(h)h(do)o(wn)249 1757 y(to)f(\014nd)h(the)g (requested)i(\014les)d(to)h(spa)o(wn)f(on)g(this)h(host.)17 b(Multiple)11 b(paths)h(are)g(separated)h(b)o(y)e(a)g(colon.)249 1811 y(If)g Fs(ep=)g FA(is)h(not)f(sp)q(eci\014ed,)j(then)e(PVM)g(lo)q (oks)f(in)g Fs($HOME/pvm3/bin/PVM)p 1403 1811 14 2 v 12 w(ARCH)g FA(for)g(the)h(application)249 1865 y(tasks.)249 1935 y Fr(sp=)j(v)m(alue)21 b FA(sp)q(eci\014es)16 b(the)g(relativ)o(e) f(computational)e(sp)q(eed)j(of)e(the)i(host)f(compared)g(with)f(other) 249 1989 y(hosts)g(in)f(the)g(con\014guration.)18 b(The)13 b(range)h(of)e(p)q(ossible)h(v)n(alues)g(is)g(1)g(to)g(1000000)e(with)i (1000)f(as)h(the)249 2043 y(default.)249 2114 y Fr(b)o(x=)i(lo)q (cation)g(of)g(debugger)j FA(sp)q(eci\014es)i(whic)o(h)f(debugger)g (script)g(to)f(in)o(v)o(ok)o(e)f(on)h(this)g(host)h(if)249 2168 y(debugging)13 b(is)h(requested)i(in)e(the)g(spa)o(wn)g(routine.) 249 2222 y Fr(Note:)23 b FA(The)17 b(en)o(vironmen)o(t)e(v)n(ariable)g (PVM)p 973 2222 13 2 v 16 w(DEBUGGER)g(can)i(also)e(b)q(e)i(set.)26 b(The)17 b(default)f(de-)249 2276 y(bugger)e(is)g Fs(pvm3/lib/debugger) o FA(.)249 2346 y Fr(wd=)i(w)o(orking)p 533 2346 15 2 v 16 w(directory)i FA(sp)q(eci\014es)g(a)d(w)o(orking)g(directory)i(in) e(whic)o(h)g(all)g(spa)o(wned)h(tasks)g(on)249 2400 y(this)e(host)g (will)f(execute.)19 b(The)c(default)e(is)h Fs($HOME)p FA(.)249 2471 y Fr(ip=)h(hostname)k FA(sp)q(eci\014es)d(an)d(alternate) i(name)d(to)i(resolv)o(e)g(to)g(the)h(host)f(IP)g(address.)p eop %%Page: 30 49 30 48 bop 249 251 a Fu(30)1375 b(Chapter)13 b(3)249 507 y Fr(so=ms)20 b FA(sp)q(eci\014es)15 b(that)f(a)f(sla)o(v)o(e)f(p)o (vmd)g(will)g(b)q(e)i(started)g(man)o(ually)c(on)j(this)h(host.)k(This) 13 b(is)g(useful)249 561 y(if)j(rsh)h(and)g(rexec)h(net)o(w)o(ork)f (services)i(are)e(disabled)g(but)g(IP)g(connectivit)o(y)g(exists.)27 b(When)17 b(using)249 615 y(this)d(option)f(y)o(ou)h(will)e(see)j(in)f (the)g(tt)o(y)g(of)f(the)i(p)o(vmd3)423 690 y Fs([t80040000])20 b(ready)64 b(Fri)21 b(Aug)h(27)f(18:47:47)f(1993)423 744 y(***)i(Manual)e(startup)g(***)423 798 y(Login)h(to)h("honk")e(and) h(type:)423 852 y(pvm3/lib/pvmd)f(-S)h(-d0)g(-nhonk)g(1)g (80a9ca95:0cb6)e(4096)i(2)h(80a95c43:0000)423 906 y(Type)f(response:) 249 981 y FA(On)14 b(honk,)f(after)i(t)o(yping)e(the)h(giv)o(en)g (line,)f(y)o(ou)g(should)h(see)423 1055 y Fs(ddpro<2312>)20 b(arch<ALPHA>)f(ip<80a95c43:0a8e>)g(mtu<4096>)249 1130 y FA(whic)o(h)14 b(y)o(ou)f(should)h(rela)o(y)g(bac)o(k)f(to)h(the)h (master)e(p)o(vmd.)j(A)o(t)e(that)g(p)q(oin)o(t,)f(y)o(ou)h(will)e(see) 423 1205 y Fs(Thanks)249 1279 y FA(and)i(the)g(t)o(w)o(o)g(p)o(vmds)e (should)i(b)q(e)h(able)e(to)h(comm)o(unicate.)291 1346 y(If)h(y)o(ou)g(w)o(an)o(t)g(to)h(set)h(an)o(y)e(of)g(the)h(ab)q(o)o(v) o(e)g(options)f(as)h(defaults)f(for)h(a)f(series)i(of)e(hosts,)i(y)o (ou)e(can)249 1400 y(place)f(these)h(options)e(on)h(a)f(single)g(line)g (with)h(a)f(*)g(for)h(the)g(hostname)f(\014eld.)18 b(The)c(defaults)f (will)f(b)q(e)249 1454 y(in)h(e\013ect)i(for)d(all)g(the)i(follo)o (wing)d(hosts)i(un)o(til)g(they)g(are)h(o)o(v)o(erridden)g(b)o(y)e (another)i(set-defaults)g(line.)291 1508 y(Hosts)c(that)g(y)o(ou)f (don't)h(w)o(an)o(t)f(in)g(the)i(initial)c(con\014guration)j(but)g(ma)o (y)e(add)h(later)h(can)g(b)q(e)g(sp)q(eci\014ed)249 1562 y(in)k(the)h(host\014le)g(b)o(y)f(b)q(eginning)f(those)i(lines)g(with)f (an)g(&.)19 b(An)c(example)e(host\014le)i(displa)o(ying)d(most)249 1616 y(of)h(these)j(options)d(is)h(sho)o(wn)g(in)f(Figure)h(3.3.)p eop %%Page: 31 50 31 49 bop 249 251 a Fu(Using)14 b(PVM)1358 b(31)249 538 y 18945146 18945146 0 0 33285570 39271710 startTexFig 249 538 a %%BeginDocument: fig3-xpvm2.ps /bitdump % stk: width, height, iscale % dump a bit image with lower left corner at current origin, % scaling by iscale (iscale=1 means 1/300 inch per pixel) { % read arguments /iscale exch def /height exch def /width exch def % scale appropriately width iscale mul height iscale mul scale % allocate space for one scanline of input /picstr % picstr holds one scan line width 7 add 8 idiv % width of image in bytes = ceiling(width/8) string def % read and dump the image width height 1 [width 0 0 height neg 0 height] { currentfile picstr readhexstring pop } image } def 72 300 div dup scale 219 405 translate 704 830 3 bitdump 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffc 3800ffffffffff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff001c 3bfeffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff76dc 3bfeffffffffff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff76dc 3b8effffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff76dc 3b06ff74374bff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff06dc 3b06ffadd755ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff7edc 3b06ffddd755ff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff7edc 3b8effdddad5ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff00dc 3bfeffac3ad5ff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff7fdc 3bfeff75fdddffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff7fdc 3800fffdffffff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff001c 3ffffffdffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffcf3e07cf3e7cffe7f867e1fff302793e7e1fc3f867e1c39ffe00260ff0fff9870e1c31ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffcf3e73cf3e7cff87f327ccffe738793e7ccf99f327cc99cffe79e667e67ff13264c999ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffe67e73e67e38ffe7f324ccffe739331c7fcff9f324ccf9cffe79e673e64ce93264cf99ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffffffffffffffffffffffffffffffffffffff0fe73e67e38ffe7f3224cffcf39331c7f1fe3f3224ce3e7fe79e673e64ce93264cf39ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffffffffffffffffffffffffffffffffffffff9fe07e67e10ffe7f3264cffcf0333087fcff9f3264cf9e7fe79e673e661d93264ce79ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffffffffffffffffffffffffffffffffffffff0fe7ff6fe54ffe7f3264cffcf3fb72a7fcff9f3264cf9e7fe79e673e673b93264ccf9ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffe67e7ff0fe44ffe7f3264cffcf3f87227fcff9f3264cf9e7fe79e673e661803264c9f9ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffcf3e7ff9fe6cffe793224cffcf3fcf367ccc9993224c99e7fe79e667e64cf93264c9f9ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffcf3e7ff9fe6cffe79864e1ffcf3fcf367e1cc39864e1c3e7fe79e60ff0ccf9870e1819ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffcffe7ffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffcffe7ffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffff9ffe3ffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fff333f9fffffffff9fff3c813c9f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fff333f9fffffffff9fff3c9c3c9f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fff33219870d11c3f0c3f999c998e3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffb34c93264cc99f999fc39c998e3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fff924c93e64cc99f999fe78199843ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fff924093e64cc81f999fc39fdb953ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffcccf93e64cc9ff999f999fc3913ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffcccc93264cc99f919f3c9fe79b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffcce19870cccc3fcc3f3c9fe79b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffaaaaaaaaaaffffffffffffffffd5555555555fffffffffffffffeaaaaaaaaaaffffffffffffffff55555555ffffffffffffffffffaaaaaaabffffffffffffffffffd55555557fffffffffffffffffc 3fffffffffffffffff55555555557fffffffffffffffaaaaaaaaaaafffffffffffffffd5555555554fffffffffffffffeaaaaaaa9ffffffffffffffffff55555555ffffffffffffffffffaaaaaaaa7fffffffffffffffffc 3fffffffffffffffffbffffffffe7fffffffffffffffdfffffffffcfffffffffffffffefffffffffcffffffffffffffff7ffffff9ffffffffffffffffffbffffff9ffffffffffffffffffdffffffe7fffffffffffffffffc 3fffffffffffffffff7ffffffffe7fffffffffffffffbfffffffffcfffffffffffffffdfffffffffcfffffffffffffffefffffff9ffffffffffffffffff7ffffff9ffffffffffffffffffbffffffe7fffffffffffffffffc 3fffffffffffffffffbffffffffe7fffffffffffffffdfffffffffcfffffffffffffffefffffffffcffffffffffffffff7ffffff9ffffffffffffffffffbffffff9ffffffffffffffffffdffffffe7fffffffffffffffffc 3fffffffffffffffff673fffcffe7fffffffffffffffb00fffcfffcfffffffffffffffd81fffffe7cfffffffffffffffef0ffccf9ffffffffffffffffff673fccf9ffffffffffffffffffb39fe7fe7fffffffffffffffffc 3fffffffffffffffffa73fffcffe7fffffffffffffffde7fffcfffcfffffffffffffffe9cfffffe7cffffffffffffffff667ffcf9ffffffffffffffffffa73fccf9ffffffffffffffffffd39fe7fe7fffffffffffffffffc 3fffffffffffffffff6730e1861e7fffffffffffffffbe7870ccc3cfffffffffffffffd9cc3870c3cfffffffffffffffecf264879ffffffffffffffffff6730c879ffffffffffffffffffb398649e7fffffffffffffffffc 3fffffffffffffffffa7264cccce7fffffffffffffffde73264999cfffffffffffffffe9c9932667cffffffffffffffff4f264cf9ffffffffffffffffffa7264cf9ffffffffffffffffffd393244e7fffffffffffffffffc 3fffffffffffffffff602647cc7e7fffffffffffffffbe7f23c38fcfffffffffffffffd81991e667cfffffffffffffffecf264cf9ffffffffffffffffff603e4cf9ffffffffffffffffffb01324ce7fffffffffffffffffc 3fffffffffffffffffa72671cf1e7fffffffffffffffde7838c3e3cfffffffffffffffe9981c6067cffffffffffffffff4d264cf9ffffffffffffffffffa7304cf9ffffffffffffffffffd39024ce7fffffffffffffffffc 3fffffffffffffffff672678cf8e7fffffffffffffffbe733c49f1cfffffffffffffffd9c9fe27e7cfffffffffffffffecc264cf9ffffffffffffffffff67264cf9ffffffffffffffffffb393e4ce7fffffffffffffffffc 3fffffffffffffffffa7264cc8ce7fffffffffffffffde73264c99cfffffffffffffffe9c9932665cffffffffffffffff66644cb9ffffffffffffffffffa7264cb9ffffffffffffffffffd393244e7fffffffffffffffffc 3fffffffffffffffff6730e1e61e7fffffffffffffffbe7890ce43cfffffffffffffffd9cc3870f3cfffffffffffffffef0324e79ffffffffffffffffff67310e79ffffffffffffffffffb398649e7fffffffffffffffffc 3fffffffffffffffffbffffffffe7fffffffffffffffdfffffffffcfffffffffffffffefffffffffcffffffffffffffff7ffffff9ffffffffffffffffffbffffff9ffffffffffffffffffdffffcfe7fffffffffffffffffc 3fffffffffffffffff7ffffffffe7fffffffffffffffbfffffffffcfffffffffffffffdfffffffffcfffffffffffffffefffffff9ffffffffffffffffff7ffffff9ffffffffffffffffffbffffcfe7fffffffffffffffffc 3fffffffffffffffffbffffffffe7fffffffffffffffdfffffffffcfffffffffffffffefffffffffcffffffffffffffff7ffffff9ffffffffffffffffffbffffff9ffffffffffffffffffdffffcfe7fffffffffffffffffc 3fffffffffffffffff7ffffffffe7fffffffffffffffbfffffffffcfffffffffffffffdfffffffffcfffffffffffffffefffffff9ffffffffffffffffff7ffffff9ffffffffffffffffffbffffffe7fffffffffffffffffc 3fffffffffffffffffbffffffffe7fffffffffffffffdfffffffffcfffffffffffffffefffffffffcffffffffffffffff7ffffff9ffffffffffffffffffbffffff9ffffffffffffffffffdffffffe7fffffffffffffffffc 3fffffffffffffffff7ffffffffe7fffffffffffffffbfffffffffcfffffffffffffffdfffffffffcfffffffffffffffefffffff9ffffffffffffffffff7ffffff9ffffffffffffffffffbffffffe7fffffffffffffffffc 3fffffffffffffffff80000000007fffffffffffffffc0000000000fffffffffffffffe0000000000ffffffffffffffff00000001ffffffffffffffffff80000001ffffffffffffffffffc00000007fffffffffffffffffc 3fffffffffffffffff00000000007fffffffffffffff80000000000fffffffffffffffc0000000000fffffffffffffffe00000001ffffffffffffffffff00000001ffffffffffffffffff800000007fffffffffffffffffc 3fffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff55555555555555555555554ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbfffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff7fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbaaaaaaaaaaaaaaaaaaaaacffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbffffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbf9fcf9fe727e73fffcffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff770fcf9fc327e73fffcffecffffffffffffffffffffffffffffffff9cff9ffffff3fe787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbf6e4c9fdb27e730e1861ecffffffffffffffffffffffffffffffff8cff9ffffff3fe79ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff7664891f9927e7264ccccecffffffffffffffffffffffffffffffff8cc3099986433f3261999fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbe64c99f9927e02647cc7ecffffffffffffffffffffffffffffffff9499999932027f324c999fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff7604c99f8127e72671cf1ecffffffffffffffffffffffffffffffff94999c933230ff324cc93fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbcf0c99f3c27e72678cf8ecffffffffffffffffffffffffffffffff98819c933270ffb640c93fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff74f0891f3c27e7264cc8cecffffffffffffffffffffffffffffffff989f9c9332727f864fc93fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbcf24c9f3c27e730e1e61ecffffffffffffffffffffffffffffffff9c99966732733fce4ce67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77fffffffffffffffffffecffffffffffffffffffffffffffffffff9cc3ce6786739fce61e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbffffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbffffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbffffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff0000000000000007000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffc 3ff000010000000000bfffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffc 3ff3fdfe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fcfd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3f8fe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3f47d3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ea7e3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3f73d3fffffffffbc007f3e7f9f3fe1fffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ef3e3fffffffff74007f3fff9f3fccfffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3df9d3fffffffffbc00ff266493264cfffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3bf9e3fffffffff74007f124889264cfffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fcd3fffffffffbc00ff324c99264cfffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3bfce3fffffffff74007f324c99264cfffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbc00ff324c99264cfffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff200063fffffffff74007f124889244cfffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff000013fffffffffbc00ff2664933261fffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007ffffcfffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaaffffccfffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77ffffffe1fffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007fff3ff3fffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7fffffc3fffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff3930f3fffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f392673fffffffffecfffffffffffffffffffffffff00000000000000000ffc00000000000000003ff00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff9323f3fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f9338f3fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffffc73c73fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffe000000000001fbff7ff8000000000007effffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7fc72673fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffdfffffffffffafbff7ff7ffffffffffebeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffffef30f3fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffbfffffffffff6fbff7fefffffffffffdbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7ffffffffffffffffecfffffffffffffffffffffffff7ffe0200f07f07ffeffdff000000000000efbff7fc000000000003beffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaafffffffffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdfe7ffffffffffe6fbff7f9fffffffffff9beffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7ffe0200303e07ffeffdfeffffffffffff6fbff7fbfffffffffffdbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdfeffffffffffff6fbff7fbfffffffffffdbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fff8f8e1c1c1fffeffdfef0000000000f6fbff7fbc0000000003dbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdfee7ffffffcfe76fbff7fb9fffffff3f9dbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffff7fff8f803c081fffeffdfeefffffff8ff76fbff7fbbffffffe3fddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffff7fffffffffffffffeffdfeefffffff1ff76fbff7fbbffffffc7fddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffff7fff8f803c411fffeffdfeeffffffe3ff76fbff7fbbffffff8ffddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffff7fffffffffffffffeffdfeeffffffe3ff76fbff7fbbffffff8ffddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fff8f8e1c631fffeffdfeefffffc71ff76fbff7fbbfffff1c7fddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdfeefffff838ff76fbff7fbbffffe0e3fddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7ffe0200307707ffeffdfeefffff11c7f76fbff7fbbffffc471fddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007fff3fe1fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdfeeffffe38e3976fbff7fbbffff8e38e5dbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7fffffccfffffffffecfffffffffffffffffffffffff7ffe0200f07f07ffeffdfeefffff1cf1176fbff7fbbffffc73c45dbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff3930fcfffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdfeefffef8cf8376fbff7fbbfffbe33e0ddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f392679fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdfeefffc3c47c776fbff7fbbfff0f11f1ddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff9323f3fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdfeefffe0e01ff76fbff7fbbfff83807fddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f9338e7fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdfeefffe03187f76fbff7fbbfff80c61fddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffffc73c4ffffffffffecfffffffffffffffffffffffff7fffff000000ffffeffdfeeffc7318e7f76fbff7fbbff1cc639fddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7fc7264ffffffffffecfffffffffffffffffffffffff7ffff8ffffe2ffffeffdfeeff8338c7ff76fbff7fbbfe0ce31ffddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffffef30c0fffffffffecfffffffffffffffffffffffff7fffc7ffff14ffffeffdfeeff119863ff76fbff7fbbfc46618ffddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7ffffffffffffffffecfffffffffffffffffffffffff7ffe3ffffcaaffffeffdfeefe388233ff76fbff7fbbf8e208cffddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaafffffffffffffffffecfffffffffffffffffffffffff7ff9ffffe154fe1feffdfeeff1cc71fff76fbff7fbbfc731c7ffddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fe000000aaafeefeffdfeef189e3bfff76fbff7fbbc6278efffddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fefffffd554feefeffdfeee1c3f1ffff76fbff7fbb870fc7fffddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7feffc00caaafe1feffdfeec7e3f8ffff76fbff7fbb1f8fe3fffddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7feffcfed554febfeffdfeecff1fdffff76fbff7fbb3fc7f7fffddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffff7feffcfecaaafedfeffdfeec038ffffff76fbff7fbb00e3fffffddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffff7fe80400d554feefeffdfeee01c7fffff76fbff7fbb8071fffffddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffff7fe804fecaaaffffeffdfeeff8e3fffff76fbff7fbbfe38fffffddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffff7feffcfed554ff1feffdfeeffcf7fffff76fbff7fbbff3dfffffddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fe80400caaafeefeffdfeefdcfffffff76fbff7fbbf73ffffffddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fe804fed554feffeffdfeefc8fffffff76fbff7fbbf23ffffffddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7feffcfecaaaff1feffdfeefc1fffffff76fbff7fbbf07ffffffddbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007fffffff9ffffffffecfffffffffffffffffffffffff7fe80400d554ffefeffdfeefe3fffffff76fbff7fbbf8fffffffddbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7fffffff1ffffffffecfffffffffffffffffffffffff7fe80482caaafeefeffdfee7ffffffffe76fbff7fb9fffffffff9dbeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff86649e9ffffffffecfffffffffffffffffffffffff7feffcf6d554ff1feffdfef0000000000f6fbff7fbc0000000003dbeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f32644e9ffffffffecfffffffffffffffffffffffff7fe80400caaaffffeffdfeffffffffffff5fbff7fbfffffffffffd7effffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff1e64cd9ffffffffecfffffffffffffffffffffffff7fe804ead554ff1feffdfeffffffffffff3fbff7fbfffffffffffcfeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7fc664cb9ffffffffecfffffffffffffffffffffffff7feffdaacaaafeefeffdfe7ffffffffffe7fbff7f9fffffffffff9feffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffffe264c80ffffffffecfffffffffffffffffffffffff7feffc00d554feffeffdff000000000000ffbff7fc000000000003feffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f3244cf9ffffffffecfffffffffffffffffffffffff7feffcb2caaafe1feffdfffff7fffff7ffffbff7ffffdfffffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff8724cf9ffffffffecfffffffffffffffffffffffff7feffdb2d554feefeffdfffffbffffefffffbff7ffffefffffbffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7ffffffffffffffffecfffffffffffffffffffffffff7feffc00caaafeefeffdf00005ffffd00000bff7c00017ffff400002ffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaafffffffffffffffffecfffffffffffffffffffffffff7feffcfed554ff1feffdeffffe00003fffffbff7bffff80000fffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7feffcfecaaaffffeffddffffffffffffffebff77ffffffffffffffaffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7feffcfed554feefeffd8000000000000001bff60000000000000006ffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7feffcfecaaafedfeffdbffffffffffffffdbff6fffffffffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7feffc00d554febfeffdbbffcccccccccccdbff6efff333333333336ffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffff7feffcfecaaafe7feffdb580cccccccccccdbff6d603333333333336ffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffff7feffd9ed554febfeffdae80fffffffffffdbff6ba03fffffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffff7feffdfecaaafedfeffdb5ffb33333333331bff6d7feccccccccccc6ffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffff7feffc00d554feefeffdbbff333333333331bff6effcccccccccccc6ffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fefffffcaa3ffffeffdbffffffffffffffdbff6fffffffffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fefffffd51fffffeffd8ccccccccccccccdbff63333333333333336ffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fefffffc8ffffffeffd8ccccccccccccccdbff63333333333333336ffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007ffffffffffffffffecfffffffffffffffffffffffff7fe0000003ffffffeffdbffffffffffffffcbff6fffffffffffffff2ffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007ffffffffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffd8000000000000001bff60000000000000006ffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff4470c9fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f332641fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff3323c7fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f3338cffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff333c4ffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f33264ffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff3330cffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007ffffffffffffffffecfffffffffffffffffffffffff7ffe7cff3e7fc3ffeffdfffcffffffffffffbff7fffffe7fff3ffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaafffffffffffffffffecfffffffffffffffffffffffff7ffe7fff3e7f99ffeffdffffffffffffffffbff7ffffffffff3ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7ffe4cc9264c99ffeffdfffcc3864330ffffbff7ffffc864c33ffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7ffe2491124c99ffeffdfffc993203267fffbff7ffffc048993ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7ffe6499324c99ffeffdfffc9ff23323ffffbff7ffffc64c993ffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7ffe6499324c99ffeffdfffc9f827338ffffbff7ffffce4c813ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffff7ffe6499324c99ffeffdfffc9f32733c7fffbff7ffffce4c9f3ffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffff7ffe2491124899ffeffdfffc993272267fffbff7ffffce48993ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffff7ffe4cc92664c3ffeffdfffcc3887930ffffbff7ffffce64c33ffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffff7ffffff9ffffffffeffdffffffffffffffffbff7fffffffcfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fffff99ffffffffeffdffffffffffffffffbff7ffffffccfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fffffc3ffffffffeffdffffffffffffffffbff7ffffffe1fffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007f3ffffffffffffffecfffffffffffffffffffffffff00000000000000000ffc00000000000000003ff00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007ffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff30e190cc3ffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f264c80c99ffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff27fc8cc8fffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f27e09cce3ffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff27cc9ccf1ffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f264c9c899ffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff30e21e4c3ffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007ffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaafffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2aaae3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff355553fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff7000000000000000000000cfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbc007fffffffcffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff75ff7fffffffcffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbdffff864e190c9cfffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff75ff7f3224c8099cfffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbdffff1e67c8c3c9fffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff75ff7fc66609c3c9fffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbdffffe264c9c9e3fffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff75ff7f3224c9cce3fffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbdffff864e21ce73fffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff75ff7ffe7ffffff7fffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbcaafffe7fffffe7fffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff77fffffe7fffffcffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffc000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff7000000000000000000000cfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbc007ffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63fffffffff74007ffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff300053fffffffffbc00ff86730c9ffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff200063fffffffff74007f3272644ffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff3f27e4cffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f3f2704cffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff3f8e64cffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f338e64cffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff87cf10cffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007fffdffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaaffff9ffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77ffffff3ffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007ff9fffcfffffffffecfffffffffffffffffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007ffffffcfffffffffecfffffffffffffffffffffffff00000000000000000ffc00000000000000003ff00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff21930cfffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f012264fffffffffecfffffffffffffffffffffffff7ffc000000000003effdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff193264fffffffffecfffffffffffffffffffffffff7ffbfffffffffff5effdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f393204fffffffffecfffffffffffffffffffffffff7ff7ffffffffffedeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff39327cfffffffffecfffffffffffffffffffffffff7fe000000000001deffdfff0100783f83fffbff7ffc0401e0fe0fffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f392264fffffffffecfffffffffffffffffffffffff7fcfffffffffffcdeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff39930cfffffffffecfffffffffffffffffffffffff7fdfffffffffffedeffdfff0100181f03fffbff7ffc0400607c0fffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007ffff3fffffffffffecfffffffffffffffffffffffff7fdfffffffffffedeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaaffff33fffffffffffecfffffffffffffffffffffffff7fde0000000001edeffdfffc7c70e0e0ffffbff7fff1f1c38383fffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77ffffff87fffffffffffecfffffffffffffffffffffffff7fdcfffffff9fcedeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fddfffffff1feedeffdfffc7c01e040ffffbff7fff1f0078103fffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fddffffffe3feedeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fddffffffc7feedeffdfffc7c01e208ffffbff7fff1f0078823fffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffff7fddffffffc7feedeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffff7fddfffff8e3feedeffdfffc7c70e318ffffbff7fff1f1c38c63fffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffff7fddfffff071feedeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffff7fddffffe238feedeffdfff0100183b83fffbff7ffc040060ee0fffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fddffffc71c72edeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fddffffe39e22edeffdfff0100783f83fffbff7ffc0401e0fe0fffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fddfffdf19f06edeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007ffe7fff9ffffffffecfffffffffffffffffffffffff7fddfff8788f8eedeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7ffe7fff9ffffffffecfffffffffffffffffffffffff7fddfffc1c03feedeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff864e1c986667fffecfffffffffffffffffffffffff7fddfffc0630feedeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f3224c9132667fffecfffffffffffffffffffffffff7fddff8e631cfeedeffdfffff8000007ffffbff7ffffe000001ffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff1e67c993324ffffecfffffffffffffffffffffffff7fddff06718ffeedeffdffffc7ffff17ffffbff7ffff1ffffc5ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7fc6660993324ffffecfffffffffffffffffffffffff7fddfe2330c7feedeffdfffe3ffff8a7ffffbff7fff8ffffe29ffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffffe264c993324ffffecfffffffffffffffffffffffff7fddfc710467feedeffdfff1ffffe557ffffbff7ffc7ffff955ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f3264c913399ffffecfffffffffffffffffffffffff7fddfe398e3ffeedeffdffcfffff0aa7f0ffbff7ff3ffffc2a9fc3feffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff86662498799ffffecfffffffffffffffffffffffff7fdde313c77ffeedeffdff0000005557f77fbff7fc000001555fddfeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7ffffffffffffffffecfffffffffffffffffffffffff7fddc387e3fffeedeffdff7ffffeaaa7f77fbff7fdfffffaaa9fddfeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaafffffffffffffffffecfffffffffffffffffffffffff7fdd8fc7f1fffeedeffdff7fe0065557f0ffbff7fdff8019555fc3feffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fdd9fe3fbfffeedeffdff7fe7f6aaa7f5ffbff7fdff9fdaaa9fd7feffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fdd8071fffffeedeffdff7fe7f65557f6ffbff7fdff9fd9555fdbfeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fddc038fffffeedeffdff402006aaa7f77fbff7fd00801aaa9fddfeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fddff1c7ffffeedeffdff4027f65557ffffbff7fd009fd9555ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffff7fddff9efffffeedeffdff7fe7f6aaa7f8ffbff7fdff9fdaaa9fe3feffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffff7fddfb9ffffffeedeffdff4020065557f77fbff7fd008019555fddfeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffff7fddf91ffffffeedeffdff4027f6aaa7f7ffbff7fd009fdaaa9fdffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffff7fddf83ffffffeedeffdff7fe7f65557f8ffbff7fdff9fd9555fe3feffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fddfc7ffffffeedeffdff402006aaa7ff7fbff7fd00801aaa9ffdfeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fdcfffffffffcedeffdff4024165557f77fbff7fd009059555fddfeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fde0000000001edeffdff7fe7b6aaa7f8ffbff7fdff9edaaa9fe3feffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007ffffffffffffffffecfffffffffffffffffffffffff7fdfffffffffffebeffdff4020065557ffffbff7fd008019555ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7ffffffffffffffffecfffffffffffffffffffffffff7fdfffffffffffe7effdff402756aaa7f8ffbff7fd009d5aaa9fe3feffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff86099243fffffffecfffffffffffffffffffffffff7fcfffffffffffcfeffdff7fed565557f77fbff7fdffb559555fddfeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f33c99019fffffffecfffffffffffffffffffffffff7fe000000000001feffdff7fe006aaa7f7ffbff7fdff801aaa9fdffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdfffff3999199fffffffecfffffffffffffffffffffffff7ffffefffffeffffeffdff7fe5965557f0ffbff7fdff9659555fc3feffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f83b99381fffffffecfffffffffffffffffffffffff7fffff7ffffdffffeffdff7fed96aaa7f77fbff7fdffb65aaa9fddfeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff3339939ffffffffecfffffffffffffffffffffffff7e0000bffffa00000ffdff7fe0065557f77fbff7fdff8019555fddfeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f32791399fffffffecfffffffffffffffffffffffff7dffffc00007ffffeffdff7fe7f6aaa7f8ffbff7fdff9fdaaa9fe3feffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff880c93c3fffffffecfffffffffffffffffffffffff7bffffffffffffffcffdff7fe7f65557ffffbff7fdff9fd9555ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7ffffffffffffffffecfffffffffffffffffffffffff70000000000000002ffdff7fe7f6aaa7f77fbff7fdff9fdaaa9fddfeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaafffffffffffffffffecfffffffffffffffffffffffff77ffffffffffffffaffdff7fe7f65557f6ffbff7fdff9fd9555fdbfeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff777ff99999999999affdff7fe006aaa7f5ffbff7fdff801aaa9fd7feffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff76b0199999999999affdff7fe7f65557f3ffbff7fdff9fd9555fcffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff75d01fffffffffffaffdff7fecf6aaa7f5ffbff7fdffb3daaa9fd7feffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff76bff666666666662ffdff7feff65557f6ffbff7fdffbfd9555fdbfeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffff777fe666666666662ffdff7fe006aaa7f77fbff7fdff801aaa9fddfeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffff77ffffffffffffffaffdff7ffffe551fffffbff7fdfffff9547ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffff7199999999999999affdff7ffffea8ffffffbff7fdfffffaa3fffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffff7199999999999999affdff7ffffe47ffffffbff7fdfffff91ffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff77ffffffffffffff8ffdff0000001fffffffbff7fc0000007ffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff70000000000000002ffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007ff9fffe1ffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007ffffffccffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff21870fcffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f0132679ffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff19323f3ffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f39338e7ffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff3933c4fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffff9fffe1ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007f393264fffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffccffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc00ff39870c0ffffffffecfffffffffffffffffffffffff7fffff4470c9ffffeffdffffe19cc327ffffbff7ffff21870fcffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff74007ffffffffffffffffecfffffffffffffffffffffffff7fffff332641ffffeffdffffcc9c9913ffffbff7ffff0132679ffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbcaafffffffffffffffffecfffffffffffffffffffffffff7fffff3323c7ffffeffdffffcfc9f933ffffbff7ffff19323f3ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fffff3338cfffffeffdffffcfc9c133ffffbff7ffff39338e7ffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fffff333c4fffffeffdffffcfe39933ffffbff7ffff3933c4fffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fffff33264fffffeffdffffcce39933ffffbff7ffff393264fffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff7fffff3330cfffffeffdffffe1f3c433ffffbff7ffff39870c0ffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7000000000000000000000cfffffffffffffffffffffffff7fffffffffffffffeffdfffffff7ffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffff7fffffffffffffffeffdffffffe7ffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffff7fffffffffffffffeffdffffffcfffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffff7fffffffffffffffeffdffffffffffffffffbff7fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffff00000000000000000ffc00000000000000003ff00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbc007ffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7ffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff4470c90ffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f33264067fffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff3323c7e7fffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f3338cf07fffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffbdffff333c4e67fffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffff75ff7f33264e67fffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff155553fffffffffbdffff3330cf13fffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2aaaa3fffffffff75ff7ffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffbcaafffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3bfe63fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3dfcd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3bfce3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3df9d3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3efbe3fffffffff7000000000000000000000cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3f73d3fffffffffbfffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ff7e3fffffffff7fffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3f67d3fffffffffbaaaaaaaaaaaaaaaaaaaaacfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3f8fe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fcfd3fffffffffbffffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fdfe3fffffffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff155551555555555bc007f99ff3ffffffffffec555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ffc 3ff2aaaa2aaaaaaaaa75ff7f99ff3ffffffffffecaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffc 3fffffff0000000000bdffff093930cc9387fffec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffc 3fffffff000000000075ff7f9892264c8933fffec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffc 3fffffff3ffeffffffbdffff999323cc99f3fffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffc 3fffffff3ffcffffff75ff7f999338cc9983fffecffffffffffffffffffffffd555555555555555555555555555555555555555555555555555ffffffffffffffffffffffffffffffffffffffffffffffffffffff5ffdffc 3fffffff3ff8ffffffbdffff99933c4c9933fffecffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffffffffffffffffffffffffffffffffffffffffffffffffffffaffeffc 3fffffff3fd4ffffff75ff7f919226489933fffecffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffff75fdffc 3fffffff3fbcffffffbdffffc99930e49989fffecffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffbafeffc 3fffffff3f7cffffff75ff7ffffffffffffffffecffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7dffc 3fffffff3efcffffffbcaafffffffffffffffffecffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbeffc 3fffffff35fcffffff77fffffffffffffffffffecffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffff7fd5ffc 3fffffff07fcffffffbffffffffffffffffffffecffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffbfe2ffc 3fffffff31fcffffff77fffffffffffffffffffecffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffff7fc5ffc 3fffffff3c7cffffffbffffffffffffffffffffecffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffbf1effc 3fffffff3f1cffffff7000000000000000000000cffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffff7c7dffc 3fffffff3f84ffffffbfffffffffffffffffffffcffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffb1feffc 3fffffff3fe0ffffff7fffffffffffffffffffffcffffffffffffffffffffffd000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff43fdffc 3fffffff3ff8ffffffbaaaaaaaaaaaaaaaaaaaaacffffffffffffffffffffffe000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff8ffeffc 3fffffff3ffeffffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffdffc 3fffffff2aaaaaaaaabffffffffffffffffffffecaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffc 3fffffff555555555577fffffffffffffffffffec555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ffc 3fffffffffffffffffbfe1e67ffffe73fffcfffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77cce67ffffe73fffcfffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbf9e424e193e730e1861fecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff779e6624c83e7264ccccfecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbf9e6664c8fe02647cc7fecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff779e666409fe72671cf1fecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbf9e6664f9fe72678cf8fecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77cce464c9fe7264cc8cfecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbfe1f26619fe730e1e61fecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffaaaaaaaaabfffffbffffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff5555555553fffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffbffffffff3fffffbffffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff7ffffffff3fffff77fffffffffffffffffffecfffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffffffffffffffffffffc 3ffbffffffff3fffffbffffffffffffffffffffecfffffffe003ffffffffffffffffffffffffffffffffffffffeffeffffffffffffffffffffffffffffffffffffffffffffdffdfffffffffffffffffffffffffffffffffc 3ff784ffffff3fffff7000000000000000000000cfffffffe001ffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffc 3ffb30ffffff3fffffbfffffffffffffffffffffcf99ffffe003ffffffffffffffffffffffffffe0ffffcfffffeffeffffffffffffffffffffffffffffff39ffe01fff9fffdffdfffffffffffffffffffffffffffffffffc 3ff67cc3870f3fffff7fffffffffffffffffffffcf9fffffe001ffffffffffffffffffffffffffce7fffcfffffefffffffffffffffffffffffffffffffff19fffcffff9fffdffffffffffffffffffffffffffffffffffffc 3ffa7c9932673fffffbaaaaaaaaaaaaaaaaaaaaac3093987e003ffffffffffffffffffffffffffce4e61861a23effeffffffffffffffffffffffffffffff1987fcf0e19987dffdfffffffffffffffffffffffffffffffffc 3ff67c991e673fffff77fffffffffffffffffffec9993933e001ffffffffffffffffffffffffffe3ce4cccc999efffffffffffffffffffffffffffffffff2933fce64c9333dffffffffffffffffffffffffffffffffffffc 3ffa7c99c6073fffffbffffffffffffffffffffecf999333e003fffffffffffffffffffffffffff8e4c7ccc999effeffffffffffffffffffffffffffffff2933fcfe47871fdffdfffffffffffffffffffffffffffffffffc 3ff67c99e27f3fffff77fffffffffffffffffffecf999303e001fffffffffffffffffffffffffffc64f1cc0999efffffffffffffffffffffffffffffffff3133fcf07187c7dffffffffffffffffffffffffffffffffffffc 3ffb309932673fffffbffffffe0ffffffffffffecf99c73fe003ffffffffffffffffffffffffffce71f8ccf999effeffffffffffffffffffffffffffffff3133fce67893e3dffdfffffffffffffffffffffffffffffffffc 3ff784c3870f3fffff77fffffe67fffffffffffec991c733e001ffffffffffffffffffffffffffce71ccc8c999efffffffffffffffffffffffffffffffff3933fce64c9933dffffffffffffffffffffffffffffffffffffc 3ffbffffffff3fffffbffffffe730c9c3ffffffec3c9ef87e003ffffffffffffffffffffffffffe0f9e1e61999effeffffffffffffffffffffffffffffff3987fcf1219c87dffdfffffffffffffffffffffffffffffffffc 3ff7ffffffff3fffff77fffffe7264499ffffffecfffffffe001fffffffffffffffffffffffffffffbffffffffefffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffc 3ffbffffffff3fffffbffffffe7264c99ffffffecfffffffe003fffffffffffffffffffffffffffff3ffffffffeffeffffffffffffffffffffffffffffffffffffffffffffdffdfffffffffffffffffffffffffffffffffc 3ff7ffffffff3fffff77fffffe7264c81ffffffecfffffffe001ffffffffffffffffffffffffffffe7ffffffffefffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffc 3ffbffffffff3fffffbffffffe7264c9fffffffecfffffffe003ffffffffffffffffffffffffffffffffffffffeffeffffffffffffffffffffffffffffffffffffffffffffdffdfffffffffffffffffffffffffffffffffc 3ff7ffffffff3fffff77fffffe6664c99ffffffecffffffff555ffffffffffffffffffffffffffffffffffffffe555ffffffffffffffffffffffffffffffffffffffffffffcaabfffffffffffffffffffffffffffffffffc 3ff8000000003fffffbffffffe0f0ccc3ffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff0000000003fffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbffffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbffffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff77fffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbffffffffffffffffffffecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff7000000000000000000000cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffffbfffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3fffffffffffffffff7fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 00000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0fffeaaaaabffffffffffffffffaaaaaaaaaabffffffffffffffffffffffffaaaaaaffffffff555555ffffffff555555fffffffe000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0fffd555553ffffffffffffffff55555555555ffffffffffffffffffffffff555554fffffffeaaaaa9fffffffeaaaaa9fffffffe000003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0fffefffff3ffffffffffffffffbfffffffff9ffffffffffffffffffffffffbffffcffffffff7ffff9ffffffff7ffff9fffffffe7ffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0fffdff3ff3ffffffffffffffff7fffffffff9ffffffffffffffffffffffff7ffffcfffffffefffff9fffffffefffff9fffffffe7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0fffefc0ff3ffffffffffffffffbfffffffff9ffffffffffffffffffffffffbffffcffffffff7ffff9ffffffff731ff9fffffffe7ffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0fffdf1e3f3ffffffffffffffff6787ffffff9ffffffffffffffffffffffff7ffffcfffffffefffff9fffffffef30ff9fffffffe7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0fffec1e0f3ffffffffffffffffa79fffffff9ffffffffffffffffffffffffbf3e7cffffffff7ffff9ffffffff7307f9fffffffe7f8ffdfffffffffffffffffffffffffffffffffffffffff003ffffffc3f870e1c3870ff4 0fffdbdef73ffffffffffffffff73261999879ffffffffffffffffffffffff7e3c7cfffffffefc01f9fffffffef323f9fffffffe7f87fbfffffffffffffffffffffffffffffffffffffffffe7fffffff99f3264c993267f8 0fffefc0ff3ffffffffffffffffb324c999339ffffffffffffffffffffffffbc387cffffffff7c01f9ffffffff7331f9fffffffe7f83fdfffffffffffffffffffffffffffffffffffffffffe7288e1cf99f3264c993267f4 0fffdfc0ff3ffffffffffffffff7324cc931f9ffffffffffffffffffffffff78307cfffffffefc01f9fffffffef338f9fffffffe7f91fbfffffffffffffffffffffffffffffffffffffffffe72664ccf99f3264c993267f8 0fffefdeff3ffffffffffffffffbb640c93c79ffffffffffffffffffffffffb0207cffffffff7c01f9ffffffff733c79fffffffe7f98fdfffffffffffffffffffffffffffffffffffffffffe72664cff99f3264c993267f4 0fffdfdeff3ffffffffffffffff7864fc93e39ffffffffffffffffffffffff78307cfffffffefc01f9fffffffef338f9fffffffe7f9c7bfffffffffffffffffffffffffffffffffffffffffe726640ff99f3264c993267f8 0fffefc0ff3ffffffffffffffffbce4ce67339ffffffffffffffffffffffffbc387cffffffff7c01f9ffffffff7331f9fffffffe7f9e3dfffffffffffffffffffffffffffffffffffffffffe72664fff99f3264c993267f4 0fffdfc0ff3ffffffffffffffff7ce61e67879ffffffffffffffffffffffff7e3c7cfffffffefc01f9fffffffef323f9fffffffe7f9c7bfffffffffffffffffffffffffffffffffffffffffe72664ccf9993264c993267f8 0fffebdef73ffffffffffffffffbfffffffff9ffffffffffffffffffffffffbf3e7cffffffff7c01f9ffffffff7307f9fffffffe7f98fdfffffffffffffffffffffffffffffffffffffffffe726661cfc39870e1c3870ff4 0fffdc1e0f3ffffffffffffffff7fffffffff9ffffffffffffffffffffffff7ffffcfffffffefc01f9fffffffef30ff9fffffffe7f91fbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0fffef1e3f3ffffffffffffffffbfffffffff9ffffffffffffffffffffffffbffffcffffffff7ffff9ffffffff731ff9fffffffe7f83fdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0fffdfc0ff3ffffffffffffffff7fffffffff9ffffffffffffffffffffffff7ffffcfffffffefffff9fffffffefffff9fffffffe7f87fbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0fffeff3ff3ffffffffffffffffbfffffffff9ffffffffffffffffffffffffbffffcffffffff7ffff9ffffffff7ffff9fffffffe7f8ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0fffdfffff3ffffffffffffffff7fffffffff9ffffffffffffffffffffffff7ffffcfffffffefffff9fffffffefffff9fffffffe7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0fffefffff3ffffffffffffffff80000000001ffffffffffffffffffffffffbffffcffffffff7ffff9ffffffff7ffff9fffffffe7ffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0fffdfffff3ffffffffffffffff00000000001ffffffffffffffffffffffff7ffffcfffffffefffff9fffffffefffff9fffffffe7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0fffe000003ffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaabffffffff800000ffffffff000001ffffffff000001fffffffe555555fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0fffc000003ffffffffffffffff555555555555555555555555553ffffffff000000fffffffe000001fffffffe000001fffffffeaaaaabfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0ffffffffffffffffffffffffffbfffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0ffffffffffffffffffffffffff7fffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0ffffffffffffffffffffffffffbaaaaaaaaaaaaaaaaaaaaaaaab3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0ffffffffffffffffffffffffff77fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0ffffffffffffffffffffffffffbffffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0ffffffffffffffffffffffffff77fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0ffffffffffffffffffffffffffbc007f39ff3fffffe7fffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0ffffffffffffffffffffffffff74007f19ff3fffffe7fffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0ffffffffffffffffffffffffffbc00ff198613330c867ffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0ffffffffffffffffffffffffff74007f293333326404fffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0fffffffffffffffffff0000000bc00ff293339266461fffffffb0000000000000000000000000000000000000000000000000000000000000000000000000ff0000000000000000000007f80000000000000000000003f4 0fffffffffffffffffff000000074007f3103392664e1fffffffb0000000000000000000000000000000000000000000000000000000000000000000000001ff0000000000000000000007f80000000000000000000003f8 0fffffffffffffffffff3ffffffbc00ff313f392664e4fffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff3fffffffffffffffffffeff9fffffffffffffffffffff7f4 0fffffffffffffffffff3ffffff74007f39332cce64e67ffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff3ffffffffffffffffffff7f9fffffffffffffffffffffbf8 0fffffffffffffffffff3ffffffbc00ff39879ccf0ce73ffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff3fffffffffffffffffffeff9fffffffffffffffffffff7f4 0fffffffffffffffffff3ffffff74007ffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff3ffffffffffffffffffff7f9fffffffffffffffffffffbf8 0ff807fffffff009ffff393ffffbcaafffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff3fefffffffffffffffffeff9ff7ffffffffffffffffff7f4 0fff3ffffffff3f9ffff393ffff77fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff3fd7ffc09ffff03fffcff7f9febfff87fffff333e67ffbf8 0fff3921c387f3c9873f3a14464bffffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff3fabffce1ffff39fffcfeff9fd5fff33fffff333fe7ff7f4 0fff380c9933f3c9333f333332277fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff3f5dffce1867339870ccf7f9fa2ffe79398643308430fbf8 0fff38fc9f33f04933ff3333326bffffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff3ebeffce132733932649eff9f417fe7939320b34066677f4 0fff39e09f03f3c903ff3733326700000000000000000000000033fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff3d7f7fc09f32703f27c3f7f9e80bfe799332392466667bf8 0fff39cc9f3ff3c93fff3733326bfffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff38ff1fcf9832739827c3eff9c000fe7993027924e66077f4 0fff39cc9933f3c9333f27233227fffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff3c7e3fcf9338f39327c9f7f9e001fe79c73e7ccce667fbf8 0fff39e24387f3c9873f2793324baaaaaaaaaaaaaaaaaaaaaaaab3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff3e3c7fcf9338f393264ceff9f003ff33c7327ccce64677f4 0fffffffffffffffffff3ffffe777fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff3f18ffcf989cf03890ce77f9f807ff87ef867ccce730fbf8 0fffffffffffffffffff3ffffe7bffffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff3f81fffffffdffffffffeff9fc0ffffffffffffffffff7f4 0fffffffffffffffffff3ffffe777fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff3fc3fffffff9fffffffff7f9fe1ffffffffffffffffffbf8 0fffffffffffffffffff3ffffffbc007f83ffffffff003ffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff3fe7fffffff3ffffffffeff9ff3ffffffffffffffffff7f4 0fffffffffffffffffff3ffffff74007f39ffffffffe7fffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff3ffffffffffffffffffff7f9fffffffffffffffffffffbf8 0fffffffffffffffffff2aaaaaabc00ff39270e1c3fe7288e1ffb2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff2aaaaaaaaaaaaaaaaaaaaff95555555555555555555557f4 0fffffffffffffffffff555555574007f8f1264c99fe72664cffb1555555555555555555555555555555555555555555555555555555555555555555555555ff5555555555555555555557faaaaaaaaaaaaaaaaaaaaaabf8 0ffffffffffffffffffffffffffbc00ffe333e4f99fe72664cffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0ffffffffffffffffffffffffff74007ff13304f81fe726640ffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0ffffffffffffffffffffffffffbc00ff393264f9ffe72664fffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0ffffffffffffffffffffffffff74007f391264c99fe72664cffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 0ffffffffffffffffffffffffffbc00ff8327121c3fe726661ffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 0aaaaaaaaaaaaaaaaaaaaaaaaaa74007fff3ffffffffffffffffb2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8 155555555555555555555555555bcaaffff3ffffffffffffffffb155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554 3ffffffffffffffffffffffffff77ffffff3ffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbffffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff77fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbffffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff700000000000000000000000033fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbfffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff7fffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbaaaaaaaaaaaaaaaaaaaaaaaab3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff77fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbffffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff77fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbc007f399927fff33ffffffffb3fffe0fffffffffc00ffffffe01fff9fffffffffc00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff75ff7f399f3ffff3fffffffffb3fffce7fffffffff9ffffffffcffff9ffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbdffff390924186130c9fffffb3fffce49c3870fff9ca23873fcf0e19987e730fff9ca2387ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff75ff7f39992793332644fffffb3fffe3c4993267ff9c999333fce64c9333e7267ff9c99933ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbdffff3999273f33264cfffffb3ffff8ccf93e67ff9c99933ffcfe47871ff263fff9c99933ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff75ff7f3999277833264cfffffb3ffffc4cc13e060f9c99903ffcf07187c7f278fff9c99903ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbdffff3999267333264cfffffb3fffce4c993e7fff9c9993fffce67893e3f8fc7ff9c9993fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff75ff7f939124f332264cfffffb3fffce44993267ff9c999333fce64c9933f8e667f9c99933ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbdffff83c924189930ccfffffb3fffe0c9c4870fff9c999873fcf1219c87fdf0e7f9c99987ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff75ff7ffffffffffffffffffffb3fffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbcaafffffffffffffffffffffb3fffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff77fffffffffffffffffffffffb3fffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffbffffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffff77fffffffffffffffffffffffb3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff000000000000000000000000bffffffffffffffffffffffffb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffc 3ff00001000000000000000000070000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffc 3ff3fdfe3ffffffffffffffffffbfffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fcfd3ffffffffffffffffff7fffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3f8fe3ffffffffffffffffffbaaaaaaaaaaaaaaaaaaaaaaaab1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3f47d3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ea7e3ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3f73d3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ef3e3ffffffffffffffffffbc007fc3fc9f00fffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3df9d3ffffffffffffffffff75ff7f99fc9fe7fffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3bf9e3ffffffffffffffffffbdffff3f0c9fe7243870fffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fcd3ffffffffffffffffff75ff7f3e649fe70193267ffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3bfce3ffffffffffffffffffbdffff3fe49fe71f93e67ffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53ffffffffffffffffff75ff7f3f049fe73c13e07ffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff200063ffffffffffffffffffbdffff3e649fe73993e7fffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff000013ffffffffffffffffff75ff7f98649fe73993267ffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2aaae3ffffffffffffffffffbdffffc3109fe73c4870fffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff355553ffffffffffffffffff75ff7ffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2ffe63ffffffffffffffffffbcaafffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff300053ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff200063ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff700000000000000000000000031ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbfffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff7fffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbaaaaaaaaaaaaaaaaaaaaaaaab1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbc007f00fffcfff0ffe7fffcfb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff75ff7fe7fffcffe67fe7fffcfb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbdffffe7870ccfcf26424cc87b1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff75ff7fe732649fcf266624ccfb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbdffffe7f23c3fcf266664ccfb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff75ff7fe7838c3fcf266664ccfb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbdffffe733c49fcf266664ccfb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff75ff7fe73264cfe66464248cbb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbdffffe7890ce7f0f2724e4e7b1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff75ff7ffffffffffffffe7ffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbcaafffffffffffffffe7ffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffe7ffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff700000000000000000000000031ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbfffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff7fffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbaaaaaaaaaaaaaaaaaaaaaaaab1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffc1ffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffccffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffce619387ffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffce4c8933ffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffce4c9933ffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffce4c9903ffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffce4c993fffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffcccc9933ffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffc1e19987ffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff77fffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff700000000000000000000000031ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffffbfffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff7fffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3ffffffffffffffffff800000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3ffffffffffffffffff000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fffe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff155553fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2aaaa3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff37fe53fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3bfe63fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3dfcd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3bfce3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3df9d3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3efbe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3f73d3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ff7e3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3f67d3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3f8fe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3fcfd3fffffffffffffffffffffffffffffffffffffffffffd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3fdfe3fffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff15555155555555555555555555555555555555555555555555155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ffc 3ff2aaaa2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffff3ffc55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ffdffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffff3ff8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffeffc 3ffaaaaaaaaabffffffffffffffffffffffffffffffffffffffff3fd47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc75fdffc 3ff5555555553ffffffffffffffffffffffffffffffffffffffff3fbcbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbafeffc 3ffbffffffff3ffffffffffffffffffffffffffffffffffffffff3f7c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7f7dffc 3ff7ffffffff3ffffffffffffffffffffffffffffffffffffffff3efcbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbfbeffc 3ffbffffffff3ffffffffffffffffffffffffffffffffffffffff35fc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fd5ffc 3ff784ffffff3ffffffffffffffffffffffffffffffffffffffff07fcbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbfe2ffc 3ffb30ffffff3ffffffffffffffffffffffffffffffffffffffff31fc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fc5ffc 3ff67cc3870f3ffffffffffaaaaaafffffffeaaaaabffffffffff3c7cbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbf1effc 3ffa7c9932673ffffffffff555554fffffffd555553ffffffffff3f1c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7dffc 3ff67c991e673ffffffffffbffffcfffffffefffff3ffffffffff3f84bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcb1feffc 3ffa7c99c6073ffffffffff7fcffcfffffffdff3ff3ffffffffff3fe0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043fdffc 3ff67c99e27f3ffffffffffbe49fcfffffffefe1ff3ffffffffff3ff880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ffeffc 3ffb309932673ffffffffff7f03fcfffffffdfc0ff3ffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffdffc 3ff784c3870f3ffffffffffbf87fcfffffffef927f3ffffffffff2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffc 3ffbffffffff3ffffffffff7fcffcfffffffdff3ff3ffffffffff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ffc 3ff7ffffffff3ffffffffffa0001cfffffffe800073ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffbffffffff3ffffffffff60001cfffffffd800073ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff7ffffffff3ffffffffffbffffcfffffffefffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffbffffffff3ffffffffff7ffffcfffffffdfffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff7ffffffff3ffffffffffa0001cfffffffe800073ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff8000000003ffffffffff60001cfffffffd800073ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff0000000003ffffffffffbfcffcfffffffeff3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffff7f87fcfffffffdf927f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffbf03fcfffffffefc0ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffff7e49fcfffffffdfe1ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffbfcffcfffffffeff3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffff7ffffcfffffffdfffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffbffffcfffffffefffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffff7ffffcfffffffdfffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffff800000fffffffe000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffff000000fffffffc000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffc 3ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc 3ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffc 3ff2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffc 3ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffff0ffffffffccfffffffffffffffffffffffffffffffffff0fffffe7fffff3fffffffffffffffffffffffffffffcccfe667fffffffffffffffffffffffffffffffcf9fffffffffffffffffffffffffffffffffc 3fffffffffe67fffffffcfffffffffffffffffffffffffffffffffffe67ffffe7fffff3fffffffffffffffffffffffffffffcccffe7ffffffffffffffffffffffffffffffffcf9fffffffffffffffffffffffffffffffffc 3fffffffffcfc34464cc849393ffffffffffffffffffffffffffffffcf2730c84e1c393c0000000fffffffffffffffffffffccc864249c9e00000007fffffffffffffffffffc71870e1c3930fffffffffffffffffffffffc 3fffffffffcf9933224ccc8923e0000000ffffffffffffffffffffffcf27264024c9923dffffffffffffffffffffffffffffecd32664491efffffffffffffffffffffffffffc713264c992267ffffffffffffffffffffffc 3fffffffffcf9933264ccc9933e0000001ffffffffffffffffffffffcf32664664cf933dffffffefffffffffffffffffffffe49f2664c99efffffff7fffffffffffffffffffc21323c7f93267ffffffffffffffffffffffc 3fffffffffcf9933264ccc9933e0000000ffffffffffffffffffffffcf32604e640c133dffffffffffffffffffffffffffffe4982664c99efffffffffffffffffffffffffffca9038f1c13207ffffffffffffffffffffffc 3fffffffffcf9933264ccc9933e0000001ffffffffffffffffffffffcf38e7ce64f9933dffffffeffffffffffffffffffffff3332664c99efffffff7fffffffffffffffffffc893fc7899327fd5555555ffffffffffffffc 3fffffffffe619332248c89923e0000000ffffffffffffffffffffffe678e64e64c9923dfffffffffffffffffffffffffffff3332644c91efffffffffffffffffffffffffffcd93264c992267ffffffffffffffffffffffc 3ffffffffff0c33324e4e49993e0000001fffffffffffffffffffffff0fdf0ce661c493dffffffeffffffffffffffffffffff3388724cc9efffffff7fffffffffffffffffffcd9870e1c4930fffffffffffffffffffffffc 3fffffffffffffffe7fffffff3e0000000fffffffffffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffff9effffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffc 3fffffffffffffffe7ffffff33e0000001fffffffffffffffffffffffffffffffffffffdffffffeffffffffffffffffffffffffffffff99efffffff7fffffffffffffffffffffffffffff33ffffffffffffffffffffffffc 3fffffffffffffffe7ffffff87eaaaaaaafffffffffffffffffffffffffffffffffffffd5555555ffffffffffffffffffffffffffffffc3eaaaaaaaffffffffffffffffffffffffffffff87ffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 showpage %%EndDocument endTexFig 249 1801 a Fo(Figure)13 b(3.1)249 1838 y Fy(XPVM)g(system)d(adding)g (hosts)p 666 2025 748 2 v 665 2079 2 54 v 712 2062 a Fs(#)22 b(configuration)d(used)i(for)g(my)g(run)p 1412 2079 V 665 2133 V 712 2116 a(sparky)p 1412 2133 V 665 2187 V 712 2170 a(azure.epm.ornl.gov)p 1412 2187 V 665 2241 V 712 2224 a(thud.cs.utk.edu)p 1412 2241 V 665 2294 V 712 2278 a(sun4)p 1412 2294 V 666 2296 748 2 v 249 2392 a Fo(Figure)13 b(3.2)249 2429 y Fy(Simple)d(host\014le)f(listing)i (virtual)e(mac)o(hine)g(con\014guration)p eop %%Page: 32 51 32 50 bop 249 251 a Fu(32)1375 b(Chapter)13 b(3)p 459 824 1162 2 v 458 878 2 54 v 505 861 a Fs(#)22 b(Comment)e(lines)h (start)g(with)g(#)g(\(blank)g(lines)g(ignored\))p 1619 878 V 458 932 V 505 915 a(gstws)p 1619 932 V 458 986 V 505 969 a(ipsc)g(dx=/usr/geist/pvm3)o(/lib/)o(I860/)o(pvmd3)p 1619 986 V 458 1040 V 505 1023 a(ibm1.scri.fsu.edu)e(lo=gst)h(so=pw)p 1619 1040 V 458 1093 V 1619 1093 V 458 1147 V 505 1131 a(#)i(set)f(default)f(options)h(for)g(following)f(hosts)h(with)g(*)p 1619 1147 V 458 1201 V 505 1185 a(*)h(ep=$sun/problem1:)o(~/nl)o(a/mat) o(hlib)p 1619 1201 V 458 1255 V 505 1239 a(sparky)p 1619 1255 V 458 1309 V 505 1293 a(#azure.epm.ornl.gov)p 1619 1309 V 458 1363 V 505 1347 a(midnight.epm.ornl.g)o(ov)p 1619 1363 V 458 1417 V 1619 1417 V 458 1471 V 505 1455 a(#)g(replace)e(default)h(options)f(with)h(new)g(values)p 1619 1471 V 458 1525 V 505 1509 a(*)h(lo=gageist)e(so=pw)g(ep=problem1) p 1619 1525 V 458 1579 V 505 1563 a(thud.cs.utk.edu)p 1619 1579 V 458 1633 V 505 1617 a(speedy.cs.utk.edu)p 1619 1633 V 458 1687 V 1619 1687 V 458 1741 V 505 1725 a(#)i(machines)e(for)h(adding)g(later)f(are)i(specified)e(with)h(&)p 1619 1741 V 458 1795 V 505 1779 a(#)h(these)f(only)g(need)g(listing)f (if)h(options)g(are)g(required)p 1619 1795 V 458 1849 V 505 1833 a(&sun4)65 b(ep=problem1)p 1619 1849 V 458 1903 V 505 1887 a(&castor)21 b(dx=/usr/local/b)o(in/pv)o(md3)p 1619 1903 V 458 1957 V 505 1941 a(&dasher.cs.utk.edu)d(lo=gageist)p 1619 1957 V 458 2011 V 505 1995 a(&elvis)43 b(dx=~/pvm3/lib/S)o(UN4/p)o (vmd3)p 1619 2011 V 459 2013 1162 2 v 249 2108 a Fo(Figure)13 b(3.3)249 2145 y Fy(PVM)g(host\014le)c(illustrating)g(customizing)f (options)p eop %%Page: 33 52 33 51 bop 249 325 a Fp(4)25 b FD(Basic)18 b(Programming)f(T)l(ec)o (hniques)249 561 y FA(Dev)o(eloping)e(applications)g(for)h(the)g(PVM)h (system|in)e(a)g(general)i(sense,)g(at)f(least|follo)o(ws)e(the)249 615 y(traditional)g(paradigm)g(for)h(programming)d(distributed-memory)i (m)o(ultipro)q(cessors)i(suc)o(h)h(as)e(the)249 669 y(nCUBE)j(or)g(the) g(In)o(tel)g(family)d(of)i(m)o(ultipro)q(cessors.)29 b(The)18 b(basic)g(tec)o(hniques)h(are)f(similar)d(b)q(oth)249 723 y(for)j(the)i(logistical)c(asp)q(ects)21 b(of)d(programmi)o(ng)e (and)i(for)h(algorithm)c(dev)o(elopmen)o(t.)32 b(Signi\014can)o(t)249 777 y(di\013erences)15 b(exist,)f(ho)o(w)o(ev)o(er,)f(in)g(terms)f(of)h (\(a\))g(task)g(managemen)o(t,)e(esp)q(ecially)i(issues)h(concerning) 249 831 y(dynamic)19 b(pro)q(cess)k(creation,)f(naming,)d(and)i (addressing;)j(\(b\))d(initialization)d(phases)k(prior)e(to)249 885 y(actual)g(computation;)i(\(c\))g(gran)o(ularit)o(y)d(c)o(hoices;) 24 b(and)d(\(d\))g(heterogeneit)o(y)m(.)39 b(In)21 b(this)g(c)o (hapter,)249 939 y(w)o(e)f(discuss)i(the)f(programmi)o(ng)c(pro)q(cess) 22 b(for)e(PVM)g(and)g(iden)o(tify)g(factors)g(that)g(ma)o(y)f(impact) 249 993 y(functionalit)o(y)12 b(and)i(p)q(erformance.)249 1113 y FD(4.1)52 b(Common)17 b(P)o(arallel)h(Programming)f(P)o (aradigms)249 1221 y FA(P)o(arallel)g(computing)g(using)h(a)g(system)g (suc)o(h)h(as)f(PVM)h(ma)o(y)d(b)q(e)j(approac)o(hed)f(from)f(three)i (fun-)249 1275 y(damen)o(tal)c(viewp)q(oin)o(ts,)h(based)h(on)f(the)h (organization)f(of)f(the)j(computing)c(tasks.)27 b(Within)15 b(eac)o(h,)249 1329 y(di\013eren)o(t)k(w)o(orkload)d(allo)q(cation)g (strategies)i(are)g(p)q(ossible)g(and)f(will)f(b)q(e)i(discussed)h (later)f(in)f(this)249 1383 y(c)o(hapter.)h(The)11 b(\014rst)g(and)g (most)e(common)e(mo)q(del)i(for)i(PVM)g(applications)e(can)i(b)q(e)g (termed)f(\\cro)o(wd")249 1437 y(computing)j(:)19 b(a)14 b(collection)g(of)f(closely)i(related)g(pro)q(cesses,)h(t)o(ypically)d (executing)i(the)g(same)f(co)q(de,)249 1491 y(p)q(erform)g (computations)g(on)g(di\013eren)o(t)i(p)q(ortions)f(of)f(the)h(w)o (orkload,)f(usually)g(in)o(v)o(olving)e(the)k(p)q(eri-)249 1545 y(o)q(dic)c(exc)o(hange)h(of)f(in)o(termediate)f(results.)19 b(This)12 b(paradigm)d(can)k(b)q(e)g(further)g(sub)q(divided)f(in)o(to) g(t)o(w)o(o)249 1599 y(categories:)208 1674 y Ft(\017)20 b FA(The)e(master-sla)o(v)o(e)e(\(or)h(host-no)q(de\))h(mo)q(del)d(in)i (whic)o(h)f(a)h(separate)h(\\con)o(trol")f(program)e(termed)249 1728 y(the)j(master)e(is)h(resp)q(onsible)h(for)f(pro)q(cess)i(spa)o (wning,)d(initialization,)f(collection)i(and)g(displa)o(y)f(of)249 1782 y(results,)h(and)f(p)q(erhaps)h(timing)d(of)h(functions.)25 b(The)16 b(sla)o(v)o(e)g(programs)f(p)q(erform)g(the)i(actual)e(com-) 249 1836 y(putation)f(in)o(v)o(olv)o(ed;)e(they)j(either)g(are)g(allo)q (cated)e(their)i(w)o(orkloads)e(b)o(y)h(the)h(master)f(\(statically)f (or)249 1890 y(dynamically\))e(or)j(p)q(erform)f(the)i(allo)q(cations)d (themselv)o(es.)208 1960 y Ft(\017)20 b FA(The)f(no)q(de-only)e(mo)q (del)g(where)i(m)o(ultiple)d(instances)k(of)d(a)h(single)g(program)e (execute,)21 b(with)d(one)249 2014 y(pro)q(cess)d(\(t)o(ypically)d(the) h(one)h(initiated)e(man)o(ually\))e(taking)i(o)o(v)o(er)h(the)h (noncomputational)c(resp)q(on-)249 2068 y(sibilities)j(in)g(addition)g (to)h(con)o(tributing)f(to)h(the)h(computation)d(itself.)291 2143 y(The)e(second)i(mo)q(del)c(supp)q(orted)k(b)o(y)e(PVM)h(is)f (termed)g(a)g(\\tree")h(computation.)k(In)c(this)f(scenario,)249 2197 y(pro)q(cesses)20 b(are)f(spa)o(wned)f(\(usually)f(dynamically)e (as)j(the)g(computation)e(progresses\))k(in)d(a)h(tree-)249 2251 y(lik)o(e)g(manner,)h(thereb)o(y)h(establishing)f(a)f(tree-lik)o (e,)i(paren)o(t-c)o(hild)f(relationship)f(\(as)i(opp)q(osed)f(to)249 2305 y(cro)o(wd)14 b(computations)f(where)i(a)f(star-lik)o(e)f (relationship)g(exists\).)19 b(This)14 b(paradigm,)d(although)i(less) 249 2359 y(commonly)f(used,)k(is)g(an)f(extremely)g(natural)g(\014t)h (to)f(applications)f(where)j(the)f(total)f(w)o(orkload)f(is)249 2413 y(not)k(kno)o(wn)g FB(a)h(priori)p FA(,)e(for)h(example,)f(in)h (branc)o(h-and-b)q(ound)g(algorithms,)f(alpha-b)q(eta)g(searc)o(h,)249 2467 y(and)d(recursiv)o(e)h(\\divide-and-conquer")f(algorithms.)p eop %%Page: 34 53 34 52 bop 249 251 a Fu(34)1375 b(Chapter)13 b(4)291 507 y FA(The)h(third)g(mo)q(del,)e(whic)o(h)i(w)o(e)g(term)g(\\h)o(ybrid,") f(can)h(b)q(e)g(though)o(t)g(of)g(as)g(a)f(com)o(bination)f(of)h(the) 249 561 y(tree)h(mo)q(del)d(and)h(cro)o(wd)g(mo)q(del.)k(Essen)o (tially)m(,)c(this)g(paradigm)e(p)q(ossesses)15 b(an)d(arbitrary)h(spa) o(wning)249 615 y(structure:)28 b(that)18 b(is,)f(at)h(an)o(y)f(p)q (oin)o(t)g(during)h(application)e(execution,)j(the)f(pro)q(cess)i (relationship)249 669 y(structure)c(ma)o(y)c(resem)o(ble)i(an)g (arbitrary)f(and)h(c)o(hanging)f(graph.)291 723 y(W)m(e)f(note)h(that)g (these)h(three)g(classi\014cations)e(are)h(made)f(on)g(the)h(basis)g (of)f(pro)q(cess)j(relationships,)249 777 y(though)c(they)h(frequen)o (tly)f(also)f(corresp)q(ond)j(to)e(comm)o(unication)d(top)q(ologies.)16 b(Nev)o(ertheless,)e(in)c(all)249 831 y(three,)15 b(it)e(is)g(p)q (ossible)h(for)f(an)o(y)g(pro)q(cess)i(to)f(in)o(teract)g(and)f(sync)o (hronize)i(with)e(an)o(y)g(other.)19 b(F)m(urther,)249 885 y(as)13 b(ma)o(y)d(b)q(e)j(exp)q(ected,)h(the)f(c)o(hoice)g(of)f (mo)q(del)f(is)h(application)f(dep)q(enden)o(t)k(and)d(should)g(b)q(e)h (selected)249 939 y(to)h(b)q(est)h(matc)o(h)e(the)h(natural)f (structure)j(of)e(the)g(parallelized)f(program.)249 1022 y Fr(4.1.1)48 b(Cro)o(wd)16 b(Computations)249 1105 y FA(Cro)o(wd)e(computations)f(t)o(ypically)h(in)o(v)o(olv)o(e)f(three)i (phases.)21 b(The)15 b(\014rst)g(is)g(the)g(initialization)d(of)h(the) 249 1159 y(pro)q(cess)g(group;)e(in)f(the)h(case)h(of)e(no)q(de-only)g (computations,)g(dissemination)e(of)i(group)h(information)249 1213 y(and)18 b(problem)f(parameters,)i(as)f(w)o(ell)f(as)h(w)o (orkload)f(allo)q(cation,)g(is)h(t)o(ypically)f(done)i(within)e(this) 249 1267 y(phase.)37 b(The)20 b(second)i(phase)e(is)g(computation.)35 b(The)20 b(third)g(phase)h(is)e(collection)h(results)h(and)249 1321 y(displa)o(y)13 b(of)g(output;)h(during)f(this)h(phase,)g(the)h (pro)q(cess)h(group)d(is)h(disbanded)g(or)g(terminated.)291 1375 y(The)20 b(master-sla)o(v)o(e)g(mo)q(del)e(is)j(illustrated)f(b)q (elo)o(w,)h(using)f(the)h(w)o(ell-kno)o(wn)e(Mandelbrot)h(set)249 1429 y(computation)15 b(whic)o(h)i(is)g(represen)o(tativ)o(e)i(of)d (the)i(class)f(of)f(problems)g(termed)h(\\em)o(barrassingly")249 1483 y(parallel.)28 b(The)19 b(computation)d(itself)h(in)o(v)o(olv)o (es)g(applying)f(a)i(recursiv)o(e)h(function)e(to)h(a)f(collection)249 1537 y(of)i(p)q(oin)o(ts)g(in)f(the)i(complex)e(plane)h(un)o(til)f(the) i(function)f(v)n(alues)f(either)i(reac)o(h)g(a)f(sp)q(eci\014c)i(v)n (alue)249 1591 y(or)15 b(b)q(egin)h(to)f(div)o(erge.)22 b(Dep)q(ending)16 b(up)q(on)f(this)h(condition,)e(a)h(graphical)g (represen)o(tation)i(of)e(eac)o(h)249 1645 y(p)q(oin)o(t)g(in)f(the)i (plane)f(is)g(constructed.)23 b(Essen)o(tially)m(,)15 b(since)g(the)h(function)f(outcome)f(dep)q(ends)j(only)249 1699 y(on)d(the)g(starting)g(v)n(alue)f(of)g(the)h(p)q(oin)o(t)g(\(and) f(is)h(indep)q(enden)o(t)h(of)e(other)i(p)q(oin)o(ts\),)e(the)h (problem)f(can)249 1753 y(b)q(e)h(partitioned)f(in)o(to)f(completely)g (indep)q(enden)o(t)i(p)q(ortions,)f(the)h(algorithm)c(applied)j(to)g (eac)o(h,)g(and)249 1807 y(partial)d(results)i(com)o(bined)e(using)g (simple)g(com)o(bination)e(sc)o(hemes.)18 b(Ho)o(w)o(ev)o(er,)11 b(this)g(mo)q(del)f(p)q(ermits)249 1861 y(dynamic)h(load)h(balancing,)g (thereb)o(y)i(allo)o(wing)d(the)i(pro)q(cessing)h(elemen)o(ts)f(to)g (share)h(the)f(w)o(orkload)249 1914 y(unev)o(enly)m(.)19 b(In)c(this)f(and)h(subsequen)o(t)h(examples)d(within)h(this)g(c)o (hapter,)h(w)o(e)g(only)f(sho)o(w)g(a)g(sk)o(eletal)249 1968 y(form)g(of)i(the)g(algorithms,)e(and)i(also)f(tak)o(e)h(syn)o (tactic)h(lib)q(erties)f(with)g(the)g(PVM)g(routines)h(in)e(the)249 2022 y(in)o(terest)e(of)d(clarit)o(y)m(.)16 b(The)c(con)o(trol)f (structure)i(of)e(the)h(master-sla)o(v)o(e)e(class)i(of)f(applications) f(is)h(sho)o(wn)249 2076 y(in)i(Figure)h(4.1.)249 2226 y Fs({Master)20 b(Mandelbrot)g(algorithm.})249 2334 y({Initial)g (placement})249 2388 y(for)h(i)h(:=)f(0)h(to)f(NumWorkers)f(-)h(1)249 2442 y(pvm_spawn\(<worker)d(name>\))86 b({Start)21 b(up)g(worker)g(i}) 249 2496 y(pvm_send\(<worker)e(tid>,999\))41 b({Send)21 b(task)g(to)g(worker)g(i})p eop %%Page: 35 54 35 53 bop 249 251 a Fu(Basic)14 b(Programming)h(T)m(ec)o(hniques)1029 b(35)559 1066 y @beginspecial 0 @llx 0 @lly 415 @urx 180 @ury 2340 @rwi 1440 @rhi @setspecial %%BeginDocument: fig4.1.ps /$F2psDict 32 dict def $F2psDict begin $F2psDict /mtrx matrix put /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix } def newpath 0 0 0 0 0 1 DrawEllipse stroke end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 1 setlinecap 1 setlinejoin -10 68 translate 0.000000 180.000000 translate 0.900 -0.900 scale /Times-Roman findfont 18.000 scalefont setfont 25 195 moveto 1 -1 scale (Mandelbrot) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 18.000 scalefont setfont 42 211 moveto 1 -1 scale (Tasks) gsave 0.000 rotate show grestore 1 -1 scale 1.000 setlinewidth % Ellipse newpath 65 201 54 32 0 360 DrawEllipse stroke % Ellipse newpath 397 93 18 18 0 360 DrawEllipse stroke % Ellipse newpath 227 193 49 49 0 360 DrawEllipse stroke % Ellipse newpath 435 137 18 18 0 360 DrawEllipse stroke % Ellipse newpath 387 242 18 18 0 360 DrawEllipse stroke % Ellipse newpath 454 204 18 18 0 360 DrawEllipse stroke % Polyline newpath 264 162 moveto 382 103 lineto stroke newpath 171.000 185.000 moveto 179.000 187.000 lineto 171.000 189.000 lineto stroke % Polyline newpath 179 187 moveto 115 187 lineto stroke newpath 125.000 206.000 moveto 117.000 204.000 lineto 125.000 202.000 lineto stroke % Polyline newpath 117 204 moveto 180 204 lineto stroke % Polyline newpath 273 178 moveto 417 140 lineto stroke % Polyline newpath 272 213 moveto 371 235 lineto stroke % Polyline newpath 275 195 moveto 437 203 lineto stroke /Times-Roman findfont 20.000 scalefont setfont 201 197 moveto 1 -1 scale (Master) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 18.000 scalefont setfont 374 129 moveto 1 -1 scale (Slave) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 18.000 scalefont setfont 361 275 moveto 1 -1 scale (Slave) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 18.000 scalefont setfont 414 173 moveto 1 -1 scale (Slave) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 18.000 scalefont setfont 434 239 moveto 1 -1 scale (Slave) gsave 0.000 rotate show grestore 1 -1 scale $F2psEnd %%EndDocument @endspecial 249 1128 a Fo(Figure)13 b(4.1)249 1165 y Fy(Master-sla)o(v)o(e)c(paradigm)249 1288 y Fs(endfor)249 1396 y({Receive-send})249 1450 y(while)21 b(\(WorkToDo\))249 1504 y(pvm_recv\(888\))194 b({Receive)20 b(result})249 1612 y(pvm_send\(<availabl)o(e)f(worker)h(tid>,999\))249 1666 y({Send)h(next)g(task)g(to)g(available)f(worker})249 1774 y(display)g(result)249 1828 y(endwhile)249 1936 y({Gather)g(remaining)g(results.})249 1990 y(for)h(i)h(:=)f(0)h(to)f (NumWorkers)f(-)h(1)249 2044 y(pvm_recv\(888\))346 b({Receive)20 b(result})249 2098 y(pvm_kill\(<worker)f(tid)i(i>\))108 b({Terminate)20 b(worker)g(i})249 2152 y(display)g(result)249 2205 y(endfor)p eop %%Page: 36 55 36 54 bop 249 251 a Fu(36)1375 b(Chapter)13 b(4)249 507 y Fs({Worker)20 b(Mandelbrot)g(algorithm.})249 615 y(while)h(\(true\)) 249 669 y(pvm_recv\(999\))564 b({Receive)20 b(task})249 723 y(result)h(:=)g(MandelbrotCalcula)o(tions)o(\(task)o(\))e({Compute) h(result})249 777 y(pvm_send\(<master)f(tid>,888\))107 b({Send)20 b(result)h(to)g(master})249 831 y(endwhile)291 1030 y FA(The)h(master-sla)o(v)o(e)f(example)f(describ)q(ed)k(ab)q(o)o (v)o(e)e(in)o(v)o(olv)o(es)f(no)g(comm)o(unication)e(among)g(the)249 1084 y(sla)o(v)o(es.)f(Most)13 b(cro)o(wd)g(computations)f(of)h(an)o(y) f(complexit)o(y)f(do)i(need)h(to)f(comm)o(unicate)e(among)f(the)249 1138 y(computational)k(pro)q(cesses;)19 b(w)o(e)e(illustrate)f(the)h (structure)h(of)e(suc)o(h)h(applications)e(using)h(a)g(no)q(de-)249 1192 y(only)11 b(example)f(for)h(matrix)e(m)o(ultiply)g(using)i (Cannon's)g(algorithm)e([2)o(])22 b(\(programming)8 b(details)j(for)249 1246 y(a)j(similar)d(algorithm)h(are)i(giv)o(en)g(in)f(another)i(c)o (hapter\).)k(The)c(matrix-m)n(ulti)o(ply)c(example,)h(sho)o(wn)249 1299 y(pictorially)g(in)g(Figure)h(4.2)f(m)o(ultiplies)f(matrix)g (subblo)q(c)o(ks)j(lo)q(cally)m(,)d(and)h(uses)j(ro)o(w-wise)e(m)o (ulticast)249 1353 y(of)g(matrix)f Fs(A)i FA(subblo)q(c)o(ks)g(in)g (conjunction)g(with)f(column-wise)g(shifts)h(of)f(matrix)f Fs(B)i FA(subblo)q(c)o(ks.)409 2311 y @beginspecial 0 @llx 0 @lly 340 @urx 392 @ury 3060 @rwi 2160 @rhi @setspecial %%BeginDocument: fig4.2.ps /$F2psDict 32 dict def $F2psDict begin $F2psDict /mtrx matrix put end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 1 setlinecap 1 setlinejoin -53 33 translate 0.000000 392.000000 translate 0.900 -0.900 scale 1.000 setlinewidth % Polyline newpath 133 139 moveto 133 79 lineto 73 79 lineto 73 139 lineto closepath stroke % Polyline newpath 93 79 moveto 93 139 lineto stroke % Polyline newpath 113 79 moveto 113 139 lineto stroke % Polyline newpath 73 119 moveto 133 119 lineto stroke % Polyline newpath 73 99 moveto 133 99 lineto stroke /Times-Bold findfont 12.000 scalefont setfont 75 91 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 82 95 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 94 91 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 101 95 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 115 91 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 122 95 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 115 111 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 122 115 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 95 111 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 102 115 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 76 111 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 83 115 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 76 131 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 83 135 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 95 131 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 102 135 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 115 131 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 122 135 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 238 138 moveto 238 78 lineto 178 78 lineto 178 138 lineto closepath stroke % Polyline newpath 198 78 moveto 198 138 lineto stroke % Polyline newpath 218 78 moveto 218 138 lineto stroke % Polyline newpath 178 118 moveto 238 118 lineto stroke % Polyline newpath 178 98 moveto 238 98 lineto stroke /Times-Bold findfont 12.000 scalefont setfont 180 90 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 187 94 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 199 90 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 206 94 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 220 90 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 227 94 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 220 110 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 227 114 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 200 110 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 207 114 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 181 110 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 188 114 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 181 130 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 188 134 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 200 130 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 207 134 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 220 130 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 227 134 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 419 138 moveto 419 78 lineto 359 78 lineto 359 138 lineto closepath stroke % Polyline newpath 379 78 moveto 379 138 lineto stroke % Polyline newpath 399 78 moveto 399 138 lineto stroke % Polyline newpath 359 118 moveto 419 118 lineto stroke % Polyline newpath 359 98 moveto 419 98 lineto stroke /Times-Roman findfont 8.000 scalefont setfont 388 95 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 381 91 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 368 95 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 361 91 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 407 95 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 400 91 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 368 114 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 361 110 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 381 110 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 388 114 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 408 114 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 401 110 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 368 134 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 361 130 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 387 134 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 380 130 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 407 134 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 400 130 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 338 138 moveto 338 78 lineto 278 78 lineto 278 138 lineto closepath stroke % Polyline newpath 298 78 moveto 298 138 lineto stroke % Polyline newpath 318 78 moveto 318 138 lineto stroke % Polyline newpath 278 118 moveto 338 118 lineto stroke % Polyline newpath 278 98 moveto 338 98 lineto stroke /Times-Roman findfont 8.000 scalefont setfont 287 95 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 280 91 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 306 114 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 299 110 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 327 133 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 320 129 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 298 88 moveto 328 88 lineto stroke newpath 320.000 86.000 moveto 328.000 88.000 lineto 320.000 90.000 lineto stroke % Polyline newpath 319 108 moveto 345 108 lineto stroke newpath 337.000 106.000 moveto 345.000 108.000 lineto 337.000 110.000 lineto stroke % Polyline newpath 278 128 moveto 308 128 lineto stroke newpath 300.000 126.000 moveto 308.000 128.000 lineto 300.000 130.000 lineto stroke % Polyline newpath 278 108 moveto 293 108 lineto stroke newpath 285.000 106.000 moveto 293.000 108.000 lineto 285.000 110.000 lineto stroke % Polyline newpath 338 128 moveto 346 128 lineto stroke newpath 338.000 126.000 moveto 346.000 128.000 lineto 338.000 130.000 lineto stroke /Times-Bold findfont 16.000 scalefont setfont 97 74 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 16.000 scalefont setfont 153 110 moveto 1 -1 scale (=) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 16.000 scalefont setfont 254 110 moveto 1 -1 scale (+) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 202 73 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 303 72 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 383 73 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 134 248 moveto 134 188 lineto 74 188 lineto 74 248 lineto closepath stroke % Polyline newpath 94 188 moveto 94 248 lineto stroke % Polyline newpath 114 188 moveto 114 248 lineto stroke % Polyline newpath 74 228 moveto 134 228 lineto stroke % Polyline newpath 74 208 moveto 134 208 lineto stroke /Times-Bold findfont 12.000 scalefont setfont 76 200 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 83 204 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 95 200 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 102 204 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 116 200 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 123 204 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 116 220 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 123 224 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 96 220 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 103 224 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 77 220 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 84 224 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 77 240 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 84 244 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 96 240 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 103 244 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 116 240 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 123 244 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 239 247 moveto 239 187 lineto 179 187 lineto 179 247 lineto closepath stroke % Polyline newpath 199 187 moveto 199 247 lineto stroke % Polyline newpath 219 187 moveto 219 247 lineto stroke % Polyline newpath 179 227 moveto 239 227 lineto stroke % Polyline newpath 179 207 moveto 239 207 lineto stroke /Times-Bold findfont 12.000 scalefont setfont 181 199 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 188 203 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 200 199 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 207 203 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 221 199 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 228 203 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 221 219 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 228 223 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 201 219 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 208 223 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 182 219 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 189 223 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 182 239 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 189 243 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 201 239 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 208 243 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 221 239 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 228 243 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 420 247 moveto 420 187 lineto 360 187 lineto 360 247 lineto closepath stroke % Polyline newpath 380 187 moveto 380 247 lineto stroke % Polyline newpath 400 187 moveto 400 247 lineto stroke % Polyline newpath 360 227 moveto 420 227 lineto stroke % Polyline newpath 360 207 moveto 420 207 lineto stroke /Times-Roman findfont 8.000 scalefont setfont 389 204 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 382 200 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 369 204 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 362 200 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 408 204 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 401 200 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 369 223 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 362 219 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 382 219 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 389 223 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 409 223 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 402 219 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 369 243 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 362 239 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 388 243 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 381 239 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 408 243 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 401 239 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 339 247 moveto 339 187 lineto 279 187 lineto 279 247 lineto closepath stroke % Polyline newpath 299 187 moveto 299 247 lineto stroke % Polyline newpath 319 187 moveto 319 247 lineto stroke % Polyline newpath 279 227 moveto 339 227 lineto stroke % Polyline newpath 279 207 moveto 339 207 lineto stroke /Times-Roman findfont 8.000 scalefont setfont 288 204 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 281 200 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 307 223 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 300 219 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 328 242 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 321 238 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 308 203 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 301 199 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 327 204 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 320 200 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 288 224 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 281 220 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 327 223 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 320 219 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 310 243 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 303 239 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 288 243 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 281 239 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 98 183 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 16.000 scalefont setfont 154 219 moveto 1 -1 scale (=) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 16.000 scalefont setfont 255 219 moveto 1 -1 scale (+) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 203 182 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 384 182 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 304 181 moveto 1 -1 scale (T) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 133 353 moveto 133 293 lineto 73 293 lineto 73 353 lineto closepath stroke % Polyline newpath 93 293 moveto 93 353 lineto stroke % Polyline newpath 113 293 moveto 113 353 lineto stroke % Polyline newpath 73 333 moveto 133 333 lineto stroke % Polyline newpath 73 313 moveto 133 313 lineto stroke /Times-Bold findfont 12.000 scalefont setfont 75 305 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 82 309 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 94 305 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 101 309 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 115 305 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 122 309 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 115 325 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 122 329 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 95 325 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 102 329 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 76 325 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 83 329 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 76 345 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 83 349 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 95 345 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 102 349 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 115 345 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 122 349 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 238 352 moveto 238 292 lineto 178 292 lineto 178 352 lineto closepath stroke % Polyline newpath 198 292 moveto 198 352 lineto stroke % Polyline newpath 218 292 moveto 218 352 lineto stroke % Polyline newpath 178 332 moveto 238 332 lineto stroke % Polyline newpath 178 312 moveto 238 312 lineto stroke /Times-Bold findfont 12.000 scalefont setfont 180 304 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 187 308 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 199 304 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 206 308 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 220 304 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 227 308 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 220 324 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 227 328 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 200 324 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 207 328 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 181 324 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 188 328 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 181 344 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 188 348 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 200 344 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 207 348 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 220 344 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 227 348 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 419 352 moveto 419 292 lineto 359 292 lineto 359 352 lineto closepath stroke % Polyline newpath 379 292 moveto 379 352 lineto stroke % Polyline newpath 399 292 moveto 399 352 lineto stroke % Polyline newpath 359 332 moveto 419 332 lineto stroke % Polyline newpath 359 312 moveto 419 312 lineto stroke /Times-Roman findfont 8.000 scalefont setfont 388 309 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 381 305 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 368 309 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 361 305 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 407 309 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 400 305 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 368 328 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 361 324 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 381 324 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 388 328 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 408 328 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 401 324 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 368 348 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 361 344 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 387 348 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 380 344 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 407 348 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 400 344 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 372 302 moveto 372 288 lineto stroke newpath 370.000 296.000 moveto 372.000 288.000 lineto 374.000 296.000 lineto stroke % Polyline newpath 372 323 moveto 372 309 lineto stroke newpath 370.000 317.000 moveto 372.000 309.000 lineto 374.000 317.000 lineto stroke % Polyline newpath 373 341 moveto 373 327 lineto stroke newpath 371.000 335.000 moveto 373.000 327.000 lineto 375.000 335.000 lineto stroke % Polyline newpath 392 342 moveto 392 328 lineto stroke newpath 390.000 336.000 moveto 392.000 328.000 lineto 394.000 336.000 lineto stroke % Polyline newpath 392 322 moveto 392 308 lineto stroke newpath 390.000 316.000 moveto 392.000 308.000 lineto 394.000 316.000 lineto stroke % Polyline newpath 393 303 moveto 393 289 lineto stroke newpath 391.000 297.000 moveto 393.000 289.000 lineto 395.000 297.000 lineto stroke % Polyline newpath 411 302 moveto 411 288 lineto stroke newpath 409.000 296.000 moveto 411.000 288.000 lineto 413.000 296.000 lineto stroke % Polyline newpath 413 322 moveto 413 308 lineto stroke newpath 411.000 316.000 moveto 413.000 308.000 lineto 415.000 316.000 lineto stroke % Polyline newpath 413 341 moveto 413 327 lineto stroke newpath 411.000 335.000 moveto 413.000 327.000 lineto 415.000 335.000 lineto stroke % Polyline newpath 374 364 moveto 374 350 lineto stroke newpath 372.000 358.000 moveto 374.000 350.000 lineto 376.000 358.000 lineto stroke % Polyline newpath 392 364 moveto 392 350 lineto stroke newpath 390.000 358.000 moveto 392.000 350.000 lineto 394.000 358.000 lineto stroke % Polyline newpath 413 363 moveto 413 349 lineto stroke newpath 411.000 357.000 moveto 413.000 349.000 lineto 415.000 357.000 lineto stroke % Polyline newpath 338 352 moveto 338 292 lineto 278 292 lineto 278 352 lineto closepath stroke % Polyline newpath 298 292 moveto 298 352 lineto stroke % Polyline newpath 318 292 moveto 318 352 lineto stroke % Polyline newpath 278 332 moveto 338 332 lineto stroke % Polyline newpath 278 312 moveto 338 312 lineto stroke /Times-Roman findfont 8.000 scalefont setfont 287 310 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 280 306 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 306 310 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 299 306 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 327 310 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 320 306 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 287 329 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 280 325 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 306 329 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 299 325 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 327 329 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 320 325 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 287 348 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 280 344 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 307 348 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 300 344 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 327 348 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 320 344 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 97 288 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 16.000 scalefont setfont 153 324 moveto 1 -1 scale (=) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 16.000 scalefont setfont 254 324 moveto 1 -1 scale (+) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 202 287 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 303 286 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 383 287 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 133 456 moveto 133 396 lineto 73 396 lineto 73 456 lineto closepath stroke % Polyline newpath 93 396 moveto 93 456 lineto stroke % Polyline newpath 113 396 moveto 113 456 lineto stroke % Polyline newpath 73 436 moveto 133 436 lineto stroke % Polyline newpath 73 416 moveto 133 416 lineto stroke /Times-Bold findfont 12.000 scalefont setfont 75 408 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 82 412 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 94 408 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 101 412 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 115 408 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 122 412 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 115 428 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 122 432 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 95 428 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 102 432 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 76 428 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 83 432 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 76 448 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 83 452 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 95 448 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 102 452 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 115 448 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 122 452 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 238 455 moveto 238 395 lineto 178 395 lineto 178 455 lineto closepath stroke % Polyline newpath 198 395 moveto 198 455 lineto stroke % Polyline newpath 218 395 moveto 218 455 lineto stroke % Polyline newpath 178 435 moveto 238 435 lineto stroke % Polyline newpath 178 415 moveto 238 415 lineto stroke /Times-Bold findfont 12.000 scalefont setfont 180 407 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 187 411 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 199 407 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 206 411 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 220 407 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 227 411 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 220 427 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 227 431 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 200 427 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 207 431 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 181 427 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 188 431 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 181 447 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 188 451 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 200 447 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 207 451 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 220 447 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 227 451 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 419 455 moveto 419 395 lineto 359 395 lineto 359 455 lineto closepath stroke % Polyline newpath 379 395 moveto 379 455 lineto stroke % Polyline newpath 399 395 moveto 399 455 lineto stroke % Polyline newpath 359 435 moveto 419 435 lineto stroke % Polyline newpath 359 415 moveto 419 415 lineto stroke /Times-Roman findfont 8.000 scalefont setfont 368 411 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 361 407 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 381 407 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 388 411 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 408 411 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 401 407 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 368 431 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 361 427 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 387 431 moveto 1 -1 scale (21) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 380 427 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 407 431 moveto 1 -1 scale (22) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 400 427 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 388 451 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 381 447 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 368 451 moveto 1 -1 scale (00) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 361 447 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 407 451 moveto 1 -1 scale (02) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 400 447 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 338 455 moveto 338 395 lineto 278 395 lineto 278 455 lineto closepath stroke % Polyline newpath 298 395 moveto 298 455 lineto stroke % Polyline newpath 318 395 moveto 318 455 lineto stroke % Polyline newpath 278 435 moveto 338 435 lineto stroke % Polyline newpath 278 415 moveto 338 415 lineto stroke /Times-Roman findfont 8.000 scalefont setfont 306 413 moveto 1 -1 scale (01) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 299 409 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 327 432 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 320 428 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 8.000 scalefont setfont 287 451 moveto 1 -1 scale (20) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 12.000 scalefont setfont 280 447 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 299 445 moveto 329 445 lineto stroke newpath 321.000 443.000 moveto 329.000 445.000 lineto 321.000 447.000 lineto stroke % Polyline newpath 278 424 moveto 308 424 lineto stroke newpath 300.000 422.000 moveto 308.000 424.000 lineto 300.000 426.000 lineto stroke % Polyline newpath 338 424 moveto 346 424 lineto stroke newpath 338.000 422.000 moveto 346.000 424.000 lineto 338.000 426.000 lineto stroke % Polyline newpath 318 404 moveto 344 404 lineto stroke newpath 336.000 402.000 moveto 344.000 404.000 lineto 336.000 406.000 lineto stroke % Polyline newpath 278 404 moveto 293 404 lineto stroke newpath 285.000 402.000 moveto 293.000 404.000 lineto 285.000 406.000 lineto stroke /Times-Bold findfont 16.000 scalefont setfont 97 391 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 16.000 scalefont setfont 153 427 moveto 1 -1 scale (=) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 16.000 scalefont setfont 254 427 moveto 1 -1 scale (+) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 202 390 moveto 1 -1 scale (C) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 303 389 moveto 1 -1 scale (A) gsave 0.000 rotate show grestore 1 -1 scale /Times-Bold findfont 16.000 scalefont setfont 383 390 moveto 1 -1 scale (B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 207 155 moveto 1 -1 scale (Step 1: First "pipe") gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 145 263 moveto 1 -1 scale (Step 2: Multiply temp matrix and matrix B) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 209 368 moveto 1 -1 scale (Step 3: First "roll") gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 201 472 moveto 1 -1 scale (Step 4: Second "pipe") gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 247 50 moveto 1 -1 scale (First 4 Steps of Pipe-Multiply-Roll on a 3x3 Mesh-Connected Machine)dup stringwidth pop 2 div neg 0 rmoveto gsave 0.000 rotate show grestore 1 -1 scale $F2psEnd %%EndDocument @endspecial 249 2373 a Fo(Figure)f(4.2)249 2411 y Fy(General)d(cro)o (wd)h(computati)o(on)p eop %%Page: 37 56 37 55 bop 249 251 a Fu(Basic)14 b(Programming)h(T)m(ec)o(hniques)1029 b(37)249 561 y Fs({Matrix)20 b(Multiplication)f(Using)i (Pipe-Multiply-Roll)d(Algorithm})249 669 y({Processor)i(0)h(starts)g (up)g(other)g(processes})249 723 y(if)g(\(<my)g(processor)f(number>)h (=)g(0\))h(then)336 777 y(for)f(i)h(:=)f(1)h(to)f(MeshDimension*MeshD)o (imens)o(ion)423 831 y(pvm_spawn\(<componen)o(t)e(name>,)i(.)g(.\))336 885 y(endfor)249 939 y(endif)249 1047 y(forall)g(processors)e(Pij,)i(0) h(<=)f(i,j)g(<)h(MeshDimension)336 1101 y(for)f(k)h(:=)f(0)h(to)f (MeshDimension-1)423 1155 y({Pipe.})423 1209 y(if)h(myrow)f(=)g (\(mycolumn+k\))e(mod)j(MeshDimension)511 1263 y({Send)e(A)i(to)f(all)g (Pxy,)g(x)h(=)g(myrow,)e(y)i(<>)f(mycolumn})511 1317 y(pvm_mcast\(\(Pxy,)d(x)k(=)f(myrow,)g(y)h(<>)f(mycolumn\),999\))423 1371 y(else)511 1425 y(pvm_recv\(999\))62 b({Receive)20 b(A})423 1479 y(endif)423 1587 y({Multiply.)42 b(Running)20 b(totals)h(maintained)f(in)h(C.})423 1641 y(Multiply\(A,B,C\))423 1748 y({Roll.})423 1802 y({Send)g(B)h(to)f(Pxy,)g(x)h(=)f(myrow-1,)f(y) i(=)g(mycolumn})423 1856 y(pvm_send\(\(Pxy,)d(x)j(=)f(myrow-1,)g(y)g(=) h(mycolumn\),888\))423 1910 y(pvm_recv\(888\))150 b({Receive)20 b(B})336 1964 y(endfor)249 2018 y(endfor)249 2155 y Fr(4.1.2)48 b(T)l(ree)15 b(Computations)249 2238 y FA(As)c(men)o(tioned)e(earlier,) h(tree)i(computations)c(t)o(ypically)h(exhibit)h(a)g(tree-lik)o(e)g (pro)q(cess)i(con)o(trol)e(struc-)249 2292 y(ture)k(whic)o(h)f(also)f (conforms)g(to)h(the)g(comm)o(unication)d(pattern)k(in)e(man)o(y)f (instances.)19 b(T)m(o)12 b(illustrate)249 2346 y(this)j(mo)q(del,)e(w) o(e)i(consider)h(a)f(parallel)e(sorting)i(algorithm)d(that)j(w)o(orks)g (as)g(follo)o(ws.)20 b(One)15 b(pro)q(cess)249 2400 y(\(the)k(man)o (ually)d(started)k(pro)q(cess)g(in)e(PVM\))h(p)q(ossesses)i(\(inputs)e (or)g(generates\))h(the)f(list)f(to)g(b)q(e)249 2454 y(sorted.)24 b(It)15 b(then)i(spa)o(wns)f(a)f(second)h(pro)q(cess)i (and)d(sends)i(it)e(half)f(the)i(list.)23 b(A)o(t)15 b(this)h(p)q(oin)o(t,)f(there)249 2508 y(are)i(t)o(w)o(o)f(pro)q (cesses)j(eac)o(h)e(of)e(whic)o(h)i(spa)o(wns)f(a)g(pro)q(cess)j(and)d (sends)h(them)f(one-half)f(of)h(their)h(al-)p eop %%Page: 38 57 38 56 bop 249 251 a Fu(38)1375 b(Chapter)13 b(4)249 507 y FA(ready)h(halv)o(ed)f(lists.)k(This)d(con)o(tin)o(ues)f(un)o(til)g (a)g(tree)h(of)f(appropriate)h(depth)g(is)f(constructed.)20 b(Eac)o(h)249 561 y(pro)q(cess)15 b(then)e(indep)q(enden)o(tly)h(sorts) g(its)f(p)q(ortion)f(of)h(the)g(list,)f(and)h(a)g(merge)f(phase)i (follo)o(ws)d(where)249 615 y(sorted)16 b(sublists)g(are)f(transmitted) f(up)o(w)o(ards)i(along)d(the)j(tree)g(edges,)g(with)f(in)o(termediate) f(merges)249 669 y(b)q(eing)i(done)g(at)f(eac)o(h)h(no)q(de.)24 b(This)16 b(algorithm)d(is)i(illustrativ)o(e)g(of)g(a)g(tree)i (computation)d(in)h(whic)o(h)249 723 y(the)j(w)o(orkload)e(is)g(kno)o (wn)h(in)g(adv)n(ance;)h(a)f(diagram)d(depicting)j(the)h(pro)q(cess)h (is)e(giv)o(en)f(in)h(Figure)249 777 y(4.3;)12 b(an)i(algorithmic)d (outline)j(is)f(giv)o(en)h(b)q(elo)o(w.)296 2035 y @beginspecial 50 @llx 0 @lly 626 @urx 467 @ury 3600 @rwi 2880 @rhi @setspecial %%BeginDocument: fig4.3.ps /$F2psDict 32 dict def $F2psDict begin $F2psDict /mtrx matrix put /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix } def newpath 0 0 0 0 0 1 DrawEllipse stroke end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 1 setlinecap 1 setlinejoin -7 28 translate 0.000000 467.000000 translate 0.900 -0.900 scale 1.000 setlinewidth % Polyline newpath 162 183 moveto 162 169 lineto 147 169 lineto 147 183 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 152 180 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 177 183 moveto 177 169 lineto 162 169 lineto 162 183 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 167 180 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 192 183 moveto 192 169 lineto 177 169 lineto 177 183 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 182 180 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 237 183 moveto 237 169 lineto 222 169 lineto 222 183 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 227 180 moveto 1 -1 scale (6) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 252 183 moveto 252 169 lineto 237 169 lineto 237 183 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 242 180 moveto 1 -1 scale (5) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 222 183 moveto 222 169 lineto 207 169 lineto 207 183 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 212 180 moveto 1 -1 scale (7) gsave 0.000 rotate show grestore 1 -1 scale 3.000 setlinewidth % Polyline newpath 207 183 moveto 207 169 lineto 192 169 lineto 192 183 lineto closepath stroke /Times-Roman findfont 14.000 scalefont setfont 197 180 moveto 1 -1 scale (4) gsave 0.000 rotate show grestore 1 -1 scale 1.000 setlinewidth % Polyline newpath 147 183 moveto 147 169 lineto 132 169 lineto 132 183 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 137 180 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale % Ellipse newpath 362 184 18 18 0 360 DrawEllipse stroke /Times-Roman findfont 14.000 scalefont setfont 359 189 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 162 222 moveto 162 208 lineto 147 208 lineto 147 222 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 152 219 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 177 222 moveto 177 208 lineto 162 208 lineto 162 222 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 167 219 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 192 222 moveto 192 208 lineto 177 208 lineto 177 222 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 182 219 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale 3.000 setlinewidth % Polyline newpath 207 222 moveto 207 208 lineto 192 208 lineto 192 222 lineto closepath stroke /Times-Roman findfont 14.000 scalefont setfont 197 219 moveto 1 -1 scale (4) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 222 222 moveto 222 208 lineto 207 208 lineto 207 222 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 212 219 moveto 1 -1 scale (5) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 237 222 moveto 237 208 lineto 222 208 lineto 222 222 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 227 219 moveto 1 -1 scale (6) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 252 222 moveto 252 208 lineto 237 208 lineto 237 222 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 242 219 moveto 1 -1 scale (7) gsave 0.000 rotate show grestore 1 -1 scale 1.000 setlinewidth % Polyline newpath 147 222 moveto 147 208 lineto 132 208 lineto 132 222 lineto closepath stroke /Times-Roman findfont 14.000 scalefont setfont 269 223 moveto 1 -1 scale (Stage 3) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 137 219 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale % Ellipse newpath 238 281 18 18 0 360 DrawEllipse stroke /Times-Roman findfont 14.000 scalefont setfont 235 286 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale 3.000 setlinewidth % Polyline newpath 96 284 moveto 96 270 lineto 81 270 lineto 81 284 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 86 281 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 111 284 moveto 111 270 lineto 96 270 lineto 96 284 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 101 281 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 127 284 moveto 127 270 lineto 112 270 lineto 112 284 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 117 281 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 142 284 moveto 142 270 lineto 127 270 lineto 127 284 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 132 281 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 160 285 moveto 1 -1 scale (Stage 3) gsave 0.000 rotate show grestore 1 -1 scale 1.000 setlinewidth % Ellipse newpath 351 352 18 18 0 360 DrawEllipse stroke /Times-Roman findfont 14.000 scalefont setfont 348 357 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale 3.000 setlinewidth % Polyline newpath 209 359 moveto 209 345 lineto 194 345 lineto 194 359 lineto closepath stroke /Times-Roman findfont 14.000 scalefont setfont 199 356 moveto 1 -1 scale (4) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 224 359 moveto 224 345 lineto 209 345 lineto 209 359 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 214 356 moveto 1 -1 scale (5) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 239 359 moveto 239 345 lineto 224 345 lineto 224 359 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 229 356 moveto 1 -1 scale (6) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 254 359 moveto 254 345 lineto 239 345 lineto 239 359 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 244 356 moveto 1 -1 scale (7) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 194 359 moveto 194 345 lineto 179 345 lineto 179 359 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 184 356 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 179 359 moveto 179 345 lineto 164 345 lineto 164 359 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 169 356 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 164 359 moveto 164 345 lineto 149 345 lineto 149 359 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 154 356 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 149 359 moveto 149 345 lineto 134 345 lineto 134 359 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 139 356 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale 1.000 setlinewidth % Polyline newpath 465 45 moveto 465 31 lineto 450 31 lineto 450 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 451 43 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 450 45 moveto 450 31 lineto 435 31 lineto 435 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 437 42 moveto 1 -1 scale (13) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 435 45 moveto 435 31 lineto 420 31 lineto 420 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 422 42 moveto 1 -1 scale (14) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 420 45 moveto 420 31 lineto 405 31 lineto 405 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 407 42 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 405 45 moveto 405 31 lineto 390 31 lineto 390 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 392 42 moveto 1 -1 scale (15) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 390 45 moveto 390 31 lineto 375 31 lineto 375 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 380 42 moveto 1 -1 scale (9) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 375 45 moveto 375 31 lineto 360 31 lineto 360 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 362 42 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 330 45 moveto 330 31 lineto 315 31 lineto 315 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 320 42 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 315 45 moveto 315 31 lineto 300 31 lineto 300 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 305 42 moveto 1 -1 scale (7) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 300 45 moveto 300 31 lineto 285 31 lineto 285 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 290 42 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 285 45 moveto 285 31 lineto 270 31 lineto 270 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 275 42 moveto 1 -1 scale (4) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 270 45 moveto 270 31 lineto 255 31 lineto 255 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 260 42 moveto 1 -1 scale (6) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 255 45 moveto 255 31 lineto 240 31 lineto 240 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 245 42 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 345 45 moveto 345 31 lineto 330 31 lineto 330 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 335 42 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale 3.000 setlinewidth % Polyline newpath 360 45 moveto 360 31 lineto 345 31 lineto 345 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 350 42 moveto 1 -1 scale (8) gsave 0.000 rotate show grestore 1 -1 scale 1.000 setlinewidth % Polyline newpath 240 45 moveto 240 31 lineto 225 31 lineto 225 45 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 229 42 moveto 1 -1 scale (5) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 330 79 moveto 330 65 lineto 315 65 lineto 315 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 320 76 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 315 79 moveto 315 65 lineto 300 65 lineto 300 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 305 76 moveto 1 -1 scale (7) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 300 79 moveto 300 65 lineto 285 65 lineto 285 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 290 76 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 285 79 moveto 285 65 lineto 270 65 lineto 270 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 275 76 moveto 1 -1 scale (4) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 270 79 moveto 270 65 lineto 255 65 lineto 255 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 260 76 moveto 1 -1 scale (6) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 255 79 moveto 255 65 lineto 240 65 lineto 240 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 245 76 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 345 79 moveto 345 65 lineto 330 65 lineto 330 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 335 76 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 375 79 moveto 375 65 lineto 360 65 lineto 360 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 362 76 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 390 79 moveto 390 65 lineto 375 65 lineto 375 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 380 76 moveto 1 -1 scale (9) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 405 79 moveto 405 65 lineto 390 65 lineto 390 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 392 76 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 435 79 moveto 435 65 lineto 420 65 lineto 420 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 422 76 moveto 1 -1 scale (15) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 450 79 moveto 450 65 lineto 435 65 lineto 435 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 437 76 moveto 1 -1 scale (13) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 465 79 moveto 465 65 lineto 450 65 lineto 450 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 451 77 moveto 1 -1 scale (14) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 240 79 moveto 240 65 lineto 225 65 lineto 225 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 229 76 moveto 1 -1 scale (5) gsave 0.000 rotate show grestore 1 -1 scale 3.000 setlinewidth % Polyline newpath 360 79 moveto 360 65 lineto 345 65 lineto 345 79 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 350 76 moveto 1 -1 scale (8) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 420 79 moveto 405 79 lineto 405 65 lineto 420 65 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 407 76 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale 1.000 setlinewidth % Ellipse newpath 580 57 18 18 0 360 DrawEllipse stroke /Times-Roman findfont 14.000 scalefont setfont 577 62 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 375 116 moveto 375 102 lineto 360 102 lineto 360 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 362 113 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 390 116 moveto 390 102 lineto 375 102 lineto 375 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 380 113 moveto 1 -1 scale (9) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 405 116 moveto 405 102 lineto 390 102 lineto 390 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 392 113 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale 3.000 setlinewidth % Polyline newpath 360 116 moveto 360 102 lineto 345 102 lineto 345 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 350 113 moveto 1 -1 scale (8) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 420 116 moveto 405 116 lineto 405 102 lineto 420 102 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 407 113 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 435 116 moveto 420 116 lineto 420 102 lineto 435 102 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 422 113 moveto 1 -1 scale (13) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 450 116 moveto 450 102 lineto 435 102 lineto 435 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 437 113 moveto 1 -1 scale (14) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 465 116 moveto 465 102 lineto 450 102 lineto 450 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 451 114 moveto 1 -1 scale (15) gsave 0.000 rotate show grestore 1 -1 scale 1.000 setlinewidth % Polyline newpath 330 116 moveto 330 102 lineto 315 102 lineto 315 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 320 113 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 315 116 moveto 315 102 lineto 300 102 lineto 300 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 305 113 moveto 1 -1 scale (7) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 300 116 moveto 300 102 lineto 285 102 lineto 285 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 290 113 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 285 116 moveto 285 102 lineto 270 102 lineto 270 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 275 113 moveto 1 -1 scale (4) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 270 116 moveto 270 102 lineto 255 102 lineto 255 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 260 113 moveto 1 -1 scale (6) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 255 116 moveto 255 102 lineto 240 102 lineto 240 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 245 113 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 345 116 moveto 345 102 lineto 330 102 lineto 330 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 335 113 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 240 116 moveto 240 102 lineto 225 102 lineto 225 116 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 229 113 moveto 1 -1 scale (5) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 483 117 moveto 1 -1 scale (Stage 3) gsave 0.000 rotate show grestore 1 -1 scale % Ellipse newpath 564 439 18 18 0 360 DrawEllipse stroke /Times-Roman findfont 14.000 scalefont setfont 561 444 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale 3.000 setlinewidth % Polyline newpath 565 290 moveto 565 276 lineto 550 276 lineto 550 290 lineto closepath stroke /Times-Roman findfont 14.000 scalefont setfont 554 288 moveto 1 -1 scale (9) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 596 290 moveto 596 276 lineto 581 276 lineto 581 290 lineto closepath stroke /Times-Roman findfont 14.000 scalefont setfont 582 288 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 580 290 moveto 580 276 lineto 565 276 lineto 565 290 lineto closepath stroke /Times-Roman findfont 14.000 scalefont setfont 566 288 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale 1.000 setlinewidth % Ellipse newpath 685 282 18 18 0 360 DrawEllipse stroke /Times-Roman findfont 14.000 scalefont setfont 682 287 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 616 290 moveto 1 -1 scale (Stage 3) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 333 442 moveto 333 428 lineto 318 428 lineto 318 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 323 439 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 318 442 moveto 318 428 lineto 303 428 lineto 303 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 308 439 moveto 1 -1 scale (7) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 303 442 moveto 303 428 lineto 288 428 lineto 288 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 293 439 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 288 442 moveto 288 428 lineto 273 428 lineto 273 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 278 439 moveto 1 -1 scale (4) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 273 442 moveto 273 428 lineto 258 428 lineto 258 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 263 439 moveto 1 -1 scale (6) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 258 442 moveto 258 428 lineto 243 428 lineto 243 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 248 439 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 348 442 moveto 348 428 lineto 333 428 lineto 333 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 338 439 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale 3.000 setlinewidth % Polyline newpath 438 442 moveto 423 442 lineto 423 428 lineto 438 428 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 425 439 moveto 1 -1 scale (13) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 453 442 moveto 453 428 lineto 438 428 lineto 438 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 440 439 moveto 1 -1 scale (14) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 468 442 moveto 468 428 lineto 453 428 lineto 453 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 454 440 moveto 1 -1 scale (15) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 305 496 moveto 305 482 lineto 290 482 lineto 290 496 lineto closepath stroke /Times-Roman findfont 14.000 scalefont setfont 295 493 moveto 1 -1 scale (4) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 320 496 moveto 320 482 lineto 305 482 lineto 305 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 310 493 moveto 1 -1 scale (5) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 335 496 moveto 335 482 lineto 320 482 lineto 320 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 325 493 moveto 1 -1 scale (6) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 350 496 moveto 350 482 lineto 335 482 lineto 335 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 340 493 moveto 1 -1 scale (7) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 290 496 moveto 290 482 lineto 275 482 lineto 275 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 280 493 moveto 1 -1 scale (3) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 275 496 moveto 275 482 lineto 260 482 lineto 260 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 265 493 moveto 1 -1 scale (2) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 260 496 moveto 260 482 lineto 245 482 lineto 245 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 250 493 moveto 1 -1 scale (1) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 245 496 moveto 245 482 lineto 230 482 lineto 230 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 235 493 moveto 1 -1 scale (0) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 442 496 moveto 427 496 lineto 427 482 lineto 442 482 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 429 493 moveto 1 -1 scale (13) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 457 496 moveto 457 482 lineto 442 482 lineto 442 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 444 493 moveto 1 -1 scale (14) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 472 496 moveto 472 482 lineto 457 482 lineto 457 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 458 494 moveto 1 -1 scale (15) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 393 442 moveto 393 428 lineto 378 428 lineto 378 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 380 439 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 408 442 moveto 408 428 lineto 393 428 lineto 393 442 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 395 439 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 382 496 moveto 382 482 lineto 367 482 lineto 367 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 372 493 moveto 1 -1 scale (9) gsave 0.000 rotate show grestore 1 -1 scale % Polyline newpath 397 496 moveto 397 482 lineto 382 482 lineto 382 496 lineto closepath stroke /Times-Roman findfont 12.000 scalefont setfont 384 493 moveto 1 -1 scale (10) gsave 0.000 rotate show grestore 1 -1 scale 2.000 setlinewidth % Polyline newpath 55 43 moveto 55 486 lineto stroke newpath 59.000 470.000 moveto 55.000 486.000 lineto 51.000 470.000 lineto stroke 1.000 setlinewidth % Polyline newpath 285 46 moveto 285 53 lineto 198 59 lineto 198 168 lineto stroke newpath 200.000 160.000 moveto 198.000 168.000 lineto 196.000 160.000 lineto stroke % Polyline newpath 162 183 moveto 162 192 lineto 111 200 lineto 111 268 lineto stroke newpath 113.000 260.000 moveto 111.000 268.000 lineto 109.000 260.000 lineto stroke % Polyline newpath 381 80 moveto 381 89 lineto 571 100 lineto 571 274 lineto stroke newpath 573.000 266.000 moveto 571.000 274.000 lineto 569.000 266.000 lineto stroke 3.000 setlinewidth % Polyline newpath 193 333 moveto 193 373 lineto stroke 1.000 setlinewidth % Polyline newpath 110 284 moveto 110 305 lineto 163 326 lineto 163 343 lineto stroke newpath 165.000 335.000 moveto 163.000 343.000 lineto 161.000 335.000 lineto stroke % Polyline newpath 572 290 moveto 572 316 lineto 385 387 lineto 385 426 lineto stroke newpath 387.000 418.000 moveto 385.000 426.000 lineto 383.000 418.000 lineto stroke % Polyline newpath 192 375 moveto 192 449 lineto 290 463 lineto 289 481 lineto stroke newpath 291.441 473.123 moveto 289.000 481.000 lineto 287.447 472.901 lineto stroke 3.000 setlinewidth % Polyline newpath 350 469 moveto 350 509 lineto stroke % Polyline newpath 362 413 moveto 362 453 lineto stroke 1.000 setlinewidth % Polyline newpath 243 442 moveto 243 428 lineto 228 428 lineto 228 442 lineto closepath stroke 3.000 setlinewidth % Polyline newpath 423 442 moveto 408 442 lineto 408 428 lineto 423 428 lineto closepath stroke % Polyline newpath 378 442 moveto 378 428 lineto 363 428 lineto 363 442 lineto closepath stroke % Polyline newpath 363 442 moveto 363 428 lineto 348 428 lineto 348 442 lineto closepath stroke % Polyline newpath 427 496 moveto 412 496 lineto 412 482 lineto 427 482 lineto closepath stroke % Polyline newpath 412 496 moveto 412 482 lineto 397 482 lineto 397 496 lineto closepath stroke % Polyline newpath 367 496 moveto 367 482 lineto 352 482 lineto 352 496 lineto closepath stroke % Polyline newpath 408 413 moveto 408 453 lineto stroke 1.000 setlinewidth [1 3.000000] 0 setdash % Polyline newpath 566 70 moveto 375 172 lineto stroke [] 0 setdash newpath 382.999 169.996 moveto 375.000 172.000 lineto 381.115 166.467 lineto stroke [1 3.000000] 0 setdash % Polyline newpath 347 193 moveto 253 270 lineto stroke [] 0 setdash newpath 260.456 266.478 moveto 253.000 270.000 lineto 257.921 263.383 lineto stroke [1 3.000000] 0 setdash % Polyline newpath 254 288 moveto 336 341 lineto stroke [] 0 setdash newpath 330.367 334.978 moveto 336.000 341.000 lineto 328.196 338.337 lineto stroke [1 3.000000] 0 setdash % Polyline newpath 585 75 moveto 676 267 lineto stroke [] 0 setdash newpath 674.381 258.914 moveto 676.000 267.000 lineto 670.766 260.627 lineto stroke [1 3.000000] 0 setdash % Polyline newpath 678 299 moveto 578 428 lineto stroke [] 0 setdash newpath 584.482 422.903 moveto 578.000 428.000 lineto 581.321 420.452 lineto stroke [1 3.000000] 0 setdash % Polyline newpath 366 361 moveto 550 429 lineto stroke [] 0 setdash newpath 543.189 424.351 moveto 550.000 429.000 lineto 541.803 428.103 lineto stroke /Times-Roman findfont 18.000 scalefont setfont 24 167 moveto 1 -1 scale (Time)dup stringwidth pop 2 div neg 0 rmoveto gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 269 184 moveto 1 -1 scale (Stage 2) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 271 360 moveto 1 -1 scale (Stage 4) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 483 46 moveto 1 -1 scale (Stage 1) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 483 80 moveto 1 -1 scale (Stage 2) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 488 494 moveto 1 -1 scale (Stage 5) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 232 439 moveto 1 -1 scale (5) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 14.000 scalefont setfont 486 443 moveto 1 -1 scale (Stage 4) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 410 439 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 353 439 moveto 1 -1 scale (8) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 414 493 moveto 1 -1 scale (12) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 399 493 moveto 1 -1 scale (11) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 357 493 moveto 1 -1 scale (8) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 12.000 scalefont setfont 365 439 moveto 1 -1 scale (9) gsave 0.000 rotate show grestore 1 -1 scale /Times-Roman findfont 18.000 scalefont setfont 345 549 moveto 1 -1 scale (Split-Sort-Merge Algorithm on Four-Node Hypercube)dup stringwidth pop 2 div neg 0 rmoveto gsave 0.000 rotate show grestore 1 -1 scale $F2psEnd %%EndDocument @endspecial 249 2097 a Fo(Figure)f(4.3)249 2135 y Fy(T)m (ree-computati)o(on)8 b(example)249 2332 y Fs({)22 b(Spawn)e(and)i (partition)e(list)g(based)h(on)h(a)f(broadcast)f(tree)h(pattern.)f(}) 249 2386 y(for)h(i)h(:=)f(1)h(to)f(N,)h(such)f(that)f(2^N)i(=)f (NumProcs)249 2440 y(forall)g(processors)e(P)j(such)f(that)g(P)g(<)h (2^i)249 2494 y(pvm_spawn\(...\))d({process)h(id)h(P)h(XOR)f(2^i})p eop %%Page: 39 58 39 57 bop 249 251 a Fu(Basic)14 b(Programming)h(T)m(ec)o(hniques)1029 b(39)249 507 y Fs(if)21 b(P)h(<)g(2^\(i-1\))e(then)249 561 y(midpt:)h(=)g(PartitionList\(list)o(\);)249 615 y({Send)g(list[0..midpt])e(to)i(P)h(XOR)f(2^i})249 669 y(pvm_send\(\(P)f(XOR)h(2^i\),999\))249 723 y(list)g(:=)g (list[midpt+1..MAXSI)o(ZE])249 777 y(else)249 831 y(pvm_recv\(999\))85 b({receive)20 b(the)h(list})249 885 y(endif)249 939 y(endfor)249 993 y(endfor)249 1101 y({)h(Sort)f(remaining)f(list.)g(})249 1155 y(Quicksort\(list[mid)o(pt+1.)o(.MAX)o(SIZE])o(\))249 1263 y({)i(Gather/merge)d(sorted)i(sub-lists.)e(})249 1317 y(for)i(i)h(:=)f(N)h(downto)e(1,)i(such)f(that)g(2^N)g(=)g (NumProcs)249 1371 y(forall)g(processors)e(P)j(such)f(that)g(P)g(<)h (2^i)249 1425 y(if)f(P)h(>)g(2^\(i-1\))e(then)249 1479 y(pvm_send\(\(P)g(XOR)h(2^i\),888\))249 1533 y({Send)g(list)g(to)g(P)h (XOR)f(2^i})249 1587 y(else)249 1641 y(pvm_recv\(888\))85 b({receive)20 b(temp)h(list})249 1694 y(merge)g(templist)f(into)h(list) 249 1748 y(endif)249 1802 y(endfor)249 1856 y(endfor)249 2031 y FD(4.2)52 b(W)l(orkload)18 b(Allo)q(cation)249 2139 y FA(In)11 b(the)h(preceding)g(section,)f(w)o(e)h(discussed)g(the) g(common)c(parallel)i(programming)d(paradigms)i(with)249 2193 y(resp)q(ect)18 b(to)d(pro)q(cess)i(structure,)g(and)e(w)o(e)h (outlined)e(represen)o(tativ)o(e)k(examples)c(in)h(the)h(con)o(text)g (of)249 2247 y(the)d(PVM)g(system.)k(In)12 b(this)g(section)h(w)o(e)g (address)g(the)g(issue)g(of)f(w)o(orkload)f(allo)q(cation,)f(subsequen) o(t)249 2301 y(to)16 b(establishing)h(pro)q(cess)h(structure,)h(and)d (describ)q(e)j(some)c(common)f(paradigms)h(that)h(are)h(used)249 2355 y(in)h(distributed-memory)e(parallel)g(computing.)29 b(Tw)o(o)18 b(general)g(metho)q(dologies)e(are)i(commonly)249 2408 y(used.)35 b(The)20 b(\014rst,)g(termed)g FB(data)g(de)n(c)n(omp)n (osition)f FA(or)g(partitioning,)g(assumes)g(that)g(the)h(o)o(v)o (erall)249 2462 y(problem)13 b(in)o(v)o(olv)o(es)h(applying)f (computational)f(op)q(erations)i(or)h(transformations)e(on)h(one)h(or)f (more)p eop %%Page: 40 59 40 58 bop 249 251 a Fu(40)1375 b(Chapter)13 b(4)249 507 y FA(data)k(structures)j(and,)e(further,)h(that)e(these)i(data)e (structures)j(ma)o(y)c(b)q(e)i(divided)f(and)g(op)q(erated)249 561 y(up)q(on.)29 b(The)18 b(second,)h(called)e FB(function)i(de)n(c)n (omp)n(osition)p FA(,)f(divides)f(the)h(w)o(ork)g(based)g(on)f (di\013eren)o(t)249 615 y(op)q(erations)e(or)g(functions.)21 b(In)15 b(a)f(sense,)i(the)g(PVM)f(computing)e(mo)q(del)g(supp)q(orts)j (b)q(oth)f(function)249 669 y(decomp)q(osition)d(\(fundamen)o(tally)e (di\013eren)o(t)k(tasks)g(p)q(erform)e(di\013eren)o(t)i(op)q (erations\))f(and)g(data)g(de-)249 723 y(comp)q(osition)f(\(iden)o (tical)h(tasks)i(op)q(erate)g(on)e(di\013eren)o(t)i(p)q(ortions)f(of)f (the)i(data\).)249 806 y Fr(4.2.1)48 b(Data)15 b(Decomp)q(osition)249 889 y FA(As)d(a)g(simple)e(example)h(of)g(data)h(decomp)q(osition,)e (consider)j(the)g(addition)d(of)i(t)o(w)o(o)f(v)o(ectors,)i(A[1..N])249 943 y(and)d(B[1..N],)e(to)i(pro)q(duce)i(the)f(result)g(v)o(ector,)g (C[1..N].)d(If)i(w)o(e)g(assume)g(that)g(P)h(pro)q(cesses)i(are)e(w)o (ork-)249 997 y(ing)16 b(on)g(this)h(problem,)e(data)h(partitioning)f (in)o(v)o(olv)o(es)h(the)h(allo)q(cation)e(of)h(N/P)g(elemen)o(ts)h(of) f(eac)o(h)249 1051 y(v)o(ector)e(to)e(eac)o(h)i(pro)q(cess,)g(whic)o(h) f(computes)f(the)i(corresp)q(onding)g(N/P)f(elemen)o(ts)f(of)g(the)i (resulting)249 1105 y(v)o(ector.)k(This)12 b(data)f(partitioning)f(ma)o (y)g(b)q(e)i(done)g(either)g(\\statically)m(,")e(where)j(eac)o(h)f(pro) q(cess)h(kno)o(ws)249 1159 y FB(a)k(priori)d FA(\(at)i(least)g(in)f (terms)h(of)f(the)h(v)n(ariables)f(N)h(and)g(P\))g(its)f(share)i(of)e (the)h(w)o(orkload,)f(or)h(\\dy-)249 1213 y(namically)m(,)o(")d(where)k (a)f(con)o(trol)f(pro)q(cess)j(\(e.g.,)d(the)i(master)e(pro)q(cess\))j (allo)q(cates)e(subunits)g(of)f(the)249 1267 y(w)o(orkload)f(to)h(pro)q (cesses)j(as)d(and)g(when)h(they)f(b)q(ecome)g(free.)23 b(The)15 b(principal)g(di\013erence)i(b)q(et)o(w)o(een)249 1321 y(these)g(t)o(w)o(o)e(approac)o(hes)h(is)f(\\sc)o(heduling.")23 b(With)15 b(static)g(sc)o(heduling,)h(individual)d(pro)q(cess)18 b(w)o(ork-)249 1375 y(loads)d(are)i(\014xed;)g(with)e(dynamic)f(sc)o (heduling,)i(they)h(v)n(ary)e(as)h(the)h(computation)d(progresses.)26 b(In)249 1429 y(most)12 b(m)o(ultipro)q(cessor)g(en)o(vironmen)o(ts,)g (static)h(sc)o(heduling)f(is)h(e\013ectiv)o(e)h(for)e(problems)g(suc)o (h)i(as)e(the)249 1483 y(v)o(ector)18 b(addition)e(example;)h(ho)o(w)o (ev)o(er,)g(in)g(the)h(general)f(PVM)g(en)o(vironmen)o(t,)g(static)g (sc)o(heduling)249 1537 y(is)d(not)g(necessarily)h(b)q(ene\014cial.)k (The)14 b(reason)h(is)e(that)h(PVM)h(en)o(vironmen)o(ts)e(based)i(on)e (net)o(w)o(ork)o(ed)249 1591 y(clusters)21 b(are)e(susceptible)i(to)e (external)h(in\015uences;)j(therefore,)e(a)e(statically)f(sc)o (heduled,)k(data-)249 1645 y(partitioned)14 b(problem)e(migh)o(t)g (encoun)o(ter)k(one)e(or)g(more)f(pro)q(cesses)k(that)d(complete)f (their)h(p)q(ortion)249 1699 y(of)h(the)h(w)o(orkload)f(m)o(uc)o(h)f (faster)j(or)e(m)o(uc)o(h)g(slo)o(w)o(er)g(than)h(the)g(others.)25 b(This)15 b(situation)g(could)h(also)249 1753 y(arise)g(when)g(the)h (mac)o(hines)d(in)i(a)f(PVM)h(system)g(are)g(heterogeneous,)h(p)q (ossessing)g(v)n(arying)e(CPU)249 1807 y(sp)q(eeds)h(and)e(di\013eren)o (t)g(memory)e(and)i(other)g(system)g(attributes.)291 1861 y(In)h(a)g(real)h(execution)g(of)f(ev)o(en)h(this)f(trivial)f(v)o (ector)j(addition)d(problem,)g(an)h(issue)h(that)g(cannot)249 1914 y(b)q(e)g(ignored)g(is)g(input)f(and)h(output.)24 b(In)16 b(other)g(w)o(ords,)g(ho)o(w)f(do)h(the)g(pro)q(cesses)j (describ)q(ed)e(ab)q(o)o(v)o(e)249 1968 y(receiv)o(e)i(their)e(w)o (orkloads,)g(and)g(what)g(do)g(they)g(do)g(with)g(the)h(result)g(v)o (ectors?)29 b(The)17 b(answ)o(er)h(to)249 2022 y(these)g(questions)g (dep)q(ends)h(on)d(the)i(application)d(and)i(the)h(circumstances)f(of)g (a)f(particular)h(run,)249 2076 y(but)d(in)g(general:)196 2151 y(1.)20 b(Individual)11 b(pro)q(cesses)k(generate)e(their)g(o)o (wn)f(data)g(in)o(ternally)m(,)e(for)i(example,)f(using)h(random)f(n)o (um-)249 2205 y(b)q(ers)19 b(or)e(statically)f(kno)o(wn)h(v)n(alues.)28 b(This)18 b(is)f(p)q(ossible)g(only)g(in)g(v)o(ery)g(sp)q(ecial)h (situations)f(or)g(for)249 2259 y(program)12 b(testing)j(purp)q(oses.) 196 2330 y(2.)20 b(Individual)13 b(pro)q(cesses)j(indep)q(enden)o(tly)f (input)f(their)g(data)g(subsets)i(from)c(external)j(devices.)k(This)249 2384 y(metho)q(d)c(is)i(meaningful)c(in)j(man)o(y)e(cases,)k(but)f(p)q (ossible)f(only)f(when)i(parallel)e(I/O)h(facilities)g(are)249 2438 y(supp)q(orted.)196 2508 y(3.)k(A)10 b(con)o(trolling)f(pro)q (cess)j(sends)g(individual)c(data)i(subsets)i(to)e(eac)o(h)h(pro)q (cess.)18 b(This)10 b(is)h(the)f(most)f(com-)p eop %%Page: 41 60 41 59 bop 249 251 a Fu(Basic)14 b(Programming)h(T)m(ec)o(hniques)1029 b(41)249 507 y FA(mon)13 b(scenario,)j(esp)q(ecially)f(when)h(parallel) d(I/O)j(facilities)d(do)i(not)g(exist.)22 b(F)m(urther,)16 b(this)f(metho)q(d)249 561 y(is)j(also)f(appropriate)h(when)g(input)g (data)f(subsets)j(are)e(deriv)o(ed)g(from)e(a)i(previous)g(computation) 249 615 y(within)13 b(the)i(same)e(application.)291 690 y(The)j(third)f(metho)q(d)g(of)g(allo)q(cating)f(individual)g(w)o (orkloads)h(is)g(also)h(consisten)o(t)g(with)g(dynamic)249 744 y(sc)o(heduling)f(in)f(applications)g(where)i(in)o(terpro)q(cess)h (in)o(teractions)e(during)f(computations)f(are)i(rare)249 798 y(or)e(nonexisten)o(t.)19 b(Ho)o(w)o(ev)o(er,)13 b(non)o(trivial)e(algorithms)g(generally)i(require)h(in)o(termediate)e (exc)o(hanges)249 852 y(of)g(data)f(v)n(alues,)h(and)g(therefore)h (only)f(the)g(initial)e(assignmen)o(t)h(of)h(data)g(partitions)f(can)i (b)q(e)f(accom-)249 906 y(plished)i(b)o(y)h(these)g(sc)o(hemes.)20 b(F)m(or)14 b(example,)f(consider)i(the)g(data)f(partitioning)f(metho)q (d)h(depicted)249 960 y(in)h(Figure)h(4.2.)23 b(In)16 b(order)g(to)g(m)o(ultiply)d(t)o(w)o(o)i(matrices)h(A)g(and)f(B,)h(a)f (group)h(of)f(pro)q(cesses)k(is)c(\014rst)249 1014 y(spa)o(wned,)j (using)g(the)g(master-sla)o(v)o(e)e(or)i(no)q(de-only)f(paradigm.)26 b(This)17 b(set)i(of)e(pro)q(cesses)j(is)d(con-)249 1068 y(sidered)h(to)e(form)f(a)h(mesh;)h(the)h(matrices)e(to)g(b)q(e)h(m)o (ultiplied)d(are)j(divided)f(in)o(to)g(subblo)q(c)o(ks,)i(also)249 1122 y(forming)12 b(a)h(mesh.)18 b(Eac)o(h)c(subblo)q(c)o(k)g(of)g(the) g(A)g(and)g(B)g(matrices)g(is)g(placed)g(on)g(the)g(corresp)q(onding) 249 1176 y(pro)q(cess,)19 b(b)o(y)e(utilizing)f(one)h(of)g(the)g(data)g (decomp)q(osition)f(and)h(w)o(orkload)e(allo)q(cation)h(strategies)249 1230 y(listed)11 b(ab)q(o)o(v)o(e.)17 b(During)10 b(computation,)g (subblo)q(c)o(ks)h(need)h(to)f(b)q(e)h(forw)o(arded)f(or)g(exc)o (hanged)h(b)q(et)o(w)o(een)249 1284 y(pro)q(cesses,)18 b(thereb)o(y)e(transforming)d(the)j(original)d(allo)q(cation)g(map,)g (as)j(sho)o(wn)f(in)f(the)i(\014gure.)22 b(A)o(t)249 1337 y(the)16 b(end)g(of)f(the)h(computation,)e(ho)o(w)o(ev)o(er,)h (result)h(matrix)e(subblo)q(c)o(ks)i(are)g(situated)g(on)f(the)h(indi-) 249 1391 y(vidual)c(pro)q(cesses,)j(in)e(conformance)f(with)g(their)i (resp)q(ectiv)o(e)g(p)q(ositions)f(on)g(the)g(pro)q(cess)i(grid,)d(and) 249 1445 y(consisten)o(t)j(with)f(a)g(data)g(partitioned)g(map)e(of)i (the)h(resulting)f(matrix)e(C.)i(The)g(foregoing)f(discus-)249 1499 y(sion)i(illustrates)g(the)h(basics)g(of)e(data)h(decomp)q (osition.)20 b(In)15 b(a)g(later)g(c)o(hapter,)h(example)e(programs)249 1553 y(highligh)o(ting)e(details)h(of)g(this)h(approac)o(h)g(will)f(b)q (e)h(presen)o(ted.)249 1636 y Fr(4.2.2)48 b(F)l(unction)13 b(Decomp)q(osition)249 1719 y FA(P)o(arallelism)f(in)i (distributed-memory)e(en)o(vironmen)o(ts)i(suc)o(h)h(as)g(PVM)g(ma)o(y) d(also)i(b)q(e)h(ac)o(hiev)o(ed)g(b)o(y)249 1773 y(partitioning)d(the)j (o)o(v)o(erall)d(w)o(orkload)h(in)g(terms)h(of)f(di\013eren)o(t)i(op)q (erations.)j(The)c(most)f(ob)o(vious)g(ex-)249 1827 y(ample)d(of)g (this)h(form)f(of)g(decomp)q(osition)g(is)h(with)g(resp)q(ect)i(to)f (the)f(three)i(stages)f(of)e(t)o(ypical)h(program)249 1881 y(execution,)i(namely)m(,)c(input,)j(pro)q(cessing,)h(and)e (result)i(output.)18 b(In)11 b(function)h(decomp)q(osition,)e(suc)o(h) 249 1935 y(an)h(application)e(ma)o(y)g(consist)i(of)f(three)i(separate) g(and)f(distinct)g(programs,)e(eac)o(h)j(one)f(dedicated)g(to)249 1989 y(one)i(of)f(the)h(three)h(phases.)k(P)o(arallelism)10 b(is)j(obtained)f(b)o(y)g(concurren)o(tly)i(executing)f(the)g(three)h (pro-)249 2043 y(grams)g(and)h(b)o(y)f(establishing)h(a)g(\\pip)q (eline")f(\(con)o(tin)o(uous)h(or)g(quan)o(tized\))g(b)q(et)o(w)o(een)i (them.)j(Note,)249 2097 y(ho)o(w)o(ev)o(er,)14 b(that)g(in)f(suc)o(h)i (a)f(scenario,)g(data)f(parallelism)f(ma)o(y)g(also)h(exist)h(within)g (eac)o(h)g(phase.)19 b(An)249 2151 y(example)d(is)g(sho)o(wn)h(in)g (Figure)g(2.1,)f(where)i(distinct)f(functions)g(are)h(realized)f(as)g (PVM)g(comp)q(o-)249 2205 y(nen)o(ts,)c(with)f(m)o(ultiple)e(instances) j(within)e(eac)o(h)i(comp)q(onen)o(t)f(implem)o(en)o(ting)d(p)q (ortions)k(of)e(di\013eren)o(t)249 2259 y(data)j(partitioned)f (algorithms.)291 2313 y(Although)18 b(the)i(concept)h(of)e(function)g (decomp)q(osition)e(is)j(illustrated)f(b)o(y)g(the)h(trivial)e(exam-) 249 2367 y(ple)d(ab)q(o)o(v)o(e,)f(the)h(term)f(is)h(generally)f(used)i (to)e(signify)g(partitioning)f(and)i(w)o(orkload)e(allo)q(cation)g(b)o (y)249 2421 y(function)k FB(within)f FA(the)i(computational)c(phase.)28 b(T)o(ypically)m(,)15 b(application)h(computations)f(con)o(tain)249 2475 y(sev)o(eral)j(di\013eren)o(t)g(subalgorithms|som)o(etim)o(es)d (on)i(the)h(same)e(data)h(\(the)h(MPSD)f(or)h(m)o(ultiple-)p eop %%Page: 42 61 42 60 bop 249 251 a Fu(42)1375 b(Chapter)13 b(4)249 507 y FA(program)18 b(single-data)h(scenario\),)i(sometimes)c(in)i(a)g(pip) q(elined)h(sequence)h(of)e(transformations,)249 561 y(and)c(sometimes)e (exhibiting)h(an)g(unstructured)k(pattern)d(of)f(exc)o(hanges.)22 b(W)m(e)15 b(illustrate)g(the)g(gen-)249 615 y(eral)j(functional)g (decomp)q(osition)f(paradigm)f(b)o(y)i(considering)g(the)h(h)o(yp)q (othetical)f(sim)o(ulation)e(of)249 669 y(an)g(aircraft)f(consisting)h (of)f(m)o(ultiple)f(in)o(terrelated)i(and)g(in)o(teracting,)g (functionally)e(decomp)q(osed)249 723 y(subalgorithms.)i(A)e(diagram)e (pro)o(viding)g(an)i(o)o(v)o(erview)g(of)f(this)h(example)e(is)i(sho)o (wn)g(in)f(Figure)h(4.4)249 777 y(\(and)g(will)e(also)i(b)q(e)g(used)h (in)e(a)h(later)g(c)o(hapter)h(dealing)e(with)g(graphical)g(PVM)i (programmi)o(ng\).)259 1737 y @beginspecial 113 @llx 224 @lly 500 @urx 568 @ury 3780 @rwi 2160 @rhi @setspecial %%BeginDocument: fig4.4.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 /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix } def end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 0 setlinecap 0 setlinejoin -34.5 652.0 translate 0.900 -0.900 scale 1.000 setlinewidth % Ellipse n 429 344 16 16 0 360 DrawEllipse gs col-1 s gr % Ellipse n 339 344 16 16 0 360 DrawEllipse gs col-1 s gr % Ellipse n 179 344 16 16 0 360 DrawEllipse gs col-1 s gr % Ellipse n 319 459 16 16 0 360 DrawEllipse gs col-1 s gr % Ellipse n 259 344 16 16 0 360 DrawEllipse gs col-1 s gr % Ellipse n 514 344 16 16 0 360 DrawEllipse gs col-1 s gr % Ellipse n 514 249 16 16 0 360 DrawEllipse gs col-1 s gr % Ellipse n 309 109 16 16 0 360 DrawEllipse gs col-1 s gr % Ellipse n 409 179 16 16 0 360 DrawEllipse gs col-1 s gr 0.500 setlinewidth % Polyline n 189 359 m 304 454 l gs col-1 s gr % Polyline n 264 359 m 309 449 l gs col-1 s gr % Polyline n 334 359 m 319 444 l gs col-1 s gr % Polyline n 419 359 m 329 449 l gs col-1 s gr % Polyline n 509 359 m 334 459 l gs col-1 s gr % Polyline n 514 264 m 514 329 l gs col-1 s gr % Polyline n 264 329 m 399 194 l gs col-1 s gr % Polyline n 259 329 m 309 124 l gs col-1 s gr % Polyline n 179 329 m 299 124 l gs col-1 s gr % Polyline n 324 119 m 394 169 l gs col-1 s gr % Polyline n 404 194 m 339 324 l gs col-1 s gr % Polyline n 409 194 m 429 334 l gs col-1 s gr % Polyline n 439 329 m 504 264 l gs col-1 s gr % Polyline n 504 329 m 414 194 l gs col-1 s gr % Polyline n 424 189 m 499 244 l gs col-1 s gr /Times-Roman findfont 12.00 scalefont setfont 309 114 m gs 1 -1 scale (9) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 404 184 m gs 1 -1 scale (8) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 509 254 m gs 1 -1 scale (7) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 509 349 m gs 1 -1 scale (6) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 419 349 m gs 1 -1 scale (5) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 334 349 m gs 1 -1 scale (4) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 254 349 m gs 1 -1 scale (3) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 174 354 m gs 1 -1 scale (2) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 314 464 m gs 1 -1 scale (1) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 329 119 m gs 1 -1 scale (flight_dynamics) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 429 189 m gs 1 -1 scale (control) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 539 259 m gs 1 -1 scale (atmosphere) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 199 354 m gs 1 -1 scale (tail ) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 279 359 m gs 1 -1 scale (body ) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 359 359 m gs 1 -1 scale (wing ) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 449 359 m gs 1 -1 scale (wing ) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 534 359 m gs 1 -1 scale (rudder) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 339 469 m gs 1 -1 scale (input_data) col-1 show gr showpage $F2psEnd %%EndDocument @endspecial 249 1800 a Fo(Figure)e(4.4)249 1837 y Fy(F)m(unction)d (decomp)q(osit)o(ion)e(example)291 1937 y FA(In)13 b(the)h(\014gure,)f (eac)o(h)h(no)q(de)g(or)f(circle)h(in)f(the)h(\\graph")f(represen)o(ts) j(a)d(functionally)f(decomp)q(osed)249 1991 y(piece)17 b(of)e(the)h(application.)22 b(The)16 b(input)f(function)g(distributes) i(the)f(particular)g(problem)e(param-)249 2045 y(eters)k(to)e(the)h (di\013eren)o(t)g(functions)g(2)e(through)i(6,)f(after)g(spa)o(wning)g (pro)q(cesses)j(corresp)q(onding)e(to)249 2099 y(distinct)f(programs)e (implemen)o(ting)f(eac)o(h)j(of)f(the)h(application)e(subalgorithms.)22 b(The)16 b(same)e(data)249 2153 y(ma)o(y)i(b)q(e)j(sen)o(t)g(to)f(m)o (ultiple)d(functions)j(\(e.g.,)g(as)h(in)e(the)i(case)g(of)e(the)i(t)o (w)o(o)e FB(wing)h FA(functions\),)h(or)249 2207 y(data)14 b(appropriate)h(for)g(the)g(giv)o(en)f(function)h(alone)f(ma)o(y)f(b)q (e)i(deliv)o(ered.)21 b(After)16 b(p)q(erforming)d(some)249 2261 y(amoun)o(t)e(of)h(computations)f(these)j(functions)f(deliv)o(er)f (in)o(termediate)g(or)h(\014nal)f(results)i(to)e(functions)249 2315 y(7,)f(8,)g(and)g(9)f(that)h(ma)o(y)e(ha)o(v)o(e)i(b)q(een)h(spa)o (wned)g(at)f(the)g(b)q(eginning)g(of)f(the)i(computation)d(or)i(as)g (results)249 2368 y(b)q(ecome)16 b(a)o(v)n(ailable.)k(The)c(diagram)e (indicates)i(the)g(primary)e(concept)j(of)e(decomp)q(osing)f(applica-) 249 2422 y(tions)i(b)o(y)g(function,)g(as)g(w)o(ell)g(as)g(con)o(trol)g (and)g(data)g(dep)q(endency)i(relationships.)25 b(P)o(arallelism)13 b(is)249 2476 y(ac)o(hiev)o(ed)k(in)f(t)o(w)o(o)g(resp)q(ects|b)o(y)j (the)e(concurren)o(t)h(and)e(indep)q(enden)o(t)i(execution)g(of)d(mo)q (dules)h(as)p eop %%Page: 43 62 43 61 bop 249 251 a Fu(Basic)14 b(Programming)h(T)m(ec)o(hniques)1029 b(43)249 507 y FA(in)14 b(functions)g(2)g(through)g(6,)g(and)g(b)o(y)f (the)i(sim)o(ultaneous,)d(pip)q(elined,)i(execution)h(of)f(mo)q(dules)f (in)g(a)249 561 y(dep)q(endency)j(c)o(hain,)d(as,)h(for)f(example,)f (in)i(functions)g(1,)f(6,)g(8,)g(and)h(9.)249 682 y FD(4.3)52 b(P)o(orting)18 b(Existing)g(Applications)h(to)f(PVM)249 790 y FA(In)d(order)i(to)e(utilize)g(the)h(PVM)f(system,)g (applications)g(m)o(ust)f(ev)o(olv)o(e)h(through)g(t)o(w)o(o)g(stages.) 24 b(The)249 844 y(\014rst)15 b(concerns)g(dev)o(elopmen)o(t)e(of)g (the)i(distributed-memory)c(parallel)i(v)o(ersion)h(of)f(the)h (application)249 897 y(algorithm\(s\);)f(this)h(phase)i(is)e(common)e (to)j(the)g(PVM)g(system)f(as)h(w)o(ell)f(as)h(to)f(other)i (distributed-)249 951 y(memory)e(m)o(ultipro)q(cessors.)25 b(The)17 b(actual)f(parallelization)e(decisions)j(fall)e(in)o(to)g(t)o (w)o(o)h(ma)r(jor)e(cate-)249 1005 y(gories)i({)g(those)h(related)f(to) g(structure,)i(and)e(those)h(related)g(to)e(e\016ciency)m(.)25 b(F)m(or)16 b(structural)h(deci-)249 1059 y(sions)e(in)f(parallelizing) f(applications,)h(the)h(ma)r(jor)f(decisions)h(to)g(b)q(e)g(made)f (include)h(the)g(c)o(hoice)h(of)249 1113 y(mo)q(del)f(to)i(b)q(e)g (used)h(\(i.e.,)e(cro)o(wd)h(computation)e(vs.)26 b(tree)18 b(computation)d(and)i(data)f(decomp)q(osi-)249 1167 y(tion)d(vs.)18 b(function)13 b(decomp)q(osition\).)k(Decisions)d(with)f(resp)q(ect)i (to)f(e\016ciency)g(when)g(parallelizing)249 1221 y(for)h (distributed-memory)e(en)o(vironmen)o(ts)h(are)i(generally)e(orien)o (ted)i(to)o(w)o(ard)f(minim)o(i)o(zing)d(the)k(fre-)249 1275 y(quency)k(and)e(v)o(olume)f(of)h(comm)o(unicatio)o(ns.)30 b(It)19 b(is)g(t)o(ypically)e(in)h(this)h(latter)g(resp)q(ect)i(that)d (the)249 1329 y(parallelization)f(pro)q(cess)j(di\013ers)g(for)e(PVM)i (and)e(hardw)o(are)h(m)o(ultipro)q(cessors;)i(for)d(PVM)h(en)o(vi-)249 1383 y(ronmen)o(ts)f(based)h(on)g(net)o(w)o(orks,)h(large)e(gran)o (ularit)o(y)f(generally)h(leads)h(to)f(b)q(etter)j(p)q(erformance.)249 1437 y(With)12 b(this)h(quali\014cation,)f(the)h(parallelization)e(pro) q(cess)k(is)e(v)o(ery)g(similar)e(for)i(PVM)g(and)g(for)f(other)249 1491 y(distributed-memory)g(en)o(vironmen)o(ts,)h(including)g(hardw)o (are)h(m)o(ultipro)q(cessors.)291 1545 y(The)20 b(parallelization)d(of) i(applications)g(ma)o(y)f(b)q(e)i(done)g FB(ab)h(initio)p FA(,)f(from)e(existing)h(sequen)o(tial)249 1599 y(v)o(ersions,)13 b(or)g(from)e(existing)h(parallel)g(v)o(ersions.)18 b(In)13 b(the)g(\014rst)h(t)o(w)o(o)e(cases,)i(the)g(stages)f(in)o(v)o(olv)o (ed)f(are)249 1653 y(to)17 b(select)h(an)f(appropriate)g(algorithm)e (for)h(eac)o(h)i(of)e(the)i(subtasks)g(in)e(the)i(application,)e (usually)249 1707 y(from)c(published)h(descriptions)i(or)e(b)o(y)g(in)o (v)o(en)o(ting)g(a)g(parallel)f(algorithm,)f(and)i(to)g(then)h(co)q(de) h(these)249 1761 y(algorithms)8 b(in)i(the)g(language)f(of)h(c)o(hoice) h(\(C,)e(C++,)i(or)f(F)m(ortran)g(77)g(for)g(PVM\))g(and)g(in)o (terface)h(them)249 1815 y(with)f(eac)o(h)i(other)f(as)g(w)o(ell)f(as)h (with)f(pro)q(cess)j(managemen)o(t)8 b(and)j(other)g(constructs.)19 b(P)o(arallelization)249 1869 y(from)10 b(existing)i(sequen)o(tial)h (programs)e(also)g(follo)o(ws)g(certain)h(general)h(guidelines,)f (primary)e(among)249 1923 y(whic)o(h)15 b(are)g(to)f(decomp)q(ose)h(lo) q(ops,)f(b)q(eginning)g(with)g(outermost)g(lo)q(ops)g(and)h(w)o(orking) e(in)o(w)o(ard.)20 b(In)249 1977 y(this)f(pro)q(cess,)j(the)e(main)d (concern)k(is)e(to)g(detect)h(dep)q(endencies)i(and)d(to)g(partition)g (lo)q(ops)f(suc)o(h)249 2031 y(that)c(the)g(dep)q(endencies)i(are)e (preserv)o(ed)i(while)d(allo)o(wing)f(for)h(concurrency)m(.)19 b(This)14 b(parallelization)249 2085 y(pro)q(cess)i(is)e(describ)q(ed)h (in)f(n)o(umerous)f(textb)q(o)q(oks)i(and)f(pap)q(ers)h(on)e(parallel)g (computing,)f(although)249 2139 y(few)20 b(textb)q(o)q(oks)h(discuss)g (the)g(practical)f(and)g(sp)q(eci\014c)i(asp)q(ects)f(of)f (transforming)e(a)i(sequen)o(tial)249 2193 y(program)12 b(to)i(a)g(parallel)e(one.)291 2247 y(Existing)c(parallel)g(programs)g (ma)o(y)g(b)q(e)i(based)g(up)q(on)f(either)h(the)g(shared-memory)e(or)h (distributed-)249 2301 y(memory)i(paradigms.)16 b(Con)o(v)o(erting)d (existing)h(shared-memory)e(programs)g(to)i(PVM)g(is)f(similar)e(to)249 2355 y(con)o(v)o(erting)g(from)d(sequen)o(tial)j(co)q(de,)g(when)g(the) g(shared-memory)e(v)o(ersions)i(are)g(based)g(up)q(on)f(v)o(ector)249 2408 y(or)16 b(lo)q(op-lev)o(el)e(parallelism.)20 b(In)c(the)g(case)h (of)e(explicit)g(shared)h(memory)d(programs,)i(the)h(primary)249 2462 y(task)c(is)g(to)g(lo)q(cate)h(sync)o(hronization)f(p)q(oin)o(ts)g (and)g(replace)h(these)g(with)f(message)g(passing.)17 b(In)12 b(order)p eop %%Page: 44 63 44 62 bop 249 251 a Fu(44)1375 b(Chapter)13 b(4)249 507 y FA(to)e(con)o(v)o(ert)h(existing)f(distributed-memory)e(parallel)h (co)q(de)i(to)f(PVM,)g(the)g(main)e(task)i(is)g(to)g(con)o(v)o(ert)249 561 y(from)h(one)i(set)h(of)e(concurrency)j(constructs)f(to)f(another.) k(T)o(ypically)m(,)12 b(existing)h(distributed)i(mem-)249 615 y(ory)d(parallel)e(programs)h(are)h(written)g(either)g(for)g(hardw) o(are)g(m)o(ultipro)q(cessors)g(or)f(other)h(net)o(w)o(ork)o(ed)249 669 y(en)o(vironmen)o(ts)h(suc)o(h)g(as)h(p4)f(or)g(Express.)19 b(In)13 b(b)q(oth)g(cases,)i(the)e(ma)r(jor)f(c)o(hanges)i(required)g (are)f(with)249 723 y(regard)j(to)f(pro)q(cess)i(managemen)o(t.)i(F)m (or)c(example,)f(in)g(the)i(In)o(tel)f(family)e(of)h(DMMPs,)i(it)e(is)h (com-)249 777 y(mon)10 b(for)h(pro)q(cesses)j(to)d(b)q(e)h(started)g (from)e(an)h(in)o(teractiv)o(e)h(shell)f(command)e(line.)16 b(Suc)o(h)c(a)f(paradigm)249 831 y(should)k(b)q(e)h(replaced)g(for)f (PVM)h(b)o(y)f(either)h(a)f(master)f(program)g(or)h(a)g(no)q(de)h (program)d(that)j(tak)o(es)249 885 y(resp)q(onsibilit)o(y)f(for)g(pro)q (cess)j(spa)o(wning.)k(With)15 b(regard)h(to)f(in)o(teraction,)h(there) g(is,)g(fortunately)m(,)e(a)249 939 y(great)19 b(deal)f(of)f(commonali) o(t)o(y)e(b)q(et)o(w)o(een)20 b(the)f(message-passing)f(calls)f(in)h(v) n(arious)g(programmi)o(ng)249 993 y(en)o(vironmen)o(ts.)26 b(The)17 b(ma)r(jor)e(di\013erences)k(b)q(et)o(w)o(een)f(PVM)f(and)f (other)i(systems)e(in)h(this)f(con)o(text)249 1047 y(are)f(with)f (regard)h(to)f(\(a\))g(pro)q(cess)i(managemen)o(t)c(and)i(pro)q(cess)j (addressing)e(sc)o(hemes;)f(\(b\))h(virtual)249 1101 y(mac)o(hine)c(con\014guration/recon\014guration)i(and)f(its)g(impact)f (on)i(executing)g(applications;)e(\(c\))j(het-)249 1155 y(erogeneit)o(y)k(in)f(messages)g(as)g(w)o(ell)g(as)g(the)h(asp)q(ect)g (of)f(heterogeneit)o(y)i(that)e(deals)g(with)g(di\013eren)o(t)249 1209 y(arc)o(hitectures)h(and)e(data)f(represen)o(tations;)k(and)c (\(d\))h(certain)h(unique)f(and)f(sp)q(ecialized)i(features)249 1263 y(suc)o(h)e(as)f(signaling,)d(and)j(task)g(sc)o(heduling)g(metho)q (ds.)p eop %%Page: 45 64 45 63 bop 249 325 a Fp(5)25 b FD(PVM)16 b(User)h(In)o(terface)249 561 y FA(In)h(this)g(c)o(hapter)g(w)o(e)g(giv)o(e)f(a)h(brief)g (description)g(of)f(the)h(routines)h(in)e(the)h(PVM)g(3)g(user)h (library)m(.)249 615 y(This)c(c)o(hapter)i(is)e(organized)h(b)o(y)f (the)h(functions)g(of)f(the)h(routines.)23 b(F)m(or)15 b(example,)f(in)h(the)h(section)249 669 y(on)i FB(Message)i(Passing)f FA(is)f(a)g(discussion)h(of)f(all)f(the)i(routines)g(for)g(sending)f (and)h(receiving)f(data)249 723 y(from)e(one)j(PVM)f(task)g(to)g (another)g(and)g(a)g(description)h(of)e(PVM's)h(message)g(passing)g (options.)249 777 y(The)c(calling)e(syn)o(tax)i(of)f(the)h(C)f(and)h(F) m(ortran)f(PVM)h(routines)g(are)g(highligh)o(ted)e(b)o(y)h(b)q(o)o(xes) h(in)g(eac)o(h)249 831 y(section.)291 885 y(An)d(alphab)q(etical)f (listing)h(of)f(all)g(the)i(routines)g(is)f(giv)o(en)g(in)g(App)q (endix)h(B.)f(App)q(endix)g(B)h(con)o(tains)249 939 y(a)j(detailed)f (description)i(of)e(eac)o(h)i(routine,)f(including)e(a)i(description)h (of)e(eac)o(h)h(argumen)o(t)f(in)h(eac)o(h)249 993 y(routine,)g(the)h (p)q(ossible)f(error)h(co)q(des)g(a)f(routine)g(ma)o(y)e(return,)j(and) f(the)h(p)q(ossible)f(reasons)h(for)e(the)249 1047 y(error.)19 b(Eac)o(h)14 b(listing)f(also)g(includes)i(examples)e(of)g(b)q(oth)h(C) g(and)f(F)m(ortran)h(use.)291 1101 y(In)g(PVM)i(3)e(all)g(PVM)h(tasks)g (are)g(iden)o(ti\014ed)g(b)o(y)g(an)g(in)o(teger)g(supplied)g(b)o(y)f (the)i(lo)q(cal)e(p)o(vmd.)19 b(In)249 1155 y(the)e(follo)o(wing)d (descriptions)k(this)e(task)h(iden)o(ti\014er)g(is)f(called)g(TID.)g (It)g(is)h(similar)d(to)i(the)h(pro)q(cess)249 1209 y(ID)d(\(PID\))g (used)h(in)e(the)i(Unix)f(system)g(and)f(is)h(assumed)g(to)g(b)q(e)h (opaque)f(to)f(the)i(user,)g(in)e(that)h(the)249 1263 y(v)n(alue)h(of)f(the)i(TID)f(has)g(no)g(sp)q(ecial)g(signi\014cance)h (to)f(him.)20 b(In)15 b(fact,)g(PVM)g(enco)q(des)i(information)249 1317 y(in)o(to)d(the)h(TID)f(for)g(its)h(o)o(wn)f(in)o(ternal)g(use.)20 b(Details)14 b(of)g(this)h(enco)q(ding)f(can)h(b)q(e)g(found)f(in)g (Chapter)249 1371 y(7.)291 1425 y(All)c(the)i(PVM)g(routines)g(are)g (written)g(in)f(C.)g(C++)h(applications)e(can)i(link)e(to)i(the)g(PVM)g (library)m(.)249 1479 y(F)m(ortran)g(applications)g(can)h(call)e(these) j(routines)f(through)g(a)f(F)m(ortran)h(77)f(in)o(terface)h(supplied)f (with)249 1533 y(the)h(PVM)g(3)f(source.)18 b(This)12 b(in)o(terface)h(translates)g(argumen)o(ts,)f(whic)o(h)g(are)g(passed)i (b)o(y)e(reference)i(in)249 1587 y(F)m(ortran,)f(to)h(their)g(v)n (alues)f(if)g(needed)i(b)o(y)f(the)g(underlying)f(C)h(routines.)k(The)c (in)o(terface)h(also)e(tak)o(es)249 1641 y(in)o(to)d(accoun)o(t)h(F)m (ortran)f(c)o(haracter)i(string)f(represen)o(tations)h(and)f(the)g(v)n (arious)f(naming)e(con)o(v)o(en)o(tions)249 1694 y(that)14 b(di\013eren)o(t)h(F)m(ortran)f(compilers)e(use)j(to)f(call)f(C)h (functions.)291 1748 y(The)j(PVM)h(comm)o(unication)c(mo)q(del)i (assumes)h(that)h(an)o(y)f(task)g(can)h(send)g(a)f(message)g(to)h(an)o (y)249 1802 y(other)13 b(PVM)f(task)g(and)f(that)h(there)h(is)f(no)g (limit)d(to)j(the)g(size)h(or)e(n)o(um)o(b)q(er)h(of)f(suc)o(h)h (messages.)18 b(While)249 1856 y(all)10 b(hosts)i(ha)o(v)o(e)f(ph)o (ysical)g(memory)e(limitati)o(ons)g(that)i(limits)e(p)q(oten)o(tial)i (bu\013er)h(space,)g(the)g(comm)o(u-)249 1910 y(nication)h(mo)q(del)f (do)q(es)j(not)e(restrict)j(itself)d(to)h(a)f(particular)h(mac)o (hine's)e(limitatio)o(ns)g(and)h(assumes)249 1964 y(su\016cien)o(t)j (memory)c(is)k(a)o(v)n(ailable.)j(The)d(PVM)g(comm)o(uni)o(cation)c(mo) q(del)i(pro)o(vides)h(async)o(hronous)249 2018 y(blo)q(c)o(king)e (send,)h(async)o(hronous)h(blo)q(c)o(king)d(receiv)o(e,)j(and)f(non)o (blo)q(c)o(king)e(receiv)o(e)j(functions.)j(In)c(our)249 2072 y(terminology)m(,)i(a)i(blo)q(c)o(king)f(send)i(returns)h(as)e(so) q(on)g(as)g(the)h(send)g(bu\013er)g(is)f(free)h(for)f(reuse,)i(and)249 2126 y(an)14 b(async)o(hronous)g(send)h(do)q(es)f(not)g(dep)q(end)h(on) e(the)h(receiv)o(er)i(calling)c(a)h(matc)o(hing)f(receiv)o(e)j(b)q (efore)249 2180 y(the)g(send)g(can)g(return.)20 b(There)15 b(are)g(options)f(in)g(PVM)g(3)g(that)g(request)i(that)f(data)e(b)q(e)i (transferred)249 2234 y(directly)i(from)f(task)h(to)f(task.)28 b(In)17 b(this)g(case,)h(if)e(the)i(message)e(is)h(large,)g(the)h (sender)g(ma)o(y)d(blo)q(c)o(k)249 2288 y(un)o(til)e(the)i(receiv)o(er) g(has)f(called)g(a)f(matc)o(hing)f(receiv)o(e.)p eop %%Page: 46 65 46 64 bop 249 251 a Fu(46)1375 b(Chapter)13 b(5)291 507 y FA(A)f(non)o(blo)q(c)o(king)f(receiv)o(e)i(immediately)c(returns)14 b(with)e(either)h(the)g(data)e(or)i(a)f(\015ag)f(that)i(the)f(data)249 561 y(has)18 b(not)f(arriv)o(ed,)h(while)g(a)f(blo)q(c)o(king)f(receiv) o(e)j(returns)h(only)c(when)i(the)h(data)e(is)g(in)h(the)g(receiv)o(e) 249 615 y(bu\013er.)h(In)12 b(addition)g(to)g(these)i(p)q(oin)o(t-to-p) q(oin)o(t)d(comm)o(unication)e(functions,)k(the)g(mo)q(del)e(supp)q (orts)249 669 y(m)o(ulticast)g(to)h(a)g(set)i(of)e(tasks)h(and)f (broadcast)h(to)f(a)g(user-de\014ned)j(group)d(of)g(tasks.)18 b(There)c(are)f(also)249 723 y(functions)i(to)g(p)q(erform)f(global)f (max,)g(global)g(sum,)h(etc.,)h(across)h(a)f(user-de\014ned)i(group)e (of)f(tasks.)249 777 y(Wildcards)e(can)g(b)q(e)g(sp)q(eci\014ed)i(in)d (the)h(receiv)o(e)i(for)d(the)i(source)g(and)f(lab)q(el,)f(allo)o(wing) e(either)k(or)f(b)q(oth)249 831 y(of)17 b(these)i(con)o(texts)g(to)e(b) q(e)h(ignored.)29 b(A)18 b(routine)g(can)g(b)q(e)g(called)f(to)h (return)g(information)d(ab)q(out)249 885 y(receiv)o(ed)g(messages.)291 939 y(The)f(PVM)h(mo)q(del)d(guaran)o(tees)j(that)f(message)g(order)h (is)f(preserv)o(ed.)20 b(If)14 b(task)g(1)g(sends)h(message)249 993 y(A)j(to)g(task)h(2,)f(then)h(task)f(1)g(sends)i(message)e(B)g(to)g (task)g(2,)h(message)f(A)g(will)f(arriv)o(e)h(at)g(task)g(2)249 1047 y(b)q(efore)c(message)f(B.)g(Moreo)o(v)o(er,)h(if)e(b)q(oth)i (messages)f(arriv)o(e)g(b)q(efore)i(task)e(2)g(do)q(es)h(a)f(receiv)o (e,)h(then)g(a)249 1101 y(wildcard)g(receiv)o(e)h(will)d(alw)o(a)o(ys)h (return)i(message)f(A.)291 1155 y(Message)f(bu\013ers)g(are)g(allo)q (cated)e(dynamically)m(.)j(Therefore,)g(the)e(maxim)o(um)7 b(message)12 b(size)h(that)249 1209 y(can)e(b)q(e)g(sen)o(t)h(or)e (receiv)o(ed)i(is)e(limited)f(only)h(b)o(y)g(the)h(amoun)o(t)e(of)h(a)o (v)n(ailable)e(memory)g(on)j(a)f(giv)o(en)g(host.)249 1263 y(There)17 b(is)e(only)g(limited)f(\015o)o(w)h(con)o(trol)h(built) e(in)o(to)h(PVM)i(3.3.)22 b(PVM)16 b(ma)o(y)e(giv)o(e)h(the)h(user)h(a) e FB(c)n(an)l('t)249 1317 y(get)e(memory)f FA(error)h(when)f(the)h(sum) e(of)g(incoming)f(messages)i(exceeds)i(the)e(a)o(v)n(ailable)e(memory)m (,)f(but)249 1371 y(PVM)14 b(do)q(es)h(not)f(tell)f(other)i(tasks)f(to) g(stop)g(sending)g(to)g(this)g(host.)249 1491 y FD(5.1)52 b(Pro)q(cess)17 b(Con)o(trol)p 249 1551 633 2 v 248 1605 2 54 v 274 1589 a Fs(int)k(tid)g(=)h(pvm)p 561 1589 14 2 v 15 w(mytid\()f(void)f(\))p 880 1605 2 54 v 248 1659 V 274 1643 a(call)h(pvmfmytid\()f(tid)h(\))p 880 1659 V 249 1660 633 2 v 291 1756 a FA(The)16 b(routine)h(p)o(vm)p 606 1756 13 2 v 13 w(m)o(ytid\(\))e(returns)j(the)f Fs(TID)e FA(of)h(this)g(pro)q(cess)j(and)d(can)g(b)q(e)h(called)f(m)o(ultiple) 249 1810 y(times.)21 b(It)15 b(enrolls)g(this)g(pro)q(cess)i(in)o(to)d (PVM)i(if)e(this)h(is)g(the)h(\014rst)g(PVM)f(call.)21 b(An)o(y)15 b(PVM)g(system)249 1864 y(call)d(\(not)h(just)h(p)o(vm)p 577 1864 V 13 w(m)o(ytid\))d(will)h(enroll)h(a)f(task)h(in)g(PVM)h(if)e (the)h(task)h(is)f(not)g(enrolled)g(b)q(efore)g(the)249 1918 y(call,)g(but)h(it)f(is)h(common)d(practice)k(to)f(call)f(p)o(vm)p 1028 1918 V 13 w(m)o(ytid)f(\014rst)j(to)f(p)q(erform)f(the)h (enrolling.)p 249 1992 633 2 v 248 2045 2 54 v 274 2029 a Fs(int)21 b(info)g(=)h(pvm)p 583 2029 14 2 v 15 w(exit\()f(void)f(\)) p 880 2045 2 54 v 248 2099 V 274 2083 a(call)h(pvmfexit\()f(info)h(\))p 880 2099 V 249 2101 633 2 v 291 2196 a FA(The)c(routine)g(p)o(vm)p 607 2196 13 2 v 14 w(exit\(\))g(tells)g(the)h(lo)q(cal)e(p)o(vmd)g (that)h(this)g(pro)q(cess)i(is)e(lea)o(ving)f(PVM.)h(This)249 2250 y(routine)c(do)q(es)g(not)g(kill)e(the)i(pro)q(cess,)h(whic)o(h)e (can)h(con)o(tin)o(ue)g(to)f(p)q(erform)g(tasks)h(just)g(lik)o(e)e(an)o (y)h(other)249 2304 y(UNIX)k(pro)q(cess.)25 b(Users)17 b(t)o(ypically)d(call)h(p)o(vm)p 984 2304 V 13 w(exit)g(righ)o(t)g(b)q (efore)i(exiting)e(their)g(C)h(programs)e(and)249 2358 y(righ)o(t)f(b)q(efore)i Fs(STOP)e FA(in)h(their)g(F)m(ortran)g (programs.)p eop %%Page: 47 66 47 65 bop 249 251 a Fu(PVM)13 b(User)g(In)o(terface)1218 b(47)p 263 467 1314 2 v 262 521 2 54 v 288 505 a Fs(int)21 b(numt)g(=)h(pvm)p 597 505 14 2 v 15 w(spawn\()48 b(char)21 b(*task,)g(char)g(**argv,)f(int)h(flag,)p 1576 521 2 54 v 262 575 V 789 559 a(char)g(*where,)f(int)i(ntask,)e(int)h(*tids)g (\))p 1576 575 V 262 629 V 288 613 a(call)g(pvmfspawn\()e(task,)i (flag,)g(where,)g(ntask,)f(tids,)h(numt)g(\))p 1576 629 V 263 631 1314 2 v 291 786 a FA(The)d(routine)h(p)o(vm)p 610 786 13 2 v 13 w(spa)o(wn\(\))g(starts)h(up)e Fs(ntask)g FA(copies)h(of)e(an)i(executable)g(\014le)g Fs(task)e FA(on)h(the)249 840 y(virtual)f(mac)o(hine.)27 b Fs(argv)17 b FA(is)g(a)g(p)q(oin)o(ter)h(to)f(an)g(arra)o(y)g(of)g(argumen)o(ts)g (to)g Fs(task)g FA(with)g(the)h(end)g(of)249 894 y(the)c(arra)o(y)f(sp) q(eci\014ed)i(b)o(y)e(NULL.)g(If)g(task)g(tak)o(es)h(no)f(argumen)o (ts,)g(then)h Fs(argv)e FA(is)h(NULL.)g(The)h Fs(flag)249 948 y FA(argumen)o(t)f(is)h(used)g(to)g(sp)q(ecify)h(options,)e(and)g (is)h(a)g(sum)f(of:)274 1104 y(V)m(alue)49 b(Option)228 b(Meaning)p 249 1122 1455 2 v 355 1160 a(0)49 b(PvmT)m(askDefault)f (PVM)14 b(c)o(ho)q(oses)h(where)g(to)f(spa)o(wn)g(pro)q(cesses.)355 1214 y(1)49 b(PvmT)m(askHost)99 b Fs(where)13 b FA(argumen)o(t)f(is)i (a)g(particular)f(host)h(to)g(spa)o(wn)g(on.)355 1268 y(2)49 b(PvmT)m(askArc)o(h)96 b Fs(where)13 b FA(argumen)o(t)f(is)i(a)g (PVM)p 1264 1268 13 2 v 15 w(AR)o(CH)f(to)h(spa)o(wn)g(on.)355 1322 y(4)49 b(PvmT)m(askDebug)66 b(starts)15 b(tasks)f(under)h(a)e (debugger.)355 1376 y(8)49 b(PvmT)m(askT)m(race)83 b(trace)15 b(data)e(is)h(generated.)334 1429 y(16)49 b(PvmMppF)m(ron)o(t)86 b(starts)15 b(tasks)f(on)g(MPP)g(fron)o(t-end.)334 1483 y(32)49 b(PvmHostCompl)63 b(complemen)o(ts)12 b(host)i(set)h(in)e Fs(where)p FA(.)p 249 1501 1455 2 v 249 1619 a(These)k(names)d(are)i (prede\014ned)h(in)e Fr(p)o(vm3/includ)o(e/p)n(vm3.h)p FA(.)k(In)d(F)m(ortran)f(all)f(the)i(names)f(are)249 1673 y(prede\014ned)39 b(in)d(parameter)h(statemen)o(ts)g(whic)o(h)g (can)g(b)q(e)h(found)f(in)f(the)i FB(include)f FA(\014le)249 1727 y Fr(p)o(vm3/includ)o(e/fp)n(vm3.h)o FA(.)291 1781 y Fr(PvmT)l(askT)l(race)16 b FA(is)g(a)g(new)h(feature)g(in)f(PVM)h (3.3.)25 b(It)16 b(causes)i(spa)o(wned)f(tasks)g(to)f(generate)249 1835 y(trace)c(ev)o(en)o(ts.)18 b(PvmT)m(asktrace)11 b(is)g(used)h(b)o(y)f(XPVM)h(\(see)g(Chapter)g(8\).)17 b(Otherwise,)c(the)f(user)g(m)o(ust)249 1889 y(sp)q(ecify)j(where)g (the)f(trace)h(ev)o(en)o(ts)g(are)f(sen)o(t)h(in)e(p)o(vm)p 1094 1889 13 2 v 14 w(setopt\(\).)291 1943 y(On)g(return,)h Fs(numt)f FA(is)g(set)h(to)f(the)h(n)o(um)o(b)q(er)f(of)g(tasks)h (successfully)g(spa)o(wned)g(or)f(an)g(error)i(co)q(de)f(if)249 1997 y(no)i(tasks)g(could)f(b)q(e)h(started.)25 b(If)15 b(tasks)h(w)o(ere)h(started,)g(then)f(p)o(vm)p 1330 1997 V 14 w(spa)o(wn\(\))g(returns)h(a)e(v)o(ector)i(of)249 2051 y(the)c(spa)o(wned)g(tasks')f Fs(tids)p FA(;)f(and)h(if)g(some)f (tasks)i(could)f(not)g(b)q(e)h(started,)g(the)g(corresp)q(onding)g (error)249 2105 y(co)q(des)i(are)f(placed)h(in)e(the)i(last)e Fn(ntask)e Ft(\000)e Fn(numt)14 b FA(p)q(ositions)g(of)f(the)h(v)o (ector.)291 2159 y(The)g(p)o(vm)p 458 2159 V 13 w(spa)o(wn\(\))g(call)e (can)i(also)f(start)h(tasks)g(on)f(m)o(ultipro)q(cessors.)18 b(In)c(the)g(case)g(of)f(the)h(In)o(tel)249 2213 y(iPSC/860)e(the)i (follo)o(wing)d(restrictions)k(apply)m(.)h(Eac)o(h)e(spa)o(wn)f(call)g (gets)h(a)f(sub)q(cub)q(e)i(of)e(size)h Fs(ntask)249 2267 y FA(and)h(loads)f(the)h(program)e Fs(task)h FA(on)h(all)e(of)h (these)i(no)q(des.)22 b(The)15 b(iPSC/860)e(OS)i(has)g(an)g(allo)q (cation)249 2321 y(limit)i(of)j(10)f(sub)q(cub)q(es)j(across)f(all)e (users,)k(so)d(it)f(is)h(b)q(etter)i(to)e(start)g(a)g(blo)q(c)o(k)g(of) f(tasks)i(on)e(an)249 2375 y(iPSC/860)12 b(with)i(a)f(single)g(p)o(vm)p 764 2375 V 13 w(spa)o(wn\(\))h(call)f(rather)h(than)g(sev)o(eral)g (calls.)j(Tw)o(o)d(di\013eren)o(t)g(blo)q(c)o(ks)249 2429 y(of)g(tasks)i(spa)o(wned)f(separately)h(on)f(the)g(iPSC/860)f (can)h(still)g(comm)o(uni)o(cate)e(with)i(eac)o(h)g(other)h(as)249 2483 y(w)o(ell)c(as)i(an)o(y)e(other)i(PVM)f(tasks)h(ev)o(en)g(though)f (they)g(are)h(in)e(separate)j(sub)q(cub)q(es.)20 b(The)13 b(iPSC/860)p eop %%Page: 48 67 48 66 bop 249 251 a Fu(48)1375 b(Chapter)13 b(5)249 507 y FA(OS)18 b(has)g(a)f(restriction)h(that)g(messages)g(going)e(from)g (the)i(no)q(des)h(to)e(the)h(outside)g(w)o(orld)f(b)q(e)h(less)249 561 y(than)c(256)f(Kb)o(ytes.)p 249 635 698 2 v 248 689 2 54 v 274 673 a Fs(int)21 b(info)g(=)h(pvm)p 583 673 14 2 v 15 w(kill\()f(int)g(tid)g(\))p 946 689 2 54 v 248 743 V 274 727 a(call)g(pvmfkill\()f(tid,)h(info)g(\))p 946 743 V 249 745 698 2 v 291 840 a FA(The)16 b(routine)h(p)o(vm)p 606 840 13 2 v 13 w(kill\(\))f(kills)f(some)h(other)h(PVM)f(task)h (iden)o(ti\014ed)g(b)o(y)f Fs(TID)p FA(.)f(This)i(routine)f(is)249 894 y(not)d(designed)g(to)f(kill)f(the)j(calling)d(task,)h(whic)o(h)h (should)f(b)q(e)h(accomplished)f(b)o(y)g(calling)f(p)o(vm)p 1731 894 V 14 w(exit\(\))249 948 y(follo)o(w)o(ed)h(b)o(y)i(exit\(\).)p 249 1024 807 2 v 248 1078 2 54 v 274 1062 a Fs(int)21 b(info)g(=)h(pvm)p 583 1062 14 2 v 15 w(catchout\()e(FILE)h(*ff)g(\))p 1055 1078 2 54 v 248 1132 V 274 1116 a(call)g(pvmfcatchout\()e(onoff)i (\))p 1055 1132 V 249 1134 807 2 v 291 1227 a FA(The)12 b(default)f(is)h(to)g(ha)o(v)o(e)f(PVM)h(write)g(the)h FB(stderr)e FA(and)g FB(stdout)h FA(of)g(spa)o(wned)g(tasks)g(to)g(the) g(log)f(\014le)249 1281 y Fs(/tmp/pvml.)p Fn(<)p Fs(uid)p Fn(>)p FA(.)20 b(The)c(routine)f Fs(pvm)p 931 1281 14 2 v 15 w(catchout)f FA(causes)j(the)f(calling)d(task)j(to)f(catc)o(h)h (output)249 1335 y(from)h(tasks)i(subsequen)o(tly)h(spa)o(wned.)33 b(Characters)20 b(prin)o(ted)f(on)f FB(stdout)h FA(or)g FB(stderr)f FA(in)g(c)o(hildren)249 1389 y(tasks)c(are)h(collected)f(b) o(y)g(the)g(p)o(vmds)f(and)g(sen)o(t)i(in)e(con)o(trol)h(messages)f(to) h(the)g(paren)o(t)h(task,)e(whic)o(h)249 1443 y(tags)g(eac)o(h)g(line)f (and)g(app)q(ends)i(it)e(to)g(the)h(sp)q(eci\014ed)i(\014le)d(\(in)g (C\))h(or)g(standard)g(output)f(\(in)h(F)m(ortran\).)249 1496 y(Eac)o(h)h(of)g(the)h(prin)o(ts)f(is)g(prep)q(ended)i(with)d (information)f(ab)q(out)i(whic)o(h)f(task)i(generated)g(the)g(prin)o (t,)249 1550 y(and)h(the)g(end)g(of)f(the)h(prin)o(t)g(is)f(mark)o(ed)g (to)g(help)h(separate)h(outputs)f(coming)e(from)f(sev)o(eral)k(tasks) 249 1604 y(at)d(once.)291 1658 y(If)c Fs(pvm)p 398 1658 V 15 w(exit)h FA(is)g(called)f(b)o(y)h(the)h(paren)o(t)g(while)e (output)i(collection)e(is)h(in)g(e\013ect,)i(it)e(will)e(blo)q(c)o(k)i (un)o(til)249 1712 y(all)i(tasks)i(sending)f(it)g(output)g(ha)o(v)o(e)g (exited,)g(in)g(order)g(to)g(prin)o(t)g(all)f(their)i(output.)j(T)m(o)c (a)o(v)o(oid)e(this,)249 1766 y(one)f(can)g(turn)h(o\013)f(the)g (output)g(collection)g(b)o(y)g(calling)e(p)o(vm)p 1189 1766 13 2 v 13 w(catc)o(hout\(0\))j(b)q(efore)g(calling)d(p)o(vm)p 1752 1766 V 14 w(exit.)291 1820 y(New)20 b(capabilities)g(in)g(PVM)h (3.3)e(include)i(the)f(abilit)o(y)f(to)h(register)i(sp)q(ecial)f(PVM)f (tasks)h(to)249 1874 y(handle)c(the)h(jobs)f(of)f(adding)g(new)i (hosts,)g(mapping)d(tasks)i(to)g(hosts,)h(and)f(starting)g(new)h (tasks.)249 1928 y(This)d(creates)i(an)f(in)o(terface)g(for)f(adv)n (anced)g(batc)o(h)h(sc)o(hedulers)h(\(examples)d(include)i(Condor)f ([11)o(],)249 1982 y(DQS)j([10)o(],)f(and)h(LSF)g([5)o(]\))f(to)h(plug) f(in)o(to)f(PVM)i(and)g(run)g(PVM)g(jobs)f(in)h(batc)o(h)g(mo)q(de.)28 b(These)249 2036 y(register)19 b(routines)f(also)e(create)j(an)e(in)o (terface)h(for)f(debugger)h(writers)h(to)e(dev)o(elop)g(sophisticated) 249 2090 y(debuggers)e(for)f(PVM.)291 2144 y(The)g(routine)g(names)f (are)i(p)o(vm)p 798 2144 V 13 w(reg)p 866 2144 V 16 w(rm\(\),)d(p)o(vm) p 1070 2144 V 14 w(reg)p 1139 2144 V 15 w(hoster\(\),)j(and)f(p)o(vm)p 1484 2144 V 13 w(reg)p 1552 2144 V 15 w(task)o(er\(\).)20 b(These)249 2198 y(are)14 b(adv)n(anced)g(functions)f(not)h(mean)o(t)e (for)h(the)h(a)o(v)o(erage)g(PVM)g(user)g(and)g(th)o(us)g(are)g(not)f (presen)o(ted)249 2252 y(in)g(detail)h(here.)19 b(Sp)q(eci\014cs)c(can) g(b)q(e)f(found)f(in)h(App)q(endix)g(B.)p eop %%Page: 49 68 49 67 bop 249 251 a Fu(PVM)13 b(User)g(In)o(terface)1218 b(49)249 507 y FD(5.2)52 b(Information)p 249 567 654 2 v 248 621 2 54 v 274 605 a Fs(int)21 b(tid)g(=)h(pvm)p 561 605 14 2 v 15 w(parent\()e(void)h(\))p 902 621 2 54 v 248 675 V 274 659 a(call)g(pvmfparent\()e(tid)j(\))p 902 675 V 249 677 654 2 v 291 772 a FA(The)12 b(routine)g(p)o(vm)p 597 772 13 2 v 14 w(paren)o(t\(\))h(returns)g(the)g Fs(TID)e FA(of)h(the)g(pro)q(cess)i(that)e(spa)o(wned)h(this)f(task)g(or)g(the) 249 826 y(v)n(alue)h(of)h(PvmNoP)o(aren)o(t)f(if)g(not)h(created)h(b)o (y)f(p)o(vm)p 1072 826 V 13 w(spa)o(wn\(\).)p 249 902 807 2 v 248 956 2 54 v 274 940 a Fs(int)21 b(dtid)g(=)h(pvm)p 583 940 14 2 v 15 w(tidtohost\()d(int)j(tid)f(\))p 1055 956 2 54 v 248 1010 V 274 994 a(call)g(pvmftidtohost\()e(tid,)i(dtid)g (\))p 1055 1010 V 249 1012 807 2 v 291 1107 a FA(The)11 b(routine)h(p)o(vm)p 596 1107 13 2 v 13 w(tidtohost\(\))g(returns)h (the)f(TID)f Fs(dtid)f FA(of)h(the)h(daemon)e(running)h(on)g(the)h (same)249 1161 y(host)h(as)f Fs(TID)p FA(.)g(This)g(routine)h(is)f (useful)g(for)g(determining)g(on)g(whic)o(h)g(host)h(a)f(giv)o(en)g (task)g(is)h(running.)249 1215 y(More)j(general)f(information)d(ab)q (out)j(the)g(en)o(tire)h(virtual)e(mac)o(hine,)g(including)g(the)h (textual)g(name)249 1269 y(of)e(the)i(con\014gured)g(hosts,)f(can)g(b)q (e)g(obtained)g(b)o(y)g(using)f(the)i(follo)o(wing)c(functions:)p 249 1343 1380 2 v 248 1397 2 54 v 274 1380 a Fs(int)21 b(info)g(=)h(pvm)p 583 1380 14 2 v 15 w(config\()48 b(int)21 b(*nhost,)g(int)g(*narch,)p 1627 1397 2 54 v 248 1451 V 797 1434 a(struct)g(pvmhostinfo)e(**hostp)i(\))p 1627 1451 V 248 1505 V 274 1488 a(call)g(pvmfconfig\()e(nhost,)i(narch,)g (dtid,)f(name,)h(arch,)g(speed,)f(info\))p 1627 1505 V 249 1506 1380 2 v 291 1624 a FA(The)12 b(routine)h(p)o(vm)p 598 1624 13 2 v 13 w(con\014g\(\))g(returns)h(information)9 b(ab)q(out)k(the)g(virtual)e(mac)o(hine)g(including)g(the)249 1678 y(n)o(um)o(b)q(er)16 b(of)g(hosts,)i Fs(nhost)p FA(,)e(and)g(the)h(n)o(um)o(b)q(er)f(of)g(di\013eren)o(t)i(data)e (formats,)g Fs(narch)p FA(.)25 b Fs(hostp)16 b FA(is)g(a)249 1732 y(p)q(oin)o(ter)d(to)g(a)g(user)h(declaried)f(arra)o(y)g(of)f Fs(pvmhostinfo)f FA(structures.)20 b(The)14 b(arra)o(y)f(should)f(b)q (e)i(of)e(size)249 1786 y(at)17 b(least)g Fs(nhost)p FA(.)27 b(On)18 b(return,)g(eac)o(h)g Fs(pvmhostinfo)d FA(structure)k(con)o(tains)e(the)h(p)o(vmd)d(TID,)i(host)249 1840 y(name,)9 b(name)f(of)h(the)i(arc)o(hitecture,)g(and)f(relativ)o (e)f(CPU)h(sp)q(eed)i(for)d(that)h(host)f(in)h(the)g(con\014guration.) 291 1894 y(The)15 b(F)m(ortran)f(function)g(returns)j(information)11 b(ab)q(out)k(one)g(host)f(p)q(er)i(call)e(and)g(cycles)i(through)249 1948 y(all)f(the)h(hosts.)24 b(Th)o(us,)16 b(if)f(p)o(vmfcon\014g)f(is) i(called)f(nhost)h(times,)f(the)i(en)o(tire)f(virtual)f(mac)o(hine)g (will)249 2002 y(b)q(e)j(represen)o(ted.)31 b(The)18 b(F)m(ortran)f(in)o(terface)h(w)o(orks)f(b)o(y)g(sa)o(ving)g(a)g(cop)o (y)g(of)g(the)h(hostp)f(arra)o(y)g(and)249 2056 y(returning)f(one)g(en) o(try)g(p)q(er)h(call.)22 b(All)15 b(the)h(hosts)h(m)o(ust)d(b)q(e)j (cycled)f(through)g(b)q(efore)g(a)g(new)g(hostp)249 2110 y(arra)o(y)f(is)g(obtained.)22 b(Th)o(us,)16 b(if)e(the)i(virtual)e (mac)o(hine)g(is)i(c)o(hanging)e(during)h(these)i(calls,)d(then)i(the) 249 2164 y(c)o(hange)d(will)f(app)q(ear)h(in)f(the)i Fs(nhost)e FA(and)g Fs(narch)g FA(parameters,)h(but)g(not)f(in)h(the)g (host)g(information.)249 2218 y(Presen)o(tly)m(,)h(there)i(is)e(no)f(w) o(a)o(y)h(to)f(reset)j(p)o(vmfcon\014g\(\))c(and)i(force)h(it)e(to)h (restart)i(the)e(cycle)h(when)f(it)249 2272 y(is)g(in)f(the)i(middle.)p eop %%Page: 50 69 50 68 bop 249 251 a Fu(50)1375 b(Chapter)13 b(5)p 249 467 1205 2 v 248 521 2 54 v 274 505 a Fs(int)21 b(info)g(=)h(pvm)p 583 505 14 2 v 15 w(tasks\()48 b(int)22 b(which,)e(int)h(*ntask,)p 1453 521 2 54 v 248 575 V 775 559 a(struct)g(pvmtaskinfo)e(**taskp)i (\))p 1453 575 V 248 629 V 274 613 a(call)g(pvmftasks\()172 b(which,)21 b(ntask,)f(tid,)h(ptid,)g(dtid,)p 1453 629 V 248 683 V 775 667 a(flag,)g(aout,)g(info)g(\))p 1453 683 V 249 685 1205 2 v 291 803 a FA(The)d(routine)h(p)o(vm)p 610 803 13 2 v 13 w(tasks\(\))g(returns)h(information)15 b(ab)q(out)j(the)h(PVM)g(tasks)f(running)g(on)g(the)249 857 y(virtual)d(mac)o(hine.)24 b(The)17 b(in)o(teger)g Fs(which)e FA(sp)q(eci\014es)j(whic)o(h)e(tasks)h(to)f(return)h (information)d(ab)q(out.)249 911 y(The)j(presen)o(t)g(options)f(are)h (\(0\),)f(whic)o(h)g(means)f(all)g(tasks,)i(a)f(p)o(vmd)e(TID)i(\()p Fs(dtid)p FA(\),)g(whic)o(h)g(means)249 965 y(tasks)e(running)g(on)g (that)g(host,)f(or)h(a)g(TID,)f(whic)o(h)h(means)f(just)h(the)g(giv)o (en)g(task.)291 1019 y(The)9 b(n)o(um)o(b)q(er)g(of)g(tasks)g(is)g (returned)i(in)e Fs(ntask)p FA(.)16 b Fs(taskp)8 b FA(is)h(a)g(p)q(oin) o(ter)g(to)h(an)f(arra)o(y)g(of)f Fs(pvmtaskinfo)249 1073 y FA(structures.)25 b(The)16 b(arra)o(y)g(is)f(of)g(size)h Fs(ntask)p FA(.)22 b(Eac)o(h)16 b Fs(pvmtaskinfo)d FA(structure)k(con)o (tains)f(the)g(TID,)249 1127 y(p)o(vmd)d(TID,)i(paren)o(t)g(TID,)f(a)h (status)h(\015ag,)e(and)h(the)g(spa)o(wned)h(\014le)f(name.)20 b(\(PVM)15 b(do)q(esn't)h(kno)o(w)249 1181 y(the)d(\014le)g(name)e(of)h (man)o(ually)e(started)k(tasks)f(and)f(so)h(lea)o(v)o(es)g(these)h (blank.\))j(The)c(F)m(ortran)f(function)249 1235 y(returns)18 b(information)c(ab)q(out)i(one)h(task)g(p)q(er)h(call)d(and)i(cycles)h (through)e(all)g(the)h(tasks.)27 b(Th)o(us,)17 b(if)249 1289 y(where)12 b(=)f(0,)f(and)h(p)o(vmftasks)e(is)h(called)h(n)o(task) g(times,)e(all)h(tasks)h(will)e(b)q(e)i(represen)o(ted.)20 b(The)11 b(F)m(ortran)249 1343 y(implemen)o(tation)h(assumes)k(that)f (the)h(task)g(p)q(o)q(ol)f(is)h(not)f(c)o(hanging)g(while)g(it)g (cycles)i(through)e(the)249 1397 y(tasks.)26 b(If)16 b(the)h(p)q(o)q(ol)f(c)o(hanges,)h(these)h(c)o(hanges)f(will)e(not)h (app)q(ear)h(un)o(til)e(the)i(next)g(cycle)g(of)f(n)o(task)249 1451 y(calls)e(b)q(egins.)291 1505 y(Examples)g(of)h(the)i(use)f(of)g (p)o(vm)p 809 1505 V 13 w(con\014g)g(and)f(p)o(vm)p 1106 1505 V 14 w(tasks)h(can)g(b)q(e)h(found)e(in)g(the)i(source)g(to)e(the) 249 1559 y(PVM)20 b(console,)h(whic)o(h)e(is)h(just)g(a)f(PVM)h(task)g (itself.)35 b(Examples)18 b(of)h(the)i(use)f(of)f(the)h(F)m(ortran)249 1613 y(v)o(ersions)14 b(of)g(these)h(routines)g(can)f(b)q(e)g(found)g (in)f(the)i(source)g Fs(pvm3/examples/te)o(stall)o(.f)p FA(.)249 1733 y FD(5.3)52 b(Dynamic)18 b(Con\014guration)p 249 1862 1380 2 v 248 1915 2 54 v 274 1899 a Fs(int)j(info)g(=)h (pvm_addhosts\()d(char)i(**hosts,)f(int)h(nhost,)g(int)g(*infos\))p 1627 1915 V 248 1969 V 274 1953 a(int)g(info)g(=)h(pvm_delhosts\()d (char)i(**hosts,)f(int)h(nhost,)g(int)g(*infos\))p 1627 1969 V 248 2023 V 274 2007 a(call)g(pvmfaddhost\()e(host,)i(info)g(\))p 1627 2023 V 248 2077 V 274 2061 a(call)g(pvmfdelhost\()e(host,)i(info)g (\))p 1627 2077 V 249 2079 1380 2 v 291 2172 a FA(The)e(C)g(routines)h (add)e(or)h(delete)h(a)f(set)h(of)e Fs(hosts)g FA(in)h(the)h(virtual)e (mac)o(hine.)32 b(The)19 b(F)m(ortran)249 2226 y(routines)14 b(add)f(or)h(delete)g(a)f(single)h Fs(host)e FA(in)h(the)h(virtual)f (mac)o(hine.)j(In)e(the)g(F)m(ortran)f(routine)h Fs(info)249 2280 y FA(is)i(returned)j(as)d(1)g(or)h(a)f(status)h(co)q(de.)27 b(In)16 b(the)h(C)g(v)o(ersion)f Fs(info)g FA(is)g(returned)i(as)f(the) g(n)o(um)o(b)q(er)f(of)249 2334 y(hosts)e(successfully)g(added.)k(The) 13 b(argumen)o(t)f Fs(infos)g FA(is)h(an)g(arra)o(y)g(of)f(length)h Fs(nhost)f FA(that)h(con)o(tains)249 2388 y(the)i(status)g(co)q(de)g (for)e(eac)o(h)i(individual)d(host)i(b)q(eing)g(added)h(or)f(deleted.) 20 b(This)14 b(allo)o(ws)e(the)j(user)g(to)249 2442 y(c)o(hec)o(k)h (whether)g(only)d(one)i(of)f(a)g(set)i(of)e(hosts)h(caused)h(a)e (problem)f(rather)j(than)e(trying)g(to)h(add)f(or)249 2496 y(delete)h(the)f(en)o(tire)h(set)g(of)e(hosts)i(again.)p eop %%Page: 51 70 51 69 bop 249 251 a Fu(PVM)13 b(User)g(In)o(terface)1218 b(51)291 507 y FA(These)16 b(routines)h(are)f(sometimes)d(used)k(to)e (set)i(up)e(a)h(virtual)e(mac)o(hine,)h(but)g(more)g(often)h(they)249 561 y(are)k(used)h(to)f(increase)h(the)g(\015exibilit)o(y)d(and)i (fault)f(tolerance)i(of)e(a)g(large)h(application.)35 b(These)249 615 y(routines)16 b(allo)o(w)e(an)h(application)f(to)i (increase)g(the)h(a)o(v)n(ailable)c(computing)h(p)q(o)o(w)o(er)h (\(adding)g(hosts\))249 669 y(if)f(it)g(determines)h(the)g(problem)e (is)i(getting)f(harder)h(to)g(solv)o(e.)k(One)d(example)d(of)h(this)g (w)o(ould)g(b)q(e)h(a)249 723 y(CAD/CAM)h(program)e(where,)j(during)f (the)g(computation,)e(the)j(\014nite-elemen)o(t)e(grid)g(is)h (re\014ned,)249 777 y(dramatically)d(increasing)k(the)g(size)g(of)e (the)i(problem.)24 b(Another)17 b(use)g(w)o(ould)e(b)q(e)i(to)f (increase)h(the)249 831 y(fault)d(tolerance)i(of)f(an)f(application)g (b)o(y)h(ha)o(ving)f(it)g(detect)j(the)f(failure)e(of)g(a)h(host)g(and) g(adding)f(in)249 885 y(a)g(replacemen)o(t.)249 1005 y FD(5.4)52 b(Signaling)p 249 1134 1439 2 v 248 1188 2 54 v 274 1172 a Fs(int)21 b(info)g(=)h(pvm)p 583 1172 14 2 v 15 w(sendsig\()e(int)h(tid,)g(int)g(signum)g(\))p 1687 1188 2 54 v 248 1242 V 274 1226 a(call)g(pvmfsendsig\()e(tid,)i (signum,)g(info)g(\))p 1687 1242 V 248 1296 V 274 1280 a(int)g(info)g(=)h(pvm)p 583 1280 14 2 v 15 w(notify\()e(int)h(what,)g (int)g(msgtag,)g(int)g(cnt,)g(int)g(tids)g(\))p 1687 1296 2 54 v 248 1350 V 274 1334 a(call)g(pvmfnotify\()e(what,)i (msgtag,)g(cnt,)g(tids,)f(info)h(\))p 1687 1350 V 249 1352 1439 2 v 291 1447 a FA(The)15 b(routine)h(p)o(vm)p 604 1447 13 2 v 13 w(sendsig\(\))h(sends)f(a)g(signal)e Fs(signum)g FA(to)h(another)h(PVM)g(task)g(iden)o(ti\014ed)f(b)o(y)249 1501 y Fs(TID)p FA(.)j(The)h(routine)h Fs(pvm)p 653 1501 14 2 v 15 w(notify)e FA(requests)j(PVM)e(to)g(notify)f(the)i(caller)f (on)f(detecting)i(certain)249 1555 y(ev)o(en)o(ts.)f(The)14 b(presen)o(t)i(options)d(are)i(as)f(follo)o(ws:)247 1621 y(PvmT)m(askExit)19 b(-)13 b(notify)g(if)g(a)h(task)g(exits.)247 1692 y(PvmHostDelete)20 b(-)14 b(notify)f(if)g(a)h(host)g(is)g(deleted) h(\(or)f(fails\).)247 1762 y(PvmHostAdd)20 b(-)14 b(notify)f(if)g(a)g (host)h(is)g(added.)291 1829 y(In)h(resp)q(onse)i(to)e(a)g(notify)f (request,)i(some)f(n)o(um)o(b)q(er)f(of)h(messages)g(\(see)h(App)q (endix)g(B\))g(are)f(sen)o(t)249 1883 y(b)o(y)20 b(PVM)h(bac)o(k)f(to)g (the)h(calling)d(task.)37 b(The)21 b(messages)f(are)h(tagged)f(with)g (the)h(user)g(supplied)249 1937 y(msgtag.)27 b(The)17 b(tids)h(arra)o(y)f(sp)q(eci\014es)i(who)e(to)g(monitor)f(when)h(using) g(T)m(askExit)g(or)g(HostDelete.)249 1991 y(The)g(arra)o(y)f(con)o (tains)g(nothing)f(when)i(using)f(HostAdd.)25 b(If)16 b(required,)h(the)g(routines)g(p)o(vm)p 1726 1991 13 2 v 13 w(con\014g)249 2045 y(and)d(p)o(vm)p 412 2045 V 13 w(tasks)h(can)f(b)q(e)g(used)h(to)f(obtain)f(task)h(and)g(p)o(vmd) e(tids.)291 2099 y(If)g(the)h(host)g(on)f(whic)o(h)g(task)h(A)f(is)h (running)f(fails,)f(and)h(task)h(B)g(has)f(ask)o(ed)h(to)g(b)q(e)g (noti\014ed)f(if)g(task)249 2153 y(A)k(exits,)f(then)h(task)g(B)f(will) f(b)q(e)i(noti\014ed)g(ev)o(en)g(though)f(the)h(exit)f(w)o(as)h(caused) g(indirectly)f(b)o(y)g(the)249 2206 y(host)f(failure.)p eop %%Page: 52 71 52 70 bop 249 251 a Fu(52)1375 b(Chapter)13 b(5)249 507 y FD(5.5)52 b(Setting)19 b(and)f(Getting)h(Options)p 249 636 1031 2 v 248 690 2 54 v 296 674 a Fs(int)i(oldval)f(=)i (pvm_setopt\()e(int)h(what,)g(int)g(val)g(\))p 1279 690 V 248 744 V 296 728 a(int)g(val)g(=)h(pvm_getopt\()d(int)i(what)g(\))p 1279 744 V 248 798 V 274 782 a(call)g(pvmfsetopt\()e(what,)i(val,)g (oldval)g(\))p 1279 798 V 248 852 V 274 836 a(call)g(pvmfgetopt\()e (what,)i(val)g(\))p 1279 852 V 249 853 1031 2 v 291 946 a FA(The)11 b(routine)h Fs(pvm)p 583 946 14 2 v 15 w(setopt)e FA(is)i(a)f(general-purp)q(ose)h(function)g(that)f(allo)o(ws)f(the)i (user)h(to)e(set)h(or)g(get)249 1000 y(options)i(in)h(the)g(PVM)g (system.)20 b(In)15 b(PVM)g(3,)f(p)o(vm)p 1079 1000 13 2 v 13 w(setopt)i(can)f(b)q(e)g(used)h(to)e(set)i(sev)o(eral)f (options,)249 1054 y(including)c(automatic)f(error)i(message)g(prin)o (ting,)e(debugging)h(lev)o(el,)h(and)f(comm)o(unication)e(routing)249 1108 y(metho)q(d)16 b(for)g(all)f(subsequen)o(t)j(PVM)f(calls.)25 b(p)o(vm)p 1056 1108 V 13 w(setopt)17 b(returns)h(the)f(previous)g(v)n (alue)e(of)h(set)h(in)249 1162 y(oldv)n(al.)f(The)f(PVM)f(3.3)f Fs(what)g FA(can)h(ha)o(v)o(e)g(the)g(follo)o(wing)d(v)n(alues:)436 1272 y(Option)j(V)m(alue)170 b(Meaning)p 291 1290 1315 2 v 337 1328 a Fs(PvmRoute)265 b FA(1)50 b(routing)13 b(p)q(olicy)337 1382 y Fs(PvmDebugMask)177 b FA(2)50 b(debugmask)337 1436 y Fs(PvmAutoErr)221 b FA(3)50 b(auto)13 b(error)i(rep)q(orting)337 1490 y Fs(PvmOutputTid)177 b FA(4)50 b(stdout)14 b(destination)g(for)g(c)o(hildren)337 1544 y Fs(PvmOutputCode)155 b FA(5)50 b(output)14 b(msgtag)337 1598 y Fs(PvmTraceTid)199 b FA(6)50 b(trace)15 b(destination)e(for)h(c) o(hildren)337 1652 y Fs(PvmTraceCode)177 b FA(7)50 b(trace)15 b(msgtag)337 1706 y Fs(PvmFragSize)199 b FA(8)50 b(message)13 b(fragmen)o(t)g(size)337 1760 y Fs(PvmResvTids)199 b FA(9)50 b(allo)o(w)12 b(messages)i(to)g(reserv)o(ed)i(tags)e(and)f (tids)337 1814 y Fs(PvmSelfOutputTid)69 b FA(10)49 b(stdout)14 b(destination)g(for)g(self)337 1868 y Fs(PvmSelfOutputCode)47 b FA(11)i(output)14 b(msgtag)337 1921 y Fs(PvmSelfTraceTid)91 b FA(12)49 b(trace)15 b(destination)e(for)h(self)337 1975 y Fs(PvmSelfTraceCode)69 b FA(13)49 b(trace)15 b(msgtag)p 291 1993 V 249 2111 a(See)f(App)q(endix)f(B)h(for)e(allo)o(w)o(able)f (v)n(alues)i(for)g(these)h(options.)j(F)m(uture)d(expansions)f(to)g (this)g(list)g(are)249 2165 y(planned.)291 2219 y(The)g(most)f(p)q (opular)h(use)h(of)e(p)o(vm)p 828 2219 13 2 v 14 w(setopt)i(is)f(to)g (enable)g(direct)h(route)g(comm)o(unicatio)o(n)d(b)q(et)o(w)o(een)249 2273 y(PVM)h(tasks.)18 b(As)12 b(a)f(general)h(rule)g(of)f(th)o(um)o (b,)f(PVM)i(comm)o(unication)d(bandwidth)i(o)o(v)o(er)g(a)h(net)o(w)o (ork)249 2327 y(doubles)i(b)o(y)g(calling)249 2414 y Fs(pvm_setopt\()20 b(PvmRoute,)g(PvmRouteDirect)e(\);)249 2502 y FA(The)i(dra)o(wbac)o(k)g(is)f(that)h(this)f(faster)h(comm)o (unication)c(metho)q(d)j(is)h(not)f(scalable)h(under)g(Unix;)p eop %%Page: 53 72 53 71 bop 249 251 a Fu(PVM)13 b(User)g(In)o(terface)1218 b(53)249 507 y FA(hence,)16 b(it)f(ma)o(y)e(not)h(w)o(ork)h(if)f(the)i (application)d(in)o(v)o(olv)o(es)h(o)o(v)o(er)h(60)f(tasks)i(that)f (comm)o(unicate)d(ran-)249 561 y(domly)17 b(with)h(eac)o(h)h(other.)33 b(If)19 b(it)f(do)q(esn't)h(w)o(ork,)h(PVM)f(automatically)c(switc)o (hes)20 b(bac)o(k)f(to)f(the)249 615 y(default)f(comm)o(unicati)o(on)d (metho)q(d.)26 b(It)17 b(can)g(b)q(e)h(called)f(m)o(ultiple)d(times)i (during)h(an)f(application)249 669 y(to)d(selectiv)o(ely)i(set)f(up)g (direct)g(task-to-task)f(comm)o(unication)e(links,)h(but)i(t)o(ypical)e (use)j(is)e(to)h(call)e(it)249 723 y(once)j(after)f(the)g(initial)e (call)h(to)h(p)o(vm)p 842 723 13 2 v 13 w(m)o(ytid\(\).)249 844 y FD(5.6)52 b(Message)17 b(P)o(assing)249 951 y FA(Sending)12 b(a)g(message)f(comprises)h(three)h(steps)h(in)d(PVM.)h(First,)g(a)g (send)h(bu\013er)g(m)o(ust)e(b)q(e)i(initialized)249 1005 y(b)o(y)18 b(a)g(call)g(to)g(p)o(vm)p 568 1005 V 13 w(initsend\(\))h(or)f(p)o(vm)p 910 1005 V 14 w(mkbuf\(\).)29 b(Second,)20 b(the)f(message)f(m)o(ust)f(b)q(e)i(\\pac)o(k)o(ed")249 1059 y(in)o(to)c(this)g(bu\013er)i(using)e(an)o(y)g(n)o(um)o(b)q(er)g (and)g(com)o(bination)e(of)i(p)o(vm)p 1332 1059 V 13 w(pk*\(\))g(routines.)24 b(\(In)15 b(F)m(ortran)249 1113 y(all)j(message)i(pac)o(king)e(is)i(done)f(with)h(the)g(p)o(vmfpac)o (k\(\))e(subroutine.\))35 b(Third,)20 b(the)h(completed)249 1167 y(message)15 b(is)h(sen)o(t)g(to)f(another)h(pro)q(cess)i(b)o(y)d (calling)f(the)i(p)o(vm)p 1242 1167 V 14 w(send\(\))g(routine)g(or)f(m) o(ulticast)f(with)249 1221 y(the)h(p)o(vm)p 403 1221 V 13 w(mcast\(\))e(routine.)291 1275 y(A)i(message)f(is)h(receiv)o(ed)h (b)o(y)f(calling)e(either)j(a)f(blo)q(c)o(king)e(or)i(non)o(blo)q(c)o (king)f(receiv)o(e)i(routine)f(and)249 1329 y(then)f(\\unpac)o(king")e (eac)o(h)i(of)e(the)i(pac)o(k)o(ed)g(items)e(from)f(the)j(receiv)o(e)h (bu\013er.)j(The)c(receiv)o(e)g(routines)249 1383 y(can)e(b)q(e)g(set)h (to)e(accept)i FB(any)f FA(message,)f(or)h(an)o(y)f(message)g(from)f(a) i(sp)q(eci\014ed)h(source,)g(or)e(an)o(y)g(message)249 1437 y(with)16 b(a)h(sp)q(eci\014ed)h(message)e(tag,)g(or)h(only)f (messages)g(with)h(a)f(giv)o(en)g(message)g(tag)g(from)f(a)i(giv)o(en) 249 1491 y(source.)22 b(There)16 b(is)f(also)f(a)h(prob)q(e)h(function) e(that)h(returns)i(whether)f(a)e(message)h(has)g(arriv)o(ed,)g(but)249 1545 y(do)q(es)g(not)e(actually)g(receiv)o(e)j(it.)291 1599 y(If)11 b(required,)i(other)g(receiv)o(e)g(con)o(texts)g(can)f(b)q (e)h(handled)f(b)o(y)g(PVM)g(3.)17 b(The)12 b(routine)h(p)o(vm)p 1712 1599 V 13 w(recvf\(\))249 1653 y(allo)o(ws)k(users)j(to)e (de\014ne)h(their)g(o)o(wn)f(receiv)o(e)i(con)o(texts)f(that)f(will)f (b)q(e)i(used)g(b)o(y)f(the)h(subsequen)o(t)249 1707 y(PVM)14 b(receiv)o(e)i(routines.)249 1790 y Fr(5.6.1)48 b(Message)16 b(Bu\013ers)p 249 1893 916 2 v 248 1947 2 54 v 274 1931 a Fs(int)21 b(bufid)g(=)g(pvm)p 604 1931 14 2 v 16 w(initsend\()e(int)j(encoding)e(\))p 1164 1947 2 54 v 248 2001 V 274 1985 a(call)h(pvmfinitsend\()e(encoding,)h(bufid) h(\))p 1164 2001 V 249 2002 916 2 v 291 2098 a FA(If)g(the)i(user)h(is) e(using)g(only)f(a)h(single)g(send)i(bu\013er)f(\(and)f(this)g(is)h (the)f(t)o(ypical)g(case\))h(then)249 2152 y(p)o(vm)p 331 2152 13 2 v 13 w(initsend\(\))d(is)f(the)h(only)e(required)i (bu\013er)g(routine.)34 b(It)20 b(is)f(called)f(b)q(efore)i(pac)o(king) f(a)g(new)249 2206 y(message)c(in)o(to)g(the)h(bu\013er.)24 b(The)16 b(routine)g(p)o(vm)p 1023 2206 V 13 w(initsend)g(clears)g(the) g(send)g(bu\013er)h(and)e(creates)i(a)249 2260 y(new)c(one)g(for)f(pac) o(king)f(a)i(new)f(message.)18 b(The)13 b(enco)q(ding)f(sc)o(heme)h (used)g(for)f(this)h(pac)o(king)f(is)g(set)h(b)o(y)249 2314 y Fs(encoding)p FA(.)j(The)f(new)f(bu\013er)h(iden)o(ti\014er)f (is)g(returned)h(in)f Fs(bufid)p FA(.)291 2368 y(The)g Fs(encoding)e FA(options)i(are)g(as)g(follo)o(ws:)249 2434 y Fr(PvmDataDefault)k FA({)j(XDR)f(enco)q(ding)i(is)f(used)h(b)o (y)f(default)g(b)q(ecause)i(PVM)f(cannot)g(kno)o(w)249 2488 y(whether)15 b(the)e(user)h(is)f(going)f(to)h(add)g(a)g (heterogeneous)i(mac)o(hine)d(b)q(efore)i(this)f(message)g(is)g(sen)o (t.)18 b(If)p eop %%Page: 54 73 54 72 bop 249 251 a Fu(54)1375 b(Chapter)13 b(5)249 507 y FA(the)j(user)h(kno)o(ws)e(that)h(the)g(next)g(message)f(will)g(b)q (e)h(sen)o(t)g(only)f(to)g(a)h(mac)o(hine)e(that)h(understands)249 561 y(the)g(nativ)o(e)e(format,)f(then)i(he)h(can)f(use)g FB(PvmDataR)n(aw)h FA(enco)q(ding)f(and)g(sa)o(v)o(e)g(on)f(enco)q (ding)i(costs.)249 632 y Fr(PvmDataRa)o(w)20 b FA({)d(no)f(enco)q(ding) h(is)g(done.)27 b(Messages)18 b(are)f(sen)o(t)h(in)e(their)i(original)d (format.)24 b(If)249 686 y(the)15 b(receiving)f(pro)q(cess)i(cannot)e (read)g(this)g(format,)d(it)j(will)e(return)j(an)f(error)h(during)e (unpac)o(king.)249 756 y Fr(PvmDataInPlace)19 b FA({)c(data)h(left)g (in)f(place)h(to)g(sa)o(v)o(e)g(on)g(pac)o(king)f(costs.)25 b(Bu\013er)17 b(con)o(tains)f(only)249 810 y(sizes)j(and)e(p)q(oin)o (ters)i(to)e(the)h(items)f(to)h(b)q(e)g(sen)o(t.)30 b(When)18 b(p)o(vm)p 1276 810 13 2 v 13 w(send\(\))h(is)f(called,)g(the)g(items)f (are)249 864 y(copied)c(directly)h(out)f(of)f(the)i(user's)g(memory)m (.)h(This)e(option)f(decreases)k(the)d(n)o(um)o(b)q(er)g(of)f(times)g (the)249 918 y(message)i(is)h(copied)g(at)f(the)h(exp)q(ense)i(of)d (requiring)g(the)h(user)h(to)e(not)h(mo)q(dify)d(the)j(items)f(b)q(et)o (w)o(een)249 972 y(the)i(time)f(they)h(are)g(pac)o(k)o(ed)g(and)g(the)g (time)f(they)h(are)g(sen)o(t.)24 b(One)17 b(use)g(of)e(this)g(option)g (w)o(ould)g(b)q(e)249 1026 y(to)h(call)e(pac)o(k)i(once)g(and)g(mo)q (dify)d(and)i(send)i(certain)f(items)f(\(arra)o(ys\))h(m)o(ultiple)d (times)i(during)g(an)249 1080 y(application.)29 b(An)18 b(example)f(w)o(ould)g(b)q(e)i(passing)e(of)h(b)q(oundary)g(regions)g (in)f(a)h(discretized)i(PDE)249 1134 y(implemen)o(tation.)291 1201 y(The)15 b(follo)o(wing)d(message)j(bu\013er)h(routines)g(are)f (required)h(only)e(if)g(the)i(user)g(wishes)g(to)f(manage)249 1254 y(m)o(ultiple)9 b(message)j(bu\013ers)h(inside)e(an)h (application.)j(Multiple)c(message)h(bu\013ers)h(are)f(not)f(required) 249 1308 y(for)k(most)g(message)g(passing)g(b)q(et)o(w)o(een)i(pro)q (cesses.)26 b(In)16 b(PVM)g(3)f(there)i(is)e(one)h FB(active)g FA(send)g(bu\013er)249 1362 y(and)11 b(one)g FB(active)g FA(receiv)o(e)i(bu\013er)f(p)q(er)g(pro)q(cess)g(at)f(an)o(y)g(giv)o (en)g(mom)o(en)o(t.)k(The)d(dev)o(elop)q(er)f(ma)o(y)f(create)249 1416 y(an)o(y)17 b(n)o(um)o(b)q(er)f(of)h(message)g(bu\013ers)h(and)f (switc)o(h)h(b)q(et)o(w)o(een)g(them)f(for)g(the)g(pac)o(king)g(and)g (sending)249 1470 y(of)e(data.)22 b(The)16 b(pac)o(king,)e(sending,)i (receiving,)f(and)h(unpac)o(king)e(routines)i(a\013ect)h(only)d(the)i FB(active)249 1524 y FA(bu\013ers.)p 249 1590 851 2 v 248 1644 2 54 v 274 1628 a Fs(int)21 b(bufid)g(=)g(pvm)p 604 1628 14 2 v 16 w(mkbuf\()f(int)h(encoding)f(\))p 1098 1644 2 54 v 248 1698 V 274 1682 a(call)h(pvmfmkbuf\()f(encoding,)g (bufid)g(\))p 1098 1698 V 249 1700 851 2 v 291 1793 a FA(The)c(routine)h(p)o(vm)p 606 1793 13 2 v 13 w(mkbuf)e(creates)j(a)e (new)h(empt)o(y)e(send)i(bu\013er)h(and)e(sp)q(eci\014es)i(the)f(enco)q (ding)249 1847 y(metho)q(d)c(used)i(for)e(pac)o(king)h(messages.)k(It)c (returns)h(a)f(bu\013er)h(iden)o(ti\014er)f Fs(bufid)p FA(.)p 249 1921 807 2 v 248 1974 2 54 v 274 1958 a Fs(int)21 b(info)g(=)h(pvm)p 583 1958 14 2 v 15 w(freebuf\()e(int)h(bufid)g(\))p 1055 1974 2 54 v 248 2028 V 274 2012 a(call)g(pvmffreebuf\()e(bufid,)i (info)g(\))p 1055 2028 V 249 2030 807 2 v 291 2125 a FA(The)c(routine)g(p)o(vm)p 607 2125 13 2 v 14 w(freebuf\(\))h(disp)q (oses)g(of)e(the)i(bu\013er)g(with)f(iden)o(ti\014er)g Fs(bufid)p FA(.)26 b(This)17 b(should)249 2179 y(b)q(e)g(done)g(after)g (a)g(message)f(has)h(b)q(een)h(sen)o(t)g(and)e(is)h(no)f(longer)h (needed.)28 b(Call)16 b(p)o(vm)p 1631 2179 V 13 w(mkbuf\(\))f(to)249 2233 y(create)k(a)f(bu\013er)g(for)g(a)f(new)h(message)f(if)g (required.)30 b(Neither)19 b(of)e(these)i(calls)e(is)h(required)h(when) 249 2287 y(using)14 b(p)o(vm)p 440 2287 V 13 w(initsend\(\),)g(whic)o (h)g(p)q(erforms)f(these)i(functions)f(for)g(the)g(user.)p eop %%Page: 55 74 55 73 bop 249 251 a Fu(PVM)13 b(User)g(In)o(terface)1218 b(55)p 249 467 720 2 v 248 521 2 54 v 274 505 a Fs(int)21 b(bufid)g(=)g(pvm)p 604 505 14 2 v 16 w(getsbuf\()f(void)h(\))p 968 521 2 54 v 248 575 V 274 559 a(call)g(pvmfgetsbuf\()e(bufid)i(\))p 968 575 V 248 629 V 274 613 a(int)g(bufid)g(=)g(pvm)p 604 613 14 2 v 16 w(getrbuf\()f(void)h(\))p 968 629 2 54 v 248 683 V 274 667 a(call)g(pvmfgetrbuf\()e(bufid)i(\))p 968 683 V 249 685 720 2 v 291 780 a FA(p)o(vm)p 373 780 13 2 v 13 w(getsbuf\(\))g(returns)h(the)f(activ)o(e)g(send)g(bu\013er)h (iden)o(ti\014er.)38 b(p)o(vm)p 1441 780 V 13 w(getrbuf\(\))21 b(returns)h(the)249 834 y(activ)o(e)14 b(receiv)o(e)h(bu\013er)g(iden)o (ti\014er.)p 249 900 851 2 v 248 954 2 54 v 274 938 a Fs(int)21 b(oldbuf)g(=)g(pvm)p 626 938 14 2 v 15 w(setsbuf\()f(int)i (bufid)e(\))p 1098 954 2 54 v 248 1008 V 274 992 a(call)h (pvmfsetrbuf\()e(bufid,)i(oldbuf)f(\))p 1098 1008 V 248 1062 V 274 1046 a(int)h(oldbuf)g(=)g(pvm)p 626 1046 14 2 v 15 w(setrbuf\()f(int)i(bufid)e(\))p 1098 1062 2 54 v 248 1116 V 274 1100 a(call)h(pvmfsetrbuf\()e(bufid,)i(oldbuf)f(\))p 1098 1116 V 249 1118 851 2 v 291 1213 a FA(These)d(routines)f(set)h (the)g(activ)o(e)f(send)h(\(or)f(receiv)o(e\))h(bu\013er)g(to)f Fs(bufid)p FA(,)f(sa)o(v)o(e)h(the)g(state)h(of)e(the)249 1267 y(previous)f(bu\013er,)h(and)e(return)j(the)e(previous)g(activ)o (e)g(bu\013er)h(iden)o(ti\014er)f Fs(oldbuf)p FA(.)291 1321 y(If)e Fs(bufid)g FA(is)h(set)g(to)g(0)g(in)f(p)o(vm)p 770 1321 13 2 v 13 w(setsbuf\(\))j(or)e(p)o(vm)p 1085 1321 V 13 w(setrbuf\(\),)h(then)f(the)h(presen)o(t)g(bu\013er)g(is)f (sa)o(v)o(ed)249 1375 y(and)19 b(there)i(is)e(no)h(activ)o(e)f (bu\013er.)36 b(This)19 b(feature)h(can)g(b)q(e)g(used)g(to)g(sa)o(v)o (e)f(the)h(presen)o(t)h(state)g(of)249 1429 y(an)16 b(application's)e (messages)h(so)h(that)g(a)f(math)g(library)f(or)i(graphical)f(in)o (terface)h(whic)o(h)g(also)f(uses)249 1483 y(PVM)h(messages)f(will)f (not)h(in)o(terfere)i(with)e(the)h(state)g(of)f(the)h(application's)e (bu\013ers.)24 b(After)16 b(they)249 1537 y(complete,)d(the)h (application's)f(bu\013ers)i(can)f(b)q(e)h(reset)g(to)f(activ)o(e.)291 1591 y(It)e(is)g(p)q(ossible)h(to)f(forw)o(ard)g(messages)h(without)f (repac)o(king)g(them)g(b)o(y)g(using)g(the)h(message)f(bu\013er)249 1645 y(routines.)19 b(This)13 b(is)h(illustrated)g(b)o(y)g(the)g(follo) o(wing)d(fragmen)o(t.)249 1723 y Fs(bufid)21 b(=)g(pvm_recv\()f(src,)h (tag)g(\);)249 1777 y(oldid)g(=)g(pvm_setsbuf\()f(bufid)g(\);)249 1831 y(info)43 b(=)21 b(pvm_send\()f(dst,)h(tag)g(\);)249 1885 y(info)43 b(=)21 b(pvm_freebuf\()f(oldid)g(\);)249 1993 y Fr(5.6.2)48 b(P)o(ac)o(king)14 b(Data)249 2076 y FA(Eac)o(h)j(of)e(the)i(follo)o(wing)d(C)i(routines)h(pac)o(ks)f(an)g (arra)o(y)g(of)g(the)g(giv)o(en)g(data)g(t)o(yp)q(e)h(in)o(to)e(the)i (activ)o(e)249 2130 y(send)c(bu\013er.)19 b(They)12 b(can)h(b)q(e)g (called)f(m)o(ultiple)e(times)h(to)h(pac)o(k)h(data)f(in)o(to)f(a)h (single)g(message.)17 b(Th)o(us,)249 2184 y(a)d(message)f(can)h(con)o (tain)f(sev)o(eral)i(arra)o(ys)e(eac)o(h)i(with)e(a)g(di\013eren)o(t)i (data)f(t)o(yp)q(e.)k(C)c(structures)i(m)o(ust)249 2238 y(b)q(e)c(passed)g(b)o(y)f(pac)o(king)f(their)h(individual)e(elemen)o (ts.)17 b(There)12 b(is)f(no)g(limit)d(to)j(the)h(complexit)o(y)d(of)h (the)249 2292 y(pac)o(k)o(ed)17 b(messages,)f(but)h(an)f(application)f (should)h(unpac)o(k)g(the)h(messages)f(exactly)h(as)f(they)h(w)o(ere) 249 2346 y(pac)o(k)o(ed.)h(Although)c(this)g(is)f(not)h(strictly)g (required,)h(it)e(is)h(a)g(safe)g(programmi)o(ng)d(practice.)291 2400 y(The)16 b(argumen)o(ts)g(for)g(eac)o(h)h(of)e(the)i(routines)g (are)g(a)f(p)q(oin)o(ter)g(to)g(the)h(\014rst)g(item)e(to)h(b)q(e)h (pac)o(k)o(ed,)249 2454 y Fs(nitem)d FA(whic)o(h)h(is)f(the)i(total)e (n)o(um)o(b)q(er)g(of)g(items)g(to)h(pac)o(k)f(from)g(this)g(arra)o(y)m (,)g(and)h Fs(stride)e FA(whic)o(h)i(is)249 2508 y(the)j(stride)g(to)f (use)h(when)g(pac)o(king.)27 b(A)17 b(stride)h(of)f(1)g(means)f(a)h (con)o(tiguous)g(v)o(ector)h(is)f(pac)o(k)o(ed,)h(a)p eop %%Page: 56 75 56 74 bop 249 251 a Fu(56)1375 b(Chapter)13 b(5)249 507 y FA(stride)k(of)f(2)h(means)e(ev)o(ery)j(other)f(item)e(is)h(pac)o(k)o (ed,)h(and)g(so)g(on.)25 b(An)17 b(exception)g(is)g(p)o(vm)p 1706 507 13 2 v 13 w(pkstr\(\))249 561 y(whic)o(h)f(b)o(y)f (de\014nition)g(pac)o(ks)h(a)g(NULL)g(terminated)f(c)o(haracter)i (string)e(and)h(th)o(us)g(do)q(es)g(not)g(need)249 615 y Fs(nitem)d FA(or)h Fs(stride)e FA(argumen)o(ts.)p 249 689 1380 2 v 248 743 2 54 v 296 727 a Fs(int)21 b(info)g(=)g (pvm_pkbyte\()64 b(char)g(*cp,)21 b(int)g(nitem,)g(int)g(stride)g(\))p 1627 743 V 248 797 V 296 781 a(int)g(info)g(=)g(pvm_pkcplx\()64 b(float)42 b(*xp,)21 b(int)g(nitem,)g(int)g(stride)g(\))p 1627 797 V 248 851 V 296 835 a(int)g(info)g(=)g(pvm_pkdcplx\()42 b(double)20 b(*zp,)h(int)g(nitem,)g(int)g(stride)g(\))p 1627 851 V 248 905 V 296 889 a(int)g(info)g(=)g(pvm_pkdouble\()f (double)g(*dp,)h(int)g(nitem,)g(int)g(stride)g(\))p 1627 905 V 248 959 V 296 943 a(int)g(info)g(=)g(pvm_pkfloat\()42 b(float)g(*fp,)21 b(int)g(nitem,)g(int)g(stride)g(\))p 1627 959 V 248 1013 V 296 997 a(int)g(info)g(=)g(pvm_pkint\()86 b(int)g(*np,)21 b(int)g(nitem,)g(int)g(stride)g(\))p 1627 1013 V 248 1067 V 296 1051 a(int)g(info)g(=)g(pvm_pklong\()64 b(long)g(*np,)21 b(int)g(nitem,)g(int)g(stride)g(\))p 1627 1067 V 248 1121 V 296 1105 a(int)g(info)g(=)g(pvm_pkshort\()42 b(short)g(*np,)21 b(int)g(nitem,)g(int)g(stride)g(\))p 1627 1121 V 248 1175 V 296 1159 a(int)g(info)g(=)g(pvm_pkstr\()86 b(char)64 b(*cp)21 b(\))p 1627 1175 V 249 1176 1380 2 v 248 1230 2 54 v 296 1214 a(int)g(info)g(=)g(pvm_packf\()f(const)h (char)g(*fmt,)g(...)g(\))p 1627 1230 V 249 1232 1380 2 v 291 1325 a FA(PVM)11 b(also)f(supplies)h(a)f(pac)o(king)g(routine)h (that)f(uses)i(a)e(prin)o(tf-lik)o(e)g(format)e(expression)k(to)e(sp)q (ecify)249 1379 y(what)15 b(data)g(to)h(pac)o(k)f(and)g(ho)o(w)g(to)g (pac)o(k)g(it)g(in)o(to)g(the)h(send)g(bu\013er.)24 b(All)14 b(v)n(ariables)h(are)h(passed)g(as)249 1433 y(addresses)f(if)c(coun)o (t)i(and)f(stride)h(are)g(sp)q(eci\014ed;)h(otherwise,)f(v)n(ariables)f (are)h(assumed)f(to)g(b)q(e)h(v)n(alues.)249 1487 y(A)h(description)h (of)e(the)h(format)e(syn)o(tax)i(is)g(giv)o(en)f(in)h(App)q(endix)g(B.) 291 1541 y(A)f(single)f(F)m(ortran)h(subroutine)h(handles)f(all)f(the)h (pac)o(king)f(functions)h(of)g(the)g(ab)q(o)o(v)o(e)g(C)g(routines.)p 249 1617 1053 2 v 248 1671 2 54 v 274 1655 a Fs(call)21 b(pvmfpack\()f(what,)h(xp,)g(nitem,)f(stride,)h(info)g(\))p 1301 1671 V 249 1673 1053 2 v 291 1769 a FA(The)14 b(argumen)o(t)e Fs(xp)h FA(is)h(the)g(\014rst)g(item)f(of)g(the)h(arra)o(y)f(to)h(b)q (e)g(pac)o(k)o(ed.)k(Note)c(that)g(in)f(F)m(ortran)g(the)249 1823 y(n)o(um)o(b)q(er)i(of)g(c)o(haracters)i(in)f(a)f(string)h(to)f(b) q(e)h(pac)o(k)o(ed)g(m)o(ust)f(b)q(e)h(sp)q(eci\014ed)h(in)e Fs(nitem)p FA(.)23 b(The)16 b(in)o(teger)249 1877 y Fs(what)d FA(sp)q(eci\014es)j(the)e(t)o(yp)q(e)h(of)e(data)h(to)f(b)q(e)i(pac)o (k)o(ed.)j(The)c(supp)q(orted)i(options)d(are)h(as)g(follo)o(ws:)p 708 1924 677 2 v 754 1962 a Fs(STRING)93 b FA(0)71 b Fs(REAL4)158 b FA(4)754 2016 y Fs(BYTE1)115 b FA(1)71 b Fs(COMPLEX8)92 b FA(5)754 2070 y Fs(INTEGER2)49 b FA(2)71 b Fs(REAL8)158 b FA(6)754 2123 y Fs(INTEGER4)49 b FA(3)71 b Fs(COMPLEX16)f FA(7)p 708 2141 V 249 2208 a(These)32 b(names)d(ha)o(v)o(e)h(b)q(een)i(prede\014ned)g(in)d(parameter)h (statemen)o(ts)h(in)f(the)h(include)f(\014le)249 2261 y Fs(pvm3/include/fpvm3)o(.h)p FA(.)j(Some)19 b(v)o(endors)i(ma)o(y)d (extend)j(this)f(list)f(to)h(include)g(64-bit)f(arc)o(hi-)249 2315 y(tectures)e(in)d(their)g(PVM)h(implemen)o(tatio)o(ns.)i(W)m(e)d (will)f(b)q(e)i(adding)e(INTEGER8,)h(REAL16,)f(etc.,)249 2369 y(as)h(so)q(on)g(as)g(XDR)f(supp)q(ort)i(for)e(these)j(data)d(t)o (yp)q(es)i(is)f(a)o(v)n(ailable.)p eop %%Page: 57 76 57 75 bop 249 251 a Fu(PVM)13 b(User)g(In)o(terface)1218 b(57)249 507 y Fr(5.6.3)48 b(Sending)13 b(and)i(Receiving)f(Data)p 249 610 1265 2 v 248 664 2 54 v 274 648 a Fs(int)21 b(info)g(=)h(pvm)p 583 648 14 2 v 15 w(send\()f(int)g(tid,)g(int)g(msgtag)f(\))p 1512 664 2 54 v 248 718 V 274 702 a(call)h(pvmfsend\()f(tid,)h(msgtag,) f(info)h(\))p 1512 718 V 248 772 V 274 756 a(int)g(info)g(=)h(pvm)p 583 756 14 2 v 15 w(mcast\()e(int)h(*tids,)g(int)g(ntask,)g(int)g (msgtag)f(\))p 1512 772 2 54 v 248 826 V 274 810 a(call)h(pvmfmcast\()f (ntask,)g(tids,)h(msgtag,)f(info)h(\))p 1512 826 V 249 828 1265 2 v 291 923 a FA(The)11 b(routine)h(p)o(vm)p 596 923 13 2 v 13 w(send\(\))h(lab)q(els)e(the)h(message)f(with)g(an)g (in)o(teger)h(iden)o(ti\014er)g Fs(msgtag)e FA(and)h(sends)249 977 y(it)j(imm)o(ediately)d(to)j(the)g(pro)q(cess)i Fs(TID)p FA(.)291 1031 y(The)j(routine)g(p)o(vm)p 611 1031 V 13 w(mcast\(\))g(lab)q(els)g(the)g(message)g(with)f(an)h(in)o(teger)g (iden)o(ti\014er)h Fs(msgtag)d FA(and)249 1085 y(broadcasts)h(the)g (message)f(to)h(all)e(tasks)i(sp)q(eci\014ed)g(in)f(the)h(in)o(teger)g (arra)o(y)f Fs(tids)g FA(\(except)h(itself)s(\).)249 1139 y(The)c Fs(tids)f FA(arra)o(y)h(is)g(of)f(length)h Fs(ntask)p FA(.)p 249 1213 1184 2 v 248 1267 2 54 v 274 1251 a Fs(int)21 b(info)g(=)h(pvm)p 583 1251 14 2 v 15 w(psend\()48 b(int)22 b(tid,)e(int)i(msgtag,)p 1431 1267 2 54 v 248 1321 V 775 1304 a(void)f(*vp,)g(int)g(cnt,)g(int)h(type)f (\))p 1431 1321 V 248 1375 V 274 1358 a(call)g(pvmfpsend\()f(tid,)h (msgtag,)f(xp,)h(cnt,)g(type,)g(info)g(\))p 1431 1375 V 249 1376 1184 2 v 291 1472 a FA(The)c(routine)g(p)o(vm)p 607 1472 13 2 v 14 w(psend\(\))h(pac)o(ks)f(and)g(sends)h(an)f(arra)o (y)g(of)f(the)i(sp)q(eci\014ed)g(datat)o(yp)q(e)g(to)e(the)249 1526 y(task)c(iden)o(ti\014ed)f(b)o(y)g Fs(TID)p FA(.)g(The)g (de\014ned)i(datat)o(yp)q(es)f(for)f(F)m(ortran)g(are)h(the)g(same)f (as)g(for)g(p)o(vmfpac)o(k\(\).)249 1580 y(In)j(C)g(the)g Fs(type)f FA(argumen)o(t)g(can)h(b)q(e)h(an)o(y)e(of)g(the)i(follo)o (wing:)p 757 1625 580 2 v 803 1663 a Fs(PVM_STR)136 b(PVM_FLOAT)803 1717 y(PVM_BYTE)114 b(PVM_CPLX)803 1771 y(PVM_SHORT)92 b(PVM_DOUBLE)803 1824 y(PVM_INT)136 b(PVM_DCPLX)803 1878 y(PVM_LONG)114 b(PVM_UINT)803 1932 y(PVM_USHORT)70 b(PVM_ULONG)p 757 1950 V 291 2013 a FA(PVM)15 b(con)o(tains)g(sev)o(eral)h(metho)q (ds)e(of)h(receiving)g(messages)h(at)f(a)f(task.)22 b(There)16 b(is)f(no)g(function)249 2067 y(matc)o(hing)e(in)h(PVM,)h(for)f (example,)f(that)h(a)h(p)o(vm)p 1051 2067 13 2 v 13 w(psend)h(m)o(ust)d (b)q(e)j(matc)o(hed)d(with)i(a)f(p)o(vm)p 1722 2067 V 13 w(precv.)249 2121 y(An)o(y)h(of)f(the)i(follo)o(wing)c(routines)j (can)g(b)q(e)h(called)e(for)h(an)o(y)f(incoming)f(message)h(no)h (matter)f(ho)o(w)g(it)249 2175 y(w)o(as)g(sen)o(t)h(\(or)f(m)o (ulticast\).)p 249 2252 981 2 v 248 2306 2 54 v 274 2289 a Fs(int)21 b(bufid)g(=)g(pvm)p 604 2289 14 2 v 16 w(recv\()f(int)h (tid,)g(int)h(msgtag)e(\))p 1229 2306 2 54 v 248 2360 V 274 2343 a(call)h(pvmfrecv\()f(tid,)h(msgtag,)f(bufid)h(\))p 1229 2360 V 249 2361 981 2 v 291 2454 a FA(This)14 b(blo)q(c)o(king)g (receiv)o(e)i(routine)f(will)e(w)o(ait)h(un)o(til)g(a)h(message)f(with) g(lab)q(el)h Fs(msgtag)e FA(has)i(arriv)o(ed)249 2508 y(from)f Fs(TID)p FA(.)h(A)h(v)n(alue)g(of)f(-1)g(in)h Fs(msgtag)f FA(or)h Fs(TID)f FA(matc)o(hes)h(an)o(ything)f (\(wildcard\).)24 b(It)16 b(then)g(places)p eop %%Page: 58 77 58 76 bop 249 251 a Fu(58)1375 b(Chapter)13 b(5)249 507 y FA(the)k(message)e(in)h(a)g(new)g(activ)o(e)g(receiv)o(e)h(bu\013er)g (that)f(is)g(created.)26 b(The)16 b(previous)h(activ)o(e)f(receiv)o(e) 249 561 y(bu\013er)f(is)f(cleared)g(unless)h(it)f(has)g(b)q(een)h(sa)o (v)o(ed)f(with)f(a)h(p)o(vm)p 1210 561 13 2 v 13 w(setrbuf\(\))h(call.) p 249 637 1003 2 v 248 691 2 54 v 274 675 a Fs(int)21 b(bufid)g(=)g(pvm)p 604 675 14 2 v 16 w(nrecv\()f(int)h(tid,)g(int)g (msgtag)g(\))p 1251 691 2 54 v 248 745 V 274 729 a(call)g(pvmfnrecv\()f (tid,)h(msgtag,)f(bufid)h(\))p 1251 745 V 249 747 1003 2 v 291 842 a FA(If)16 b(the)i(requested)h(message)e(has)h(not)f(arriv) o(ed,)g(then)h(the)g(non)o(blo)q(c)o(king)e(receiv)o(e)i(p)o(vm)p 1701 842 13 2 v 14 w(nrecv\(\))249 896 y(returns)g Fs(bufid)c FA(=)i(0.)23 b(This)16 b(routine)g(can)h(b)q(e)f(called)g(m)o(ultiple)d (times)i(for)h(the)h(same)e(message)g(to)249 950 y(c)o(hec)o(k)e (whether)g(it)f(has)g(arriv)o(ed,)g(while)f(p)q(erforming)f(useful)i(w) o(ork)g(b)q(et)o(w)o(een)h(calls.)k(When)12 b(no)g(more)249 1004 y(useful)g(w)o(ork)f(can)h(b)q(e)g(p)q(erformed,)f(the)h(blo)q(c)o (king)f(receiv)o(e)i(p)o(vm)p 1249 1004 V 13 w(recv\(\))g(can)f(b)q(e)g (called)f(for)h(the)g(same)249 1058 y(message.)20 b(If)15 b(a)f(message)g(with)h(lab)q(el)f Fs(msgtag)f FA(has)i(arriv)o(ed)g (from)e Fs(TID)p FA(,)g(p)o(vm)p 1496 1058 V 14 w(nrecv\(\))j(places)f (this)249 1112 y(message)c(in)g(a)g(new)h(activ)o(e)f(receiv)o(e)i (bu\013er)f(\(whic)o(h)f(it)g(creates\))j(and)d(returns)i(the)e(ID)g (of)g(this)h(bu\013er.)249 1166 y(The)f(previous)g(activ)o(e)g(receiv)o (e)h(bu\013er)g(is)f(cleared)h(unless)f(it)g(has)g(b)q(een)g(sa)o(v)o (ed)g(with)g(a)f(p)o(vm)p 1673 1166 V 14 w(setrbuf\(\))249 1220 y(call.)17 b(A)d(v)n(alue)g(of)f(-1)g(in)h Fs(msgtag)e FA(or)i Fs(TID)f FA(matc)o(hes)h(an)o(ything)f(\(wildcard\).)p 249 1296 1003 2 v 248 1350 2 54 v 274 1334 a Fs(int)21 b(bufid)g(=)g(pvm)p 604 1334 14 2 v 16 w(probe\()f(int)h(tid,)g(int)g (msgtag)g(\))p 1251 1350 2 54 v 248 1404 V 274 1388 a(call)g (pvmfprobe\()f(tid,)h(msgtag,)f(bufid)h(\))p 1251 1404 V 249 1406 1003 2 v 291 1501 a FA(If)14 b(the)h(requested)i(message)d (has)h(not)f(arriv)o(ed,)g(then)i(p)o(vm)p 1232 1501 13 2 v 13 w(prob)q(e\(\))f(returns)i Fs(bufid)c FA(=)g(0.)20 b(Oth-)249 1555 y(erwise,)e(it)e(returns)i(a)e(bu\014d)h(for)f(the)i (message,)e(but)h(do)q(es)g(not)g(\\receiv)o(e")g(it.)26 b(This)16 b(routine)h(can)249 1609 y(b)q(e)i(called)f(m)o(ultiple)e (times)h(for)h(the)h(same)f(message)g(to)g(c)o(hec)o(k)h(whether)h(it)e (has)h(arriv)o(ed,)g(while)249 1663 y(p)q(erforming)12 b(useful)i(w)o(ork)f(b)q(et)o(w)o(een)i(calls.)j(In)c(addition,)e(p)o (vm)p 1259 1663 V 13 w(bu\014nfo\(\))i(can)f(b)q(e)i(called)e(with)g (the)249 1717 y(returned)j(bu\014d)e(to)f(determine)h(information)d(ab) q(out)j(the)h(message)e(b)q(efore)i(receiving)f(it.)p 249 1791 1504 2 v 248 1845 2 54 v 274 1829 a Fs(int)21 b(bufid)g(=)g(pvm)p 604 1829 14 2 v 16 w(trecv\()f(int)h(tid,)g(int)g (msgtag,)g(struct)f(timeval)h(*tmout)f(\))p 1752 1845 2 54 v 248 1899 V 274 1883 a(call)h(pvmftrecv\()f(tid,)h(msgtag,)f (sec,)h(usec,)g(bufid)f(\))p 1752 1899 V 249 1900 1504 2 v 291 1993 a FA(PVM)c(also)g(supplies)h(a)f(timeout)f(v)o(ersion)i (of)e(receiv)o(e.)27 b(Consider)17 b(the)g(case)h(where)f(a)f(message) 249 2047 y(is)f(nev)o(er)i(going)d(to)h(arriv)o(e)h(\(b)q(ecause)h(of)e (error)h(or)g(failure\);)f(the)h(routine)g(p)o(vm)p 1523 2047 13 2 v 13 w(recv)h(w)o(ould)d(blo)q(c)o(k)249 2101 y(forev)o(er.)20 b(T)m(o)13 b(a)o(v)o(oid)g(suc)o(h)i(situations,)e (the)i(user)g(ma)o(y)e(wish)h(to)g(giv)o(e)f(up)i(after)f(w)o(aiting)f (for)h(a)g(\014xed)249 2155 y(amoun)o(t)e(of)g(time.)17 b(The)c(routine)h(p)o(vm)p 866 2155 V 13 w(trecv\(\))h(allo)o(ws)d(the) i(user)g(to)f(sp)q(ecify)h(a)f(timeout)f(p)q(erio)q(d.)18 b(If)249 2209 y(the)e(timeout)e(p)q(erio)q(d)h(is)g(set)h(v)o(ery)g (large,)f(then)h(p)o(vm)p 1103 2209 V 13 w(trecv)g(acts)g(lik)o(e)e(p)o (vm)p 1466 2209 V 14 w(recv.)23 b(If)15 b(the)g(timeout)249 2263 y(p)q(erio)q(d)g(is)f(set)h(to)f(zero,)g(then)h(p)o(vm)p 813 2263 V 14 w(trecv)g(acts)g(lik)o(e)e(p)o(vm)p 1174 2263 V 13 w(nrecv.)20 b(Th)o(us,)14 b(p)o(vm)p 1513 2263 V 14 w(trecv)h(\014lls)f(the)h(gap)249 2317 y(b)q(et)o(w)o(een)g(the)g (blo)q(c)o(king)e(and)g(non)o(blo)q(c)o(king)g(receiv)o(e)i(functions.) p 249 2391 1570 2 v 248 2445 2 54 v 274 2429 a Fs(int)21 b(info)g(=)h(pvm)p 583 2429 14 2 v 15 w(bufinfo\()e(int)h(bufid,)g(int) g(*bytes,)f(int)h(*msgtag,)f(int)i(*tid)f(\))p 1817 2445 2 54 v 248 2499 V 274 2483 a(call)g(pvmfbufinfo\()e(bufid,)i(bytes,)f (msgtag,)h(tid,)g(info)g(\))p 1817 2499 V 249 2501 1570 2 v eop %%Page: 59 78 59 77 bop 249 251 a Fu(PVM)13 b(User)g(In)o(terface)1218 b(59)291 507 y FA(The)19 b(routine)g(p)o(vm)p 611 507 13 2 v 13 w(bu\014nfo\(\))g(returns)i(msgtag,)d(source)i(TID,)e(and)h (length)g(in)f(b)o(ytes)i(of)e(the)249 561 y(message)h(iden)o(ti\014ed) h(b)o(y)f Fs(bufid)p FA(.)33 b(It)19 b(can)h(b)q(e)g(used)g(to)f (determine)g(the)h(lab)q(el)f(and)g(source)i(of)d(a)249 615 y(message)c(that)g(w)o(as)f(receiv)o(ed)j(with)d(wildcards)h(sp)q (eci\014ed.)p 249 689 1532 2 v 248 743 2 54 v 274 727 a Fs(int)21 b(info)g(=)h(pvm)p 583 727 14 2 v 15 w(precv\()48 b(int)22 b(tid,)e(int)i(msgtag,)e(void)h(*vp,)g(int)g(cnt,)p 1780 743 2 54 v 248 797 V 775 781 a(int)h(type,)e(int)h(*rtid,)g(int)g (*rtag,)g(int)g(*rcnt)g(\))p 1780 797 V 248 851 V 274 835 a(call)g(pvmfprecv\()f(tid,)h(msgtag,)f(xp,)h(cnt,)g(type,)g(rtid,) g(rtag,)f(rcnt,)h(info)g(\))p 1780 851 V 249 853 1532 2 v 291 948 a FA(The)15 b(routine)g(p)o(vm)p 603 948 13 2 v 13 w(precv\(\))h(com)o(bines)e(the)h(functions)g(of)f(a)g(blo)q (c)o(king)g(receiv)o(e)i(and)f(unpac)o(king)249 1002 y(the)h(receiv)o(ed)g(bu\013er.)22 b(It)15 b(do)q(es)g(not)g(return)h (a)f Fs(bufid)p FA(.)20 b(Instead,)15 b(it)g(returns)h(the)g(actual)e (v)n(alues)h(of)249 1056 y Fs(TID)p FA(,)e Fs(msgtag)p FA(,)f(and)i Fs(cnt)p FA(.)p 249 1129 1396 2 v 249 1191 2 63 v 263 1170 a Fs(int)21 b(\(*old\)\(\))f(=)i(pvm)p 659 1170 14 2 v 15 w(recvf\(int)e(\(*new\)\(int)g(buf,)h(int)g(tid,)g (int)g(tag\)\))p 1642 1191 2 63 v 249 1193 1396 2 v 291 1288 a FA(The)e(routine)g(p)o(vm)p 611 1288 13 2 v 13 w(recvf\(\))h(mo)q(di\014es)e(the)h(receiv)o(e)h(con)o(text)f(used)h(b) o(y)f(the)g(receiv)o(e)h(functions)249 1342 y(and)f(can)h(b)q(e)f(used) h(to)f(extend)i(PVM.)e(The)g(default)g(receiv)o(e)i(con)o(text)f(is)f (to)g(matc)o(h)f(on)h(source)249 1396 y(and)d(message)g(tag.)24 b(This)16 b(can)g(b)q(e)h(mo)q(di\014ed)d(to)i(an)o(y)g(user-de\014ned) i(comparison)d(function.)24 b(\(See)249 1450 y(App)q(endix)15 b(B)h(for)f(an)f(example)g(of)h(creating)g(a)g(prob)q(e)h(function)e (with)h(p)o(vm)p 1476 1450 V 13 w(recf\(\).\))23 b(There)16 b(is)f(no)249 1504 y(F)m(ortran)f(in)o(terface)g(routine)g(for)g(p)o (vm)p 857 1504 V 13 w(recvf\(\).)249 1587 y Fr(5.6.4)48 b(Unpac)o(king)14 b(Data)249 1670 y FA(The)g(follo)o(wing)c(C)j (routines)g(unpac)o(k)h(\(m)o(ultiple\))d(data)h(t)o(yp)q(es)i(from)d (the)j(activ)o(e)f(receiv)o(e)h(bu\013er.)19 b(In)249 1724 y(an)c(application)e(they)i(should)g(matc)o(h)e(their)i(corresp)q (onding)h(pac)o(k)f(routines)g(in)g(t)o(yp)q(e,)g(n)o(um)o(b)q(er)f(of) 249 1778 y(items,)d(and)h(stride.)19 b Fs(nitem)11 b FA(is)h(the)h(n)o(um)o(b)q(er)f(of)f(items)h(of)f(the)i(giv)o(en)f(t)o (yp)q(e)h(to)f(unpac)o(k,)g(and)g Fs(stride)249 1832 y FA(is)i(the)g(stride.)p 249 1898 1401 2 v 248 1952 2 54 v 296 1936 a Fs(int)21 b(info)g(=)g(pvm_upkbyte\()63 b(char)i(*cp,)21 b(int)g(nitem,)g(int)g(stride)f(\))p 1649 1952 V 248 2006 V 296 1990 a(int)h(info)g(=)g(pvm_upkcplx\()63 b(float)43 b(*xp,)21 b(int)g(nitem,)g(int)g(stride)f(\))p 1649 2006 V 248 2060 V 296 2044 a(int)h(info)g(=)g(pvm_upkdcplx\()41 b(double)21 b(*zp,)g(int)g(nitem,)g(int)g(stride)f(\))p 1649 2060 V 248 2114 V 296 2098 a(int)h(info)g(=)g(pvm_upkdouble\()e (double)i(*dp,)g(int)g(nitem,)g(int)g(stride)f(\))p 1649 2114 V 248 2168 V 296 2152 a(int)h(info)g(=)g(pvm_upkfloat\()41 b(float)i(*fp,)21 b(int)g(nitem,)g(int)g(stride)f(\))p 1649 2168 V 248 2222 V 296 2206 a(int)h(info)g(=)g(pvm_upkint\()85 b(int)i(*np,)21 b(int)g(nitem,)g(int)g(stride)f(\))p 1649 2222 V 248 2276 V 296 2260 a(int)h(info)g(=)g(pvm_upklong\()63 b(long)i(*np,)21 b(int)g(nitem,)g(int)g(stride)f(\))p 1649 2276 V 248 2330 V 296 2314 a(int)h(info)g(=)g(pvm_upkshort\()41 b(short)i(*np,)21 b(int)g(nitem,)g(int)g(stride)f(\))p 1649 2330 V 248 2384 V 296 2368 a(int)h(info)g(=)g(pvm_upkstr\()85 b(char)65 b(*cp)21 b(\))p 1649 2384 V 249 2385 1401 2 v 248 2439 2 54 v 296 2423 a(int)g(info)g(=)g(pvm_unpackf\()f(const)h (char)g(*fmt,)f(...)h(\))p 1649 2439 V 249 2441 1401 2 v eop %%Page: 60 79 60 78 bop 249 251 a Fu(60)1375 b(Chapter)13 b(5)291 507 y FA(The)j(routine)g(p)o(vm)p 605 507 13 2 v 13 w(unpac)o(kf\(\))g (uses)h(a)e(prin)o(tf-lik)o(e)g(format)f(expression)j(to)e(sp)q(ecify)i (what)e(data)249 561 y(to)f(unpac)o(k)g(and)g(ho)o(w)f(to)h(unpac)o(k)g (it)f(from)f(the)j(receiv)o(e)g(bu\013er.)291 615 y(A)9 b(single)g(F)m(ortran)g(subroutine)h(handles)g(all)e(the)i(unpac)o (king)f(functions)h(of)e(the)i(ab)q(o)o(v)o(e)g(C)f(routines.)p 249 692 1096 2 v 248 746 2 54 v 274 730 a Fs(call)21 b(pvmfunpack\()e(what,)i(xp,)g(nitem,)g(stride,)f(info)h(\))p 1344 746 V 249 747 1096 2 v 291 843 a FA(The)11 b(argumen)o(t)e Fs(xp)h FA(is)g(the)h(arra)o(y)g(to)f(b)q(e)h(unpac)o(k)o(ed)g(in)o (to.)16 b(The)11 b(in)o(teger)g(argumen)o(t)f Fs(what)f FA(sp)q(eci\014es)249 897 y(the)15 b(t)o(yp)q(e)f(of)f(data)h(to)g(b)q (e)g(unpac)o(k)o(ed.)19 b(\(Same)12 b Fs(what)h FA(options)h(as)g(for)f (p)o(vmfpac)o(k\(\)\).)249 1017 y FD(5.7)52 b(Dynamic)18 b(Pro)q(cess)f(Groups)249 1125 y FA(The)i(dynamic)e(pro)q(cess)j(group) f(functions)g(are)g(built)f(on)g(top)g(of)g(the)i(core)f(PVM)g (routines.)33 b(A)249 1179 y(separate)18 b(library)e Fs(libgpvm3.a)e FA(m)o(ust)h(b)q(e)j(link)o(ed)e(with)g(user)h (programs)f(that)g(mak)o(e)f(use)j(of)e(an)o(y)249 1233 y(of)g(the)g(group)g(functions.)25 b(The)17 b(p)o(vmd)e(do)q(es)i(not)f (p)q(erform)f(the)i(group)f(functions.)25 b(This)16 b(task)g(is)249 1287 y(handled)e(b)o(y)f(a)h(group)f(serv)o(er)j(that)e(is)f (automatically)e(started)k(when)f(the)g(\014rst)h(group)f(function)f (is)249 1341 y(in)o(v)o(ok)o(ed.)j(There)d(is)e(some)g(debate)h(ab)q (out)f(ho)o(w)g(groups)g(should)g(b)q(e)h(handled)g(in)f(a)g (message-passing)249 1395 y(in)o(terface.)27 b(The)18 b(issues)f(include)g(e\016ciency)h(and)e(reliabilit)o(y)m(,)f(and)i (there)h(are)f(tradeo\013s)h(b)q(et)o(w)o(een)249 1449 y(static)g(v)o(ersus)h(dynamic)d(groups.)29 b(Some)16 b(p)q(eople)i(argue)g(that)g(only)e(tasks)i(in)f(a)h(group)f(can)h (call)249 1503 y(group)c(functions.)291 1557 y(In)19 b(k)o(eeping)f(with)h(the)h(PVM)f(philosoph)o(y)m(,)f(the)i(group)e (functions)h(are)h(designed)f(to)g(b)q(e)h(v)o(ery)249 1611 y(general)15 b(and)f(transparen)o(t)i(to)e(the)i(user,)f(at)f (some)g(cost)h(in)g(e\016ciency)m(.)20 b(An)o(y)15 b(PVM)g(task)f(can)h (join)249 1665 y(or)g(lea)o(v)o(e)f(an)o(y)h(group)f(at)h(an)o(y)f (time)f(without)i(ha)o(ving)e(to)i(inform)d(an)o(y)j(other)g(task)g(in) f(the)i(a\013ected)249 1719 y(groups.)27 b(T)m(asks)16 b(can)h(broadcast)h(messages)e(to)h(groups)g(of)f(whic)o(h)h(they)g (are)g(not)g(a)f(mem)o(b)q(er.)25 b(In)249 1773 y(general,)15 b(an)o(y)f(PVM)h(task)g(ma)o(y)e(call)h(an)o(y)g(of)g(the)h(follo)o (wing)d(group)j(functions)g(at)f(an)o(y)g(time.)20 b(The)249 1827 y(exceptions)d(are)f(p)o(vm)p 606 1827 13 2 v 13 w(lvgroup\(\),)g(p)o(vm)p 897 1827 V 13 w(barrier\(\),)h(and)e(p)o(vm)p 1255 1827 V 13 w(reduce\(\),)j(whic)o(h)e(b)o(y)f(their)h(nature)249 1881 y(require)f(the)f(calling)f(task)h(to)g(b)q(e)g(a)g(mem)o(b)q(er)e (of)h(the)i(sp)q(eci\014ed)g(group.)p 249 1955 922 2 v 248 2009 2 54 v 274 1993 a Fs(int)21 b(inum)49 b(=)22 b(pvm)p 611 1993 14 2 v 15 w(joingroup\()e(char)g(*group)h(\))p 1170 2009 2 54 v 248 2063 V 274 2047 a(int)g(info)49 b(=)22 b(pvm)p 611 2047 14 2 v 15 w(lvgroup\()e(char)h(*group)f(\))p 1170 2063 2 54 v 248 2117 V 274 2100 a(call)h(pvmfjoingroup\()e(group,) h(inum)h(\))p 1170 2117 V 248 2171 V 274 2154 a(call)g(pvmflvgroup\()e (group,)i(info)g(\))p 1170 2171 V 249 2172 922 2 v 291 2265 a FA(These)e(routines)g(allo)o(w)e(a)h(task)h(to)f(join)f(or)i (lea)o(v)o(e)f(a)g(user)i(named)d(group.)31 b(The)19 b(\014rst)h(call)d(to)249 2319 y(p)o(vm)p 331 2319 13 2 v 13 w(joingroup\(\))j(creates)i(a)e(group)g(with)g(name)f Fs(group)g FA(and)h(puts)h(the)g(calling)e(task)h(in)g(this)249 2373 y(group.)d(p)o(vm)p 464 2373 V 14 w(joingroup\(\))11 b(returns)j(the)e(instance)h(n)o(um)o(b)q(er)e(\()p Fs(inum)p FA(\))h(of)f(the)i(pro)q(cess)h(in)e(this)g(group.)249 2427 y(Instance)17 b(n)o(um)o(b)q(ers)f(run)g(from)e(0)i(to)f(the)i(n)o (um)o(b)q(er)e(of)g(group)h(mem)o(b)q(ers)f(min)o(us)f(1.)24 b(In)15 b(PVM)i(3,)e(a)249 2481 y(task)f(can)g(join)f(m)o(ultiple)f (groups.)p eop %%Page: 61 80 61 79 bop 249 251 a Fu(PVM)13 b(User)g(In)o(terface)1218 b(61)291 507 y FA(If)17 b(a)g(pro)q(cess)i(lea)o(v)o(es)e(a)h(group)f (and)g(then)h(rejoins)g(it,)f(that)h(pro)q(cess)h(ma)o(y)c(receiv)o(e)k (a)e(di\013eren)o(t)249 561 y(instance)g(n)o(um)o(b)q(er.)23 b(Instance)18 b(n)o(um)o(b)q(ers)d(are)i(recycled)g(so)f(a)g(task)g (joining)e(a)i(group)g(will)e(get)i(the)249 615 y(lo)o(w)o(est)f(a)o(v) n(ailable)e(instance)j(n)o(um)o(b)q(er.)k(But)c(if)e(m)o(ultiple)f (tasks)j(are)f(joining)f(a)g(group,)h(there)h(is)f(no)249 669 y(guaran)o(tee)f(that)g(a)g(task)g(will)e(b)q(e)j(assigned)f(its)g (previous)g(instance)h(n)o(um)o(b)q(er.)291 723 y(T)m(o)d(assist)i(the) g(user)h(in)e(main)o(taining)d(a)j(con)o(tin)o(uous)h(set)g(of)f (instance)h(n)o(um)o(b)q(ers)f(despite)i(joining)249 777 y(and)h(lea)o(ving,)f(the)h(p)o(vm)p 642 777 13 2 v 13 w(lvgroup\(\))g(function)g(do)q(es)g(not)g(return)h(un)o(til)e (the)i(task)f(is)g(con\014rmed)f(to)249 831 y(ha)o(v)o(e)k(left.)35 b(A)19 b(p)o(vm)p 588 831 V 14 w(joingroup\(\))f(called)h(after)h(this) f(return)i(will)d(assign)h(the)h(v)n(acan)o(t)f(instance)249 885 y(n)o(um)o(b)q(er)c(to)h(the)h(new)f(task.)25 b(It)16 b(is)g(the)h(user's)g(resp)q(onsibilit)o(y)e(to)h(main)o(tain)d(a)j (con)o(tiguous)g(set)h(of)249 939 y(instance)d(n)o(um)o(b)q(ers)e(if)g (the)h(algorithm)d(requires)15 b(it.)i(If)12 b(sev)o(eral)h(tasks)h (lea)o(v)o(e)e(a)h(group)f(and)h(no)g(tasks)249 993 y(join,)f(then)j (there)g(will)e(b)q(e)h(gaps)g(in)f(the)i(instance)f(n)o(um)o(b)q(ers.) p 249 1067 1047 2 v 248 1121 2 54 v 274 1105 a Fs(int)21 b(tid)g(=)h(pvm)p 561 1105 14 2 v 15 w(gettid\()e(char)h(*group,)g(int) g(inum)g(\))p 1294 1121 2 54 v 248 1175 V 274 1159 a(int)g(inum)g(=)h (pvm)p 583 1159 14 2 v 15 w(getinst\()e(char)h(*group,)f(int)h(tid)h (\))p 1294 1175 2 54 v 248 1229 V 274 1213 a(int)f(size)g(=)h(pvm)p 583 1213 14 2 v 15 w(gsize\()e(char)h(*group)g(\))p 1294 1229 2 54 v 248 1283 V 274 1267 a(call)g(pvmfgettid\()e(group,)i(inum,) g(tid)g(\))p 1294 1283 V 248 1337 V 274 1320 a(call)g(pvmfgetinst\()e (group,)i(tid,)g(inum)g(\))p 1294 1337 V 248 1391 V 274 1374 a(call)g(pvmfgsize\()f(group,)g(size)h(\))p 1294 1391 V 249 1392 1047 2 v 291 1488 a FA(The)13 b(routine)g(p)o(vm)p 599 1488 13 2 v 14 w(gettid\(\))g(returns)i(the)e Fs(TID)g FA(of)f(the)i(pro)q(cess)h(with)d(a)h(giv)o(en)f(group)h(name)f(and)249 1542 y(instance)j(n)o(um)o(b)q(er.)j(p)o(vm)p 661 1542 V 13 w(gettid\(\))d(allo)o(ws)e(t)o(w)o(o)g(tasks)i(with)f(no)g(kno)o (wledge)g(of)f(eac)o(h)i(other)g(to)f(get)249 1595 y(eac)o(h)g(other's) f(TID)g(simply)e(b)o(y)i(joining)f(a)g(common)f(group.)17 b(The)d(routine)f(p)o(vm)p 1534 1595 V 14 w(getinst\(\))g(returns)249 1649 y(the)i(instance)g(n)o(um)o(b)q(er)f(of)g Fs(TID)f FA(in)h(the)h(sp)q(eci\014ed)h(group.)k(The)14 b(routine)h(p)o(vm)p 1498 1649 V 13 w(gsize\(\))g(returns)h(the)249 1703 y(n)o(um)o(b)q(er)d (of)h(mem)o(b)q(ers)e(in)i(the)g(sp)q(eci\014ed)h(group.)p 249 1777 1090 2 v 248 1831 2 54 v 274 1815 a Fs(int)21 b(info)g(=)h(pvm)p 583 1815 14 2 v 15 w(barrier\()e(char)h(*group,)f (int)h(count)g(\))p 1338 1831 2 54 v 248 1885 V 274 1869 a(call)g(pvmfbarrier\()e(group,)i(count,)f(info)h(\))p 1338 1885 V 249 1887 1090 2 v 291 1982 a FA(On)10 b(calling)f(p)o(vm)p 566 1982 13 2 v 13 w(barrier\(\))i(the)g(pro)q(cess)h(blo)q(c)o(ks)e (un)o(til)g Fs(count)f FA(mem)o(b)q(ers)g(of)g(a)h(group)g(ha)o(v)o(e)g (called)249 2036 y(p)o(vm)p 331 2036 V 13 w(barrier.)21 b(In)15 b(general)g Fs(count)e FA(should)i(b)q(e)g(the)g(total)f(n)o (um)o(b)q(er)g(of)g(mem)o(b)q(ers)g(of)g(the)h(group.)20 b(A)249 2090 y(coun)o(t)e(is)f(required)h(b)q(ecause)h(with)d(dynamic)g (pro)q(cess)j(groups)e(PVM)h(cannot)f(kno)o(w)g(ho)o(w)g(man)o(y)249 2144 y(mem)o(b)q(ers)11 b(are)h(in)f(a)h(group)g(at)f(a)h(giv)o(en)f (instan)o(t.)17 b(It)12 b(is)g(an)g(error)g(for)g(pro)q(cesses)i(to)e (call)f(p)o(vm)p 1709 2144 V 14 w(barrier)249 2198 y(with)k(a)g(group)h (it)f(is)g(not)h(a)f(mem)o(b)q(er)f(of.)22 b(It)16 b(is)f(also)g(an)g (error)i(if)d(the)i(coun)o(t)g(argumen)o(ts)f(across)h(a)249 2252 y(giv)o(en)c(barrier)g(call)g(do)f(not)h(matc)o(h.)17 b(F)m(or)11 b(example)g(it)h(is)g(an)f(error)i(if)f(one)g(mem)o(b)q(er) e(of)i(a)g(group)f(calls)249 2306 y(p)o(vm)p 331 2306 V 13 w(barrier\(\))17 b(with)e(a)g(coun)o(t)g(of)g(4,)g(and)g(another)h (mem)o(b)q(er)d(calls)i(p)o(vm)p 1429 2306 V 14 w(barrier\(\))h(with)f (a)g(coun)o(t)249 2360 y(of)e(5.)p eop %%Page: 62 81 62 80 bop 249 251 a Fu(62)1375 b(Chapter)13 b(5)p 249 467 1068 2 v 248 521 2 54 v 274 505 a Fs(int)21 b(info)g(=)h(pvm)p 583 505 14 2 v 15 w(bcast\()e(char)h(*group,)g(int)g(msgtag)f(\))p 1316 521 2 54 v 248 575 V 274 559 a(call)h(pvmfbcast\()f(group,)g (msgtag,)h(info)g(\))p 1316 575 V 249 577 1068 2 v 291 672 a FA(p)o(vm)p 373 672 13 2 v 13 w(b)q(cast\(\))c(lab)q(els)e(the)h (message)f(with)g(an)g(in)o(teger)h(iden)o(ti\014er)g Fs(msgtag)e FA(and)h(broadcasts)h(the)249 726 y(message)e(to)g(all)f (tasks)h(in)g(the)g(sp)q(eci\014ed)i(group)e(except)h(itself)f(\(if)g (it)f(is)h(a)g(mem)o(b)q(er)e(of)i(the)h(group\).)249 780 y(F)m(or)h(p)o(vm)p 408 780 V 13 w(b)q(cast\(\))i(\\all)c(tasks")j (is)f(de\014ned)h(to)f(b)q(e)h(those)g(tasks)f(the)h(group)f(serv)o(er) i(thinks)e(are)g(in)249 834 y(the)h(group)f(when)h(the)g(routine)f(is)g (called.)25 b(If)16 b(tasks)h(join)e(the)i(group)g(during)f(a)g (broadcast,)h(they)249 888 y(ma)o(y)12 b(not)i(receiv)o(e)i(the)e (message.)19 b(If)14 b(tasks)g(lea)o(v)o(e)g(the)h(group)f(during)g(a)g (broadcast,)g(a)g(cop)o(y)g(of)f(the)249 942 y(message)h(will)e(still)h (b)q(e)i(sen)o(t)f(to)g(them.)p 249 1016 1336 2 v 248 1070 2 54 v 274 1054 a Fs(int)21 b(info)g(=)h(pvm)p 583 1054 14 2 v 15 w(reduce\()48 b(void)21 b(\(*func\)\(\),)f(void)h (*data,)p 1584 1070 2 54 v 248 1124 V 797 1108 a(int)g(nitem,)g(int)g (datatype,)p 1584 1124 V 248 1178 V 797 1162 a(int)g(msgtag,)g(char)g (*group,)f(int)h(root)g(\))p 1584 1178 V 248 1232 V 274 1216 a(call)g(pvmfreduce\()172 b(func,)21 b(data,)g(count,)f(datatype,) p 1584 1232 V 248 1286 V 797 1270 a(msgtag,)g(group,)h(root,)g(info)g (\))p 1584 1286 V 249 1287 1336 2 v 291 1406 a FA(p)o(vm)p 373 1406 13 2 v 13 w(reduce\(\))e(p)q(erforms)d(a)h(global)e (arithmetic)h(op)q(eration)h(across)h(the)f(group,)g(for)g(example,)249 1460 y(global)11 b(sum)h(or)h(global)e(max.)16 b(The)e(result)f(of)g (the)g(reduction)h(op)q(eration)e(app)q(ears)i(on)f Fs(root)p FA(.)k(PVM)249 1514 y(supplies)d(four)g(prede\014ned)i(functions)e (that)g(the)g(user)h(can)f(place)g(in)g Fs(func)p FA(.)j(These)e(are) 336 1601 y Fs(PvmMax)336 1655 y(PvmMin)336 1709 y(PvmSum)336 1763 y(PvmProduct)249 1850 y FA(The)i(reduction)f(op)q(eration)g(is)g (p)q(erformed)g(elemen)o(t-wise)g(on)g(the)g(input)g(data.)24 b(F)m(or)16 b(example,)f(if)249 1904 y(the)e(data)f(arra)o(y)g(con)o (tains)g(t)o(w)o(o)g(\015oating-p)q(oin)o(t)f(n)o(um)o(b)q(ers)h(and)g (func)h(is)f(PvmMax,)e(then)j(the)g(result)249 1958 y(con)o(tains)k(t)o (w)o(o)f(n)o(um)o(b)q(ers|the)h(global)e(maxim)n(um)e(of)j(eac)o(h)h (group)g(mem)o(b)q(ers)e(\014rst)j(n)o(um)o(b)q(er)e(and)249 2012 y(the)f(global)d(maxim)n(um)e(of)j(eac)o(h)h(mem)o(b)q(er's)e (second)j(n)o(um)o(b)q(er.)291 2066 y(In)e(addition)g(users)i(can)f (de\014ne)h(their)f(o)o(wn)f(global)f(op)q(eration)i(function)f(to)h (place)g(in)f Fs(func)p FA(.)k(See)249 2120 y(App)q(endix)i(B)f(for)g (details.)31 b(An)19 b(example)e(is)h(giv)o(en)g(in)f(the)i(source)h (co)q(de)f(for)f(PVM.)g(F)m(or)g(more)249 2174 y(information)11 b(see)k Fs(PVM)p 610 2174 14 2 v 15 w(ROOT/examples/gexa)o(mples)o FA(.)291 2228 y Fr(Note:)22 b FA(p)o(vm)p 510 2228 13 2 v 14 w(reduce\(\))c(do)q(es)e(not)g(blo)q(c)o(k.)24 b(If)16 b(a)g(task)g(calls)g(p)o(vm)p 1340 2228 V 13 w(reduce)i(and)e(then)g(lea)o(v)o(es)g(the)249 2281 y(group)e(b)q (efore)g(the)h(ro)q(ot)f(has)g(called)f(p)o(vm)p 925 2281 V 14 w(reduce,)i(an)f(error)g(ma)o(y)e(o)q(ccur.)p eop %%Page: 63 82 63 81 bop 249 325 a Fp(6)25 b FD(Program)16 b(Examples)249 561 y FA(In)e(this)f(c)o(hapter)i(w)o(e)e(discuss)i(sev)o(eral)f (complete)f(PVM)h(programs)e(in)h(detail.)18 b(The)c(\014rst)g (example,)249 615 y(forkjoin.c,)e(sho)o(ws)i(ho)o(w)g(to)g(to)f(spa)o (wn)h(o\013)g(pro)q(cesses)j(and)d(sync)o(hronize)h(with)e(them.)18 b(The)c(second)249 669 y(example)h(discusses)i(a)f(F)m(ortran)f(dot)h (pro)q(duct)h(program,)d(PSDOT.F.)h(The)h(third)g(example,)f(fail-)249 723 y(ure.c,)f(demonstrates)g(ho)o(w)f(the)h(user)h(can)f(use)h(the)f Fs(pvm_notify\(\))d FA(call)i(to)g(create)i(fault)e(toleran)o(t)249 777 y(appliations.)23 b(W)m(e)15 b(presen)o(t)j(an)d(example)g(that)h (p)q(erforms)f(a)h(matrix)e(m)o(ultiply)m(.)21 b(Lastly)m(,)15 b(w)o(e)h(sho)o(w)249 831 y(ho)o(w)e(PVM)g(can)g(b)q(e)g(used)h(to)f (compute)f(heat)i(di\013usion)e(through)h(a)f(wire.)249 951 y FD(6.1)52 b(F)l(ork-Join)249 1059 y FA(Our)12 b(\014rst)g (example)e(demonstrates)h(ho)o(w)g(to)g(spa)o(wn)g(o\013)g(PVM)h(tasks) f(and)g(sync)o(hronize)h(with)f(them.)249 1113 y(The)16 b(program)e(spa)o(wns)h(sev)o(eral)h(tasks,)g(three)h(b)o(y)e(default.) 22 b(The)16 b(c)o(hildren)g(then)g(sync)o(hronize)g(b)o(y)249 1167 y(sending)f(a)e(message)h(to)g(their)h(paren)o(t)g(task.)k(The)14 b(paren)o(t)h(receiv)o(es)h(a)e(message)g(from)e(eac)o(h)j(of)e(the)249 1221 y(spa)o(wned)h(tasks)h(and)f(prin)o(ts)g(out)g(information)c(ab)q (out)k(the)h(message)e(from)f(the)j(c)o(hild)e(tasks.)291 1275 y(The)f(fork-join)f(program)f(con)o(tains)j(the)f(co)q(de)h(for)f (b)q(oth)h(the)f(paren)o(t)h(and)f(the)h(c)o(hild)f(tasks.)18 b(Let's)249 1329 y(examine)d(it)h(in)f(more)g(detail.)24 b(The)17 b(v)o(ery)f(\014rst)h(thing)f(the)g(program)f(do)q(es)i(is)f (call)f Fs(pvm_mytid\(\))p FA(.)249 1383 y(This)j(function)f(m)o(ust)g (b)q(e)i(called)e(b)q(efore)i(an)o(y)e(other)h(PVM)h(call)e(can)h(b)q (e)g(made.)29 b(The)18 b(result)h(of)249 1437 y(the)e Fs(pvm_mytid\(\))d FA(call)i(should)g(alw)o(a)o(ys)f(b)q(e)i(a)f(p)q (ositiv)o(e)h(in)o(teger.)26 b(If)16 b(it)g(is)g(not,)g(then)h (something)249 1491 y(is)h(seriously)h(wrong.)32 b(In)19 b(fork-join)e(w)o(e)h(c)o(hec)o(k)i(the)f(v)n(alue)f(of)g(m)o(ytid;)g (if)g(it)g(indicates)h(an)g(error,)249 1545 y(w)o(e)d(call)f Fs(pvm_perror\(\))e FA(and)j(exit)g(the)g(program.)23 b(The)16 b Fs(pvm_perror\(\))d FA(call)i(will)g(prin)o(t)g(a)h(mes-)249 1599 y(sage)21 b(indicating)f(what)g(w)o(en)o(t)h(wrong)g(with)f(the)i (last)e(PVM)h(call.)38 b(In)21 b(our)g(example)e(the)i(last)249 1653 y(call)d(w)o(as)g Fs(pvm_mytid\(\))p FA(,)e(so)j Fs(pvm_perror\(\))d FA(migh)o(t)g(prin)o(t)i(a)g(message)g(indicating)f (that)i(PVM)249 1707 y(hasn't)e(b)q(een)h(started)g(on)f(this)g(mac)o (hine.)25 b(The)18 b(argumen)o(t)d(to)i Fs(pvm_perror\(\))e FA(is)h(a)h(string)g(that)249 1761 y(will)c(b)q(e)j(prep)q(ended)h(to)d (an)o(y)h(error)g(message)g(prin)o(ted)g(b)o(y)g Fs(pvm_perror\(\))p FA(.)j(In)d(this)g(case)g(w)o(e)h(pass)249 1815 y(argv[0],)f(whic)o(h)h (is)g(the)h(name)e(of)h(the)h(program)e(as)h(it)g(w)o(as)g(t)o(yp)q(ed) h(on)f(the)h(command)d(line.)25 b(The)249 1869 y Fs(pvm_perror\(\))11 b FA(function)j(is)g(mo)q(deled)f(after)h(the)g(Unix)g Fs(perror\(\))e FA(function.)291 1923 y(Assuming)19 b(w)o(e)i(obtained) g(a)f(v)n(alid)f(result)j(for)e(m)o(ytid,)g(w)o(e)h(no)o(w)g(call)f Fs(pvm_parent\(\))p FA(.)36 b(The)249 1977 y Fs(pvm_parent\(\))14 b FA(function)i(will)f(return)j(the)f(TID)f(of)g(the)h(task)g(that)f (spa)o(wned)h(the)g(calling)e(task.)249 2031 y(Since)h(w)o(e)f(run)g (the)h(initial)d(fork-join)g(program)h(from)f(the)j(Unix)e(shell,)h (this)g(initial)e(task)j(will)d(not)249 2085 y(ha)o(v)o(e)e(a)h(paren)o (t;)g(it)f(will)g(not)g(ha)o(v)o(e)h(b)q(een)g(spa)o(wned)g(b)o(y)g (some)f(other)h(PVM)g(task)g(but)f(will)f(ha)o(v)o(e)i(b)q(een)249 2139 y(started)17 b(man)o(ually)d(b)o(y)i(the)h(user.)26 b(F)m(or)16 b(the)h(initial)d(forkjoin)h(task)h(the)h(result)g(of)f Fs(pvm_parent\(\))249 2193 y FA(will)f(not)h(b)q(e)h(an)o(y)f (particular)g(task)g(id)g(but)g(an)g(error)h(co)q(de,)h(PvmNoP)o(aren)o (t.)24 b(Th)o(us)16 b(w)o(e)h(can)f(dis-)249 2247 y(tinguish)c(the)i (paren)o(t)f(forkjoin)f(task)h(from)e(the)j(c)o(hildren)f(b)o(y)f(c)o (hec)o(king)i(whether)g(the)f(result)h(of)e(the)249 2301 y Fs(pvm_parent\(\))j FA(call)i(is)h(equal)f(to)g(PvmNoP)o(aren)o(t.)29 b(If)17 b(this)h(task)g(is)f(the)i(paren)o(t,)f(then)h(it)e(m)o(ust)249 2355 y(spa)o(wn)d(the)g(c)o(hildren.)19 b(If)13 b(it)h(is)f(not)h(the)h (paren)o(t,)f(then)g(it)g(m)o(ust)f(send)h(a)g(message)g(to)f(the)i (paren)o(t.)291 2408 y(Let's)i(examine)f(the)i(co)q(de)g(executed)h(b)o (y)e(the)h(paren)o(t)g(task.)28 b(The)18 b(n)o(um)o(b)q(er)e(of)h (tasks)h(is)f(tak)o(en)249 2462 y(from)c(the)i(command)d(line)j(as)f (argv[1].)19 b(If)c(the)g(n)o(um)o(b)q(er)f(of)g(tasks)i(is)e(not)h (legal,)e(then)j(w)o(e)f(exit)f(the)p eop %%Page: 64 83 64 82 bop 249 251 a Fu(64)1375 b(Chapter)13 b(6)249 507 y FA(program,)g(calling)g Fs(pvm_exit\(\))g FA(and)h(then)i(returning.) 21 b(The)15 b(call)f(to)h Fs(pvm_exit\(\))d FA(is)j(imp)q(ortan)o(t)249 561 y(b)q(ecause)20 b(it)d(tells)h(PVM)g(this)g(program)e(will)g(no)h (longer)h(b)q(e)g(using)g(an)o(y)f(of)g(the)h(PVM)h(facilities.)249 615 y(\(In)14 b(this)g(case)h(the)g(task)f(exits)g(and)g(PVM)g(will)e (deduce)k(that)e(the)g(dead)g(task)g(no)g(longer)g(needs)h(its)249 669 y(services.)25 b(Regardless,)16 b(it)f(is)h(go)q(o)q(d)f(st)o(yle)h (to)f(exit)h(cleanly)m(.\))22 b(Assuming)15 b(the)h(n)o(um)o(b)q(er)f (of)g(tasks)h(is)249 723 y(v)n(alid,)c(forkjoin)g(will)h(then)h (attempt)f(to)h(spa)o(wn)g(the)h(c)o(hildren.)291 777 y(The)20 b Fs(pvm_spawn\(\))d FA(call)i(tells)g(PVM)h(to)f(start)i(n)o (task)e(tasks)h(named)f(argv[0].)33 b(The)20 b(second)249 831 y(parameter)13 b(is)g(the)h(argumen)o(t)f(list)g(giv)o(en)g(to)g (the)h(spa)o(wned)g(tasks.)k(In)c(this)f(case)h(w)o(e)g(don't)f(care)h (to)249 885 y(giv)o(e)d(the)i(c)o(hildren)f(an)o(y)f(particular)h (command)d(line)i(argumen)o(ts,)h(so)f(this)h(v)n(alue)g(is)f(n)o(ull.) 17 b(The)12 b(third)249 939 y(parameter)j(to)h(spa)o(wn,)f(PvmT)m (askDefault,)f(is)h(a)g(\015ag)g(telling)g(PVM)h(to)f(spa)o(wn)h(the)g (tasks)g(in)f(the)249 993 y(default)h(lo)q(cation.)24 b(Had)16 b(w)o(e)h(b)q(een)g(in)o(terested)h(in)e(placing)f(the)i(c)o (hildren)g(on)f(a)g(sp)q(eci\014c)h(mac)o(hine)249 1047 y(or)h(a)g(mac)o(hine)f(of)h(a)g(particular)g(arc)o(hitecture,)j(then)e (w)o(e)f(w)o(ould)g(ha)o(v)o(e)g(used)h(PvmT)m(askHost)e(or)249 1101 y(PvmT)m(askArc)o(h)10 b(for)h(this)g(\015ag)g(and)g(sp)q (eci\014ed)i(the)e(host)h(or)f(arc)o(hitecture)i(as)e(the)h(fourth)f (parameter.)249 1155 y(Since)17 b(w)o(e)g(don't)f(care)i(where)g(the)f (tasks)g(execute,)i(w)o(e)e(use)g(PvmT)m(askDefault)d(for)j(the)g (\015ag)f(and)249 1209 y(n)o(ull)f(for)h(the)h(fourth)f(parameter.)24 b(Finally)m(,)15 b(n)o(task)h(tells)g(spa)o(wn)g(ho)o(w)g(man)o(y)e (tasks)j(to)f(start;)h(the)249 1263 y(in)o(teger)i(arra)o(y)f(c)o(hild) g(will)f(hold)h(the)h(task)g(ids)f(of)g(the)h(newly)g(spa)o(wned)g(c)o (hildren.)32 b(The)19 b(return)249 1317 y(v)n(alue)12 b(of)g Fs(pvm_spawn\(\))e FA(indicates)i(ho)o(w)g(man)o(y)f(tasks)i(w)o (ere)g(successfully)g(spa)o(wned.)19 b(If)12 b(info)f(is)h(not)249 1371 y(equal)g(to)g(n)o(task,)h(then)g(some)e(error)j(o)q(ccurred)g (during)e(the)h(spa)o(wn.)18 b(In)12 b(case)i(of)e(an)g(error,)h(the)g (error)249 1425 y(co)q(de)18 b(is)f(placed)h(in)f(the)h(task)f(id)g (arra)o(y)m(,)g(c)o(hild,)g(instead)g(of)g(the)h(actual)f(task)g(id.)28 b(The)18 b(fork-join)249 1479 y(program)11 b(lo)q(ops)g(o)o(v)o(er)h (this)h(arra)o(y)e(and)h(prin)o(ts)h(the)f(task)h(ids)f(or)g(an)o(y)f (error)i(co)q(des.)19 b(If)12 b(no)f(tasks)i(w)o(ere)249 1533 y(successfully)i(spa)o(wned,)f(then)h(the)f(program)e(exits.)291 1587 y(F)m(or)j(eac)o(h)i(c)o(hild)f(task,)g(the)h(paren)o(t)g(receiv)o (es)h(a)e(message)g(and)g(prin)o(ts)h(out)f(information)d(ab)q(out)249 1641 y(that)h(message.)20 b(The)14 b Fs(pvm_recv\(\))f FA(call)g(receiv)o(es)j(a)e(message)g(\(with)g(that)h(JOINT)m(A)o(G\))f (from)f(an)o(y)249 1694 y(task.)27 b(The)17 b(return)h(v)n(alue)e(of)h Fs(pvm_recv\(\))d FA(is)j(an)f(in)o(teger)i(indicating)d(a)i(message)f (bu\013er.)28 b(This)249 1748 y(in)o(teger)11 b(can)g(b)q(e)g(used)h (to)e(\014nd)h(out)f(information)e(ab)q(out)i(message)h(bu\013ers.)18 b(The)11 b(subsequen)o(t)h(call)e(to)249 1802 y Fs(pvm_bufinfo\(\))h FA(do)q(es)j(just)f(this;)g(it)g(gets)h(the)g(length,)f(tag,)f(and)h (task)g(id)g(of)g(the)h(sending)f(pro)q(cess)249 1856 y(for)h(the)g(message)g(indicated)g(b)o(y)f(buf.)18 b(In)c(fork-join)e (the)j(messages)f(sen)o(t)g(b)o(y)g(the)g(c)o(hildren)g(con)o(tain)249 1910 y(a)g(single)f(in)o(teger)i(v)n(alue,)d(the)j(task)f(id)g(of)f (the)h(c)o(hild)g(task.)k(The)c Fs(pvm_upkint\(\))e FA(call)h(unpac)o (ks)h(the)249 1964 y(in)o(teger)g(from)e(the)j(message)f(in)o(to)f(the) h(m)o(ydata)e(v)n(ariable.)17 b(As)d(a)g(sanit)o(y)f(c)o(hec)o(k,)i (forkjoin)d(tests)j(the)249 2018 y(v)n(alue)h(of)g(m)o(ydata)f(and)i (the)g(task)g(id)g(returned)h(b)o(y)f Fs(pvm_bufinfo\(\))p FA(.)24 b(If)16 b(the)h(v)n(alues)g(di\013er,)g(the)249 2072 y(program)c(has)h(a)f(bug,)h(and)g(an)g(error)h(message)e(is)h (prin)o(ted.)19 b(Finally)m(,)12 b(the)i(information)d(ab)q(out)j(the) 249 2126 y(message)g(is)f(prin)o(ted,)h(and)g(the)g(paren)o(t)h (program)d(exits.)291 2180 y(The)g(last)f(segmen)o(t)g(of)g(co)q(de)h (in)f(forkjoin)g(will)f(b)q(e)i(executed)h(b)o(y)f(the)g(c)o(hild)f (tasks.)17 b(Before)c(placing)249 2234 y(data)g(in)f(a)h(message)g (bu\013er,)h(the)f(bu\013er)h(m)o(ust)e(b)q(e)i(initialized)d(b)o(y)i (calling)f Fs(pvm_initsend\(\))p FA(.)j(The)249 2288 y(parameter)f(PvmDataDefault)e(indicates)j(that)g(PVM)g(should)f(do)h (whatev)o(er)g(data)f(con)o(v)o(ersion)h(is)249 2342 y(needed)e(to)f(ensure)h(that)f(the)g(data)f(arriv)o(es)h(in)f(the)h (correct)i(format)c(on)h(the)h(destination)g(pro)q(cessor.)249 2396 y(In)18 b(some)f(cases)i(this)e(ma)o(y)f(result)j(in)e (unnecessary)j(data)d(con)o(v)o(ersions.)30 b(If)18 b(the)g(user)h(is)e (sure)i(no)249 2450 y(data)12 b(con)o(v)o(ersion)h(will)e(b)q(e)i (needed)h(since)g(the)f(destination)f(mac)o(hine)g(uses)h(the)g(same)f (data)g(format,)249 2504 y(then)17 b(he)g(can)g(use)g(PvmDataRa)o(w)d (as)i(a)g(parameter)g(to)h Fs(pvm_initsend\(\))p FA(.)22 b(The)17 b Fs(pvm_pkint\(\))p eop %%Page: 65 84 65 83 bop 249 251 a Fu(Program)14 b(Examples)1237 b(65)249 507 y FA(call)13 b(places)h(a)g(single)f(in)o(teger,)h(m)o(ytid,)e(in)o (to)h(the)h(message)f(bu\013er.)19 b(It)14 b(is)g(imp)q(ortan)o(t)e(to) i(mak)o(e)e(sure)249 561 y(the)18 b(corresp)q(onding)h(unpac)o(k)f (call)f(exactly)h(matc)o(hes)f(the)i(pac)o(k)e(call.)29 b(P)o(ac)o(king)17 b(an)h(in)o(teger)g(and)249 615 y(unpac)o(king)d(it) f(as)i(a)f(\015oat)f(will)g(not)h(w)o(ork)g(correctly)m(.)23 b(Similarl)o(y)m(,)12 b(if)i(the)i(user)g(pac)o(ks)g(t)o(w)o(o)e(in)o (tegers)249 669 y(with)g(a)f(single)h(call,)f(he)h(cannot)g(unpac)o(k)g (those)h(in)o(tegers)g(b)o(y)f(calling)e Fs(pvm_upkint\(\))g FA(t)o(wice,)h(once)249 723 y(for)h(eac)o(h)h(in)o(teger.)21 b(There)15 b(m)o(ust)f(b)q(e)h(a)f(one)h(to)f(one)h(corresp)q(ondence)i (b)q(et)o(w)o(een)f(pac)o(k)f(and)f(unpac)o(k)249 777 y(calls.)k(Finally)m(,)11 b(the)k(message)e(is)h(sen)o(t)h(to)e(the)i (paren)o(t)f(task)g(using)g(a)f(message)h(tag)f(of)h(JOINT)m(A)o(G.)249 897 y FD(F)l(ork)i(Join)i(Example)249 1005 y Fs(/*)336 1059 y(Fork)j(Join)g(Example)336 1113 y(Demonstrates)f(how)h(to)g (spawn)g(processes)f(and)h(exchange)f(messages)249 1167 y(*/)249 1275 y(/*)h(defines)g(and)g(prototypes)f(for)h(the)g(PVM)g (library)g(*/)249 1329 y(#include)f(<pvm3.h>)249 1437 y(/*)h(Maximum)g(number)f(of)i(children)e(this)h(program)f(will)h (spawn)g(*/)249 1491 y(#define)f(MAXNCHILD)64 b(20)249 1545 y(/*)21 b(Tag)h(to)f(use)g(for)g(the)h(joing)e(message)h(*/)249 1599 y(#define)f(JOINTAG)108 b(11)249 1748 y(int)249 1802 y(main\(int)20 b(argc,)h(char*)g(argv[]\))249 1856 y({)336 1964 y(/*)h(number)e(of)i(tasks)e(to)i(spawn,)e(use)h(3)h(as)f (the)h(default)e(*/)336 2018 y(int)h(ntask)g(=)h(3;)336 2072 y(/*)g(return)e(code)h(from)g(pvm)g(calls)g(*/)336 2126 y(int)g(info;)336 2180 y(/*)h(my)f(task)g(id)g(*/)336 2234 y(int)g(mytid;)336 2288 y(/*)h(my)f(parents)f(task)h(id)h(*/)336 2342 y(int)f(myparent;)336 2396 y(/*)h(children)e(task)h(id)g(array)g (*/)336 2450 y(int)g(child[MAXNCHILD];)336 2504 y(int)g(i,)h(mydata,)e (buf,)h(len,)g(tag,)g(tid;)p eop %%Page: 66 85 66 84 bop 249 251 a Fu(66)1375 b(Chapter)13 b(6)336 590 y Fs(/*)22 b(find)f(out)g(my)g(task)g(id)g(number)g(*/)336 644 y(mytid)g(=)h(pvm_mytid\(\);)336 752 y(/*)g(check)e(for)i(error)e (*/)336 806 y(if)i(\(mytid)e(<)i(0\))f({)423 860 y(/*)h(print)f(out)g (the)g(error)g(*/)423 914 y(pvm_perror\(argv[0]\))o(;)423 968 y(/*)h(exit)f(the)g(program)f(*/)423 1022 y(return)h(-1;)423 1076 y(})336 1130 y(/*)h(find)f(my)g(parent's)f(task)h(id)g(number)g (*/)336 1184 y(myparent)f(=)i(pvm_parent\(\);)336 1292 y(/*)g(exit)f(if)g(there)g(is)g(some)g(error)g(other)g(than)g (PvmNoParent)e(*/)336 1346 y(if)j(\(\(myparent)d(<)j(0\))f(&&)h (\(myparent)e(!=)h(PvmNoParent\)\))e({)423 1400 y (pvm_perror\(argv[0]\))o(;)423 1454 y(pvm_exit\(\);)423 1508 y(return)i(-1;)423 1562 y(})336 1699 y(/*)h(if)f(i)h(don't)e(have) h(a)h(parent)e(then)h(i)h(am)f(the)h(parent)e(*/)336 1753 y(if)i(\(myparent)e(==)h(PvmNoParent\))e({)423 1807 y(/*)j(find)f(out)g(how)g(many)g(tasks)g(to)g(spawn)g(*/)423 1861 y(if)h(\(argc)f(==)g(2\))g(ntask)g(=)h(atoi\(argv[1]\);)423 1914 y(/*)g(make)f(sure)g(ntask)f(is)i(legal)f(*/)423 1968 y(if)h(\(\(ntask)e(<)i(1\))f(||)g(\(ntask)g(>)h(MAXNCHILD\)\))d({) j(pvm_exit\(\);)d(return)i(0;)g(})423 2076 y(/*)h(spawn)f(the)g(child)f (tasks)h(*/)423 2130 y(info)g(=)h(pvm_spawn\(argv[0])o(,)d (\(char**\)0,)h(PvmTaskDefault,)e(\(char*\)0,)511 2184 y(ntask,)i(child\);)423 2238 y(/*)i(print)f(out)g(the)g(task)g(ids)g (*/)423 2292 y(for)h(\(i)f(=)h(0;)f(i)h(<)f(ntask;)g(i++\))511 2346 y(if)g(\(child[i])f(<)h(0\))h(/*)f(print)g(the)g(error)g(code)g (in)g(decimal*/)598 2400 y(printf\(")f(\045d",)h(child[i]\);)511 2454 y(else)42 b(/*)22 b(print)e(the)i(task)f(id)g(in)g(hex)h(*/)598 2508 y(printf\("t\045x\\t",)c(child[i]\);)p eop %%Page: 67 86 67 85 bop 249 251 a Fu(Program)14 b(Examples)1237 b(67)423 507 y Fs(putchar\('\\n'\);)423 644 y(/*)22 b(make)f(sure)g(spawn)f (succeeded)g(*/)423 698 y(if)i(\(info)f(==)g(0\))g({)h(pvm_exit\(\);)d (return)i(-1;)g(})423 806 y(/*)h(only)f(expect)f(responses)g(from)h (those)g(spawned)f(correctly)g(*/)423 860 y(ntask)h(=)h(info;)423 968 y(for)g(\(i)f(=)h(0;)f(i)h(<)f(ntask;)g(i++\))g({)511 1022 y(/*)g(recv)g(a)h(message)e(from)h(any)g(child)g(process)f(*/)511 1076 y(buf)h(=)g(pvm_recv\(-1,)f(JOINTAG\);)511 1130 y(if)h(\(buf)g(<)h(0\))f(pvm_perror\("calli)o(ng)e(recv"\);)511 1184 y(info)i(=)g(pvm_bufinfo\(buf,)e(&len,)h(&tag,)h(&tid\);)511 1238 y(if)g(\(info)g(<)g(0\))h(pvm_perror\("call)o(ing)d (pvm_bufinfo"\);)511 1292 y(info)i(=)g(pvm_upkint\(&mydata)o(,)e(1,)i (1\);)511 1346 y(if)g(\(info)g(<)g(0\))h(pvm_perror\("call)o(ing)d (pvm_upkint"\);)511 1400 y(if)i(\(mydata)f(!=)i(tid\))f(printf\("This)e (should)i(not)g(happen!\\n"\);)511 1454 y(printf\("Length)d(\045d,)k (Tag)f(\045d,)g(Tid)g(t\045x\\n",)g(len,)f(tag,)h(tid\);)511 1508 y(})423 1562 y(pvm_exit\(\);)423 1616 y(return)g(0;)423 1670 y(})314 1807 y(/*)h(i'm)f(a)h(child)e(*/)314 1861 y(info)h(=)h(pvm_initsend\(PvmD)o(ataDe)o(fault)o(\);)314 1914 y(if)g(\(info)f(<)g(0\))h({)380 1968 y(pvm_perror\("calli)o(ng)d (pvm_initsend"\);)f(pvm_exit\(\);)i(return)g(-1;)380 2022 y(})314 2076 y(info)h(=)h(pvm_pkint\(&mytid,)c(1,)k(1\);)314 2130 y(if)g(\(info)f(<)g(0\))h({)380 2184 y(pvm_perror\("calli)o(ng)d (pvm_pkint"\);)g(pvm_exit\(\);)h(return)g(-1;)380 2238 y(})314 2292 y(info)h(=)h(pvm_send\(myparent)o(,)d(JOINTAG\);)314 2346 y(if)j(\(info)f(<)g(0\))h({)380 2400 y(pvm_perror\("calli)o(ng)d (pvm_send"\);)g(pvm_exit\(\);)h(return)g(-1;)380 2454 y(})314 2508 y(pvm_exit\(\);)p eop %%Page: 68 87 68 86 bop 249 251 a Fu(68)1375 b(Chapter)13 b(6)467 536 y Fs(\045)22 b(forkjoin)467 590 y(t10001c)e(t40149)43 b(tc0037)467 644 y(Length)21 b(4,)g(Tag)g(11,)g(Tid)g(t40149)467 698 y(Length)g(4,)g(Tag)g(11,)g(Tid)g(tc0037)467 752 y(Length)g(4,)g(Tag)g(11,)g(Tid)g(t10001c)467 806 y(\045)h(forkjoin)e (4)467 860 y(t10001e)g(t10001d)h(t4014b)42 b(tc0038)467 914 y(Length)21 b(4,)g(Tag)g(11,)g(Tid)g(t4014b)467 968 y(Length)g(4,)g(Tag)g(11,)g(Tid)g(tc0038)467 1022 y(Length)g(4,)g(Tag)g (11,)g(Tid)g(t10001d)467 1076 y(Length)g(4,)g(Tag)g(11,)g(Tid)g (t10001e)249 1180 y Fo(Figure)13 b(6.1)249 1217 y Fy(Output)e(of)g (fork-join)e(program)314 1331 y Fs(return)21 b(0;)249 1385 y(})291 1470 y FA(Figure)15 b(6.1)f(sho)o(ws)i(the)g(output)g(of)e (running)i(forkjoin.)21 b(Notice)15 b(that)h(the)g(order)g(the)g (messages)249 1524 y(w)o(ere)f(receiv)o(ed)g(is)f(nondeterministic.)j (Since)d(the)h(main)d(lo)q(op)h(of)g(the)h(paren)o(t)h(pro)q(cesses)h (messages)249 1578 y(on)d(a)g(\014rst-come)g(\014rst-serv)o(e)i(basis,) e(the)h(order)g(of)e(the)i(prin)o(ts)g(are)f(simply)e(determined)j(b)o (y)f(time)e(it)249 1632 y(tak)o(es)j(messages)g(to)g(tra)o(v)o(el)g (from)e(the)i(c)o(hild)g(tasks)g(to)g(the)g(paren)o(t.)249 1753 y FD(6.2)52 b(Dot)18 b(Pro)q(duct)249 1861 y FA(Here)12 b(w)o(e)f(sho)o(w)g(a)g(simple)e(F)m(ortran)i(program,)e(PSDOT,)i(for)f (computing)g(a)g(dot)h(pro)q(duct.)18 b(The)11 b(pro-)249 1914 y(gram)g(computes)h(the)h(dot)f(pro)q(duct)h(of)f(arra)o(ys,)h(X)f (and)g(Y.)g(First)h(PSDOT)f(calls)g(PVMFMYTID\(\))249 1968 y(and)k(PVMFP)m(ARENT\(\).)25 b(The)16 b(PVMFP)m(ARENT)h(call)e (will)f(return)k(PVMNOP)m(ARENT)e(if)f(the)249 2022 y(task)c(w)o(asn't) g(spa)o(wned)g(b)o(y)g(another)h(PVM)f(task.)17 b(If)11 b(this)g(is)g(the)g(case,)h(then)g(PSDOT)f(is)g(the)h(master)249 2076 y(and)i(m)o(ust)f(spa)o(wn)i(the)f(other)h(w)o(ork)o(er)g(copies)g (of)e(PSDOT.)h(PSDOT)h(then)g(asks)f(the)h(user)h(for)d(the)249 2130 y(n)o(um)o(b)q(er)f(of)h(pro)q(cesses)j(to)d(use)h(and)e(the)i (length)f(of)g(v)o(ectors)h(to)f(compute.)k(Eac)o(h)d(spa)o(wned)f(pro) q(cess)249 2184 y(will)e(receiv)o(e)j Fn(n=npr)q(oc)d FA(elemen)o(ts)i(of)e(X)i(and)f(Y,)g(where)h Fn(n)g FA(is)f(the)h (length)f(of)g(the)h(v)o(ectors)g(and)f Fn(npr)q(oc)249 2238 y FA(is)k(the)h(n)o(um)o(b)q(er)f(of)g(pro)q(cesses)j(b)q(eing)d (used)i(in)e(the)h(computation.)24 b(If)16 b Fn(npr)q(oc)g FA(do)q(es)h(not)f(divide)g Fn(n)249 2292 y FA(ev)o(enly)m(,)11 b(then)h(the)f(master)g(will)f(compute)g(the)i(dot)f(pro)q(duct)h(on)f (extra)g(the)h(elemen)o(ts.)17 b(The)12 b(subrou-)249 2346 y(tine)h(SGENMA)m(T)f(randomly)e(generates)k(v)n(alues)f(for)f(X)g (and)h(Y.)f(PSDOT)g(then)i(spa)o(wns)e Fn(npr)q(oc)6 b Ft(\000)g FA(1)249 2400 y(copies)19 b(of)e(itself)h(and)f(sends)j (eac)o(h)e(new)h(task)f(a)f(part)i(of)e(the)i(X)f(and)f(Y)h(arra)o(ys.) 31 b(The)18 b(message)249 2454 y(con)o(tains)13 b(the)h(length)e(of)h (the)g(subarra)o(ys)h(in)e(the)i(message)f(and)f(the)i(subarra)o(ys)g (themselv)o(es.)j(After)249 2508 y(the)f(master)f(spa)o(wns)g(the)h(w)o (ork)o(er)g(pro)q(cesses)i(and)d(sends)h(out)f(the)h(sub)o(v)o(ectors,) h(the)f(master)e(then)p eop %%Page: 69 88 69 87 bop 249 251 a Fu(Program)14 b(Examples)1237 b(69)249 507 y FA(computes)15 b(the)h(dot)e(pro)q(duct)i(on)f(its)g(p)q(ortion)g (of)f(X)h(and)g(Y.)g(The)g(master)g(pro)q(cess)i(then)e(receiv)o(es)249 561 y(the)i(other)g(lo)q(cal)e(dot)h(pro)q(ducts)i(from)c(the)j(w)o (ork)o(er)g(pro)q(cesses.)28 b(Notice)16 b(that)h(the)g(PVMFRECV)249 615 y(call)c(uses)j(a)e(wildcard)f(\()p Ft(\000)p FA(1\))i(for)e(the)i (task)f(id)g(parameter.)19 b(This)14 b(indicates)g(that)g(a)g(message)g (from)249 669 y FB(any)19 b FA(task)f(will)e(satisfy)i(the)h(receiv)o (e.)31 b(Using)18 b(the)h(wildcard)e(in)h(this)g(manner)f(results)i(in) e(a)h(race)249 723 y(condition.)30 b(In)18 b(this)g(case)h(the)f(race)h (condition)e(do)q(es)i(not)f(cause)h(a)f(problem)f(since)h(addition)f (is)249 777 y(comm)o(utativ)o(e.)f(In)e(other)h(w)o(ords,)e(it)h(do)q (esn't)h(matter)e(in)h(whic)o(h)g(order)h(w)o(e)f(add)g(the)h(partial)e (sums)249 831 y(from)g(the)i(w)o(ork)o(ers.)21 b(Unless)16 b(one)e(is)h(certain)g(that)g(the)g(race)h(will)d(not)h(ha)o(v)o(e)h (an)f(adv)o(erse)i(e\013ect)g(on)249 885 y(the)f(program,)c(race)k (conditions)f(should)f(b)q(e)i(a)o(v)o(oided.)291 939 y(Once)h(the)g(master)f(receiv)o(es)i(all)d(the)i(lo)q(cal)e(dot)h(pro) q(ducts)i(and)e(sums)f(them)h(in)o(to)g(a)g(global)e(dot)249 993 y(pro)q(duct,)19 b(it)f(then)g(calculates)g(the)h(en)o(tire)f(dot)g (pro)q(duct)g(lo)q(cally)m(.)28 b(These)19 b(t)o(w)o(o)e(results)i(are) f(then)249 1047 y(subtracted,)d(and)f(the)h(di\013erence)h(b)q(et)o(w)o (een)f(the)f(t)o(w)o(o)g(v)n(alues)g(is)g(prin)o(ted.)k(A)c(small)e (di\013erence)k(can)249 1101 y(b)q(e)f(exp)q(ected)h(b)q(ecause)f(of)e (the)i(v)n(ariation)d(in)i(\015oating-p)q(oin)o(t)e(roundo\013)i (errors.)291 1155 y(If)e(the)h(PSDOT)g(program)e(is)i(a)f(w)o(ork)o(er) h(then)h(it)e(receiv)o(es)j(a)d(message)h(from)e(the)i(master)f(pro)q (cess)249 1209 y(con)o(taining)j(subarra)o(ys)i(of)e(X)i(and)f(Y.)f(It) i(calculates)f(the)h(dot)f(pro)q(duct)h(of)f(these)h(subarra)o(ys)g (and)249 1263 y(sends)d(the)f(result)g(bac)o(k)g(to)f(the)h(master)g (pro)q(cess.)19 b(In)13 b(the)g(in)o(terests)h(of)e(brevit)o(y)g(w)o(e) h(do)f(not)h(include)249 1317 y(the)i(SGENMA)m(T)e(and)h(SDOT)g (subroutines.)249 1437 y FD(Example)k(program:)k(PSDOT.F)380 1545 y Fs(PROGRAM)e(PSDOT)249 1599 y(*)249 1653 y(*)43 b(PSDOT)21 b(performs)f(a)i(parallel)e(inner)h(\(or)g(dot\))g(product,) f(where)h(the)g(vectors)249 1707 y(*)43 b(X)22 b(and)f(Y)h(start)f(out) g(on)g(a)h(master)e(node,)h(which)g(then)g(sets)g(up)g(the)g(virtual) 249 1761 y(*)43 b(machine,)21 b(farms)f(out)i(the)f(data)g(and)g(work,) g(and)g(sums)g(up)g(the)g(local)g(pieces)249 1815 y(*)43 b(to)22 b(get)f(a)h(global)e(inner)h(product.)249 1869 y(*)249 1923 y(*)109 b(..)21 b(External)f(Subroutines)g(..)380 1977 y(EXTERNAL)g(PVMFMYTID,)g(PVMFPARENT,)f(PVMFSPAWN,)h(PVMFEXIT,)g (PVMFINITSEND)380 2031 y(EXTERNAL)g(PVMFPACK,)g(PVMFSEND,)g(PVMFRECV,)g (PVMFUNPACK,)f(SGENMAT)249 2085 y(*)249 2139 y(*)109 b(..)21 b(External)f(Functions)g(..)380 2193 y(INTEGER)g(ISAMAX)380 2247 y(REAL)h(SDOT)380 2301 y(EXTERNAL)f(ISAMAX,)g(SDOT)249 2355 y(*)249 2408 y(*)109 b(..)21 b(Intrinsic)f(Functions)g(..)380 2462 y(INTRINSIC)g(MOD)p eop %%Page: 70 89 70 88 bop 249 251 a Fu(70)1375 b(Chapter)13 b(6)249 507 y Fs(*)249 561 y(*)109 b(..)21 b(Parameters)f(..)380 615 y(INTEGER)g(MAXN)380 669 y(PARAMETER)g(\()h(MAXN)g(=)h(8000)f(\)) 380 723 y(INCLUDE)f('fpvm3.h')249 777 y(*)249 831 y(*)109 b(..)21 b(Scalars)g(..)380 885 y(INTEGER)f(N,)i(LN,)f(MYTID,)f(NPROCS,) h(IBUF,)f(IERR)380 939 y(INTEGER)g(I,)i(J,)f(K)380 993 y(REAL)g(LDOT,)g(GDOT)249 1047 y(*)249 1101 y(*)109 b(..)21 b(Arrays)g(..)380 1155 y(INTEGER)f(TIDS\(0:63\))380 1209 y(REAL)h(X\(MAXN\),)f(Y\(MAXN\))249 1263 y(*)249 1317 y(*)109 b(Enroll)20 b(in)i(PVM)f(and)g(get)g(my)h(and)f(the)g(master)g (process')f(task)h(ID)g(number)249 1371 y(*)380 1425 y(CALL)g(PVMFMYTID\()f(MYTID)g(\))380 1479 y(CALL)h(PVMFPARENT\()e (TIDS\(0\))i(\))249 1533 y(*)249 1587 y(*)109 b(If)21 b(I)h(need)f(to)g(spawn)g(other)g(processes)f(\(I)h(am)g(master)g (process\))249 1641 y(*)380 1694 y(IF)g(\()h(TIDS\(0\))e(.EQ.)h (PVMNOPARENT)f(\))h(THEN)249 1748 y(*)249 1802 y(*)174 b(Get)21 b(starting)g(information)249 1856 y(*)445 1910 y(WRITE\(*,*\))f('How)h(many)g(processes)f(should)g(participate)g (\(1-64\)?')445 1964 y(READ\(*,*\))g(NPROCS)445 2018 y(WRITE\(*,2000\))f(MAXN)445 2072 y(READ\(*,*\))h(N)445 2126 y(TIDS\(0\))h(=)g(MYTID)445 2180 y(IF)h(\()f(N)h(.GT.)f(MAXN)g(\)) g(THEN)511 2234 y(WRITE\(*,*\))e('N)j(too)f(large.)42 b(Increase)20 b(parameter)g(MAXN)h(to)h(run'//)358 2288 y($)370 b('this)21 b(case.')511 2342 y(STOP)445 2396 y(END)g(IF)249 2450 y(*)249 2504 y(*)174 b(LN)22 b(is)f(the)g(number)g (of)g(elements)f(of)i(the)f(dot)g(product)f(to)i(do)p eop %%Page: 71 90 71 89 bop 249 251 a Fu(Program)14 b(Examples)1237 b(71)249 507 y Fs(*)174 b(locally.)42 b(Everyone)20 b(has)h(the)h(same)f (number,)f(with)h(the)g(master)249 561 y(*)174 b(getting)21 b(any)g(left)g(over)g(elements.)41 b(J)22 b(stores)f(the)g(number)f(of) 249 615 y(*)174 b(elements)20 b(rest)h(of)h(procs)e(do.)249 669 y(*)445 723 y(J)i(=)f(N)h(/)g(NPROCS)445 777 y(LN)g(=)f(J)h(+)f (MOD\(N,)g(NPROCS\))445 831 y(I)h(=)f(LN)h(+)f(1)249 885 y(*)249 939 y(*)174 b(Randomly)20 b(generate)g(X)i(and)f(Y)249 993 y(*)445 1047 y(CALL)g(SGENMAT\()f(N,)i(1,)f(X,)g(N,)h(MYTID,)e (NPROCS,)h(MAXN,)f(J)i(\))445 1101 y(CALL)f(SGENMAT\()f(N,)i(1,)f(Y,)g (N,)h(I,)f(N,)h(LN,)f(NPROCS)f(\))249 1155 y(*)249 1209 y(*)174 b(Loop)21 b(over)g(all)g(worker)g(processes)249 1263 y(*)445 1317 y(DO)h(10)f(K)h(=)f(1,)h(NPROCS-1)249 1371 y(*)249 1425 y(*)240 b(Spawn)20 b(process)h(and)g(check)g(for)g (error)249 1479 y(*)511 1533 y(CALL)g(PVMFSPAWN\()e('psdot',)h(0,)i ('anywhere',)d(1,)j(TIDS\(K\),)e(IERR)h(\))511 1587 y(IF)g(\(IERR)g (.NE.)g(1\))g(THEN)576 1641 y(WRITE\(*,*\))f('ERROR,)g(could)h(not)g (spawn)g(process)f(#',K,)358 1694 y($)436 b('.)43 b(Dying)21 b(.)g(.)h(.')576 1748 y(CALL)f(PVMFEXIT\()f(IERR)h(\))576 1802 y(STOP)511 1856 y(END)g(IF)249 1910 y(*)249 1964 y(*)240 b(Send)21 b(out)g(startup)f(info)249 2018 y(*)511 2072 y(CALL)h(PVMFINITSEND\()e(PVMDEFAULT,)g(IBUF)i(\))511 2126 y(CALL)g(PVMFPACK\()e(INTEGER4,)h(J,)i(1,)f(1,)h(IERR)f(\))511 2180 y(CALL)g(PVMFPACK\()e(REAL4,)i(X\(I\),)g(J,)g(1,)h(IERR)f(\))511 2234 y(CALL)g(PVMFPACK\()e(REAL4,)i(Y\(I\),)g(J,)g(1,)h(IERR)f(\))511 2288 y(CALL)g(PVMFSEND\()e(TIDS\(K\),)i(0,)g(IERR)g(\))511 2342 y(I)g(=)h(I)f(+)h(J)314 2396 y(10)87 b(CONTINUE)249 2450 y(*)249 2504 y(*)174 b(Figure)21 b(master's)f(part)h(of)g(dot)g (product)p eop %%Page: 72 91 72 90 bop 249 251 a Fu(72)1375 b(Chapter)13 b(6)249 507 y Fs(*)445 561 y(GDOT)21 b(=)h(SDOT\()f(LN,)g(X,)g(1,)g(Y,)h(1)f(\))249 615 y(*)249 669 y(*)174 b(Receive)21 b(the)g(local)f(dot)i(products,)e (and)249 723 y(*)174 b(add)21 b(to)h(get)f(the)g(global)g(dot)g (product)249 777 y(*)445 831 y(DO)h(20)f(K)h(=)f(1,)h(NPROCS-1)511 885 y(CALL)f(PVMFRECV\()e(-1,)j(1,)f(IBUF)g(\))511 939 y(CALL)g(PVMFUNPACK\()e(REAL4,)i(LDOT,)f(1,)i(1,)f(IERR)g(\))511 993 y(GDOT)g(=)g(GDOT)g(+)h(LDOT)314 1047 y(20)87 b(CONTINUE)249 1101 y(*)249 1155 y(*)174 b(Print)21 b(out)g(result)249 1209 y(*)445 1263 y(WRITE\(*,*\))f(')43 b(')445 1317 y(WRITE\(*,*\))20 b('<x,y>)g(=)i(',GDOT)249 1371 y(*)249 1425 y(*)174 b(Do)22 b(sequential)d(dot)i(product)g(and)g(subtract)f (from)249 1479 y(*)174 b(distributed)20 b(dot)h(product)f(to)i(get)f (desired)f(error)h(estimate)249 1533 y(*)445 1587 y(LDOT)g(=)h(SDOT\()f (N,)g(X,)g(1,)h(Y,)f(1)h(\))445 1641 y(WRITE\(*,*\))e('<x,y>)g(:)i (sequential)e(dot)h(product.)42 b(<x,y>^)20 b(:)i('//)358 1694 y($)305 b('distributed)19 b(dot)i(product.')445 1748 y(WRITE\(*,*\))f('|)h(<x,y>)g(-)h(<x,y>^)e(|)i(=)f(',ABS\(GDOT)f (-)i(LDOT\))445 1802 y(WRITE\(*,*\))e('Run)h(completed.')249 1856 y(*)249 1910 y(*)109 b(If)21 b(I)h(am)f(a)h(worker)e(process)h (\(i.e.)f(spawned)h(by)g(master)g(process\))249 1964 y(*)380 2018 y(ELSE)249 2072 y(*)249 2126 y(*)174 b(Receive)21 b(startup)f(info)249 2180 y(*)445 2234 y(CALL)h(PVMFRECV\()f (TIDS\(0\),)g(0,)i(IBUF)f(\))445 2288 y(CALL)g(PVMFUNPACK\()f (INTEGER4,)g(LN,)h(1,)g(1,)h(IERR)f(\))445 2342 y(CALL)g(PVMFUNPACK\()f (REAL4,)g(X,)i(LN,)f(1,)g(IERR)g(\))445 2396 y(CALL)g(PVMFUNPACK\()f (REAL4,)g(Y,)i(LN,)f(1,)g(IERR)g(\))249 2450 y(*)249 2504 y(*)174 b(Figure)21 b(local)g(dot)g(product)f(and)h(send)g(it)h (in)f(to)g(master)p eop %%Page: 73 92 73 91 bop 249 251 a Fu(Program)14 b(Examples)1237 b(73)249 507 y Fs(*)445 561 y(LDOT)21 b(=)h(SDOT\()f(LN,)g(X,)g(1,)g(Y,)h(1)f (\))445 615 y(CALL)g(PVMFINITSEND\()e(PVMDEFAULT,)h(IBUF)h(\))445 669 y(CALL)g(PVMFPACK\()f(REAL4,)h(LDOT,)f(1,)i(1,)f(IERR)g(\))445 723 y(CALL)g(PVMFSEND\()f(TIDS\(0\),)g(1,)i(IERR)f(\))380 777 y(END)g(IF)249 831 y(*)380 885 y(CALL)g(PVMFEXIT\()f(0)h(\))249 939 y(*)249 993 y(1000)43 b(FORMAT\(I10,')19 b(Successfully)g(spawned)i (process)f(#',I2,',)g(TID)h(=',I10\))249 1047 y(2000)43 b(FORMAT\('Enter)19 b(the)i(length)g(of)g(vectors)f(to)i(multiply)e (\(1)h(-',I7,'\):'\))380 1101 y(STOP)249 1155 y(*)249 1209 y(*)109 b(End)21 b(program)f(PSDOT)249 1263 y(*)380 1317 y(END)249 1533 y FD(6.3)52 b(F)l(ailure)249 1641 y FA(The)13 b(failure)f(example)f(demonstrates)i(ho)o(w)f(one)g(can)h (kill)e(tasks)i(and)f(ho)o(w)g(one)h(can)g(\014nd)f(out)h(when)249 1694 y(tasks)g(exit)f(or)g(fail.)k(F)m(or)c(this)h(example)d(w)o(e)j (spa)o(wn)f(sev)o(eral)h(tasks,)g(just)f(as)h(w)o(e)f(did)g(in)g(the)h (previous)249 1748 y(examples.)18 b(One)e(of)d(these)j(unluc)o(ky)e (tasks)h(gets)g(killed)e(b)o(y)h(the)h(paren)o(t.)20 b(Since)15 b(w)o(e)g(are)f(in)o(terested)249 1802 y(in)i(\014nding)h (out)f(when)i(a)e(task)h(fails,)f(w)o(e)h(call)f Fs(pvm_notify\(\))e FA(after)j(spa)o(wning)f(the)h(tasks.)28 b(The)249 1856 y Fs(pvm_notify\(\))10 b FA(call)i(tells)g(PVM)h(to)f(send)i(the)f (calling)e(task)h(a)g(message)h(when)g(certain)g(tasks)g(exit.)249 1910 y(Here)i(w)o(e)f(are)h(in)o(terested)g(in)f(all)f(the)h(c)o (hildren.)19 b(Note)14 b(that)g(the)h(task)f(calling)e Fs(pvm_notify\(\))g FA(will)249 1964 y(receiv)o(e)j(the)f (noti\014cation,)f FB(not)h FA(the)g(tasks)g(giv)o(en)g(in)f(the)h (task)g(id)f(arra)o(y)m(.)18 b(It)13 b(w)o(ouldn't)g(mak)o(e)f(m)o(uc)o (h)249 2018 y(sense)17 b(to)e(send)h(a)f(noti\014cation)f(message)h(to) g(a)g(task)h(that)f(has)g(exited.)23 b(The)16 b(notify)e(call)g(can)i (also)249 2072 y(b)q(e)i(used)f(to)g(notify)f(a)h(task)g(when)g(a)g (new)g(host)g(has)g(b)q(een)h(added)f(or)g(deleted)h(from)d(the)j (virtual)249 2126 y(mac)o(hine.)e(This)d(migh)o(t)d(b)q(e)j(useful)g (if)f(a)g(program)f(w)o(an)o(ts)h(to)h(dynamically)c(adapt)k(to)f(the)h (curren)o(tly)249 2180 y(a)o(v)n(ailable)f(mac)o(hines.)291 2234 y(After)19 b(requesting)g(noti\014cation,)f(the)h(paren)o(t)g (task)f(then)h(kills)f(one)g(of)g(the)h(c)o(hildren;)h(in)e(this)249 2288 y(case,)e(one)g(of)f(the)h(middle)d(c)o(hildren)j(is)f(killed.)21 b(The)16 b(call)f(to)g Fs(pvm_kill\(\))e FA(simply)h(kills)g(the)i (task)249 2342 y(indicated)g(b)o(y)f(the)i(task)f(id)f(parameter.)24 b(After)16 b(killing)e(one)i(of)f(the)h(spa)o(wned)h(tasks,)f(the)h (paren)o(t)249 2396 y(w)o(aits)12 b(on)g(a)f Fs(pvm_recv\(-1,)20 b(TASKDIED\))10 b FA(for)h(the)i(message)f(notifying)e(it)i(the)h(task) f(has)g(died.)18 b(The)249 2450 y(task)12 b(id)g(of)f(the)i(task)f (that)h(has)f(exited)g(is)g(stored)i(as)e(a)g(single)f(in)o(teger)i(in) f(the)g(notify)f(message.)18 b(The)249 2504 y(pro)q(cess)d(unpac)o(ks)e (the)g(dead)g(task's)g(id)f(and)g(prin)o(ts)h(it)f(out.)18 b(F)m(or)12 b(go)q(o)q(d)g(measure)h(it)f(also)g(prin)o(ts)h(out)p eop %%Page: 74 93 74 92 bop 249 251 a Fu(74)1375 b(Chapter)13 b(6)249 507 y FA(the)j(task)g(id)f(of)g(the)h(task)f(it)g(killed.)22 b(These)17 b(ids)e(should)g(b)q(e)h(the)g(same.)22 b(The)16 b(c)o(hild)f(tasks)h(simply)249 561 y(w)o(ait)d(for)h(ab)q(out)f(a)h (min)o(ute)f(and)g(then)i(quietly)e(exit.)249 682 y FD(Example)18 b(program:)k(failure.c)249 790 y Fs(/*)336 844 y(Failure)f (notification)e(example)336 897 y(Demonstrates)h(how)h(to)g(tell)g (when)g(a)h(task)f(exits)249 951 y(*/)249 1059 y(/*)g(defines)g(and)g (prototypes)f(for)h(the)g(PVM)g(library)g(*/)249 1113 y(#include)f(<pvm3.h>)249 1221 y(/*)h(Maximum)g(number)f(of)i(children) e(this)h(program)f(will)h(spawn)g(*/)249 1275 y(#define)f(MAXNCHILD)64 b(20)249 1329 y(/*)21 b(Tag)h(to)f(use)g(for)g(the)h(task)e(done)h (message)g(*/)249 1383 y(#define)f(TASKDIED)173 b(11)249 1533 y(int)249 1587 y(main\(int)20 b(argc,)h(char*)g(argv[]\))249 1641 y({)336 1748 y(/*)h(number)e(of)i(tasks)e(to)i(spawn,)e(use)h(3)h (as)f(the)h(default)e(*/)336 1802 y(int)h(ntask)g(=)h(3;)336 1856 y(/*)g(return)e(code)h(from)g(pvm)g(calls)g(*/)336 1910 y(int)g(info;)336 1964 y(/*)h(my)f(task)g(id)g(*/)336 2018 y(int)g(mytid;)336 2072 y(/*)h(my)f(parents)f(task)h(id)h(*/)336 2126 y(int)f(myparent;)336 2180 y(/*)h(children)e(task)h(id)g(array)g (*/)336 2234 y(int)g(child[MAXNCHILD];)336 2288 y(int)g(i,)h(deadtid;) 336 2342 y(int)f(tid;)336 2396 y(char)g(*argv[5];)p eop %%Page: 75 94 75 93 bop 249 251 a Fu(Program)14 b(Examples)1237 b(75)336 507 y Fs(/*)22 b(find)f(out)g(my)g(task)g(id)g(number)g(*/)336 561 y(mytid)g(=)h(pvm_mytid\(\);)336 669 y(/*)g(check)e(for)i(error)e (*/)336 723 y(if)i(\(mytid)e(<)i(0\))f({)423 777 y(/*)h(print)f(out)g (the)g(error)g(*/)423 831 y(pvm_perror\(argv[0]\))o(;)423 885 y(/*)h(exit)f(the)g(program)f(*/)423 939 y(return)h(-1;)423 993 y(})336 1047 y(/*)h(find)f(my)g(parent's)f(task)h(id)g(number)g(*/) 336 1101 y(myparent)f(=)i(pvm_parent\(\);)336 1250 y(/*)g(exit)f(if)g (there)g(is)g(some)g(error)g(other)g(than)g(PvmNoParent)e(*/)336 1304 y(if)j(\(\(myparent)d(<)j(0\))f(&&)h(\(myparent)e(!=)h (PvmNoParent\)\))e({)423 1358 y(pvm_perror\(argv[0]\))o(;)423 1412 y(pvm_exit\(\);)423 1466 y(return)i(-1;)423 1520 y(})336 1628 y(/*)h(if)f(i)h(don't)e(have)h(a)h(parent)e(then)h(i)h(am) f(the)h(parent)e(*/)336 1682 y(if)i(\(myparent)e(==)h(PvmNoParent\))e ({)423 1736 y(/*)j(find)f(out)g(how)g(many)g(tasks)g(to)g(spawn)g(*/) 423 1790 y(if)h(\(argc)f(==)g(2\))g(ntask)g(=)h(atoi\(argv[1]\);)423 1844 y(/*)g(make)f(sure)g(ntask)f(is)i(legal)f(*/)423 1898 y(if)h(\(\(ntask)e(<)i(1\))f(||)g(\(ntask)g(>)h(MAXNCHILD\)\))d({) j(pvm_exit\(\);)d(return)i(0;)g(})423 2006 y(/*)h(spawn)f(the)g(child)f (tasks)h(*/)423 2060 y(info)g(=)h(pvm_spawn\(argv[0])o(,)d (\(char**\)0,)h(PvmTaskDebug,)f(\(char*\)0,)511 2114 y(ntask,)h(child\);)423 2222 y(/*)i(make)f(sure)g(spawn)f(succeeded)g (*/)423 2276 y(if)i(\(info)f(!=)g(ntask\))f({)i(pvm_exit\(\);)e(return) g(-1;)h(})423 2384 y(/*)h(print)f(the)g(tids)g(*/)423 2438 y(for)h(\(i)f(=)h(0;)f(i)h(<)f(ntask;)g(i++\))g (printf\("t\045x\\t",c)o(hild)o([i]\);)d(putchar\('\\n'\);)p eop %%Page: 76 95 76 94 bop 249 251 a Fu(76)1375 b(Chapter)13 b(6)423 507 y Fs(/*)22 b(ask)f(for)g(notification)e(when)i(child)g(exits)g(*/)423 561 y(info)g(=)h(pvm_notify\(PvmTas)o(kExit)o(,)d(TASKDIED,)h(ntask,)g (child\);)423 615 y(if)i(\(info)f(<)g(0\))h({)f(pvm_perror\("notify)o ("\);)e(pvm_exit\(\);)g(return)i(-1;)g(})423 746 y(/*)h(reap)f(the)g (middle)f(child)h(*/)423 800 y(info)g(=)h(pvm_kill\(child[nt)o(ask/2)o (]\);)423 854 y(if)g(\(info)f(<)g(0\))h({)f(pvm_perror\("kill"\))o(;)e (pvm_exit\(\);)g(return)i(-1;)g(})423 962 y(/*)h(wait)f(for)g(the)g (notification)e(*/)423 1016 y(info)i(=)h(pvm_recv\(-1,)d(TASKDIED\);) 423 1070 y(if)j(\(info)f(<)g(0\))h({)f(pvm_perror\("recv"\))o(;)e (pvm_exit\(\);)g(return)i(-1;)g(})423 1124 y(info)g(=)h (pvm_upkint\(&deadt)o(id,)d(1,)i(1\);)423 1178 y(if)h(\(info)f(<)g(0\)) h(pvm_perror\("cal)o(ling)c(pvm_upkint"\);)423 1286 y(/*)k(should)e(be) i(the)f(middle)f(child)h(*/)423 1340 y(printf\("Task)f(t\045x)h(has)g (exited.\\n",)f(deadtid\);)423 1394 y(printf\("Task)g(t\045x)h(is)g (middle)g(child.\\n",)f(child[ntask/2]\))o(;)423 1447 y(pvm_exit\(\);)423 1501 y(return)h(0;)423 1555 y(})336 1663 y(/*)h(i'm)f(a)g(child)g(*/)336 1717 y(sleep\(63\);)336 1771 y(pvm_exit\(\);)336 1825 y(return)g(0;)249 1879 y(})249 2022 y FD(6.4)52 b(Matrix)18 b(Multiply)249 2130 y FA(In)c(our)f(next)h(example)e(w)o(e)i(program)e(a)h(matrix-m)n (ultipl)o(y)e(algorithm)f(describ)q(ed)16 b(b)o(y)d(F)m(o)o(x)f(et)i (al.)j(in)249 2184 y([8)o(].)26 b(The)17 b Fs(mmult)f FA(program)f(can)i(b)q(e)g(found)f(at)h(the)g(end)g(of)f(this)h (section.)27 b(The)17 b Fs(mmult)f FA(program)249 2238 y(will)f(calculate)h Fn(C)j FA(=)d Fn(AB)r FA(,)h(where)h Fn(C)s FA(,)e Fn(A)p FA(,)g(and)h Fn(B)i FA(are)d(all)g(square)h (matrices.)25 b(F)m(or)16 b(simplicit)o(y)e(w)o(e)249 2292 y(assume)f(that)g Fn(m)c Ft(\002)f Fn(m)14 b FA(tasks)g(will)d(b)q (e)j(used)h(to)e(calculate)g(the)h(solution.)j(Eac)o(h)d(task)f(will)f (calculate)249 2346 y(a)k(subblo)q(c)o(k)g(of)g(the)h(resulting)f (matrix)f Fn(C)s FA(.)25 b(The)16 b(blo)q(c)o(k)g(size)h(and)f(the)h(v) n(alue)f(of)f Fn(m)i FA(is)f(giv)o(en)g(as)g(a)249 2400 y(command)9 b(line)j(argumen)o(t)e(to)i(the)g(program.)k(The)c (matrices)g Fn(A)g FA(and)f Fn(B)k FA(are)d(also)f(stored)i(as)f(blo)q (c)o(ks)249 2454 y(distributed)i(o)o(v)o(er)f(the)g Fn(m)655 2439 y Fl(2)687 2454 y FA(tasks.)19 b(Before)14 b(delving)e(in)o(to)g (the)i(details)f(of)f(the)i(program,)d(let)i(us)g(\014rst)249 2508 y(describ)q(e)j(the)e(algorithm)d(at)j(a)g(high)f(lev)o(el.)p eop %%Page: 77 96 77 95 bop 249 251 a Fu(Program)14 b(Examples)1237 b(77)291 507 y FA(Assume)15 b(w)o(e)h(ha)o(v)o(e)f(a)h(grid)f(of)g Fn(m)c Ft(\002)f Fn(m)16 b FA(tasks.)24 b(Eac)o(h)16 b(task)g(\()p Fn(t)1274 513 y Fk(ij)1319 507 y FA(where)g(0)e Ft(\024)h Fn(i;)7 b(j)17 b(<)d(m)p FA(\))j(initially)249 561 y(con)o(tains)g(blo)q(c)o(ks)h Fn(C)575 567 y Fk(ij)604 561 y FA(,)g Fn(A)665 567 y Fk(ij)694 561 y FA(,)g(and)f Fn(B)839 567 y Fk(ij)869 561 y FA(.)29 b(In)17 b(the)h(\014rst)h(step)f (of)f(the)h(algorithm)d(the)j(tasks)g(on)f(the)249 615 y(diagonal)12 b(\()p Fn(t)446 621 y Fk(ij)490 615 y FA(where)j Fn(i)e FA(=)f Fn(j)r FA(\))j(send)g(their)g(blo)q(c)o(k)f Fn(A)1067 621 y Fk(ii)1107 615 y FA(to)g(all)f(the)i(other)g(tasks)f (in)g(ro)o(w)g Fn(i)p FA(.)20 b(After)14 b(the)249 669 y(transmission)e(of)g Fn(A)566 675 y Fk(ii)592 669 y FA(,)g(all)g(tasks)h(calculate)g Fn(A)980 675 y Fk(ii)1013 669 y Ft(\002)7 b Fn(B)1083 675 y Fk(ij)1126 669 y FA(and)13 b(add)f(the)i(result)f(in)o(to)g Fn(C)1584 675 y Fk(ij)1613 669 y FA(.)k(In)c(the)h(next)249 723 y(step,)19 b(the)e(column)f(blo)q (c)o(ks)h(of)f Fn(B)k FA(are)e(rotated.)28 b(That)17 b(is,)g Fn(t)1229 729 y Fk(ij)1275 723 y FA(sends)i(its)e(blo)q(c)o(k)g (of)f Fn(B)k FA(to)d Fn(t)1734 730 y Fl(\()p Fk(i)p Fj(\000)p Fl(1\))p Fk(j)1832 723 y FA(.)249 777 y(\(T)m(ask)e Fn(t)381 783 y Fl(0)p Fk(j)430 777 y FA(sends)i(its)e Fn(B)j FA(blo)q(c)o(k)d (to)g Fn(t)829 784 y Fl(\()p Fk(m)p Fj(\000)p Fl(1\))p Fk(j)944 777 y FA(.\))23 b(The)16 b(tasks)f(no)o(w)g(return)i(to)e(the) h(\014rst)g(step;)g Fn(A)1749 784 y Fk(i)p Fl(\()p Fk(i)p Fl(+1\))249 831 y FA(is)e(m)o(ulticast)f(to)i(all)e(other)i(tasks)g(in) f(ro)o(w)h Fn(i)p FA(,)f(and)g(the)i(algorithm)11 b(con)o(tin)o(ues.)21 b(After)15 b Fn(m)g FA(iterations)249 885 y(the)g Fn(C)h FA(matrix)c(con)o(tains)i Fn(A)9 b Ft(\002)h Fn(B)r FA(,)k(and)f(the)i Fn(B)h FA(matrix)c(has)i(b)q(een)h(rotated)g(bac)o(k)f(in)o(to)f (place.)291 939 y(Let's)h(no)o(w)g(go)f(o)o(v)o(er)h(the)h(matrix)d(m)o (ultiply)f(as)j(it)g(is)g(programmed)d(in)j(PVM.)f(In)h(PVM)h(there)g (is)249 993 y(no)i(restriction)g(on)g(whic)o(h)g(tasks)g(ma)o(y)e(comm) o(unicate)f(with)j(whic)o(h)f(other)i(tasks.)27 b(Ho)o(w)o(ev)o(er,)17 b(for)249 1047 y(this)d(program)e(w)o(e)i(w)o(ould)f(lik)o(e)h(to)f (think)h(of)f(the)i(tasks)f(as)g(a)f(t)o(w)o(o-dimensional)e (conceptual)k(torus.)249 1101 y(In)e(order)h(to)f(en)o(umerate)g(the)h (tasks,)f(eac)o(h)h(task)f(joins)f(the)i(group)f Fs(mmult)p FA(.)k(Group)c(ids)g(are)g(used)h(to)249 1155 y(map)f(tasks)j(to)f(our) g(torus.)22 b(The)16 b(\014rst)g(task)f(to)g(join)f(a)h(group)f(is)h (giv)o(en)g(the)h(group)f(id)f(of)h(zero.)22 b(In)249 1209 y(the)16 b(mm)o(ult)d(program,)g(the)k(task)e(with)h(group)f(id)g (zero)i(spa)o(wns)f(the)g(other)g(tasks)g(and)g(sends)g(the)249 1263 y(parameters)f(for)g(the)h(matrix)e(m)o(ultiply)e(to)k(those)g (tasks.)23 b(The)15 b(parameters)h(are)f Fn(m)h FA(and)f Fn(bk)q(l)q(siz)r(e)p FA(:)249 1317 y(the)h(square)h(ro)q(ot)f(of)f (the)h(n)o(um)o(b)q(er)f(of)h(blo)q(c)o(ks)f(and)h(the)g(size)h(of)e(a) h(blo)q(c)o(k,)f(resp)q(ectiv)o(ely)m(.)25 b(After)16 b(all)249 1371 y(the)f(tasks)g(ha)o(v)o(e)g(b)q(een)h(spa)o(wned)f(and) f(the)h(parameters)g(transmitted,)f Fs(pvm_barrier\(\))e FA(is)i(called)249 1425 y(to)h(mak)o(e)f(sure)j(all)d(the)i(tasks)g(ha) o(v)o(e)g(joined)f(the)h(group.)23 b(If)15 b(the)h(barrier)g(is)f(not)h (p)q(erformed,)f(later)249 1479 y(calls)f(to)f Fs(pvm_gettid\(\))f FA(migh)o(t)f(fail)i(since)h(a)g(task)g(ma)o(y)e(not)i(ha)o(v)o(e)f(y)o (et)i(joined)e(the)i(group.)291 1533 y(After)h(the)g(barrier,)g(w)o(e)g (store)g(the)h(task)e(ids)h(for)f(the)h(other)g(tasks)g(in)g(our)f (\\ro)o(w")g(in)g(the)h(arra)o(y)249 1587 y Fs(myrow)p FA(.)i(This)c(is)g(done)g(b)o(y)g(calculating)f(the)i(group)f(ids)g (for)g(all)f(the)i(tasks)f(in)g(the)h(ro)o(w)f(and)g(asking)249 1641 y(PVM)k(for)f(the)h(task)g(id)f(for)h(the)g(corresp)q(onding)g (group)g(id.)28 b(Next)19 b(w)o(e)e(allo)q(cate)h(the)g(blo)q(c)o(ks)f (for)249 1694 y(the)d(matrices)e(using)h(mallo)q(c\(\).)j(In)d(an)g (actual)g(application)e(program)h(w)o(e)h(w)o(ould)g(exp)q(ect)h(that)f (the)249 1748 y(matrices)i(w)o(ould)f(already)h(b)q(e)h(allo)q(cated.) 22 b(Next)15 b(the)h(program)e(calculates)i(the)g(ro)o(w)f(and)g (column)249 1802 y(of)f(the)h(blo)q(c)o(k)f(of)g Fn(C)j FA(it)d(will)f(b)q(e)i(computing.)j(This)d(is)f(based)h(on)f(the)h(v)n (alue)f(of)g(the)h(group)f(id.)20 b(The)249 1856 y(group)14 b(ids)h(range)f(from)f(0)h(to)h Fn(m)10 b Ft(\000)g FA(1)k(inclusiv)o (e.)19 b(Th)o(us)c(the)g(in)o(teger)g(division)e(of)h(\()p Fn(my)q(g)q(id=m)p FA(\))j(will)249 1910 y(giv)o(e)d(the)g(task's)g(ro) o(w)g(and)g(\()p Fn(my)q(g)q(id)f FA(mo)q(d)d Fn(m)p FA(\))15 b(will)e(giv)o(e)g(the)i(column,)d(if)h(w)o(e)h(assume)g(a)g (ro)o(w)g(ma)r(jor)249 1964 y(mapping)g(of)i(group)h(ids)f(to)h(tasks.) 26 b(Using)17 b(a)f(similar)e(mapping,)h(w)o(e)h(calculate)h(the)g (group)g(id)f(of)249 2018 y(the)h(task)f(directly)g FB(ab)n(ove)g FA(and)g FB(b)n(elow)f FA(in)g(the)i(torus)f(and)g(store)h(their)f (task)g(ids)g(in)f Fs(up)h FA(and)f Fs(down)p FA(,)249 2072 y(resp)q(ectiv)o(ely)m(.)291 2126 y(Next)c(the)h(blo)q(c)o(ks)g (are)f(initialized)f(b)o(y)h(calling)f Fs(InitBlock\(\))p FA(.)15 b(This)c(function)g(simply)e(initializes)249 2180 y Fn(A)j FA(to)f(random)e(v)n(alues,)j Fn(B)h FA(to)f(the)g(iden)o (tit)o(y)e(matrix,)g(and)h Fn(C)j FA(to)d(zeros.)19 b(This)11 b(will)f(allo)o(w)g(us)h(to)h(v)o(erify)249 2234 y(the)j(computation)d (at)h(the)i(end)f(of)g(the)g(program)e(b)o(y)i(c)o(hec)o(king)g(that)g Fn(A)e FA(=)g Fn(C)s FA(.)291 2288 y(Finally)j(w)o(e)i(en)o(ter)h(the)f (main)e(lo)q(op)h(to)h(calculate)g(the)g(matrix)e(m)o(ultiply)m(.)24 b(First)17 b(the)h(tasks)f(on)249 2342 y(the)g(diagonal)e(m)o(ulticast) g(their)h(blo)q(c)o(k)h(of)e(A)i(to)f(the)h(other)h(tasks)f(in)f(their) g(ro)o(w.)26 b(Note)17 b(that)f(the)249 2396 y(arra)o(y)g Fs(myrow)g FA(actually)f(con)o(tains)i(the)g(task)g(id)f(of)f(the)j (task)e(doing)g(the)h(m)o(ulticast.)24 b(Recall)16 b(that)249 2450 y Fs(pvm_mcast\(\))d FA(will)h(send)j(to)e(all)g(the)h(tasks)g(in) f(the)h(tasks)g(arra)o(y)g(except)h(the)f(calling)e(task.)23 b(This)249 2504 y(pro)q(cedure)d(w)o(orks)e(w)o(ell)f(in)h(the)h(case)g (of)e(mm)o(ult)e(since)k(w)o(e)f(don't)g(w)o(an)o(t)f(to)h(ha)o(v)o(e)g (to)g(needlessly)p eop %%Page: 78 97 78 96 bop 249 251 a Fu(78)1375 b(Chapter)13 b(6)249 507 y FA(handle)i(the)g(extra)g(message)f(coming)f(in)o(to)h(the)h(m)o (ulticasting)d(task)j(with)f(an)h(extra)g Fs(pvm_recv\(\))p FA(.)249 561 y(Both)i(the)g(m)o(ulticasting)d(task)j(and)f(the)h(tasks) g(receiving)g(the)g(blo)q(c)o(k)f(calculate)h(the)g Fn(AB)i FA(for)d(the)249 615 y(diagonal)c(blo)q(c)o(k)i(and)f(the)i(blo)q(c)o (k)e(of)h Fn(B)i FA(residing)e(in)f(the)i(task.)291 669 y(After)i(the)g(subblo)q(c)o(ks)g(ha)o(v)o(e)g(b)q(een)h(m)o(ultipli)o (ed)d(and)h(added)h(in)o(to)f(the)h Fn(C)j FA(blo)q(c)o(k,)c(w)o(e)h (no)o(w)f(shift)249 723 y(the)g Fn(B)j FA(blo)q(c)o(ks)c(v)o(ertically) m(.)23 b(Sp)q(eci\014cally)m(,)15 b(w)o(e)h(pac)o(k)f(the)i(blo)q(c)o (k)e(of)g Fn(B)j FA(in)o(to)d(a)h(message,)f(send)i(it)e(to)249 777 y(the)g Fs(up)e FA(task)h(id,)f(and)h(then)g(receiv)o(e)h(a)f(new)g Fn(B)j FA(blo)q(c)o(k)c(from)f(the)j Fs(down)e FA(task)h(id.)291 831 y(Note)g(that)g(w)o(e)g(use)h(di\013eren)o(t)f(message)g(tags)g (for)f(sending)h(the)h Fn(A)f FA(blo)q(c)o(ks)g(and)f(the)i Fn(B)h FA(blo)q(c)o(ks)e(as)249 885 y(w)o(ell)d(as)h(for)g(di\013eren)o (t)g(iterations)g(of)f(the)i(lo)q(op.)j(W)m(e)c(also)f(fully)g(sp)q (ecify)h(the)g(task)g(ids)g(when)g(doing)f(a)249 939 y Fs(pvm_recv\(\))p FA(.)17 b(It's)d(tempting)f(to)i(use)g(wildcards)f (for)g(the)h(\014elds)f(of)g Fs(pvm_recv\(\))p FA(;)e(ho)o(w)o(ev)o (er,)i(suc)o(h)249 993 y(a)e(practice)h(can)g(b)q(e)g(dangerous.)18 b(F)m(or)12 b(instance,)h(had)f(w)o(e)g(incorrectly)i(calculated)e(the) h(v)n(alue)f(for)g Fs(up)249 1047 y FA(and)g(used)h(a)e(wildcard)h(for) f(the)i Fs(pvm_recv\(\))c FA(instead)k(of)e Fs(down)p FA(,)g(w)o(e)h(migh)o(t)e(ha)o(v)o(e)i(sen)o(t)g(messages)g(to)249 1101 y(the)j(wrong)f(tasks)g(without)g(kno)o(wing)f(it.)19 b(In)14 b(this)g(example)f(w)o(e)h(fully)f(sp)q(ecify)i(messages,)f (thereb)o(y)249 1155 y(reducing)i(the)g(p)q(ossibilit)o(y)e(of)h (mistak)o(es)g(b)o(y)g(receiving)h(a)f(message)g(from)f(the)i(wrong)f (task)h(or)f(the)249 1209 y(wrong)f(phase)g(of)g(the)g(algorithm.)291 1263 y(Once)g(the)f(computation)e(is)h(complete,)g(w)o(e)h(c)o(hec)o(k) h(to)f(see)g(that)g Fn(A)f FA(=)g Fn(C)s FA(,)g(just)h(to)f(v)o(erify)h (that)f(the)249 1317 y(matrix)g(m)o(ultiply)e(correctly)15 b(calculated)e(the)h(v)n(alues)g(of)e Fn(C)s FA(.)18 b(This)13 b(c)o(hec)o(k)i(w)o(ould)d(not)i(b)q(e)g(done)f(in)g(a)249 1371 y(matrix)f(m)o(ultiply)f(library)i(routine,)h(for)f(example.)291 1425 y(It)h(is)g(not)h(necessary)h(to)e(call)g Fs(pvm_lvgroup\(\))p FA(,)e(since)j(PVM)g(will)e(realize)h(the)h(task)g(has)g(exited)249 1479 y(and)g(will)f(remo)o(v)o(e)g(it)h(from)f(the)i(group.)22 b(It)15 b(is)g(go)q(o)q(d)g(form,)f(ho)o(w)o(ev)o(er,)h(to)g(lea)o(v)o (e)g(the)h(group)f(b)q(efore)249 1533 y(calling)e Fs(pvm_exit\(\))p FA(.)19 b(The)c(reset)h(command)c(from)h(the)i(PVM)g(console)g(will)f (reset)i(all)d(the)j(PVM)249 1587 y(groups.)h(The)11 b Fs(pvm_gstat)e FA(command)f(will)h(prin)o(t)i(the)g(status)h(of)e(an) o(y)g(groups)h(that)g(curren)o(tly)g(exist.)249 1707 y FD(Example)18 b(program:)k(mm)o(ult.c)249 1815 y Fs(/*)336 1869 y(Matrix)f(Multiply)249 1923 y(*/)249 2031 y(/*)g(defines)g(and)g (prototypes)f(for)h(the)g(PVM)g(library)g(*/)249 2085 y(#include)f(<pvm3.h>)249 2139 y(#include)g(<stdio.h>)249 2247 y(/*)h(Maximum)g(number)f(of)i(children)e(this)h(program)f(will)h (spawn)g(*/)249 2301 y(#define)f(MAXNTIDS)86 b(100)249 2355 y(#define)20 b(MAXROW)130 b(10)249 2462 y(/*)21 b(Message)g(tags)g(*/)p eop %%Page: 79 98 79 97 bop 249 251 a Fu(Program)14 b(Examples)1237 b(79)249 507 y Fs(#define)20 b(ATAG)174 b(2)249 561 y(#define)20 b(BTAG)174 b(3)249 615 y(#define)20 b(DIMTAG)130 b(5)249 760 y(void)249 814 y(InitBlock\(float)19 b(*a,)i(float)g(*b,)g(float)g (*c,)g(int)g(blk,)g(int)g(row,)g(int)g(col\))249 868 y({)336 922 y(int)g(len,)g(ind;)336 976 y(int)g(i,j;)336 1084 y(srand\(pvm_mytid\(\)\);)336 1138 y(len)g(=)h(blk*blk;)336 1192 y(for)f(\(ind)g(=)h(0;)f(ind)h(<)f(len;)g(ind++\))423 1246 y({)h(a[ind])f(=)g(\(float\)\(rand\(\)\045100)o(0\)/10)o(0.0;)d (c[ind])j(=)g(0.0;)g(})336 1300 y(for)g(\(i)h(=)f(0;)h(i)f(<)h(blk;)f (i++\))g({)423 1354 y(for)h(\(j)f(=)h(0;)f(j)h(<)f(blk;)g(j++\))g({)511 1408 y(if)g(\(row)g(==)g(col\))598 1462 y(b[j*blk+i])e(=)j(\(i==j\)?)e (1.0)i(:)f(0.0;)511 1516 y(else)598 1570 y(b[j*blk+i])e(=)j(0.0;)511 1624 y(})423 1678 y(})249 1732 y(})249 1877 y(void)249 1931 y(BlockMult\(float*)d(c,)i(float*)f(a,)i(float*)e(b,)i(int)f (blk\))249 1985 y({)336 2039 y(int)g(i,j,k;)336 2147 y(for)g(\(i)h(=)f(0;)h(i)f(<)h(blk;)f(i++\))423 2201 y(for)h(\(j)f(=)h(0;)f(j)h(<)f(blk;)g(j)h(++\))511 2255 y(for)f(\(k)g(=)h(0;)f(k)h(<)f(blk;)g(k++\))598 2309 y(c[i*blk+j])e(+=)j(\(a[i*blk+k])d(*)j(b[k*blk+j]\);)249 2363 y(})249 2508 y(int)p eop %%Page: 80 99 80 98 bop 249 251 a Fu(80)1375 b(Chapter)13 b(6)249 507 y Fs(main\(int)20 b(argc,)h(char*)g(argv[]\))249 561 y({)336 669 y(/*)h(number)e(of)i(tasks)e(to)i(spawn,)e(use)h(3)h(as)f (the)h(default)e(*/)336 723 y(int)h(ntask)g(=)h(2;)336 777 y(/*)g(return)e(code)h(from)g(pvm)g(calls)g(*/)336 831 y(int)g(info;)336 885 y(/*)h(my)f(task)g(and)g(group)g(id)g(*/)336 939 y(int)g(mytid,)g(mygid;)336 993 y(/*)h(children)e(task)h(id)g (array)g(*/)336 1047 y(int)g(child[MAXNTIDS-1];)336 1101 y(int)g(i,)h(m,)f(blksize;)336 1155 y(/*)h(array)e(of)i(the)f(tids)g (in)g(my)h(row)f(*/)336 1209 y(int)g(myrow[MAXROW];)336 1263 y(float)g(*a,)g(*b,)g(*c,)h(*atmp;)336 1317 y(int)f(row,)g(col,)g (up,)h(down;)336 1425 y(/*)g(find)f(out)g(my)g(task)g(id)g(number)g(*/) 336 1479 y(mytid)g(=)h(pvm_mytid\(\);)336 1533 y(pvm_setopt\(PvmRoute)o (,)d(PvmRouteDirect\);)336 1641 y(/*)j(check)e(for)i(error)e(*/)336 1694 y(if)i(\(mytid)e(<)i(0\))f({)423 1748 y(/*)h(print)f(out)g(the)g (error)g(*/)423 1802 y(pvm_perror\(argv[0]\))o(;)423 1856 y(/*)h(exit)f(the)g(program)f(*/)423 1910 y(return)h(-1;)423 1964 y(})336 2168 y(/*)h(join)f(the)g(mmult)g(group)f(*/)336 2222 y(mygid)h(=)h(pvm_joingroup\(")o(mmult)o("\);)336 2276 y(if)g(\(mygid)e(<)i(0\))f({)423 2330 y(pvm_perror\(argv[0]\))o(;) e(pvm_exit\(\);)h(return)g(-1;)423 2384 y(})336 2492 y(/*)i(if)f(my)g(group)g(id)h(is)f(0)g(then)g(I)h(must)f(spawn)g(the)g (other)g(tasks)f(*/)p eop %%Page: 81 100 81 99 bop 249 251 a Fu(Program)14 b(Examples)1237 b(81)336 507 y Fs(if)22 b(\(mygid)e(==)i(0\))f({)423 561 y(/*)h(find)f(out)g (how)g(many)g(tasks)g(to)g(spawn)g(*/)423 615 y(if)h(\(argc)f(==)g(3\)) g({)511 669 y(m)g(=)h(atoi\(argv[1]\);)511 723 y(blksize)e(=)i (atoi\(argv[2]\);)511 777 y(})423 831 y(if)g(\(argc)f(<)g(3\))h({)511 885 y(fprintf\(stderr,)c("usage:)j(mmult)f(m)i(blk\\n"\);)511 939 y(pvm_lvgroup\("mm)o(ult"\))o(;)d(pvm_exit\(\);)h(return)g(-1;)511 993 y(})423 1101 y(/*)i(make)f(sure)g(ntask)f(is)i(legal)f(*/)423 1155 y(ntask)g(=)h(m*m;)423 1209 y(if)g(\(\(ntask)e(<)i(1\))f(||)g (\(ntask)g(>=)g(MAXNTIDS\)\))f({)511 1263 y(fprintf\(stderr,)e("ntask)j (=)g(\045d)h(not)f(valid.\\n",)f(ntask\);)511 1317 y(pvm_lvgroup\("mm)o (ult"\))o(;)f(pvm_exit\(\);)h(return)g(-1;)511 1371 y(})423 1425 y(/*)i(no)f(need)g(to)h(spawn)e(if)i(there)e(is)i(only)f(one)g (task)g(*/)423 1479 y(if)h(\(ntask)e(==)i(1\))f(goto)g(barrier;)423 1587 y(/*)h(spawn)f(the)g(child)f(tasks)h(*/)423 1641 y(info)g(=)h(pvm_spawn\("mmult")o(,)d(\(char**\)0,)h(PvmTaskDefault,)e (\(char*\)0,)511 1694 y(ntask-1,)i(child\);)423 1802 y(/*)i(make)f(sure)g(spawn)f(succeeded)g(*/)423 1856 y(if)i(\(info)f(!=)g(ntask-1\))f({)511 1910 y(pvm_lvgroup\("mm)o (ult"\))o(;)f(pvm_exit\(\);)h(return)g(-1;)511 1964 y(})423 2114 y(/*)i(send)f(the)g(matrix)f(dimension)g(*/)423 2168 y(pvm_initsend\(PvmDat)o(aDefa)o(ult\);)423 2222 y(pvm_pkint\(&m,)g(1,)h(1\);)423 2276 y(pvm_pkint\(&blksize,)d(1,)k (1\);)423 2330 y(pvm_mcast\(child,)d(ntask-1,)h(DIMTAG\);)423 2384 y(})336 2438 y(else)h({)423 2492 y(/*)h(recv)f(the)g(matrix)f (dimension)g(*/)p eop %%Page: 82 101 82 100 bop 249 251 a Fu(82)1375 b(Chapter)13 b(6)423 507 y Fs(pvm_recv\(pvm_gettid)o(\("mmu)o(lt",)18 b(0\),)k(DIMTAG\);)423 561 y(pvm_upkint\(&m,)d(1,)j(1\);)423 615 y(pvm_upkint\(&blksize)o(,)d (1,)i(1\);)423 669 y(ntask)g(=)h(m*m;)423 723 y(})336 860 y(/*)g(make)f(sure)g(all)g(tasks)f(have)h(joined)g(the)g(group)g (*/)249 914 y(barrier:)336 968 y(info)g(=)h(pvm_barrier\("mmu)o(lt",n)o (task\))o(;)336 1022 y(if)g(\(info)e(<)i(0\))f(pvm_perror\(argv[0]\))o (;)336 1130 y(/*)h(find)f(the)g(tids)g(in)g(my)g(row)h(*/)336 1184 y(for)f(\(i)h(=)f(0;)h(i)f(<)h(m;)f(i++\))423 1238 y(myrow[i])g(=)g(pvm_gettid\("mmult")o(,)e(\(mygid/m\)*m)h(+)h(i\);)336 1346 y(/*)h(allocate)e(the)h(memory)f(for)i(the)f(local)g(blocks)f(*/) 336 1400 y(a)i(=)f(\(float*\)malloc\(size)o(of\(fl)o(oat\)*)o(blksi)o (ze*bl)o(ksize)o(\);)336 1454 y(b)h(=)f(\(float*\)malloc\(size)o (of\(fl)o(oat\)*)o(blksi)o(ze*bl)o(ksize)o(\);)336 1508 y(c)h(=)f(\(float*\)malloc\(size)o(of\(fl)o(oat\)*)o(blksi)o(ze*bl)o (ksize)o(\);)336 1562 y(atmp)g(=)h(\(float*\)malloc\(s)o(izeof)o (\(floa)o(t\)*bl)o(ksize)o(*blks)o(ize\))o(;)336 1616 y(/*)g(check)e(for)i(valid)e(pointers)g(*/)336 1670 y(if)i(\(!\(a)f(&&) g(b)h(&&)f(c)h(&&)f(atmp\)\))f({)423 1724 y(fprintf\(stderr,)f("\045s:) i(out)g(of)h(memory!\\n",)d(argv[0]\);)423 1778 y(free\(a\);)i (free\(b\);)f(free\(c\);)g(free\(atmp\);)423 1831 y (pvm_lvgroup\("mmult")o(\);)f(pvm_exit\(\);)g(return)i(-1;)423 1885 y(})336 1993 y(/*)h(find)f(my)g(block's)f(row)h(and)h(column)e(*/) 336 2047 y(row)h(=)h(mygid/m;)e(col)h(=)h(mygid)f(\045)g(m;)336 2101 y(/*)h(calculate)e(the)h(neighbor's)e(above)i(and)g(below)g(*/)336 2155 y(up)h(=)f(pvm_gettid\("mmult")o(,)e(\(\(row\)?\(row-1\):\(m-)o (1\)\)*m)o(+col)o(\);)336 2209 y(down)i(=)h(pvm_gettid\("mmul)o(t",)d (\(\(row)h(==)i(\(m-1\)\)?col:\(row+)o(1\)*m+)o(col\)\))o(;)336 2317 y(/*)g(initialize)d(the)j(blocks)e(*/)336 2371 y(InitBlock\(a,)g (b,)h(c,)g(blksize,)f(row,)h(col\);)336 2508 y(/*)h(do)f(the)g(matrix)g (multiply)f(*/)p eop %%Page: 83 102 83 101 bop 249 251 a Fu(Program)14 b(Examples)1237 b(83)336 507 y Fs(for)21 b(\(i)h(=)f(0;)h(i)f(<)h(m;)f(i++\))g({)423 561 y(/*)h(mcast)f(the)g(block)f(of)i(matrix)e(A)i(*/)423 615 y(if)g(\(col)f(==)g(\(row)g(+)h(i\)\045m\))e({)511 669 y(pvm_initsend\(Pv)o(mData)o(Defau)o(lt\);)511 723 y(pvm_pkfloat\(a,)e(blksize*blksize,)h(1\);)511 777 y(pvm_mcast\(myrow) o(,)g(m,)i(\(i+1\)*ATAG\);)511 831 y(BlockMult\(c,a,b)o(,blks)o(ize\);) 511 885 y(})423 939 y(else)g({)511 993 y(pvm_recv\(pvm_ge)o(ttid\()o ("mmul)o(t",)e(row*m)h(+)i(\(row)f(+i\)\045m\),)f(\(i+1\)*ATAG\);)511 1047 y(pvm_upkfloat\(at)o(mp,)f(blksize*blksize,)f(1\);)511 1101 y(BlockMult\(c,atm)o(p,b,b)o(lksiz)o(e\);)511 1155 y(})423 1209 y(/*)k(rotate)e(the)i(columns)e(of)h(B)h(*/)423 1263 y(pvm_initsend\(PvmDat)o(aDefa)o(ult\);)423 1317 y(pvm_pkfloat\(b,)d(blksize*blksize,)g(1\);)423 1371 y(pvm_send\(up,)h(\(i+1\)*BTAG\);)423 1425 y(pvm_recv\(down,)f (\(i+1\)*BTAG\);)423 1479 y(pvm_upkfloat\(b,)g(blksize*blksize,)g(1\);) 423 1533 y(})336 1682 y(/*)j(check)e(it)i(*/)336 1736 y(for)f(\(i)h(=)f(0)h(;)g(i)f(<)h(blksize*blksize;)c(i++\))423 1790 y(if)k(\(a[i])f(!=)g(c[i]\))511 1844 y(printf\("Error)e(a[\045d])h (\(\045g\))h(!=)h(c[\045d])f(\(\045g\))g(\\n",)f(i,)i(a[i],i,c[i]\);) 336 1952 y(printf\("Done.\\n"\);)336 2006 y(free\(a\);)e(free\(b\);)h (free\(c\);)f(free\(atmp\);)336 2060 y(pvm_lvgroup\("mmult")o(\);)336 2114 y(pvm_exit\(\);)336 2168 y(return)h(0;)249 2222 y(})249 2342 y FD(6.5)52 b(One-Dimensional)20 b(Heat)e(Equation)245 2450 y FA(Here)f(w)o(e)f(presen)o(t)h(a)f(PVM)g(program)e(that)i (calculates)g(heat)h(di\013usion)e(through)h(a)f(substrate,)i(in)249 2504 y(this)d(case)h(a)e(wire.)19 b(Consider)14 b(the)g (one-dimensional)e(heat)i(equation)g(on)g(a)f(thin)h(wire:)p eop %%Page: 84 103 84 102 bop 249 251 a Fu(84)1375 b(Chapter)13 b(6)254 500 y Fn(@)r(A)p 254 518 56 2 v 262 556 a(@)r(t)326 528 y FA(=)375 500 y Fn(@)399 484 y Fl(2)418 500 y Fn(A)p 375 518 75 2 v 379 556 a(@)r(x)427 544 y Fl(2)1725 528 y FA(\(6.5.1\))249 625 y(and)h(a)f(discretization)i(of)e(the)h(form)254 693 y Fn(A)285 699 y Fk(i)p Fl(+1)p Fk(;j)376 693 y Ft(\000)9 b Fn(A)448 699 y Fk(i;j)p 254 712 234 2 v 345 750 a Ft(4)p Fn(t)504 721 y FA(=)553 693 y Fn(A)584 699 y Fk(i;j)r Fl(+1)674 693 y Ft(\000)h FA(2)p Fn(A)768 699 y Fk(i;j)816 693 y FA(+)f Fn(A)888 699 y Fk(i;j)r Fj(\000)p Fl(1)p 553 712 418 2 v 722 750 a Ft(4)p Fn(x)783 738 y Fl(2)1725 721 y FA(\(6.5.2\))249 826 y(giving)j(the)j(explicit)e(form)o(ula)249 931 y Fn(A)280 937 y Fk(i)p Fl(+1)p Fk(;j)373 931 y FA(=)f Fn(A)448 937 y Fk(i;j)496 931 y FA(+)556 903 y Ft(4)p Fn(t)p 543 922 80 2 v 543 960 a Ft(4)p Fn(x)604 948 y Fl(2)627 931 y FA(\()p Fn(A)674 937 y Fk(i;j)r Fl(+1)764 931 y Ft(\000)e FA(2)p Fn(A)858 937 y Fk(i;j)906 931 y FA(+)g Fn(A)979 937 y Fk(i;j)r Fj(\000)p Fl(1)1060 931 y FA(\))p Fn(:)637 b FA(\(6.5.3\))291 1036 y(initial)11 b(and)j(b)q(oundary)g(conditions:)315 1146 y Fn(A)p FA(\()p Fn(t;)7 b FA(0\))12 b(=)f(0,)j Fn(A)p FA(\()p Fn(t;)7 b FA(1\))k(=)h(0)h(for)h(all)e Fn(t)315 1200 y(A)p FA(\(0)p Fn(;)7 b(x)p FA(\))k(=)h(sin\()p Fn(\031)q(x)p FA(\))i(for)g(0)d Ft(\024)h Fn(x)f Ft(\024)h FA(1.)291 1249 y(The)i(pseudo)h(co)q(de)f (for)g(this)g(computation)e(is)i(as)g(follo)o(ws:)336 1339 y Fs(for)21 b(i)h(=)g(1:tsteps-1;)423 1393 y(t)g(=)g(t+dt;)423 1447 y(a\(i+1,1\)=0;)423 1501 y(a\(i+1,n+2\)=0;)423 1555 y(for)g(j)f(=)h(2:n+1;)511 1609 y(a\(i+1,j\)=a\(i,j\))c(+)k (mu*\(a\(i,j+1\)-2*a\()o(i,j\)+)o(a\(i,)o(j-1\)\))o(;)423 1663 y(end;)423 1717 y(t;)423 1771 y(a\(i+1,1:n+2\);)423 1825 y(plot\(a\(i,:\)\))336 1879 y(end)291 1968 y FA(F)m(or)13 b(this)h(example)f(w)o(e)h(will)f(use)i(a)f(master-sla)o(v)o(e)f (programming)d(mo)q(del.)17 b(The)e(master,)e(heat.c,)249 2022 y(spa)o(wns)18 b(\014v)o(e)g(copies)h(of)e(the)h(program)e (heatslv.)30 b(The)18 b(sla)o(v)o(es)g(compute)g(the)g(heat)g (di\013usion)f(for)249 2076 y(subsections)g(of)d(the)i(wire)f(in)g (parallel.)20 b(A)o(t)15 b(eac)o(h)g(time)f(step)i(the)g(sla)o(v)o(es)f (exc)o(hange)h(b)q(oundary)f(in-)249 2130 y(formation,)9 b(in)i(this)g(case)i(the)f(temp)q(erature)g(of)f(the)h(wire)f(at)h(the) g(b)q(oundaries)f(b)q(et)o(w)o(een)i(pro)q(cessors.)291 2184 y(Let's)e(tak)o(e)g(a)g(closer)h(lo)q(ok)e(at)h(the)h(co)q(de.)18 b(In)11 b(heat.c)h(the)g(arra)o(y)e Fs(solution)g FA(will)g(hold)g(the) i(solution)249 2238 y(for)g(the)h(heat)g(di\013usion)g(equation)f(at)g (eac)o(h)h(time)f(step.)18 b(This)13 b(arra)o(y)f(will)f(b)q(e)i (output)g(at)f(the)i(end)f(of)249 2292 y(the)f(program)e(in)h(xgraph)h (format.)j(\(xgraph)c(is)h(a)f(program)f(for)h(plotting)g(data.\))17 b(First)12 b(the)g(heatslv)249 2346 y(tasks)k(are)g(spa)o(wned.)23 b(Next,)16 b(the)h(initial)c(data)i(set)i(is)e(computed.)23 b(Notice)15 b(that)h(the)g(ends)h(of)d(the)249 2400 y(wires)g(are)h (giv)o(en)e(initial)f(temp)q(erature)j(v)n(alues)e(of)h(zero.)291 2454 y(The)f(main)f(part)h(of)g(the)h(program)d(is)i(then)h(executed)i (four)d(times,)f(eac)o(h)h(with)g(a)g(di\013eren)o(t)i(v)n(alue)249 2508 y(for)e(\001)p Fn(t)p FA(.)18 b(A)13 b(timer)g(is)g(used)i(to)e (compute)g(the)i(elapsed)f(time)e(of)h(eac)o(h)h(compute)f(phase.)19 b(The)14 b(initial)p eop %%Page: 85 104 85 103 bop 249 251 a Fu(Program)14 b(Examples)1237 b(85)249 507 y FA(data)18 b(sets)h(are)f(sen)o(t)g(to)g(the)h(heatslv)f(tasks.) 30 b(The)18 b(left)g(and)f(righ)o(t)h(neigh)o(b)q(or)f(task)h(ids)g (are)g(sen)o(t)249 561 y(along)d(with)h(the)h(initial)d(data)i(set.)26 b(The)16 b(heatslv)h(tasks)f(use)h(these)h(to)e(comm)o(unicate)e(b)q (oundary)249 615 y(information.)34 b(\(Alternativ)o(ely)m(,)20 b(w)o(e)g(could)g(ha)o(v)o(e)g(used)h(the)f(PVM)h(group)f(calls)f(to)h (map)f(tasks)249 669 y(to)g(segmen)o(ts)h(of)f(the)h(wire.)35 b(By)20 b(using)g(the)g(group)f(calls)g(w)o(e)h(w)o(ould)f(ha)o(v)o(e)g (a)o(v)o(oided)g(explicitly)249 723 y(comm)o(unicating)10 b(the)15 b(task)f(ids)g(to)g(the)g(sla)o(v)o(e)g(pro)q(cesses.\))291 777 y(After)h(sending)g(the)g(initial)e(data,)h(the)i(master)e(pro)q (cess)i(simply)d(w)o(aits)h(for)h(results.)22 b(When)14 b(the)249 831 y(results)e(arriv)o(e,)g(they)f(are)h(in)o(tegrated)g(in) o(to)e(the)i(solution)e(matrix,)g(the)i(elapsed)f(time)f(is)h (calculated,)249 885 y(and)j(the)g(solution)f(is)h(written)g(out)g(to)g (the)g(xgraph)g(\014le.)291 939 y(Once)h(the)f(data)g(for)f(all)g(four) g(phases)i(has)f(b)q(een)h(computed)f(and)f(stored,)i(the)f(master)g (program)249 993 y(prin)o(ts)g(out)g(the)g(elapsed)h(times)e(and)h (kills)e(the)j(sla)o(v)o(e)e(pro)q(cesses.)249 1113 y FD(Example)18 b(program:)k(heat.c)249 1221 y Fs(/*)249 1275 y(heat.c)293 1383 y(Use)f(PVM)g(to)g(solve)g(a)h(simple)e(heat)h (diffusion)f(differential)f(equation,)293 1437 y(using)h(1)i(master)f (program)f(and)h(5)h(slaves.)293 1545 y(The)f(master)f(program)h(sets)g (up)g(the)g(data,)g(communicates)e(it)j(to)f(the)g(slaves)293 1599 y(and)g(waits)g(for)g(the)g(results)f(to)i(be)f(sent)g(from)g(the) g(slaves.)293 1653 y(Produces)f(xgraph)g(ready)h(files)g(of)g(the)g (results.)249 1761 y(*/)249 1869 y(#include)f("pvm3.h")249 1923 y(#include)g(<stdio.h>)249 1977 y(#include)g(<math.h>)249 2031 y(#include)g(<time.h>)249 2085 y(#define)g(SLAVENAME)g("heatslv") 249 2139 y(#define)g(NPROC)h(5)249 2193 y(#define)f(TIMESTEP)h(100)249 2247 y(#define)f(PLOTINC)h(10)249 2301 y(#define)f(SIZE)h(1000)249 2408 y(int)g(num_data)f(=)i(SIZE/NPROC;)p eop %%Page: 86 105 86 104 bop 249 251 a Fu(86)1375 b(Chapter)13 b(6)249 507 y Fs(main\(\))249 561 y({)65 b(int)21 b(mytid,)g(task_ids[NPROC],)d (i,)k(j;)336 615 y(int)f(left,)g(right,)g(k,)g(l;)336 669 y(int)g(step)g(=)h(TIMESTEP;)336 723 y(int)f(info;)336 831 y(double)g(init[SIZE],)e(solution[TIMESTEP][)o(SIZE])o(;)336 885 y(double)i(result[TIMESTEP*)o(SIZE/)o(NPROC)o(],)e(deltax2;)336 939 y(FILE)i(*filenum;)336 993 y(char)g(*filename[4][7];)336 1047 y(double)g(deltat[4];)336 1101 y(time_t)g(t0;)336 1155 y(int)g(etime[4];)336 1263 y(filename[0][0])e(=)j("graph1";)336 1317 y(filename[1][0])d(=)j("graph2";)336 1371 y(filename[2][0])d(=)j ("graph3";)336 1425 y(filename[3][0])d(=)j("graph4";)336 1533 y(deltat[0])e(=)i(5.0e-1;)336 1587 y(deltat[1])e(=)i(5.0e-3;)336 1641 y(deltat[2])e(=)i(5.0e-6;)336 1694 y(deltat[3])e(=)i(5.0e-9;)249 1802 y(/*)f(enroll)g(in)g(pvm)h(*/)336 1856 y(mytid)f(=)h (pvm_mytid\(\);)249 1964 y(/*)f(spawn)g(the)g(slave)g(tasks)g(*/)336 2018 y(info)g(=)h(pvm_spawn\(SLAVEN)o(AME,\()o(char)c (**\)0,PvmTaskDefault)o(,"",)423 2072 y(NPROC,task_ids\);)249 2126 y(/*)j(create)g(the)g(initial)g(data)f(set)i(*/)336 2180 y(for)f(\(i)h(=)f(0;)h(i)f(<)h(SIZE;)f(i++\))423 2234 y(init[i])g(=)g(sin\(M_PI)f(*)i(\()g(\(double\)i)e(/)h (\(double\)\(SIZE-1\))e(\)\);)336 2288 y(init[0])i(=)g(0.0;)336 2342 y(init[SIZE-1])f(=)h(0.0;)249 2450 y(/*)g(run)h(the)f(problem)f(4) i(times)e(for)i(different)e(values)g(of)i(delta)e(t)i(*/)336 2504 y(for)f(\(l)h(=)f(0;)h(l)f(<)h(4;)f(l++\))g({)p eop %%Page: 87 106 87 105 bop 249 251 a Fu(Program)14 b(Examples)1237 b(87)423 507 y Fs(deltax2)21 b(=)g(\(deltat[l]/pow\(1.0/)o(\(doub)o(le\)SI)o (ZE,2.)o(0\)\);)423 561 y(/*)h(start)f(timing)f(for)h(this)g(run)g(*/) 423 615 y(time\(&t0\);)423 669 y(etime[l])g(=)g(t0;)249 723 y(/*)g(send)g(the)h(initial)e(data)h(to)g(the)g(slaves.)g(*/)249 777 y(/*)g(include)g(neighbor)f(info)h(for)g(exchanging)f(boundary)g (data)h(*/)423 831 y(for)h(\(i)f(=)h(0;)f(i)h(<)f(NPROC;)g(i++\))g({) 511 885 y(pvm_initsend\(Pv)o(mData)o(Defau)o(lt\);)511 939 y(left)g(=)g(\(i)h(==)f(0\))g(?)h(0)f(:)h(task_ids[i-1];)511 993 y(pvm_pkint\(&left)o(,)d(1,)i(1\);)511 1047 y(right)f(=)i(\(i)f(==) h(\(NPROC-1\)\))d(?)j(0)g(:)f(task_ids[i+1];)511 1101 y(pvm_pkint\(&righ)o(t,)e(1,)i(1\);)511 1155 y(pvm_pkint\(&step)o(,)e (1,)i(1\);)511 1209 y(pvm_pkdouble\(&d)o(eltax)o(2,)e(1,)i(1\);)511 1263 y(pvm_pkint\(&num_)o(data,)d(1,)k(1\);)511 1317 y(pvm_pkdouble\(&i)o(nit[n)o(um_da)o(ta*i])o(,)d(num_data,)h(1\);)511 1371 y(pvm_send\(task_i)o(ds[i])o(,)f(4\);)511 1425 y(})249 1533 y(/*)i(wait)g(for)h(the)f(results)f(*/)423 1587 y(for)i(\(i)f(=)h(0;)f(i)h(<)f(NPROC;)g(i++\))g({)511 1641 y(pvm_recv\(task_i)o(ds[i])o(,)e(7\);)511 1694 y(pvm_upkdouble\(&) o(resul)o(t[0],)f(num_data*TIMESTEP,)g(1\);)249 1748 y(/*)j(update)g(the)g(solution)f(*/)511 1802 y(for)h(\(j)g(=)h(0;)f(j)h (<)f(TIMESTEP;)f(j++\))598 1856 y(for)h(\(k)g(=)h(0;)f(k)h(<)f (num_data;)f(k++\))685 1910 y(solution[j][num_d)o(ata*i)o(+k])f(=)i (result[wh\(j,k\)];)511 1964 y(})249 2072 y(/*)g(stop)g(timing)g(*/)423 2126 y(time\(&t0\);)423 2180 y(etime[l])g(=)g(t0)h(-)f(etime[l];)249 2288 y(/*)g(produce)g(the)g(output)g(*/)423 2342 y(filenum)g(=)g (fopen\(filename[l][0)o(],)e("w"\);)423 2396 y(fprintf\(filenum,"Ti)o (tleTe)o(xt:)g(Wire)i(Heat)g(over)g(Delta)f(Time:)h(\045e\\n",)511 2450 y(deltat[l]\);)423 2504 y(fprintf\(filenum,"XU)o(nitTe)o(xt:)e (Distance\\nYUnitT)o(ext:)f(Heat\\n"\);)p eop %%Page: 88 107 88 106 bop 249 251 a Fu(88)1375 b(Chapter)13 b(6)423 507 y Fs(for)22 b(\(i)f(=)h(0;)f(i)h(<)f(TIMESTEP;)f(i)i(=)f(i)h(+)f (PLOTINC\))g({)511 561 y(fprintf\(filenum)o(,"\\"T)o(ime)e(index:)h (\045d\\n",i\);)511 615 y(for)h(\(j)g(=)h(0;)f(j)h(<)f(SIZE;)g(j++\)) 598 669 y(fprintf\(filenum,)o("\045d)e(\045e\\n",j,)h (solution[i][j]\);)511 723 y(fprintf\(filenum)o(,"\\n")o(\);)511 777 y(})423 831 y(fclose)h(\(filenum\);)336 885 y(})249 993 y(/*)g(print)g(the)g(timing)g(information)e(*/)336 1047 y(printf\("Problem)g(size:)i(\045d\\n",SIZE\);)336 1101 y(for)g(\(i)h(=)f(0;)h(i)f(<)h(4;)f(i++\))423 1155 y(printf\("Time)f(for)h(run)g(\045d:)g(\045d)h(sec\\n",i,etime[i)o (]\);)249 1263 y(/*)f(kill)g(the)h(slave)e(processes)g(*/)336 1317 y(for)h(\(i)h(=)f(0;)h(i)f(<)h(NPROC;)e(i++\))h (pvm_kill\(task_ids[i])o(\);)336 1371 y(pvm_exit\(\);)249 1425 y(})249 1533 y(int)g(wh\(x,)g(y\))249 1587 y(int)g(x,)h(y;)249 1641 y({)336 1694 y(return\(x*num_data+y)o(\);)249 1748 y(})291 1844 y FA(The)c(heatslv)h(programs)e(do)h(the)h(actual)f (computation)f(of)g(the)i(heat)g(di\013usion)f(through)g(the)249 1898 y(wire.)31 b(The)19 b(sla)o(v)o(e)f(program)e(consists)j(of)f(an)g (in\014nite)g(lo)q(op)f(that)i(receiv)o(es)h(an)d(initial)g(data)h (set,)249 1952 y(iterativ)o(ely)11 b(computes)h(a)g(solution)f(based)h (on)g(this)g(data)g(set)g(\(exc)o(hanging)g(b)q(oundary)g(information) 249 2006 y(with)k(neigh)o(b)q(ors)h(on)f(eac)o(h)h(iteration\),)g(and)f (sends)i(the)f(resulting)f(partial)g(solution)g(bac)o(k)g(to)g(the)249 2060 y(master)d(pro)q(cess.)291 2114 y(Rather)h(than)f(using)h(an)g (in\014nite)f(lo)q(op)g(in)h(the)g(sla)o(v)o(e)f(tasks,)h(w)o(e)g (could)g(send)h(a)e(sp)q(ecial)h(message)249 2168 y(to)f(the)i(sla)o(v) o(e)e(ordering)g(it)h(to)f(exit.)18 b(T)m(o)13 b(a)o(v)o(oid)f (complicating)f(the)j(message)f(passing,)g(ho)o(w)o(ev)o(er,)h(w)o(e) 249 2222 y(simply)c(use)j(the)g(in\014nite)f(lo)q(op)g(in)g(the)h(sla)o (v)o(e)f(tasks)g(and)g(kill)f(them)h(o\013)g(from)e(the)j(master)f (program.)249 2276 y(A)17 b(third)f(option)g(w)o(ould)f(b)q(e)i(to)g (ha)o(v)o(e)f(the)h(sla)o(v)o(es)f(execute)j(only)c(once,)i(exiting)f (after)h(pro)q(cessing)249 2330 y(a)f(single)g(data)g(set)h(from)e(the) i(master.)25 b(This)16 b(w)o(ould)g(require)h(placing)f(the)h(master's) e(spa)o(wn)i(call)249 2384 y(inside)12 b(the)h(main)c(for)j(lo)q(op)f (of)h(heat.c.)17 b(While)11 b(this)h(option)g(w)o(ould)f(w)o(ork,)g(it) h(w)o(ould)f(needlessly)i(add)249 2438 y(o)o(v)o(erhead)h(to)g(the)h(o) o(v)o(erall)d(computation.)p eop %%Page: 89 108 89 107 bop 249 251 a Fu(Program)14 b(Examples)1237 b(89)291 507 y FA(F)m(or)15 b(eac)o(h)h(time)e(step)j(and)e(b)q(efore)h(eac)o(h) h(compute)e(phase,)h(the)g(b)q(oundary)g(v)n(alues)f(of)g(the)h(tem-) 249 561 y(p)q(erature)i(matrix)d(are)i(exc)o(hanged.)26 b(The)17 b(left-hand)g(b)q(oundary)f(elemen)o(ts)g(are)h(\014rst)h(sen) o(t)f(to)f(the)249 615 y(left)f(neigh)o(b)q(or)g(task)h(and)f(receiv)o (ed)i(from)c(the)j(righ)o(t)f(neigh)o(b)q(or)h(task.)22 b(Symmetrically)l(,)13 b(the)j(righ)o(t-)249 669 y(hand)f(b)q(oundary)h (elemen)o(ts)f(are)h(sen)o(t)g(to)f(the)h(righ)o(t)f(neigh)o(b)q(or)h (and)f(then)h(receiv)o(ed)h(from)c(the)j(left)249 723 y(neigh)o(b)q(or.)22 b(The)15 b(task)h(ids)f(for)g(the)g(neigh)o(b)q (ors)h(are)f(c)o(hec)o(k)o(ed)i(to)e(mak)o(e)f(sure)i(no)f(attempt)f (is)h(made)249 777 y(to)f(send)h(or)e(receiv)o(e)j(messages)e(to)f (nonexisten)o(t)i(tasks.)249 897 y FD(Example)j(program:)k(heatslv.c) 249 1005 y Fs(/*)249 1113 y(heatslv.c)336 1221 y(The)f(slaves)g (receive)f(the)h(initial)g(data)g(from)g(the)g(host,)336 1275 y(exchange)f(boundary)h(information)e(with)i(neighbors,)336 1329 y(and)g(calculate)f(the)i(heat)e(change)h(in)g(the)h(wire.)336 1383 y(This)f(is)h(done)f(for)g(a)g(number)g(of)g(iterations,)f(sent)h (by)g(the)g(master.)249 1491 y(*/)249 1599 y(#include)f("pvm3.h")249 1653 y(#include)g(<stdio.h>)249 1761 y(int)h(num_data;)249 1869 y(main\(\))249 1923 y({)336 1977 y(int)g(mytid,)g(left,)g(right,)f (i,)i(j,)f(master;)336 2031 y(int)g(timestep;)336 2139 y(double)g(*init,)f(*A;)336 2193 y(double)h(leftdata,)f(rightdata,)f (delta,)i(leftside,)f(rightside;)249 2301 y(/*)h(enroll)g(in)g(pvm)h (*/)336 2355 y(mytid)f(=)h(pvm_mytid\(\);)336 2408 y(master)f(=)g (pvm_parent\(\);)p eop %%Page: 90 109 90 108 bop 249 251 a Fu(90)1375 b(Chapter)13 b(6)249 507 y Fs(/*)21 b(receive)g(my)g(data)g(from)g(the)g(master)g(program)f (*/)293 561 y(while\(1\))g({)336 615 y(pvm_recv\(master,)f(4\);)336 669 y(pvm_upkint\(&left,)g(1,)i(1\);)336 723 y(pvm_upkint\(&right,)d (1,)k(1\);)336 777 y(pvm_upkint\(×te)o(p,)d(1,)i(1\);)336 831 y(pvm_upkdouble\(&delt)o(a,)e(1,)i(1\);)336 885 y (pvm_upkint\(&num_dat)o(a,)e(1,)i(1\);)336 939 y(init)g(=)h(\(double)e (*\))i(malloc\(num_data)o(*size)o(of\(do)o(uble\))o(\);)336 993 y(pvm_upkdouble\(init,)c(num_data,)i(1\);)249 1101 y(/*)h(copy)g(the)h(initial)e(data)h(into)g(my)g(working)g(array)f(*/) 336 1209 y(A)i(=)f(\(double)g(*\))g(malloc\(num_data)e(*)i(timestep)g (*)g(sizeof\(double\)\);)336 1263 y(for)g(\(i)h(=)f(0;)h(i)f(<)h (num_data;)e(i++\))h(A[i])g(=)g(init[i];)249 1371 y(/*)g(perform)g(the) g(calculation)e(*/)293 1479 y(for)i(\(i)g(=)h(0;)f(i)h(<)f(timestep-1;) f(i++\))h({)336 1533 y(/*)h(trade)e(boundary)h(info)f(with)h(my)h (neighbors)e(*/)336 1587 y(/*)43 b(send)21 b(left,)g(receive)f(right)87 b(*/)336 1641 y(if)22 b(\(left)e(!=)i(0\))f({)423 1694 y(pvm_initsend\(PvmDat)o(aDefa)o(ult\);)423 1748 y (pvm_pkdouble\(&A[wh\()o(i,0\)])o(,1,1\))o(;)423 1802 y(pvm_send\(left,)e(5\);)423 1856 y(})336 1910 y(if)j(\(right)e(!=)i (0\))f({)423 1964 y(pvm_recv\(right,)e(5\);)423 2018 y(pvm_upkdouble\(&righ)o(tdata)o(,)g(1,)i(1\);)336 2072 y(/*)h(send)f(right,)f(receive)g(left)h(*/)423 2126 y (pvm_initsend\(PvmDat)o(aDefa)o(ult\);)423 2180 y (pvm_pkdouble\(&A[wh\()o(i,num)o(_data)o(-1\)],)o(1,1\);)423 2234 y(pvm_send\(right,)e(6\);)423 2288 y(})336 2342 y(if)j(\(left)e(!=)i(0\))f({)423 2396 y(pvm_recv\(left,)e(6\);)423 2450 y(pvm_upkdouble\(&left)o(data,)o(1,1\);)423 2504 y(})p eop %%Page: 91 110 91 109 bop 249 251 a Fu(Program)14 b(Examples)1237 b(91)249 561 y Fs(/*)21 b(do)h(the)f(calculations)e(for)i(this)g(iteration)f(*/) 336 669 y(for)h(\(j)h(=)f(0;)h(j)f(<)h(num_data;)e(j++\))h({)423 723 y(leftside)g(=)g(\(j)h(==)f(0\))g(?)h(leftdata)e(:)i (A[wh\(i,j-1\)];)423 777 y(rightside)e(=)i(\(j)f(==)h(\(num_data-1\)\)) d(?)i(rightdata)f(:)i(A[wh\(i,j+1\)];)423 831 y(if)g (\(\(j==0\)&&\(left==)o(0\)\))511 885 y(A[wh\(i+1,j\)])d(=)i(0.0;)423 939 y(else)g(if)h(\(\(j==\(num_data-1)o(\)\)&&\()o(right)o(==0\)\))511 993 y(A[wh\(i+1,j\)])d(=)i(0.0;)423 1047 y(else)511 1101 y(A[wh\(i+1,j\)]=)598 1155 y(A[wh\(i,j\)]+delta)o(*\(rig)o(htsid)o (e-2*A)o([wh\(i)o(,j\)])o(+left)o(side\))o(;)423 1209 y(})293 1263 y(})249 1371 y(/*)g(send)g(the)h(results)e(back)h(to)g (the)g(master)g(program)f(*/)336 1479 y(pvm_initsend\(PvmDat)o(aDef)o (ault\))o(;)336 1533 y(pvm_pkdouble\(&A[0],)o(num_)o(data*)o(times)o (tep,1)o(\);)336 1587 y(pvm_send\(master,7\);)293 1641 y(})249 1748 y(/*)h(just)g(for)h(good)f(measure)f(*/)293 1802 y(pvm_exit\(\);)249 1856 y(})249 1964 y(int)h(wh\(x,)g(y\))249 2018 y(int)g(x,)h(y;)249 2072 y({)336 2126 y(return\(x*num_data+y)o (\);)249 2180 y(})249 2317 y Fr(6.5.1)48 b(Di\013eren)o(t)13 b(St)o(yles)h(of)h(Comm)o(unication)249 2400 y FA(In)g(this)g(c)o (hapter)h(w)o(e)f(ha)o(v)o(e)g(giv)o(en)f(a)h(v)n(ariet)o(y)f(of)h (example)e(programs)h(written)i(in)e(F)m(ortran)h(and)g(C.)249 2454 y(These)j(examples)d(demonstrate)h(v)n(arious)g(w)o(a)o(ys)g(of)f (writing)h(PVM)h(programs.)24 b(Some)15 b(break)h(the)249 2508 y(co)q(de)i(in)o(to)f(t)o(w)o(o)g(separate)i(programs,)e(while)g (others)h(use)h(a)e(single)g(program)f(with)h(conditionals)p eop %%Page: 92 111 92 110 bop 249 251 a Fu(92)1375 b(Chapter)13 b(6)249 507 y FA(to)20 b(handle)g(spa)o(wning)g(and)g(computing)e(phases.)38 b(These)21 b(examples)f(sho)o(w)g(di\013eren)o(t)h(st)o(yles)g(of)249 561 y(comm)o(unication,)16 b(b)q(oth)k(among)c(w)o(ork)o(er)k(tasks)f (and)g(b)q(et)o(w)o(een)h(w)o(ork)o(er)g(and)f(master)f(tasks.)34 b(In)249 615 y(some)12 b(cases)j(messages)e(are)h(used)g(for)f(sync)o (hronization;)g(in)g(others)h(the)g(master)f(pro)q(cesses)j(simply)249 669 y(kill)11 b(of)h(the)h(w)o(ork)o(ers)g(when)g(they)h(are)f(no)f (longer)g(needed.)19 b(W)m(e)12 b(hop)q(e)h(that)g(these)h(examples)e (can)g(b)q(e)249 723 y(used)f(as)f(a)g(basis)g(for)g(b)q(etter)i (understanding)e(ho)o(w)g(to)g(write)g(PVM)h(programs)e(and)h(for)f (appreciating)249 777 y(the)15 b(design)f(tradeo\013s)g(in)o(v)o(olv)o (ed.)p eop %%Page: 93 112 93 111 bop 249 325 a Fp(7)25 b FD(Ho)o(w)17 b(PVM)f(W)l(orks)249 561 y FA(In)h(this)h(c)o(hapter)g(w)o(e)g(describ)q(e)h(the)f(implemen) o(tatio)o(n)d(of)i(the)h(PVM)f(soft)o(w)o(are)h(and)f(the)h(reasons)249 615 y(b)q(ehind)f(the)g(basic)f(design)g(decisions.)26 b(The)17 b(most)e(imp)q(ortan)o(t)g(goals)g(for)h(PVM)h(3)f(are)g (fault)g(tol-)249 669 y(erance,)j(scalabilit)o(y)m(,)c(heterogeneit)o (y)m(,)j(and)f(p)q(ortabilit)o(y)m(.)25 b(PVM)18 b(is)e(able)h(to)g (withstand)g(host)g(and)249 723 y(net)o(w)o(ork)h(failures.)29 b(It)17 b(do)q(esn't)i(automatically)14 b(reco)o(v)o(er)19 b(an)e(application)f(after)i(a)g(crash,)h(but)e(it)249 777 y(do)q(es)c(pro)o(vide)g(p)q(olling)e(and)h(noti\014cation)g (primitiv)o(es)f(to)h(allo)o(w)f(fault-toleran)o(t)g(applications)h(to) g(b)q(e)249 831 y(built.)26 b(The)17 b(virtual)f(mac)o(hine)g(is)g (dynamically)e(recon\014gurable.)27 b(This)17 b(prop)q(ert)o(y)h(go)q (es)f(hand)f(in)249 885 y(hand)c(with)g(fault)f(tolerance:)17 b(an)12 b(application)f(ma)o(y)f(need)j(to)e(acquire)i(more)e (resources)j(in)e(order)g(to)249 939 y(con)o(tin)o(ue)k(running)f(once) i(a)e(host)h(has)g(failed.)23 b(Managemen)o(t)14 b(is)i(as)g(decen)o (tralized)h(and)e(lo)q(calized)249 993 y(as)j(p)q(ossible,)g(so)g (virtual)f(mac)o(hines)g(should)g(b)q(e)h(able)g(to)f(scale)h(to)g(h)o (undreds)h(of)e(hosts)h(and)g(run)249 1047 y(thousands)f(of)e(tasks.)26 b(PVM)16 b(can)h(connect)g(computers)f(of)g(di\013eren)o(t)h(t)o(yp)q (es)g(in)f(a)g(single)g(session.)249 1101 y(It)i(runs)g(with)f(minim)o (al)d(mo)q(di\014cation)h(on)i(an)o(y)g(\015a)o(v)o(or)g(of)g(Unix)g (or)h(an)f(op)q(erating)g(system)g(with)249 1155 y(comparable)d (facilities)g(\(m)o(ultitasking,)e(net)o(w)o(ork)n(able\).)22 b(The)15 b(programming)d(in)o(terface)k(is)f(simple)249 1209 y(but)f(complete,)f(and)h(an)o(y)f(user)i(can)f(install)f(the)h (pac)o(k)n(age)g(without)f(sp)q(ecial)i(privileges.)291 1263 y(T)m(o)9 b(allo)o(w)f(PVM)i(to)f(b)q(e)i(highly)d(p)q(ortable,)j (w)o(e)f(a)o(v)o(oid)e(the)i(use)h(of)e(op)q(erating)h(system)f(and)h (language)249 1317 y(features)k(that)e(w)o(ould)f(b)q(e)i(b)q(e)g(hard) g(to)f(retro\014t)h(if)f(una)o(v)n(ailable,)e(suc)o(h)j(as)f(m)o (ultithreaded)f(pro)q(cesses)249 1371 y(and)h(async)o(hronous)h(I/O.)f (These)h(exist)g(in)e(man)o(y)g(v)o(ersions)h(of)g(Unix,)g(but)g(they)h (v)n(ary)f(enough)g(from)249 1425 y(pro)q(duct)17 b(to)f(pro)q(duct)i (that)e(di\013eren)o(t)h(v)o(ersions)g(of)f(PVM)g(migh)o(t)e(need)k(to) e(b)q(e)h(main)o(tained.)23 b(The)249 1479 y(generic)14 b(p)q(ort)g(is)f(k)o(ept)h(as)f(simple)f(as)i(p)q(ossible,)f(though)g (PVM)h(can)f(alw)o(a)o(ys)g(b)q(e)h(optimized)e(for)h(an)o(y)249 1533 y(particular)h(mac)o(hine.)291 1587 y(W)m(e)d(assume)h(that)g FB(so)n(ckets)g FA(are)g(used)h(for)e(in)o(terpro)q(cess)k(comm)o(uni)o (cation)9 b(and)j(that)g(eac)o(h)g(host)g(in)249 1641 y(a)h(virtual)f(mac)o(hine)f(group)i(can)g(connect)h(directly)g(to)e (ev)o(ery)i(other)g(host)f(via)f(TCP)h([13)o(])f(and)h(UDP)249 1694 y([14)o(])i(proto)q(cols.)24 b(The)16 b(requiremen)o(t)f(of)g (full)g(IP)h(connectivit)o(y)f(could)h(b)q(e)g(remo)o(v)o(ed)f(b)o(y)g (sp)q(ecifying)249 1748 y(message)c(routes)g(and)g(using)g(the)g(p)o (vmds)f(to)g(forw)o(ard)h(messages.)17 b(Some)10 b(m)o(ultipro)q (cessor)g(mac)o(hines)249 1802 y(don't)i(mak)o(e)f(so)q(c)o(k)o(ets)i (a)o(v)n(ailable)d(on)i(the)h(pro)q(cessing)g(no)q(des,)g(but)g(do)f (ha)o(v)o(e)g(them)f(on)h(the)h(fron)o(t-end)249 1856 y(\(where)i(the)g(p)o(vmd)d(runs\).)249 1977 y FD(7.1)52 b(Comp)q(onen)o(ts)249 2085 y Fr(7.1.1)c(T)l(ask)16 b(Iden)o(ti\014ers) 249 2168 y FA(PVM)e(uses)h(a)f FB(task)g(identi\014er)g FA(\(TID\))g(to)f(address)i(p)o(vmds,)d(tasks,)i(and)g(groups)g(of)f (tasks)h(within)f(a)249 2222 y(virtual)g(mac)o(hine.)k(The)d(TID)g(con) o(tains)f(four)h(\014elds,)g(as)g(sho)o(wn)g(in)f(Figure)h(7.1.)j (Since)d(the)h(TID)e(is)249 2276 y(used)i(so)f(hea)o(vily)m(,)e(it)i (is)g(made)f(to)g(\014t)i(in)o(to)e(the)i(largest)f(in)o(teger)g(data)g (t)o(yp)q(e)h(\(32)e(bits\))h(a)o(v)n(ailable)e(on)249 2330 y(a)i(wide)g(range)g(of)f(mac)o(hines.)291 2384 y(The)f(\014elds)g(S,)f(G,)f(and)i(H)f(ha)o(v)o(e)h(global)d(meaning:) 15 b(eac)o(h)d(p)o(vmd)e(of)h(a)h(virtual)e(mac)o(hine)h(in)o(terprets) 249 2438 y(them)e(in)h(the)h(same)e(w)o(a)o(y)m(.)16 b(The)10 b(H)h(\014eld)f(con)o(tains)g(a)g(host)g(n)o(um)o(b)q(er)g (relativ)o(e)g(to)g(the)h(virtual)e(mac)o(hine.)249 2492 y(As)j(it)f(starts)h(up,)f(eac)o(h)h(p)o(vmd)e(is)h(con\014gured)h (with)f(a)g(unique)h(host)f(n)o(um)o(b)q(er)g(and)g(therefore)i(\\o)o (wns")p eop %%Page: 94 113 94 112 bop 249 251 a Fu(94)1375 b(Chapter)13 b(7)249 466 y 24818168 2841800 6841303 31114772 31641026 33943388 startTexFig 249 466 a %%BeginDocument: fig7-taskid.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 62 ] concat %I 106 626 106 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 62 ] concat %I 122 626 122 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 62 ] concat %I 314 626 314 602 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 146.5 700 ] concat %I [ (31) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 645.5 700 ] concat %I [ (0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 149 659 ] concat %I [ (S) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 164 659 ] concat %I [ (G) ] Text End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 70 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 86 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 102 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 118 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 134 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 150 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 166 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 182 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 198 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 214 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 246 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 262 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 278 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 294 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 310 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 326 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 342 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 358 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 374 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 390 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 406 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 422 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 438 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 454 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 470 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 486 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 502 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 62 ] concat %I 90 602 602 626 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 268 659 ] concat %I [ (H) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 509 659 ] concat %I [ (L) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 354.5 700 ] concat %I [ (18) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 162.5 700 ] concat %I [ (30) ] Text End End %I eop showpage end %%EndDocument endTexFig 249 708 a Fo(Figure)g(7.1)249 745 y Fy(Generic)d(task)g(id)249 862 y FA(part)16 b(of)f(the)h(TID)f(address)h(space.)24 b(The)16 b(maxim)n(um)11 b(n)o(um)o(b)q(er)k(of)g(hosts)h(in)f(a)g (virtual)g(mac)o(hine)f(is)249 916 y(limited)h(to)h(2)467 901 y Fk(H)510 916 y Ft(\000)11 b FA(1)17 b(\(4095\).)26 b(The)17 b(mapping)e(b)q(et)o(w)o(een)j(host)f(n)o(um)o(b)q(ers)g(and)g (hosts)g(is)g(kno)o(wn)f(to)249 970 y(eac)o(h)d(p)o(vmd,)e(sync)o (hronized)i(b)o(y)g(a)f(global)f FB(host)i(table)p FA(.)18 b(Host)13 b(n)o(um)o(b)q(er)e(zero)j(is)e(used,)h(dep)q(ending)g(on)249 1024 y(con)o(text,)h(to)g(refer)h(to)f(the)g(lo)q(cal)f(p)o(vmd)f(or)i (a)g FB(shadow)h(pvmd)p FA(,)f(called)g FB(pvmd')g FA(\(Section)g (7.3.7\).)291 1077 y(The)19 b(S)g(bit)g(is)g(used)h(to)f(address)i(p)o (vmds,)d(with)h(the)h(H)f(\014eld)g(set)i(to)e(the)g(host)h(n)o(um)o(b) q(er)e(and)249 1131 y(the)e(L)f(\014eld)g(cleared.)22 b(This)15 b(bit)f(is)h(a)g(historical)f(lefto)o(v)o(er)h(and)g(causes)h (sligh)o(tly)e(sc)o(hizoid)h(naming;)249 1185 y(sometimes)d(p)o(vmds)h (are)i(addressed)h(with)d(the)i(S)f(bit)g(cleared.)19 b(It)c(should)f(someda)o(y)e(b)q(e)j(reclaimed)249 1239 y(to)f(mak)o(e)e(the)j(H)f(or)g(L)f(space)i(larger.)291 1293 y(Eac)o(h)e(p)o(vmd)f(is)i(allo)o(w)o(ed)e(to)i(assign)f(priv)n (ate)g(meaning)f(to)i(the)g(L)f(\014eld)h(\(with)f(the)h(H)g(\014eld)g (set)g(to)249 1347 y(its)f(o)o(wn)g(host)g(n)o(um)o(b)q(er\),)g(except) h(that)g(\\all)d(bits)i(cleared")h(is)f(reserv)o(ed)i(to)f(mean)d(the)j (p)o(vmd)e(itself.)249 1401 y(The)k(L)f(\014eld)h(is)g(18)f(bits)g (wide,)h(so)f(up)h(to)f(2)950 1386 y Fl(18)996 1401 y Ft(\000)10 b FA(1)15 b(tasks)h(can)g(exist)g(concurren)o(tly)h(on)e (eac)o(h)h(host.)249 1455 y(In)e(the)g(generic)h(Unix)e(p)q(ort,)h(L)f (v)n(alues)h(are)g(assigned)g(b)o(y)f(a)h(coun)o(ter,)g(and)g(the)g(p)o (vmd)e(main)o(tains)f(a)249 1509 y(map)i(b)q(et)o(w)o(een)j(L)e(v)n (alues)h(and)f(Unix)g(pro)q(cess)i(id's.)k(Use)15 b(of)f(the)h(L)g (\014eld)f(in)g(m)o(ultipro)q(cessor)g(p)q(orts)249 1563 y(is)g(describ)q(ed)h(in)f(Section)g(7.10.)291 1617 y(The)i(G)g(bit)f (is)h(set)h(to)f(form)f(m)o(ulticast)f(addresses)k(\(GIDs\),)e(whic)o (h)g(refer)h(to)f(groups)h(of)e(tasks.)249 1671 y(Multicasting)e(is)h (describ)q(ed)i(in)d(Section)h(7.6.4.)291 1725 y(The)e(design)f(of)g (the)h(TID)f(enables)i(the)f(implem)o(en)o(tation)d(to)i(meet)g(the)h (design)g(goals.)k(T)m(asks)c(can)249 1779 y(b)q(e)17 b(assigned)f(TIDs)g(b)o(y)g(their)h(lo)q(cal)e(p)o(vmds)g(without)h (o\013-host)g(comm)o(unicatio)o(n.)22 b(Messages)c(can)249 1833 y(b)q(e)c(routed)g(from)d(an)o(ywhere)j(in)f(a)g(virtual)f(mac)o (hine)g(to)h(an)o(ywhere)h(else,)g(b)o(y)f(hierarc)o(hical)g(naming.) 249 1887 y(P)o(ortabilit)o(y)h(is)i(enhanced)h(b)q(ecause)h(the)e(L)g (\014eld)g(can)g(b)q(e)g(rede\014ned.)26 b(Finally)m(,)14 b(space)i(is)g(reserv)o(ed)249 1941 y(for)d(error)i(co)q(des.)k(When)14 b(a)f(function)g(can)h(return)g(a)g(v)o(ector)g(of)f(TIDs)g(mixed)f (with)i(error)g(co)q(des,)g(it)249 1995 y(is)g(useful)g(if)f(the)h (error)h(co)q(des)g(don't)e(corresp)q(ond)i(to)f(legal)f(TIDs.)18 b(The)c(TID)f(space)i(is)f(divided)f(up)249 2049 y(as)h(follo)o(ws:)315 2145 y Fu(Use)423 b(S)50 b(G)104 b(H)170 b(L)p 291 2160 1028 2 v 315 2192 a(T)m(ask)13 b(iden)o(ti\014er)247 b(0)57 b(0)e(1)p Fi(::H)1023 2196 y Fh(max)1149 2192 y Fu(1)p Fi(::L)1216 2196 y Fh(max)315 2238 y Fu(Pvmd)14 b(iden)o(ti\014er)226 b(1)57 b(0)e(1)p Fi(::H)1023 2242 y Fh(max)1205 2238 y Fu(0)315 2284 y(Lo)q(cal)14 b(p)o(vmd)g(\(from)f (task\))84 b(1)57 b(0)114 b(0)177 b(0)315 2329 y(Pvmd')14 b(from)e(master)i(p)o(vmd)51 b(1)57 b(0)114 b(0)177 b(0)315 2375 y(Multicast)15 b(address)190 b(0)57 b(1)e(1)p Fi(::H)1023 2379 y Fh(max)1149 2375 y Fu(0)p Fi(::L)1216 2379 y Fh(max)315 2421 y Fu(Error)14 b(co)q(de)306 b(1)57 b(1)e(\(small)15 b(neg.)i(n)o(um)o(b)q(er\))p 291 2436 V eop %%Page: 95 114 95 113 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1261 b(95)291 507 y FA(Naturally)m(,)16 b(TIDs)h(are)g(in)o(tended)h(to)f(b) q(e)h(opaque)f(to)g(the)h(application,)e(and)h(the)g(programmer)249 561 y(should)d(not)g(attempt)f(to)g(predict)i(their)g(v)n(alues)e(or)h (mo)q(dify)e(them)h(without)g(using)h(functions)g(sup-)249 615 y(plied)j(in)g(the)h(programmi)o(ng)c(library)m(.)27 b(More)18 b(sym)o(b)q(olic)e(naming)f(can)i(b)q(e)h(obtained)f(b)o(y)g (using)g(a)249 669 y(name)d(serv)o(er)k(library)c(la)o(y)o(ered)i(on)f (top)h(of)f(the)h(ra)o(w)g(PVM)g(calls,)f(if)f(the)j(con)o(v)o(enience) g(is)e(deemed)249 723 y(w)o(orth)f(the)g(cost)h(of)e(name)g(lo)q(okup.) 249 806 y Fr(7.1.2)48 b(Arc)o(hitecture)13 b(Classes)249 889 y FA(PVM)i(assigns)g(an)g FB(ar)n(chite)n(ctur)n(e)g(name)g FA(to)g(eac)o(h)g(kind)f(of)g(mac)o(hine)g(on)g(whic)o(h)h(it)g(runs,)g (to)g(distin-)249 943 y(guish)d(b)q(et)o(w)o(een)h(mac)o(hines)e(that)h (run)g(di\013eren)o(t)h(executables,)h(b)q(ecause)g(of)d(hardw)o(are)h (or)g(op)q(erating)249 997 y(system)i(di\013erences.)20 b(Man)o(y)13 b(standard)i(names)e(are)h(de\014ned,)h(and)e(others)i (can)f(b)q(e)h(added.)291 1051 y(Sometimes)f(mac)o(hines)h(with)i (incompatible)d(executables)k(use)f(the)g(same)f(binary)g(data)g (repre-)249 1105 y(sen)o(tation.)24 b(PVM)17 b(tak)o(es)f(adv)n(an)o (tage)f(of)g(this)h(to)g(a)o(v)o(oid)f(data)g(con)o(v)o(ersion.)25 b(Arc)o(hitecture)18 b(names)249 1159 y(are)13 b(mapp)q(ed)f(to)h FB(data)h(enc)n(o)n(ding)g FA(n)o(um)o(b)q(ers,)e(and)h(the)h(enco)q (ding)f(n)o(um)o(b)q(ers)f(are)i(used)f(to)g(determine)249 1213 y(when)h(it)g(is)g(necessary)i(to)d(con)o(v)o(ert.)249 1296 y Fr(7.1.3)48 b(Message)16 b(Mo)q(del)249 1379 y FA(PVM)c(daemons)f(and)h(tasks)g(can)g(comp)q(ose)g(and)f(send)i (messages)f(of)f(arbitrary)h(lengths)g(con)o(taining)249 1433 y(t)o(yp)q(ed)g(data.)17 b(The)12 b(data)g(can)g(b)q(e)g(con)o(v)o (erted)h(using)e(XDR)g([16)o(])g(when)h(passing)g(b)q(et)o(w)o(een)h (hosts)f(with)249 1487 y(incompatible)e(data)i(formats.)k(Messages)d (are)g(tagged)f(at)f(send)i(time)e(with)h(a)f(user-de\014ned)k(in)o (teger)249 1541 y(co)q(de)g(and)e(can)i(b)q(e)f(selected)i(for)d (receipt)j(b)o(y)d(source)i(address)h(or)d(tag.)291 1595 y(The)i(sender)h(of)e(a)g(message)g(do)q(es)h(not)g(w)o(ait)f(for)g(an) g(ac)o(kno)o(wledgmen)o(t)f(from)g(the)i(receiv)o(er,)h(but)249 1649 y(con)o(tin)o(ues)c(as)g(so)q(on)g(as)g(the)g(message)g(has)g(b)q (een)g(handed)h(to)e(the)i(net)o(w)o(ork)f(and)f(the)i(message)e (bu\013er)249 1703 y(can)h(b)q(e)g(safely)f(deleted)h(or)g(reused.)19 b(Messages)13 b(are)f(bu\013ered)g(at)g(the)g(receiving)g(end)g(un)o (til)e(receiv)o(ed.)249 1757 y(PVM)g(reliably)f(deliv)o(ers)h (messages,)h(pro)o(vided)e(the)i(destination)e(exists.)18 b(Message)11 b(order)f(from)f(eac)o(h)249 1811 y(sender)14 b(to)e(eac)o(h)h(receiv)o(er)h(in)e(the)h(system)g(is)f(preserv)o(ed;)i (if)e(one)h(en)o(tit)o(y)f(sends)i(sev)o(eral)f(messages)f(to)249 1865 y(another,)i(they)g(will)f(b)q(e)h(receiv)o(ed)h(in)f(the)g(same)f (order.)291 1919 y(Both)e(blo)q(c)o(king)g(and)g(non)o(blo)q(c)o(king)f (receiv)o(e)j(primitiv)o(es)c(are)j(pro)o(vided,)f(so)h(a)f(task)g(can) h(w)o(ait)e(for)h(a)249 1973 y(message)h(without)g(\(necessarily\))i (consuming)d(pro)q(cessor)k(time)c(b)o(y)h(p)q(olling)f(for)h(it.)17 b(Or,)c(it)f(can)h(p)q(oll)249 2027 y(for)i(a)g(message)g(without)g (hanging.)22 b(A)15 b(receiv)o(e)i(with)e(timeout)f(is)h(also)g(pro)o (vided,)g(whic)o(h)g(returns)249 2081 y(after)f(a)g(sp)q(eci\014ed)h (time)e(if)g(no)g(message)h(has)g(arriv)o(ed.)291 2135 y(No)g(ac)o(kno)o(wledgmen)o(ts)e(are)j(used)g(b)q(et)o(w)o(een)h (sender)f(and)f(receiv)o(er.)20 b(Messages)c(are)f(reliably)e(de-)249 2188 y(liv)o(ered)f(and)f(bu\013ered)i(b)o(y)e(the)h(system.)17 b(If)11 b(w)o(e)h(ignore)f(fault)g(reco)o(v)o(ery)m(,)h(then)g(either)g (an)f(application)249 2242 y(will)j(run)i(to)g(completion)e(or,)h(if)g (some)g(comp)q(onen)o(t)g(go)q(es)h(do)o(wn,)f(it)g(w)o(on't.)23 b(In)15 b(order)i(to)e(pro)o(vide)249 2296 y(fault)f(reco)o(v)o(ery)m (,)g(a)h(task)f(\()p Fn(T)685 2302 y Fk(A)713 2296 y FA(\))g(m)o(ust)g(b)q(e)h(prepared)g(for)f(another)h(task)g(\()p Fn(T)1424 2302 y Fk(B)1453 2296 y FA(,)f(from)f(whic)o(h)h(it)g(w)o(an) o(ts)249 2350 y(a)h(message\))g(to)f(crash,)i(and)f(m)o(ust)f(b)q(e)h (able)g(to)g(tak)o(e)g(correctiv)o(e)h(action.)21 b(F)m(or)15 b(example,)f(it)g(migh)o(t)249 2404 y(resc)o(hedule)f(its)d(request)i (to)f(a)f(di\013eren)o(t)h(serv)o(er,)h(or)f(ev)o(en)g(start)g(a)f(new) h(serv)o(er.)19 b(F)m(rom)9 b(the)i(viewp)q(oin)o(t)249 2458 y(of)i Fn(T)320 2464 y Fk(A)347 2458 y FA(,)h(it)f(do)q(esn't)h (matter)f(sp)q(eci\014cally)h(when)g Fn(T)1036 2464 y Fk(B)1079 2458 y FA(crashes)h(relativ)o(e)f(to)f(messages)h(sen)o(t)g (from)e Fn(T)1804 2464 y Fk(A)1832 2458 y FA(.)p eop %%Page: 96 115 96 114 bop 249 251 a Fu(96)1375 b(Chapter)13 b(7)249 507 y FA(While)h(w)o(aiting)g(for)g Fn(T)607 513 y Fk(B)636 507 y FA(,)h Fn(T)687 513 y Fk(A)729 507 y FA(will)e(receiv)o(e)j (either)g(a)f(message)f(from)g Fn(T)1384 513 y Fk(B)1427 507 y FA(or)h(noti\014cation)f(that)h Fn(T)1814 513 y Fk(B)249 561 y FA(has)h(crashed.)24 b(F)m(or)15 b(the)i(purp)q(oses)g (of)e(\015o)o(w)g(con)o(trol,)g(a)g(fully)g(blo)q(c)o(king)f(send)j (can)e(easily)h(b)q(e)g(built)249 615 y(using)e(the)g(semi-sync)o (hronous)g(send)h(primitiv)o(e.)249 698 y Fr(7.1.4)48 b(Async)o(hronous)13 b(Noti\014cation)249 781 y FA(PVM)g(pro)o(vides)g FB(noti\014c)n(ation)h FA(messages)f(as)f(a)h(means)f(to)h(implem)o(en) o(t)e(fault)h(reco)o(v)o(ery)h(in)g(an)f(appli-)249 835 y(cation.)18 b(A)13 b(task)g(can)h(request)h(that)e(the)h(system)f (send)h(a)f(message)g(on)g(one)h(of)e(the)i(follo)o(wing)d(three)249 889 y(ev)o(en)o(ts:)315 985 y Fu(T)o(yp)q(e)219 b(Meaning)p 291 1001 894 2 v 315 1033 a Fg(PvmTaskExit)85 b Fu(T)m(ask)13 b(exits)h(or)f(crashes)315 1078 y Fg(PvmHostDele)o(te)46 b Fu(Host)13 b(is)h(deleted)g(or)f(crashes)315 1124 y Fg(PvmHostAdd)105 b Fu(New)13 b(hosts)g(are)g(added)h(to)f(the)g(VM)p 291 1139 V 291 1257 a FA(Notify)h(requests)j(are)e(stored)h(in)f(the)g (p)o(vmds,)f(attac)o(hed)i(to)f(ob)r(jects)h(they)f(monitor.)20 b(Requests)249 1311 y(for)d(remote)h(ev)o(en)o(ts)g(\(o)q(ccurring)h (on)e(a)h(di\013eren)o(t)g(host)g(than)g(the)g(requester\))i(are)e(k)o (ept)g(on)g(b)q(oth)249 1365 y(hosts.)g(The)13 b(remote)f(p)o(vmd)f (sends)j(the)f(message)f(if)g(the)h(ev)o(en)o(t)g(o)q(ccurs,)h(while)d (the)j(lo)q(cal)d(one)i(sends)249 1419 y(the)i(message)f(if)f(the)i (remote)e(host)i(go)q(es)f(do)o(wn.)19 b(The)14 b(assumption)f(is)h (that)g(a)g(lo)q(cal)g(p)o(vmd)e(can)i(b)q(e)249 1473 y(trusted;)19 b(if)d(it)g(go)q(es)h(do)o(wn,)g(tasks)g(running)f(under) h(it)g(w)o(on't)f(b)q(e)h(able)f(to)h(do)f(an)o(ything,)g(so)h(they)249 1527 y(don't)c(need)i(to)f(b)q(e)h(noti\014ed.)249 1610 y Fr(7.1.5)48 b(PVM)16 b(Daemon)f(and)g(Programming)e(Library)249 1693 y(PVM)k(Daemon)40 b FA(One)15 b(p)o(vmd)e(runs)i(on)f(eac)o(h)h (host)g(of)f(a)g(virtual)g(mac)o(hine.)k(Pvmds)c(o)o(wned)g(b)o(y)249 1747 y(\(running)k(as\))f(one)h(user)h(do)e(not)h(in)o(teract)g(with)f (those)h(o)o(wned)g(b)o(y)f(others,)i(in)f(order)g(to)f(reduce)249 1801 y(securit)o(y)e(risk,)e(and)h(minim)o(ize)e(the)i(impact)f(of)g (one)h(PVM)g(user)h(on)f(another.)291 1855 y(The)i(p)o(vmd)f(serv)o(es) i(as)f(a)g(message)g(router)h(and)f(con)o(troller.)25 b(It)16 b(pro)o(vides)g(a)g(p)q(oin)o(t)f(of)h(con)o(tact,)249 1909 y(authen)o(tication,)g(pro)q(cess)i(con)o(trol,)e(and)g(fault)g (detection.)26 b(An)16 b(idle)g(p)o(vmd)f(o)q(ccasionally)g(c)o(hec)o (ks)249 1963 y(that)h(its)f(p)q(eers)i(are)f(still)e(running.)23 b(Ev)o(en)16 b(if)e(application)g(programs)g(crash,)i(p)o(vmds)f(con)o (tin)o(ue)g(to)249 2017 y(run,)f(to)g(aid)f(in)g(debugging.)291 2071 y(The)i(\014rst)h(p)o(vmd)e(\(started)i(b)o(y)f(hand\))g(is)g (designated)h(the)g FB(master)p FA(,)e(while)h(the)h(others)g (\(started)249 2125 y(b)o(y)d(the)g(master\))g(are)g(called)g FB(slaves)p FA(.)k(During)c(normal)d(op)q(eration,)j(all)f(are)h (considered)h(equal.)j(But)249 2179 y(only)11 b(the)h(master)g(can)f (start)i(new)f(sla)o(v)o(es)g(and)f(add)h(them)f(to)g(the)i (con\014guration.)j(Recon\014guration)249 2233 y(requests)21 b(originating)c(on)h(a)h(sla)o(v)o(e)f(host)h(are)h(forw)o(arded)e(to)h (the)h(master.)32 b(Lik)o(ewise,)19 b(only)f(the)249 2287 y(master)13 b(can)i(forcibly)e(delete)i(hosts)f(from)e(the)j(mac)o (hine.)249 2370 y Fr(Programming)e(Library)40 b FA(The)14 b(libp)o(vm)e(library)h(allo)o(ws)g(a)h(task)g(to)g(in)o(terface)g (with)g(the)h(p)o(vmd)249 2424 y(and)e(other)h(tasks.)k(It)13 b(con)o(tains)g(functions)g(for)g(pac)o(king)f(\(comp)q(osing\))g(and)h (unpac)o(king)f(messages,)249 2478 y(and)k(functions)g(to)f(p)q(erform) g(PVM)i FB(sysc)n(al)r(ls)e FA(b)o(y)h(using)f(the)i(message)e (functions)h(to)g(send)h(service)p eop %%Page: 97 116 97 115 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1261 b(97)249 507 y FA(requests)23 b(to)d(the)h(p)o(vmd.)37 b(It)21 b(is)f(made)g(as)g(small)f(and)h(simple)f(as)i(p)q(ossible.)38 b(Since)22 b(it)e(shares)249 561 y(an)d(address)i(space)f(with)f(unkno) o(wn,)h(p)q(ossibly)f(buggy)m(,)g(co)q(de,)h(it)f(can)h(b)q(e)g(brok)o (en)g(or)f(sub)o(v)o(erted.)249 615 y(Minimal)d(sanit)o(y-c)o(hec)o (king)k(of)e(parameters)i(is)f(p)q(erformed,)h(lea)o(ving)e(further)i (authen)o(tication)f(to)249 669 y(the)e(p)o(vmd.)291 723 y(The)e(top)f(lev)o(el)g(of)g(the)h(libp)o(vm)d(library)m(,)h (including)h(most)f(of)h(the)h(programming)c(in)o(terface)k(func-)249 777 y(tions,)h(is)g(written)h(in)f(a)g(mac)o(hine-indep)q(enden)o(t)h (st)o(yle.)20 b(The)14 b(b)q(ottom)f(lev)o(el)i(is)f(k)o(ept)h (separate)g(and)249 831 y(can)d(b)q(e)g(mo)q(di\014ed)e(or)i(replaced)h (with)e(a)g(new)h(mac)o(hine-sp)q(eci\014c)g(\014le)f(when)i(p)q (orting)e(PVM)h(to)f(a)h(new)249 885 y(en)o(vironmen)o(t.)249 1005 y FD(7.2)52 b(Messages)249 1113 y Fr(7.2.1)c(F)l(ragmen)o(ts)14 b(and)h(Databufs)249 1196 y FA(The)f(p)o(vmd)e(and)h(libp)o(vm)e (manage)g(message)i(bu\013ers,)i(whic)o(h)e(p)q(oten)o(tially)f(hold)h (large)g(amoun)o(ts)f(of)249 1250 y(dynamic)i(data.)23 b(Bu\013ers)17 b(need)f(to)g(b)q(e)g(shared)g(e\016cien)o(tly)m(,)f (for)g(example,)f(to)i(attac)o(h)f(a)h(m)o(ulticast)249 1304 y(message)e(to)f(sev)o(eral)i(send)f(queues)i(\(see)f(Section)f (7.6.4\).)j(T)m(o)c(a)o(v)o(oid)f(cop)o(ying,)h(all)f(p)q(oin)o(ters)j (are)f(to)249 1358 y(a)i(single)f(instance)i(of)e(the)i(data)e(\(a)h FB(databuf)p FA(\),)h(whic)o(h)e(is)h(refcoun)o(ted)h(b)o(y)f(allo)q (cating)e(a)i(few)g(extra)249 1412 y(b)o(ytes)c(for)f(an)h(in)o(teger)g (at)f(the)h(head)g(of)f(the)h(data.)17 b(A)11 b(p)q(oin)o(ter)h(to)f (the)h(data)g(itself)f(is)g(passed)i(around,)249 1466 y(and)f(routines)h(subtract)g(from)e(it)g(to)i(access)h(the)e(refcoun)o (t)h(or)f(free)h(the)g(blo)q(c)o(k.)k(When)c(the)f(refcoun)o(t)249 1520 y(of)h(a)h(databuf)f(decremen)o(ts)i(to)f(zero,)g(it)g(is)g (freed.)291 1574 y(PVM)19 b(messages)g(are)h(comp)q(osed)f(without)g (declaring)g(a)g(maxim)n(um)c(length)k(ahead)g(of)g(time.)249 1628 y(The)14 b(pac)o(k)g(functions)f(allo)q(cate)g(memory)e(in)i (steps,)i(using)e(databufs)g(to)h(store)g(the)g(data,)f(and)h(frag)249 1682 y(descriptors)i(to)d(c)o(hain)h(the)g(databufs)g(together.)291 1736 y(A)k(frag)f(descriptor)i Fs(struct)i(frag)c FA(holds)h(a)f(p)q (oin)o(ter)h(\()p Fs(fr)p 1245 1736 14 2 v 16 w(dat)p FA(\))f(to)h(a)g(blo)q(c)o(k)f(of)h(data)f(and)h(its)249 1790 y(length)g(\()p Fs(fr)p 443 1790 V 15 w(len)p FA(\).)30 b(It)19 b(also)e(k)o(eeps)i(a)f(p)q(oin)o(ter)g(\()p Fs(fr)p 1080 1790 V 15 w(buf)p FA(\))g(to)g(the)g(databuf)g(and)g(its)g (total)f(length)249 1844 y(\()p Fs(fr)p 312 1844 V 15 w(max)p FA(\);)c(these)i(reserv)o(e)g(space)f(to)f(prep)q(end)i(or)e (app)q(end)h(data.)j(F)m(rags)c(can)g(also)g(reference)j(static)249 1898 y(\(non-databuf)s(\))e(data.)20 b(A)15 b(frag)f(has)h(link)f(p)q (oin)o(ters)h(so)f(it)h(can)g(b)q(e)g(c)o(hained)g(in)o(to)f(a)g(list.) 20 b(Eac)o(h)15 b(frag)249 1952 y(k)o(eeps)g(a)e(coun)o(t)h(of)g (references)i(to)e(it;)f(when)h(the)h(refcoun)o(t)f(decremen)o(ts)h(to) f(zero,)g(the)g(frag)g(is)f(freed)249 2006 y(and)g(the)h(underlying)f (databuf)f(refcoun)o(t)i(is)f(decremen)o(ted.)19 b(In)13 b(the)h(case)g(where)g(a)f(frag)g(descriptor)249 2060 y(is)j(the)g(head)g(of)f(a)g(list,)g(its)h(refcoun)o(t)g(applies)g(to)f (the)h(en)o(tire)h(list.)22 b(When)16 b(it)g(reac)o(hes)h(zero,)f(ev)o (ery)249 2114 y(frag)d(in)h(the)g(list)g(is)f(freed.)19 b(Figure)14 b(7.2)f(sho)o(ws)h(a)g(list)f(of)h(fragmen)o(ts)e(storing)i (a)g(message.)249 2197 y Fr(7.2.2)48 b(Messages)15 b(in)g(Libp)o(vm)249 2280 y FA(Libp)o(vm)i(pro)o(vides)h(functions)h(to)g(pac)o(k)f(all)g (of)g(the)h(primitiv)o(e)d(data)j(t)o(yp)q(es)g(in)o(to)f(a)g(message,) h(in)249 2334 y(one)f(of)g(sev)o(eral)h(enco)q(ding)f(formats.)29 b(There)20 b(are)e(\014v)o(e)h(sets)g(of)f(enco)q(ders)i(and)e(deco)q (ders.)33 b(Eac)o(h)249 2388 y(message)14 b(bu\013er)i(has)e(a)h(set)g (asso)q(ciated)g(with)f(it.)20 b(When)15 b(creating)f(a)h(new)f (message,)g(the)h(enco)q(der)249 2442 y(set)g(is)g(determined)f(b)o(y)g (the)h(format)d(parameter)i(to)h Fs(pvm)p 1159 2442 V 15 w(mkbuf\(\))p FA(.)j(When)c(receiving)h(a)f(message,)249 2496 y(the)21 b(deco)q(ders)h(are)f(determined)f(b)o(y)g(the)h(enco)q (ding)f(\014eld)g(of)g(the)h(message)f(header.)38 b(The)21 b(t)o(w)o(o)p eop %%Page: 98 117 98 116 bop 249 251 a Fu(98)1375 b(Chapter)13 b(7)249 507 y FA(most)j(commonl)o(y)e(used)j(ones)h(pac)o(k)e(data)h(in)f FB(r)n(aw)g FA(\(host)h(nativ)o(e\))g(and)f FB(default)h FA(\(XDR\))f(formats.)249 561 y FB(Inplac)n(e)j FA(enco)q(ders)i(pac)o (k)e(descriptors)h(of)e(the)i(data)e(\(the)i(frags)e(p)q(oin)o(t)h(to)f (static)h(data\),)h(so)e(the)249 615 y(message)12 b(is)g(sen)o(t)h (without)e(cop)o(ying)h(the)g(data)g(to)g(a)g(bu\013er.)18 b(There)13 b(are)g(no)f(inplace)f(deco)q(ders.)20 b FB(F)m(o)n(o)249 669 y FA(enco)q(ders)13 b(use)e(a)f(mac)o(hine-indep)q(enden)o(t)h (format)e(that)h(is)h(simpler)e(than)i(XDR;)e(these)j(enco)q(ders)h (are)249 723 y(used)i(when)f(comm)o(unicating)d(with)i(the)i(p)o(vmd.)i FB(A)o(lien)c FA(deco)q(ders)j(are)e(installed)g(when)g(a)g(receiv)o (ed)249 777 y(message)i(can't)g(b)q(e)h(unpac)o(k)o(ed)f(b)q(ecause)i (its)e(enco)q(ding)h(do)q(esn't)f(matc)o(h)f(the)i(data)f(format)e(of)h (the)249 831 y(host.)21 b(A)15 b(message)g(in)g(an)f(alien)g(data)h (format)e(can)i(b)q(e)h(held)f(or)g(forw)o(arded,)f(but)i(an)o(y)e (attempt)g(to)249 885 y(read)g(data)g(from)e(it)i(results)h(in)e(an)h (error.)291 939 y(Figure)k(7.2)f(sho)o(ws)h(libp)o(vm)e(message)i (managemen)o(t.)28 b(T)m(o)17 b(allo)o(w)f(the)j(PVM)f(programmer)e(to) 249 993 y(handle)i(message)f(bu\013ers,)j(they)e(are)g(lab)q(eled)g (with)f(in)o(teger)i(message)e(id's)g(\(MIDs\),)i(whic)o(h)f(are)249 1047 y(simply)8 b(indices)j(in)o(to)e(the)i(message)f(heap.)17 b(When)10 b(a)g(message)g(bu\013er)h(is)g(freed,)g(its)f(MID)g(is)g (recycled.)249 1101 y(The)20 b(heap)g(starts)g(out)f(small)f(and)h(is)g (extended)i(if)e(it)g(b)q(ecomes)g(full.)34 b(Generally)m(,)19 b(only)g(a)g(few)249 1155 y(messages)14 b(exist)g(at)g(an)o(y)f(time,)f (unless)j(an)f(application)e(explicitly)h(stores)i(them.)291 1209 y(A)9 b(v)o(ector)i(of)e(functions)h(for)g(enco)q(ding/deco)q (ding)g(primitiv)o(e)d(t)o(yp)q(es)k(\()p Fs(struct)21 b(encvec)p FA(\))8 b(is)i(initial-)249 1263 y(ized)k(when)g(a)f (message)g(bu\013er)i(is)e(created.)20 b(T)m(o)12 b(pac)o(k)i(a)f(long) g(in)o(teger,)g(the)h(generic)h(pac)o(k)e(function)249 1317 y Fs(pvm)p 318 1317 14 2 v 15 w(pklong\(\))18 b FA(calls)h Fs(\(message)p 801 1317 V 14 w(heap[mid].ub)p 1079 1317 V 14 w(codef->enc)p 1313 1317 V 13 w(long\)\(\))f FA(of)h(the)i(bu\013er.)36 b(En-)249 1371 y(co)q(der)21 b(v)o(ectors)f(w)o(ere)h(used)f(for)f(sp)q(eed)j(\(as)d(opp)q(osed)h (to)g(ha)o(ving)e(a)i(case)g(switc)o(h)g(in)f(eac)o(h)h(pac)o(k)249 1425 y(function\).)d(One)c(dra)o(wbac)o(k)f(is)g(that)g(ev)o(ery)h (enco)q(der)h(for)e(ev)o(ery)g(format)f(is)h(touc)o(hed)h(\(b)o(y)f (naming)d(it)249 1479 y(in)k(the)h(co)q(de\),)h(so)e(the)i(link)o(er)e (m)o(ust)f(include)i(all)e(the)j(functions)e(in)g(ev)o(ery)i (executable,)f(ev)o(en)h(when)249 1533 y(they're)g(not)f(used.)249 1616 y Fr(7.2.3)48 b(Messages)15 b(in)g(the)g(Pvmd)249 1699 y FA(By)g(comparison)d(with)i(libp)o(vm,)d(message)j(pac)o(king)g (in)g(the)g(p)o(vmd)f(is)h(v)o(ery)g(simple.)k(Messages)e(are)249 1753 y(handled)h(using)f Fs(struct)k(mesg)c FA(\(sho)o(wn)h(in)f (Figure)h(7.3\).)25 b(There)18 b(are)f(enco)q(ders)h(for)e(signed)h (and)249 1807 y(unsigned)e(in)o(tegers)g(and)f(strings,)g(whic)o(h)g (use)h(in)e(the)i(libp)o(vm)d FB(fo)n(o)i FA(format.)j(In)o(tegers)f(o) q(ccup)o(y)e(four)249 1861 y(b)o(ytes)k(eac)o(h,)f(with)g(b)o(ytes)g (in)g(net)o(w)o(ork)g(order)g(\(bits)g(31..24)e(follo)o(w)o(ed)g(b)o(y) i(bits)g(23..16,)e(...\).)25 b(Byte)249 1914 y(strings)12 b(are)f(pac)o(k)o(ed)h(as)f(an)g(in)o(teger)g(length)g(\(including)g (the)g(terminating)f(n)o(ull)g(for)h(ASCI)q(I)g(strings\),)249 1968 y(follo)o(w)o(ed)h(b)o(y)h(the)h(data)f(and)g(zero)i(to)e(three)i (n)o(ull)d(b)o(ytes)i(to)f(round)h(the)g(total)f(length)g(to)g(a)g(m)o (ultiple)249 2022 y(of)g(four.)249 2105 y Fr(7.2.4)48 b(Pvmd)15 b(En)o(try)g(P)o(oin)o(ts)249 2188 y FA(Messages)20 b(for)f(the)g(p)o(vmd)e(are)i(reassem)o(bled)g(from)e(pac)o(k)o(ets)j (in)e Fs(loclinpkt\(\))f FA(if)g(from)g(a)i(lo)q(cal)249 2242 y(task,)13 b(or)g(in)f Fs(netinpkt\(\))f FA(if)i(from)e(another)i (p)o(vmd)f(or)h(foreign)f(task.)18 b(Reassem)o(bled)13 b(messages)g(are)249 2296 y(passed)i(to)f(one)g(of)f(three)i FB(entry)g(p)n(oints)p FA(:)p eop %%Page: 99 118 99 117 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1261 b(99)249 871 y 19134566 17761075 7959592 22563143 27102085 40324218 startTexFig 249 871 a %%BeginDocument: fig7-mheap.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Pict %I b 65535 1 0 0 [] 0 SetB %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 201 674 217 738 Rect End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 201 722 217 722 Line %I 1 End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 201 706 217 706 Line %I 1 End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 201 690 217 690 Line %I 1 End End %I eop Begin %I Line %I b 65520 2 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 209 666 209 634 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 3.06162e-17 0.5 -0.5 3.06162e-17 704 620 ] concat Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 313 802 329 802 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 305 810 337 810 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 297 818 345 818 Line %I 1 End End %I eop Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 209 730 241 730 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 209 698 241 698 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 3.06162e-17 0.5 -0.5 3.06162e-17 704 588 ] concat Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 313 802 329 802 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 305 810 337 810 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 297 818 345 818 Line %I 1 End End %I eop Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 209 682 265 682 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 3.06162e-17 0.5 -0.5 3.06162e-17 728 572 ] concat Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 313 802 329 802 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 305 810 337 810 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 297 818 345 818 Line %I 1 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 336 809 ] concat %I [ (struct) (umbuf) ] Text End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 145 730 193 730 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 260.5 614 ] concat %I [ (nref) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -65 38 ] concat %I 321 530 353 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -65 38 ] concat %I 321 546 353 546 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -65 38 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 168 785 ] concat %I [ (Integer) (message) (ID) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 22 ] concat %I 321 530 353 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 22 ] concat %I 321 546 353 546 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 22 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 0 -16 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 530 353 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 546 353 546 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 562 353 562 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 64 -16 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 530 353 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 546 353 546 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 562 353 562 Line %I 1 End End %I eop Begin %I Line %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -33 46 ] concat %I 425 562 457 562 Line %I 1 End Begin %I Line %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 31 46 ] concat %I 425 562 457 562 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -176 -32 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.764706 0.764706 0.764706 SetCBg %I p 1 SetP %I t [ 1 0 0 1 23 62 ] concat %I 409 458 489 474 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 47 110 ] concat %I 369 410 465 426 Rect End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -64 -32 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.764706 0.764706 0.764706 SetCBg %I p 1 SetP %I t [ 1 0 0 1 23 62 ] concat %I 409 458 489 474 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 47 110 ] concat %I 369 410 465 426 Rect End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -64 -16 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.764706 0.764706 0.764706 SetCBg %I p 1 SetP %I t [ 1 0 0 1 23 62 ] concat %I 521 442 553 458 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 159 94 ] concat %I 369 410 465 426 Rect End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 344 777 ] concat %I [ (len) (tag) (src) (...) ] Text End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 313 674 345 674 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 313 658 345 658 Line %I 1 End Begin %I Poly %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 4 313 626 345 626 345 722 313 722 4 Poly End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 46 ] concat %I 313 658 345 658 Line %I 1 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 496 785 ] concat %I [ (e-init) (e-byte) (e-int) (...) () (d-init) (d-byte) (d-int) (...) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 0 0 1 63 6 ] concat %I 425 674 473 786 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 488 825 ] concat %I [ (Encoder) (function) (vector) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 224 833 ] concat %I [ (Message) (heap) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 208 609 ] concat %I [ (struct) (frag) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 272 481 ] concat %I [ (databuf) ] Text End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 3 321 650 233 650 233 586 3 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 6 233 562 217 562 217 578 513 578 513 546 497 546 6 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 4 265 562 281 562 281 546 337 546 4 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 5 345 514 281 514 281 490 217 490 217 442 5 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 5 345 498 289 498 289 474 233 474 233 442 5 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 5 409 514 385 514 385 474 329 474 329 442 5 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 5 409 498 393 498 393 466 345 466 345 442 5 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 3 473 514 441 514 441 442 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 3 473 498 457 498 457 442 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 3 337 634 401 634 401 562 3 MLine %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 209 714 305 714 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -65 54 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 167 38 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 38 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 272 705 ] concat %I [ (frag) (list) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 432 681 ] concat %I [ (current) (frag) ] Text End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 4 337 666 385 666 385 730 457 730 4 MLine %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 260.5 597 ] concat %I [ (0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 260.5 582 ] concat %I [ (0) ] Text End End %I eop showpage end %%EndDocument endTexFig 249 2059 a Fo(Figure)13 b(7.2)249 2096 y Fy(Message)e(storage)e(in)j (libp)o(vm)p eop %%Page: 100 119 100 118 bop 249 251 a Fu(100)1356 b(Chapter)13 b(7)249 952 y 12835368 15203512 10327736 22628925 23155179 37824512 startTexFig 249 952 a %%BeginDocument: fig7-dmesg.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 260.5 614 ] concat %I [ (nref) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -65 38 ] concat %I 321 530 353 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -65 38 ] concat %I 321 546 353 546 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -65 38 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 22 ] concat %I 321 530 353 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 22 ] concat %I 321 546 353 546 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 22 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 0 -16 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 530 353 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 546 353 546 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 562 353 562 Line %I 1 End End %I eop Begin %I Line %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -33 46 ] concat %I 425 562 457 562 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -176 -32 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.764706 0.764706 0.764706 SetCBg %I p 1 SetP %I t [ 1 0 0 1 23 62 ] concat %I 409 458 489 474 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 47 110 ] concat %I 369 410 465 426 Rect End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -176 -16 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.764706 0.764706 0.764706 SetCBg %I p 1 SetP %I t [ 1 0 0 1 23 62 ] concat %I 521 442 553 458 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 159 94 ] concat %I 369 410 465 426 Rect End End %I eop Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 7 62 ] concat %I 313 658 345 658 Line %I 1 End Begin %I Poly %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 7 62 ] concat %I 4 313 626 345 626 345 722 313 722 4 Poly End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 7 46 ] concat %I 313 658 345 658 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 216 609 ] concat %I [ (struct) (frag) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 272 481 ] concat %I [ (databuf) ] Text End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 4 265 562 281 562 281 546 337 546 4 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 5 345 514 281 514 281 490 217 490 217 442 5 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 5 345 498 289 498 289 474 233 474 233 442 5 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 5 409 514 385 514 385 474 329 474 329 442 5 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 23 62 ] concat %I 5 409 498 393 498 393 466 345 466 345 442 5 MLine %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 103 38 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -65 54 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 38 ] concat %I 321 562 353 562 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 705 ] concat %I [ (frag) (list) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 432 681 ] concat %I [ (current) (frag) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 360 769 ] concat %I [ (struct) (mesg) ] Text End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 36 62 ] concat %I 6 220 562 204 562 204 578 444 578 444 546 420 546 6 MLine %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 328 777 ] concat %I [ (len) (tag) (src) (wid) (...) ] Text End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 36 62 ] concat %I 3 292 650 220 650 220 586 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg %I p 0 SetP %I t [ 1 0 0 1 36 62 ] concat %I 3 308 634 388 634 388 562 3 MLine %I 1 End End %I eop showpage end %%EndDocument endTexFig 249 1978 a Fo(Figure)g(7.3)249 2015 y Fy(Message)e(storage)e(in)j(p)o (vmd)p eop %%Page: 101 120 101 119 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(101)315 498 y(F)m(unction)120 b(Messages)14 b(F)m(rom)p 291 513 919 2 v 315 545 a Fg(loclentry\(\))46 b Fu(Lo)q(cal)14 b(tasks)315 591 y Fg(netentry\(\))66 b Fu(Remote)13 b(p)o(vmds)315 636 y Fg(schentry\(\))66 b Fu(Lo)q(cal)14 b(or)f(remote)g(sp)q(ecial)i (tasks)581 682 y(\(Resource)f(manager,)f(Hoster,)g(T)m(ask)o(er\))p 291 697 V 291 816 a FA(If)g(the)i(message)f(tag)g(and)g(con)o(ten)o(ts) i(are)e(v)n(alid,)e(a)i(new)h(thread)g(of)f(action)g(is)g(started)h(to) f(handle)249 869 y(the)h(request.)k(In)o(v)n(alid)12 b(messages)i(are)h(discarded.)249 952 y Fr(7.2.5)48 b(Con)o(trol)14 b(Messages)249 1036 y FA(Con)o(trol)i(messages)h(are)g(sen)o(t)g(to)f (a)h(task)g(lik)o(e)e(regular)i(messages,)g(but)g(ha)o(v)o(e)f(tags)h (in)f(a)g(reserv)o(ed)249 1089 y(space)f(\(b)q(et)o(w)o(een)g Fs(TC)p 583 1089 14 2 v 15 w(FIRST)e FA(and)h Fs(TC)p 846 1089 V 15 w(LAST)p FA(\).)e(Normally)m(,)f(when)j(a)f(task)h(do)o (wnloads)f(a)g(message,)g(it)249 1143 y(queues)h(it)f(for)f(receipt)i (b)o(y)f(the)h(program.)i(Con)o(trol)c(messages)h(are)g(instead)g (passed)h(to)f Fs(pvmmctl\(\))249 1197 y FA(and)18 b(then)g(discarded.) 31 b(Lik)o(e)17 b(the)i(en)o(try)f(p)q(oin)o(ts)g(in)f(the)h(p)o(vmd,)f Fs(pvmmctl\(\))f FA(is)i(an)f(en)o(try)i(p)q(oin)o(t)249 1251 y(in)e(the)g(task,)g(causing)g(it)g(to)g(tak)o(e)g(some)f(async)o (hronous)h(action.)27 b(The)18 b(main)c(di\013erence)19 b(is)e(that)249 1305 y(con)o(trol)d(messages)h(can't)f(b)q(e)h(used)h (to)e(get)h(the)g(task's)g(atten)o(tion,)f(since)h(it)f(m)o(ust)g(b)q (e)h(in)f Fs(mxfer\(\))p FA(,)249 1359 y(sending)g(or)g(receiving,)g (in)f(order)i(to)f(get)g(them.)291 1413 y(The)k(follo)o(wing)c(con)o (trol)k(message)f(tags)g(are)h(de\014ned.)30 b(The)18 b(\014rst)g(three)h(are)f(used)g(b)o(y)g(the)g(di-)249 1467 y(rect)h(routing)e(mec)o(hanism)e(\(discussed)20 b(in)d(Section)h(7.6.3\).)28 b Fs(TC)p 1294 1467 V 15 w(OUTPUT)16 b FA(is)i(used)g(to)g(implemen)o(t)249 1521 y Fs(pvm)p 318 1521 V 15 w(catchout\(\))c FA(\(Section)j(7.7.2\).)23 b(User-de\014nable)17 b(con)o(trol)f(messages)g(ma)o(y)f(b)q(e)h(added) h(in)e(the)249 1575 y(future)g(as)f(a)f(w)o(a)o(y)g(of)h(implem)o(en)o (ting)d(PVM)j(signal)f(handlers.)315 1679 y Fu(T)m(ag)198 b(Meaning)p 291 1695 735 2 v 315 1727 a Fg(TC)p 357 1727 12 2 v 14 w(CONREQ)87 b Fu(Connection)14 b(request)315 1772 y Fg(TC)p 357 1772 V 14 w(CONACK)87 b Fu(Connection)14 b(ac)o(k)315 1818 y Fg(TC)p 357 1818 V 14 w(TASKEXIT)47 b Fu(T)m(ask)12 b(exited/do)q(esn't)k(exist)315 1864 y Fg(TC)p 357 1864 V 14 w(NOOP)127 b Fu(Do)13 b(nothing)315 1909 y Fg(TC)p 357 1909 V 14 w(OUTPUT)87 b Fu(Claim)14 b(c)o(hild)g(stdout)g(data)315 1955 y Fg(TC)p 357 1955 V 14 w(SETTMASK)47 b Fu(Change)13 b(task)h(trace)f(mask)p 291 1970 735 2 v 249 2095 a FD(7.3)52 b(PVM)16 b(Daemon)249 2203 y Fr(7.3.1)48 b(Startup)249 2286 y FA(A)o(t)13 b(startup,)g(a)f(p) o(vmd)f(con\014gures)i(itself)f(as)h(a)f(master)g(or)g(sla)o(v)o(e,)g (dep)q(ending)h(on)f(its)h(command)d(line)249 2340 y(argumen)o(ts.)19 b(It)c(creates)h(and)e(binds)h(so)q(c)o(k)o(ets)h(to)e(talk)g(to)g (tasks)h(and)g(other)g(p)o(vmds,)e(and)h(it)g(op)q(ens)249 2394 y(an)e(error)h(log)e(\014le)i Fs(/tmp/pvml.)p FB(uid)p FA(.)i(A)d(master)g(p)o(vmd)f(reads)i(the)g(host)f(\014le)g(if)g (supplied;)g(otherwise)249 2448 y(it)i(uses)h(default)e(parameters.)18 b(A)c(sla)o(v)o(e)f(p)o(vmd)g(gets)h(its)g(parameters)g(from)e(the)i (master)g(p)o(vmd)e(via)249 2502 y(the)j(command)c(line)i(and)h (con\014guration)f(messages.)p eop %%Page: 102 121 102 120 bop 249 251 a Fu(102)1356 b(Chapter)13 b(7)291 507 y FA(After)k(con\014guration,)g(the)h(p)o(vmd)d(en)o(ters)k(a)e(lo) q(op)f(in)g(function)h Fs(work\(\))p FA(.)26 b(A)o(t)17 b(the)h(core)g(of)e(the)249 561 y(w)o(ork)c(lo)q(op)f(is)i(a)e(call)h (to)g Fs(select\(\))f FA(that)h(prob)q(es)h(all)e(sources)j(of)e(input) g(for)g(the)g(p)o(vmd)f(\(lo)q(cal)h(tasks)249 615 y(and)18 b(the)h(net)o(w)o(ork\).)32 b(P)o(ac)o(k)o(ets)19 b(are)g(receiv)o(ed)g (and)f(routed)h(to)g(send)g(queues.)32 b(Messages)20 b(to)e(the)249 669 y(p)o(vmd)12 b(are)j(reassem)o(bled)f(and)f(passed)i (to)f(the)h(en)o(try)f(p)q(oin)o(ts.)249 752 y Fr(7.3.2)48 b(Sh)o(utdo)o(wn)249 835 y FA(A)14 b(p)o(vmd)f(sh)o(uts)i(do)o(wn)f (when)h(it)e(is)h(deleted)i(from)c(the)j(virtual)e(mac)o(hine,)g (killed)g(\(signaled\),)h(loses)249 889 y(con)o(tact)i(with)f(the)h (master)f(p)o(vmd,)f(or)i(breaks)g(\(e.g.,)f(with)g(a)g(bus)h(error\).) 24 b(When)16 b(a)f(p)o(vmd)f(sh)o(uts)249 943 y(do)o(wn,)j(it)f(tak)o (es)h(t)o(w)o(o)f(\014nal)g(actions.)26 b(First,)17 b(it)g(kills)e(an)o (y)h(tasks)h(running)g(under)g(it,)g(with)f(signal)249 997 y Fs(SIGTERM)p FA(.)11 b(Second,)j(it)f(sends)h(a)f(\014nal)f(sh)o (utdo)o(wn)i(message)f(\(Section)g(7.5.2\))f(to)h(ev)o(ery)h(other)g(p) o(vmd)249 1051 y(in)g(its)g(host)g(table.)19 b(The)14 b(other)h(p)o(vmds)e(w)o(ould)g(ev)o(en)o(tually)h(disco)o(v)o(er)g (the)h(missing)d(one)j(b)o(y)e(timing)249 1105 y(out)h(trying)f(to)h (comm)o(unicate)e(with)h(it,)g(but)h(the)h(sh)o(utdo)o(wn)f(message)f (sp)q(eeds)j(the)f(pro)q(cess.)249 1188 y Fr(7.3.3)48 b(Host)15 b(T)l(able)g(and)h(Mac)o(hine)e(Con\014guration)249 1271 y FA(A)g(host)g(table)g(describ)q(es)i(the)f(con\014guration)e(of) h(a)f(virtual)g(mac)o(hine.)k(It)d(lists)g(the)g(name,)f(address)249 1325 y(and)h(comm)o(unicatio)o(n)d(state)k(for)f(eac)o(h)g(host.)19 b(Figure)14 b(7.4)f(sho)o(ws)h(ho)o(w)g(a)g(host)g(table)g(is)g(built)f (from)249 1379 y Fs(struct)21 b(htab)13 b FA(and)g Fs(struct)21 b(hostd)13 b FA(structures.)291 1433 y(Host)j(tables)g(are)g(issued)h (b)o(y)f(the)g(master)f(p)o(vmd)g(and)g(k)o(ept)i(sync)o(hronized)g (across)f(the)h(virtual)249 1487 y(mac)o(hine.)29 b(The)19 b(delete)g(op)q(eration)e(is)h(simple:)25 b(On)18 b(receiving)h(a)e Fs(DM)p 1380 1487 14 2 v 16 w(HTDEL)g FA(message)g(from)f(the)249 1541 y(master,)g(a)h(p)o(vmd)e(calls)h Fs(hostfailentry\(\))d FA(for)j(eac)o(h)h(host)g(listed)g(in)f(the)h(message,)g(as)f(though) 249 1595 y(the)11 b(deleted)h(p)o(vmds)e(crashed.)18 b(Eac)o(h)11 b(p)o(vmd)e(can)i(autonomously)e(delete)j(hosts)f(from)e (its)i(o)o(wn)f(table)249 1649 y(on)j(\014nding)g(them)f(unreac)o (hable)i(\(b)o(y)f(timing)d(out)j(during)g(comm)o(unication\).)i(The)e (add)g(op)q(eration)249 1703 y(is)g(done)f(with)h(a)f(three-phase)j (commit,)9 b(in)j(order)i(to)e(guaran)o(tee)h(global)e(a)o(v)n (ailabilit)o(y)e(of)j(new)h(hosts)249 1757 y(sync)o(hronously)20 b(with)e(completion)g(of)g(the)i(add-host)f(request.)35 b(This)19 b(is)g(describ)q(ed)i(in)e(Section)249 1811 y(7.3.8.)291 1865 y(Eac)o(h)d(host)h(descriptor)h(has)e(a)h(refcoun)o (t)g(so)f(it)g(can)h(b)q(e)g(shared)g(b)o(y)g(m)o(ultiple)d(host)j (tables.)26 b(As)249 1919 y(the)15 b(con\014guration)f(of)g(the)h(mac)o (hine)f(c)o(hanges,)h(the)g(host)g(descriptors)h(\(except)g(those)f (added)g(and)249 1973 y(deleted,)23 b(of)d(course\))i(propagate)e(from) f(one)i(host)g(table)f(to)h(the)g(next.)38 b(This)21 b(propagation)e(is)249 2027 y(necessary)d(b)q(ecause)g(they)e(hold)f(v) n(arious)g(state)i(information.)291 2081 y(Host)h(tables)g(also)g(serv) o(e)h(other)g(uses:)23 b(They)16 b(allo)o(w)f(the)h(p)o(vmd)f(to)h (manipulate)e(host)i(sets,)h(for)249 2135 y(example,)f(when)i(pic)o (king)e(candidate)i(hosts)f(on)g(whic)o(h)g(to)g(spa)o(wn)h(a)e(task.) 29 b(Also,)17 b(the)h(advisory)249 2188 y(host)c(\014le)g(supplied)g (to)g(the)g(master)g(p)o(vmd)e(is)i(parsed)h(and)e(stored)i(in)f(a)f (host)h(table.)249 2271 y Fr(Host)j(File)39 b FA(If)15 b(the)g(master)f(p)o(vmd)f(is)i(started)h(with)e(a)h(host)g(\014le,)f (it)g(parses)i(the)g(\014le)e(in)o(to)g(a)h(host)249 2325 y(table,)h Fs(filehosts)p FA(.)22 b(If)15 b(some)g(hosts)i(in)e (the)i(\014le)e(are)i(to)e(b)q(e)i(started)g(automatically)l(,)c(the)k (master)249 2379 y(sends)h(a)e Fs(DM)p 447 2379 V 16 w(ADD)f FA(message)i(to)f(itself.)26 b(The)17 b(sla)o(v)o(e)f(hosts)i (are)f(started)g(just)g(as)g(though)f(they)h(had)249 2433 y(b)q(een)e(added)f(dynamically)d(\(Section)k(7.3.8\).)p eop %%Page: 103 122 103 121 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(103)249 917 y 22213196 16434920 7959592 26444267 30193827 42889707 startTexFig 249 917 a %%BeginDocument: fig7-htab.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 52 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.5 -3.63959e-23 3.63959e-23 0.5 212 368 ] concat Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 313 802 329 802 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 305 810 337 810 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 297 818 345 818 Line %I 1 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 881 ] concat %I [ (struct) (htab) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 137 85.9999 ] concat %I 207 738 287 754 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 137 85.9999 ] concat %I 223 754 223 738 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 137 85.9999 ] concat %I 239 754 239 738 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 137 85.9999 ] concat %I 255 754 255 738 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 137 85.9999 ] concat %I 271 754 271 738 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 145 62 ] concat %I 143 770 199 770 Line %I 1 End Begin %I Line %I b 65520 2 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 145 62 ] concat %I 287 770 327 770 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 352 849 ] concat %I [ (0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 368 849 ] concat %I [ (1) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 384 849 ] concat %I [ (2) ] Text End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 145 70 ] concat %I 239 762 239 738 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 159 29.9999 ] concat %I 89 794 137 858 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 159 29.9999 ] concat %I 89 810 137 810 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 251.5 881 ] concat %I [ (serial,) (len,) (master,) (...) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 8 0 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 761 ] concat %I [ (nref) (tid) (name) (arch) (...) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 700 ] concat %I [ (txq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 684 ] concat %I [ (opq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 668 ] concat %I [ (rxq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 652 ] concat %I [ (rxm) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 578 223 706 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 594 223 594 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 610 223 610 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 626 223 626 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 642 223 642 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 104 -0.000366211 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 761 ] concat %I [ (nref) (tid) (name) (arch) (...) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 700 ] concat %I [ (txq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 684 ] concat %I [ (opq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 668 ] concat %I [ (rxq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 652 ] concat %I [ (rxm) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 578 223 706 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 594 223 594 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 610 223 610 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 626 223 626 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 642 223 642 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 192 -0.000366211 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 761 ] concat %I [ (nref) (tid) (name) (arch) (...) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 700 ] concat %I [ (txq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 684 ] concat %I [ (opq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 668 ] concat %I [ (rxq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 652 ] concat %I [ (rxm) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 578 223 706 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 594 223 594 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 610 223 610 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 626 223 626 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 642 223 642 Line %I 1 End End %I eop Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 81 62 ] concat %I 4 271 770 271 730 223 730 223 706 4 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 81 62 ] concat %I 2 287 770 287 706 2 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 81 62 ] concat %I 4 319 770 319 722 375 722 375 706 4 MLine %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.5 -3.63959e-23 3.63959e-23 0.5 244 368 ] concat Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 313 802 329 802 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 305 810 337 810 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 23 62 ] concat %I 297 818 345 818 Line %I 1 End End %I eop Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 70 ] concat %I 239 762 239 738 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 247 728 ] concat %I [ (pvmd') ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 343 728 ] concat %I [ (master) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 431 728 ] concat %I [ (slave) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 256 793 ] concat %I [ (struct) (hostd) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 552 769 ] concat %I [ (Frags) (to Send) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 432 601 ] concat %I [ (Message) (Reassembly) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -16 -95.9999 ] concat Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 375 410 391 426 423 418 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 423 418 439 418 455 402 439 386 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 439 386 439 370 415 370 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 415 370 391 354 375 362 375 378 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 3 471 778 447 794 471 810 3 BSpl %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -8.00024 -168 ] concat Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 375 410 391 426 423 418 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 423 418 439 418 455 402 439 386 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 439 386 439 370 415 370 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 415 370 391 354 375 362 375 378 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 3 471 778 447 794 471 810 3 BSpl %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -16.0003 -256 ] concat Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 375 410 391 426 423 418 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 423 418 439 418 455 402 439 386 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 439 386 439 370 415 370 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 415 370 391 354 375 362 375 378 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 3 471 778 447 794 471 810 3 BSpl %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -128 -264 ] concat Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 375 410 391 426 423 418 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 423 418 439 418 455 402 439 386 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 439 386 439 370 415 370 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 415 370 391 354 375 362 375 378 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 3 471 778 447 794 471 810 3 BSpl %I 1 End End %I eop Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 81 62 ] concat %I 4 407 634 431 634 431 682 447 682 4 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 81 62 ] concat %I 2 407 618 447 618 2 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 81 62 ] concat %I 3 407 602 447 602 447 554 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 81 62 ] concat %I 5 407 586 423 586 423 570 407 570 407 554 5 MLine %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 544 697 ] concat %I [ (Frags sent,) (not yet Acked) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 544 609 ] concat %I [ (Frags) (Received) (Out of Order) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 176 884 ] concat %I [ (hosts) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 62 62 ] concat %I 106 810 154 826 Rect End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 62 62 ] concat %I 154 818 186 818 Line %I 1 End End %I eop showpage end %%EndDocument endTexFig 249 2020 a Fo(Figure)13 b(7.4)249 2057 y Fy(Host)f(table)p eop %%Page: 104 123 104 122 bop 249 251 a Fu(104)1356 b(Chapter)13 b(7)249 507 y Fr(7.3.4)48 b(T)l(asks)249 590 y FA(Eac)o(h)14 b(p)o(vmd)e(main)o(tains)g(a)h(list)h(of)f(all)g(tasks)h(under)h(its)e (managemen)o(t)f(\(Figure)i(7.5\).)j(Ev)o(ery)d(task,)249 644 y(regardless)g(of)f(state,)g(is)g(a)f(mem)o(b)q(er)g(of)g(a)h (threaded)h(list,)e(sorted)i(b)o(y)e(task)h(id.)18 b(Most)13 b(tasks)g(are)h(also)249 698 y(in)f(a)h(second)h(list,)e(sorted)i(b)o (y)f(pro)q(cess)h(id.)j(The)c(head)g(of)g(b)q(oth)g(lists)f(is)h Fs(locltasks)p FA(.)249 755 y 22876273 14398279 7235993 26115358 30128046 40521564 startTexFig 249 755 a %%BeginDocument: fig7-locltasks.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 52 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 62 -26 ] concat %I 210 690 250 690 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 62 -26 ] concat %I 210 706 250 706 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 62 -26 ] concat %I 210 746 250 746 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 62 -26 ] concat %I 210 762 250 762 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 280 748 ] concat %I [ (link) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 280 732 ] concat %I [ (plink) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 280 676 ] concat %I [ (txq) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 62 -26 ] concat %I 210 658 250 778 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 62 -26 ] concat %I 210 674 250 674 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 280 660 ] concat %I [ (rxp) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 280 644 ] concat %I [ (rxm) ] Text End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 158 -26 ] concat %I 210 690 250 690 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 158 -26 ] concat %I 210 706 250 706 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 158 -26 ] concat %I 210 746 250 746 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 158 -26 ] concat %I 210 762 250 762 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 376 748 ] concat %I [ (link) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 376 732 ] concat %I [ (plink) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 376 676 ] concat %I [ (txq) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 158 -26 ] concat %I 210 658 250 778 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 158 -26 ] concat %I 210 674 250 674 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 376 660 ] concat %I [ (rxp) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 376 644 ] concat %I [ (rxm) ] Text End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 254 -26 ] concat %I 210 690 250 690 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 254 -26 ] concat %I 210 706 250 706 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 254 -26 ] concat %I 210 746 250 746 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 254 -26 ] concat %I 210 762 250 762 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 472 748 ] concat %I [ (link) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 472 732 ] concat %I [ (plink) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 472 676 ] concat %I [ (txq) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 254 -26 ] concat %I 210 658 250 778 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 254 -26 ] concat %I 210 674 250 674 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 472 660 ] concat %I [ (rxp) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 472 644 ] concat %I [ (rxm) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 184 745 ] concat %I [ (tid) (ptid) (...) ] Text End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -34 6 ] concat %I 210 690 250 690 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -34 6 ] concat %I 210 706 250 706 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -34 6 ] concat %I 210 746 250 746 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -34 6 ] concat %I 210 762 250 762 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 184 780 ] concat %I [ (link) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 184 764 ] concat %I [ (plink) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 184 708 ] concat %I [ (txq) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -34 6 ] concat %I 210 658 250 778 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -34 6 ] concat %I 210 674 250 674 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 184 692 ] concat %I [ (rxp) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 184 676 ] concat %I [ (rxm) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 280 713 ] concat %I [ (0) (0) (...) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 376 713 ] concat %I [ (401) (0) (...) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 472 713 ] concat %I [ (405) (401) (...) ] Text End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 -10 ] concat %I 4 210 786 250 786 250 754 266 754 4 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 -10 ] concat %I 2 306 754 362 754 2 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 -10 ] concat %I 2 402 754 458 754 2 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 -10 ] concat %I 4 210 770 338 770 338 738 362 738 4 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 -10 ] concat %I 2 402 738 458 738 2 MLine %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -8.00006 -168 ] concat Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 375 410 391 426 423 418 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 423 418 439 418 455 402 439 386 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 439 386 439 370 415 370 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 415 370 391 354 375 362 375 378 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 3 471 778 447 794 471 810 3 BSpl %I 1 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 544 625 ] concat %I [ (Packet) (Reassembly) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 456 593 ] concat %I [ (Message) (Reassembly) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -16.0002 -240 ] concat Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 375 410 391 426 423 418 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 423 418 439 418 455 402 439 386 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 439 386 439 370 415 370 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 415 370 391 354 375 362 375 378 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 3 471 778 447 794 471 810 3 BSpl %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -104 -272 ] concat Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 375 410 391 426 423 418 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 423 418 439 418 455 402 439 386 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 3 439 386 439 370 415 370 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 177 462 ] concat %I 4 415 370 391 354 375 362 375 378 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 3 471 778 447 794 471 810 3 BSpl %I 1 End End %I eop Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 46 62 ] concat %I 450 610 490 610 Line %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 46 62 ] concat %I 3 450 594 482 594 482 570 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 46 62 ] concat %I 2 450 578 450 546 2 MLine %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 160 836 ] concat %I [ (locltasks) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 54 ] concat %I 98 770 170 786 Rect End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 62 62 ] concat %I 6 442 666 466 666 466 746 90 746 90 698 114 698 6 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 62 62 ] concat %I 6 114 714 98 714 98 738 458 738 458 682 442 682 6 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 62 62 ] concat %I 2 122 762 122 722 2 MLine %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 560 699 ] concat %I [ (Packets) (to Send) ] Text End End %I eop showpage end %%EndDocument endTexFig 249 1729 a Fo(Figure)f(7.5)249 1766 y Fy(T)m(ask)f(table)291 1861 y FA(PVM)k(pro)o(vides)g(a)g(simple)f(debugging)g(system)h (describ)q(ed)i(in)d(Section)i(7.7.4.)23 b(More)16 b(complex)249 1914 y(debuggers)k(can)f(b)q(e)g(built)g(b)o(y)f(using)h(a)f(sp)q (ecial)h(t)o(yp)q(e)h(of)e(task)h(called)f(a)h FB(tasker)p FA(,)g(in)o(tro)q(duced)g(in)249 1968 y(v)o(ersion)g(3.3.)34 b(A)19 b(task)o(er)h(starts)g(\()p FB(exe)n(cs)p FA(,)h(and)e(is)g(the) h(paren)o(t)g(of)s(\))f(other)h(tasks.)35 b(In)19 b(general,)h(a)249 2022 y(debugger)14 b(is)f(a)g(pro)q(cess)i(that)e(con)o(trols)g(the)g (execution)h(of)f(other)g(pro)q(cesses)j(-)d(can)g(read)h(and)f(write) 249 2076 y(their)19 b(memories)d(and)i(start)h(and)f(stop)g (instruction)h(coun)o(ters.)32 b(On)19 b(man)o(y)d(sp)q(ecies)k(of)e (Unix,)g(a)249 2130 y(debugger)f(m)o(ust)e(b)q(e)h(the)h(direct)g (paren)o(t)f(of)g(an)o(y)f(pro)q(cesses)k(it)c(con)o(trols.)25 b(This)16 b(is)g(b)q(ecoming)e(less)249 2184 y(common)d(with)j(gro)o (wing)e(a)o(v)n(ailabilit)o(y)f(of)i(the)h(attac)o(hable)g FB(ptr)n(ac)n(e)g FA(in)o(terface.)291 2238 y(The)h(function)f(of)g (the)i(task)o(er)f(in)o(terface)g(o)o(v)o(erlaps)g(with)f(the)i(simple) d(debugger)i(starter,)h(but)f(is)249 2292 y(fundamen)o(tally)e (di\013eren)o(t)j(for)f(t)o(w)o(o)g(reasons:)23 b(First,)15 b(all)g(tasks)h(running)f(under)h(a)f(p)o(vmd)f(\(during)249 2346 y(the)g(life)f(of)g(the)h(task)o(er\))h(ma)o(y)d(b)q(e)i(c)o (hildren)g(of)f(a)g(single)g(task)o(er)i(pro)q(cess.)20 b(With)13 b Fs(PvmTaskDebug)p FA(,)d(a)249 2400 y(new)15 b(debugger)f(is)g(necessarily)h(started)g(for)f(eac)o(h)h(task.)j (Second,)d(the)f(task)o(er)h(cannot)f(b)q(e)h(enabled)249 2454 y(or)i(disabled)f(b)o(y)h(spa)o(wn)g(\015ags,)g(so)g(it)f(is)h (alw)o(a)o(ys)e(in)i(con)o(trol,)f(though)h(this)g(is)g(not)f(an)h(imp) q(ortan)o(t)249 2508 y(di\013erence.)p eop %%Page: 105 124 105 123 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(105)291 507 y FA(If)13 b(a)h(task)o(er)g(is)g(registered)i(\(using)d Fs(pvm)p 914 507 14 2 v 16 w(reg)p 996 507 V 15 w(tasker\(\))p FA(\))f(with)i(a)f(p)o(vmd)f(when)j(a)f Fs(DM)p 1647 507 V 15 w(EXEC)f FA(mes-)249 561 y(sage)j(is)f(receiv)o(ed)i(to)e (start)h(new)g(tasks,)g(the)g(p)o(vmd)e(sends)i(a)g Fs(SM)p 1290 561 V 15 w(STTASK)e FA(message)h(to)g(the)h(task)o(er)249 615 y(instead)j(of)e(calling)g Fs(execv\(\))p FA(.)29 b(No)19 b FB(SM)p 913 615 13 2 v 15 w(STT)m(ASKA)o(CK)f FA(message)g(is)g(required;)i(closure)f(comes)249 669 y(from)11 b(the)i(task)f(reconnecting)i(to)e(the)h(p)o(vmd)d(as)j (usual.)k(The)c(p)o(vmd)e(do)q(esn't)h(get)h Fs(SIGCHLD)e FA(signals)249 723 y(when)k(a)g(task)o(er)g(is)f(in)h(use,)g(b)q (ecause)h(it's)e(not)h(the)g(paren)o(t)g(pro)q(cess)i(of)d(tasks,)h(so) f(the)i(task)o(er)f(m)o(ust)249 777 y(send)g(noti\014cation)e(of)g (exited)i(tasks)f(to)g(the)g(p)o(vmd)f(in)g(a)h Fs(SM)p 1207 777 14 2 v 15 w(TASKX)f FA(message.)249 860 y Fr(7.3.5)48 b(W)l(ait)15 b(Con)o(texts)249 943 y FA(The)f(p)o(vmd)e(uses)i(a)f(w)o (ait)g(con)o(text)h(\(w)o(aitc\))g(to)f(hold)g(state)h(when)g(a)f (thread)h(of)f(op)q(eration)g(m)o(ust)f(b)q(e)249 997 y(in)o(terrupted.)19 b(The)13 b(p)o(vmd)e(is)h(not)g(truly)g(m)o (ultithreaded)g(but)g(p)q(erforms)g(op)q(erations)h(concurren)o(tly)m (.)249 1051 y(F)m(or)j(example,)g(when)i(a)e(p)o(vmd)f(gets)j(a)e (syscall)h(from)e(a)h(task)h(and)g(m)o(ust)f(in)o(teract)h(with)g (another)249 1105 y(p)o(vmd,)c(it)h(do)q(esn't)h(blo)q(c)o(k)g(while)f (w)o(aiting)f(for)h(the)h(other)h(p)o(vmd)d(to)h(resp)q(ond.)22 b(It)15 b(sa)o(v)o(es)g(state)g(in)f(a)249 1159 y(w)o(aitc)i(and)g (returns)h(immediately)c(to)j(the)h Fs(work\(\))d FA(lo)q(op.)24 b(When)16 b(the)h(reply)f(arriv)o(es,)h(the)g(p)o(vmd)249 1213 y(uses)f(the)f(information)c(stashed)16 b(in)e(the)h(w)o(aitc)f (to)h(complete)f(the)h(syscall)f(and)g(reply)h(to)f(the)h(task.)249 1267 y(W)m(aitcs)h(are)h(serial)g(n)o(um)o(b)q(ered,)f(and)h(the)g(n)o (um)o(b)q(er)f(is)g(sen)o(t)i(in)e(the)h(message)f(header)i(along)d (with)249 1321 y(the)g(request)g(and)f(returned)h(with)f(the)g(reply)m (.)291 1375 y(F)m(or)g(man)o(y)e(op)q(erations,)i(the)h(TIDs)f(and)h FB(kind)f FA(of)g(w)o(ait)f(are)i(the)g(only)f(information)d(sa)o(v)o (ed.)20 b(The)249 1429 y Fs(struct)h(waitc)14 b FA(includes)i(a)f(few)g (extra)h(\014elds)f(to)h(handle)f(most)f(of)h(the)g(remaining)f(cases,) i(and)f(a)249 1483 y(p)q(oin)o(ter,)e Fs(wa)p 450 1483 V 16 w(spec)p FA(,)f(to)h(a)g(blo)q(c)o(k)g(of)g(extra)h(data)f(for)g (sp)q(ecial)g(cases|the)i(spa)o(wn)e(and)h(host)f(startup)249 1537 y(op)q(erations,)h(whic)o(h)g(need)g(to)g(sa)o(v)o(e)g Fs(struct)21 b(waitc)p 1084 1537 V 14 w(spawn)13 b FA(and)h Fs(struct)20 b(waitc)p 1564 1537 V 15 w(add)p FA(.)291 1591 y(Sometimes)11 b(more)i(than)g(one)h(phase)g(of)f(w)o(aiting)g(is) g(necessary|in)i(series,)f(parallel,)e(or)i(nested.)249 1645 y(In)j(the)i(parallel)d(case,)j(a)e(separate)h(w)o(aitc)f(is)h (created)h(for)e(eac)o(h)h(foreign)e(host.)29 b(The)18 b(w)o(aitcs)g(are)249 1699 y FB(p)n(e)n(er)n(e)n(d)f FA(\(link)o(ed)h(in)f(a)g(list\))h(together)g(to)g(indicate)g(they)g(p) q(ertain)g(to)f(the)i(same)e(op)q(eration.)29 b(If)17 b(a)249 1753 y(w)o(aitc)i(has)h(no)f(p)q(eers,)j(its)e(p)q(eer)h(links) d(p)q(oin)o(t)h(to)h(itself.)34 b(Usually)m(,)20 b(p)q(eered)h(w)o (aitcs)e(share)i(data,)249 1807 y(for)15 b(example,)e Fs(wa)p 536 1807 V 15 w(spec)p FA(.)20 b(All)15 b(existing)f(parallel)g (op)q(erations)h(are)g(conjunctions;)h(a)e(p)q(eer)i(group)f(is)249 1861 y(\014nished)g(when)g(ev)o(ery)h(w)o(aitc)e(in)g(the)h(group)g(is) f(\014nished.)21 b(As)15 b(replies)g(arriv)o(e,)g(\014nished)g(w)o (aitcs)g(are)249 1914 y(collapsed)h(out)g(of)f(the)i(list)e(and)h (deleted.)25 b(When)16 b(the)h(\014nished)f(w)o(aitc)g(is)g(the)g(only) g(one)g(left,)f(the)249 1968 y(op)q(eration)c(is)g(complete.)17 b(Figure)11 b(7.6)g(sho)o(ws)g(single)g(and)g(p)q(eered)i(w)o(aitcs)f (stored)g(in)f Fs(waitlist)e FA(\(the)249 2022 y(list)k(of)h(all)e (activ)o(e)i(w)o(aitcs\).)291 2076 y(When)f(a)f(host)h(fails)f(or)h(a)f (task)h(exits,)g(the)h(p)o(vmd)d(searc)o(hes)k Fs(waitlist)c FA(for)h(an)o(y)h(blo)q(c)o(k)o(ed)f(on)h(this)249 2130 y(TID)18 b(and)f(terminates)h(those)h(op)q(erations.)30 b(W)m(aitcs)18 b(from)e(the)j(dead)f(host)g(or)g(task)g(blo)q(c)o(k)o (ed)g(on)249 2184 y(something)e(else)h(are)h(not)e(deleted;)k(instead,) d(their)g Fs(wa)p 1148 2184 V 16 w(tid)f FA(\014elds)h(are)h(zero)q (ed.)28 b(This)17 b(approac)o(h)249 2238 y(prev)o(en)o(ts)11 b(the)g(w)o(ait)d(id's)i(from)e(b)q(eing)h(recycled)j(while)d(replies)h (are)g(still)f(p)q(ending.)17 b(Once)11 b(the)f(defunct)249 2292 y(w)o(aitcs)k(are)g(satis\014ed,)g(they)h(are)f(silen)o(tly)f (discarded.)p eop %%Page: 106 125 106 124 bop 249 251 a Fu(106)1356 b(Chapter)13 b(7)249 466 y 19418804 9425236 6841303 26115358 26246922 35522150 startTexFig 249 466 a %%BeginDocument: fig7-waitlist.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 24 -48 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 721 ] concat %I [ (wid) (kind) (...) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 594 277 682 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 610 277 610 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 626 277 626 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 666 277 666 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 740 ] concat %I [ (link) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 684 ] concat %I [ (peer) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 668 ] concat %I [ (spec) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 120 -48 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 721 ] concat %I [ (wid) (kind) (...) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 594 277 682 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 610 277 610 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 626 277 626 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 666 277 666 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 740 ] concat %I [ (link) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 684 ] concat %I [ (peer) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 668 ] concat %I [ (spec) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 192 -48 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 721 ] concat %I [ (wid) (kind) (...) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 594 277 682 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 610 277 610 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 626 277 626 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 59 62 ] concat %I 237 666 277 666 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 740 ] concat %I [ (link) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 684 ] concat %I [ (peer) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 304 668 ] concat %I [ (spec) ] Text End End %I eop Begin %I Line %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 301 626 357 626 Line %I 1 End Begin %I Line %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 397 626 429 626 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 16 -120 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -5 166 ] concat %I 237 594 277 682 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -5 166 ] concat %I 237 610 277 610 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -5 166 ] concat %I 237 626 277 626 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -5 166 ] concat %I 237 666 277 666 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 240 844 ] concat %I [ (link) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 240 788 ] concat %I [ (peer) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 240 772 ] concat %I [ (spec) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 240 825 ] concat %I [ (0) ] Text End End %I eop Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 4 229 658 245 658 245 626 261 626 4 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 6 189 658 173 658 173 674 485 674 485 626 469 626 6 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 6 261 570 245 570 245 538 317 538 317 570 301 570 6 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 2 397 570 429 570 2 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 6 357 570 341 570 341 538 485 538 485 570 469 570 6 MLine %I 1 End Begin %I Poly %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.764706 0.764706 0.764706 SetCBg %I p 1 SetP %I t [ 1 0 0 1 67 62 ] concat %I 4 389 482 429 482 429 506 389 506 4 Poly End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 3 397 554 405 554 405 506 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 5 469 554 477 554 477 522 413 522 413 506 5 MLine %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 59 62 ] concat %I 149 666 189 666 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 152 732 ] concat %I [ (waitlist) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 408 569 ] concat %I [ (shared) (data) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 320 721 ] concat %I [ (struct waitc) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 88 62 ] concat %I 56 658 120 674 Rect End End %I eop showpage end %%EndDocument endTexFig 249 1125 a Fo(Figure)g(7.6)249 1162 y Fy(W)m(ait)e(con)o(text)f(list) 249 1279 y Fr(7.3.6)48 b(F)l(ault)14 b(Detection)g(and)h(Reco)o(v)o (ery)249 1362 y FA(F)m(ault)f(detection)i(originates)f(in)g(the)g(p)o (vmd-p)o(vmd)d(proto)q(col)j(\(Section)h(7.5.2\).)k(When)15 b(the)h(p)o(vmd)249 1416 y(times)i(out)h(while)f(comm)o(unicating)e (with)i(another,)j(it)d(calls)h Fs(hostfailentry\(\))p FA(,)d(whic)o(h)j(scans)249 1470 y Fs(waitlist)12 b FA(and)i (terminates)g(an)o(y)f(op)q(erations)h(w)o(aiting)f(on)g(the)i(do)o(wn) e(host.)291 1524 y(A)i(p)o(vmd)f(can)i(reco)o(v)o(er)h(from)d(the)i (loss)f(of)g(an)o(y)g(foreign)g(p)o(vmd)f(except)j(the)f(master.)23 b(If)15 b(a)g(sla)o(v)o(e)249 1578 y(loses)j(the)h(master,)e(the)i(sla) o(v)o(e)e(sh)o(uts)i(itself)e(do)o(wn.)29 b(This)18 b(algorithm)d (ensures)20 b(that)e(the)g(virtual)249 1631 y(mac)o(hine)13 b(do)q(esn't)h(b)q(ecome)g(partitioned)g(and)g(run)g(as)g(t)o(w)o(o)f (partial)g(mac)o(hines.)18 b(It)c(do)q(es,)g(ho)o(w)o(ev)o(er,)249 1685 y(decrease)21 b(fault)d(tolerance)h(of)f(the)h(virtual)f(mac)o (hine)f(b)q(ecause)j(the)g(master)e(m)o(ust)f(nev)o(er)j(crash.)249 1739 y(There)d(is)f(curren)o(tly)h(no)f(w)o(a)o(y)g(for)f(the)i(master) f(to)g(hand)g(o\013)g(its)g(status)h(to)f(another)h(p)o(vmd,)d(so)i(it) 249 1793 y(alw)o(a)o(ys)11 b(remains)f(part)i(of)f(the)h (con\014guration.)17 b(\(This)12 b(is)g(an)f(impro)o(v)o(emen)o(t)e(o)o (v)o(er)j(PVM)g(2,)f(in)g(whic)o(h)249 1847 y(the)k(failure)e(of)g(an)o (y)g(p)o(vmd)g(w)o(ould)g(sh)o(ut)h(do)o(wn)g(the)g(en)o(tire)h (system.\))249 1930 y Fr(7.3.7)48 b(Pvmd')249 2013 y FA(The)15 b(shado)o(w)f(p)o(vmd)27 b(\(p)o(vmd'\))12 b(runs)j(on)f(the)h(master)f(host)g(and)g(is)h(used)g(b)o(y)f(the)h (master)e(to)h(start)249 2067 y(new)j(sla)o(v)o(e)f(p)o(vmds.)25 b(An)o(y)17 b(of)f(sev)o(eral)h(steps)h(in)e(the)h(startup)g(pro)q (cess)i(\(for)d(example,)g(starting)g(a)249 2121 y(shell)c(on)g(the)h (remote)f(mac)o(hine\))f(can)h(blo)q(c)o(k)g(for)g(seconds)i(or)e(min)o (utes)f(\(or)i(hang\),)f(and)g(the)h(master)249 2175 y(p)o(vmd)f(m)o(ust)g(b)q(e)h(able)g(to)g(resp)q(ond)i(to)e(other)g (messages)h(during)e(this)i(time.)i(It's)d(messy)g(to)g(sa)o(v)o(e)g (all)249 2229 y(the)i(state)f(in)o(v)o(olv)o(ed,)e(so)i(a)g(completely) f(separate)i(pro)q(cess)g(is)f(used.)291 2283 y(The)f(p)o(vmd')d(has)j (host)g(n)o(um)o(b)q(er)f(0)g(and)g(comm)o(unicates)f(with)h(the)h (master)f(through)h(the)g(normal)249 2337 y(p)o(vmd-p)o(vmd)f(in)o (terface,)k(though)f(it)h(nev)o(er)g(talks)f(to)g(tasks)h(or)g(other)g (p)o(vmds.)21 b(The)16 b(normal)e(host)249 2391 y(failure)f(detection)h (mec)o(hanism)e(is)h(used)h(to)g(reco)o(v)o(er)h(in)e(the)h(ev)o(en)o (t)g(the)g(p)o(vmd')e(fails.)k(The)e(startup)249 2445 y(op)q(eration)c(has)h(a)f(w)o(ait)g(con)o(text)h(in)f(the)i(master)e (p)o(vmd.)15 b(If)10 b(the)h(p)o(vmd')e(breaks,)i(the)g(master)g(catc)o (hes)249 2499 y(a)j Fs(SIGCHLD)e FA(from)g(it)i(and)f(calls)h Fs(hostfailentry\(\))p FA(,)c(whic)o(h)k(cleans)g(up.)p eop %%Page: 107 126 107 125 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(107)249 507 y Fr(7.3.8)48 b(Starting)13 b(Sla)o(v)o(e)h(Pvmds)249 590 y FA(Getting)e(a)h(sla)o(v)o(e)f(p)o(vmd)g(started)i(is)e(a)h (messy)f(task)h(with)f(no)h(go)q(o)q(d)f(solution.)17 b(The)c(goal)f(is)h(to)f(get)h(a)249 644 y(pro)q(cess)k(running)e(on)f (the)i(new)f(host,)g(with)g(enough)g(iden)o(tit)o(y)g(to)f(let)i(it)e (b)q(e)i(fully)d(con\014gured)j(and)249 698 y(added)e(as)g(a)g(p)q (eer.)291 752 y(Ideally)m(,)d(the)i(mec)o(hanism)d(used)j(should)f(b)q (e)i(widely)d(a)o(v)n(ailable,)f(secure,)15 b(and)d(fast,)g(while)g (lea)o(ving)249 806 y(the)i(system)f(easy)g(to)g(install.)k(W)m(e'd)12 b(lik)o(e)h(to)f(a)o(v)o(oid)g(ha)o(ving)g(to)h(t)o(yp)q(e)h(passw)o (ords)g(all)e(the)h(time,)f(but)249 860 y(don't)g(w)o(an)o(t)h(to)f (put)h(them)f(in)g(a)h(\014le)f(from)f(where)j(they)f(can)g(b)q(e)h (stolen.)k(No)12 b(one)h(system)g(meets)f(all)249 914 y(of)g(these)i(criteria.)k(Using)13 b Fs(inetd)e FA(or)i(connecting)h (to)e(an)h(already-running)f(p)o(vmd)f(or)h(p)o(vmd)g(serv)o(er)249 968 y(at)17 b(a)g(reserv)o(ed)i(p)q(ort)f(w)o(ould)e(allo)o(w)g(fast,)h (reliable)g(startup,)h(but)g(w)o(ould)e(require)i(that)f(a)g(system)249 1022 y(administrator)12 b(install)h(PVM)i(on)e(eac)o(h)i(host.)k (Starting)14 b(the)g(p)o(vmd)f(via)g Fs(rlogin)g FA(or)h Fs(telnet)e FA(with)249 1076 y(a)g FB(chat)g FA(script)g(w)o(ould)f (allo)o(w)g(access)i(ev)o(en)g(to)f(IP-connected)h(hosts)g(b)q(ehind)f (\014rew)o(all)f(mac)o(hines)g(and)249 1130 y(w)o(ould)g(require)j(no)d (sp)q(ecial)i(privilege)f(to)g(install;)f(the)i(main)d(dra)o(wbac)o(ks) i(are)h(sp)q(eed)g(and)f(the)h(e\013ort)249 1184 y(needed)i(to)f(get)g (the)h(c)o(hat)f(program)e(w)o(orking)h(reliably)m(.)291 1238 y(Tw)o(o)j(widely)h(a)o(v)n(ailable)d(systems)k(are)f Fs(rsh)g FA(and)f Fs(rexec\(\))p FA(;)h(w)o(e)g(use)h(b)q(oth)g(to)e (co)o(v)o(er)i(the)g(cases)249 1292 y(where)d(a)f(passw)o(ord)h(do)q (es)g(and)f(do)q(es)h(not)f(need)h(to)f(b)q(e)h(t)o(yp)q(ed.)20 b(A)14 b(man)o(ual)e(startup)j(option)e(allo)o(ws)249 1346 y(the)j(user)g(to)e(tak)o(e)h(the)h(place)f(of)f(a)h(c)o(hat)g (program,)e(starting)i(the)h(p)o(vmd)d(b)o(y)i(hand)g(and)f(t)o(yping)g (in)249 1400 y(the)k(con\014guration.)26 b Fs(rsh)17 b FA(is)g(a)f(privileged)h(program)e(that)i(can)g(b)q(e)h(used)g(to)e (run)i(commands)c(on)249 1454 y(another)k(host)f(without)g(a)f(passw)o (ord,)i(pro)o(vided)f(the)h(destination)f(host)g(can)h(b)q(e)f(made)f (to)h(trust)249 1508 y(the)i(source)h(host.)31 b(This)19 b(can)f(b)q(e)h(done)g(either)g(b)o(y)f(making)e(it)i(equiv)n(alen)o(t) f(\(requires)j(a)e(system)249 1562 y(administrator\))c(or)j(b)o(y)e (creating)i(a)f Fs(.rhosts)e FA(\014le)i(on)g(the)h(destination)f(host) g(\(this)g(isn't)g(a)g(great)249 1616 y(idea\).)h(The)11 b(alternativ)o(e,)g Fs(rexec\(\))p FA(,)e(is)i(a)f(function)g(compiled) f(in)o(to)h(the)i(p)o(vmd.)j(Unlik)o(e)10 b Fs(rsh)p FA(,)g(whic)o(h)249 1670 y(do)q(esn't)k(tak)o(e)g(a)g(passw)o(ord,)f Fs(rexec\(\))g FA(requires)i(the)f(user)h(to)e(supply)h(one)g(at)g(run) g(time,)e(either)i(b)o(y)249 1724 y(t)o(yping)f(it)h(in)f(or)h(b)o(y)g (placing)f(it)g(in)h(a)f Fs(.netrc)g FA(\014le)h(\(this)g(is)f(a)h (really)f(bad)h(idea\).)291 1778 y(Figure)g(7.7)e(sho)o(ws)j(a)e(host)h (b)q(eing)g(added)g(to)g(the)g(mac)o(hine.)j(A)d(task)g(calls)f Fs(pvm)p 1562 1778 14 2 v 15 w(addhosts\(\))f FA(to)249 1831 y(send)g(a)f(request)i(to)f(its)f(p)o(vmd,)f(whic)o(h)h(in)g(turn) h(sends)h(a)e Fs(DM)p 1184 1831 V 15 w(ADD)g FA(message)g(to)g(the)h (master)f(\(p)q(ossibly)249 1885 y(itself)s(\).)22 b(The)16 b(master)f(p)o(vmd)f(creates)j(a)e(new)g(host)h(table)f(en)o(try)h(for) f(eac)o(h)h(host)f(requested,)j(lo)q(oks)249 1939 y(up)f(the)h(IP)g (addresses,)i(and)d(sets)i(the)e(options)g(from)f(host)i(\014le)f(en)o (tries)h(or)g(defaults.)28 b(The)18 b(host)249 1993 y(descriptors)f (are)f(k)o(ept)g(in)f(a)g Fs(waitc)p 825 1993 V 14 w(add)g FA(structure)j(\(attac)o(hed)e(to)f(a)g(w)o(ait)g(con)o(text\))h(and)f (not)h(y)o(et)249 2047 y(added)f(to)g(the)g(host)g(table.)20 b(The)15 b(master)f(forks)h(the)g(p)o(vmd')e(to)h(do)h(the)g(dirt)o(y)f (w)o(ork,)h(passing)f(it)g(a)249 2101 y(list)i(of)g(hosts)h(and)f (commands)e(to)j(execute)h(\(an)e Fs(SM)p 1099 2101 V 16 w(STHOST)f FA(message\).)25 b(The)17 b(p)o(vmd')e(uses)i Fs(rsh)p FA(,)249 2155 y Fs(rexec\(\))f FA(or)i(man)o(ual)d(startup)k (to)e(start)i(eac)o(h)f(p)o(vmd,)f(pass)h(it)f(parameters,)h(and)g(get) g(a)f(line)h(of)249 2209 y(con\014guration)c(data)g(bac)o(k.)20 b(The)15 b(con\014guration)f(dialog)f(b)q(et)o(w)o(een)j(p)o(vmd')c (and)i(a)h(new)g(sla)o(v)o(e)f(is)g(as)249 2263 y(follo)o(ws:)p 291 2329 1410 2 v 315 2361 a Fu(p)o(vmd')g Ff(!)f Fu(sla)o(v)o(e:)51 b(\(exec\))13 b Fg($PVM)p 821 2361 12 2 v 12 w(ROOT/lib/pv)o(md)j(-s)j (-d8)f(-nhonk)g(1)h(80a9ca95:)o(0f5)o(a)1095 2407 y(4096)g(3)g (80a95c43:)o(00)o(00)315 2452 y Fu(sla)o(v)o(e)c Ff(!)e Fu(p)o(vmd':)50 b Fg(ddpro<231)o(2>)16 b(arch<ALPHA)o(>)g(ip<80a95c43)o (:0)o(b3f)o(>)g(mtu<4096>)315 2498 y Fu(p)o(vmd')e Ff(!)f Fu(sla)o(v)o(e:)51 b Fg(EOF)p 291 2513 1410 2 v eop %%Page: 108 127 108 126 bop 249 251 a Fu(108)1356 b(Chapter)13 b(7)249 840 y 24818168 18755727 5788794 24865505 30588518 43613306 startTexFig 249 840 a %%BeginDocument: fig7-addhost.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 30 61 ] concat %I 210 819 210 459 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 134 61 ] concat %I 210 819 210 459 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 238 61 ] concat %I 210 819 210 459 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 334 61 ] concat %I 210 819 210 459 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 90 818 578 818 Line %I 1 End Begin %I Line %I b 65535 3 0 1 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 62 62 ] concat %I 82 818 82 730 Line %I 1 End End %I eop Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 52 64 ] concat %I 228 496 236 752 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 20 64 ] concat %I 388 544 396 640 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 36 64 ] concat %I 340 544 348 728 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.764706 0.764706 0.764706 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 76 64 ] concat %I 108 464 116 784 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 152 867 ] concat %I [ (pvm_addhosts\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 256 835 ] concat %I [ (tm_addhost\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 456 787 ] concat %I [ (start_slaves\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 552 763 ] concat %I [ (slave_config\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 360 723 ] concat %I [ (dm_startack\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 261 691 ] concat %I [ (dm_htupd\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 558.5 675 ] concat %I [ (dm_htupd\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 358 659 ] concat %I [ (dm_htupdack\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 252 579 ] concat %I [ (dm_htcommit\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 549.5 571 ] concat %I [ (dm_htcommit\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 358 603 ] concat %I [ (dm_htupdack\(\)) ] Text End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -26 61 ] concat %I 562 715 610 707 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 36 0 ] concat Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1 0 0 1 57 -113 ] concat %I 191 905 13 8 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 245.5 798 ] concat %I [ (3) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -4 0 ] concat Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1 0 0 1 193 -137 ] concat %I 191 905 13 8 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 381.5 772 ] concat %I [ (6) ] Text End End %I eop Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 20 64 ] concat %I 468 672 412 664 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 19.9999 -7.99988 ] concat Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1 0 0 1 152 -215 ] concat %I 240 903 22 10 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 385 692 ] concat %I [ (7,8) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 20 -8 ] concat Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1 0 0 1 201 -273 ] concat %I 191 905 13 8 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 389.5 636 ] concat %I [ (8) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 60 0 ] concat Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1 0 0 1 20 64 ] concat %I 108 696 32 16 Elli End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 108.5 764 ] concat %I [ (Blocked) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 272 899 ] concat %I [ (Pvmd 2) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 160 899 ] concat %I [ (Task 2/1) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 352 899 ] concat %I [ (Pvmd 1 \(master\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 560 899 ] concat %I [ (Pvmd 3 \(new\)) ] Text End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 52 64 ] concat %I 156 784 204 776 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 52 64 ] concat %I 204 472 156 464 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 371.5 811 ] concat %I [ (dm_add\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 257.5 555 ] concat %I [ (dm_addack\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 472 899 ] concat %I [ (Pvmd') ] Text End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 522 594 378 554 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 522 682 442 674 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 274 762 322 754 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 378 738 426 730 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 378 642 522 618 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 386 530 514 514 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 314 514 266 498 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 314 530 266 522 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 124.5 828.5 ] concat %I [ (time) ] Text End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 314 642 250 634 Line %I 1 End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 54 62 ] concat %I 258 610 314 602 Line %I 1 End End %I eop showpage end %%EndDocument endTexFig 249 2090 a Fo(Figure)g(7.7)249 2128 y Fy(Timeline)d(of)h(addhost)f(op) q(eration)p eop %%Page: 109 128 109 127 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(109)291 621 y FA(The)16 b(addresses)i(of)d(the)h(master)g(and)f(sla)o (v)o(e)h(p)o(vmds)e(are)j(passed)f(on)g(the)g(command)d(line.)24 b(The)249 675 y(sla)o(v)o(e)12 b(writes)h(its)f(con\014guration)g(on)f (standard)i(output,)f(then)h(w)o(aits)f(for)f(an)h(EOF)h(from)d(the)j (p)o(vmd')249 729 y(and)20 b(disconnects.)39 b(It)20 b(runs)h(in)f(probationary)f(status)i(\()p Fs(runstate)f(=)i (PVMDSTARTUP)p FA(\))c(un)o(til)h(it)249 783 y(receiv)o(es)d(the)f (rest)g(of)e(its)h(con\014guration)g(from)e(the)j(master)f(p)o(vmd.)j (If)c(it)h(isn't)g(con\014gured)h(within)249 837 y(\014v)o(e)e(min)o (utes)e(\(parameter)i Fs(DDBAILTIME)p FA(\),)d(it)i(assumes)h(there)h (is)e(some)g(problem)f(with)h(the)i(master)249 891 y(and)j(quits.)26 b(The)17 b(proto)q(col)g(revision)f(\()p Fs(DDPROTOCOL)p FA(\))f(of)h(the)h(sla)o(v)o(e)g(p)o(vmd)e(m)o(ust)g(matc)o(h)h(that)h (of)249 945 y(the)h(master.)30 b(This)18 b(n)o(um)o(b)q(er)f(is)g (incremen)o(ted)h(whenev)o(er)i(a)d(c)o(hange)h(in)g(the)g(proto)q(col) g(mak)o(es)e(it)249 999 y(incompatible)d(with)h(the)i(previous)f(v)o (ersion.)21 b(When)16 b(sev)o(eral)f(hosts)h(are)f(added)g(at)g(once,)g (startup)249 1053 y(is)g(done)h(in)e(parallel.)21 b(The)16 b(p)o(vmd')d(sends)k(the)f(data)f(\(or)g(errors\))i(in)d(a)h Fs(DM)p 1443 1053 14 2 v 16 w(STARTACK)e FA(message)i(to)249 1107 y(the)g(master)e(p)o(vmd,)f(whic)o(h)i(completes)f(the)i(host)f (descriptors)h(held)f(in)g(the)g(w)o(ait)f(con)o(text.)291 1161 y(If)j(a)g(sp)q(ecial)h(task)f(called)g(a)h FB(hoster)f FA(is)g(registered)i(with)e(the)h(master)f(p)o(vmd)f(when)i(it)f (receiv)o(es)249 1215 y(the)g Fs(DM)p 369 1215 V 16 w(ADD)f FA(message,)g(the)h(p)o(vmd')e(is)h(not)h(used.)24 b(Instead,)17 b(the)f Fs(SM)p 1354 1215 V 15 w(STHOST)f FA(message)g(is)h(sen)o(t)g (to)249 1269 y(the)d(hoster,)g(whic)o(h)g(starts)g(the)g(remote)f(pro)q (cesses)j(as)e(describ)q(ed)h(ab)q(o)o(v)o(e)e(using)g(an)o(y)g(mec)o (hanism)e(it)249 1323 y(w)o(an)o(ts,)16 b(then)g(sends)h(a)e Fs(SM)p 673 1323 V 15 w(STHOSTACK)f FA(message)h(\(same)g(format)f(as)h Fs(DM)p 1416 1323 V 15 w(STARTACK)p FA(\))f(bac)o(k)i(to)f(the)249 1377 y(master)e(p)o(vmd.)j(Th)o(us,)d(the)g(metho)q(d)f(of)h(starting)f (sla)o(v)o(e)h(p)o(vmds)f(is)h(dynamically)c(replaceable,)14 b(but)249 1431 y(the)e(hoster)g(do)q(es)g(not)f(ha)o(v)o(e)g(to)h (understand)g(the)g(con\014guration)f(proto)q(col.)17 b(If)11 b(the)h(hoster)g(task)f(fails)249 1485 y(during)i(an)h(add)f (op)q(eration,)g(the)h(p)o(vmd)e(uses)j(the)f(w)o(ait)f(con)o(text)h (to)g(reco)o(v)o(er.)19 b(It)13 b(assumes)h(none)g(of)249 1539 y(the)h(sla)o(v)o(es)e(w)o(ere)i(started)g(and)f(sends)h(a)f Fs(DM)p 948 1539 V 15 w(ADDACK)f FA(message)g(indicating)g(a)h(system)f (error.)291 1593 y(After)g(the)f(sla)o(v)o(es)h(are)g(started,)g(the)g (master)f(sends)h(eac)o(h)g(a)f Fs(DM)p 1288 1593 V 15 w(SLCONF)f FA(message)h(to)h(set)g(param-)249 1647 y(eters)i(not)e (included)h(in)f(the)h(startup)g(proto)q(col.)k(It)c(then)g(broadcasts) g(a)f Fs(DM)p 1455 1647 V 15 w(HTUPD)g FA(message)g(to)g(all)249 1701 y(new)k(and)f(existing)f(sla)o(v)o(es.)25 b(Up)q(on)16 b(receiving)h(this)f(message,)g(eac)o(h)h(sla)o(v)o(e)e(kno)o(ws)h(the) h(con\014gura-)249 1754 y(tion)f(of)f(the)i(new)f(virtual)g(mac)o (hine.)23 b(The)17 b(master)e(w)o(aits)h(for)g(an)g(ac)o(kno)o (wledging)e Fs(DM)p 1656 1754 V 16 w(HTUPDACK)249 1808 y FA(message)19 b(from)e(ev)o(ery)j(sla)o(v)o(e,)g(then)g(broadcasts)g (an)f Fs(HT)p 1172 1808 V 15 w(COMMIT)f FA(message,)i(shifting)e(all)g (to)h(the)249 1862 y(new)e(host)g(table.)25 b(Tw)o(o)16 b(phases)h(are)g(needed)h(so)f(that)f(new)h(hosts)g(are)g(not)f(adv)o (ertised)h(\(e.g.,)f(b)o(y)249 1916 y Fs(pvm)p 318 1916 V 15 w(config\(\))p FA(\))c(un)o(til)h(all)g(p)o(vmds)g(kno)o(w)g(the)h (new)h(con\014guration.)i(Finally)m(,)11 b(the)k(master)e(sends)i(a)249 1970 y Fs(DM)p 296 1970 V 15 w(ADDACK)e FA(reply)h(to)g(the)g(original) e(request,)j(giving)e(the)h(new)g(host)h(id's.)291 2024 y Fr(Note:)20 b FA(Recen)o(t)15 b(exp)q(erience)i(suggests)g(it)d(w)o (ould)g(b)q(e)h(cleaner)h(to)f(manage)e(the)i(p)o(vmd')e(through)249 2078 y(the)20 b(task)g(in)o(terface)g(instead)f(of)g(the)h(host)g(in)o (terface.)35 b(This)20 b(approac)o(h)f(w)o(ould)g(allo)o(w)e(m)o (ultiple)249 2132 y(starters)22 b(to)e(run)h(at)f(once)h(\(parallel)e (startup)i(is)f(implemen)o(ted)e(explicitly)h(in)h(a)g(single)g(p)o (vmd')249 2186 y(pro)q(cess\).)249 2269 y Fr(7.3.9)48 b(Resource)15 b(Manager)249 2352 y FA(A)c FB(r)n(esour)n(c)n(e)g (manager)g FA(\(RM\))g(is)f(a)h(PVM)g(task)f(resp)q(onsible)i(for)e (making)f(task)h(and)h(host)g(sc)o(heduling)249 2406 y(\(placemen)o(t\))e(decisions.)17 b(The)11 b(resource)g(manager)e(in)o (terface)h(w)o(as)f(in)o(tro)q(duced)i(in)e(v)o(ersion)h(3.3.)16 b(The)249 2460 y(simple)d(sc)o(hedulers)k(em)o(b)q(edded)e(in)f(the)i (p)o(vmd)d(handle)i(man)o(y)e(common)f(conditions,)i(but)h(require)p eop %%Page: 110 129 110 128 bop 249 251 a Fu(110)1356 b(Chapter)13 b(7)249 507 y FA(the)h(user)g(to)e(explicitly)g(place)i(program)d(comp)q(onen)o (ts)i(in)f(order)i(to)f(get)g(the)g(maxim)o(um)8 b(e\016ciency)m(.)249 561 y(Using)k(kno)o(wledge)g(not)h(a)o(v)n(ailable)d(to)i(the)h(p)o (vmds,)e(suc)o(h)i(as)f(host)h(load)e(a)o(v)o(erages,)i(a)f(RM)g(can)h (mak)o(e)249 615 y(more)k(informed)g(decisions)h(automatically)m(.)27 b(F)m(or)18 b(example,)f(when)i(spa)o(wning)e(a)h(task,)h(it)e(could) 249 669 y(pic)o(k)12 b(the)h(host)g(in)f(order)h(to)f(balance)g(the)h (computing)e(load.)17 b(Or,)12 b(when)h(recon\014guring)g(the)g (virtual)249 723 y(mac)o(hine,)e(the)j(RM)e(could)g(in)o(teract)i(with) e(an)h(external)g(queuing)f(system)h(to)f(allo)q(cate)h(a)f(new)h (host.)291 777 y(The)g(n)o(um)o(b)q(er)g(of)f(RMs)h(registered)i(can)f (v)n(ary)e(from)g(one)h(for)g(an)g(en)o(tire)h(virtual)e(mac)o(hine)g (to)h(one)249 831 y(p)q(er)h(p)o(vmd.)i(The)e(RM)e(running)h(on)g(the)h (master)e(host)h(\(where)i(the)e(master)g(p)o(vmd)e(runs\))j(manages) 249 885 y(an)o(y)h(sla)o(v)o(e)g(p)o(vmds)f(that)i(don't)f(ha)o(v)o(e)g (their)h(o)o(wn)f(RMs.)23 b(A)15 b(task)h(connecting)g(anon)o(ymously)d (to)i(a)249 939 y(virtual)h(mac)o(hine)f(is)i(assigned)g(the)g(default) f(RM)g(of)g(the)i(p)o(vmd)d(to)h(whic)o(h)h(it)f(connects.)28 b(A)17 b(task)249 993 y(spa)o(wned)d(from)f(within)g(the)h(system)g (inherits)g(the)h(RM)e(of)g(its)h(paren)o(t)h(task.)291 1047 y(If)c(a)g(task)h(has)g(a)g(RM)f(assigned)h(to)g(it,)f(service)i (requests)h(from)c(the)j(task)f(to)f(its)h(p)o(vmd)e(are)i(routed)249 1101 y(to)i(the)g(RM)g(instead.)k(Messages)e(from)c(the)i(follo)o(wing) d(libp)o(vm)h(functions)i(are)g(in)o(tercepted:)p 291 1175 1036 2 v 315 1213 a(Libp)o(vm)e(function)50 b(Default)13 b(Message)51 b(RM)13 b(Message)p 291 1230 V 315 1268 a Fs(pvm)p 384 1268 14 2 v 16 w(addhost\(\))72 b FA(TM)p 737 1268 13 2 v 15 w(ADDHOST)53 b(SM)p 1077 1268 V 15 w(ADDHOST)315 1322 y Fs(pvm)p 384 1322 14 2 v 16 w(delhost\(\))72 b FA(TM)p 737 1322 13 2 v 15 w(DELHOST)62 b(SM)p 1077 1322 V 15 w(DELHOST)315 1376 y Fs(pvm)p 384 1376 14 2 v 16 w(spawn\(\))116 b FA(TM)p 737 1376 13 2 v 15 w(SP)m(A)-5 b(WN)116 b(SM)p 1077 1376 V 15 w(SP)m(A)-5 b(WN)p 291 1394 1036 2 v 291 1512 a(Queries)19 b(also)e(go)g(to)g(the)h(RM,)f (since)h(it)g(presumably)e(kno)o(ws)i(more)e(ab)q(out)i(the)g(state)g (of)f(the)249 1566 y(virtual)c(mac)o(hine:)p 291 1632 993 2 v 315 1670 a(Libp)o(vm)f(function)50 b(Default)13 b(Message)51 b(RM)13 b(Message)p 291 1687 V 315 1725 a Fs(pvm)p 384 1725 14 2 v 16 w(config\(\))94 b FA(TM)p 737 1725 13 2 v 15 w(CONFIG)i(SM)p 1077 1725 V 15 w(CONFIG)315 1779 y Fs(pvm)p 384 1779 14 2 v 16 w(notify\(\))e FA(TM)p 737 1779 13 2 v 15 w(NOTIFY)k(SM)p 1077 1779 V 15 w(NOTIFY)315 1833 y Fs(pvm)p 384 1833 14 2 v 16 w(task\(\))138 b FA(TM)p 737 1833 13 2 v 15 w(T)m(ASK)151 b(SM)p 1077 1833 V 15 w(T)m(ASK)p 291 1851 993 2 v 291 1969 a(The)13 b(call)g(to)g(register)i (a)e(task)g(as)h(a)f(RM)g(\()p Fs(pvm)p 1023 1969 14 2 v 15 w(reg)p 1104 1969 V 15 w(rm\(\))p FA(\))f(is)i(also)e (redirected)k(if)c(RM)h(is)g(already)249 2023 y(running.)18 b(In)13 b(this)h(w)o(a)o(y)e(the)i(existing)f(RM)g(learns)h(of)f(the)h (new)g(one,)f(and)h(can)f(gran)o(t)g(or)h(refuse)g(the)249 2077 y(request)i(to)d(register.)291 2131 y(Using)18 b(messages)h Fs(SM)p 640 2131 V 15 w(EXEC)f FA(and)h Fs(SM)p 891 2131 V 15 w(ADD)p FA(,)f(the)h(RM)f(can)h(directly)g(command)d(the)k(p)o (vmds)d(to)249 2185 y(start)h(tasks)g(or)f(recon\014gure)i(the)f (virtual)f(mac)o(hine.)27 b(On)18 b(receiving)g(ac)o(kno)o(wledgemen)o (t)e(for)h(the)249 2239 y(commands,)12 b(it)j(replies)g(to)g(the)h (clien)o(t)e(task.)22 b(The)15 b(RM)f(is)h(free)h(to)f(in)o(terpret)h (service)g(request)g(pa-)249 2293 y(rameters)d(in)f(an)o(y)g(w)o(a)o(y) g(it)g(wishes.)19 b(F)m(or)12 b(example,)f(the)i(arc)o(hitecture)i (class)e(giv)o(en)f(to)g Fs(pvm)p 1678 2293 V 16 w(spawn\(\))249 2347 y FA(could)i(b)q(e)g(used)h(to)f(distinguish)f(hosts)i(b)o(y)e (memory)f(size)i(or)g(CPU)g(sp)q(eed.)p eop %%Page: 111 130 111 129 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(111)249 507 y FD(7.4)52 b(Libp)o(vm)17 b(Library)249 615 y Fr(7.4.1)48 b(Language)15 b(Supp)q(ort)249 698 y FA(Libp)o(vm)h(is)h(written)i(in)e(C)g(and)h(directly)g(supp)q(orts)h (C)f(and)f(C++)h(applications.)29 b(The)18 b(F)m(ortran)249 752 y(library)m(,)e Fs(libfpvm3.a)f FA(\(also)i(written)g(in)g(C\),)f (is)h(a)g(set)h(of)e FB(wr)n(app)n(er)g FA(functions)i(that)f(conform)e (to)249 806 y(the)h(F)m(ortran)g(calling)e(con)o(v)o(en)o(tions.)24 b(The)16 b(F)m(ortran/C)f(linking)f(requiremen)o(ts)i(are)h(p)q (ortably)e(met)249 860 y(b)o(y)f(prepro)q(cessing)i(the)e(C)g(source)h (co)q(de)g(for)e(the)i(F)m(ortran)e(library)h(with)f Fs(m4)h FA(b)q(efore)g(compilation.)249 943 y Fr(7.4.2)48 b(Connecting)14 b(to)h(the)g(Pvmd)249 1026 y FA(On)h(the)h(\014rst)g (call)e(to)h(a)g(libp)o(vm)e(function,)i Fs(pvm)p 1037 1026 14 2 v 15 w(beatask\(\))e FA(is)i(called)g(to)g(initialize)e(the)j (library)249 1080 y(state)h(and)f(connect)h(the)g(task)f(to)g(its)g(p)o (vmd.)26 b(Connecting)17 b(\(for)g FB(anonymous)i FA(tasks\))e(is)g (sligh)o(tly)249 1134 y(di\013eren)o(t)e(from)d(reconnecting)j(\(for)f (spa)o(wned)g(tasks\).)291 1188 y(The)i(p)o(vmd)f(publishes)h(the)h (address)g(of)f(the)h(so)q(c)o(k)o(et)g(on)e(whic)o(h)h(it)g(listens)h (in)e Fs(/tmp/pvmd.)p FB(uid)p FA(,)249 1242 y(where)g FB(uid)e FA(is)h(the)g(n)o(umeric)e(user)j(id)e(under)h(whic)o(h)g(the) g(p)o(vmd)e(runs.)18 b(This)c(\014le)f(con)o(tains)g(a)h(line)f(of)249 1296 y(the)i(form)720 1383 y Fs(7f000001:06f7)c FA(or)j Fs(/tmp/aaa014138)249 1470 y FA(This)g(is)g(the)h(IP)g(address)h(and)e (p)q(ort)g(n)o(um)o(b)q(er)g(\(in)g(hexadecimal\))f(of)h(the)h(so)q(c)o (k)o(et,)f(or)h(the)g(path)f(if)f(a)249 1524 y(Unix-domain)e(so)q(c)o (k)o(et.)19 b(T)m(o)12 b(a)o(v)o(oid)h(the)h(need)g(to)g(read)g(the)g (address)h(\014le,)e(the)h(same)f(information)d(is)249 1578 y(passed)15 b(to)f(spa)o(wned)g(tasks)h(in)e(en)o(vironmen)o(t)g (v)n(ariable)g Fs(PVMSOCK)p FA(.)291 1632 y(T)m(o)18 b(reconnect,)23 b(a)c(spa)o(wned)h(task)g(also)f(needs)i(its)f(exp)q (ected)h(pro)q(cess)h(id.)34 b(When)20 b(a)f(task)h(is)249 1686 y(spa)o(wned)e(b)o(y)g(the)g(p)o(vmd,)f(a)g(task)h(descriptor)h (is)f(created)h(for)e(it)h(during)f(the)h FB(exe)n(c)g FA(phase.)31 b(The)249 1740 y(descriptor)21 b(m)o(ust)d(exist)i(so)g (it)f(can)h(stash)g(an)o(y)f(messages)h(that)g(arriv)o(e)f(for)g(the)h (task)g(b)q(efore)g(it)249 1794 y(reconnects)f(and)d(can)h(receiv)o(e)h (them.)25 b(During)16 b(reconnection,)i(the)f(task)g(iden)o(ti\014es)g (itself)f(to)g(the)249 1848 y(p)o(vmd)h(b)o(y)h(its)g(PID.)f(If)h(the)h (task)f(is)g(alw)o(a)o(ys)f(the)i(c)o(hild)f(of)f(the)i(p)o(vmd)e (\(i.e.,)h(the)g(exact)h(pro)q(cess)249 1902 y FB(exe)n(c)p FA('d)13 b(b)o(y)f(it\),)g(then)i(it)e(could)g(use)i(the)f(v)n(alue)f (returned)j(b)o(y)d Fs(getpid\(\))p FA(.)k(T)m(o)c(allo)o(w)f(for)h(in) o(terv)o(ening)249 1956 y(pro)q(cesses,)j(suc)o(h)d(as)g(debuggers,)i (the)e(p)o(vmd)f(passes)i(the)g(exp)q(ected)h(PID)e(in)f(en)o(vironmen) o(t)g(v)n(ariable)249 2010 y Fs(PVMEPID)p FA(,)g(and)i(the)g(task)g (uses)i(that)e(v)n(alue)f(in)g(preference)k(to)d(its)g(real)g(PID.)f (The)h(task)g(also)g(passes)249 2064 y(its)h(real)g(PID)g(so)g(it)f (can)h(b)q(e)h(con)o(trolled)e(normally)f(b)o(y)h(the)i(p)o(vmd.)291 2118 y Fs(pvm)p 360 2118 V 15 w(beatask\(\))g FA(creates)k(a)e(TCP)h (so)q(c)o(k)o(et)g(and)g(do)q(es)g(a)f(prop)q(er)h(connection)g(dance)g (with)f(the)249 2172 y(p)o(vmd.)e(Eac)o(h)d(m)o(ust)d(pro)o(v)o(e)i (its)g(iden)o(tit)o(y)f(to)h(the)h(other,)f(to)g(prev)o(en)o(t)h(a)e (di\013eren)o(t)i(user)g(from)d(sp)q(o)q(o\014ng)249 2226 y(the)20 b(system.)34 b(It)20 b(do)q(es)g(this)f(b)o(y)g(creating) h(a)f(\014le)h(in)e Fs(/tmp)h FA(writable)g(only)g(b)o(y)g(the)h(o)o (wner,)g(and)249 2280 y(c)o(hallenging)11 b(the)h(other)h(to)f(write)g (in)f(the)i(\014le.)k(If)12 b(successful,)h(the)g(iden)o(tit)o(y)e(of)h (the)g(other)h(is)e(pro)o(v)o(en.)249 2334 y(Note)h(that)g(this)g (authen)o(tication)f(is)g(only)g(as)h(strong)g(as)g(the)g(\014lesystem) f(and)h(the)g(authorit)o(y)f(of)g(ro)q(ot)249 2388 y(on)j(eac)o(h)g (mac)o(hine.)291 2442 y(A)j(proto)q(col)h(serial)f(n)o(um)o(b)q(er)g (\()p Fs(TDPROTOCOL)p FA(\))f(is)h(compared)g(whenev)o(er)i(a)e(task)h (connects)h(to)e(a)249 2496 y(p)o(vmd)d(or)i(another)g(task.)23 b(This)15 b(n)o(um)o(b)q(er)g(is)h(incremen)o(ted)g(whenev)o(er)h(a)e (c)o(hange)h(in)f(the)h(proto)q(col)p eop %%Page: 112 131 112 130 bop 249 251 a Fu(112)1356 b(Chapter)13 b(7)249 507 y FA(mak)o(es)g(it)g(incompatible)f(with)i(the)g(previous)g(v)o (ersion.)291 561 y(Disconnecting)j(is)h(m)o(uc)o(h)e(simpler.)28 b(It)18 b(can)g(b)q(e)g(done)g(forcibly)f(b)o(y)g(a)g FB(close)h FA(from)e(either)i(end,)249 615 y(for)g(example,)g(b)o(y)g (exiting)g(the)i(task)e(pro)q(cess.)34 b(The)19 b(function)f Fs(pvm)p 1372 615 14 2 v 15 w(exit\(\))g FA(p)q(erforms)g(a)g(clean)249 669 y(sh)o(utdo)o(wn,)e(suc)o(h)h(that)f(the)g(pro)q(cess)i(can)e(b)q (e)h(connected)h(again)c(later)i(\(it)g(w)o(ould)f(get)h(a)g (di\013eren)o(t)249 723 y(TID\).)249 844 y FD(7.5)52 b(Proto)q(cols)249 951 y FA(PVM)17 b(comm)o(unicatio)o(n)d(is)i(based)h (on)g(TCP)f(,)g(UDP,)g(and)h(Unix-domain)c(so)q(c)o(k)o(ets.)27 b(While)16 b(more)249 1005 y(appropriate)e(proto)q(cols)g(exist,)g (they)g(aren't)g(as)g(generally)g(a)o(v)n(ailable.)291 1059 y(VMTP)g([4])g(is)g(one)h(example)e(of)h(a)g(proto)q(col)h(built)e (for)i(this)f(purp)q(ose.)21 b(Although)14 b(in)o(tended)h(for)249 1113 y(RPC-st)o(yle)g(in)o(teraction)g(\(request-resp)q(onse)q(\),)j (it)d(could)g(supp)q(ort)h(PVM)g(messages.)22 b(It)16 b(is)f(pac)o(k)o(et)249 1167 y(orien)o(ted)i(and)g(e\016cien)o(tly)g (sends)h(short)f(blo)q(c)o(ks)g(of)f(data)h(\(suc)o(h)h(as)f(most)e(p)o (vmd-p)o(vmd)f(manage-)249 1221 y(men)o(t)f(messages\))h(but)h(also)e (handles)h(streaming)f(\(necessary)j(for)e(task-task)g(comm)o(unicatio) o(n\).)i(It)249 1275 y(supp)q(orts)c(m)o(ulticasting)d(and)h(priorit)o (y)g(data)h(\(something)f(PVM)h(do)q(esn't)g(need)h(y)o(et\).)17 b(Connections)249 1329 y(don't)d(need)i(to)e(b)q(e)i(established)f(b)q (efore)g(use;)h(the)f(\014rst)g(comm)o(unication)d(initializes)h(the)i (proto)q(col)249 1383 y(driv)o(ers)j(at)f(eac)o(h)h(end.)28 b(VMTP)18 b(w)o(as)f(rejected,)i(ho)o(w)o(ev)o(er.)29 b(b)q(ecause)19 b(it)d(is)i(not)f(widely)f(a)o(v)n(ailable)249 1437 y(\(using)e(it)f(requires)i(mo)q(difying)c(the)k(k)o(ernel\).)291 1491 y(This)i(section)i(explains)e(the)i(PVM)f(proto)q(cols.)30 b(There)19 b(are)f(three)h(connections)g(to)f(consider:)249 1545 y(Bet)o(w)o(een)e(p)o(vmds,)c(b)q(et)o(w)o(een)j(p)o(vmd)d(and)i (task,)g(and)f(b)q(et)o(w)o(een)j(tasks.)249 1628 y Fr(7.5.1)48 b(Messages)249 1711 y FA(The)13 b(p)o(vmd)e(and)h(libp)o(vm)e(use)k (the)f(same)e(message)i(header,)g(sho)o(wn)f(in)g(Figure)h(7.8.)k FB(Co)n(de)12 b FA(con)o(tains)249 1765 y(an)20 b(in)o(teger)g(tag)g (\(message)f(t)o(yp)q(e\).)37 b(Libp)o(vm)18 b(uses)j FB(Enc)n(o)n(ding)g FA(to)e(pass)i(the)f(enco)q(ding)h(st)o(yle)f(of) 249 1819 y(the)c(message,)f(as)h(it)f(can)g(pac)o(k)h(in)f(di\013eren)o (t)h(formats.)21 b(The)16 b(p)o(vmd)e(alw)o(a)o(ys)g(sets)j(Enco)q (ding)e(\(and)249 1873 y(requires)f(that)f(it)f(b)q(e)h(set\))h(to)e(1) h(\()p FB(fo)n(o)p FA(\),)f(Pvmds)g(use)h(the)h FB(Wait)g(Context)e FA(\014eld)h(to)f(pass)i(the)f(w)o(ait)f(id's)249 1927 y(\(if)j(an)o(y)m(,)f(zero)j(if)d(none\))i(of)f(the)h FB(waitc)f FA(asso)q(ciated)h(with)g(the)g(message.)22 b(Certain)16 b(tasks)g(\(resource)249 1981 y(manager,)h(task)o(er,)h (hoster\))h(also)d(use)j(w)o(ait)d(id's.)29 b(The)17 b FB(Che)n(cksum)h FA(\014eld)g(is)f(reserv)o(ed)i(for)e(future)249 2035 y(use.)30 b(Messages)19 b(are)f(sen)o(t)h(in)e(one)h(or)f(more)g (fragmen)o(ts,)g(eac)o(h)h(with)f(its)h(o)o(wn)f(fragmen)o(t)f(header) 249 2089 y(\(describ)q(ed)g(b)q(elo)o(w\).)i(The)c(message)g(header)h (is)e(at)h(the)h(b)q(eginning)e(of)g(the)i(\014rst)f(fragmen)o(t.)249 2172 y Fr(7.5.2)48 b(Pvmd-Pvmd)249 2255 y FA(PVM)14 b(daemons)e(comm)o (unicate)f(with)j(one)f(another)h(through)g(UDP)f(so)q(c)o(k)o(ets.)19 b(UDP)14 b(is)f(an)g(unreli-)249 2309 y(able)g(deliv)o(ery)g(service)h (whic)o(h)f(can)g(lose,)g(duplicate)g(or)g(reorder)h(pac)o(k)o(ets,)g (so)f(an)g(ac)o(kno)o(wledgmen)o(t)249 2363 y(and)k(retry)g(mec)o (hanism)d(is)j(used.)27 b(UDP)17 b(also)f(limits)e(pac)o(k)o(et)j (length,)g(so)f(PVM)h(fragmen)o(ts)f(long)249 2417 y(messages.)291 2471 y(W)m(e)f(considered)i(TCP)m(,)e(but)i(three)g(factors)f(mak)o(e)e (it)i(inappropriate.)24 b(First)16 b(is)g(scalabilit)o(y.)22 b(In)p eop %%Page: 113 132 113 131 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(113)249 466 y 25481245 5636192 6578176 28088811 32035717 33746042 startTexFig 249 466 a %%BeginDocument: fig7-mhdr.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 54 ] concat %I 38 602 550 626 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 30 ] concat %I 38 602 550 626 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 6 ] concat %I 38 602 550 626 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 144 672 ] concat %I [ (0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 144 648 ] concat %I [ (4) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 144 624 ] concat %I [ (8) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 138 600 ] concat %I [ (12) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 160 696 ] concat %I [ (Byte 0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 288 696 ] concat %I [ (1) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 416 696 ] concat %I [ (2) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 544 696 ] concat %I [ (3) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 -18.0002 ] concat %I 38 602 550 626 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 366.5 624 ] concat %I [ (Wait Context ID) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 395.5 672 ] concat %I [ (Code) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 385.5 648 ] concat %I [ (Encoding) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 347.5 600 ] concat %I [ (\(reserved for checksum\)) ] Text End End %I eop showpage end %%EndDocument endTexFig 249 885 a Fo(Figure)13 b(7.8)249 922 y Fy(Message)e(header)249 1038 y FA(a)18 b(virtual)f(mac)o(hine)f(of)h Fn(N)23 b FA(hosts,)c(eac)o(h)g(p)o(vmd)d(m)o(ust)h(ha)o(v)o(e)g(connections)i (to)f(the)g(other)h Fn(N)e Ft(\000)12 b FA(1.)249 1092 y(Eac)o(h)i(op)q(en)g(TCP)g(connection)g(consumes)g(a)f(\014le)h (descriptor)h(in)e(the)h(p)o(vmd,)e(and)h(some)g(op)q(erating)249 1146 y(systems)18 b(limit)e(the)j(n)o(um)o(b)q(er)e(of)h(op)q(en)g (\014les)h(to)f(as)g(few)g(as)h(32,)f(whereas)h(a)f(single)g(UDP)g(so)q (c)o(k)o(et)249 1200 y(can)h(comm)o(unicate)e(with)i(an)o(y)f(n)o(um)o (b)q(er)h(of)f(remote)h(UDP)g(so)q(c)o(k)o(ets.)35 b(Second)19 b(is)g(o)o(v)o(erhead.)34 b Fn(N)249 1254 y FA(p)o(vmds)16 b(need)i Fn(N)5 b FA(\()p Fn(N)16 b Ft(\000)11 b FA(1\))p Fn(=)p FA(2)16 b(TCP)h(connections,)i(whic)o(h)d(w)o(ould)g(b)q(e)i (exp)q(ensiv)o(e)g(to)f(set)h(up.)27 b(The)249 1308 y(PVM/UDP)14 b(proto)q(col)f(is)g(initialized)f(with)h(no)g(comm)o(unicatio)o(n.)i (Third)e(is)h(fault)e(tolerance.)19 b(The)249 1362 y(comm)o(unication)8 b(system)i(detects)j(when)f(foreign)e(p)o(vmds)g(ha)o(v)o(e)h(crashed)h (or)f(the)h(net)o(w)o(ork)f(has)g(gone)249 1416 y(do)o(wn,)h(so)g(w)o (e)h(need)h(to)e(set)h(timeouts)f(in)g(the)h(proto)q(col)f(la)o(y)o (er.)17 b(The)c(TCP)f(k)o(eepaliv)o(e)g(option)g(migh)o(t)249 1470 y(w)o(ork,)h(but)h(it's)g(not)g(alw)o(a)o(ys)e(p)q(ossible)i(to)g (get)g(adequate)h(con)o(trol)e(o)o(v)o(er)h(the)h(parameters.)291 1524 y(The)k(pac)o(k)o(et)g(header)h(is)f(sho)o(wn)g(in)f(Figure)h (7.9.)32 b(Multib)o(yte)18 b(v)n(alues)h(are)g(sen)o(t)h(in)e(\(In)o (ternet\))249 1578 y FB(network)d(byte)g(or)n(der)e FA(\(most)g (signi\014can)o(t)g(b)o(yte)h(\014rst\).)249 1634 y 25481245 6441352 6578176 27299430 32035717 33746042 startTexFig 249 1634 a %%BeginDocument: fig7-ddphdr.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 54 ] concat %I 38 602 550 626 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 30 ] concat %I 38 602 550 626 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 6 ] concat %I 38 602 550 626 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 144 672 ] concat %I [ (0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 144 648 ] concat %I [ (4) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 144 624 ] concat %I [ (8) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 138 592 ] concat %I [ (12) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 160 696 ] concat %I [ (Byte 0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 288 696 ] concat %I [ (1) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 416 696 ] concat %I [ (2) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 544 696 ] concat %I [ (3) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 367.5 672 ] concat %I [ (Destination TID) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 380 648 ] concat %I [ (Source TID) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 235 624 ] concat %I [ (Sequence Number) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 505 624 ] concat %I [ (Ack Number) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 66 94 ] concat %I 86 474 598 514 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 66 62 ] concat %I 342 570 342 546 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 66 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -46 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -30 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -14 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 2 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 18 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 34 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 50 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 267 577.5 ] concat %I [ (SOM) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 251 577 ] concat %I [ (EOM) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 235 578 ] concat %I [ (DAT) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 219 579.5 ] concat %I [ (FIN) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 203 577.5 ] concat %I [ (ACK) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 454.5 594 ] concat %I [ (unused) ] Text End End %I eop showpage end %%EndDocument endTexFig 249 2105 a Fo(Figure)f(7.9)249 2142 y Fy(Pvmd-p)o(vmd)8 b(pac)o(k)o(et)i(header)291 2238 y FA(The)h(source)h(and)f(destination) g(\014elds)h(hold)e(the)i(TIDs)f(of)f(the)i(true)g(source)g(and)f (\014nal)f(destination)249 2292 y(of)15 b(the)h(pac)o(k)o(et,)h (regardless)f(of)f(the)i(route)f(it)f(tak)o(es.)24 b(Sequence)18 b(and)d(ac)o(kno)o(wledgmen)o(t)f(n)o(um)o(b)q(ers)249 2346 y(start)h(at)e(1)h(and)g(incremen)o(t)f(to)h(65535,)e(then)j(wrap) f(to)f(zero.)291 2400 y(SOM)j(\(EOM\))h({)f(Set)g(for)g(the)h(\014rst)g (\(last\))f(fragmen)o(t)e(of)i(a)g(message.)24 b(In)o(terv)o(ening)16 b(fragmen)o(ts)249 2454 y(ha)o(v)o(e)10 b(b)q(oth)h(bits)g(cleared.)18 b(They)10 b(are)h(used)h(b)o(y)e(tasks)h(and)g(p)o(vmds)e(to)h(delimit) f(message)h(b)q(oundaries.)291 2508 y(D)o(A)m(T)j({)h(If)g(set,)h(data) f(is)g(con)o(tained)g(in)g(the)h(pac)o(k)o(et,)f(and)g(the)h(sequence)h (n)o(um)o(b)q(er)e(is)g(v)n(alid.)k(The)p eop %%Page: 114 133 114 132 bop 249 251 a Fu(114)1356 b(Chapter)13 b(7)249 507 y FA(pac)o(k)o(et,)h(ev)o(en)g(if)g(zero)g(length,)g(m)o(ust)e(b)q (e)j(deliv)o(ered.)291 561 y(A)o(CK)h({)f(If)h(set,)h(the)g(ac)o(kno)o (wledgmen)o(t)d(n)o(um)o(b)q(er)h(\014eld)h(is)g(v)n(alid.)23 b(This)16 b(bit)g(ma)o(y)e(b)q(e)i(com)o(bined)249 615 y(with)e(the)g(D)o(A)m(T)f(bit)h(to)f(piggybac)o(k)g(an)h(ac)o(kno)o (wledgmen)o(t)e(on)i(a)g(data)f(pac)o(k)o(et.)1511 600 y Fl(1)291 669 y FA(FIN)f({)g(The)h(p)o(vmd)e(is)h(closing)g(do)o(wn)g (the)g(connection.)19 b(A)12 b(pac)o(k)o(et)h(with)f(FIN)g(bit)g(set)i (\(and)e(D)o(A)m(T)249 723 y(cleared\))17 b(b)q(egins)f(an)g(orderly)g (sh)o(utdo)o(wn.)24 b(When)16 b(an)f(ac)o(kno)o(wledgemen)o(t)g(arriv)o (es)h(\(A)o(CK)h(bit)e(set)249 777 y(and)g(ac)o(k)f(n)o(um)o(b)q(er)g (matc)o(hing)f(the)j(sequence)h(n)o(um)o(b)q(er)d(from)f(the)i(FIN)g (pac)o(k)o(et\),)g(a)g(\014nal)f(pac)o(k)o(et)h(is)249 831 y(sen)o(t)d(with)f(b)q(oth)g(FIN)g(and)g(A)o(CK)g(set.)18 b(If)10 b(the)i(p)o(vmd)d(panics,)j(\(for)e(example)g(on)h(a)g(trapp)q (ed)g(segmen)o(t)249 885 y(violation\))h(it)i(tries)g(to)g(send)h(a)e (pac)o(k)o(et)i(with)e(FIN)h(and)g(A)o(CK)g(set)h(to)e(ev)o(ery)i(p)q (eer)g(b)q(efore)g(it)f(exits.)291 939 y(The)e(state)g(of)g(a)f (connection)i(to)e(another)i(p)o(vmd)d(is)h(k)o(ept)i(in)e(its)h(host)g (table)f(en)o(try)m(.)18 b(The)12 b(proto)q(col)249 993 y(driv)o(er)i(uses)h(the)g(follo)o(wing)c(\014elds)j(of)g Fs(struct)20 b(hostd)p FA(:)315 1097 y Fu(Field)178 b(Meaning)p 291 1112 988 2 v 315 1144 a Fg(hd)p 357 1144 12 2 v 14 w(hostpart)47 b Fu(TID)12 b(of)h(p)o(vmd)315 1190 y Fg(hd)p 357 1190 V 14 w(mtu)147 b Fu(Max)13 b(UDP)g(pac)o(k)o(et)h(length)g(to) f(host)315 1236 y Fg(hd)p 357 1236 V 14 w(sad)147 b Fu(IP)12 b(address)i(and)g(UDP)f(p)q(ort)g(n)o(um)o(b)q(er)315 1281 y Fg(hd)p 357 1281 V 14 w(rxseq)107 b Fu(Exp)q(ected)14 b(next)f(pac)o(k)o(et)h(n)o(um)o(b)q(er)f(from)g(host)315 1327 y Fg(hd)p 357 1327 V 14 w(txseq)107 b Fu(Next)12 b(pac)o(k)o(et)i(n)o(um)o(b)q(er)g(to)f(send)g(to)g(host)315 1373 y Fg(hd)p 357 1373 V 14 w(txq)147 b Fu(Queue)13 b(of)g(pac)o(k)o(ets)g(to)g(send)315 1418 y Fg(hd)p 357 1418 V 14 w(opq)147 b Fu(Queue)13 b(of)g(pac)o(k)o(ets)g(sen)o(t,)g(a)o (w)o(aiting)i(ac)o(k)315 1464 y Fg(hd)p 357 1464 V 14 w(nop)147 b Fu(Num)o(b)q(er)13 b(of)g(pac)o(k)o(ets)g(in)h Fg(hd)p 990 1464 V 13 w(opq)315 1510 y(hd)p 357 1510 V 14 w(rxq)147 b Fu(List)13 b(of)g(out-of-order)g(receiv)o(ed)i(pac)o (k)o(ets)315 1555 y Fg(hd)p 357 1555 V 14 w(rxm)147 b Fu(Bu\013er)13 b(for)g(message)h(reassem)o(bly)315 1601 y Fg(hd)p 357 1601 V 14 w(rtt)147 b Fu(Estimated)14 b(smo)q(othed)g (round-trip)h(time)p 291 1616 988 2 v 291 1735 a FA(Figure)h(7.10)f (sho)o(ws)i(the)g(host)g(send)g(and)g(outstanding-pac)o(k)o(et)f (queues.)27 b(P)o(ac)o(k)o(ets)17 b(w)o(aiting)e(to)249 1789 y(b)q(e)e(sen)o(t)g(to)f(a)g(host)h(are)f(queued)h(in)f(FIF)o(O)h Fs(hd)p 974 1789 14 2 v 15 w(txq)p FA(.)k(P)o(ac)o(k)o(ets)c(are)g(app) q(ended)g(to)f(this)g(queue)h(b)o(y)f(the)249 1842 y(routing)j(co)q (de,)i(describ)q(ed)g(in)e(Section)h(7.6.1.)22 b(No)15 b(receiv)o(e)i(queues)g(are)f(used;)h(incoming)c(pac)o(k)o(ets)249 1896 y(are)j(passed)g(immedia)o(tely)d(through)i(to)g(other)h(send)g (queues)h(or)e(reassem)o(bled)g(in)o(to)g(messages)g(\(or)249 1950 y(discarded\).)38 b(Incoming)18 b(messages)j(are)f(deliv)o(ered)h (to)f(a)g(p)o(vmd)f(en)o(try)i(p)q(oin)o(t)e(as)h(describ)q(ed)i(in)249 2004 y(Section)14 b(7.2.4.)291 2058 y(The)h(proto)q(col)h(allo)o(ws)e (m)o(ultiple)f(outstanding)i(pac)o(k)o(ets)h(to)f(impro)o(v)o(e)f(p)q (erformance)h(o)o(v)o(er)h(high-)249 2112 y(latency)21 b(net)o(w)o(orks,)h(so)e(t)o(w)o(o)g(more)g(queues)h(are)g(required.)39 b Fs(hd)p 1310 2112 V 15 w(opq)20 b FA(holds)g(a)g(p)q(er-host)i(list)e (of)249 2166 y(unac)o(kno)o(wledged)e(pac)o(k)o(ets,)h(and)f(global)e Fs(opq)h FA(lists)h(all)f(unac)o(kno)o(wledged)h(pac)o(k)o(ets,)h (ordered)g(b)o(y)249 2220 y(time)e(to)i(retransmit.)32 b Fs(hd)p 685 2220 V 15 w(rxq)19 b FA(holds)f(pac)o(k)o(ets)i(receiv)o (ed)g(out)e(of)g(sequence)j(un)o(til)d(they)h(can)g(b)q(e)249 2274 y(accepted.)291 2328 y(The)c(di\013erence)i(in)d(time)g(b)q(et)o (w)o(een)i(sending)f(a)g(pac)o(k)o(et)g(and)g(getting)g(the)g(ac)o(kno) o(wledgemen)o(t)f(is)249 2382 y(used)g(to)e(estimate)g(the)h (round-trip)g(time)e(to)i(the)g(foreign)f(host.)18 b(Eac)o(h)13 b(up)q(date)g(is)g(\014ltered)g(in)o(to)f(the)p 249 2429 638 2 v 295 2456 a Fe(1)313 2468 y Fy(Curren)o(tly)m(,)d(the)i(p)o(vmd) f(generates)f(an)i(ac)o(kno)o(wledgeme)o(n)o(t)d(pac)o(k)o(et)i(for)h (eac)o(h)g(data)f(pac)o(k)o(et.)p eop %%Page: 115 134 115 133 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(115)249 850 y 23492013 18424152 5986140 23352524 29470228 41771417 startTexFig 249 850 a %%BeginDocument: fig7-httxq.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 52 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 568 625 ] concat %I [ (databuf) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 95.9999 120 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 168 95.9996 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 168 104 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.764706 0.764706 0.764706 SetCBg %I p 1 SetP %I t [ 1 0 0 1 15 62 ] concat %I 273 466 313 474 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 265 466 329 474 Rect End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 256 104 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.764706 0.764706 0.764706 SetCBg %I p 1 SetP %I t [ 1 0 0 1 15 62 ] concat %I 273 466 313 474 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 265 466 329 474 Rect End End %I eop Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 175 150 ] concat %I 4 297 618 313 618 313 594 329 594 4 MLine %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 256 120 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 312 95.9996 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 368 95.9996 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I Line %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 166 ] concat %I 489 578 521 578 Line %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 166 ] concat %I 6 409 602 393 602 393 618 561 618 561 578 545 578 6 MLine %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 71.9998 104 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.764706 0.764706 0.764706 SetCBg %I p 1 SetP %I t [ 1 0 0 1 15 62 ] concat %I 273 466 313 474 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 265 466 329 474 Rect End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 95.9999 -64.0002 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 -34 ] concat %I 4 297 618 313 618 313 594 329 594 4 MLine %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 192 -64.0002 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 248 -88.0002 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 304 -88.0002 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I Line %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -25 -18 ] concat %I 489 578 521 578 Line %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 286 ] concat %I 6 273 298 257 298 257 314 313 314 313 298 297 298 6 MLine %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 360 -88.0002 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 39 286 ] concat %I 6 345 298 329 298 329 314 553 314 553 274 537 274 6 MLine %I 1 End Begin %I Line %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 -18 ] concat %I 489 578 521 578 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -32 55.9997 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 514 201 594 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 46 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 30 ] concat %I 177 578 201 578 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 14 ] concat %I 177 578 201 578 Line %I 1 End End %I eop Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 417 418 401 418 Line %I 1 End Begin %I MLine %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 3 417 434 401 434 401 418 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 3 473 418 457 418 457 434 3 MLine %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 473 434 457 434 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 529 434 513 434 Line %I 1 End Begin %I MLine %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 3 529 418 513 418 513 434 3 MLine %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 505 546 505 570 Line %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 3 505 546 513 546 513 570 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 4 337 618 337 602 329 602 329 578 4 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 3 337 634 321 634 321 578 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 5 481 634 457 634 457 626 417 626 417 578 5 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 3 481 618 425 618 425 578 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 5 537 634 513 634 513 602 505 602 505 578 5 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 5 537 618 521 618 521 594 513 594 513 578 5 MLine %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 272 857 ] concat %I [ (struct) (hostd) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 504 809 ] concat %I [ (struct) (pkt) ] Text End Begin %I MLine %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 3 401 418 321 418 321 530 3 MLine %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 321 546 321 570 Line %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 62 ] concat %I 3 321 546 329 546 329 570 3 MLine %I 1 End Begin %I MLine %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 4 457 434 449 434 449 530 425 530 4 MLine %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 425 530 425 554 Line %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 3 425 530 417 530 417 554 3 MLine %I 1 End Begin %I MLine %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 31 78 ] concat %I 3 513 434 505 434 505 530 3 MLine %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 15 62 ] concat %I 241 714 273 714 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -48.0001 -152 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 761 ] concat %I [ (nref) (tid) (name) (arch) (...) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 700 ] concat %I [ (txq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 684 ] concat %I [ (opq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 668 ] concat %I [ (rxq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 652 ] concat %I [ (rxm) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 578 223 706 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 594 223 594 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 610 223 610 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 626 223 626 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 642 223 642 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -40.0001 95.9996 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 761 ] concat %I [ (nref) (tid) (name) (arch) (...) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 700 ] concat %I [ (txq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 684 ] concat %I [ (opq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 668 ] concat %I [ (rxq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 264 652 ] concat %I [ (rxm) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 578 223 706 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 594 223 594 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 610 223 610 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 626 223 626 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 175 642 223 642 Line %I 1 End End %I eop Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 81 62 ] concat %I 4 167 466 191 466 191 450 207 450 4 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 6 167 482 183 482 183 442 263 442 263 450 303 450 6 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 4 231 706 247 706 247 682 279 682 4 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 6 207 706 191 706 191 722 319 722 319 682 303 682 6 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 4 175 730 335 730 335 714 367 714 4 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 4 103 626 239 626 239 666 279 666 4 MLine %I 1 End Begin %I MLine %I b 65535 1 1 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 81 62 ] concat %I 8 79 626 55 626 55 554 111 554 111 594 319 594 319 666 303 666 8 MLine %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 128 731 ] concat %I [ (Global) (Retry) (queue) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-100-75-75-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 136 780 ] concat %I [ (opq) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 70 62 ] concat %I 58 706 90 722 Rect End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 78 62 ] concat %I 3 82 714 90 714 90 650 3 MLine %I 1 End End %I eop showpage end %%EndDocument endTexFig 249 2080 a Fo(Figure)13 b(7.10)249 2117 y Fy(Host)f(descriptors)c (with)k(send)e(queues)p eop %%Page: 116 135 116 134 bop 249 251 a Fu(116)1356 b(Chapter)13 b(7)249 507 y FA(estimate)g(according)h(to)g(the)g(form)o(ula)695 584 y Fn(hd)p 743 584 13 2 v 15 w(r)q(tt)806 590 y Fk(n)840 584 y FA(=)e(0)p Fn(:)p FA(75)c Ft(\003)h Fn(hd)p 1045 584 V 14 w(r)q(tt)1107 590 y Fk(n)p Fj(\000)p Fl(1)1181 584 y FA(+)h(0)p Fn(:)p FA(25)e Ft(\003)h FA(\001)p Fn(t)p FA(.)291 660 y(When)17 b(the)h(ac)o(kno)o(wledgmen)o(t)e(for)h(a)g(pac) o(k)o(et)h(arriv)o(es,)g(the)g(pac)o(k)o(et)g(is)f(remo)o(v)o(ed)g (from)e Fs(hd)p 1765 660 14 2 v 16 w(opq)249 714 y FA(and)j Fs(opq)f FA(and)g(discarded.)31 b(Eac)o(h)18 b(pac)o(k)o(et)g(has)g(a)g (retry)g(timer)f(and)h(coun)o(t,)g(and)g(eac)o(h)g(is)g(resen)o(t)249 768 y(un)o(til)13 b(ac)o(kno)o(wledged)h(b)o(y)f(the)h(foreign)f(p)o (vmd.)k(The)d(timer)f(starts)h(at)g(3)9 b Ft(\003)f Fn(hd)p 1475 768 13 2 v 15 w(r)q(tt)p FA(,)13 b(and)g(doubles)h(for)249 822 y(eac)o(h)i(retry)g(up)f(to)g(18)g(seconds.)24 b Fs(hd)p 836 822 14 2 v 15 w(rtt)14 b FA(is)h(limited)e(to)i(nine)h (seconds,)g(and)f(bac)o(k)o(o\013)g(is)g(b)q(ounded)249 876 y(in)g(order)i(to)e(allo)o(w)f(at)i(least)f(10)g(pac)o(k)o(ets)i (to)e(b)q(e)i(sen)o(t)f(to)f(a)h(host)g(b)q(efore)g(giving)e(up.)23 b(After)17 b(three)249 930 y(min)o(utes)c(of)g(resending)i(with)f(no)f (ac)o(kno)o(wledgmen)o(t,)f(a)i(pac)o(k)o(et)g(expires.)291 984 y(If)f(a)h(pac)o(k)o(et)h(expires)g(as)f(a)g(result)h(of)f (timeout,)e(the)j(foreign)f(p)o(vmd)e(is)j(assumed)e(to)h(b)q(e)h(do)o (wn)f(or)249 1038 y(unreac)o(hable,)g(and)g(the)g(lo)q(cal)f(p)o(vmd)g (giv)o(es)g(up)h(on)g(it,)f(calling)g Fs(hostfailentry\(\))249 1121 y Fr(7.5.3)48 b(Pvmd-T)l(ask)15 b(and)h(T)l(ask-T)l(ask)249 1204 y FA(A)e(task)h(talks)e(to)h(its)h(p)o(vmd)d(and)i(other)h(tasks)g (through)f(TCP)g(so)q(c)o(k)o(ets.)20 b(TCP)14 b(is)h(used)g(b)q (ecause)g(it)249 1258 y(deliv)o(ers)g(data)f(reliably)m(.)k(UDP)d(can)g (lose)f(pac)o(k)o(ets)i(ev)o(en)f(within)f(a)g(host.)20 b(Unreliable)14 b(deliv)o(ery)h(re-)249 1312 y(quires)d(retry)h(\(with) e(timers\))g(at)g(b)q(oth)h(ends:)18 b(since)12 b(tasks)g(can't)g(b)q (e)g(in)o(terrupted)h(while)e(computing)249 1366 y(to)j(p)q(erform)f (I/O,)g(w)o(e)h(can't)g(use)h(UDP)m(.)291 1420 y(Implemen)o(ting)9 b(a)j(pac)o(k)o(et)h(service)h(o)o(v)o(er)f(TCP)f(is)h(simple)e(b)q (ecause)j(of)e(its)h(reliable)f(deliv)o(ery)m(.)17 b(The)249 1474 y(pac)o(k)o(et)d(header)h(is)f(sho)o(wn)g(in)g(Figure)g(7.11.)j (No)d(sequence)i(n)o(um)o(b)q(ers)e(are)g(needed,)h(and)f(only)f (\015ags)249 1527 y FB(SOM)h FA(and)g FB(EOM)g FA(\(these)h(ha)o(v)o(e) f(the)g(same)f(meaning)f(as)i(in)g(Section)g(7.5.2\).)i(Since)f(TCP)f (pro)o(vides)249 1581 y(no)e(record)i(marks)d(to)i(distinguish)f(bac)o (k-to-bac)o(k)g(pac)o(k)o(ets)h(from)e(one)i(another,)f(the)h(length)g (is)f(sen)o(t)249 1635 y(in)17 b(the)h(header.)30 b(Eac)o(h)17 b(side)h(main)o(tains)d(a)i(FIF)o(O)h(of)f(pac)o(k)o(ets)h(to)f(send,)i (and)e(switc)o(hes)i(b)q(et)o(w)o(een)249 1689 y(reading)14 b(the)g(so)q(c)o(k)o(et)h(when)f(data)g(is)g(a)o(v)n(ailable)d(and)j (writing)f(when)i(there)g(is)f(space.)249 1742 y 25481245 6441352 6578176 27299430 32035717 33746042 startTexFig 249 1742 a %%BeginDocument: fig7-tdphdr.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 54 ] concat %I 38 602 550 626 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 30 ] concat %I 38 602 550 626 Rect End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 114 6 ] concat %I 38 602 550 626 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 144 672 ] concat %I [ (0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 144 648 ] concat %I [ (4) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 144 624 ] concat %I [ (8) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 138 592 ] concat %I [ (12) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 160 696 ] concat %I [ (Byte 0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 288 696 ] concat %I [ (1) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 416 696 ] concat %I [ (2) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 544 696 ] concat %I [ (3) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 367.5 672 ] concat %I [ (Destination TID) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 380 648 ] concat %I [ (Source TID) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 66 94 ] concat %I 86 474 598 514 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 66 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -46 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -30 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -14 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 2 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 18 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 34 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 50 62 ] concat %I 214 546 214 506 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 267 577.5 ] concat %I [ (SOM) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 6.12323e-17 1 -1 6.12323e-17 251 577 ] concat %I [ (EOM) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 454.5 594 ] concat %I [ (unused) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 372.5 624 ] concat %I [ (Packet Length) ] Text End End %I eop showpage end %%EndDocument endTexFig 249 2212 a Fo(Figure)f(7.11)249 2249 y Fy(Pvmd-task)c(pac)o(k)o(et)h (header)291 2346 y FA(The)i(main)d(dra)o(wbac)o(k)j(to)f(TCP)h(\(as)g (opp)q(osed)g(to)f(UDP\))h(is)g(that)f(more)g(system)g(calls)h(are)g (needed)249 2400 y(to)17 b(transfer)h(eac)o(h)f(pac)o(k)o(et.)28 b(With)16 b(UDP)m(,)g(a)g(single)h Fs(sendto\(\))e FA(and)i(single)f Fs(recvfrom\(\))f FA(are)j(re-)249 2454 y(quired.)h(With)14 b(TCP)m(,)f(a)h(pac)o(k)o(et)h(can)f(b)q(e)h(sen)o(t)g(b)o(y)f(a)g (single)g Fs(write\(\))e FA(call,)h(but)i(m)o(ust)e(b)q(e)i(receiv)o (ed)249 2508 y(b)o(y)f(t)o(w)o(o)f Fs(read\(\))g FA(calls,)g(the)h (\014rst)h(to)f(get)g(the)g(header)h(and)f(the)g(second)h(to)f(get)g (the)h(data.)p eop %%Page: 117 136 117 135 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(117)291 507 y FA(When)17 b(tra\016c)h(on)f(the)i(connection)f(is)f (hea)o(vy)m(,)h(a)f(simple)f(optimization)f(reduces)20 b(the)e(a)o(v)o(erage)249 561 y(n)o(um)o(b)q(er)e(of)f(reads)j(bac)o(k) e(to)g(ab)q(out)h(one)f(p)q(er)h(pac)o(k)o(et.)26 b(If,)16 b(when)h(reading)g(the)g(pac)o(k)o(et)f(b)q(o)q(dy)m(,)g(the)249 615 y(requested)k(length)d(is)h(increased)g(b)o(y)g(the)g(size)g(of)f (a)g(pac)o(k)o(et)h(header,)h(the)f(read)g(ma)o(y)e(succeed)j(in)249 669 y(getting)12 b(b)q(oth)g(the)h(pac)o(k)o(et)f(b)q(o)q(dy)g(and)g (header)h(of)e(the)i(next)g(pac)o(k)o(et)f(at)g(once.)18 b(W)m(e)12 b(ha)o(v)o(e)f(the)i(header)249 723 y(for)h(the)g(next)g (pac)o(k)o(et)h(for)e(free)i(and)f(can)g(rep)q(eat)h(this)f(pro)q (cess.)1258 708 y Fl(2)291 777 y FA(V)m(ersion)c(3.3)g(in)o(tro)q (duced)h(the)h(use)f(of)f(Unix-domain)e(stream)i(so)q(c)o(k)o(ets)i(as) f(an)f(alternativ)o(e)g(to)h(TCP)249 831 y(for)16 b(lo)q(cal)f(comm)o (unicatio)o(n,)f(to)h(impro)o(v)o(e)g(latency)h(and)g(transfer)h(rate)f (\(t)o(ypically)f(b)o(y)h(a)g(factor)g(of)249 885 y(t)o(w)o(o\).)i(If) 13 b(enabled)h(\(the)g(system)g(is)f(built)g(without)h(the)g Fs(NOUNIXDOM)e FA(option\),)g(stream)i(so)q(c)o(k)o(ets)h(are)249 939 y(used)g(b)q(et)o(w)o(een)g(the)g(p)o(vmd)d(and)i(tasks)g(as)g(w)o (ell)f(as)h(b)q(et)o(w)o(een)h(tasks)g(on)e(the)i(same)e(host.)249 1059 y FD(7.6)52 b(Message)17 b(Routing)249 1167 y Fr(7.6.1)48 b(Pvmd)249 1250 y(P)o(ac)o(k)o(et)10 b(Bu\013ers)40 b FA(P)o(ac)o(k)o(et)11 b(descriptors)g(\()p Fs(struct)21 b(pkt)p FA(\))10 b(trac)o(k)g(message)g(fragmen)o(ts)e(through)i(the) 249 1304 y(p)o(vmd.)16 b(Fields)d Fs(pk)p 548 1304 14 2 v 15 w(buf)p FA(,)f Fs(pk)p 697 1304 V 16 w(max)p FA(,)g Fs(pk)p 847 1304 V 15 w(dat)g FA(and)h Fs(pk)p 1064 1304 V 15 w(len)f FA(are)i(used)g(in)e(the)h(same)g(w)o(a)o(ys)f(as)h (similarly)249 1358 y(named)j(\014elds)i(of)e(a)h(frag,)g(describ)q(ed) i(in)e(Section)g(7.2.1.)26 b(Besides)19 b(data,)e(pkts)h(con)o(tain)e (state)i(to)249 1412 y(op)q(erate)d(the)f(p)o(vmd-p)o(vmd)d(proto)q (col.)249 1495 y Fr(Message)g(Routing)39 b FA(Messages)12 b(are)e(sen)o(t)h(b)o(y)e(calling)g Fs(sendmessage\(\))p FA(,)e(whic)o(h)j(routes)h(b)o(y)f(desti-)249 1549 y(nation)f(address.) 18 b(Messages)12 b(for)d(other)i(p)o(vmds)d(or)i(tasks)h(are)f(link)o (ed)f(to)h(pac)o(k)o(et)g(descriptors)i(and)d(at-)249 1603 y(tac)o(hed)j(to)g(a)f(send)i(queue.)18 b(If)11 b(the)h(p)o(vmd)e(addresses)k(a)d(message)g(to)h(itself,)f Fs(sendmessage\(\))e FA(passes)249 1657 y(the)18 b(whole)f(message)g (descriptor)i(to)e Fs(netentry\(\))p FA(,)f(a)o(v)o(oiding)f(the)j(pac) o(k)o(et)g(la)o(y)o(er)f(en)o(tirely)m(.)28 b(This)249 1711 y(lo)q(opbac)o(k)13 b(in)o(terface)h(is)g(used)g(often)g(b)o(y)f (the)h(p)o(vmd.)j(During)12 b(a)i(complex)e(op)q(eration,)h Fs(netentry\(\))249 1765 y FA(ma)o(y)f(b)q(e)j(reen)o(tered)h(sev)o (eral)e(times)f(as)h(the)h(p)o(vmd)d(sends)j(itself)f(messages.)291 1819 y(Messages)e(to)f(the)g(p)o(vmd)e(are)j(reassem)o(bled)f(from)e (pac)o(k)o(ets)i(in)g(message)f(reassem)o(bly)g(bu\013ers,)j(one)249 1873 y(for)j(eac)o(h)i(lo)q(cal)d(task)i(and)g(remote)f(p)o(vmd.)25 b(Completed)16 b(messages)g(are)i(passed)f(to)g(en)o(try)g(p)q(oin)o (ts)249 1927 y(\(Section)d(7.2.4\).)249 2010 y Fr(P)o(ac)o(k)o(et)g (Routing)39 b FA(A)14 b(graph)f(of)h(pac)o(k)o(et)g(and)f(message)g (routing)g(inside)h(the)g(p)o(vmd)e(is)i(sho)o(wn)f(in)249 2064 y(Figure)h(7.12.)19 b(P)o(ac)o(k)o(ets)c(are)f(receiv)o(ed)i(from) d(the)i(net)o(w)o(ork)f(b)o(y)g Fs(netinput\(\))e FA(directly)j(in)o (to)f(bu\013ers)249 2118 y(long)d(enough)h(to)f(hold)g(the)i(largest)f (pac)o(k)o(et)g(the)g(p)o(vmd)f(will)f(receiv)o(e)j(\(its)f(MTU)g(in)f (the)h(host)g(table\).)249 2172 y(P)o(ac)o(k)o(ets)k(from)d(lo)q(cal)h (tasks)i(are)g(read)f(b)o(y)g Fs(loclinput\(\))p FA(,)d(whic)o(h)j (creates)i(a)e(bu\013er)h(large)f(enough)249 2226 y(for)e(eac)o(h)g (pac)o(k)o(et)h(after)f(it)f(reads)i(the)g(header.)19 b(T)m(o)12 b(route)h(a)g(pac)o(k)o(et,)g(the)h(p)o(vmd)d(c)o(hains)i (it)g(on)o(to)f(the)249 2280 y(queue)18 b(for)e(its)g(destination.)27 b(If)16 b(a)g(pac)o(k)o(et)h(is)g(m)o(ulticast)e(\(see)j(Section)f (7.6.4\),)e(the)i(descriptor)h(is)249 2334 y(replicated,)f(coun)o(ting) e(extra)h(references)j(on)d(the)g(underlying)g(databuf.)23 b(One)17 b(cop)o(y)f(is)f(placed)h(in)249 2388 y(eac)o(h)e(send)h (queue.)k(After)c(the)f(last)g(cop)o(y)g(of)f(the)h(pac)o(k)o(et)h(is)e (sen)o(t,)i(the)f(databuf)g(is)f(freed.)p 249 2435 638 2 v 295 2462 a Fe(2)313 2473 y Fy(This)20 b(w)o(as)g(once)f(implemen)o (ted)o(,)h(but)f(w)o(as)i(remo)o(v)o(ed)d(while)i(the)f(co)q(de)g(w)o (as)i(up)q(dated)c(and)j(hasn't)f(b)q(een)249 2507 y(rein)o(tro)q (duced)o(.)p eop %%Page: 118 137 118 136 bop 249 251 a Fu(118)1356 b(Chapter)13 b(7)249 466 y 24581339 13877285 7630684 25720668 32233062 39600619 startTexFig 249 466 a %%BeginDocument: fig7-pktflo.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 53 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /Courier-Bold reencodeISO def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 160 627 ] concat %I [ (work\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 288 747 ] concat %I [ (netinput\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 288 627 ] concat %I [ (loclinput\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 448 627 ] concat %I [ (loclinpkt\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 592 779 ] concat %I [ (netentry\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 592 627 ] concat %I [ (loclentry\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 592 707 ] concat %I [ (schentry\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 160 819 ] concat %I [ (sendmessage\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 288 667 ] concat %I [ (mesg_to_task\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 448 819 ] concat %I [ (pkt_to_host\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 288 587 ] concat %I [ (netoutput\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 288 547 ] concat %I [ (locloutput\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-bold-r-normal--*-120-75-75-*-*-*-* Courier-Bold 12 SetF %I t [ 1 0 0 1 592 667 ] concat %I [ (t_txq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-bold-r-normal--*-120-75-75-*-*-*-* Courier-Bold 12 SetF %I t [ 1 0 0 1 592 819 ] concat %I [ (hd_txq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-bold-r-normal--*-120-75-75-*-*-*-* Courier-Bold 12 SetF %I t [ 1 0 0 1 160 587 ] concat %I [ (hd_txq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-bold-r-normal--*-120-75-75-*-*-*-* Courier-Bold 12 SetF %I t [ 1 0 0 1 160 547 ] concat %I [ (t_txq) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 592 555 ] concat %I [ (Function call) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 592 587 ] concat %I [ (Packet) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 592 571 ] concat %I [ (Message) ] Text End Begin %I Line %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -20.0002 -99.0002 ] concat %I 524 683 596 683 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg DkGray 0.501961 0.501961 0.501961 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -20.0002 -115 ] concat %I 524 683 596 683 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -20.0002 -131 ] concat %I 524 683 596 683 Line %I 1 End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.994382 0 0 0.878378 -144.427 41.473 ] concat %I 636 563 812 635 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 448 667 ] concat %I [ (pkt_to_task\(\)) ] Text End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg DkGray 0.501961 0.501961 0.501961 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 258 714 578 714 Line %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg DkGray 0.501961 0.501961 0.501961 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 3 554 682 554 642 578 642 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg DkGray 0.501961 0.501961 0.501961 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 3 554 554 554 634 578 634 3 MLine %I 1 End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg DkGray 0.501961 0.501961 0.501961 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 4 250 746 258 746 258 602 274 602 4 MLine %I 1 End Begin %I Line %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 538 754 578 754 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal--*-120-75-75-*-*-*-* Courier 12 SetF %I t [ 1 0 0 1 448 747 ] concat %I [ (netinpkt\(\)) ] Text End Begin %I MLine %I b 65535 1 0 1 [] 0 SetB %I cfg DkGray 0.501961 0.501961 0.501961 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 4 514 682 554 682 554 706 578 706 4 MLine %I 1 End Begin %I Line %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 538 602 578 602 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg DkGray 0.501961 0.501961 0.501961 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 522 554 578 554 Line %I 1 End Begin %I Line %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 386 602 434 602 Line %I 1 End Begin %I Line %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 354 682 434 682 Line %I 1 End Begin %I Line %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 250 754 434 754 Line %I 1 End Begin %I Line %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 362 562 434 562 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 202 562 274 562 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 202 562 274 674 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 202 562 274 530 Line %I 1 End Begin %I Line %I b 65535 0 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 6 62 ] concat %I 202 562 274 490 Line %I 1 End Begin %I Line %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 50 62 ] concat %I 158 522 230 522 Line %I 1 End Begin %I Line %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 50 62 ] concat %I 150 482 230 482 Line %I 1 End Begin %I MLine %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 50 62 ] concat %I 6 470 674 486 674 486 658 366 658 366 610 390 610 6 MLine %I 1 End Begin %I MLine %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 50 62 ] concat %I 6 478 562 494 562 494 578 358 578 358 594 390 594 6 MLine %I 1 End Begin %I MLine %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 50 62 ] concat %I 3 358 594 358 674 390 674 3 MLine %I 1 End Begin %I MLine %I b 65520 1 0 1 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 50 62 ] concat %I 3 358 674 358 746 390 746 3 MLine %I 1 End End %I eop showpage end %%EndDocument endTexFig 249 1407 a Fo(Figure)g(7.12)249 1444 y Fy(P)o(ac)o(k)o(et)d(and)h (message)e(routing)h(in)h(p)o(vmd)249 1567 y Fr(Refragmen)o(tatio)o(n) 38 b FA(Messages)23 b(are)e(generally)g(built)f(with)h(fragmen)o(t)e (length)i(equal)g(to)f(the)249 1621 y(MTU)d(of)e(the)j(host's)e(p)o (vmd,)f(allo)o(wing)f(them)i(to)g(b)q(e)h(forw)o(arded)g(without)f (refragmen)o(tation.)24 b(In)249 1675 y(some)14 b(cases,)h(the)g(p)o (vmd)e(can)i(receiv)o(e)h(a)e(pac)o(k)o(et)h(\(from)e(a)h(task\))h(to)q (o)f(long)f(to)i(b)q(e)g(sen)o(t)g(to)g(another)249 1729 y(p)o(vmd.)j(The)d(p)o(vmd)d(refragmen)o(ts)i(the)h(pac)o(k)o(et)g(b)o (y)f(replicating)g(its)g(descriptor)i(as)e(man)o(y)f(times)g(as)249 1783 y(necessary)m(.)24 b(A)15 b(single)g(databuf)g(is)g(shared)h(b)q (et)o(w)o(een)h(the)f(descriptors.)24 b(The)15 b Fs(pk)p 1543 1783 14 2 v 16 w(dat)f FA(and)h Fs(pk)p 1765 1783 V 16 w(len)249 1837 y FA(\014elds)g(of)e(the)i(descriptors)g(co)o(v)o (er)g(successiv)o(e)h(c)o(h)o(unks)e(of)g(the)g(original)f(pac)o(k)o (et,)h(eac)o(h)g(c)o(h)o(unk)g(small)249 1891 y(enough)i(to)f(send.)24 b(The)16 b Fs(SOM)e FA(and)i Fs(EOM)e FA(\015ags)i(are)g(adjusted)g (\(if)e(the)j(original)c(pac)o(k)o(et)j(is)f(the)h(start)249 1945 y(or)f(end)g(of)g(a)f(message\).)21 b(A)o(t)15 b(send)h(time,)d Fs(netoutput\(\))g FA(sa)o(v)o(es)i(the)h(data)e(under)i(where)g(it)e (writes)249 1999 y(the)h(pac)o(k)o(et)f(header,)g(sends)h(the)g(pac)o (k)o(et,)f(and)f(then)i(restores)h(the)e(data.)249 2082 y Fr(7.6.2)48 b(Pvmd)15 b(and)g(F)l(oreign)f(T)l(asks)249 2165 y FA(Pvmds)f(usually)g(don't)g(comm)o(unicate)f(with)h(foreign)h (tasks)g(\(those)h(on)e(other)i(hosts\).)j(The)d(p)o(vmd)249 2219 y(has)g(message)f(reassem)o(bly)h(bu\013ers)h(for)e(eac)o(h)i (foreign)e(p)o(vmd)f(and)i(eac)o(h)g(task)g(it)f(manages.)19 b(What)249 2273 y(it)12 b(do)q(esn't)h(w)o(an)o(t)g(is)f(to)g(ha)o(v)o (e)h(reassem)o(bly)f(bu\013ers)i(for)e(foreign)g(tasks.)18 b(T)m(o)12 b(free)i(up)e(the)h(reassem)o(bly)249 2327 y(bu\013er)j(for)f(a)g(foreign)g(task)g(\(if)g(the)h(task)f(dies\),)h (the)g(p)o(vmd)d(w)o(ould)i(ha)o(v)o(e)g(to)g(request)i(noti\014cation) 249 2381 y(from)12 b(the)j(task's)f(p)o(vmd,)d(causing)j(extra)h(comm)o (unicati)o(on.)291 2435 y(F)m(or)k(the)g(sak)o(e)h(of)f(simplicit)o(y)e (the)j(p)o(vmd)d(lo)q(cal)i(to)g(the)h(sending)f(task)h(serv)o(es)h(as) e(a)g(message)249 2489 y(rep)q(eater.)h(The)14 b(message)e(is)i (reassem)o(bled)f(b)o(y)g(the)h(task's)f(lo)q(cal)g(p)o(vmd)e(as)j(if)e (it)h(w)o(ere)h(the)g(receiv)o(er,)p eop %%Page: 119 138 119 137 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(119)249 507 y FA(then)11 b(forw)o(arded)g(all)e(at)i(once)g(to)f(the) h(destination)g(p)o(vmd,)e(whic)o(h)h(reassem)o(bles)h(the)g(message)g (again.)249 561 y(The)j(source)i(address)f(is)e(preserv)o(ed,)j(so)e (the)g(sender)i(can)e(b)q(e)h(iden)o(ti\014ed.)291 615 y(Libp)o(vm)10 b(main)o(tains)h(dynamic)g(reassem)o(bly)h(bu\013ers,)i (so)f(messages)g(from)e(p)o(vmd)g(to)i(task)g(do)f(not)249 669 y(cause)j(a)f(problem.)249 752 y Fr(7.6.3)48 b(Libp)o(vm)249 835 y FA(F)m(our)16 b(functions)h(handle)g(all)e(pac)o(k)o(et)i (tra\016c)g(in)o(to)f(and)g(out)h(of)f(libp)o(vm.)23 b Fs(mroute\(\))15 b FA(is)i(called)f(b)o(y)249 889 y(higher-lev)o(el) 11 b(functions)g(suc)o(h)h(as)g Fs(pvm)p 853 889 14 2 v 15 w(send\(\))e FA(and)h Fs(pvm)p 1154 889 V 15 w(recv\(\))f FA(to)h(cop)o(y)g(messages)g(in)o(to)g(and)g(out)249 943 y(of)16 b(the)h(task.)26 b(It)17 b(establishes)h(an)o(y)e (necessary)i(routes)g(b)q(efore)f(calling)e Fs(mxfer\(\))p FA(.)25 b Fs(mxfer\(\))15 b FA(p)q(olls)249 997 y(for)i(messages,)h (optionally)e(blo)q(c)o(king)g(un)o(til)h(one)h(is)f(receiv)o(ed)i(or)e (un)o(til)g(a)g(sp)q(eci\014ed)i(timeout.)28 b(It)249 1051 y(calls)12 b Fs(mxinput\(\))e FA(to)i(cop)o(y)g(fragmen)o(ts)f(in) o(to)g(the)i(task)f(and)g(reassem)o(ble)g(messages.)17 b(In)12 b(the)h(generic)249 1105 y(v)o(ersion)f(of)f(PVM,)g Fs(mxfer\(\))g FA(uses)h Fs(select\(\))e FA(to)i(p)q(oll)e(all)h (routes)h(\(so)q(c)o(k)o(ets\))i(in)d(order)h(to)g(\014nd)f(those)249 1159 y(ready)17 b(for)f(input)g(or)g(output.)26 b Fs(pvmmctl\(\))14 b FA(is)j(called)f(b)o(y)g Fs(mxinput\(\))e FA(when)j(a)f(con)o(trol)g (message)249 1213 y(\(Section)e(7.2.5\))f(is)h(receiv)o(ed.)249 1296 y Fr(Direct)e(Message)h(Routing)39 b FA(Direct)12 b(routing)f(allo)o(ws)g(one)h(task)g(to)f(send)i(messages)f(to)g (another)249 1350 y(through)20 b(a)g(TCP)g(link,)g(a)o(v)o(oiding)e (the)i(o)o(v)o(erhead)h(of)e(forw)o(arding)g(through)h(the)g(p)o(vmds.) 35 b(It)20 b(is)249 1404 y(implemen)o(ted)e(en)o(tirely)j(in)f(libp)o (vm,)g(using)g(the)i(notify)d(and)i(con)o(trol)f(message)g(facilities.) 38 b(By)249 1458 y(default,)12 b(a)h(task)f(routes)i(messages)f(to)f (its)h(p)o(vmd,)e(whic)o(h)h(forw)o(ards)h(them)f(on.)17 b(If)12 b(direct)i(routing)e(is)249 1512 y(enabled)h(\()p Fs(PvmRouteDirect)p FA(\))c(when)k(a)f(message)g(\(addressed)j(to)d(a)g (task\))g(is)h(passed)g(to)f Fs(mroute\(\))p FA(,)249 1566 y(it)e(attempts)g(to)g(create)i(a)e(direct)h(route)g(if)f(one)g (do)q(esn't)h(already)f(exist.)18 b(The)10 b(route)h(ma)o(y)e(b)q(e)i (gran)o(ted)249 1620 y(or)h(refused)i(b)o(y)e(the)i(destination)e (task,)g(or)h(fail)e(\(if)g(the)i(task)g(do)q(esn't)g(exist\).)18 b(The)13 b(message)f(is)g(then)249 1674 y(passed)j(to)f Fs(mxfer\(\))p FA(.)291 1728 y(Libp)o(vm)e(main)o(tains)h(a)h(proto)q (col)h(con)o(trol)f(blo)q(c)o(k)h(\()p Fs(struct)20 b(ttpcb)p FA(\))14 b(for)h(eac)o(h)g(activ)o(e)g(or)f(denied)249 1782 y(connection,)j(in)e(list)h Fs(ttlist)p FA(.)23 b(The)16 b(state)h(diagram)c(for)j(a)g(ttp)q(cb)h(is)e(sho)o(wn)h(in)g (Figure)g(7.13.)23 b(T)m(o)249 1836 y(request)12 b(a)d(connection,)i Fs(mroute\(\))d FA(mak)o(es)h(a)h(ttp)q(cb)g(and)g(so)q(c)o(k)o(et,)h (then)g(sends)g(a)e Fs(TC)p 1564 1836 V 16 w(CONREQ)f FA(con)o(trol)249 1890 y(message)k(to)g(the)h(destination)e(via)h(the)g (default)g(route.)18 b(A)o(t)12 b(the)h(same)e(time,)g(it)h(sends)h(a)f Fs(TM)p 1700 1890 V 15 w(NOTIFY)249 1944 y FA(message)i(to)h(the)g(p)o (vmd,)e(to)h(b)q(e)h(noti\014ed)g(if)f(the)h(destination)f(task)h (exits,)g(with)f(closure)h(\(message)249 1998 y(tag\))20 b Fs(TC)p 390 1998 V 15 w(TASKEXIT)p FA(.)d(Then)k(it)e(puts)h(the)h (ttp)q(cb)f(in)g(state)g Fs(TTCONWAIT)p FA(,)d(and)j(calls)f Fs(mxfer\(\))f FA(in)249 2051 y(blo)q(c)o(king)13 b(mo)q(de)g(rep)q (eatedly)i(un)o(til)e(the)h(state)h(c)o(hanges.)291 2105 y(When)g(the)g(destination)g(task)h(en)o(ters)g Fs(mxfer\(\))e FA(\(for)h(example,)e(to)i(receiv)o(e)h(a)f(message\),)g(it)g(re-)249 2159 y(ceiv)o(es)e(the)g Fs(TC)p 482 2159 V 16 w(CONREQ)e FA(message.)17 b(The)c(request)h(is)e(gran)o(ted)h(if)e(its)i(routing)f (p)q(olicy)f(\()p Fs(pvmrouteopt)249 2213 y(!=)21 b(PvmDontRoute)p FA(\))11 b(and)i(implemen)o(tati)o(on)d(allo)o(w)h(a)i(direct)h (connection,)f(it)g(has)g(resources)i(a)o(v)n(ail-)249 2267 y(able,)h(and)g(the)h(proto)q(col)e(v)o(ersion)i(\()p Fs(TDPROTOCOL)p FA(\))d(in)i(the)g(request)i(matc)o(hes)e(its)g(o)o (wn.)24 b(It)16 b(mak)o(es)249 2321 y(a)j(ttp)q(cb)g(with)g(state)g Fs(TTGRNWAIT)p FA(,)e(creates)j(and)f(listens)g(on)f(a)h(so)q(c)o(k)o (et,)h(and)f(then)g(replies)g(with)249 2375 y(a)f Fs(TC)p 335 2375 V 16 w(CONACK)f FA(message.)31 b(If)19 b(the)g(destination)f (denies)i(the)f(connection,)h(it)e(nac)o(ks,)h(also)f(with)g(a)249 2429 y Fs(TC)p 296 2429 V 15 w(CONACK)e FA(message.)27 b(The)17 b(originator)f(receiv)o(es)i(the)g Fs(TC)p 1201 2429 V 15 w(CONACK)e FA(message,)h(and)f(either)i(op)q(ens)249 2483 y(the)e(connection)f(\()p Fs(state)21 b(=)h(TTOPEN)p FA(\))13 b(or)i(marks)f(the)h(route)h(denied)f(\()p Fs(state)21 b(=)h(TTDENY)p FA(\).)13 b(Then,)p eop %%Page: 120 139 120 138 bop 249 251 a Fu(120)1356 b(Chapter)13 b(7)249 507 y Fs(mroute\(\))i FA(passes)i(the)g(original)e(message)h(to)g Fs(mxfer\(\))p FA(,)f(whic)o(h)i(sends)g(it.)25 b(Denied)17 b(connections)249 561 y(are)d(cac)o(hed)h(in)f(order)g(to)g(prev)o(en)o (t)h(rep)q(eated)h(negotiation.)291 615 y(If)k(the)i(destination)e(do)q (esn't)i(exist,)g(the)g Fs(TC)p 1035 615 14 2 v 15 w(CONACK)e FA(message)h(nev)o(er)h(arriv)o(es)f(b)q(ecause)h(the)249 669 y Fs(TC)p 296 669 V 15 w(CONREQ)16 b FA(message)h(is)f(silen)o(tly) h(dropp)q(ed.)27 b(Ho)o(w)o(ev)o(er,)18 b(the)g Fs(TC)p 1302 669 V 15 w(TASKEXIT)d FA(message)i(generated)249 723 y(b)o(y)d(the)g(notify)f(system)h(arriv)o(es)g(in)f(its)h(place,)g (and)g(the)g(ttp)q(cb)h(state)g(is)e(set)i(to)f Fs(TTDENY)p FA(.)291 777 y(This)20 b(connect)i(sc)o(heme)e(also)g(w)o(orks)g(if)g (b)q(oth)g(ends)i(try)e(to)g(establish)h(a)f(connection)h(at)f(the)249 831 y(same)14 b(time.)k(They)d(b)q(oth)g(en)o(ter)h Fs(TTCONWAIT)p FA(,)c(and)i(when)h(they)g(receiv)o(e)h(eac)o(h)f(other's)g Fs(TC)p 1700 831 V 15 w(CONREQ)249 885 y FA(messages,)f(they)g(go)f (directly)h(to)g(the)h Fs(TTOPEN)d FA(state.)249 943 y 22639444 16103345 9012101 25918013 31641026 42034544 startTexFig 249 943 a %%BeginDocument: fig7-ttpcb-state.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Pict %I b 65535 1 0 0 [] 0 SetB %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 136.954 151 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 425 490 ] concat %I [ (OPEN) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 425 476 ] concat %I [ (link is up) ] Text End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 32 61 ] concat %I 384 399 443 433 Rect End End %I eop Begin %I Pict %I b 65535 1 0 0 [] 0 SetB %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 47.7812 311 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 353 257 ] concat %I [ (waiting to free) (PCB structure) ] Text End Begin %I Rect %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 32 61 ] concat %I 311 167 391 215 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 353 271 ] concat %I [ (DEAD) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 47 1 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 194.016 785 ] concat %I [ (CONWAIT) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.690963 0 0 0.99935 84.9572 92.4175 ] concat %I 152 643 272 697 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 194.016 773 ] concat %I [ (have requested) (expect ack or) (crossed request) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -19 1.06275 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 548 784.035 ] concat %I [ (GRNWAIT) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.946028 0 0 0.981162 155.875 107.976 ] concat %I 407 644 535 694 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 548 772.035 ] concat %I [ (have granted) (must accept\(\) when other) (connects) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 34.3058 12.4783 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 203.995 629.435 ] concat %I [ (DENY) ] Text End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.804835 0 0 0.956521 153.189 217.391 ] concat %I 58 390 168 434 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 203.995 617.435 ] concat %I [ (connection denied;) (do not try again) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 15 -20.0001 ] concat Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.71875 0 0 0.868421 182.187 164.21 ] concat %I 278 794 372 830 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 391 873 ] concat %I [ (\(no PCB\)) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -7.99997 -14.0001 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 276 868 ] concat %I [ (make ttpcb, socket) (send CONREQ) (post TaskExit notify) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 276 884 ] concat %I [ (Want connection) ] Text End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 71.0001 62 ] concat %I 205 810 291 810 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 3 -31.0001 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 503 895 ] concat %I [ (Receive CONREQ) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 503 881 ] concat %I [ (make ttpcb, socket) (send CONGRN) (listen\(\)) ] Text End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 66.0002 62 ] concat %I 437 823 519 823 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -19 -2 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 608 714 ] concat %I [ (Socket connects) ] Text End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 69.0003 62 ] concat %I 539 642 605 642 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 608 700 ] concat %I [ (accept\(\)) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 364 675 ] concat %I [ (Receive) (TASKEXIT) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 300 582 ] concat %I [ (Receive) (TASKEXIT) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 519 579 ] concat %I [ (Read EOF on sock,) (bad write) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 189 703 ] concat %I [ (Receive) (CONACK\(NACK\)) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 51 -2 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 386 789 ] concat %I [ (mroute\(\)) (cleans up) ] Text End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 73.0002 62 ] concat %I 313 731 357 731 Line %I 1 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -4 -13 ] concat Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 465 702 ] concat %I [ (connect\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-100-75-75-*-*-*-* Times-Roman 10 SetF %I t [ 1 0 0 1 465 736 ] concat %I [ (Receive) (CONACK\(ACK\)) (or CONREQ) ] Text End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 68 62 ] concat %I 397 644 472 644 Line %I 1 End End %I eop Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 68 62 ] concat %I 249 531 315 513 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 68.7814 62 ] concat %I 362 533 362 767 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 68 62 ] concat %I 243 670 478 584 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 68 62 ] concat %I 405 776 459 736 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 68 62 ] concat %I 320 778 250 736 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 64.4544 62 ] concat %I 518 669 518 592 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 70.4414 59 ] concat %I 208 669 208 593 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 68 62 ] concat %I 238 669 331 532 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 68 62 ] concat %I 491 542 411 513 Line %I 1 End End %I eop showpage end %%EndDocument endTexFig 249 2025 a Fo(Figure)h(7.13)249 2063 y Fy(T)m(ask-task)d(connection)f (state)h(diagram)249 2194 y Fr(7.6.4)48 b(Multicastin)o(g)249 2277 y FA(The)17 b(libp)o(vm)c(function)j Fs(pvm)p 711 2277 14 2 v 15 w(mcast\(\))f FA(sends)i(a)f(message)g(to)g(m)o(ultiple) e(destinations)i(sim)o(ultane-)249 2331 y(ously)m(.)21 b(The)16 b(curren)o(t)h(implemen)o(tatio)o(n)c(only)h(routes)i(m)o (ulticast)e(messages)h(through)h(the)g(p)o(vmds.)249 2385 y(It)c(uses)g(a)f(1:N)g(fanout)g(to)g(ensure)i(that)e(failure)g (of)g(a)g(host)h(do)q(esn't)f(cause)i(the)f(loss)f(of)g(an)o(y)g (messages)249 2439 y(\(other)17 b(than)f(ones)h(to)f(that)g(host\).)25 b(The)16 b(pac)o(k)o(et)h(routing)e(la)o(y)o(er)h(of)f(the)i(p)o(vmd)e (co)q(op)q(erates)i(with)249 2493 y(the)e(libp)o(vm)c(to)j(m)o (ulticast)e(a)i(message.)p eop %%Page: 121 140 121 139 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(121)291 507 y FA(T)m(o)13 b(form)g(a)h(m)o(ulticast)e(address)k(TID)e (\(GID\),)f(the)i(G)f(bit)g(is)g(set)i(\(refer)f(to)f(Figure)h(7.1\).)j (The)d(L)249 561 y(\014eld)f(is)g(assigned)h(b)o(y)e(a)h(coun)o(ter)h (that)f(is)g(incremen)o(ted)h(for)f(eac)o(h)g(m)o(ulticast,)e(so)i(a)g (new)h(m)o(ulticast)249 615 y(address)g(is)f(used)h(for)e(eac)o(h)i (message,)e(then)h(recycled.)291 669 y(T)m(o)e(initiate)g(a)h(m)o (ulticast,)e(the)j(task)f(sends)i(a)e Fs(TM)p 1070 669 14 2 v 15 w(MCA)f FA(message)h(to)g(its)g(p)o(vmd,)f(con)o(taining)g(a) h(list)249 723 y(of)i(recipien)o(t)h(TIDs.)24 b(The)16 b(p)o(vmd)e(creates)j(a)e(m)o(ulticast)f(descriptor)j(\()p Fs(struct)k(mca)p FA(\))15 b(and)h(GID.)e(It)249 777 y(sorts)g(the)f(addresses,)h(remo)o(v)o(es)e(b)q(ogus)h(ones,)g(and)g (duplicates)g(and)f(cac)o(hes)i(them)e(in)g(the)h(mca.)k(T)m(o)249 831 y(eac)o(h)c(destination)f(p)o(vmd)f(\(ones)j(with)e(destination)g (tasks\),)h(it)f(sends)i(a)e Fs(DM)p 1444 831 V 15 w(MCA)g FA(message)g(with)g(the)249 885 y(GID)f(and)h(destinations)h(on)e(that) i(host.)k(The)c(GID)e(is)h(sen)o(t)h(bac)o(k)f(to)g(the)h(task)f(in)f (the)i Fs(TM)p 1662 885 V 15 w(MCA)f FA(reply)249 939 y(message.)291 993 y(The)17 b(task)h(sends)g(the)g(m)o(ulticast)e (message)h(to)g(the)h(p)o(vmd,)e(addressed)j(to)e(the)h(GID.)e(As)i (eac)o(h)249 1047 y(pac)o(k)o(et)f(arriv)o(es,)h(the)f(routing)g(la)o (y)o(er)f(copies)i(it)e(to)h(eac)o(h)g(lo)q(cal)f(task)h(and)g(foreign) f(p)o(vmd.)26 b(When)249 1101 y(a)16 b(m)o(ulticast)e(pac)o(k)o(et)i (arriv)o(es)h(at)e(a)h(destination)g(p)o(vmd,)e(it)i(is)f(copied)h(to)g (eac)o(h)h(destination)e(task.)249 1155 y(P)o(ac)o(k)o(et)h(order)h(is) e(preserv)o(ed,)j(so)e(the)h(m)o(ulticast)d(address)j(and)f(data)f(pac) o(k)o(ets)i(arriv)o(e)e(in)h(order)g(at)249 1209 y(eac)o(h)e (destination.)k(As)13 b(it)g(forw)o(ards)h(m)o(ulticast)d(pac)o(k)o (ets,)j(eac)o(h)g(p)o(vmd)e(ea)o(v)o(esdrops)i(on)f(the)h(header)249 1263 y(\015ags.)k(When)c(it)g(sees)h(a)f(pac)o(k)o(et)g(with)g Fs(EOM)f FA(\015ag)g(set,)h(it)g(\015ushes)h(the)g(mca.)249 1383 y FD(7.7)52 b(T)l(ask)17 b(En)o(vironmen)o(t)249 1491 y Fr(7.7.1)48 b(En)o(vironmen)o(t)12 b(V)l(ariables)249 1574 y FA(Exp)q(erience)k(seems)d(to)h(indicate)f(that)h(inherited)g (en)o(vironmen)o(t)e(\(Unix)i Fs(environ)p FA(\))e(is)h(useful)h(to)f (an)249 1628 y(application.)23 b(F)m(or)15 b(example,)g(en)o(vironmen)o (t)g(v)n(ariables)g(can)i(b)q(e)f(used)h(to)f(distinguish)f(a)h(group)g (of)249 1682 y(related)f(tasks)f(or)g(to)g(set)g(debugging)g(v)n (ariables.)291 1728 y(PVM)k(mak)o(es)f(increasing)h(use)h(of)e(en)o (vironmen)o(t,)h(and)g(ma)o(y)e(ev)o(en)o(tually)h(supp)q(ort)i(it)f (ev)o(en)g(on)249 1773 y(mac)o(hines)c(where)i(the)f(concept)h(is)f (not)g(nativ)o(e.)20 b(F)m(or)15 b(no)o(w,)f(it)g(allo)o(ws)g(a)g(task) h(to)g(exp)q(ort)h(an)o(y)e(part)249 1819 y(of)h Fs(environ)f FA(to)h(tasks)h(spa)o(wned)g(b)o(y)g(it.)22 b(Setting)16 b(v)n(ariable)e Fs(PVM)p 1287 1819 V 15 w(EXPORT)g FA(to)i(the)g(names) f(of)f(other)249 1865 y(v)n(ariables)f(causes)j(them)d(to)g(b)q(e)i (exp)q(orted)g(through)f(spa)o(wn.)k(F)m(or)13 b(example,)g(setting)328 1944 y Fg(PVM_EXPO)o(RT=)o(DI)o(SPL)o(AY:)o(SH)o(ELL)249 2031 y FA(exp)q(orts)i(the)f(v)n(ariables)g Fs(DISPLAY)e FA(and)i Fs(SHELL)f FA(to)g(c)o(hildren)h(tasks)h(\(and)f Fs(PVM)p 1491 2031 V 15 w(EXPORT)e FA(to)q(o\).)291 2085 y(The)i(follo)o(wing)d(en)o(vironmen)o(t)i(v)n(ariables)g(are)h(used)h (b)o(y)f(PVM.)g(The)g(user)h(ma)o(y)d(set)j(these:)p 291 2159 1403 2 v 315 2196 a Fs(PVM)p 384 2196 14 2 v 16 w(ROOT)136 b FA(Ro)q(ot)13 b(installation)f(directory)315 2250 y Fs(PVM)p 384 2250 V 16 w(EXPORT)92 b FA(Names)13 b(of)g(en)o(vironmen)o(t)g(v)n(ariables)g(to)h(inherit)g(through)g(spa) o(wn)315 2304 y Fs(PVM)p 384 2304 V 16 w(DPATH)114 b FA(Default)13 b(sla)o(v)o(e)g(p)o(vmd)g(install)g(path)315 2358 y Fs(PVM)p 384 2358 V 16 w(DEBUGGER)48 b FA(P)o(ath)14 b(of)f(debugger)i(script)f(used)h(b)o(y)f(spa)o(wn)p 291 2376 1403 2 v 291 2447 a(The)g(follo)o(wing)d(v)n(ariables)i(are)i (set)f(b)o(y)g(PVM)g(and)g(should)g(not)g(b)q(e)g(mo)q(di\014ed:)p eop %%Page: 122 141 122 140 bop 249 251 a Fu(122)1356 b(Chapter)13 b(7)p 291 467 1199 2 v 315 505 a Fs(PVM)p 384 505 14 2 v 16 w(ARCH)55 b FA(PVM)14 b(arc)o(hitecture)i(name)315 559 y Fs(PVMSOCK)71 b FA(Address)15 b(of)e(the)i(p)o(vmd)d(lo)q(cal)h(so)q (c)o(k)o(et;)i(see)g(Section)f(7.4.2)315 613 y Fs(PVMEPID)71 b FA(Exp)q(ected)15 b(PID)f(of)f(a)h(spa)o(wned)g(task)315 667 y Fs(PVMTMASK)49 b FA(Libp)o(vm)11 b(T)m(race)k(mask)p 291 685 1199 2 v 249 747 a Fr(7.7.2)48 b(Standard)14 b(Input)g(and)h(Output)249 830 y FA(Eac)o(h)h(task)f(spa)o(wned)h (through)f(PVM)h(has)g Fs(/dev/null)d FA(op)q(ened)j(for)f FB(stdin)p FA(.)23 b(F)m(rom)13 b(its)j(paren)o(t,)f(it)249 884 y(inherits)e(a)g FB(stdout)h(sink)p FA(,)f(whic)o(h)g(is)g(a)f FB(\(TID,)i(c)n(o)n(de\))f FA(pair.)18 b(Output)13 b(on)g FB(stdout)g FA(or)g FB(stderr)f FA(is)h(read)g(b)o(y)249 938 y(the)g(p)o(vmd)d(through)i(a)g(pip)q(e,)g(pac)o(k)o(ed)g(in)o(to)g (PVM)g(messages)g(and)g(sen)o(t)h(to)f(the)g(TID,)g(with)f(message)249 992 y(tag)16 b(equal)f(to)h(the)g(co)q(de.)25 b(If)16 b(the)g(output)g(TID)g(is)f(set)i(to)f(zero)h(\(the)f(default)g(for)f (a)h(task)g(with)f(no)249 1046 y(paren)o(t\),)f(the)h(messages)f(go)f (to)h(the)g(master)g(p)o(vmd,)d(where)k(they)g(are)f(written)h(on)e (its)h(error)h(log.)291 1100 y(Children)f(spa)o(wned)h(b)o(y)f(a)g (task)g(inherit)g(its)g(stdout)h(sink.)k(Before)c(the)g(spa)o(wn,)f (the)h(paren)o(t)g(can)249 1154 y(use)e Fs(pvm)p 388 1154 14 2 v 15 w(setopt\(\))e FA(to)h(alter)h(the)g(output)f(TID)g(or)h (co)q(de.)18 b(This)12 b(do)q(esn't)h(a\013ect)g(where)h(the)f(output) 249 1208 y(of)i(the)g(paren)o(t)h(task)f(itself)g(go)q(es.)23 b(A)15 b(task)g(ma)o(y)e(set)j(output)g(TID)f(to)g(one)g(of)g(three)h (settings:)21 b(the)249 1262 y(v)n(alue)10 b(inherited)h(from)d(its)j (paren)o(t,)g(its)f(o)o(wn)g(TID,)g(or)g(zero.)18 b(It)10 b(can)h(set)g(output)g(co)q(de)g(only)e(if)h(output)249 1316 y(TID)h(is)g(set)h(to)f(its)h(o)o(wn)f(TID.)f(This)h(means)g(that) g(output)g(can't)h(b)q(e)f(assigned)h(to)f(an)g(arbitrary)g(task.)291 1370 y(F)m(our)h(t)o(yp)q(es)h(of)f(messages)h(are)g(sen)o(t)g(to)g(an) f(stdout)h(sink.)k(The)c(message)g(b)q(o)q(dy)f(formats)f(for)i(eac)o (h)249 1424 y(t)o(yp)q(e)h(are)h(as)f(follo)o(ws:)p 291 1497 1266 2 v 315 1529 a Fd(Sp)n(awn)p Fu(:)59 b Fg(\(code\))17 b Ff(f)433 b Fu(T)m(ask)13 b(has)h(b)q(een)f(spa)o(wned)718 1575 y Fg(int)18 b(tid,)205 b Fu(T)m(ask)13 b(id)718 1621 y Fg(int)18 b(-1,)225 b Fu(Signals)16 b(spa)o(wn)718 1666 y Fg(int)i(ptid)205 b Fu(TID)13 b(of)g(paren)o(t)492 1712 y Ff(g)315 1803 y Fd(Be)n(gin)p Fu(:)71 b Fg(\(code\))17 b Ff(f)433 b Fu(First)14 b(output)g(from)e(task)718 1849 y Fg(int)18 b(tid,)205 b Fu(T)m(ask)13 b(id)718 1895 y Fg(int)18 b(-2,)225 b Fu(Signals)16 b(task)d(creation)718 1940 y Fg(int)18 b(ptid)205 b Fu(TID)13 b(of)g(paren)o(t)492 1986 y Ff(g)315 2077 y Fd(Output)p Fu(:)49 b Fg(\(code\))17 b Ff(f)433 b Fu(Output)14 b(from)e(a)h(task)718 2123 y Fg(int)18 b(tid,)205 b Fu(T)m(ask)13 b(id)718 2169 y Fg(int)18 b(count,)165 b Fu(Length)14 b(of)f(output)g(fragmen)o(t)718 2214 y Fg(char)18 b(data[coun)o(t])46 b Fu(Output)14 b(fragmen)o(t)492 2260 y Ff(g)315 2351 y Fd(End)p Fu(:)98 b Fg(\(code\))17 b Ff(f)433 b Fu(Last)13 b(output)h(from)f(a)g(task)718 2397 y Fg(int)18 b(tid,)205 b Fu(T)m(ask)13 b(id)718 2443 y Fg(int)18 b(0)265 b Fu(Signals)16 b(EOF)492 2488 y Ff(g)p 291 2504 V eop %%Page: 123 142 123 141 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(123)291 507 y FA(The)11 b(\014rst)g(t)o(w)o(o)f(items)g(in)g(the)i (message)e(b)q(o)q(dy)h(are)g(alw)o(a)o(ys)e(the)j(task)e(id)h(and)f (output)h(coun)o(t,)g(whic)o(h)249 561 y(allo)o(w)g(the)j(receiv)o(er)g (to)f(distinguish)f(b)q(et)o(w)o(een)i(di\013eren)o(t)g(tasks)g(and)e (the)i(four)e(message)h(t)o(yp)q(es.)18 b(F)m(or)249 615 y(eac)o(h)g(task,)h(one)e(message)h(eac)o(h)g(of)f(t)o(yp)q(es)i FB(Sp)n(awn)p FA(,)f FB(Be)n(gin)p FA(,)h(and)e FB(End)i FA(is)e(sen)o(t,)i(along)e(with)g(zero)249 669 y(or)e(more)e(messages)i (of)f(class)h FB(Output)p FA(,)g(\()p Fs(count)21 b(>)g(0)p FA(\).)f(Classes)c FB(Be)n(gin)p FA(,)f FB(Output)f FA(and)h FB(End)g FA(will)e(b)q(e)249 723 y(receiv)o(ed)i(in)f(order,)g(as)g (they)h(originate)e(from)f(the)j(same)e(source)i(\(the)g(p)o(vmd)d(of)h (the)i(target)f(task\).)249 777 y(Class)h FB(Sp)n(awn)g FA(originates)f(at)h(the)g(\(p)q(ossibly)g(di\013eren)o(t\))h(p)o(vmd)d (of)h(the)h(paren)o(t)h(task,)e(so)h(it)f(can)h(b)q(e)249 831 y(receiv)o(ed)h(in)e(an)o(y)g(order)i(relativ)o(e)e(to)h(the)g (others.)21 b(The)15 b(output)g(sink)f(is)h(exp)q(ected)h(to)f (understand)249 885 y(the)g(di\013eren)o(t)g(t)o(yp)q(es)h(of)d (messages)i(and)f(use)h(them)f(to)g(kno)o(w)g(when)g(to)h(stop)f (listening)g(for)g(output)249 939 y(from)e(a)i(task)g(\(EOF\))h(or)e (group)h(of)f(tasks)i(\(global)d(EOF\).)291 993 y(The)f(messages)f(are) h(designed)g(so)g(as)f(to)h(prev)o(en)o(t)g(race)h(conditions)e(when)h (a)f(task)h(spa)o(wns)g(another)249 1047 y(task,)f(then)h(immediately)c (exits.)17 b(The)10 b(output)g(sink)g(migh)o(t)e(get)i(the)h FB(End)f FA(message)g(from)e(the)j(paren)o(t)249 1101 y(task)16 b(and)g(decide)h(the)f(group)g(is)g(\014nished,)h(only)e(to)g (receiv)o(e)j(more)d(output)h(later)g(from)e(the)j(c)o(hild)249 1155 y(task.)h(According)12 b(to)g(these)h(rules,)g(the)f FB(Sp)n(awn)h FA(message)e(for)h(the)g(second)h(task)f(m)o(ust)f(arriv) o(e)h(b)q(efore)249 1209 y(the)k FB(End)f FA(message)g(from)e(the)j (\014rst)g(task.)21 b(The)16 b FB(Be)n(gin)f FA(message)g(itself)g(is)g (necessary)i(b)q(ecause)f(the)249 1263 y FB(Sp)n(awn)d FA(message)f(for)g(a)g(task)h(ma)o(y)e(arriv)o(e)h(after)h(the)g FB(End)g FA(message)f(for)g(the)h(same)f(task.)17 b(The)c(state)249 1317 y(transitions)k(of)g(a)g(task)h(as)f(observ)o(ed)i(b)o(y)e(the)h (receiv)o(er)h(of)e(the)h(output)g(messages)f(are)h(sho)o(wn)f(in)249 1371 y(Figure)d(7.14.)249 1429 y 8762159 9661993 14143078 29996482 22892052 39666401 startTexFig 249 1429 a %%BeginDocument: fig7-out-lat.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 11 def /arrowWidth 5 def /IdrawDict 52 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Times-Bold reencodeISO def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -6.00016 143 ] concat %I 358 505 8 8 Elli End Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 41.9998 191 ] concat %I 358 505 8 8 Elli End Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 89.9998 239 ] concat %I 358 505 8 8 Elli End Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -54.0001 191 ] concat %I 358 505 8 8 Elli End Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -6.00016 239 ] concat %I 358 505 8 8 Elli End Begin %I Elli %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 41.9998 287 ] concat %I 358 505 8 8 Elli End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -6.00016 143 ] concat %I 366 513 398 545 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 41.9998 191 ] concat %I 366 513 398 545 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -54.0002 191 ] concat %I 366 513 398 545 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -6.00012 239 ] concat %I 366 513 398 545 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -54.0002 143 ] concat %I 398 513 366 545 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 -6.00019 191 ] concat %I 398 513 366 545 Line %I 1 End Begin %I Line %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 41.9998 239 ] concat %I 398 513 366 545 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal--*-120-75-75-*-*-*-* Times-Bold 12 SetF %I t [ 1 0 0 1 328 637 ] concat %I [ (Unstarted) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal--*-120-75-75-*-*-*-* Times-Bold 12 SetF %I t [ 1 0 0 1 384 821 ] concat %I [ (Exited) ] Text End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 52 62 ] concat %I 4 364 626 404 610 364 578 356 618 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 52 62 ] concat %I 4 292 698 276 730 252 706 292 690 4 BSpl %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 392 763 ] concat %I [ (Spawn) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 344 715 ] concat %I [ (Spawn) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 296 667 ] concat %I [ (Spawn) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 296 795 ] concat %I [ (Output) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 440 659 ] concat %I [ (Output) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 296 731 ] concat %I [ (Begin) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 376 667 ] concat %I [ (Begin) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 432 723 ] concat %I [ (End) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal--*-120-75-75-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 360 787 ] concat %I [ (End) ] Text End End %I eop showpage end %%EndDocument endTexFig 249 2103 a Fo(Figure)f(7.14)249 2140 y Fy(Output)e(states)f(of)h(a)g (task)291 2242 y FA(The)18 b(libp)o(vm)c(function)k Fs(pvm)p 757 2242 14 2 v 15 w(catchout\(\))d FA(uses)k(this)e(output)h (collection)f(feature)h(to)g(put)f(the)249 2296 y(output)f(from)e(c)o (hildren)i(of)g(a)f(task)h(in)o(to)g(a)f(\014le)h(\(for)g(example,)e (its)i(o)o(wn)g(stdout\).)25 b(It)16 b(sets)h(output)249 2350 y(TID)12 b(to)g(its)h(o)o(wn)f(task)g(id,)g(and)g(the)h(output)g (co)q(de)g(to)f(con)o(trol)h(message)f Fs(TC)p 1446 2350 V 15 w(OUTPUT)p FA(.)f(Output)i(from)249 2404 y(c)o(hildren)i(and)g (grandc)o(hildren)h(tasks)f(is)g(collected)h(b)o(y)f(the)h(p)o(vmds)e (and)h(sen)o(t)h(to)f(the)h(task,)f(where)249 2458 y(it)f(is)f(receiv)o (ed)j(b)o(y)d Fs(pvmmctl\(\))f FA(and)i(prin)o(ted)g(b)o(y)g Fs(pvmclaimo\(\))p FA(.)p eop %%Page: 124 143 124 142 bop 249 251 a Fu(124)1356 b(Chapter)13 b(7)249 507 y Fr(7.7.3)48 b(T)l(racing)249 590 y FA(The)16 b(libp)o(vm)d (library)i(has)g(a)h(tracing)f(system)g(that)h(can)f(record)i(the)f (parameters)g(and)f(results)i(of)249 644 y(all)e(calls)g(to)g(in)o (terface)i(functions.)23 b(T)m(race)16 b(data)f(is)h(sen)o(t)g(as)g (messages)g(to)f(a)h(trace)h(sink)e(task)h(just)249 698 y(as)d(output)h(is)f(sen)o(t)g(to)g(an)g(stdout)h(sink)f(\(Section)g (7.7.2\).)k(If)12 b(the)i(trace)g(output)f(TID)g(is)g(set)h(to)f(zero) 249 752 y(\(the)i(default\),)e(tracing)h(is)f(disabled.)291 806 y(Besides)g(the)g(trace)g(sink,)e(tasks)i(also)e(inherit)h(a)g (trace)g(mask,)f(used)i(to)e(enable)i(tracing)f(function-)249 860 y(b)o(y-function.)k(The)10 b(mask)e(is)h(passed)i(as)e(a)g(\(prin)o (table\))h(string)f(in)g(en)o(vironmen)o(t)g(v)n(ariable)f Fs(PVMTMASK)p FA(.)249 914 y(A)15 b(task)h(can)f(manipulate)f(its)h(o)o (wn)g(trace)h(mask)e(or)h(the)h(one)f(to)h(b)q(e)f(inherited)h(from)e (it.)22 b(A)15 b(task's)249 968 y(trace)g(mask)d(can)j(also)e(b)q(e)h (set)h(async)o(hronously)f(with)g(a)f Fs(TC)p 1207 968 14 2 v 16 w(SETTMASK)f FA(con)o(trol)h(message.)291 1022 y(Constan)o(ts)h(related)g(to)f(trace)i(messages)f(are)g(de\014ned)h (in)e(public)g(header)i(\014le)e Fs(pvmtev.h)p FA(.)k(T)m(race)249 1076 y(data)h(from)f(a)h(task)g(is)h(collected)g(in)f(a)g(manner)f (similar)f(to)i(the)h(output)g(redirection)g(discussed)249 1130 y(ab)q(o)o(v)o(e.)e(Lik)o(e)12 b(the)g(t)o(yp)q(e)h FB(Sp)n(awn)p FA(,)f FB(Be)n(gin)p FA(,)g(and)g FB(End)g FA(messages)g(whic)o(h)g(brac)o(k)o(et)h(output)f(from)e(a)h(task,)249 1184 y Fs(TEV)p 318 1184 V 15 w(SPNTASK)p FA(,)e Fs(TEV)p 574 1184 V 16 w(NEWTASK)g FA(and)i Fs(TEV)p 897 1184 V 16 w(ENDTASK)e FA(trace)k(messages)e(are)h(generated)g(b)o(y)f(the)h (p)o(vmds)249 1238 y(to)i(brac)o(k)o(et)g(trace)h(messages.)291 1292 y(The)d(tracing)g(system)g(w)o(as)g(in)o(tro)q(duced)h(in)f(v)o (ersion)h(3.3)e(and)h(is)g(still)f(exp)q(ected)j(to)f(c)o(hange)f (some-)249 1346 y(what.)249 1429 y Fr(7.7.4)48 b(Debugging)249 1512 y FA(PVM)16 b(pro)o(vides)g(a)f(simple)f(but)i(extensible)g (debugging)f(facilit)o(y)m(.)21 b(T)m(asks)15 b(started)i(b)o(y)e(hand) g(could)249 1566 y(just)20 b(as)g(easily)f(b)q(e)i(run)f(under)h(a)e (debugger,)j(but)e(this)g(pro)q(cedure)h(is)f(cum)o(b)q(ersome)f(for)g (those)249 1620 y(spa)o(wned)k(b)o(y)f(an)h(application,)f(since)i(it)e (requires)h(the)g(user)h(to)e(commen)o(t)f(out)h(the)h(calls)f(to)249 1674 y Fs(pvm)p 318 1674 V 15 w(spawn\(\))16 b FA(and)i(start)g(tasks)g (man)o(ually)m(.)26 b(If)17 b Fs(PvmTaskDebug)e FA(is)j(added)g(to)f (the)h(\015ags)g(passed)249 1728 y(to)f Fs(pvm)p 372 1728 V 15 w(spawn\(\))p FA(,)f(the)h(task)g(is)g(started)h(through)f(a) g(debugger)g(script)h(\(a)f(normal)e(shell)i(script\),)249 1782 y Fs($PVM)p 340 1782 V 15 w(ROOT/lib/debugger)o FA(.)291 1836 y(The)e(p)o(vmd)d(passes)k(the)f(name)f(and)g(parameters) h(of)f(the)h(task)f(to)h(the)g(debugger)g(script,)g(whic)o(h)249 1890 y(is)i(free)g(to)g(start)g(an)o(y)f(sort)h(of)f(debugger.)28 b(The)17 b(script)g(pro)o(vided)g(is)f(v)o(ery)h(simple.)25 b(In)17 b(an)f FB(xterm)249 1944 y FA(windo)o(w,)11 b(it)i(runs)g(the)g (correct)h(debugger)f(according)f(to)h(the)g(arc)o(hitecture)h(t)o(yp)q (e)f(of)f(the)h(host.)18 b(The)249 1998 y(script)e(can)f(b)q(e)g (customized)g(or)g(replaced)h(b)o(y)f(the)g(user.)23 b(The)15 b(p)o(vmd)e(can)i(b)q(e)h(made)e(to)h(execute)h(a)249 2051 y(di\013eren)o(t)c(debugger)g(via)e(the)h Fs(bx=)f FA(host)h(\014le)g(option)f(or)h(the)h Fs(PVM)p 1257 2051 V 15 w(DEBUGGER)d FA(en)o(vironmen)o(t)h(v)n(ariable.)249 2172 y FD(7.8)52 b(Console)18 b(Program)249 2280 y FA(The)c(PVM)g (console)g(is)g(used)g(to)f(manage)f(the)j(virtual)d(mac)o(hine|to)g (recon\014gure)j(it)e(or)h(start)g(and)249 2334 y(stop)19 b(pro)q(cesses.)37 b(In)19 b(addition,)g(it's)f(an)h(example)f(program) f(that)j(mak)o(es)e(use)i(of)e(most)g(of)g(the)249 2388 y(libp)o(vm)11 b(functions.)291 2442 y Fs(pvm)p 360 2442 V 15 w(getfds\(\))h FA(and)i Fs(select\(\))e FA(are)i(used)h(to)e(c)o (hec)o(k)i(for)f(input)g(from)e(the)i(k)o(eyb)q(oard)g(and)g(mes-)249 2496 y(sages)i(from)e(the)i(p)o(vmd)e(sim)o(ultaneously)m(.)20 b(Keyb)q(oard)d(input)e(is)g(passed)i(to)e(the)h(command)d(in)o(ter-)p eop %%Page: 125 144 125 143 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(125)249 507 y FA(preter,)21 b(while)e(messages)g(con)o(tain)g (noti\014cation)f(\(for)h(example,)f(HostAdd\))i(or)f(output)g(from)e (a)249 561 y(task.)291 615 y(The)d(console)h(can)g(collect)f(output)h (or)f(trace)h(messages)g(from)d(spa)o(wned)j(tasks,)g(using)f(the)h (redi-)249 669 y(rection)g(mec)o(hanisms)e(describ)q(ed)k(in)d(Section) h(7.7.2)e(and)i(Section)g(7.7.3,)d(and)j(write)g(them)f(to)g(the)249 723 y(screen)j(or)d(a)g(\014le.)20 b(It)14 b(uses)i(the)f FB(b)n(e)n(gin)f FA(and)h FB(end)g FA(messages)f(from)f(c)o(hild)h (tasks)h(to)f(main)o(tain)e(groups)249 777 y(of)i(tasks)i(\(or)f FB(jobs)p FA(\),)f(related)i(b)o(y)f(common)d(ancestors.)22 b(Using)15 b(the)g Fs(PvmHostAdd)e FA(notify)h(ev)o(en)o(t,)h(it)249 831 y(informs)d(the)j(user)g(when)f(the)h(virtual)e(mac)o(hine)f(is)i (recon\014gured.)249 951 y FD(7.9)52 b(Resource)17 b(Limitations)249 1059 y FA(Resource)j(limits)c(imp)q(osed)i(b)o(y)h(the)g(op)q(erating)g (system)f(and)h(a)o(v)n(ailable)d(hardw)o(are)j(are)g(in)g(turn)249 1113 y(passed)h(to)e(PVM)h(applications.)31 b(Whenev)o(er)20 b(p)q(ossible,)f(PVM)g(a)o(v)o(oids)f(setting)h(explicit)f(limits;)249 1167 y(instead,)f(it)f(returns)j(an)d(error)h(when)h(resources)h(are)e (exhausted.)27 b(Comp)q(etition)15 b(b)q(et)o(w)o(een)j(users)249 1221 y(on)c(the)g(same)f(host)h(or)g(net)o(w)o(ork)g(a\013ects)i(some)d (limits)e(dynamically)m(.)249 1304 y Fr(7.9.1)48 b(In)15 b(the)g(PVM)h(Daemon)249 1387 y FA(Ho)o(w)9 b(man)o(y)f(tasks)i(eac)o (h)g(p)o(vmd)f(can)g(manage)f(is)i(limited)d(b)o(y)j(t)o(w)o(o)f (factors:)16 b(the)10 b(n)o(um)o(b)q(er)f(of)g(pro)q(cesses)249 1441 y(allo)o(w)o(ed)14 b(a)i(user)g(b)o(y)g(the)g(op)q(erating)f (system,)h(and)f(the)h(n)o(um)o(b)q(er)f(of)g(\014le)h(descriptors)h(a) o(v)n(ailable)c(to)249 1495 y(the)j(p)o(vmd.)k(The)15 b(limit)d(on)j(pro)q(cesses)j(is)d(generally)f(not)h(an)g(issue,)h (since)g(it)e(do)q(esn't)i(mak)o(e)d(sense)249 1549 y(to)h(ha)o(v)o(e)g (a)f(h)o(uge)h(n)o(um)o(b)q(er)f(of)h(tasks)g(running)g(on)f(a)h (unipro)q(cessor)h(mac)o(hine.)291 1603 y(Eac)o(h)g(task)g(consumes)g (one)h(\014le)f(descriptor)h(in)f(the)g(p)o(vmd,)f(for)h(the)g(p)o (vmd-task)f(TCP)h(stream.)249 1657 y(Eac)o(h)k(spa)o(wned)h(task)f (\(not)g(ones)g(connected)i(anon)o(ymously\))16 b(consumes)j(an)g (extra)g(descriptor,)249 1711 y(since)f(its)f(output)g(is)g(read)g (through)g(a)f(pip)q(e)i(b)o(y)e(the)i(p)o(vmd)d(\(closing)h(stdout)i (and)f(stderr)h(in)e(the)249 1765 y(task)e(w)o(ould)e(reclaim)g(this)i (slot\).)j(A)d(few)f(more)g(\014le)g(descriptors)i(are)f(alw)o(a)o(ys)e (in)h(use)h(b)o(y)g(the)g(p)o(vmd)249 1819 y(for)f(the)g(lo)q(cal)f (and)h(net)o(w)o(ork)g(so)q(c)o(k)o(ets)h(and)e(error)i(log)e(\014le.) 17 b(F)m(or)c(example,)e(with)i(a)f(limit)e(of)i(64)h(op)q(en)249 1873 y(\014les,)h(a)f(user)i(should)f(b)q(e)h(able)e(to)h(ha)o(v)o(e)g (up)g(to)f(30)h(tasks)g(running)g(p)q(er)h(host.)291 1927 y(The)10 b(p)o(vmd)f(ma)o(y)g(b)q(ecome)h(a)g(b)q(ottlenec)o(k)h (if)f(all)f(these)j(tasks)f(try)f(to)h(talk)e(to)i(one)f(another)h (through)249 1981 y(it.)291 2035 y(The)k(p)o(vmd)f(uses)i(dynamically)c (allo)q(cated)j(memory)d(to)j(store)i(message)d(pac)o(k)o(ets)i(en)g (route)g(b)q(e-)249 2089 y(t)o(w)o(een)f(tasks.)20 b(Un)o(til)13 b(the)i(receiving)g(task)f(accepts)i(the)f(pac)o(k)o(ets,)g(they)g (accum)o(ulate)e(in)h(the)h(p)o(vmd)249 2143 y(in)e(an)g(FIF)o(O)h(pro) q(cedure.)20 b(No)13 b(\015o)o(w)g(con)o(trol)g(is)h(imp)q(osed)e(b)o (y)h(the)h(p)o(vmd:)j(it)c(will)f(happily)g(store)i(all)249 2197 y(the)g(pac)o(k)o(ets)f(giv)o(en)g(to)g(it,)f(un)o(til)g(it)g (can't)h(get)h(an)o(y)e(more)g(memory)m(.)j(If)d(an)h(application)f(is) g(designed)249 2251 y(so)k(that)f(tasks)h(can)g(k)o(eep)g(sending)f(ev) o(en)h(when)g(the)g(receiving)g(end)g(is)f(o\013)h(doing)e(something)g (else)249 2305 y(and)g(not)g(receiving,)f(the)i(system)f(will)e(ev)o (en)o(tually)h(run)h(out)g(of)g(memory.)p eop %%Page: 126 145 126 144 bop 249 251 a Fu(126)1356 b(Chapter)13 b(7)249 507 y Fr(7.9.2)48 b(In)15 b(the)g(T)l(ask)249 590 y FA(As)h(with)g(the) h(p)o(vmd,)d(a)i(task)g(ma)o(y)e(ha)o(v)o(e)i(a)f(limit)e(on)j(the)h(n) o(um)o(b)q(er)e(of)g(others)i(it)f(can)g(connect)h(to)249 644 y(directly)m(.)24 b(Eac)o(h)16 b(direct)h(route)f(to)g(a)f(task)h (has)g(a)g(separate)h(TCP)f(connection)g(\(whic)o(h)g(is)g(bidirec-)249 698 y(tional\),)h(and)g(so)h(consumes)f(a)h(\014le)f(descriptor.)30 b(Th)o(us,)18 b(with)g(a)f(limit)e(of)h(64)h(op)q(en)h(\014les,)h(a)e (task)249 752 y(can)d(establish)h(direct)f(routes)h(to)f(ab)q(out)g(60) g(other)g(tasks.)19 b(Note)14 b(that)g(this)h(limit)c(is)j(in)f (e\013ect)j(only)249 806 y(when)d(using)e(task-task)i(direct)g (routing.)j(Messages)e(routed)f(via)e(the)i(p)o(vmds)e(use)h(only)g (the)g(default)249 860 y(p)o(vmd-task)g(connection.)291 914 y(The)g(maxim)n(um)7 b(size)12 b(of)f(a)g(PVM)h(message)f(is)h (limited)d(b)o(y)i(the)h(amoun)o(t)e(of)h(memory)e(a)o(v)n(ailable)g (to)249 968 y(the)i(task.)16 b(Because)c(messages)e(are)h(generally)e (pac)o(k)o(ed)h(using)g(data)g(existing)f(elsewhere)j(in)d(memory)m(,) 249 1022 y(and)14 b(they)g(m)o(ust)f(b)q(e)h(reside)h(in)e(memory)e(b)q (et)o(w)o(een)k(b)q(eing)f(pac)o(k)o(ed)g(and)f(sen)o(t,)i(the)f (largest)g(p)q(ossible)249 1076 y(message)g(a)f(task)h(can)h(send)f (should)g(b)q(e)h(somewhat)e(less)h(than)g(half)f(the)i(a)o(v)n (ailable)c(memory)m(.)16 b(Note)249 1130 y(that)10 b(as)g(a)g(message)g (is)g(sen)o(t,)h(memory)d(for)i(pac)o(k)o(et)g(bu\013ers)i(is)e(allo)q (cated)g(b)o(y)g(the)g(p)o(vmd,)f(aggra)o(v)n(ating)249 1184 y(the)15 b(situation.)i(In-place)d(message)g(enco)q(ding)g (alleviates)g(this)g(problem)e(somewhat,)h(b)q(ecause)i(the)249 1238 y(data)i(is)g(not)g(copied)g(in)o(to)f(message)h(bu\013ers)i(in)d (the)i(sender.)29 b(Ho)o(w)o(ev)o(er,)18 b(on)f(the)h(receiving)f(end,) 249 1292 y(the)c(en)o(tire)g(message)f(is)h(do)o(wnloaded)e(in)o(to)h (the)h(task)g(b)q(efore)g(the)g(receiv)o(e)h(call)d(accepts)j(it,)e(p)q (ossibly)249 1346 y(lea)o(ving)h(no)g(ro)q(om)g(to)g(unpac)o(k)h(it.) 291 1400 y(In)e(a)g(similar)e(v)o(ein,)i(if)g(man)o(y)e(tasks)j(send)g (to)g(a)f(single)g(destination)g(all)f(at)h(once,)h(the)g(destination) 249 1454 y(task)f(or)f(p)o(vmd)e(ma)o(y)h(b)q(e)i(o)o(v)o(erloaded)f (as)g(it)g(tries)h(to)f(store)h(the)g(messages.)18 b(Keeping)11 b(messages)h(from)249 1508 y(b)q(eing)i(freed)h(when)f(new)g(ones)h (are)f(receiv)o(ed)h(b)o(y)f(using)g Fs(pvm)p 1214 1508 14 2 v 15 w(setrbuf\(\))e FA(also)h(uses)i(up)f(memory)m(.)291 1562 y(These)19 b(problems)e(can)h(sometimes)f(b)q(e)h(a)o(v)o(oided)g (b)o(y)g(rearranging)f(the)i(application)e(co)q(de,)i(for)249 1616 y(example,)e(to)h(use)h(smaller)e(messages,)i(eliminate)d(b)q (ottlenec)o(ks,)k(and)e(pro)q(cess)i(messages)e(in)f(the)249 1670 y(order)e(in)e(whic)o(h)h(they)g(are)h(generated.)249 1790 y FD(7.10)52 b(Multipro)q(cessor)18 b(Systems)249 1898 y FA(Dev)o(elop)q(ed)c(initially)d(as)i(a)g(parallel)f (programming)e(en)o(vironmen)o(t)i(for)h(Unix)g(w)o(orkstations,)g(PVM) 249 1952 y(has)18 b(gained)f(wide)g(acceptance)j(and)d(b)q(ecome)h(a)f (de)h(facto)f(standard)h(for)f(message-passing)g(pro-)249 2006 y(gramming)o(.)i(Users)d(w)o(an)o(t)f(the)g(same)g(programmi)o(ng) d(en)o(vironmen)o(t)i(on)h(m)o(ultipro)q(cessor)f(comput-)249 2060 y(ers)i(so)f(they)g(can)g(mo)o(v)o(e)f(their)h(applications)f(on)o (to)g(these)i(systems.)21 b(A)15 b(common)d(in)o(terface)k(w)o(ould)249 2114 y(also)d(allo)o(w)g(users)i(to)f(write)g(v)o(endor-indep)q(enden)o (t)i(programs)c(for)i(parallel)f(computers)h(and)f(to)h(do)249 2168 y(part)k(or)g(most)e(of)i(the)g(dev)o(elopmen)o(t)f(w)o(ork)g(on)h (w)o(orkstations,)g(freeing)g(up)g(the)g(m)o(ultipro)q(cessor)249 2222 y(sup)q(ercomputers)d(for)f(pro)q(duction)g(runs.)291 2276 y(With)i(PVM,)h(m)o(ultipro)q(cessor)g(systems)g(can)h(b)q(e)f (included)h(in)f(the)g(same)g(con\014guration)f(with)249 2330 y(w)o(orkstations.)k(F)m(or)15 b(example,)e(a)h(PVM)h(task)g (running)f(on)h(a)f(graphics)h(w)o(orkstation)f(can)h(displa)o(y)249 2384 y(the)c(results)h(of)e(computations)g(carried)h(out)g(on)f(a)h (massiv)o(ely)e(parallel)h(pro)q(cessing)h(sup)q(ercomputer.)249 2438 y(Shared-memory)k(computers)i(with)f(a)g(small)f(n)o(um)o(b)q(er)h (of)g(pro)q(cessors)j(can)e(b)q(e)g(link)o(ed)f(to)h(deliv)o(er)249 2492 y(sup)q(ercomputer)e(p)q(erformance.)p eop %%Page: 127 146 127 145 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(127)p 1 setlinewidth np 1346 570 36 0.00 360.00 arc st 1 setlinewidth np 1463 570 36 0.00 360.00 arc st 1 setlinewidth np 1228 674 36 0.00 360.00 arc st 1 setlinewidth np 1346 674 36 0.00 360.00 arc st 1 setlinewidth np 1463 674 36 0.00 360.00 arc st 1 setlinewidth np 1228 779 36 0.00 360.00 arc st 1 setlinewidth np 1346 779 36 0.00 360.00 arc st 1 setlinewidth np 1463 779 36 0.00 360.00 arc st 1 setlinewidth np 1228 883 36 0.00 360.00 arc st 1 setlinewidth np 1346 883 36 0.00 360.00 arc st 1 setlinewidth np 1463 883 36 0.00 360.00 arc st 1 setlinewidth np 1346 988 36 0.00 360.00 arc st 1 setlinewidth np 1463 988 36 0.00 360.00 arc st 1 setlinewidth np 1346 1092 36 0.00 360.00 arc st 1 setlinewidth np 1463 1092 36 0.00 360.00 arc st 1 setlinewidth np 1228 1092 36 0.00 360.00 arc st 1 setlinewidth np 1228 988 36 0.00 360.00 arc st 1 setlinewidth np 967 831 36 0.00 360.00 arc st 1 setlinewidth np 1228 570 36 0.00 360.00 arc st 0 setgray 1 setlinewidth np 967 805 12 0.00 360.00 arc fil 0 setgray np 967 805 12 0.00 360.00 arc st 1 setlinewidth np 967 805 12 0.00 360.00 arc st 1 setlinewidth np 1228 544 12 0.00 360.00 arc st 1 setlinewidth np 1346 544 12 0.00 360.00 arc st 1 setlinewidth np 1228 648 12 0.00 360.00 arc st 1 setlinewidth np 1346 648 12 0.00 360.00 arc st 1 setlinewidth np 1228 753 12 0.00 360.00 arc st 1 setlinewidth np 1346 753 12 0.00 360.00 arc st 0 setgray 1 setlinewidth np 537 622 12 0.00 360.00 arc fil 0 setgray np 537 622 12 0.00 360.00 arc st 1 setlinewidth np 537 622 12 0.00 360.00 arc st 1 setlinewidth np 537 518 12 0.00 360.00 arc st 1 setlinewidth np 1554 1170 a 1554 479 li 1124 479 li 1124 1170 li closepath st 1 setlinewidth np 693 531 a closepath st 1 setlinewidth np 693 531 a closepath st 1 setlinewidth np 967 818 a 967 831 li st 1 setlinewidth np 967 818 a 967 831 li st 1 setlinewidth np 967 831 a 954 857 li st 1 setlinewidth np 967 831 a 954 857 li st 1 setlinewidth np 967 831 a 980 857 li st 1 setlinewidth np 967 831 a 980 857 li st 1 setlinewidth np 1228 557 a 1228 570 li st 1 setlinewidth np 1228 570 a 1215 596 li st 1 setlinewidth np 1228 570 a 1241 596 li st 1 setlinewidth np 1346 557 a 1346 570 li 1332 596 li st 1 setlinewidth np 1346 570 a 1358 596 li st 1 setlinewidth np 1228 661 a 1228 674 li st 1 setlinewidth np 1228 674 a 1215 701 li st 1 setlinewidth np 1228 674 a 1241 701 li st 1 setlinewidth np 1346 661 a 1346 674 li 1332 701 li st 1 setlinewidth np 1346 674 a 1358 701 li st 1 setlinewidth np 1228 766 a 1228 779 li 1215 805 li st 1 setlinewidth np 1228 779 a 1241 805 li st 1 setlinewidth np 1346 766 a 1346 779 li 1332 805 li st 1 setlinewidth np 1346 779 a 1358 805 li st 1 setlinewidth np 536 544 a 524 570 li st 1 setlinewidth np 536 544 a 524 570 li st 1 setlinewidth np 536 648 a 550 674 li st 1 setlinewidth np 536 648 a 550 674 li st 1 setlinewidth np 536 648 a 524 674 li st 1 setlinewidth np 536 648 a 524 674 li st 1 setlinewidth np 536 635 a 536 648 li st 1 setlinewidth np 536 635 a 536 648 li st 1 setlinewidth np 536 544 a 550 570 li st 1 setlinewidth np 536 544 a 550 570 li st 1 setlinewidth np 536 531 a 536 544 li st 1 setlinewidth np 536 531 a 536 544 li st 1163 1235 a FA(Compute)13 b(P)o(artition)915 922 y(Service)928 975 y(No)q(de)576 557 y(task)576 661 y(daemon)249 1324 y Fo(Figure)g(7.15)249 1361 y Fy(PVM)g(daemon)c(and)i (tasks)f(on)h(MPP)h(host)291 1477 y FA(The)e(virtual)e(mac)o(hine)h (hides)h(the)g(con\014guration)g(details)f(from)f(the)i(programmer.)k (The)d(ph)o(ysical)249 1531 y(pro)q(cessors)19 b(can)d(b)q(e)h(a)g(net) o(w)o(ork)f(of)g(w)o(orkstations,)g(or)h(they)g(can)f(b)q(e)i(the)f(no) q(des)g(of)f(a)g(m)o(ulticom)o(-)249 1585 y(puter.)22 b(The)16 b(programmer)d(do)q(esn't)i(ha)o(v)o(e)g(to)g(kno)o(w)f(ho)o (w)h(the)h(tasks)f(are)h(created)g(or)f(where)i(they)249 1639 y(are)d(running;)e(it)h(is)g(the)h(resp)q(onsibilit)o(y)f(of)f (PVM)i(to)f(sc)o(hedule)h(user's)h(tasks)e(on)o(to)g(individual)e(pro-) 249 1693 y(cessors.)20 b(The)15 b(user)g(can,)f(ho)o(w)o(ev)o(er,)g (tune)g(the)h(program)d(for)i(a)g(sp)q(eci\014c)h(con\014guration)f(to) g(ac)o(hiev)o(e)249 1747 y(maxim)n(um)c(p)q(erformance,)j(at)h(the)g (exp)q(ense)i(of)d(its)h(p)q(ortabilit)o(y)m(.)291 1801 y(Multipro)q(cessor)21 b(systems)g(can)f(b)q(e)h(divided)f(in)o(to)g(t) o(w)o(o)g(main)e(categories:)32 b(message)20 b(passing)249 1855 y(and)c(shared)h(memory)m(.)k(In)16 b(the)g(\014rst)h(category)m (,)f(PVM)g(is)g(no)o(w)g(supp)q(orted)h(on)e(In)o(tel's)h(iPSC/860)249 1909 y(and)f(P)o(aragon,)f(as)h(w)o(ell)f(as)h(Thinking)f(Mac)o(hine's) h(CM-5.)20 b(P)o(orting)15 b(PVM)g(to)g(these)h(platforms)d(is)249 1963 y(straigh)o(tforw)o(ard,)d(b)q(ecause)i(the)f(message-passing)f (functions)g(in)g(PVM)h(map)e(quite)h(naturally)g(on)o(to)249 2017 y(the)i(nativ)o(e)f(system)g(calls.)16 b(The)c(di\016cult)f(part)g (is)g(the)h(loading)d(and)i(managemen)o(t)e(of)i(tasks.)17 b(In)11 b(the)249 2071 y(second)16 b(category)m(,)f(message)g(passing)f (can)h(b)q(e)h(done)f(b)o(y)g(placing)f(the)i(message)e(bu\013ers)j(in) d(shared)249 2125 y(memory)m(.)32 b(Access)22 b(to)d(these)i(bu\013ers) g(m)o(ust)d(b)q(e)j(sync)o(hronized)f(with)f(m)o(utual)f(exclusion)i (lo)q(c)o(ks.)249 2179 y(PVM)c(3.3)e(shared)j(memory)c(p)q(orts)j (include)g(SGI)f(m)o(ultipro)q(cessor)g(mac)o(hines)f(running)i(IRIX)f (5.x)249 2233 y(and)d(Sun)h(Microsystems,)f(Inc.,)g(m)o(ultipro)q (cessor)g(mac)o(hines)f(running)h(Solaris)g(2.3)f(\(This)h(p)q(ort)h (also)249 2287 y(runs)k(on)f(the)h(Cra)o(y)f(Researc)o(h,)h(Inc.,)f (CS6400\).)25 b(In)16 b(addition,)f(CRA)m(Y)g(and)h(DEC)h(ha)o(v)o(e)f (created)249 2341 y(PVM)e(p)q(orts)h(for)e(their)i(T3D)e(and)h(DEC)g (2100)e(shared)j(memory)d(m)o(ultipro)q(cessors,)h(resp)q(ectiv)o(ely)m (.)249 2424 y Fr(7.10.1)48 b(Message-P)o(assing)13 b(Arc)o(hitectures)p eop %%Page: 128 147 128 146 bop 249 251 a Fu(128)1356 b(Chapter)13 b(7)p 1 setgray 1 setlinewidth np 489 673 a 743 673 li 902 609 li 647 609 li closepath fil 0 setgray np 489 673 a 743 673 li 902 609 li 647 609 li closepath st 1 setlinewidth np 489 673 a 743 673 li 902 609 li 647 609 li closepath st 3 setlinewidth np 1029 641 a 1219 641 li st 3 setlinewidth np 1156 657 a 1219 641 li 1156 625 li st 1 setgray 1 setlinewidth np 1394 673 a 1489 673 li 1585 641 li 1489 641 li 1386 673 li closepath fil 0 setgray np 1394 673 a 1489 673 li 1585 641 li 1489 641 li 1386 673 li closepath st 1 setlinewidth np 1394 673 a 1489 673 li 1585 641 li 1489 641 li 1386 673 li closepath st 1 setgray 1 setlinewidth np 1394 633 a 1489 633 li 1585 601 li 1489 601 li 1386 633 li closepath fil 0 setgray np 1394 633 a 1489 633 li 1585 601 li 1489 601 li 1386 633 li closepath st 1 setlinewidth np 1394 633 a 1489 633 li 1585 601 li 1489 601 li 1386 633 li closepath st 1 setgray 1 setlinewidth np 1394 593 a 1489 593 li 1585 562 li 1489 562 li 1386 593 li closepath fil 0 setgray np 1394 593 a 1489 593 li 1585 562 li 1489 562 li 1386 593 li closepath st 1 setlinewidth np 1394 593 a 1489 593 li 1585 562 li 1489 562 li 1386 593 li closepath st 1 setgray 1 setlinewidth np 1394 554 a 1489 554 li 1585 522 li 1489 522 li 1386 554 li closepath fil 0 setgray np 1394 554 a 1489 554 li 1585 522 li 1489 522 li 1386 554 li closepath st 1 setlinewidth np 1394 554 a 1489 554 li 1585 522 li 1489 522 li 1386 554 li closepath st 1 setgray 1 setlinewidth np 1394 506 a 1489 506 li 1585 474 li 1489 474 li 1386 506 li closepath fil 0 setgray np 1394 506 a 1489 506 li 1585 474 li 1489 474 li 1386 506 li closepath st 1 setlinewidth np 1394 506 a 1489 506 li 1585 474 li 1489 474 li 1386 506 li closepath st 671 648 a Fe(Data)1061 688 y(p)o(vm)p 1121 688 10 2 v 10 w(pac)o(k\(\))1386 736 y(Fixed-size)e(F)n(ragmen)o(ts)249 814 y Fo(Figure)i(7.16)249 851 y Fy(P)o(ac)o(king:)h(breaking)9 b(data)h(in)o(to)h(\014xed-size)e (fragmen)o(ts)249 974 y FA(A)k(t)o(ypical)f(MPP)i(system)f(has)g(one)g (or)g(more)f(service)j(no)q(des)f(for)e(user)i(logins)e(and)h(a)g (large)g(n)o(um)o(b)q(er)249 1028 y(of)i(compute)g(no)q(des)h(for)f(n)o (um)o(b)q(er)f(crunc)o(hing.)23 b(The)16 b(PVM)f(daemon)f(runs)i(on)g (one)f(of)g(the)h(service)249 1082 y(no)q(des)e(and)f(serv)o(es)i(as)f (the)g(gatew)o(a)o(y)f(to)g(the)h(outside)g(w)o(orld.)j(A)c(task)h(can) f(b)q(e)h(started)h(on)e(an)o(y)g(one)249 1136 y(of)g(the)g(service)i (no)q(des)f(as)f(a)g(Unix)f(pro)q(cess)j(and)e(enrolls)g(in)g(PVM)g(b)o (y)g(establishing)g(a)g(TCP)g(so)q(c)o(k)o(et)249 1190 y(connection)f(to)f(the)g(daemon.)16 b(The)11 b(only)g(w)o(a)o(y)f(to)h (start)g(PVM)h(tasks)f(on)g(the)h(compute)e(no)q(des)i(is)f(via)249 1244 y(p)o(vm)p 331 1244 13 2 v 13 w(spa)o(wn\(\).)21 b(When)14 b(the)h(daemon)e(receiv)o(es)k(a)d(request)i(to)e(spa)o(wn)h (new)g(tasks,)f(it)h(will)e(allo)q(cate)249 1298 y(a)h(set)g(of)g(no)q (des)g(if)f(necessary)m(,)i(and)f(load)f(the)i(executable)g(on)o(to)e (the)i(sp)q(eci\014ed)g(n)o(um)o(b)q(er)e(of)g(no)q(des.)291 1352 y(The)f(w)o(a)o(y)f(PVM)h(allo)q(cates)f(no)q(des)i(is)e(system)h (dep)q(enden)o(t.)19 b(On)12 b(the)g(CM-5,)f(the)h(en)o(tire)h (partition)249 1406 y(is)20 b(allo)q(cated)f(to)h(the)g(user.)38 b(On)20 b(the)g(iPSC/860,)g(PVM)g(will)f(get)h(a)f(sub)q(cub)q(e)j(big) d(enough)h(to)249 1460 y(accommo)q(date)d(all)h(the)i(tasks)g(to)f(b)q (e)g(spa)o(wned.)35 b(T)m(asks)19 b(created)i(with)d(t)o(w)o(o)h (separate)h(calls)f(to)249 1514 y(p)o(vm)p 331 1514 V 13 w(spa)o(wn\(\))i(will)d(reside)j(in)f(di\013eren)o(t)h(sub)q(cub)q (es,)i(although)c(they)h(can)g(exc)o(hange)h(messages)249 1568 y(directly)12 b(b)o(y)f(using)h(the)g(ph)o(ysical)f(no)q(de)h (address.)19 b(The)12 b(NX)f(op)q(erating)h(system)f(limits)f(the)i(n)o (um)o(b)q(er)249 1622 y(of)h(activ)o(e)h(sub)q(cub)q(es)i(system-wide)e (to)f(10.)18 b(Pvm)p 1039 1622 V 13 w(spa)o(wn)c(will)f(fail)f(when)i (this)g(limit)d(is)j(reac)o(hed)h(or)249 1676 y(when)h(there)h(are)f (not)f(enough)h(no)q(des)g(a)o(v)n(ailable.)21 b(In)15 b(the)h(case)h(of)e(the)h(P)o(aragon,)f(PVM)h(uses)g(the)249 1729 y(default)c(partition)g(unless)h(a)g(di\013eren)o(t)g(one)g(is)f (sp)q(eci\014ed)i(when)g(p)o(vmd)d(is)h(in)o(v)o(ok)o(ed.)17 b(Pvmd)11 b(and)h(the)249 1783 y(spa)o(wned)i(tasks)g(form)d(one)i (gian)o(t)g(parallel)f(application.)k(The)e(user)g(can)g(set)g(the)g (appropriate)f(NX)249 1837 y(en)o(vironmen)o(t)i(v)n(ariables)g(suc)o (h)h(as)g(NX)p 876 1837 V 16 w(DFL)m(T)p 1004 1837 V 14 w(SIZE)g(b)q(efore)h(starting)f(PVM,)f(or)h(he)g(can)g(sp)q(ecify) 249 1891 y(the)f(equiv)n(alen)o(t)e(command-l)o(ine)e(argumen)o(ts)i (to)h(p)o(vmd)e(\(i.e.,)h(p)o(vmd)f(-sz)j(32\).)291 1945 y(PVM)20 b(message-passing)g(functions)h(are)g(implemen)o(ted)d(in)i (terms)h(of)e(the)j(nativ)o(e)e(send)h(and)249 1999 y(receiv)o(e)16 b(system)e(calls.)19 b(The)c(\\address")h(of)d(a)i(task)f(is)h(enco)q (ded)g(in)f(the)h(task)g(id,)f(as)g(illustrated)g(in)249 2053 y(Figure)d(7.17.)16 b(This)11 b(enables)h(the)g(messages)f(to)g(b) q(e)h(sen)o(t)g(directly)g(to)f(the)h(target)f(task,)h(without)f(an)o (y)249 2111 y 24818168 2841800 6775521 31048990 31772590 34009169 startTexFig 249 2111 a %%BeginDocument: fig7-mpptid.id /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Times-Roman reencodeISO def /Helvetica reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %I Idraw 10 Grid 8 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.733022 0 0 0.733022 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 62 ] concat %I 106 626 106 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 62 ] concat %I 122 626 122 602 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 146.5 700 ] concat %I [ (31) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 645.5 700 ] concat %I [ (0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 149 659 ] concat %I [ (S) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 164 659 ] concat %I [ (G) ] Text End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 70 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 86 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 102 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 118 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 134 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 150 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 166 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 182 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 198 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 214 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 246 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 262 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 278 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 294 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 310 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 326 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 342 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 358 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 374 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 390 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 406 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 422 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 438 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 454 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 470 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 486 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg LtGray 0.699992 0.699992 0.699992 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 502 62 ] concat %I 138 626 138 602 Line %I 1 End Begin %I Rect %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 54 62 ] concat %I 90 602 602 626 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 354.5 700 ] concat %I [ (18) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 162.5 700 ] concat %I [ (30) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-medium-r-normal-*-12-*-*-*-*-*-*-* Times-Roman 12 SetF %I t [ 1 0 0 1 450.364 700 ] concat %I [ (12) ] Text End Begin %I Rect none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 0.982218 0 0 0.982218 21.1623 -54.6918 ] concat %I 213 735 285 752 Rect End Begin %I Rect none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1.19459 0 0 0.982218 244.999 -54.6918 ] concat %I 213 735 285 752 Rect End Begin %I Rect none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 0.982218 0 0 0.982218 171.101 -54.6918 ] concat %I 213 735 285 752 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 505.806 680.276 ] concat %I [ (node number) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 398.44 680.993 ] concat %I [ (proc id) ] Text End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.07151 -0 -0 1.07151 -2.14302 55.7185 ] concat %I 345 590 345 558 Line %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-* Helvetica 12 SetF %I t [ 1 0 0 1 246.787 680.344 ] concat %I [ (host id) ] Text End End %I eop showpage end %%EndDocument endTexFig 249 2353 a Fo(Figure)i(7.17)249 2391 y Fy(Ho)o(w)f(TID)g(is)g(used)e (to)h(distinguish)e(tasks)i(on)g(MPP)249 2493 y FA(help)k(from)e(the)i (daemon.)k(The)c(no)q(de)h(n)o(um)o(b)q(er)e(is)g(normally)e(the)k (logical)d(no)q(de)i(n)o(um)o(b)q(er,)e(but)i(the)p eop %%Page: 129 148 129 147 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(129)p 3 setlinewidth np 543 665 a 630 665 li st 3 setlinewidth np 567 680 a 630 665 li 567 649 li st 1 setgray 1 setlinewidth np 916 696 a 1043 696 li 1146 665 li 1011 665 li 908 696 li closepath fil 0 setgray np 916 696 a 1043 696 li 1146 665 li 1011 665 li 908 696 li st 1 setlinewidth np 916 696 a 1043 696 li 1146 665 li 1011 665 li 908 696 li st 1 setgray 1 setlinewidth np 924 657 a 1051 657 li 1154 625 li 1019 625 li 916 657 li closepath fil 0 setgray np 924 657 a 1051 657 li 1154 625 li 1019 625 li 916 657 li st 1 setlinewidth np 924 657 a 1051 657 li 1154 625 li 1019 625 li 916 657 li st 3 setlinewidth np 1170 672 a 1258 672 li st 3 setlinewidth np 1194 688 a 1258 672 li 1194 657 li st 1 setlinewidth np 289 696 a 293 696 li st 1 setlinewidth np 309 696 a 313 696 li st 1 setlinewidth np 329 696 a 333 696 li st 1 setlinewidth np 350 696 a 354 696 li st 1 setlinewidth np 370 696 a 374 696 li st 1 setlinewidth np 391 696 a 395 696 li st 1 setlinewidth np 411 696 a 415 696 li st 1 setlinewidth np 416 696 a 420 695 li st 1 setlinewidth np 434 690 a 438 689 li st 1 setlinewidth np 452 684 a 456 683 li st 1 setlinewidth np 470 678 a 474 677 li st 1 setlinewidth np 488 672 a 492 671 li st 1 setlinewidth np 506 666 a 510 665 li st 1 setlinewidth np 511 664 a 507 664 li st 1 setlinewidth np 491 664 a 487 664 li st 1 setlinewidth np 470 664 a 466 664 li st 1 setlinewidth np 450 664 a 446 664 li st 1 setlinewidth np 429 664 a 425 664 li st 1 setlinewidth np 409 664 a 405 664 li st 1 setlinewidth np 389 664 a 385 664 li st 1 setlinewidth np 384 664 a 380 665 li st 1 setlinewidth np 366 670 a 362 671 li st 1 setlinewidth np 348 676 a 344 677 li st 1 setlinewidth np 329 682 a 325 683 li st 1 setlinewidth np 311 689 a 307 690 li st 1 setlinewidth np 294 695 a 290 696 li st 1 setlinewidth np 289 648 a 293 648 li st 1 setlinewidth np 309 648 a 313 648 li st 1 setlinewidth np 329 648 a 333 648 li st 1 setlinewidth np 350 648 a 354 648 li st 1 setlinewidth np 370 648 a 374 648 li st 1 setlinewidth np 391 648 a 395 648 li st 1 setlinewidth np 411 648 a 415 648 li st 1 setlinewidth np 416 648 a 420 647 li st 1 setlinewidth np 434 642 a 438 641 li st 1 setlinewidth np 452 636 a 456 635 li st 1 setlinewidth np 470 630 a 474 629 li st 1 setlinewidth np 488 624 a 492 623 li st 1 setlinewidth np 506 618 a 510 617 li st 1 setlinewidth np 511 617 a 507 617 li st 1 setlinewidth np 491 617 a 487 617 li st 1 setlinewidth np 470 617 a 466 617 li st 1 setlinewidth np 450 617 a 446 617 li st 1 setlinewidth np 429 617 a 425 617 li st 1 setlinewidth np 409 617 a 405 617 li st 1 setlinewidth np 389 617 a 385 617 li st 1 setlinewidth np 384 617 a 380 618 li st 1 setlinewidth np 366 623 a 362 624 li st 1 setlinewidth np 348 629 a 344 630 li st 1 setlinewidth np 329 635 a 325 636 li st 1 setlinewidth np 311 641 a 307 642 li st 1 setlinewidth np 294 647 a 290 648 li st 1 setlinewidth np 289 601 a 293 601 li st 1 setlinewidth np 309 601 a 313 601 li st 1 setlinewidth np 329 601 a 333 601 li st 1 setlinewidth np 350 601 a 354 601 li st 1 setlinewidth np 370 601 a 374 601 li st 1 setlinewidth np 391 601 a 395 601 li st 1 setlinewidth np 411 601 a 415 601 li st 1 setlinewidth np 416 601 a 420 600 li st 1 setlinewidth np 434 595 a 438 594 li st 1 setlinewidth np 452 589 a 456 588 li st 1 setlinewidth np 470 583 a 474 582 li st 1 setlinewidth np 488 577 a 492 576 li st 1 setlinewidth np 506 571 a 510 570 li st 1 setlinewidth np 511 569 a 507 569 li st 1 setlinewidth np 491 569 a 487 569 li st 1 setlinewidth np 470 569 a 466 569 li st 1 setlinewidth np 450 569 a 446 569 li st 1 setlinewidth np 429 569 a 425 569 li st 1 setlinewidth np 409 569 a 405 569 li st 1 setlinewidth np 389 569 a 385 569 li st 1 setlinewidth np 384 569 a 380 570 li st 1 setlinewidth np 366 575 a 362 576 li st 1 setlinewidth np 348 581 a 344 582 li st 1 setlinewidth np 329 587 a 325 588 li st 1 setlinewidth np 311 593 a 307 594 li st 1 setlinewidth np 294 599 a 290 600 li st 1 setgray 1 setlinewidth np 924 615 a 1051 615 li 1154 584 li 1019 584 li 916 615 li closepath fil 0 setgray np 924 615 a 1051 615 li 1154 584 li 1019 584 li 916 615 li st 1 setlinewidth np 924 615 a 1051 615 li 1154 584 li 1019 584 li 916 615 li st 1 setgray 1 setlinewidth np 924 569 a 1051 569 li 1154 537 li 1019 537 li 916 569 li closepath fil 0 setgray np 924 569 a 1051 569 li 1154 537 li 1019 537 li 916 569 li st 1 setlinewidth np 924 569 a 1051 569 li 1154 537 li 1019 537 li 916 569 li st 1 setgray 1 setlinewidth np 924 521 a 1051 521 li 1154 490 li 1019 490 li 916 521 li closepath fil 0 setgray np 924 521 a 1051 521 li 1154 490 li 1019 490 li 916 521 li st 1 setlinewidth np 924 521 a 1051 521 li 1154 490 li 1019 490 li 916 521 li st 1 setlinewidth np 289 553 a 293 553 li st 1 setlinewidth np 309 553 a 313 553 li st 1 setlinewidth np 329 553 a 333 553 li st 1 setlinewidth np 350 553 a 354 553 li st 1 setlinewidth np 370 553 a 374 553 li st 1 setlinewidth np 391 553 a 395 553 li st 1 setlinewidth np 411 553 a 415 553 li st 1 setlinewidth np 416 553 a 420 552 li st 1 setlinewidth np 434 547 a 438 546 li st 1 setlinewidth np 452 541 a 456 540 li st 1 setlinewidth np 470 535 a 474 534 li st 1 setlinewidth np 488 529 a 492 528 li st 1 setlinewidth np 506 523 a 510 522 li st 1 setlinewidth np 511 521 a 507 521 li st 1 setlinewidth np 491 521 a 487 521 li st 1 setlinewidth np 470 521 a 466 521 li st 1 setlinewidth np 450 521 a 446 521 li st 1 setlinewidth np 429 521 a 425 521 li st 1 setlinewidth np 409 521 a 405 521 li st 1 setlinewidth np 389 521 a 385 521 li st 1 setlinewidth np 384 521 a 380 522 li st 1 setlinewidth np 366 527 a 362 528 li st 1 setlinewidth np 348 533 a 344 534 li st 1 setlinewidth np 329 540 a 325 541 li st 1 setlinewidth np 311 546 a 307 547 li st 1 setlinewidth np 294 552 a 290 553 li st 1 setlinewidth np 289 505 a 293 505 li st 1 setlinewidth np 309 505 a 313 505 li st 1 setlinewidth np 329 505 a 333 505 li st 1 setlinewidth np 350 505 a 354 505 li st 1 setlinewidth np 370 505 a 374 505 li st 1 setlinewidth np 391 505 a 395 505 li st 1 setlinewidth np 411 505 a 415 505 li st 1 setlinewidth np 416 505 a 420 504 li st 1 setlinewidth np 434 499 a 438 498 li st 1 setlinewidth np 452 493 a 456 492 li st 1 setlinewidth np 470 487 a 474 486 li st 1 setlinewidth np 488 481 a 492 480 li st 1 setlinewidth np 506 475 a 510 474 li st 1 setlinewidth np 511 474 a 507 474 li st 1 setlinewidth np 491 474 a 487 474 li st 1 setlinewidth np 470 474 a 466 474 li st 1 setlinewidth np 450 474 a 446 474 li st 1 setlinewidth np 429 474 a 425 474 li st 1 setlinewidth np 409 474 a 405 474 li st 1 setlinewidth np 389 474 a 385 474 li st 1 setlinewidth np 384 474 a 380 475 li st 1 setlinewidth np 366 480 a 362 481 li st 1 setlinewidth np 348 486 a 344 487 li st 1 setlinewidth np 329 492 a 325 493 li st 1 setlinewidth np 311 498 a 307 499 li st 1 setlinewidth np 294 504 a 290 505 li st 1 setlinewidth np 654 696 a 658 696 li st 1 setlinewidth np 674 696 a 678 696 li st 1 setlinewidth np 695 696 a 699 696 li st 1 setlinewidth np 715 696 a 719 696 li st 1 setlinewidth np 736 696 a 740 696 li st 1 setlinewidth np 756 696 a 760 696 li st 1 setlinewidth np 776 696 a 780 696 li st 1 setlinewidth np 781 696 a 785 695 li st 1 setlinewidth np 799 690 a 803 689 li st 1 setlinewidth np 817 684 a 821 683 li st 1 setlinewidth np 836 678 a 840 677 li st 1 setlinewidth np 854 672 a 858 671 li st 1 setlinewidth np 872 666 a 876 665 li st 1 setlinewidth np 876 664 a 872 664 li st 1 setlinewidth np 856 664 a 852 664 li st 1 setlinewidth np 836 664 a 832 664 li st 1 setlinewidth np 815 664 a 811 664 li st 1 setlinewidth np 795 664 a 791 664 li st 1 setlinewidth np 774 664 a 770 664 li st 1 setlinewidth np 754 664 a 750 664 li st 1 setlinewidth np 749 664 a 745 665 li st 1 setlinewidth np 731 670 a 727 671 li st 1 setlinewidth np 713 676 a 709 677 li st 1 setlinewidth np 695 682 a 691 683 li st 1 setlinewidth np 677 689 a 673 690 li st 1 setlinewidth np 659 695 a 655 696 li st 1 setgray 1 setlinewidth np 1281 688 a 1599 688 li 1790 625 li 1472 625 li closepath fil 0 setgray np 1281 688 a 1599 688 li 1790 625 li 1472 625 li closepath st 1 setlinewidth np 1281 688 a 1599 688 li 1790 625 li 1472 625 li closepath st 1115 815 a Fe(receiving)10 b(task)527 712 y(p)o(vm)p 587 712 10 2 v 10 w(send\(\))336 815 y(sending)h(task)718 744 y(\(bu\013ered\))121 b(p)o(vm)p 1032 744 V 10 w(recv\(\))1146 712 y(p)o(vm)p 1206 712 V 10 w(unpac)o(k\(\))1512 664 y(Data)249 893 y Fo(Figure)13 b(7.18)249 931 y Fy(Bu\013ering:)g(bu\013ering)c(one)i(fragmen)o(t)e(b) o(y)i(receiving)e(task)i(un)o(til)f(p)o(vm)p 1204 931 11 2 v 11 w(recv\(\))g(is)i(called)249 1055 y FA(ph)o(ysical)j(address) i(is)f(used)h(on)e(the)i(iPSC/860)d(to)i(allo)o(w)e(for)h(direct)i(in)o (tercub)q(e)g(comm)o(unicatio)o(n.)249 1109 y(The)d(instance)h(n)o(um)o (b)q(er)e(is)h(used)h(to)e(distinguish)h(tasks)g(running)g(on)f(the)i (same)e(no)q(de.)291 1163 y(PVM)k(normally)e(uses)j(async)o(hronous)g (send)g(primitiv)o(es)d(to)i(send)h(messages.)28 b(The)17 b(op)q(erating)249 1217 y(system)d(can)g(run)g(out)g(of)f(message)g (handles)h(v)o(ery)g(quic)o(kly)f(if)g(a)h(lot)f(of)g(small)f(messages) i(or)g(sev)o(eral)249 1271 y(large)19 b(messages)g(are)g(sen)o(t)h(at)f (once.)35 b(PVM)19 b(will)f(b)q(e)h(forced)h(to)f(switc)o(h)g(to)g (sync)o(hronous)h(send)249 1325 y(when)d(there)g(are)g(no)f(more)f (message)h(handles)g(left)g(or)g(when)h(the)g(system)f(bu\013er)h(gets) g(\014lled)e(up.)249 1379 y(T)m(o)j(impro)o(v)o(e)e(p)q(erformance,)j (a)f(task)g(should)g(call)g(p)o(vm)p 1163 1379 13 2 v 13 w(send\(\))i(as)e(so)q(on)h(as)f(the)h(data)f(b)q(ecomes)249 1433 y(a)o(v)n(ailable,)8 b(so)h(\(one)h(hop)q(es\))h(when)f(the)g (other)g(task)g(calls)f(p)o(vm)p 1221 1433 V 13 w(recv\(\),)j(the)e (message)f(will)f(already)h(b)q(e)249 1487 y(in)i(its)h(bu\013er.)19 b(PVM)12 b(bu\013ers)h(one)f(incoming)e(pac)o(k)o(et)i(b)q(et)o(w)o (een)h(calls)f(to)g(p)o(vm)p 1486 1487 V 13 w(send\(\)/p)o(vm)p 1712 1487 V 14 w(recv\(\).)249 1541 y(A)k(large)f(message,)g(ho)o(w)o (ev)o(er,)g(is)g(brok)o(en)h(up)f(in)o(to)g(man)o(y)f(\014xed-size)i (fragmen)o(ts)e(during)h(pac)o(king,)249 1595 y(and)20 b(eac)o(h)h(piece)h(is)e(sen)o(t)i(separately)m(.)38 b(Bu\013ering)21 b(one)g(of)e(these)j(fragmen)o(ts)e(is)g(not)h (su\016cien)o(t)249 1649 y(unless)13 b(p)o(vm)p 452 1649 V 13 w(send\(\))g(and)e(p)o(vm)p 748 1649 V 14 w(recv\(\))i(are)f(sync) o(hronized.)18 b(Figures)12 b(7.16)f(and)g(7.18)g(illustrate)g(this)249 1703 y(pro)q(cess.)291 1757 y(The)j(fron)o(t)g(end)g(of)f(an)h(MPP)h (system)e(is)h(treated)h(as)f(a)g(regular)g(w)o(orkstation.)k(Programs) 13 b(to)g(b)q(e)249 1811 y(run)j(there)h(should)f(b)q(e)h(link)o(ed)e (with)g(the)i(regular)f(PVM)g(library)m(,)f(whic)o(h)g(relies)i(on)e (Unix)h(so)q(c)o(k)o(ets)249 1865 y(to)h(transmit)e(messages.)28 b(Normally)14 b(one)j(should)g(a)o(v)o(oid)e(running)i(pro)q(cesses)i (on)e(the)g(fron)o(t)g(end,)249 1919 y(b)q(ecause)c(comm)o(unicatio)o (n)8 b(b)q(et)o(w)o(een)13 b(those)f(pro)q(cesses)i(and)c(the)i(no)q (de)g(pro)q(cesses)h(m)o(ust)d(go)h(through)249 1973 y(the)j(PVM)g(daemon)e(and)h(a)g(TCP)h(so)q(c)o(k)o(et)g(link.)j(Most)d (of)f(the)h(computation)d(and)j(comm)o(uni)o(cation)249 2027 y(should)k(tak)o(e)f(place)h(on)g(the)g(compute)f(no)q(des)i(in)e (order)h(to)g(tak)o(e)g(adv)n(an)o(tage)e(of)i(the)g(pro)q(cessing)249 2081 y(p)q(o)o(w)o(er)c(of)g(these)h(no)q(des)g(and)e(the)i(fast)f(in)o (terconnects)h(b)q(et)o(w)o(een)h(them.)291 2135 y(Since)g(the)h(PVM)g (library)e(for)h(the)h(fron)o(t)f(end)h(is)f(di\013eren)o(t)h(from)e (the)i(one)f(for)g(the)h(no)q(des,)g(the)249 2189 y(executable)f(for)e (the)h(fron)o(t)f(end)h(m)o(ust)e(b)q(e)i(di\013eren)o(t)g(from)e(the)i (one)g(compiled)d(for)j(the)g(no)q(des.)20 b(An)249 2242 y(SPMD)11 b(program,)f(for)h(example,)e(has)j(only)e(one)h(source)i (\014le,)e(but)g(the)h(ob)r(ject)g(co)q(de)g(m)o(ust)e(b)q(e)i(link)o (ed)249 2296 y(with)h(the)g(fron)o(t)f(end)i(and)e(no)q(de)h(PVM)h (libraries)e(separately)i(to)e(pro)q(duce)i(t)o(w)o(o)e(executables)j (if)d(it)g(is)249 2350 y(to)i(b)q(e)g(started)h(from)d(the)j(fron)o(t)e (end.)19 b(An)13 b(alternativ)o(e)h(w)o(ould)f(b)q(e)h(a)g(\\hostless") g(SPMD)g(program,)249 2404 y(whic)o(h)g(could)g(b)q(e)g(spa)o(wned)g (from)f(the)h(PVM)g(console.)291 2458 y(T)m(able)f(7.1)g(sho)o(ws)h (the)h(nativ)o(e)e(system)h(calls)g(used)h(b)o(y)e(the)i(corresp)q (onding)g(PVM)f(functions)g(on)p eop %%Page: 130 149 130 148 bop 249 251 a Fu(130)1356 b(Chapter)13 b(7)249 497 y Fo(T)m(able)g(7.1)249 534 y Fy(Implemen)o(ta)o(tion)8 b(of)j(PVM)i(system)d(calls)p 357 577 1379 2 v 357 587 V 356 641 2 54 v 436 624 a FA(PVM)p 611 641 V 145 w(iPSC860)p 898 641 V 121 w(P)o(aragon)p 1160 641 V 292 w(CM-5)p 1734 641 V 357 642 1379 2 v 357 652 V 356 706 2 54 v 382 690 a(p)o(vm)p 464 690 13 2 v 13 w(spa)o(wn)p 611 706 2 54 v 50 w(getcub)q(e/load)p 898 706 V 69 w(nx)p 989 690 13 2 v 15 w(loadv)o(e)p 1160 706 2 54 v 294 w(fork)p 1734 706 V 357 708 1379 2 v 356 762 2 54 v 398 746 a(p)o(vm)p 480 746 13 2 v 13 w(send)p 611 762 2 54 v 78 w(isend/csend)p 898 762 V 63 w(isend/csend)p 1160 762 V 52 w(CMMD)p 1326 746 13 2 v 15 w(send)p 1421 746 V 15 w(async/)p 1557 746 V 16 w(noblo)q(c)o(k)p 1734 762 2 54 v 357 764 1379 2 v 356 818 2 54 v 400 801 a(p)o(vm)p 482 801 13 2 v 14 w(recv)p 611 818 2 54 v 144 w(irecv)p 898 818 V 188 w(irecv)p 1160 818 V 181 w(CMMD)p 1393 801 13 2 v 14 w(receiv)o(e)p 1528 801 V 17 w(async)p 1734 818 2 54 v 357 819 1379 2 v 356 873 2 54 v 385 857 a(p)o(vm)p 467 857 13 2 v 13 w(mcast)p 611 873 2 54 v 109 w(gsendx)p 898 873 V 151 w(gsendx)p 1160 873 V 95 w(CMMD)p 1326 857 13 2 v 15 w(send)p 1421 857 V 15 w(async/)p 1557 857 V 16 w(noblo)q(c)o(k)p 1734 873 2 54 v 357 875 1379 2 v 357 885 V 249 1001 a(v)n(arious)j(platforms.)291 1055 y(The)j(CM-5)f(is)h(somewhat)e(di\013eren)o(t)j(from)d(the)i(In)o (tel)g(systems)g(b)q(ecause)h(it)e(requires)i(a)f(sp)q(ecial)249 1109 y(host)g(pro)q(cess)i(for)e(eac)o(h)g(group)g(of)f(tasks)h(spa)o (wned.)25 b(This)16 b(pro)q(cess)i(enrolls)d(in)h(PVM)g(and)g(rela)o (ys)249 1163 y(messages)f(b)q(et)o(w)o(een)h(p)o(vmd)d(and)i(the)g(no)q (de)g(programs.)k(This,)c(needless)h(to)f(sa)o(y)m(,)f(adds)h(ev)o(en)g (more)249 1217 y(o)o(v)o(erhead)f(to)g(daemon-task)f(comm)o(uni)o (cations.)291 1271 y(Another)19 b(restrictiv)o(e)g(feature)g(of)f(the)h (CM-5)f(is)g(that)h(all)e(no)q(des)i(in)f(the)h(same)e(partition)h(are) 249 1325 y(sc)o(heduled)12 b(as)f(a)f(single)h(unit.)16 b(The)11 b(partitions)g(are)g(normally)d(con\014gured)j(b)o(y)g(the)g (system)f(manager)249 1379 y(and)16 b(eac)o(h)h(partition)f(m)o(ust)f (con)o(tain)h(at)h(least)f(16)g(pro)q(cessors.)28 b(User)17 b(programs)f(are)g(run)h(on)f(the)249 1433 y(en)o(tire)i(partition)d(b) o(y)i(default.)26 b(Although)17 b(it)f(is)h(p)q(ossible)g(to)f(idle)h (some)e(of)i(the)g(pro)q(cessors)i(in)d(a)249 1487 y(partition,)c(as)i (PVM)f(do)q(es)i(when)e(few)o(er)h(no)q(des)h(are)e(called)g(for,)g (there)i(is)e(no)g(easy)h(w)o(a)o(y)f(to)g(harness)249 1541 y(the)k(p)q(o)o(w)o(er)g(of)f(the)h(idle)f(pro)q(cessors.)29 b(Th)o(us,)17 b(if)e(PVM)i(spa)o(wns)g(t)o(w)o(o)f(groups)h(of)f (tasks,)h(they)h(will)249 1595 y(time-share)13 b(the)i(partition,)d (and)i(an)o(y)g(in)o(tergroup)g(tra\016c)g(m)o(ust)e(go)i(through)g(p)o (vmd.)291 1649 y(Additionally)m(,)g(CMMD)i(has)h(no)f(supp)q(ort)i(for) e(m)o(ulticasting.)24 b(Th)o(us,)17 b(p)o(vm)p 1519 1649 13 2 v 13 w(mcast\(\))g(is)f(imple-)249 1703 y(men)o(ted)e(with)f(a)h (lo)q(op)f(of)g(CMMD)p 803 1703 V 15 w(async)p 918 1703 V 15 w(send\(\).)249 1786 y Fr(7.10.2)48 b(Shared-Memory)14 b(Arc)o(hitectur)o(es)249 1869 y FA(The)k(shared-memory)d(arc)o (hitecture)k(pro)o(vides)f(a)f(v)o(ery)g(e\016cien)o(t)h(medium)c(for)j (pro)q(cesses)j(to)d(ex-)249 1923 y(c)o(hange)g(data.)27 b(In)16 b(our)h(implemen)o(tation,)d(eac)o(h)j(task)g(o)o(wns)g(a)f (shared)i(bu\013er)g(created)g(with)e(the)249 1977 y(shmget\(\))h (system)f(call.)27 b(The)17 b(task)g(id)f(is)h(used)h(as)f(the)h(\\k)o (ey")e(to)h(the)g(shared)h(segmen)o(t.)27 b(If)16 b(the)249 2030 y(k)o(ey)h(is)f(b)q(eing)h(used)h(b)o(y)e(another)h(user,)h(PVM)f (will)f(assign)g(a)h(di\013eren)o(t)g(id)g(to)f(the)h(task.)27 b(A)17 b(task)249 2084 y(comm)o(unicates)d(with)h(other)h(tasks)g(b)o (y)f(mapping)e(their)j(message)f(bu\013ers)i(in)o(to)e(its)g(o)o(wn)h (memory)249 2138 y(space.)291 2192 y(T)m(o)d(enroll)g(in)h(PVM,)g(the)g (task)g(\014rst)h(writes)g(its)f(Unix)f(pro)q(cess)j(id)e(in)o(to)f(p)o (vmd's)f(incoming)g(b)q(o)o(x.)249 2246 y(It)i(then)h(lo)q(oks)e(for)g (the)i(assigned)f(task)g(id)g(in)f(p)o(vmd's)f(pid)p Ft(!)p FA(TID)h(table.)291 2300 y(The)20 b(message)g(bu\013er)h(is)f (divided)g(in)o(to)f(pages,)j(eac)o(h)e(of)g(whic)o(h)g(holds)g(one)g (fragmen)o(t)f(\(Fig-)249 2354 y(ure)e(7.19\).)25 b(PVM's)16 b(page)h(size)g(can)f(b)q(e)h(a)f(m)o(ultiple)e(of)i(the)h(system)f (page)h(size.)26 b(Eac)o(h)17 b(page)f(has)249 2408 y(a)e(header,)h (whic)o(h)f(con)o(tains)h(the)g(lo)q(c)o(k)f(and)g(the)h(reference)i (coun)o(t.)i(The)c(\014rst)g(few)g(pages)f(are)h(used)249 2462 y(as)g(the)f(incoming)f(b)q(o)o(x,)g(while)h(the)h(rest)h(of)d (the)i(pages)g(hold)f(outgoing)f(fragmen)o(ts)g(\(Figure)i(7.20\).)p eop %%Page: 131 150 131 149 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(131)p 1 setlinewidth np 1138 690 a 1138 612 li 564 612 li 564 690 li closepath st 1 setlinewidth np 1138 768 a 1138 716 li 564 716 li 564 768 li closepath st 1 setlinewidth np 1138 716 a 1138 690 li 564 690 li 564 716 li closepath st 1 setlinewidth np 1138 1290 a 1138 768 li 564 768 li 564 1290 li closepath st 721 534 a Fq(P)o(age)16 b(La)o(y)o(out)799 664 y(lo)q(c)o(k)708 755 y(reference)e(coun)o(t)760 1003 y(fragmen)o(t)1204 729 y Fc(g)760 938 y Fq(message)1282 716 y(page)j(header)249 1379 y Fo(Figure)c(7.19)249 1416 y Fy(Structure)c(of)i(a)h(PVM)g(page) 249 1539 y FA(T)m(o)j(send)i(a)f(message,)g(the)h(task)f(\014rst)h(pac) o(ks)f(the)h(message)e(b)q(o)q(dy)h(in)o(to)g(its)g(bu\013er,)h(then)g (deliv)o(ers)249 1593 y(the)g(message)f(header)i(\(whic)o(h)e(con)o (tains)g(the)h(sender's)h(TID)e(and)h(the)g(lo)q(cation)e(of)h(the)h (data\))f(to)249 1647 y(the)e(incoming)c(b)q(o)o(x)j(of)f(the)h(in)o (tended)h(recipien)o(t.)k(When)13 b(p)o(vm)p 1247 1647 13 2 v 14 w(recv\(\))h(is)f(called,)f(PVM)h(c)o(hec)o(ks)h(the)249 1701 y(incoming)h(b)q(o)o(x,)j(lo)q(cates)g(and)g(unpac)o(ks)g(the)g (messages)g(\(if)f(an)o(y\),)h(and)f(decreases)j(the)f(reference)249 1755 y(coun)o(t)f(so)g(the)g(space)h(can)f(b)q(e)g(reused.)31 b(If)18 b(a)f(task)h(is)f(not)h(able)f(to)h(deliv)o(er)g(the)g(header)h (directly)249 1808 y(b)q(ecause)d(the)e(receiving)g(b)q(o)o(x)g(is)g (full,)e(it)h(will)g(blo)q(c)o(k)g(un)o(til)g(the)i(other)f(task)g(is)g (ready)m(.)291 1862 y(Inevitably)c(some)g(o)o(v)o(erhead)h(will)f(b)q (e)h(incurred)h(when)g(a)f(message)f(is)h(pac)o(k)o(ed)g(in)o(to)g(and) g(unpac)o(k)o(ed)249 1916 y(from)h(the)i(bu\013er,)h(as)e(is)h(the)g (case)h(with)e(all)g(other)h(PVM)g(implemen)o(tations.)h(If)e(the)i (bu\013er)f(is)g(full,)249 1970 y(then)g(the)g(data)e(m)o(ust)h (\014rst)h(b)q(e)f(copied)h(in)o(to)e(a)h(temp)q(orary)g(bu\013er)h(in) e(the)i(pro)q(cess's)h(priv)n(ate)e(space)249 2024 y(and)h(later)g (transferred)h(to)f(the)h(shared)f(bu\013er.)291 2078 y(Memory)i(con)o(ten)o(tion)h(is)g(usually)g(not)g(a)g(problem.)27 b(Eac)o(h)18 b(pro)q(cess)h(has)e(its)h(o)o(wn)f(bu\013er,)h(and)249 2132 y(eac)o(h)12 b(page)g(of)f(the)h(bu\013er)h(has)f(its)f(o)o(wn)g (lo)q(c)o(k.)17 b(Only)12 b(the)g(page)f(b)q(eing)h(written)g(to)g(is)f (lo)q(c)o(k)o(ed,)h(and)f(no)249 2186 y(pro)q(cess)i(should)e(b)q(e)h (trying)e(to)h(read)h(from)d(this)i(page)h(b)q(ecause)g(the)g(header)g (has)f(not)g(b)q(een)i(sen)o(t)f(out.)249 2240 y(Di\013eren)o(t)j(pro)q (cesses)h(can)f(read)f(from)f(the)h(same)g(page)g(without)f(in)o (terfering)h(with)g(eac)o(h)h(other,)f(so)249 2294 y(m)o(ulticasting)e (will)g(b)q(e)i(e\016cien)o(t)h(\(they)f(do)g(ha)o(v)o(e)f(to)h (decrease)i(the)e(coun)o(ter)h(afterw)o(ards,)f(resulting)249 2348 y(in)j(some)g(con)o(ten)o(tion\).)29 b(The)18 b(only)f(time)f(con) o(ten)o(tion)i(o)q(ccurs)h(is)e(when)h(t)o(w)o(o)f(or)h(more)e(pro)q (cesses)249 2402 y(trying)c(to)g(deliv)o(er)g(the)g(message)g(header)h (to)f(the)g(same)g(pro)q(cess)h(at)f(the)h(same)e(time.)16 b(But)d(since)f(the)249 2456 y(header)j(is)f(v)o(ery)g(short)g(\(16)g (b)o(ytes\),)g(suc)o(h)h(con)o(ten)o(tion)f(should)f(not)h(cause)h(an)o (y)e(signi\014can)o(t)h(dela)o(y)m(.)p eop %%Page: 132 151 132 150 bop 249 251 a Fu(132)1356 b(Chapter)13 b(7)p 1 setlinewidth np 915 637 a 915 581 li 555 581 li 555 637 li closepath st 1 setlinewidth np 915 694 a 915 637 li 555 637 li 555 694 li closepath st 1 setlinewidth np 915 1245 a 915 694 li 555 694 li 555 1245 li closepath st 1 setlinewidth np 1523 637 a 1523 581 li 1163 581 li 1163 637 li closepath st 1 setlinewidth np 1523 1245 a 1523 637 li 1163 637 li 1163 1245 li closepath st 679 614 a FC(in)o(b)q(o)o(x)623 671 y(pid-tid)k(table)645 840 y(outgoing)668 896 y(pages)713 963 y(.)713 997 y(.)713 1031 y(.)1276 817 y(outgoing)1298 885 y(pages)1343 941 y(.)1343 986 y(.)1343 1031 y(.)1298 614 y(in)o(b)q(o)o(x)577 524 y(p)o(vmd)f(msg)e(bu\013er)285 b(task)14 b(msg)h(bu\013er)249 1330 y Fo(Figure)e(7.20)249 1367 y Fy(Structures)c(of)i(shared)f (message)g(bu\013ers)291 1490 y FA(T)m(o)i(minimi)o(ze)f(the)j(p)q (ossibilit)o(y)f(of)f(page)i(faults,)e(PVM)i(attempts)f(to)h(use)g (only)e(a)i(small)d(n)o(um)o(b)q(er)249 1544 y(of)k(pages)h(in)g(the)g (message)g(bu\013er)g(and)g(recycle)h(them)e(as)h(so)q(on)g(as)g(they)g (ha)o(v)o(e)g(b)q(een)g(read)h(b)o(y)e(all)249 1598 y(in)o(tended)g (recipien)o(ts.)291 1652 y(Once)k(a)f(task's)g(bu\013er)i(has)e(b)q (een)h(mapp)q(ed,)f(it)g(will)f(not)h(b)q(e)h(unmapp)q(ed)e(unless)i (the)g(system)249 1706 y(limits)d(the)j(n)o(um)o(b)q(er)e(of)h(mapp)q (ed)f(segmen)o(ts.)32 b(This)18 b(strategy)h(sa)o(v)o(es)g(time)e(for)g (an)o(y)h(subsequen)o(t)249 1760 y(message)c(exc)o(hanges)h(with)e(the) i(same)e(pro)q(cess.)249 1843 y Fr(7.10.3)48 b(Optimized)13 b(Send)h(and)h(Receiv)o(e)g(on)g(MPP)249 1926 y FA(In)g(the)h(original) e(implem)o(en)o(tation,)e(all)i(user)j(messages)e(are)h(bu\013ered)h(b) o(y)e(PVM.)g(The)h(user)g(m)o(ust)249 1980 y(pac)o(k)i(the)g(data)g(in) o(to)f(a)h(PVM)g(bu\013er)h(b)q(efore)f(sending)h(it,)f(and)f(unpac)o (k)h(the)h(data)e(after)h(it)g(has)249 2034 y(b)q(een)g(receiv)o(ed)g (in)o(to)e(an)h(in)o(ternal)f(bu\013er.)28 b(This)17 b(approac)o(h)f(w)o(orks)h(w)o(ell)f(on)h(systems)g(with)f(rela-)249 2088 y(tiv)o(ely)d(high)g(comm)o(unication)e(latency)m(,)i(suc)o(h)h (as)g(the)g(Ethernet.)20 b(On)14 b(MPP)g(systems)g(the)h(pac)o(king)249 2142 y(and)20 b(unpac)o(king)f(in)o(tro)q(duce)h(substan)o(tial)f(o)o (v)o(erhead.)36 b(T)m(o)19 b(solv)o(e)h(this)f(problem)g(w)o(e)g(added) i(t)o(w)o(o)249 2196 y(new)d(PVM)f(functions,)h(namely)d(p)o(vm)p 876 2196 13 2 v 14 w(psend\(\))j(and)f(p)o(vm)p 1207 2196 V 13 w(precv\(\).)30 b(These)18 b(functions)f(com)o(bine)249 2249 y(pac)o(king/unpac)o(king)e(and)h(sending/receiving)g(in)o(to)f (one)i(single)e(step.)26 b(They)16 b(could)g(b)q(e)h(mapp)q(ed)249 2303 y(directly)e(in)o(to)f(the)i(nativ)o(e)e(message)h(passing)f (primitiv)o(es)f(a)o(v)n(ailable)g(on)h(the)i(system,)e(doing)g(a)o(w)o (a)o(y)249 2357 y(with)j(in)o(ternal)g(bu\013ers)h(altogether.)29 b(On)17 b(the)h(P)o(aragon)f(these)h(new)g(functions)f(giv)o(e)g (almost)e(the)249 2411 y(same)e(p)q(erformance)h(as)g(the)g(nativ)o(e)g (ones.)p eop %%Page: 133 152 133 151 bop 249 251 a Fu(Ho)o(w)13 b(PVM)f(W)m(orks)1241 b(133)291 507 y FA(Although)16 b(the)h(user)g(can)g(use)g(b)q(oth)g(p)o (vm)p 977 507 13 2 v 13 w(psend\(\))h(and)e(p)o(vm)p 1306 507 V 14 w(send\(\))h(in)f(the)h(same)f(program,)249 561 y(on)j(MPP)h(the)g(p)o(vm)p 585 561 V 13 w(psend\(\))h(m)o(ust)d(b) q(e)i(matc)o(hed)f(with)g(p)o(vm)p 1277 561 V 13 w(precv\(\),)i(and)f (p)o(vm)p 1619 561 V 13 w(send\(\))g(with)249 615 y(p)o(vm)p 331 615 V 13 w(recv\(\).)p eop %%Page: 134 153 134 152 bop eop %%Page: 135 154 135 153 bop 249 325 a Fp(8)25 b FD(Adv)m(anced)17 b(T)l(opics)249 628 y(8.1)52 b(XPVM)249 736 y FA(It)13 b(is)g(often)g(useful)h(and)f (alw)o(a)o(ys)f(reassuring)i(to)f(b)q(e)g(able)g(to)g(see)i(the)e (presen)o(t)i(con\014guration)e(of)f(the)249 790 y(virtual)k(mac)o (hine)g(and)h(the)g(status)h(of)f(the)g(hosts.)28 b(It)17 b(w)o(ould)g(b)q(e)g(ev)o(en)h(more)e(useful)h(if)f(the)i(user)249 844 y(could)d(also)g(see)i(what)e(his)g(program)f(is)h(doing|what)f (tasks)i(are)g(running,)f(where)h(messages)g(are)249 897 y(b)q(eing)d(sen)o(t,)g(etc.)18 b(The)13 b(PVM)g(GUI)g(called)f (XPVM)h(w)o(as)f(dev)o(elop)q(ed)i(to)e(displa)o(y)g(this)g (information,)249 951 y(and)i(more.)291 1005 y(XPVM)h(com)o(bines)f (the)i(capabilities)e(of)h(the)h(PVM)f(console,)g(a)g(p)q(erformance)g (monitor,)e(and)i(a)249 1059 y(call-lev)o(el)h(debugger)h(in)o(to)f(a)h (single,)f(easy-to-use)i(X-Windo)o(ws)e(in)o(terface.)27 b(XPVM)18 b(is)e(a)o(v)n(ailable)249 1113 y(from)i(netlib)h(in)f(the)i (directory)g(p)o(vm3/xp)o(vm.)31 b(It)19 b(is)g(distributed)h(as)g (precompiled,)f(ready-to-)249 1167 y(run)c(executables)h(for)e(SUN4,)g (RS6K,)g(ALPHA,)g(SUN4SOL2,)g(HPP)m(A,)g(and)h(SGI5.)k(The)c(XPVM)249 1221 y(source)g(is)f(also)f(a)o(v)n(ailable)f(for)h(compiling)f(on)h (other)i(mac)o(hines.)291 1275 y(XPVM)20 b(is)g(written)h(en)o(tirely)f (in)g(C)g(using)g(the)h(TCL/TK)f([12)o(])g(to)q(olkit)f(and)h(runs)g (just)h(lik)o(e)249 1329 y(another)12 b(PVM)g(task.)17 b(If)12 b(a)f(user)i(wishes)f(to)f(build)g(XPVM)h(from)e(the)i(source,) h(he)f(m)o(ust)e(\014rst)j(obtain)249 1383 y(and)h(install)f(the)i (TCL/TK)f(soft)o(w)o(are)g(on)g(his)g(system.)19 b(TCL)14 b(and)g(TK)g(w)o(ere)h(dev)o(elop)q(ed)g(b)o(y)f(John)249 1437 y(Ousterhout)e(at)f(Berk)o(eley)h(and)e(can)h(b)q(e)h(obtained)e (b)o(y)h(anon)o(ymous)e(ftp)h(to)h Fs(sprite.berkeley.ed)o(u)249 1491 y FA(The)16 b(TCL)f(and)h(XPVM)g(source)h(distributions)e(eac)o(h) h(con)o(tain)f(a)g(README)h(\014le)f(that)h(describ)q(es)249 1545 y(the)f(most)d(up-to-date)i(installation)e(pro)q(cedure)k(for)e (eac)o(h)g(pac)o(k)n(age)f(resp)q(ectiv)o(ely)m(.)291 1599 y(Figure)h(8.1)e(sho)o(ws)j(a)e(snapshot)i(of)e(XPVM)h(in)g(use.) 291 1653 y(Lik)o(e)f(the)i(PVM)f(console,)g(XPVM)g(will)e(start)j(PVM)f (if)f(PVM)h(is)g(not)g(already)g(running,)f(or)h(will)249 1707 y(attac)o(h)k(to)f(the)i(lo)q(cal)d(p)o(vmd)g(if)h(it)h(is.)29 b(The)18 b(console)g(can)g(tak)o(e)g(an)f(optional)f(host\014le)i (argumen)o(t)249 1761 y(whereas)i(XPVM)f(alw)o(a)o(ys)e(reads)i Fs($HOME/.xpvm)p 1053 1761 14 2 v 14 w(hosts)e FA(as)i(its)f (host\014le.)32 b(If)18 b(this)h(\014le)f(do)q(es)h(not)249 1815 y(exist,)13 b(then)h(XPVM)g(just)f(starts)i(PVM)e(on)g(the)h(lo)q (cal)e(host)i(\(or)f(attac)o(hes)h(to)f(the)h(existing)f(PVM\).)249 1869 y(In)18 b(t)o(ypical)f(use,)i(the)g(host\014le)f(.xp)o(vm)p 872 1869 13 2 v 12 w(hosts)h(con)o(tains)f(a)f(list)h(of)f(hosts)h (prep)q(ended)i(with)e(an)f(&.)249 1923 y(These)f(hostnames)f(then)h (get)f(added)g(to)g(the)h FB(Hosts)f FA(men)o(u)f(for)g(addition)g(and) h(deletion)g(from)e(the)249 1977 y(virtual)g(mac)o(hine)g(b)o(y)g(clic) o(king)g(on)h(them.)291 2031 y(The)i(top)g(ro)o(w)g(of)f(buttons)i(p)q (erform)e(console-lik)o(e)g(functions.)25 b(The)16 b FB(Hosts)g FA(button)g(displa)o(ys)f(a)249 2085 y(men)o(u)d(of)g (hosts.)18 b(Clic)o(king)11 b(on)h(a)h(host)g(toggles)f(whether)i(it)e (is)h(added)g(or)f(deleted)i(from)d(the)i(virtual)249 2139 y(mac)o(hine.)j(A)o(t)c(the)g(b)q(ottom)f(of)g(the)h(men)o(u)f(is) h(an)f(option)g(for)h(adding)f(a)g(host)h(not)g(listed.)17 b(The)12 b FB(T)m(asks)249 2193 y FA(button)h(brings)g(up)g(a)f(men)o (u)g(whose)i(most-used)e(selection)i(is)e FB(sp)n(awn)p FA(.)18 b(Selecting)13 b(spa)o(wn)g(brings)g(up)249 2247 y(a)g(windo)o(w)f(where)i(one)f(can)g(set)h(the)g(executable)g(name,)d (spa)o(wn)i(\015ags,)g(start)g(p)q(osition,)f(n)o(um)o(b)q(er)h(of)249 2301 y(copies)h(to)f(start,)h(etc.)19 b(By)13 b(default,)g(XPVM)h (turns)g(on)f(tracing)h(in)f(all)f(tasks)i(\(and)f(their)h(c)o (hildren\))249 2355 y(started)g(inside)g(XPVM.)f(Clic)o(king)f(on)h FB(Start)f FA(in)h(the)h(spa)o(wn)f(windo)o(w)f(starts)j(the)e(task,)g (whic)o(h)h(will)249 2408 y(then)j(app)q(ear)g(in)f(the)h(space-time)f (view.)25 b(The)17 b FB(R)n(eset)g FA(button)f(has)h(a)f(men)o(u)f(for) h(resetting)i(PVM)249 2462 y(\(i.e.,)f(kill)e(all)h(PVM)h(tasks\))h(or) f(resetting)h(di\013eren)o(t)g(parts)g(of)e(XPVM.)h(The)h FB(Quit)e FA(button)i(exits)p eop %%Page: 136 155 136 154 bop 249 251 a Fu(136)1356 b(Chapter)13 b(8)296 759 y 23681433 21313290 0 6578176 36311531 34206515 startTexFig 296 759 a %%BeginDocument: xpvm1.bw.p.ps /bitdump % stk: width, height, iscale % dump a bit image with lower left corner at current origin, % scaling by iscale (iscale=1 means 1/300 inch per pixel) { % read arguments /iscale exch def /height exch def /width exch def % scale appropriately width iscale mul height iscale mul scale % allocate space for one scanline of input /picstr % picstr holds one scan line width 7 add 8 idiv % width of image in bytes = ceiling(width/8) string def % read and dump the image width height 1 [width 0 0 height neg 0 height] { currentfile picstr readhexstring pop } image } def 72 300 div dup scale 125 774 translate 1150 876 2 bitdump aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffff 555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffff afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffff 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffff afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffff 5e003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0074000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffe aeffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffddb78000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffe 5effbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557e aee3bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafe 5ec1bfdd0dd2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e aec1bfeb75d57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefe 5ec1bff775d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e aee3bff776b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800efe 5effbfeb0eb57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77fdffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb6f7e aeffbfdd7f777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef7fdfffdfbefbfffdfbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb6efe 5e003fff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff771dfffdffefffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb6f7e afffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef60dfee873ef3831873c69ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836eff 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff760dfeedfbefbf7edfbba6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6f7c affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef60dfeedfbefbef0dfbbaeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6efc 5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555771dfeedfbefbdeedfbbaeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff806f7f aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaf7fdfecdbbefbbeedbbbaeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfeefd 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff77fdff2e71c71830e71c6effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfef7d affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800efd 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefe 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafc 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557c affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefc 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe80 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5fffffffffffffffffffffffffffffffffffffffffffffffffffff3cf81f3cf9f3ff9fe19f87ffcc09e4f9f87f0fe19f870e7ff800983fc3ffe61c3879c7ffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 afffffffffffffffffffffffffffffffffffffffffffffffffffff3cf9cf3cf9f3fe1fcc9f33ff9ce1e4f9f33e67cc9f32673ff9e7999f99ffc4c99321e7fffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe82 5fffffffffffffffffffffffffffffffffffffffffffffffffffff99f9cf99f8e3ff9fcc9333ff9ce4cc71ff3fe7cc9333e73ff9e799cf9933a4c99339e7ffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffe73324fffe67fffffffffe007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 afffffffffffffffffffffffffffffffffffffffffffffffffffffc3f9cf99f8e3ff9fcc8933ff3ce4cc71fc7f8fcc89338f9ff9e799cf9933a4c99339e7fffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffe733e7fffe7fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5fffffffffffffffffffffffffffffffffffffffffffffffffffffe7f81f99f843ff9fcc9933ff3c0ccc21ff3fe7cc9933e79ff9e799cf998764c99339e7ffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffe72124830c26193f3987ffce511c3fffffffffffffffffffffffffffffffffffffffffffffffffffffff01 afffffffffffffffffffffffffffffffffffffffffffffffffffffc3f9ffdbf953ff9fcc9933ff3cfedca9ff3fe7cc9933e79ff9e799cf99cee4c99339e7fffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffe73324f26664c89f3933ffce4cc99ffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5fffffffffffffffffffffffffffffffffffffffffffffffffffff99f9ffc3f913ff9fcc9933ff3cfe1c89ff3fe7cc9933e79ff9e799cf998600c99339e7ffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffe73324e7e664c99f931fffce4cc99fffffffffffffffffffffffffffffffffffffffffffffffffffffff01 afffffffffffffffffffffffffffffffffffffffffffffffffffff3cf9ffe7f9b3ff9e4c8933ff3cff3cd9f332664c8932679ff9e7999f9933e4c99339e7fffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffe73324ef0664c99f93c7ffce4cc81ffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5fffffffffffffffffffffffffffffffffffffffffffffffffffff3cf9ffe7f9b3ff9e619387ff3cff3cd9f8730e6193870f9ff9e7983fc333e61c3879e7ffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffe73324ce6664c99fc7e3ffce4cc9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01 afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffff3ff9ffffffffffffffffffe7fffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffff272249e6644c99fc7333fce4cc99ffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffff3ff9ffffffffffffffffffe7ffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffff07924831326199fef873fce4ccc3fffffffffffffffffffffffffffffffffffffffffffffffffffffff03 afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffe7ff8ffffffffffffffffffc7fffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff39ffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f19ffffffff81e7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff19fffffffff9e7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f29fffffffff3e7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff02 afffcf204f27cf9e1fffffffc0ffffff3f83fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff29fffffffff3e7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe82 5fffcf270f27cf9e7fffffffce7fffff3f99ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f31ffffffffe7e7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff02 afffe66726638fcc9866661fce61c3861f9cc3270ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff31ffffffffe7e7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe82 5ffff0e726638fcc932664cfce4c99333f9c991267ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f39ffffffffe7e7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff02 affff9e066610fcc93324c7fc0cc8f333f9c993267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff39ffffffffcfe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe82 5ffff0e7f6e54fed90324f1fccc0e3033f9c993207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffcfe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff02 afffe667f0e44fe193f24f8fce4ff13f3f9c99327ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe82 5fffcf27f9e6cff393399ccfce4c99332f999932667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff02 afffcf27f9e6cff398799e1fce61c3879f83c3330e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe82 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff02 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff00 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe80 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe81 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff01 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff00ffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe81 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fe7ffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff02 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe7ffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe82 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fe7ffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe7ffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe80 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fe7ffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff00 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe7ffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe80 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fe7ffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff00 afffffffffffffffffeaaaaaaaaabfffffffffffffffe00000000003fffffffffffffffaaaaaaaaaabfffffffffffffffd55555557fffffffffffffffffeaaaaaaafffffffffffffffffff55555555feffe7ffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe80 5fffffffffffffffffd5555555555fffffffffffffffe00000000003fffffffffffffff55555555553fffffffffffffffaaaaaaaa7fffffffffffffffffd55555557fffffffffffffffffeaaaaaaa9ff7fffffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff01 afffffffffffffffffefffffffff9fffffffffffffffe7fffffffff7fffffffffffffffbfffffffff3fffffffffffffffdffffffe7fffffffffffffffffeffffffe7ffffffffffffffffff7ffffff9feffffffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe83 5fffffffffffffffffdfffffffff9fffffffffffffffe7fffffffffbfffffffffffffff7fffffffff3fffffffffffffffbffffffe7fffffffffffffffffdffffffe7fffffffffffffffffefffffff9ff7fffffffffffffe7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff00 afffffffffffffffffefffffffff9fffffffffffffffe7fffffffff7fffffffffffffffbfffffffff3fffffffffffffffdffffffe7fffffffffffffffffeffffffe7ffffffffffffffffff7ffffff9feffffffffffffffe7fffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe81 5fffffffffffffffffd9cffff3ff9fffffffffffffffe7fffffffffbfffffffffffffff607fffff9f3fffffffffffffffbc3ff33e7fffffffffffffffffd9cff33e7fffffffffffffffffece7f9ff9ff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff01 afffffffffffffffffe9cffff3ff9fffffffffffffffe7fffffffff7fffffffffffffffa73fffff9f3fffffffffffffffd99fff3e7fffffffffffffffffe9cff33e7ffffffffffffffffff4e7f9ff9feffffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe81 5fffffffffffffffffd9cc3861879fffffffffffffffe700fffcfffbfffffffffffffff6730e1c30f3fffffffffffffffb3c9921e7fffffffffffffffffd9cc321e7fffffffffffffffffece619279ff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff03 afffffffffffffffffe9c99333339fffffffffffffffe7e7fffcfff7fffffffffffffffa7264c999f3fffffffffffffffd3c9933e7fffffffffffffffffe9c9933e7ffffffffffffffffff4e4c9139feffffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe82 5fffffffffffffffffd80991f31f9fffffffffffffffe7e7870ccc3bfffffffffffffff606647999f3fffffffffffffffb3c9933e7fffffffffffffffffd80f933e7fffffffffffffffffec04c9339ff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff03 afffffffffffffffffe9c99c73c79fffffffffffffffe7e732649997fffffffffffffffa66071819f3fffffffffffffffd349933e7fffffffffffffffffe9cc133e7ffffffffffffffffff4e409339feffffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe81 5fffffffffffffffffd9c99e33e39fffffffffffffffe7e7f23c38fbfffffffffffffff6727f89f9f3fffffffffffffffb309933e7fffffffffffffffffd9c9933e7fffffffffffffffffece4f9339ff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff01 afffffffffffffffffe9c99332339fffffffffffffffe7e7838c3e37fffffffffffffffa7264c99973fffffffffffffffd999132e7fffffffffffffffffe9c9932e7ffffffffffffffffff4e4c9139feffe7ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe81 5fffffffffffffffffd9cc3879879fffffffffffffffe7e733c49f1bfffffffffffffff6730e1c3cf3fffffffffffffffbc0c939e7fffffffffffffffffd9cc439e7fffffffffffffffffece619279ff7fc3ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff01 afffffffffffffffffefffffffff9fffffffffffffffe7e73264c997fffffffffffffffbfffffffff3fffffffffffffffdffffffe7fffffffffffffffffeffffffe7ffffffffffffffffff7ffff3f9feffdbffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe81 5fffffffffffffffffdfffffffff9fffffffffffffffe7e7890ce43bfffffffffffffff7fffffffff3fffffffffffffffbffffffe7fffffffffffffffffdffffffe7fffffffffffffffffefffff3f9ff7f99ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff01 afffffffffffffffffefffffffff9fffffffffffffffe7fffffffff7fffffffffffffffbfffffffff3fffffffffffffffdffffffe7fffffffffffffffffeffffffe7ffffffffffffffffff7ffff3f9feff99ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe81 5fffffffffffffffffdfffffffff9fffffffffffffffe7fffffffffbfffffffffffffff7fffffffff3fffffffffffffffbffffffe7fffffffffffffffffdffffffe7fffffffffffffffffefffffff9ff7f81ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff03 afffffffffffffffffefffffffff9fffffffffffffffe7fffffffff7fffffffffffffffbfffffffff3fffffffffffffffdffffffe7fffffffffffffffffeffffffe7ffffffffffffffffff7ffffff9feff3cffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe83 5fffffffffffffffffdfffffffff9fffffffffffffffe7fffffffffbfffffffffffffff7fffffffff3fffffffffffffffbffffffe7fffffffffffffffffdffffffe7fffffffffffffffffefffffff9ff7f3cffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff03 afffffffffffffffffe0000000001fffffffffffffffe55555555557fffffffffffffff80000000003fffffffffffffffc00000007fffffffffffffffffe00000007ffffffffffffffffff00000001feff3cffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe81 5fffffffffffffffffc0000000001fffffffffffffffeaaaaaaaaaabfffffffffffffff00000000003fffffffffffffff800000007fffffffffffffffffc00000007fffffffffffffffffe00000001ff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe83 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff03 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe83 5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe73fe7fffffcff9e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff02 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe33fe7fffffcff9e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff83ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe82 5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe330c2666190cfcc986667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f39ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff02 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe52666664c809fcc932667ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff39ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe82 5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5266724cc8c3fcc93324ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f8fffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff02 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6206724cc9c3fed90324fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffe3ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffe82 5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe627e724cc9c9fe193f24ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff1ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff02 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7266599cc9ccff393399fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff39ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffec2 5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe730f399e19ce7f398799ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f39ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff42 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff83ffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000ffffffeffec2 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7ffffffff0000000380e9f0000000000000001000000000000000000000000000002000000000000000000000000000000000fffffff7ff42 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffec3 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff40 affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffec0 5ffc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff43 affc000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffec1 5ffcff7f8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff41 affcff3f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffec1 5ffcfe3f8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff42 affcfd1f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffec2 5ffcfa9f8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff43 affcfdcf4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff39ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffec0 5ffcfbcf8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f33ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff40 affcf7e74ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff27ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffec0 5ffcefe78fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0fffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcdff34ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff0fffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffceff38fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f27ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff33ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffc80018fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f39ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affc00004ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff3cffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000000003ff00000000000000000ffc00000000000000003fffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff4007fffffffffff82ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40080000000000142ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40100000000000242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff80803c1fc1fffbff403fffffffffffc42ffd000feff87c07c000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40600000000000642ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff80800c0f81fffbff40400000000000242ffd000feffe7e0fc000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40400000000000242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffe3e3870707fffbff4043fffffffffc242ffd0003838f1f1f0000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40460000000c06242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeff83ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffe3e00f0207fffbff40440000001c02242ffd000383fe1fbf0000bfffffffffffffffffffffffffffffffffffff7f39ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40440000003802242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeff39ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffe3e00f1047fffbff40440000007002242ffd000383fe1df70000bfffffffffffffffffffffffffffffffffffff7f8fffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40440000007002242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffe3ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffe3e38718c7fffbff404400000e3802242ffd0003838f1ce70000bfffffffffffffffffffffffffffffffffffff7ff1ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff404400001f1c02242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeff39ffffffffffe7fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff80800c1dc1fffbff404400003b8e02242ffd000feffe7c47c000bfffffffffffffffffffffffffffffffffffff7f39ffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff4044000071c71a242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeff83ffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff80803c1fc1fffbff4044000038c3ba242ffd000feff87c07c000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff404400041cc1f2242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff4044000f0ee0e2242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40440007c7f802242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40440007f39e02242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffc000003ffffbff404400e339c602242ffd000007fffff80000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffe3ffff8bffffbff404401f31ce002242ffd0000380000e80000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff1ffffc53ffffbff404403b99e7002242ffd0001c00007580000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff8fffff2abffffbff4044071df73002242ffd000e00001aa80000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffe7ffff8553f87fbff4044038ce38002242ffd00300000f5580f00bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff8000002aabfbbfbff404439d8710002242ffd00ffffffaaa80880bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbfffff5553fbbfbff404478f0380002242ffd0080000155580880bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff0032aabf87fbff4044e0701c0002242ffd00801ff9aaa80f00bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3fb5553faffbff4044c038080002242ffd0080180955580a00bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3fb2aabfb7fbff4044ff1c000002242ffd00801809aaa80900bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffa010035553fbbfbff40447f8e000002242ffd00bfdff955580880bffffffffffffffffffffffffffffffffffffeffffffffffffe007fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffa013fb2aabffffbff404401c7000002242ffd00bfd809aaa80000bfffffffffffffffffffffffffffffffffffff7fffffffffffe007fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3fb5553fc7fbff404400c2000002242ffd0080180955580700bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffa010032aabfbbfbff404408c0000002242ffd00bfdff9aaa80880bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffa013fb5553fbffbff40440dc0000002242ffd00bfd80955580800bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3fb2aabfc7fbff40440f80000002242ffd00801809aaa80700bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffa010035553ffbfbff40440700000002242ffd00bfdff955580080bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffa0120b2aabfbbfbff40460000000006242ffd00bfdbe9aaa80880bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3db5553fc7fbff4043fffffffffc242ffd0080184955580700bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffa010032aabffffbff40400000000000282ffd00bfdff9aaa80000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffa013ab5553fc7fbff40400000000000302ffd00bfd8a955580700bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff6ab2aabfbbfbff40600000000000602ffd008012a9aaa80880bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff0035553fbffbff403fffffffffffc02ffd00801ff955580800bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff2cb2aabf87fbff40000200000200002ffd00801a69aaa80f00bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff6cb5553fbbfbff40000100000400002ffd0080126955580880bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff0032aabfbbfbff43fffe80000bffffeffd00801ff9aaa80880bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3fb5553fc7fbff4400007ffff000002ffd0080180955580700bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3fb2aabffffbff48000000000000006ffd00801809aaa80000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3fb5553fbbfbff5fffffffffffffffaffd0080180955580880bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3fb2aabfb7fbff5000000000000000affd00801809aaa80900bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff0035553faffbff51000cccccccccccaffd00801ff955580a00bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff3fb2aabf9ffbff529fccccccccccccaffd00801809aaa80c00bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff67b5553faffbff545fc00000000000affd0080130955580a00bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff7fb2aabfb7fbff5280133333333333affd00801009aaa80900bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbff0035553fbbfbff5100333333333333affd00801ff955580880bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbfffff2a8fffffbff5000000000000000affd00800001aae00000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbfffff547fffffbff5cccccccccccccccaffd0080000157000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffbfffff23ffffffbff5cccccccccccccccaffd00800001b8000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff8000000fffffffbff5000000000000000effd00ffffffe0000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff5fffffffffffffffaffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40000000000000002ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff40000000000000002ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff9f3fcf9ff0fffbff7fff3fffffffffffeffdffffffffffffffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff9fffcf9fe67ffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff93324993267ffbff7fff30e190cc3fffeffdffffe19cc327ffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff89244493267ffbff7fff264c80c99fffeffdffffcc9c9913ffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff99264c93267ffbff7fff27fc8cc8ffffeffdffffcfc9f933ffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff99264c93267ffbff7fff27e09cce3fffeffdffffcfc9c133ffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff99264c93267ffbff7fff27cc9ccf1fffeffdffffcfe39933ffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff89244492267ffbff7fff264c9c899fffeffdffffcce39933ffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff9332499930fffbff7fff30e21e4c3fffeffdffffe1f3c433ffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffe7ffffffffbff7fffffffffffffffeffdfffffff7ffffffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffe67ffffffffbff7fffffffffffffffeffdffffffe7ffffffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffff0fffffffffbff7fffffffffffffffeffdffffffcfffffffffbffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000000003ff00000000000000000ffc00000000000000003ffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcd5554ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcaaa98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcbff98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcdff94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffca0018ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe7fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcc0014ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe83 5ffcffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff7fffffffffffc3e000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffdfffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffeffffffffffff99e000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000000003ff00000000000000000ffc00000000000000003fffffffffffffffffffffffffffffffffffff7fffffffffff99e000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffeffffffffffff99e000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd800ffffffffffff03ff4007fffffffffff82ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffff99e000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80100000000000283ff40080000000000142ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffff99e000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80200000000000483ff40100000000000242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffff99e000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd807fffffffffff883ff403fffffffffffc42ffd000feff87c07c000bffffffffffffffffffffffffffffffffffffeffffffffffff99e000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80c00000000000c83ff40600000000000642ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffc3e000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80800000000000483ff40400000000000242ffd000feffe7e0fc000bffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80800000000000483ff40400000000000242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8087fffffffff8483ff4043fffffffffc242ffd0003838f1f1f0000bffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd808c000000180c483ff40460000000c06242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffffff7ff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80880000003804483ff40440000001c02242ffd000383fe1fbf0000bffffffffffffffffffffffffffffffffffffeffffffffffffffe000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffeffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80880000007004483ff40440000003802242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe555555555aaaaaaab6abd6aaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaad5555555555555555555556aaaaaaaaaaa95555557ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8088000000e004483ff40440000007002242ffd000383fe1df70000bffffffffffffffffffffffffffffffffffffeffffffffffffffeaaaaaaaaa55555554954295555555555555551555555555555555555555555555552aaaaaaaaaaaaaaaaaaaaa9555555555556aaaaaaffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8088000000e004483ff40440000007002242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd808800001c7004483ff404400000e3802242ffd0003838f1ce70000bffffffffffffffffffffffffffffffffffffeffffffffffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd808800003e3804483ff404400001f1c02242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80880000771c04483ff404400003b8e02242ffd000feffe7c47c000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7ff8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80880000e38e34483ff4044000071c71a242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7ff1555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557ff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80880000718774483ff4044000038c3ba242ffd000feff87c07c000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fa8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3afeffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd808800083983e4483ff404400041cc1f2242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7f797ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5d7f7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8088001e1dc1c4483ff4044000f0ee0e2242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7ef8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fbeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8088000f8ff004483ff40440007c7f802242ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7df97ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5fdf7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8088000fe73c04483ff40440007f39e02242ffd0000000000000000bffffffffffffffffffffffffffffffffffffeffffffffffffffe6bf8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3feaffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd808801c6738c04483ff404400e339c602242ffd000007fffff80000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe0ff97ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5ff17ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd808803e639c004483ff404401f31ce002242ffd0000380000e80000bffffffffffffffffffffffffffffffffffffeffffffffffffffe63f8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fe2ffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd808807733ce004483ff404403b99e7002242ffd0001c00007580000bfffffffffffffffffffffffffffffffffffff7fffffffffffffe78f97ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5f8f7ff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80880e3bee6004483ff4044071df73002242ffd000e00001aa80000bffffffffffffffffffffffffffffffffffffeffffffffffffffe7e38fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3e3effe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80880719c70004483ff4044038ce38002242ffd00300000f5580f00bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7f097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe58ff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd808873b0e20004483ff404439d8710002242ffd00ffffffaaa80880bffffffffffffffffffffffffffffffffffffeffffffffffffffe7fc0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021feffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8088f1e0700004483ff404478f0380002242ffd0080000155580880bfffffffffffffffffffffffffffffffffffff7fffffffffffffe7ff1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047ff7ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8089c0e0380004483ff4044e0701c0002242ffd00801ff9aaa80f00bffffffffffffffffffffffffffffffffffffeffffffffffffffe7ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffeffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80898070100004483ff4044c038080002242ffd0080180955580a00bfffffffffffffffffffffffffffffffffffff7fffffffffffffe5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557ff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8089fe38000004483ff4044ff1c000002242ffd00801809aaa80900bffffffffffffffffffffffffffffffffffffeffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8088ff1c000004483ff40447f8e000002242ffd00bfdff955580880bfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8088038e000004483ff404401c7000002242ffd00bfd809aaa80000bffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80880184000004483ff404400c2000002242ffd0080180955580700bfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80881180000004483ff404408c0000002242ffd00bfdff9aaa80880bffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80881b80000004483ff40440dc0000002242ffd00bfd80955580800bfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80881f00000004483ff40440f80000002242ffd00801809aaa80700bffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80880e00000004483ff40440700000002242ffd00bfdff955580080bfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd808c000000000c483ff40460000000006242ffd00bfdbe9aaa80880bffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8087fffffffff8483ff4043fffffffffc242ffd0080184955580700bfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80800000000000503ff40400000000000282ffd00bfdff9aaa80000bffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80800000000000603ff40400000000000302ffd00bfd8a955580700bfffffffffffffffffffffffffffffffffffff7fffff5555555557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80c00000000000c03ff40600000000000602ffd008012a9aaa80880bffffffffffffffffffffffffffffffffffffefffffeaaaaaaaaa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd807fffffffffff803ff403fffffffffffc02ffd00801ff955580800bfffffffffffffffffffffffffffffffffffff7fffff7fffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80000400000400003ff40000200000200002ffd00801a69aaa80f00bffffffffffffffffffffffffffffffffffffefffffeffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80000200000800003ff40000100000400002ffd0080126955580880bfffffffffffffffffffffffffffffffffffff7fffff7fffffffe7fffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffc01ffffffffffffff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd87fffd000017ffffbff43fffe80000bffffeffd00801ff9aaa80880bffffffffffffffffffffffffffffffffffffefffffef09fffffe7fffffffffffffffffffffffffffe01fffffffffffffffffffffffffffffffff7fbfffffffffffffffffffffffffffc03fffffffffffffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd880000ffffe000003ff4400007ffff000002ffd0080180955580700bfffffffffffffffffffffffffffffffffffff7fffff661fffffe7ffffffffffff0ffffffffccffffe00ffffffffffffffffffc3fffff9fffffcf7ffffffffffffffffff333f999ffffc01ffffffffffffff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9000000000000000bff48000000000000006ffd00801809aaa80000bffffffffffffffffffffffffffffffffffffefffffecf9870e1e7fffffffffffe67fffffffcfffffe01ffffffffffffffffff99fffff9fffffcf7fbffffffffffffffff333ff9fffffc03fffffffffffffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffffffffffff3ff5fffffffffffffffaffd0080180955580880bfffffffffffffffffffffffffffffffffffff7fffff4f93264ce7fffffffffffcfc34464cc849393e00ffffffffffffffffff3c9cc3213870e4f7ffffffffffffffffff33219092727c01ffffffffffffff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffda0000000000000013ff5000000000000000affd00801809aaa80900bffffffffffffffffffffffffffffffffffffefffffecf9323cce7fffffffffffcf9933224ccc8923e01ffffffffffffffffff3c9c9900932648f7fbffffffffffffffffb34c9991247c03fffffffffffffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffda2001999999999993ff51000cccccccccccaffd00801ff955580a00bfffffffffffffffffffffffffffffffffffff7fffff4f9338c0e7fffffffffffcf9933264ccc9933e00ffffffffffffffffff3cc99919933e4cf7ffffffffffffffffff927c9993267c01ffffffffffffff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffda53f9999999999993ff529fccccccccccccaffd00801809aaa80c00bffffffffffffffffffffffffffffffffffffefffffecf933c4fe7fffffffffffcf9933264ccc9933e01ffffffffffffffffff3cc9813990304cf7fbffffffffffffffff92609993267c03fffffffffffffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffda8bf8000000000013ff545fc00000000000affd0080130955580a00bfffffffffffffffffffffffffffffffffffff7fffff6613264ce7fffffffffffcf9933264ccc9933e00ffffffffffffffffff3ce39f3993e64cf7ffffffffffffffffffcccc9993267c01ffffffffffffff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffda5002666666666673ff5280133333333333affd00801009aaa80900bffffffffffffffffffffffffffffffffffffefffffef09870e1e7fffffffffffe619332248c89923e01ffffffffffffffffff99e39939932648f7fbffffffffffffffffcccc9913247c03fffffffffffffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffda2006666666666673ff5100333333333333affd00801ff955580880bfffffffffffffffffffffffffffffffffffff7fffff7fffffffe7ffffffffffff0c33324e4e49993e00ffffffffffffffffffc3f7c339987124f7ffffffffffffffffffcce21c93327c01ffffffffffffff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffda0000000000000013ff5000000000000000affd00800001aae00000bffffffffffffffffffffffffffffffffffffefffffeffffffffe7fffffffffffffffffe7fffffff3e01fffffffffffffffffffffffffffffffff7fbfffffffffffffffffffffffffe7c03fffffffffffffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb9999999999999993ff5cccccccccccccccaffd0080000157000000bfffffffffffffffffffffffffffffffffffff7fffff7fffffffe7fffffffffffffffffe7ffffff33e00fffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffe67c01ffffffffffffff02 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb9999999999999993ff5cccccccccccccccaffd00800001b8000000bffffffffffffffffffffffffffffffffffffefffffeffffffffe7fffffffffffffffffe7ffffff87e01fffffffffffffffffffffffffffffffff7fbfffffffffffffffffffffffff0fc03fffffffffffffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffda000000000000001bff5000000000000000effd00ffffffe0000000bfffffffffffffffffffffffffffffffffffff7fffff7fffffffe7fffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffc01ffffffffffffff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffffffffffff3ff5fffffffffffffffaffd0000000000000000bffffffffffffffffffffffffffffffffffffefffffeffffffffe7fffffffffffffffffffffffffffe01fffffffffffffffffffffffffffffffff7fbfffffffffffffffffffffffffffc03fffffffffffffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80000000000000003ff40000000000000002ffd0000000000000000bfffffffffffffffffffffffffffffffffffff7fffff0000000007fffffffffffffffffffffffffffe00fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffc01ffffffffffffff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffd80000000000000003ff40000000000000002ffd0000000000000000bffffffffffffffffffffffffffffffffffffefffffe0000000007fffffffffffffffffffffffffffe01fffffffffffffffffffffffffffffffff7fbfffffffffffffffffffffffffffc03fffffffffffffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbfffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffeaafffffffffffffffffffffffffffffffff557fffffffffffffffffffffffffffd55ffffffffffffff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe80 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffe7fff3ffffeffdfffffe7fff87ffffbffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7ffffffffff3ffffeffdffffffffff33ffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffd11c327ffffbff7ffffc864c33ffffeffdffffc861c3f3ffffbffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffccc9907ffffbff7ffffc048993ffffeffdffffc04c99e7ffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffccc8f1fffffbff7ffffc64c993ffffeffdffffc64c8fcfffffbffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe82 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffccce33fffffbff7ffffce4c813ffffeffdffffce4ce39fffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffcccf13fffffbff7ffffce4c9f3ffffeffdffffce4cf13fffffbffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffccc993fffffbff7ffffce48993ffffeffdffffce4c993fffffbfffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01 affcffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffcccc33fffffbff7ffffce64c33ffffeffdffffce61c303ffffbffffffffffffffffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa81 5ffcffff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffcfffffffeffdffffffffffffffffbfffffffffffffffffffffffffffffffffffff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555501 affc55554fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7ffffffccfffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001 5ffcaaaa8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7ffffffe1fffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000001 affcdff94fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001 5ffceff98fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffbff7fffffffffffffffeffdffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000003 affcf7f34fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000000003ff00000000000000000ffc00000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000003 5ffceff38ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000003 affcf7e74ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001 5ffcfbef8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000003 affcfdcf4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000003 5ffcffdf8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000003 affcfd9f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000003 5ffcfe3f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000003 affcff3f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000003 5ffcff7f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000003 affc5555455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000aaaaaaaaaaaaaaaaaaaaaaaaab 5ffcaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa95555555555555555555555555555555555555555555557ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000055555555555555555555555557 afffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bfffffffffffffffffffffffff 5fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffe afffffffcfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffbff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffe 5fffffffcfff3fffffffffffffffffffffffffffffffffffffffffffffffffff5555555555555555555555555555555555555555555555555557fffffffffffffffffffffffffffffffffffffffffffffffffffffd7ff7ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffe afffffffcffe3fffffffffffffffffffffffffffffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfffffffffffffffffffffffffffffffffffffffffffffffffffffebffbff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffe 5fffffffcff53fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffdd7f7ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffe afffffffcfef3fffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffeebfbff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffe 5fffffffcfdf3fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffdfdf7ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007e1c387ffffffffffffffffffe afffffffcfbf3fffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffefefbff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bcc9933ffffffffffffffffffe 5fffffffcd7f3fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffdff57ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007c0999fffffffffffffffffffe afffffffc1ff3fffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffeff8bff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bcf99e7ffffffffffffffffffe 5fffffffcc7f3fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffdff17ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007cc9933ffffffffffffffffffe afffffffcf1f3fffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffefc7bff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000be1c387fffffffffffffffffff 5fffffffcfc73fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffdf1f7ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffc afffffffcfe13fffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffec7fbff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffc 5fffffffcff83fffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffffffffffffffffffd0ff7ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff afffffffcffe3fffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffbff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffd 5fffffffcfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfff7ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffd afffffffcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffd 5fffffffd555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557ff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffe afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffe 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffc 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffc afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffc 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffc afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffc 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffd afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bfffffffffffffffffffffffff 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffc affeaaaaaaaaafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffd 5ffd555555554fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffd affeffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffd 5ffdffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8003ffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff affeffffffffcffffffffffffffffffffffffffffffffffff800fffffffffffffffffffffffffffffffffffffffbffbffffffffffffffffffffffffffffffffffffffffffff7ff7fffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffe 5ffde13fffffcffffffffffffffffffffffffffffffffffff8007ffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff affecc3fffffcffffffffffffffffffffffffffcffe67ffff800fffffffffffffffffffffffffff83ffff3fffffbffbfffffffffffffffffffffffffffffce7ff807ffe7fff7ff7fffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffd 5ffd9f30e1c3cffffffffffffffffffffffffff87fe7fffff8007ffffffffffffffffffffffffff39ffff3fffffbffffffffffffffffffffffffffffffffc67fff3fffe7fff7ffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffd affe9f264c99cffffffffffffffffffffffffffb70c24e61f800fffffffffffffffffffffffffff39398618688fbffbfffffffffffffffffffffffffffffc661ff3c386661f7ff7fffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffd 5ffd9f264799cffffffffffffffffffffffffff326664e4cf8007ffffffffffffffffffffffffff8f3933332667bffffffffffffffffffffffffffffffffca4cff399324ccf7ffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffd affe9f267181cffffffffffffffffffffffffff327e664ccf800fffffffffffffffffffffffffffe3931f332667bffbfffffffffffffffffffffffffffffca4cff3f91e1c7f7ff7fffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffd 5ffd9f26789fcffffffffffffffffffffffffff027e664c0f8007fffffffffffffffffffffffffff193c7302667bffffffffffffffffffffffffffffffffcc4cff3c1c61f1f7ffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffd affecc264c99cfffffffffffffffffffffffffe787e671cff800fffffffffffffffffffffffffff39c7e333e667bffbfffffffffffffffffffffffffffffcc4cff399e24f8f7ff7fffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffd 5ffde130e1c3cfffffffffffffffffffffffffe7866471ccf8007ffffffffffffffffffffffffff39c733232667bffffffffffffffffffffffffffffffffce4cff3993264cf7ffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff affeffffffffcfffffffffffffffffffffffffe790f27be1f800fffffffffffffffffffffffffff83e787986667bffbfffffffffffffffffffffffffffffce61ff3c486721f7ff7fffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bfffffffffffffffffffffffff 5ffdffffffffcffffffffffffffffffffffffffffffffffff8007ffffffffffffffffffffffffffffefffffffffbfffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff affeffffffffcffffffffffffffffffffffffffffffffffff800fffffffffffffffffffffffffffffcfffffffffbffbffffffffffffffffffffffffffffffffffffffffffff7ff7fffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffd 5ffdffffffffcffffffffffffffffffffffffffffffffffff8007ffffffffffffffffffffffffffff9fffffffffbfffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff affeffffffffcffffffffffffffffffffffffffffffffffff800fffffffffffffffffffffffffffffffffffffffbffbffffffffffffffffffffffffffffffffffffffffffff7ff7fffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bfffffffffffffffffffffffff 5ffdffffffffcffffffffffffffffffffffffffffffffffffd557ffffffffffffffffffffffffffffffffffffff9557ffffffffffffffffffffffffffffffffffffffffffff2aaffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff affe000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bfffffffffffffffffffffffff 5ffc000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bfffffffffffffffffffffffff 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bfffffffffffffffffffffffff 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007fffffffffffffffffffffffff afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bfffffffffffffffffffffffff 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffe afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffe 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffe a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffe 50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000010000000007ffffffffffffffffffffffffe a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe80000000000000000000000000000000000000000000000000000000000000000000000000000800000000bffffffffffffffffffffffffe 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaae a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6 53fffaaaaaaffffffffffffffffeaaaaaaaaaaffffffffffffffffffffffffeaaaaabfffffff8000007fffffffd555557fffffffd555557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee a3fff555554ffffffffffffffffd55555555557fffffffffffffffffffffffd555553fffffff800000ffffffffaaaaaa7fffffffaaaaaa7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87800ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800f7 53fffbffffcffffffffffffffffefffffffffe7fffffffffffffffffffffffefffff3fffffff9fffff7fffffffdffffe7fffffffdffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bbfefffff9e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb6ec a3fff7fcffcffffffffffffffffdfffffffffe7fffffffffffffffffffffffdfffff3fffffff9ffffeffffffffbffffe7fffffffbffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87bfefffffdf7feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb6f4 53fffbf03fcffffffffffffffffefffffffffe7fffffffffffffffffffffffefffff3fffffff9fffff7fffffffdcc7fe7fffffffdf8ffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bb8efffffdf7feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb6ef a3fff7c78fcffffffffffffffffd9e1ffffffe7fffffffffffffffffffffffdfffff3fffffff9ffffeffffffffbcc3fe7fffffffbf87fe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87b06ff8e3df7fc34e38e3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836f5 53fffb0783cffffffffffffffffe9e7ffffffe7fffffffffffffffffffffffefcf9f3fffffff9fffff7fffffffdcc1fe7fffffffdf83fe7ffffffffffffffffffffffffffffffffffffffffc00fffffff0fe1c387e61c3fd4bb06ff77ddf7fef37d75dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6ed a3fff6f7bdcffffffffffffffffdcc9866661e7fffffffffffffffffffffffdf8f1f3fffffff9ffffeffffffffbcc8fe7fffffffbf91fe7fffffffffffffffffffffffffffffffffffffffff9fffffffe67cc9933c4c99fe87b06ff7e1df7fef7e17c1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf6f5 53fffbf03fcffffffffffffffffecc932664ce7fffffffffffffffffffffffef0e1f3fffffff9fffff7fffffffdccc7e7fffffffdf98fe7fffffffffffffffffffffffffffffffffffffffff9ca23873e67cc9f33a7cf9fd4bb8eff7dddf7fef7dd7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff806ee a3fff7f03fcffffffffffffffffdcc93324c7e7fffffffffffffffffffffffde0c1f3fffffff9fc01effffffffbcce3e7fffffffbf9c7e7fffffffffffffffffffffffffffffffffffffffff9c999333f0fcc9f33a71f3fe87bfeff75ddf7fed7dd75dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfef6 53fffbf7bfcffffffffffffffffeed90324f1e7fffffffffffffffffffffffec081f3fffffff9fc01f7fffffffdccf1e7fffffffdf9e3e7fffffffffffffffffffffffffffffffffffffffff9c99933fe67cc833367ce7fd4bbfeff8e18e3ff37e18e3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfeef a3fff7f7bfcffffffffffffffffde193f24f8e7fffffffffffffffffffffffde0c1f3fffffff9fc01effffffffbcce3e7fffffffbf9c7e7fffffffffffffffffffffffffffffffffffffffff9c99903fe67cc9932e7ccffe87800ffffffff07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800f4 53fffbf03fcffffffffffffffffef393399cce7fffffffffffffffffffffffef0e1f3fffffff9fc01f7fffffffdccc7e7fffffffdf98fe7fffffffffffffffffffffffffffffffffffffffff9c9993ffe67cc993203c9ffd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec a3fff7f03fcffffffffffffffffdf398799e1e7fffffffffffffffffffffffdf8f1f3fffffff9fc01effffffffbcc8fe7fffffffbf91fe7fffffffffffffffffffffffffffffffffffffffff9c999333e664c9933e4c9ffe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 53fffaf7bdcffffffffffffffffefffffffffe7fffffffffffffffffffffffefcf9f3fffffff9fc01f7fffffffdcc1fe7fffffffdf83fe7fffffffffffffffffffffffffffffffffffffffff9c999873f0e61c387e6181fd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec a3fff70783cffffffffffffffffdfffffffffe7fffffffffffffffffffffffdfffff3fffffff9fc01effffffffbcc3fe7fffffffbf87fe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554 53fffbc78fcffffffffffffffffefffffffffe7fffffffffffffffffffffffefffff3fffffff9fc01f7fffffffdcc7fe7fffffffdf8ffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad a3fff7f03fcffffffffffffffffdfffffffffe7fffffffffffffffffffffffdfffff3fffffff9fc01effffffffbffffe7fffffffbffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 53fffbfcffcffffffffffffffffefffffffffe7fffffffffffffffffffffffefffff3fffffff9fffff7fffffffdffffe7fffffffdffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec a3fff7ffffcffffffffffffffffdfffffffffe7fffffffffffffffffffffffdfffff3fffffff9ffffeffffffffbffffe7fffffffbffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5 53fffbffffcffffffffffffffffe00000000007fffffffffffffffffffffffefffff3fffffff9fffff7fffffffdffffe7fffffffdffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed a3fff7ffffcffffffffffffffffc00000000007fffffffffffffffffffffffdfffff3fffffff9ffffeffffffffbffffe7fffffffbffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5 53fff800000fffffffffffffffffffffffffffffffffffffffffffffffffffe000003fffffff9555557fffffffc000007fffffffc000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef a3fff000000fffffffffffffffffffffffffffffffffffffffffffffffffffc000003fffffffaaaaaaffffffff8000007fffffff8000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bfff3ffff9fc0ffffff3f81ffff00fffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fff3ffff9fcfffffff3f9cffffe7fffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bfff3e1c30fcf9cc3261f9c864fe7870cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fff3cc999fcf9c99133f9c320fe732649cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bfff3fc8f9fc0c999333f81323fe7f23c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87fff3e0e39fcfc981333f9f027fe7838c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 53ffffffffffffffffffc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc000000000000000000001fe0000000000000000000000fd4bfff3ccf19fcfe39f333f9f3e7fe733c49fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef a3ffffffffffffffffffc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fc000000000000000000001fe0000000000000000000000fe87fff3cc9997cfe399332f9f327fe73264ccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5 53ffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefcffffffffffffffffffffbfe7ffffffffffffffffffffdfd4bfff02243cfc0f7c3339f9f867fe7890ce4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef a3ffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcffffffffffffffffffffdfe7ffffffffffffffffffffefe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 53ffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefcffffffffffffffffffffbfe7ffffffffffffffffffffdfd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef a3ffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcffffffffffffffffffffdfe7ffffffffffffffffffffefe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 53fe01fffffffc027fffce4fffffcfffffffffcffffffff3ffcf9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefcffbfffffffffffffffffbfe7fdffffffffffffffffffdfd4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef a3ffcffffffffcfe7fffce4fffffcfffffffffcffffffff3ffcf9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcff5fff027fffc0ffff3fdfe7fafffe1fffffcccf99ffefe87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 53ffce4870e1fcf261cfce851193d324ce511f8490e1c3f330c99fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefcfeafff387fffce7fff3fbfe7f57ffccfffffcccff9ffdfd4bff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fef a3ffce03264cfcf24ccfcccccc8993224e4ccfcc064c99f266449fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcfd17ff38619cce61c333dfe7ebbff9e4e6190cc210c3efe87ff000010000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000007ff7 53ffce3f27ccfc124cffcccccc99986664cccfcc7e4f99f0e64c9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefcfa0bff384c9cce4c9927bfe7d7dff9e4e4c82cd01999dfd4bff3fdfe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef a3ffce7827c0fcf240ffcdcccc99bce664cccfccf04f81f0e64c9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcf405ff027cc9c0fc9f0fdfe7afeff9e64cc8e4919999efe87ff3fcfd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 53ffce7327cffcf24fffcdcccc99b86671cccfcce64f9ff2664c9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefce0007f3e60c9ce609f0fbfe71fe3f9e64c09e4939981dfd4bff3f8fe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee a3ffce73264cfcf24ccfc9c8cc89332271ccccc8e64c9993264c9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcf000ff3e4ce3ce4c9f27dfe78fc7f9e71cf9f333999fefe87ff3f47d3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 53ffce7890e1fcf261cfc9e4cc933324fbcccce4f121c39390cc9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefcf801ff3e4ce3ce4c9933bfe7c78ffccf1cc9f3339919dfd4bff3ea7e3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee a3ffffffffffffffffffcfffff9fffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcfc03ff3e6273c0e24339dfe7e31ffe1fbe19f3339cc3efe87ff3f73d3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 53ffffffffffffffffffcfffff9fffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefcfe07fffffff7ffffffffbfe7f03fffffffffffffffffdfd4bff3ef3e3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee a3ffffffffffffffffffcfffff9fffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcff0fffffffe7ffffffffdfe7f87fffffffffffffffffefe87ff3df9d3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 53ffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefcff9fffffffcfffffffffbfe7fcffffffffffffffffffdfd4bff3bf9e3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee a3ffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcffffffffffffffffffffdfe7ffffffffffffffffffffefe87ff37fcd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 53ffffffffffffffffffcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcaaaaaaaaaaaaaaaaaaaabfe5555555555555555555555fd4bff3bfce3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee a3ffffffffffffffffffd5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555fd555555555555555555555feaaaaaaaaaaaaaaaaaaaaaafe87ff37fe53fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bff200063fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87ff000013fcf9fe7cff87e7ccfffffffffffffffffffffffffffd3ffffffffffffffffe1f3f0ffe318c6318c7ffc39fffffffffffff7ff7 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bff2aaae3fcfffe7cff33e7fcfffffffffffffffffffffffffffe3ffffffffffffffffcce7e67fce739ce739fff99cffffffffffffeffec a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87ff355553fc99924c993324c861fffffffffffffffffffffffffd3fc99ca23fe4870ce4ce7e64c8421084210ffff9cfffffffffffff7ff4 53fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4bff2ffe63fc4922249933224cccfffffffffffffffffffffffffe3fc49c999fe03264e4ccfe64cce739ce739ffff3e7fffffffffffeffef a2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa87ff37fe53fcc932649933e64ccffffffffffffffffffffffffffd3fccc9999fe3327e4cccfe661ce739ce739fffe7e7ffffffffffff7ff5 555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554bff2ffe63fcc932649933e64ccffffffffffffffffffffffffffe3fccc9999fe7027e4cccfe673ce739ce739fffcfe7fffffffffffeffed afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff37fe53fcc932649933e64ccffffffffffffffffffffffffffd3fcce3999fe73e7f1cccfe661ce739ce739fff9fe7ffffffffffff7ff5 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff2ffe63fc4922249133264c8cfffffffffffffffffffffffffe3fc4e3999fe732671cccfe64cce739ce739cff9fe7fffffffffffeffee afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff37fe53fc99924cc987264e61fffffffffffffffffffffffffd3fc9f7999fe7870fbe1cff0ccce739ce739cff81e7ffffffffffff7ff6 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff2ffe63fffff3fffffffffffffffffffffffffffffffffffffe3fcffffffffffffffffe7ffffffffffffffeffffcffffffffffffeffef afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff37fe53ffff33fffffffffffffffffffffffffffffffffffffd3fcffffffffffffffffe7ffffffffffffffdffffcfffffffffffff7ff4 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff2ffe63ffff87fffffffffffffffffffffffffffffffffffffe3fcffffff01fffffffff3fffffffffffffffffff9ffffffffffffeffec afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff37fe53fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff2ffe63fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff37fe53fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff280063fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff300053fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffff003ffffff807ffe7fffffffff003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec afffffffffffffffffffffffffffffffffffffffffffffffffffffffff39fffffffffe7ffffffff3fffe7fffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffff39270e1c3ffe7288e1cff3c386661f9cc3ffe7288e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed afffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f1264c99ffe72664ccff399324ccf9c99ffe72664cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff3fffd3fcf9fe7cff87e7ccfffffe7ffffffffffffffffffffd3ffffffffffffffff30f99fe7fffcc3870ffffffffffe7fffff87f7ff5 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe333e4f99ffe72664cfff3f91e1c7fc98fffe72664cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff3fffe3fcfffe7cff33e7fcfffffe7ffffffffffffffffffffe3ffffffffffffffff2673cfe7fff8993267fffffffffe7fffff33effef affffffffffffffffffffffffffffffffffffffffffffffffffffffffff13304f8183e726640fff3c1c61f1fc9e3ffe726640fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff3fffd3fc99924c993324c861ff86619cc3fffffffffffffffd3fc99ca23ff0e19392673cfc30ff49932661ffa23872430e4fff3f7ff6 5fffffffffffffffffffffffffffffffffffffffffffffffffffffffff393264f9fffe72664ffff399e24f8fe3f1ffe72664ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff3fffe3fc4922249933224cccff324c9c99fffffffffffffffe3fc49c999fe64c8922667e7e667f4993264cff99932466648ffe7effef afffffffffffffffffffffffffffffffffffffffffffffffffffffffff391264c99ffe72664ccff3993264cfe3999fe72664cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff3fffd3fcc932649933e64ccfff1e7cc999fffffffffffffffd3fccc9999fe3cc9932667e7e667ec993264fff9991e667e4c81cff7ff5 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8327121c3ffe726661cff3c486721ff7c39fe726661fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff3fffe3fcc932649933e64ccfffc660c981fffffffffffffffe3fccc9999ff8c09932667e7e667dc993264fff999c666704cff9feffed 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff3fffd3fcc932649933e64ccfffe24ce39ffffffffffffffffd3fcce3999ffc4f9932667e7e667c0193264fff999e266664c813ff7ff5 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff3fffe3fc4922249133264c8cff324ce399fffffffffffffffe3fc4e3999fe64c9922667e7e467fc993264ccf99932464648ff3feffed 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff3fffd3fc99924cc987264e61ff866277c3fffffffffffffffd3fc9f7999ff0e199930e7e7f30ffcc3870e1cf99987273124ff03f7ff5 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff3fffe3fffff3fffffffffffffffffffffffffffffffffffffe3fcfffffffffffffffff3cffffffffffffffeffffffe7fffcffffeffed 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ff3fffd3ffff33fffffffffffffffffffffffffffffffffffffd3fcfffffffffffffffff3cffffffffffffffdfffffe67ffccfffff7ff5 1ffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ff4bff3fffe3ffff87ffffffffffff80fffffffffffffffffffffffe3fcffffff01fffffffff99fffffffffffffffffffff0fffe1ffffeffef 2ffc00004000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcff7f8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcff3f4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcfe3f8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcfd1f4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcfa9f8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcfdcf4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcfbcf8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcf7e74ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffe7ccfffffe7fffffffffffffffffffffffd3fffffffffffffffff3f33f9fff8ffe7ffcf9fff9fffff8fffffff7ff7 1ffcefe78ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffe7fcfffffe7fffffffffffffffffffffffe3ffffffffffffffffc3e79f9fff3ffc7ff8f9fff9fffff3ffffffeffef 2ffcdff34ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fe19cc32724c861ff86619cc3ffffffffffffffffffd3fc99ca23fe4870ce73e79f93321ffa7ff4f93390c387e1243447f7ff7 1ffceff38ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fcc9c9913224cccff324c9c99ffffffffffffffffffe3fc49c999fe03264e73cfcf89333ffa7ff4f893999933f3019333effef 2ffcdff94ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fcfc9f933e64ccfff1e7cc999ffffffffffffffffffd3fccc9999fe3327e4f3cfcf993330367fecf99939991ff3199333f7ff7 1ffc80018ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fcfc9c133e64ccfffc660c981ffffffffffffffffffe3fccc9999fe7027e4f3cfcf99333fee7fdcf9993981c7f3399333effee 2ffc00004ff3e7f9f3fe1f9f33fffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fcfe39933e64ccfffe24ce39fffffffffffffffffffd3fcce3999fe73e7f1f3cfcf993330203fc0799c799fe3f3399333f7ff6 1ffcaaab8ff3fff9f3fccf9ff3fffffffffffffffffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fcce39933264c8cff324ce399ffffffffffffffffffe3fc4e3999fe732671f3cfcf89233ffe67fcf89c791933f3399333effee 2ffcd5554ff266493264cc932187fffffffffffffffffffffffff400000003e3fffffffffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffff9ffffffffffcffffffffffffffffff7ff87ff3fffd3fe1f3c433264e61ff866277c3ffffffffffffffffffd3fc9f7999fe7870fbf3cfcf93933ffe67fcf93e7cc387f33c3333f7ff6 1ffcbff98ff124889264cc893333fffffffffffffffffffffffff800000003e3fffffffffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffff9ffffffffffcffffffffffffffffffbff4bff3fffe3ffff7ffffffffffffffffffffffffffffffffffffffe3fcffffffffffffffffe79ffffffffff7fffffeffffffffffffffeffee 2ffcdff94ff324c99264cf99333ffffffffffffffffffffffffff400000003e3fffffffffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffff9ffffffffffcffffffffffffffffff7ff87ff3fffd3fffe7ffffffffffffffffffffffffffffffffffffffd3fcffffffffffffffffe79fffffffffeffffffcfffffffffffffff7ff6 1ffcbff98ff324c99264cf99333ffffffffffffffffffffffffff800000003e3fffffffffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffff9ffffffffffcffffffffffffffffffbff4bff3fffe3fffcfffffffffff80ffffffffffffffffffffffffffe3fcffffff01fffffffff33ffffffffffffffff9ffffffffffffffeffee 2ffcdff94ff324c99264cf99333ffffffffffffffffffffffffff400000003e3fffffffffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffff9ffffffffffcffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcbff98ff124889244cc993233fffffffffffffffffffffffff800000003e3fffffffffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffff9ffffffffffcffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcdff94ff2664933261c993987fffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcbff98fffffcffffffffffffffffffffffffffffffffffffff8fffffffff3fffffffffffffffffffffffffffefffffffffffffffffffffffffffffdfffffffffffffffffffffdffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcc0014ffffccffffffffffffffffffffffffffffffffffffff4fffffffff07ffffffffffffffffffffffffffefffffffffffffffffffffffffffffdfffffffffffffffffffffdffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffc80018ffffe1ffffffffffffffffffffffffffffffffffffff8fffffffff01ffffffffffffffffffffffffffefffffffffffffffffffffffffffffdfffffffffffffffffffffdffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffa63fffffffffffffffffffffffffefffffffffffffffffffffffffffffdfffffffffffffffffffffdffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffff91c7ffffffffffffffffffffffffefffffffffffffffffffffffffffffdfffffffffffffffffffffdffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffff98f1ffffffffffffffffffffffffefffffffffffffffffffffffffffffdfffffffffffffffffffffdffffffffffeffffffffffffffffff7ff87ff3fffd3fcfffffffffcf99fffffcffffffffffffffffffffffd3fffffffffffffffff3f33f9fff8ff07ffcf9fff9fffff8fffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffff8c7e3fffffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffffdffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffcff9fffffcffffffffffffffffffffffe3ffffffffffffffffc3e79f9fff3ff3fff8f9fff9fffff3ffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffce1fc7ffffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffffdffffffffffeffffffffffffffffff7ff87ff3fffd3fcc3864330e4990c3ff0cc33987ffffffffffffffffd3fc99ca23fe4870ce73e79f93321fe7fff4f93390c387e1243447f7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffd70ff1ffffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffffdffffffffffeffffffffffffffffffbff4bff3fffe3fc993203266449999fe64993933ffffffffffffffffe3fc49c999fe03264e73cfcf89333fe0fff4f893999933f3019333effee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffc787fe3fffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffffdffffffffffeffffffffffffffffff7ff87ff3fffd3fc9ff23323fcc999ffe3cf99333ffffffffffffffffd3fccc9999fe3327e4f3cfcf9933303e7fecf99939991ff3199333f7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffcbcbffc7ffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffffdffffffffffeffffffffffffffffffbff4bff3fffe3fc9f827338fcc999fff8cc19303ffffffffffffffffe3fccc9999fe7027e4f3cfcf99333ffe7fdcf9993981c7f3399333effef 2ffcffff4ff3e7f9f3fe1f9f33fffff9fffffffffffffffffffff4fffffffffebf4fff1ffffffffffffffffffffcfffffffffffffffffffffffffffff9fffffffffffffffffffffdffffffffffeffffffffffffffffff7ff87ff3fffd3fc9f32733c7cc999fffc499c73fffffffffffffffffd3fcce3999fe73e7f1f3cfcf993330267fc0799c799fe3f3399333f7ff4 1ffcffff8ff3fff9f3fccf9ff3fffff9fffffffffffffffffffff8fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fc9932722664c9919fe6499c733ffffffffffffffffe3fc4e3999fe732671f3cfcf89233fe667fcf89c791933f3399333effec 2ffcffff4ff266493264cc932187fe1986730ffffffffffffffff4fffffffc000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fcc3887930e4c9cc3ff0cc4ef87ffffffffffffffffd3fc9f7999fe7870fbf3cfcf93933ff0e7fcf93e7cc387f33c3333f7ff4 1ffcffff8ff124889264cc893333fcc9327267fffffffffffffff8fffffffc000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3fcffffffffffffffffe79ffffffffff7fffffeffffffffffffffeffec 2ffcffff4ff324c99264cf99333ffc79f32667fffffffffffffff4fffffffc000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fcffffffffffffffffe79fffffffffeffffffcfffffffffffffff7ff4 1ffcffff8ff324c99264cf99333fff19832607fffffffffffffff8fffffffc000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffff01ffffffffffffffffffffffffe3fcffffff01fffffffff33ffffffffffffffff9ffffffffffffffeffed 2ffcffff4ff324c99264cf99333fff89338e7ffffffffffffffff4fffffffc000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ff124889244cc993233fcc9338e67fffffffffffffff8fffffffc000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ff2664933261c993987fe1989df0ffffffffffffffff4fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8fffffcffffffffffffffffffffffffffffffffffffff8ffffffffff9bff9cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffccffffffffffffffffffffffffffffffffffffff4ffffffffff9dffce7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffe1ffffffffffffe03fffffffffffffffffffffff8ffffffffff9dffe7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffccfff3cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffcefff9e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffcefffef3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffff7ff87ff3fffd3ffffffff9f33fffff9fffffffffffffffffffffffffd3fffffffffffffffff3f33f9fff8fe07ffcf9fff9fffff8fffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffc77fff7dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffffbff4bff3fffe3ffffffff9ff3fffff9fffffffffffffffffffffffffe3ffffffffffffffffc3e79f9fff3ffe7ff8f9fff9fffff3ffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffe77fffbe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffff7ff87ff3fffd3fd11c324932187fe1986730ffffffffffffffffffffd3fc99ca23fe4870ce73e79f93321ffcfff4f93390c387e1243447f7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffe7bfffdf3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffffbff4bff3fffe3fccc9904893333fcc9327267fffffffffffffffffffe3fc49c999fe03264e73cfcf89333ffcfff4f893999933f3019333effed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffe3bfffefdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffff7ff87ff3fffd3fccc8f1f99333ffc79f32667fffffffffffffffffffd3fccc9999fe3327e4f3cfcf99333039ffecf99939991ff3199333f7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffe3dffff7e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffffbff4bff3fffe3fccce33f99333fff19832607fffffffffffffffffffe3fccc9999fe7027e4f3cfcf99333ff9ffdcf9993981c7f3399333effed 2ffcffff4ffffffffff9f33fffff9ffffffffffffffffffffffff4fffffffffff3dffffbf3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffeffffffffffffffffff7ff87ff3fffd3fcccf13f99333fff89338e7ffffffffffffffffffffd3fcce3999fe73e7f1f3cfcf99333039ffc0799c799fe3f3399333f7ff5 1ffcffff8ffffffffff9ff3fffff9ffffffffffffffffffffffff8ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fccc993c993233fcc9338e67fffffffffffffffffffe3fc4e3999fe732671f3cfcf89233ff3e7fcf89c791933f3399333effef 2ffcffff4ff86730c9c932187fe1986730fffffffffffffffffff4ffffffffc00000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fcccc33c993987fe1989df0ffffffffffffffffffffd3fc9f7999fe7870fbf3cfcf93933ff3e7fcf93e7cc387f33c3333f7ff7 1ffcffff8ff3272644c893333fcc9327267ffffffffffffffffff8ffffffffc00000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3fcffffffffffffffffe79ffffffffff7fffffeffffffffffffffeffef 2ffcffff4ff3f27e4cf99333ffc79f32667ffffffffffffffffff4ffffffffc00000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fcffffffffffffffffe79fffffffffeffffffcfffffffffffffff7ff5 1ffcffff8ff3f2704cf99333fff19832607ffffffffffffffffff8ffffffffc00000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffe03fffffffffffffffffffffffffffe3fcffffff01fffffffff33ffffffffffffffff9ffffffffffffffeffef 2ffcffff4ff3f8e64cf99333fff89338e7fffffffffffffffffff4ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ff338e64cc993233fcc9338e67ffffffffffffffffff8ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ff87cf10cc993987fe1989df0fffffffffffffffffff4ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffdfffffffffffffffffffffffffffffffffffffff8fffffffffffd7dfffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffff9fffffffffffffffffffffffffffffffffffffff4fffffffffffd7effffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffff3ffffffffffe03ffffffffffffffffffffffffff8fffffffffffc7effffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffebf7fffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffebf7fffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffebf3ffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3ffe7fff3e7ccfffffe7ffffffffffffffffffffffffd3fffffffffffffffff3f33f9fff8ff07ffcf9fff9fffff8fffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffe1fbffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffff3e7fcfffffe7ffffffffffffffffffffffffe3ffffffffffffffffc3e79f9fff3ff3fff8f9fff9fffff3ffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffff5fbffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fc864c3324c861ff86619cc3fffffffffffffffffffd3fc99ca23fe4870ce73e79f93321fe7fff4f93390c387e1243447f7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffff5fdffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fc048993224cccff324c9c99fffffffffffffffffffe3fc49c999fe03264e73cfcf89333fe0fff4f893999933f3019333effee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffff5fdfffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fc64c993e64ccfff1e7cc999fffffffffffffffffffd3fccc9999fe3327e4f3cfcf9933303e7fecf99939991ff3199333f7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffff2fefffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fce4c813e64ccfffc660c981fffffffffffffffffffe3fccc9999fe7027e4f3cfcf99333ffe7fdcf9993981c7f3399333effee 2ffcffff4ff3fffffffff3e67fffff3ffffffffffffffffffffff4ffffffffffffafefffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fce4c9f3e64ccfffe24ce39ffffffffffffffffffffd3fcce3999fe73e7f1f3cfcf993330267fc0799c799fe3f3399333f7ff6 1ffcffff8ffffffffffff3fe7fffff3ffffffffffffffffffffff8ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fce48993264c8cff324ce399fffffffffffffffffffe3fc4e3999fe732671f3cfcf89233fe667fcf89c791933f3399333effee 2ffcffff4ff30e190cc3926430ffc330ce61fffffffffffffffff4ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fce64c33264e61ff866277c3fffffffffffffffffffd3fc9f7999fe7870fbf3cfcf93933ff0e7fcf93e7cc387f33c3333f7ff6 1ffcffff8ff264c80c999126667f99264e4cfffffffffffffffff8ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3ffffcffffffffffffffffffffffffffffffffffffffe3fcffffffffffffffffe79ffffffffff7fffffeffffffffffffffeffee 2ffcffff4ff27fc8cc8ff32667ff8f3e64ccfffffffffffffffff4ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffccffffffffffffffffffffffffffffffffffffffd3fcffffffffffffffffe79fffffffffeffffffcfffffffffffffff7ff6 1ffcffff8ff27e09cce3f32667ffe33064c0fffffffffffffffff8ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffe1fffffffff80fffffffffffffffffffffffffffe3fcffffff01fffffffff33ffffffffffffffff9ffffffffffffffeffee 2ffcffff4ff27cc9ccf1f32667fff12671cffffffffffffffffff4ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ff264c9c8999326467f992671ccfffffffffffffffff8ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ff30e21e4c3932730ffc3313be1fffffffffffffffff4ffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffdfefffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffdff7ffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8fffffffffffffffffc07ffffffffffffffffffffffff8fffffffffffffdff7ffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffcffbffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffeffbfffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffeffdfffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3ffe7fff87e7ccfffffe7fffffffffffffffffffffffd3fffffffffffffffff3f33f9fff8fe07ffcf9fff9fffff8fffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffeffdfffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffff33e7fcfffffe7fffffffffffffffffffffffe3ffffffffffffffffc3e79f9fff3ffe7ff8f9fff9fffff3ffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffff7fcfffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fc861c3f324c861ff86619cc3ffffffffffffffffffd3fc99ca23fe4870ce73e79f93321ffcfff4f93390c387e1243447f7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffff7feffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fc04c99e7224cccff324c9c99ffffffffffffffffffe3fc49c999fe03264e73cfcf89333ffcfff4f893999933f3019333effec 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffff7feffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fc64c8fcfe64ccfff1e7cc999ffffffffffffffffffd3fccc9999fe3327e4f3cfcf99333039ffecf99939991ff3199333f7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffbff7fffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fce4ce39fe64ccfffc660c981ffffffffffffffffffe3fccc9999fe7027e4f3cfcf99333ff9ffdcf9993981c7f3399333effec 2ffcffff4ffffffffe7ccfffffe7fffffffffffffffffffffffff4ffffffffffffffbff7ffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fce4cf13fe64ccfffe24ce39fffffffffffffffffffd3fcce3999fe73e7f1f3cfcf99333039ffc0799c799fe3f3399333f7ff4 1ffcffff8ffffffffe7fcfffffe7fffffffffffffffffffffffff8ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fce4c993f264c8cff324ce399ffffffffffffffffffe3fc4e3999fe732671f3cfcf89233ff3e7fcf89c791933f3399333effed 2ffcffff4ff4470c924c861ff86619cc3ffffffffffffffffffff4ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fce61c303264e61ff866277c3ffffffffffffffffffd3fc9f7999fe7870fbf3cfcf93933ff3e7fcf93e7cc387f33c3333f7ff7 1ffcffff8ff332641224cccff324c9c99ffffffffffffffffffff8ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3fcffffffffffffffffe79ffffffffff7fffffeffffffffffffffeffec 2ffcffff4ff3323c7e64ccfff1e7cc999ffffffffffffffffffff4ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fcffffffffffffffffe79fffffffffeffffffcfffffffffffffff7ff5 1ffcffff8ff3338cfe64ccfffc660c981ffffffffffffffffffff8ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffff80ffffffffffffffffffffffffffe3fcffffff01fffffffff33ffffffffffffffff9ffffffffffffffeffed 2ffcffff4ff333c4fe64ccfffe24ce39fffffffffffffffffffff4ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ff33264f264c8cff324ce399ffffffffffffffffffff8ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ff3330cf264e61ff866277c3ffffffffffffffffffff4ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffefff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffff7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffff80ffffffffffffffffffffffffffff8fffffffffffffff7ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffff7ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffffbffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffffbffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffffbffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffffdfff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffffdfff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffffdfff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4fff9fffcf9f33fffff9fffffffffffffffffffffffff4fffffffffffffffefffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8fffffffcf9ff3fffff9fffffffffffffffffffffffff8ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ff21930cc932187fe1986730ffffffffffffffffffff4ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ff012264c893333fcc9327267fffffffffffffffffff8ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ff193264f99333ffc79f32667fffffffffffffffffff4ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ff393204f99333fff19832607fffffffffffffffffff8ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ff39327cf99333fff89338e7ffffffffffffffffffff4ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ff392264c993233fcc9338e67fffffffffffffffffff8ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ff39930cc993987fe1989df0ffffffffffffffffffff4ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8fffff3ffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffff33ffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffff87ffffffffe03fffffffffffffffffffffffffff8ffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4fffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4fff9fffe1f9f33fffff9ffffffffffffffffffffffff4fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8fffffffccf9ff3fffff9ffffffffffffffffffffffff8ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ff21870fcc932187fe1986730fffffffffffffffffff4ffffffff8000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ff0132679c893333fcc9327267ffffffffffffffffff8ffffffff8000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ff19323f3f99333ffc79f32667ffffffffffffffffff4ffffffff8000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ff39338e7f99333fff19832607ffffffffffffffffff8ffffffff8000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ff3933c4ff99333fff89338e7fffffffffffffffffff4ffffffff8000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ff393264fc993233fcc9338e67ffffffffffffffffff8ffffffff8000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ff39870c0c993987fe1989df0fffffffffffffffffff4ffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8fffffffffffffffe03ffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff5 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffee 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff6 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffef 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fffe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffec 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fffd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff2aaaa3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffed 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff355513fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff7 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3ffe63fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffe8 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff37fe53fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff1 1ffcffff8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3bfce3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffe9 2ffcffff4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3dfcd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff1 1ffcaaaa8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3ef9e3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffeb 2ffcd5544ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3dfbd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff2 1ffcfff98ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3ef3e3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffeb 2ffcdff94ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3f77d3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff1 1ffceff38ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3fa7e3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffe9 2ffcf7f34ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fcfd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff1 1ffcfbe78ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff3f8fe3fffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffe9 2ffcf7ef4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff3fdfd3fffffffffffffffffffffffffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff1 1ffcfbcf8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bff2aaaa2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffe9 2ffcfddf4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557ff1 1ffcfe9f8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000007feb 2ffcff3f4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000007ff3 1ffcfe3f8ffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffbff4bffffffffffffffffffffffffffffffffffffffffffffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffffffbffeffeb 2ffcff7f4ffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ff87ffffffffffffffffffffffffffffffffffffffffffffffffffff3ffc55555fffffffffffffffffffffffffffffffffffffffffd7ff7ff1 1ffcaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaab55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555552aaaaaaaaaaaaaaaaabff4bffffffffffffffffffffffffffffffffffffffffffffffffffff3ff8aaaaafffffffffffffffffffffffffffffffffffffffffabfeffeb 2ffd555555555555555555555555555555555555555555555555555555554aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad555555555555555557ff87ffaaaaaaaaabffffffffffffffffffffffffffffffffffffffff3fd47fffcfffffffffffffffffffffffffffffffffffffffffddff7ff3 1ffffffffffffffffffffffffffffffffffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ff4bff5555555553ffffffffffffffffffffffffffffffffffffffff3fbcbfffcfffffffffffffffffffffffffffffffffffffffffbefeffeb 2ffffffffffffffffffffffffffffffffffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ff87ffbffffffff3ffffffffffffffffffffffffffffffffffffffff3f7c7fffcfffffffffffffffffffffffffffffffffffffffffdf5f7ff3 1ffffffffffffffffffffffffffffffffffffffffffffffffffffcfffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffbff4bff7ffffffff3ffffffffffffffffffffffffffffffffffffffff3efcbfffcfffffffffffffffffffffffffffffffffffffffffbfaeffeb 2ffffffffffffffffffffffffffffffffffffffffffffffffffffcfff155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557ff7ff87ffbffffffff3ffffffffffffffffffffffffffffffffffffffff35fc7fffcfffffffffffffffffffffffffffffffffffffffffdff77ff3 1ffffffffffffffffffffffffffffffffffffffffffffffffffffcffe2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffbff4bff784ffffff3ffffffffffffffffffffffffffffffffffffffff07fcbfffcfffffffffffffffffffffffffffffffffffffffffbff0ffeb 2ffeaaaaaaaaaffffffffffeaaaaabfffffffaaaaaaffffffffffcff51fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1d7f7ff87ffb30ffffff3ffffffffffffffffffffffffffffffffffffffff31fc7fffcfffffffffffffffffffffffffffffffffffffffffdfe37ff3 1ffd555555554ffffffffffd555553fffffff555554ffffffffffcfef2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2ebfbff4bff67cc3870f3ffffffffffffffffffffffffffffffffffffffff3c7cbfffcfffffffffffffffffffffffffffffffffffffffffbf8effeb 2ffeffffffffcffffffffffefffff3fffffffbffffcffffffffffcfdf1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fdf7ff87ffa7c9932673ffffffffffffffffffffffffffffffffffffffff3f1c7fffcfffffffffffffffffffffffffffffffffffffffffde3f7ff3 1ffdffffffffcffffffffffdff3ff3fffffff7fcffcffffffffffcfbf2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2fefbff4bff67c991e673ffffffffffffffffffffffffffffffffffffffff3f84bfffcfffffffffffffffffffffffffffffffffffffffffb8feffea 2ffeffffffffcffffffffffef927f3fffffffbf87fcffffffffffcd7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ff57ff87ffa7c99c6073ffffffffffffffffffffffffffffffffffffffff3fe040000fffffffffffffffffffffffffffffffffffffffffc1ff7ff2 1ffde13fffffcffffffffffdfc0ff3fffffff7f03fcffffffffffc1ff2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2ff8bff4bff67c99e27f3ffffffffffffffffffffffffffffffffffffffff3ff880000fffffffffffffffffffffffffffffffffffffffffa7feffea 2ffecc3fffffcffffffffffefe1ff3fffffffbe49fcffffffffffcc7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ff17ff87ffb309932673ffffffffffffffffffffffffffffffffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffffffdfff7ff2 1ffd9f30e1c3cffffffffffdff3ff3fffffff7fcffcffffffffffcf1f2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2fc7bff4bff784c3870f3ffffffffffffffffffffffffffffffffffffffff2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffea 2ffe9f264c99cffffffffffe800073fffffffa0001cffffffffffcfc71fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1f1f7ff87ffbffffffff3ffffffffffffffffffffffffffffffffffffffff5555555555555555555555555555555555555555555555555555557ff2 1ffd9f264799cffffffffffd800073fffffff60001cffffffffffcfe12fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2c7fbff4bff7ffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea 2ffe9f267181cffffffffffefffff3fffffffbffffcffffffffffcff8100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ff7ff87ffbffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2 1ffd9f26789fcffffffffffdfffff3fffffff7ffffcffffffffffcffe200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023ffbff4bff7ffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea 2ffecc264c99cffffffffffe800073fffffffa0001cffffffffffcfffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfff7ff87ffbffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2 1ffde130e1c3cffffffffffd800073fffffff60001cffffffffffcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabff4bff7ffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea 2ffeffffffffcffffffffffeff3ff3fffffffbfcffcffffffffffd555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557ff87ff8000000003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3 1ffdffffffffcffffffffffdfe1ff3fffffff7e49fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bff0000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8 2ffeffffffffcffffffffffefc0ff3fffffffbf03fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 1ffdffffffffcffffffffffdf927f3fffffff7f87fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb 2ffeffffffffcffffffffffeff3ff3fffffffbfcffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1 1ffdffffffffcffffffffffdfffff3fffffff7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9 2ffe000000000ffffffffffefffff3fffffffbffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1 1ffc000000000ffffffffffdfffff3fffffff7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea 2ffffffffffffffffffffffe000003fffffff800000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2 1ffffffffffffffffffffffc000003fffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9 2ffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3 1ffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8 2ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1 1ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9 2ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555551 1ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab 2ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000022 1ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000001 1ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000001 2ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000001 1ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000001 2ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000001 1ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000001 2ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000001 1ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000003 1ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000001 1ffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2ffcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000003 1ffd55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557ff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000003 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000003 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000003 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000003 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000002 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000002 1ffffffffffc3ffffffff33ffffffffffffffffffffffffffffffffffc3fffff9fffffcffffffffffffffffffffffffffffff333f999ffffffffffffffffffffffffffffffff3e7fffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000002 2ffffffffff99ffffffff3fffffffffffffffffffffffffffffffffff99fffff9fffffcffffffffffffffffffffffffffffff333ff9fffffffffffffffffffffffffffffffff3e7fffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000002 1ffffffffff3f0d119332124e4fffffffffffffffffffffffffffffff3c9cc3213870e4f00000003fffffffffffffffffffff3321909272780000001ffffffffffffffffffff1c61c3870e4c3fffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000002 2ffffffffff3e64cc893332248f80000003ffffffffffffffffffffff3c9c9900932648f7ffffffffffffffffffffffffffffb34c9991247bfffffffffffffffffffffffffff1c4c993264899fffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000002 1ffffffffff3e64cc99333264cf80000007ffffffffffffffffffffff3cc99919933e4cf7ffffffbfffffffffffffffffffff927c9993267bffffffdffffffffffffffffffff084c8f1fe4c99fffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000002 2ffffffffff3e64cc99333264cf80000003ffffffffffffffffffffff3cc9813990304cf7ffffffffffffffffffffffffffff92609993267bfffffffffffffffffffffffffff2a40e3c704c81fffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000002 1ffffffffff3e64cc99333264cf80000007ffffffffffffffffffffff3ce39f3993e64cf7ffffffbfffffffffffffffffffffcccc9993267bffffffdffffffffffffffffffff224ff1e264c9ff55555557ffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000002 2ffffffffff9864cc892322648f80000003ffffffffffffffffffffff99e39939932648f7ffffffffffffffffffffffffffffcccc9913247bfffffffffffffffffffffffffff364c993264899fffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000002 1ffffffffffc30ccc939392664f80000007ffffffffffffffffffffffc3f7c339987124f7ffffffbfffffffffffffffffffffcce21c93327bffffffdffffffffffffffffffff3661c387124c3fffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000002 2ffffffffffffffff9fffffffcf80000003fffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffe7bfffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000003 1ffffffffffffffff9ffffffccf80000007fffffffffffffffffffffffffffffffffffff7ffffffbfffffffffffffffffffffffffffffe67bffffffdfffffffffffffffffffffffffffffccfffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000000 2ffffffffffffffff9ffffffe1faaaaaaabfffffffffffffffffffffffffffffffffffff55555557ffffffffffffffffffffffffffffff0faaaaaaabfffffffffffffffffffffffffffffe1fffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000000 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000001 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000001 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000001 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000002 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000002 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000003 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000000 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000000 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000000 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000000 2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000000 155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000001 2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8000000000000000000000000000000000000000000000000000000000000000000000000000080000000080000000000000000000000003 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000040000000000000000000000000 showpage %%EndDocument endTexFig 249 2171 a Fo(Figure)g(8.1)249 2209 y Fy(XPVM)g(in)o(terface)c(-)j (snapshot)d(during)h(use)p eop %%Page: 137 156 137 155 bop 249 251 a Fu(Adv)n(anced)14 b(T)m(opics)1252 b(137)249 507 y FA(XPVM)13 b(while)f(lea)o(ving)f(PVM)i(running.)k(If) 12 b(XPVM)h(is)f(b)q(eing)h(used)g(to)f(collect)h(trace)g(information,) 249 561 y(the)g(information)d(will)h(not)h(b)q(e)i(collected)f(if)f (XPVM)h(is)f(stopp)q(ed.)19 b(The)13 b FB(Halt)f FA(button)h(is)f(used) i(when)249 615 y(one)j(is)g(through)g(with)g(PVM.)g(Clic)o(king)e(on)i (this)g(button)h(kills)d(all)h(running)h(PVM)g(tasks,)h(sh)o(uts)249 669 y(do)o(wn)c(PVM)i(cleanly)m(,)d(and)i(exits)g(the)g(XPVM)g(in)o (terface.)22 b(The)15 b FB(Help)f FA(button)h(brings)g(up)g(a)f(men)o (u)249 723 y(of)f(topics)h(the)h(user)g(can)f(get)g(help)g(ab)q(out.) 291 777 y(During)e(startup,)h(XPVM)h(joins)e(a)h(group)g(called)g(xp)o (vm.)j(The)d(in)o(ten)o(tion)f(is)h(that)g(tasks)h(started)249 831 y(outside)j(the)h(XPVM)f(in)o(terface)h(can)f(get)g(the)h(TID)e(of) h(XPVM)g(b)o(y)g(doing)f Fs(tid)21 b(=)g(pvm)p 1678 831 14 2 v 16 w(gettid\()249 885 y(xpvm,)g(0)g(\))p FA(.)29 b(This)18 b(TID)f(w)o(ould)g(b)q(e)h(needed)h(if)e(the)i(user)f(w)o(an) o(ted)g(to)f(man)o(ually)e(turn)j(on)g(trac-)249 939 y(ing)f(inside)h(suc)o(h)h(a)f(task)g(and)g(pass)g(the)h(ev)o(en)o(ts)g (bac)o(k)f(to)g(XPVM)g(for)g(displa)o(y)m(.)29 b(The)18 b(exp)q(ected)249 993 y(T)m(raceCo)q(de)d(for)e(these)j(ev)o(en)o(ts)f (is)e(666.)291 1047 y(While)h(an)h(application)e(is)i(running,)g(XPVM)g (collects)h(and)e(displa)o(ys)h(the)g(information)e(in)h(real)249 1101 y(time.)j(Although)12 b(XPVM)i(up)q(dates)g(the)g(views)f(as)h (fast)f(as)g(it)g(can,)g(there)i(are)e(cases)i(when)f(XPVM)249 1155 y(cannot)g(k)o(eep)h(up)f(with)f(the)i(ev)o(en)o(ts)g(and)e(it)h (falls)f(b)q(ehind)h(the)g(actual)g(run)g(time.)291 1209 y(In)e(the)h(middle)d(of)i(the)h(XPVM)g(in)o(terface)g(are)g (trace\014le)g(con)o(trols.)18 b(It)12 b(is)g(here)i(that)e(the)h(user) h(can)249 1263 y(sp)q(ecify)j(a)e(trace\014le|a)i(default)e (trace\014le)i(in)f(/tmp)e(is)i(initially)d(displa)o(y)o(ed.)24 b(There)17 b(are)f(buttons)249 1317 y(to)g(sp)q(ecify)i(whether)f(the)h (sp)q(eci\014ed)g(trace\014le)f(is)g(to)f(b)q(e)h(pla)o(y)o(ed)f(bac)o (k)g(or)h(o)o(v)o(erwritten)g(b)o(y)f(a)h(new)249 1371 y(run.)24 b(XPVM)17 b(sa)o(v)o(es)f(trace)h(ev)o(en)o(ts)g(in)e(a)h (\014le)g(using)f(the)i(\\self)e(de\014ning)h(data)g(format")d (\(SDDF\))249 1425 y(describ)q(ed)k(in)e(Dan)f(Reed's)i(P)o(ablo)e([15) o(])h(trace)h(pla)o(ying)d(pac)o(k)n(age.)22 b(The)15 b(analysis)g(of)f(PVM)i(traces)249 1479 y(can)e(b)q(e)h(carried)f(out)g (on)g(an)o(y)f(of)g(a)h(n)o(um)o(b)q(er)f(of)g(systems)i(suc)o(h)f(as)g (P)o(ablo.)291 1533 y(XPVM)f(can)h(pla)o(y)e(bac)o(k)h(its)h(o)o(wn)f (SDDF)f(\014les.)19 b(The)13 b(tap)q(e-pla)o(y)o(er-lik)o(e)g(buttons)g (allo)o(w)f(the)i(user)249 1587 y(to)f(rewind)g(the)g(trace\014le,)h (stop)f(the)h(displa)o(y)d(at)i(an)o(y)g(p)q(oin)o(t,)f(and)g(step)i (through)f(the)h(execution.)k(A)249 1641 y(time)13 b(displa)o(y)g(sp)q (eci\014es)i(the)g(n)o(um)o(b)q(er)e(of)g(seconds)j(from)c(when)i(the)h (trace)f(displa)o(y)f(b)q(egan.)291 1694 y(The)20 b FB(Views)f FA(button)i(allo)o(ws)e(the)h(user)i(to)e(op)q(en)g(or)g(close)h(an)o (y)f(of)f(sev)o(eral)i(views)f(presen)o(tly)249 1748 y(supplied)14 b(with)g(XPVM.)g(These)h(views)f(are)g(describ)q(ed)i(b)q (elo)o(w.)249 1831 y Fr(8.1.1)48 b(Net)o(w)o(ork)15 b(View)249 1914 y FA(The)f FB(Network)e FA(view)h(displa)o(ys)f(the)i(presen)o(t)h (virtual)d(mac)o(hine)g(con\014guration)h(and)g(the)g(activit)o(y)g(of) 249 1968 y(the)j(hosts.)21 b(Eac)o(h)15 b(host)g(is)g(represen)o(ted)j (b)o(y)c(an)h(icon)g(that)f(includes)i(the)f(PVM)p 1535 1968 13 2 v 16 w(AR)o(CH)f(and)h(host)249 2022 y(name)e(inside)i(the)g (icon.)k(In)14 b(the)h(initial)d(release)k(of)e(XPVM,)g(the)h(icons)g (are)f(arranged)h(arbitrarily)249 2076 y(on)f(b)q(oth)f(sides)i(of)e(a) g(bus)i(net)o(w)o(ork.)j(In)c(future)g(releases)h(the)g(view)e(will)f (b)q(e)j(extended)g(to)e(visualize)249 2130 y(net)o(w)o(ork)20 b(activit)o(y)f(as)h(w)o(ell.)36 b(A)o(t)20 b(that)g(time)f(the)h(user) h(will)e(b)q(e)h(able)g(to)g(sp)q(ecify)g(the)h(net)o(w)o(ork)249 2184 y(top)q(ology)13 b(to)g(displa)o(y)m(.)291 2238 y(These)e(icons)f(are)g(illuminated)d(in)j(di\013eren)o(t)h(colors)f (to)g(indicate)f(their)i(status)f(in)g(executing)h(PVM)249 2292 y(tasks.)23 b(Green)16 b(implies)d(that)j(at)f(least)g(one)h(task) f(on)g(that)h(host)f(is)h(busy)f(executing)h(useful)g(w)o(ork.)249 2346 y(Y)m(ello)o(w)e(indicates)i(that)f(no)h(tasks)f(are)h(executing)g (user)h(computation,)d(but)h(at)g(least)h(one)g(task)f(is)249 2400 y(busy)f(executing)g(PVM)g(system)f(routines.)18 b(When)c(there)g(are)g(no)f(tasks)h(on)f(a)g(giv)o(en)g(host,)g(its)g (icon)249 2454 y(is)h(left)f(uncolored)i(or)f(white.)k(The)c(sp)q (eci\014c)h(colors)f(used)h(in)f(eac)o(h)g(case)h(are)f(user)h (customizable.)291 2508 y(The)j(user)i(can)e(tell)g(at)g(a)g(glance)g (ho)o(w)g(w)o(ell)g(the)g(virtual)g(mac)o(hine)f(is)h(b)q(eing)g (utilized)g(b)o(y)g(his)p eop %%Page: 138 157 138 156 bop 249 251 a Fu(138)1356 b(Chapter)13 b(8)249 507 y FA(PVM)g(application.)k(If)12 b(all)g(the)h(hosts)g(are)h(green)f (most)f(of)g(the)i(time,)d(then)i(mac)o(hine)f(utilization)f(is)249 561 y(go)q(o)q(d.)18 b(The)d(Net)o(w)o(ork)f(view)g(do)q(es)h(not)f (displa)o(y)f(activit)o(y)h(from)e(other)j(users')g(PVM)f(jobs)g(or)g (other)249 615 y(pro)q(cesses)j(that)d(ma)o(y)d(b)q(e)k(running)f(on)f (the)i(hosts.)291 669 y(In)h(future)i(releases)g(the)g(view)f(will)e (allo)o(w)g(the)j(user)g(to)e(clic)o(k)h(on)g(a)f(m)o(ultipro)q(cessor) h(icon)f(and)249 723 y(get)h(information)d(ab)q(out)j(the)g(n)o(um)o(b) q(er)f(of)g(pro)q(cessors,)j(n)o(um)o(b)q(er)d(of)h(PVM)g(tasks,)g (etc.,)h(that)f(are)249 777 y(running)d(on)f(the)i(host.)249 860 y Fr(8.1.2)48 b(Space-Time)14 b(View)249 943 y FA(The)e FB(Sp)n(ac)n(e-Time)f FA(view)g(displa)o(ys)g(the)h(activities)f(of)g (individual)e(PVM)j(tasks)g(that)f(are)h(running)f(on)249 997 y(the)16 b(virtual)e(mac)o(hine.)21 b(Listed)16 b(on)f(the)h (left-hand)f(side)g(of)g(the)h(view)f(are)h(the)f(executable)i(names) 249 1051 y(of)12 b(the)h(tasks,)g(preceded)i(b)o(y)e(the)g(host)g(they) g(are)g(running)g(on.)k(The)c(task)g(list)f(is)h(sorted)h(b)o(y)e(host) h(so)249 1105 y(that)h(it)g(is)g(easy)h(to)f(see)h(whether)h(tasks)e (are)h(b)q(eing)f(clump)q(ed)g(on)g(one)g(host.)19 b(This)14 b(list)g(also)g(sho)o(ws)249 1159 y(the)h(task-to-host)e(mappings)g (\(whic)o(h)g(are)i(not)f(a)o(v)n(ailable)d(in)j(the)g(Net)o(w)o(ork)g (view\).)291 1213 y(The)e(Space-Time)f(view)g(com)o(bines)g(three)i (di\013eren)o(t)g(displa)o(ys.)j(The)c(\014rst)h(is)f(lik)o(e)e(a)i (Gan)o(tt)f(c)o(hart.)249 1267 y(Beside)18 b(eac)o(h)f(listed)f(task)h (is)f(a)g(horizon)o(tal)g(bar)g(stretc)o(hing)i(out)e(in)g(the)h (\\time")e(direction.)26 b(The)249 1321 y(color)16 b(of)f(this)h(bar)g (at)g(an)o(y)f(time)g(indicates)h(the)g(state)h(of)e(the)i(task.)24 b(Green)17 b(indicates)f(that)g(user)249 1375 y(computations)g(are)h(b) q(eing)g(executed.)30 b(Y)m(ello)o(w)16 b(marks)g(the)i(times)e(when)h (the)h(task)f(is)g(executing)249 1429 y(PVM)h(routines.)29 b(White)17 b(indicates)h(when)f(a)g(task)h(is)f(w)o(aiting)f(for)h (messages.)29 b(The)17 b(bar)h(b)q(egins)249 1483 y(at)c(the)h(time)e (when)i(the)f(task)h(starts)g(executing)g(and)f(ends)h(when)g(the)g (task)f(exits)h(normally)m(.)h(The)249 1537 y(sp)q(eci\014c)f(colors)f (used)h(in)f(eac)o(h)g(case)h(are)f(user)h(customizable.)291 1591 y(The)g(second)h(displa)o(y)d(o)o(v)o(erla)o(ys)i(the)g(\014rst)g (displa)o(y)f(with)h(the)g(comm)o(unicatio)o(n)d(activit)o(y)i(among) 249 1645 y(tasks.)28 b(When)17 b(a)g(message)g(is)g(sen)o(t)h(b)q(et)o (w)o(een)g(t)o(w)o(o)f(tasks,)h(a)e(red)i(line)f(is)g(dra)o(wn)g (starting)g(at)f(the)249 1699 y(sending)d(task's)h(bar)f(at)g(the)h (time)e(the)h(message)g(is)g(sen)o(t)h(and)f(ending)g(at)g(the)h (receiving)g(task's)f(bar)249 1753 y(when)18 b(the)g(message)g(is)f (receiv)o(ed.)31 b(Note)18 b(that)g(this)g(is)f(not)h(necessarily)g (the)h(time)d(the)i(message)249 1807 y(arriv)o(ed,)g(but)f(rather)i (the)f(time)e(the)i(task)f(returns)i(from)d(p)o(vm)p 1285 1807 13 2 v 13 w(recv\(\).)30 b(Visually)m(,)16 b(the)i(patterns)249 1861 y(and)13 b(slop)q(es)h(of)f(the)h(red)g (lines)f(com)o(bined)f(with)h(white)g(\\w)o(aiting")f(regions)h(rev)o (eal)h(a)f(lot)f(ab)q(out)h(the)249 1914 y(comm)o(unication)d (e\016ciency)15 b(of)e(an)h(application.)291 1968 y(The)f(third)f (displa)o(y)g(app)q(ears)h(only)f(when)h(a)f(user)i(clic)o(ks)e(on)h (in)o(teresting)g(features)g(of)f(the)h(Space-)249 2022 y(Time)d(view)g(with)h(the)h(left)e(mouse)g(button.)18 b(A)11 b(small)d(\\p)q(op-up")j(windo)o(w)f(app)q(ears)i(giving)d (detailed)249 2076 y(information)e(regarding)j(sp)q(eci\014c)i(task)e (states)h(or)f(messages.)17 b(If)10 b(a)f(task)h(bar)g(is)g(clic)o(k)o (ed)g(on,)h(the)f(state)249 2130 y(b)q(egin)k(and)g(end)g(times)f(are)i (displa)o(y)o(ed,)d(along)h(with)h(the)g(last)g(PVM)g(system)g(call)f (information.)i(If)249 2184 y(a)d(message)g(line)g(is)g(clic)o(k)o(ed)h (on,)f(the)h(windo)o(w)e(displa)o(ys)h(the)h(send)g(and)f(receiv)o(e)i (time)d(as)h(w)o(ell)g(as)g(the)249 2238 y(n)o(um)o(b)q(er)h(of)h(b)o (ytes)g(in)g(the)g(message)g(and)f(the)i(message)e(tag.)291 2292 y(When)h(the)h(mouse)f(is)g(mo)o(v)o(ed)f(inside)h(the)h (Space-Time)f(view,)g(a)g(blue)g(v)o(ertical)g(line)g(trac)o(ks)h(the) 249 2346 y(cursor)g(and)e(the)h(time)e(corresp)q(onding)j(to)e(this)h (v)o(ertical)f(line)g(is)h(displa)o(y)o(ed)f(as)g(Query)i(time)d(at)h (the)249 2400 y(b)q(ottom)f(of)i(the)g(displa)o(y)m(.)j(This)d(v)o (ertical)f(line)h(also)f(app)q(ears)i(in)e(the)i(other)f(\\something)e (vs.)19 b(time")249 2454 y(views)c(so)g(the)h(user)g(can)f(correlate)h (a)e(feature)i(in)e(one)h(view)g(with)g(information)d(giv)o(en)i(in)h (another)249 2508 y(view.)p eop %%Page: 139 158 139 157 bop 249 251 a Fu(Adv)n(anced)14 b(T)m(opics)1252 b(139)291 507 y FA(The)13 b(user)h(can)g(zo)q(om)d(in)o(to)i(an)o(y)f (area)i(of)e(the)i(Space-Time)e(view)h(b)o(y)g(dragging)f(the)i(v)o (ertical)f(line)249 561 y(with)18 b(the)g(middle)e(mouse)h(button.)30 b(The)19 b(view)e(will)g(unzo)q(om)f(bac)o(k)i(one)g(lev)o(el)g(when)g (the)g(righ)o(t)249 615 y(mouse)f(button)g(is)g(clic)o(k)o(ed.)28 b(It)18 b(is)f(often)g(the)h(case)h(that)e(v)o(ery)h(\014ne)f(comm)o (unication)d(or)j(w)o(aiting)249 669 y(states)g(are)g(only)e(visible)g (when)i(the)f(view)g(is)g(magni\014ed)e(with)i(the)h(zo)q(om)d (feature.)25 b(As)17 b(with)e(the)249 723 y(Query)g(time,)d(the)i (other)h(views)f(also)f(zo)q(om)g(along)g(with)g(the)i(Space-Time)e (view.)249 806 y Fr(8.1.3)48 b(Other)14 b(Views)249 889 y FA(XPVM)h(is)f(designed)h(to)g(b)q(e)g(extensible.)20 b(New)15 b(views)g(can)g(b)q(e)g(created)h(and)e(added)h(to)f(the)h FB(Views)249 943 y FA(men)o(u.)j(A)o(t)d(presen)o(t,)g(there)h(are)f (three)g(other)g(views:)k(task)c(utilization)d(vs.)20 b(time)13 b(view,)h(call)f(trace)249 997 y(view,)g(and)h(task)f(output) h(view.)k(Unlik)o(e)13 b(the)h(Net)o(w)o(ork)g(and)g(Space-Time)e (views,)i(these)h(views)f(are)249 1051 y(closed)f(b)o(y)f(default.)17 b(XPVM)12 b(attempts)g(to)g(dra)o(w)g(the)g(views)g(in)g(real)g(time;)f (hence,)i(the)g(few)o(er)g(op)q(en)249 1105 y(views,)h(the)g(faster)h (XPVM)f(can)g(dra)o(w.)291 1159 y(The)e(Utilization)e(view)h(sho)o(ws)i (the)f(n)o(um)o(b)q(er)f(of)g(tasks)h(computing,)e(in)h(o)o(v)o (erhead,)h(or)g(w)o(aiting)e(for)249 1213 y(eac)o(h)i(instan)o(t.)18 b(It)11 b(is)h(a)g(summary)d(of)i(the)i(Space-Time)d(view)i(for)g(eac)o (h)g(instan)o(t.)17 b(Since)12 b(the)h(n)o(um)o(b)q(er)249 1267 y(of)g(tasks)g(in)g(a)g(PVM)g(application)f(can)i(c)o(hange)f (dynamically)m(,)c(the)14 b(scale)g(on)f(the)h(Utilization)d(view)249 1321 y(will)e(c)o(hange)h(dynamically)d(when)j(tasks)h(are)f(added,)h (but)f(not)g(when)h(they)f(exit.)17 b(When)10 b(the)h(n)o(um)o(b)q(er) 249 1375 y(of)j(tasks)h(c)o(hanges,)g(the)g(displa)o(y)o(ed)f(p)q (ortion)g(of)g(the)h(Utilization)e(view)h(is)h(completely)e(redra)o(wn) i(to)249 1429 y(the)g(new)f(scale.)291 1483 y(The)f(Call)e(T)m(race)i (view)f(pro)o(vides)h(a)f(textual)g(record)i(of)e(the)h(last)f(PVM)h (call)f(made)f(in)h(eac)o(h)h(task.)249 1537 y(The)g(list)f(of)g(tasks) h(is)g(the)g(same)f(as)g(in)g(the)i(Space-Time)d(view.)18 b(As)13 b(an)f(application)f(runs,)i(the)g(text)249 1591 y(c)o(hanges)g(to)g(re\015ect)h(the)f(most)e(recen)o(t)j(activit)o(y)e (in)g(eac)o(h)h(task.)k(This)c(view)f(is)g(useful)h(as)g(a)f(call)f (lev)o(el)249 1645 y(debugger)k(to)e(iden)o(tify)h(where)h(a)e(PVM)h (program's)f(execution)h(hangs.)291 1699 y(Unlik)o(e)g(the)i(PVM)g (console,)g(XPVM)g(has)f(no)g(natural)g(place)h(for)f(task)g(output)h (to)f(b)q(e)h(prin)o(ted.)249 1753 y(Nor)j(is)h(there)g(a)f(\015ag)g (in)g(XPVM)h(to)f(tell)g(tasks)h(to)f(redirect)i(their)f(standard)f (output)h(bac)o(k)f(to)249 1807 y(XPVM.)e(This)f(\015ag)g(is)h(turned)g (on)f(automatically)e(in)i(all)f(tasks)i(spa)o(wned)g(b)o(y)g(XPVM)g (after)f(the)249 1861 y(T)m(ask)h(Output)h(view)f(is)f(op)q(ened.)29 b(This)17 b(view)g(giv)o(es)g(the)h(user)g(the)g(option)e(to)h(also)g (redirect)h(the)249 1914 y(output)g(in)o(to)g(a)g(\014le.)30 b(If)18 b(the)h(user)g(t)o(yp)q(es)g(a)f(\014le)g(name)f(in)h(the)g (\\T)m(ask)g(Output")g(b)q(o)o(x,)h(then)f(the)249 1968 y(output)c(is)g(prin)o(ted)g(in)g(the)g(windo)o(w)f(and)h(in)o(to)f (the)h(\014le.)291 2022 y(As)i(with)f(the)i(trace)f(ev)o(en)o(ts,)h(a)f (task)g(started)g(outside)h(XPVM)f(can)g(b)q(e)g(programmed)e(to)h (send)249 2076 y(standard)k(output)f(to)g(XPVM)h(for)f(displa)o(y)f(b)o (y)h(using)g(the)h(options)e(in)h(p)o(vm)p 1517 2076 13 2 v 13 w(setopt\(\).)33 b(XPVM)249 2130 y(exp)q(ects)16 b(the)e(OutputCo)q(de)h(to)f(b)q(e)h(set)f(to)g(667.)249 2251 y FD(8.2)52 b(P)o(orting)18 b(PVM)e(to)i(New)f(Arc)o(hitectures) 249 2359 y FA(PVM)d(has)g(b)q(een)h(p)q(orted)g(to)f(three)h(distinct)f (classes)h(of)f(arc)o(hitecture:)208 2429 y Ft(\017)20 b FA(W)m(orkstations)13 b(and)h(PCs)g(running)g(some)f(v)o(ersion)h(of) f(Unix)208 2500 y Ft(\017)20 b FA(Distributed-memory)12 b(m)o(ultipro)q(cessors)h(lik)o(e)h(the)g(In)o(tel)g(h)o(yp)q(ercub)q (es)p eop %%Page: 140 159 140 158 bop 249 251 a Fu(140)1356 b(Chapter)13 b(8)208 507 y Ft(\017)20 b FA(Shared-memory)12 b(m)o(ultipro)q(cessors)i(lik)o (e)f(the)h(SGI)g(Challenge)249 578 y(Eac)o(h)f(of)g(these)h(classes)h (requires)f(a)f(di\013eren)o(t)h(approac)o(h)f(to)g(mak)o(e)e(PVM)j (exploit)e(the)i(capabilities)249 632 y(of)9 b(the)i(resp)q(ectiv)o(e)g (arc)o(hitecture.)19 b(The)10 b(w)o(orkstations)g(use)g(TCP/IP)g(to)g (mo)o(v)o(e)e(data)i(b)q(et)o(w)o(een)h(hosts,)249 686 y(the)h(distributed-memory)e(m)o(ultipro)q(cessors)h(use)i(the)f(nativ) o(e)f(message-passing)g(routines)h(to)g(mo)o(v)o(e)249 740 y(data)e(b)q(et)o(w)o(een)i(no)q(des,)g(and)e(the)i(shared-memory)d (m)o(ultipro)q(cessors)h(use)i(shared)f(memory)d(to)j(mo)o(v)o(e)249 794 y(data)16 b(b)q(et)o(w)o(een)i(the)f(pro)q(cessors.)27 b(The)17 b(follo)o(wing)d(sections)j(describ)q(e)h(the)f(steps)h(for)d (p)q(orting)h(the)249 848 y(PVM)e(source)i(to)d(eac)o(h)i(of)e(these)i (classes.)291 902 y(P)o(orting)10 b(PVM)h(to)f(non-Unix)g(op)q(erating) h(systems)g(can)g(b)q(e)g(v)o(ery)g(di\016cult.)16 b(Nonetheless,)d (groups)249 956 y(outside)18 b(the)h(PVM)g(team)d(ha)o(v)o(e)i(dev)o (elop)q(ed)h(PVM)f(p)q(orts)h(for)f(DEC's)g(VMS)g(and)g(IBM's)g(OS/2) 249 1010 y(op)q(erating)c(systems.)k(Suc)o(h)d(p)q(orts)g(can)f (require)h(extensiv)o(e)g(rewriting)f(of)f(the)i(source)g(and)f(are)g (not)249 1064 y(describ)q(ed)i(here.)249 1147 y Fr(8.2.1)48 b(Unix)15 b(W)l(orkstations)249 1230 y FA(PVM)j(is)e(supp)q(orted)j(on) e(most)f(Unix)g(platforms.)26 b(If)17 b(an)g(arc)o(hitecture)i(is)e (not)g(listed)g(in)f(the)i(\014le)249 1284 y Fs($PVM)p 340 1284 14 2 v 15 w(ROOT/docs/arches)p FA(,)8 b(the)j(follo)o(wing)d (description)k(should)e(help)h(y)o(ou)g(to)f(create)j(a)d(new)i(PVM)249 1337 y(p)q(ort.)31 b(An)o(ything)18 b(from)e(a)i(small)e(amoun)o(t)g (of)i(t)o(w)o(eaking)f(to)h(ma)r(jor)e(surgery)k(ma)o(y)c(b)q(e)j (required,)249 1391 y(dep)q(ending)c(on)e(ho)o(w)h(accomo)q(dating)e(y) o(our)h(v)o(ersion)h(of)g(Unix)f(is.)291 1445 y(The)h(PVM)g(source)h (directories)g(are)f(organized)g(in)g(the)g(follo)o(wing)d(manner:)17 b(Files)d(in)g Fs(src)f FA(form)249 1499 y(the)i(core)g(for)f(PVM)h (\(p)o(vmd)e(and)h(libp)o(vm\);)e(\014les)j(in)f Fs(console)f FA(are)i(for)f(the)h(PVM)g(console,)f(whic)o(h)249 1553 y(is)f(just)h(a)f(sp)q(ecial)h(task;)f(source)i(for)e(the)i(F)o(OR)m (TRAN)d(in)o(terface)i(and)g(group)f(functions)g(are)h(in)f(the)249 1607 y Fs(libfpvm)f FA(and)i Fs(pvmgs)f FA(directories,)i(resp)q(ectiv) o(ely)m(.)291 1661 y(In)e(eac)o(h)g(of)g(the)h(source)g(directories,)g (the)g(\014le)f Fs(Makefile.aimk)e FA(is)i(the)h(generic)g(mak)o (e\014le)d(for)i(all)249 1715 y(unipro)q(cessor)i(platforms.)i (System-sp)q(eci\014c)d(de\014nitions)g(are)g(k)o(ept)h(in)e(the)i Fs(conf)e FA(directory)h(under)249 1769 y Fs($\(PVM)p 362 1769 V 15 w(ARCH\).def)p FA(.)22 b(The)17 b(script)g Fs(lib/aimk)p FA(,)d(in)o(v)o(ok)o(ed)h(b)o(y)h(the)h(top-lev)o(el)e (mak)o(e\014le,)g(determines)249 1823 y(the)c(v)n(alue)f(of)g Fs(PVM)p 534 1823 V 15 w(ARCH)p FA(,)f(then)i(c)o(ho)q(oses)g(the)g (appropriate)g(mak)o(e\014le)d(for)j(a)f(particular)g(arc)o(hitecture.) 249 1877 y(It)i(\014rst)g(lo)q(oks)f(in)g(the)h Fs(PVM)p 663 1877 V 15 w(ARCH)e FA(sub)q(directory)j(for)e(a)g(mak)o(e\014le;)g (if)f(none)i(is)f(found,)g(the)h(generic)h(one)249 1931 y(is)i(used.)21 b(The)15 b(custom)g(information)c(stored)16 b(in)f(the)g Fs(conf)f FA(directory)h(is)g(prep)q(ended)i(to)d(the)i (head)249 1985 y(of)c(the)h(c)o(hosen)g(mak)o(e\014le,)d(and)i(the)h (build)f(b)q(egins.)18 b(The)12 b(generic)h(mak)o(e\014les)f(for)f(MPP) i(and)f(shared-)249 2039 y(memory)i(systems)i(are)g(Mak)o(e\014le.mimd) d(and)j(Mak)o(e\014le.shmem,)e(resp)q(ectiv)o(ely)m(.)25 b(System-sp)q(eci\014c)249 2093 y(rules)15 b(are)f(k)o(ept)g(in)g(the)g (mak)o(e\014le)e(under)j(the)g Fs(PVM)p 1050 2093 V 15 w(ARCH)e FA(sub)q(directory)m(.)291 2147 y(The)h(steps)h(to)f(create)h (a)f(new)g(arc)o(hitecture)i(\(for)e(example)e FB(AR)o(CH)p FA(\))i(are:)208 2218 y Ft(\017)20 b FA(Add)15 b(a)g(rule)g(to)g(the)g (script)h Fs(lib/pvmgetarch)c FA(so)j(it)f(returns)i FB(AR)o(CH)p FA(.)e(PVM)i(uses)g(this)f(program)249 2271 y(to)i(determine)f(mac)o(hine)f(arc)o(hitecture)k(at)d(run)h(time.)25 b Fs(pvmgetarch)15 b FA(tries)i(to)g(use)g(the)h Fs(uname)d FA(or)249 2325 y Fs(arch)e FA(command)f(\(supplied)i(b)o(y)g(man)o(y)e (v)o(endors\).)20 b(If)14 b(there)h(is)f(no)g(suc)o(h)h(command,)c(w)o (e)j(c)o(hec)o(k)h(for)249 2379 y(the)d(existence)i(of)d(a)g(\014le)h (or)g(device)g(unique)g(to)f(a)h(mac)o(hine)e({)i(try)g(to)f(\014nd)h (one)g(that)g(do)q(esn't)g(dep)q(end)249 2433 y(on)g(con\014guration)g (options.)17 b(Don't)12 b(break)h(the)f(existing)h(arc)o(hitectures)h (when)f(adding)e(a)h(new)h(one,)249 2487 y(unless)h(y)o(ou)e(w)o(on't)g (b)q(e)h(sharing)g(the)g(co)q(de)h(or)e(just)h(w)o(an)o(t)g(to)f(hac)o (k)h(it)f(together.)19 b(A)o(t)13 b(w)o(orst,)g(y)o(ou)f(can)p eop %%Page: 141 160 141 159 bop 249 251 a Fu(Adv)n(anced)14 b(T)m(opics)1252 b(141)249 507 y FA(o)o(v)o(erride)14 b(p)o(vmgetarc)o(h)f(b)o(y)h (setting)g Fs(PVM)p 895 507 14 2 v 15 w(ARCH)f FA(in)h(y)o(our)f Fs(.cshrc)g FA(\014le.)208 578 y Ft(\017)20 b FA(Create)f(\014les)e FB(AR)o(CH)p Fs(.def)g FA(and)g FB(AR)o(CH)p Fs(.m4)f FA(in)i Fs(pvm3/conf)p FA(.)26 b(As)18 b(a)g(\014rst)g(try)m(,)g(cop)o (y)f(them)g(from)249 632 y(another)j(arc)o(hitecture)h(similar)c(to)i (y)o(ours)h(\(y)o(ou'll)e(ha)o(v)o(e)h(to)g(\014gure)h(that)f(out\).)35 b FB(AR)o(CH)p Fs(.def)18 b FA(is)249 686 y(a)g(mac)o(hine-dep)q(enden) o(t)g(header)h(used)g(with)f(the)g(generic)h(mak)o(e\014les)e(\(for)h (example)e(see)j(the)g(\014le)249 740 y Fs(src/Makefile.aimk)p FA(\).)c(It)f(de\014nes)h(the)f(follo)o(wing)e(v)n(ariables)h(\(and)h (p)q(ossibly)f(others\):)227 819 y Fb({)21 b Fg(PVM)p 332 819 12 2 v 13 w(ARCH)11 b Fu({)i(This)h(is)f(set)g(to)g(the)g(arc)o (hitecture)i(name,)e Fd(AR)o(CH)p Fu(.)227 881 y Fb({)21 b Fg(ARCHCFLAG)o(S)11 b Fu({)j(This)g(lists)h(an)o(y)g(sp)q(ecial)h(C)d (compiler)j(\015ags)f(needed,)f(for)g(example,)h(optimizer)h(limits)g (or)249 927 y(\015oating-p)q(oin)o(t)d(switc)o(hes)d(\(Not,)g(for)f (example,)j Fg(-O)p Fu(\).)c(It)i(also)g(de\014nes)h(macros)f(needed)h (to)f(switc)o(h)g(in)h(optional)249 972 y(PVM)i(source)h(co)q(de,)f (for)g(example,)h Fg(-DSYSVSIG)o(NA)o(L)p Fu(.)9 b(Common)14 b(compiler)h(macros)e(are)g(explained)j(b)q(elo)o(w.)227 1034 y Fb({)21 b Fg(ARCHDLIB)7 b Fu({)j(This)h(lists)h(an)o(y)f(sp)q (ecial)h(libraries)h(needed)f(to)e(link)i(with)f(the)f(p)o(vmd,)i(for)e (example)i Fg(-lsocket)o Fu(.)249 1080 y(Y)m(ou'll)f(need)g(to)f(set)g (this)g(if)h(there)f(are)g(sym)o(b)q(ols)i(unde\014ned)g(while)f (linking)i(the)d(p)o(vmd.)16 b(Y)m(ou)10 b(can)h(use)f Fg(nm)f Fu(and)249 1126 y Fg(grep)j Fu(to)j(\014nd)f(the)h(missing)h (functions)g(in)e Fg(/usr/lib/li)o(b*)o(.a)p Fu(.)j(They)d(ma)o(y)g(o)q (ccur)h(in)g(m)o(ultiple)i(libraries,)249 1171 y(but)c(are)h(probably)h (de\014ned)f(in)g(only)g(one.)227 1234 y Fb({)21 b Fg(ARCHLIB)16 b Fu({)i(This)i(lists)g(an)o(y)f(sp)q(ecial)i(libraries)g(needed)f(to)f (link)h(with)g(tasks)f(\(an)o(ything)i(link)o(ed)f(with)249 1279 y Fd(libpvm)p Fu(\).)f(It)14 b(is)h(probably)h(a)e(sup)q(eset)h (of)f Fg(ARCHDLIB)p Fu(,)c(b)q(ecause)16 b(libp)o(vm)g(uses)f(mostly)g (the)f(same)g(functions)249 1325 y(as)f(the)g(p)o(vmd,)h(and)f(also)h (uses)g(XDR.)227 1387 y Fb({)21 b Fg(HASRANLIB)6 b Fu({)k(This)h (should)h(b)q(e)e(set)g(to)g Fg(t)g Fu(if)g(y)o(our)h(mac)o(hine)g(has) g(the)f Fg(ranlib)e Fu(command,)j(and)g Fg(f)e Fu(otherwise.)249 1474 y FA(Compiler)i(macros)h(imp)q(orted)f(from)g Fs(conf/)p FB(AR)o(CH)p Fs(.def)f FA(are)j(listed)g(at)g(the)g(top)f(of)g(the)i (\014le)e(named)249 1528 y Fs(src/Makefile.aimk)p FA(.)j(They)g(enable) f(options)g(that)g(are)g(common)d(to)j(sev)o(eral)h(mac)o(hines)e(and)h (so)249 1582 y(generally)h(useful.)22 b(New)16 b(ones)g(are)g(added)f (o)q(ccasionally)m(.)21 b(The)16 b(macro)e Fs(IMA)p 1479 1582 14 2 v 15 w FB(AR)o(CH)h FA(can)g(b)q(e)h(used)249 1636 y(to)d(enable)h(co)q(de)g(that)f(only)g(applies)g(to)g(a)g(single) g(arc)o(hitecture.)20 b(The)13 b(ones)h(most)e(commonly)e(used)249 1690 y(are:)227 1769 y Fb({)21 b Fg(FDSETPATC)o(H)10 b Fu({)j(If)f Fg(fd)p 591 1769 12 2 v 13 w(set)g Fu(de\014nitions)k (are)d(missing)i(from)e(the)g(system)g(\(rare)g(these)h(da)o(ys\).)227 1831 y Fb({)21 b Fg(HASSTDLIB)9 b Fu({)k(If)g(system)g(has)g Fg(<stdlib.h>)p Fu(.)227 1894 y Fb({)21 b Fg(NOGETDTBL)o(SIZ)14 b Fu({)19 b(If)f(system)g(do)q(esn't)h(ha)o(v)o(e)g Fg(getdtablesi)o (ze)o(\(\))c Fu(\(uses)k Fg(sysconf\()p 1547 1894 V 11 w(SC)p 1598 1894 V 13 w(OPEN)p 1691 1894 V 13 w(MAX\))d Fu(in-)249 1939 y(stead\).)227 2002 y Fb({)21 b Fg(NOREXEC)10 b Fu({)j(If)f(system)i(do)q(esn't)f(ha)o(v)o(e)h Fg(rexec\(\))c Fu(function.)227 2064 y Fb({)21 b Fg(NOSOCKOPT)9 b Fu({)k(If)g(system)g (do)q(esn't)g(ha)o(v)o(e)h Fg(setsockopt)o(\(\))9 b Fu(function,)14 b(or)f(it)h(do)q(esn't)f(w)o(ork.)227 2126 y Fb({)21 b Fg(NOSTRCASE)9 b Fu({)j(If)g(system)h(do)q(esn't)h(ha)o(v)o(e)f Fg(strcasecm)o(p\(\))c Fu(or)j Fg(strncasecm)o(p\(\))d Fu(\(includes)15 b(replacemen)o(ts\).)227 2188 y Fb({)21 b Fg(NOTMPNAM)10 b Fu({)j(If)f(system)h(do)q(esn't)h(ha)o(v)o(e)f Fg(tmpnam\(\))d Fu(function,)k(or)f(it's)g(brok)o(en.)227 2251 y Fb({)21 b Fg(NOUNIXDOM)9 b Fu({)k(T)m(o)g(disable)i(use)e(of)g (Unix-domain)i(so)q(c)o(k)o(ets)f(for)f(lo)q(cal)h(comm)o(unication.) 227 2313 y Fb({)21 b Fg(NOWAIT3)10 b Fu({)j(If)f(system)i(do)q(esn't)f (ha)o(v)o(e)h Fg(wait3\(\))c Fu(function)k(\(uses)g Fg(waitpid\(\))o Fu(\).)227 2375 y Fb({)21 b Fg(NOWAITPID)9 b Fu({)k(If)g(system)g(do)q (esn't)g(ha)o(v)o(e)h Fg(waitpid\(\))9 b Fu(function)15 b(either)f(\(uses)f Fg(wait\(\))p Fu(\).)227 2438 y Fb({)21 b Fg(RSHCOMMAN)o(D)10 b Fu({)j(If)f Fg(rsh)g Fu(command)i(isn't)f (named)h Fg("/usr/ucb/)o(rs)o(h")p Fu(.)227 2500 y Fb({)21 b Fg(SHAREDTMP)9 b Fu({)k(If)g Fg(/tmp)e Fu(directory)j(is)g(shared)g (b)q(et)o(w)o(een)f(mac)o(hines)i(in)e(a)g(cluster.)p eop %%Page: 142 161 142 160 bop 249 251 a Fu(142)1356 b(Chapter)13 b(8)227 507 y Fb({)21 b Fg(SOCKADHAS)o(LEN)9 b Fu({)k(If)f Fg(struct)18 b(sockaddr)9 b Fu(has)14 b(an)f Fg(sa)p 1059 507 12 2 v 14 w(len)e Fu(\014eld.)227 570 y Fb({)21 b Fg(SYSVBFUNC)9 b Fu({)k(If)g(system)g(do)q(esn't)g(ha)o(v)o(e)h Fg(bcopy\(\))c Fu(but)j(do)q(es)h(ha)o(v)o(e)g Fg(memcpy\(\))p Fu(.)227 632 y Fb({)21 b Fg(SYSVSIGNA)o(L)14 b Fu({)j(If)f(system)i(has)g (System-5)f(signal)i(handling)h(\(signal)f(handlers)g(are)f (uninstalled)i(after)249 677 y(eac)o(h)13 b(signal\).)227 740 y Fb({)21 b Fg(SYSVSTR)10 b Fu({)j(If)f(system)i(do)q(esn't)f(ha)o (v)o(e)h Fg(index\(\))c Fu(but)j(do)q(es)h(ha)o(v)o(e)f Fg(strchr\(\))p Fu(.)227 802 y Fb({)21 b Fg(UDPMAXLEN)9 b Fu({)k(T)m(o)g(set)g(a)g(di\013eren)o(t)h(maxim)o(um)g(UDP)f(pac)o(k) o(et)h(length)g(\(the)f(default)h(is)g(4096\).)249 889 y FB(AR)o(CH)p Fs(.m4)i FA(is)h(a)f(\014le)h(of)f(commands)f(for)i(the) g Fs(m4)f FA(macro)g(pro)q(cessor,)j(that)e(edits)h(the)f(libfp)o(vm)d (C)249 943 y(source)i(co)q(de)g(to)f(conform)e(to)i(F)o(OR)m(TRAN)e (calling)h(con)o(v)o(en)o(tions,)h(whic)o(h)f(v)n(ary)h(from)e(mac)o (hine)g(to)249 997 y(mac)o(hine.)k(The)d(t)o(w)o(o)f(main)e(things)i(y) o(ou)g(m)o(ust)g(determine)g(ab)q(out)h(y)o(our)f(F)o(OR)m(TRAN)g(are:) 18 b(1.)f(Ho)o(w)249 1051 y(F)o(OR)m(TRAN)g(subroutine)h(names)f(are)h (con)o(v)o(erted)g(to)g(link)o(er)f(sym)o(b)q(ols.)27 b(Some)17 b(systems)g(app)q(end)249 1105 y(an)i(underscore)h(to)f(the)g (name;)h(others)g(con)o(v)o(ert)f(to)g(all)e(capital)h(letters.)34 b(2.)e(Ho)o(w)18 b(strings)i(are)249 1159 y(passed)13 b(in)f(F)o(OR)m(TRAN)g({)g(One)h(common)c(metho)q(d)j(is)g(to)g(pass)h (the)g(address)g(in)f(a)g Fs(char*)p FA(,)f(and)i(pass)249 1213 y(corresp)q(onding)18 b(lengths)f(after)f(all)g(remaining)e (parameters.)26 b(The)17 b(easiest)h(w)o(a)o(y)e(to)g(disco)o(v)o(er)h (the)249 1267 y(correct)f(c)o(hoices)f(ma)o(y)d(b)q(e)j(to)f(try)g(ev)o (ery)h(common)c(case)k(\(appro)o(ximately)d(three\))j(for)f(eac)o(h.)19 b(First,)249 1321 y(get)e(the)h(function)f(names)f(righ)o(t,)h(then)g (mak)o(e)f(sure)i(y)o(ou)f(can)g(pass)g(string)g(data)g(to)g(F)o(OR)m (TRAN)249 1375 y(tasks.)208 1445 y Ft(\017)j FA(Add)d FB(AR)o(CH)f FA(to)g(the)h Fs(arches[])e FA(arra)o(y)h(in)g Fs(src/pvmarchc.c)p FA(.)22 b(Y)m(ou)16 b(m)o(ust)f(determine)i(the)g FB(data)249 1499 y(format)g FA(of)g(y)o(our)g(mac)o(hine)f(to)h(kno)o (w)g(whic)o(h)g(class)h(to)f(assign)h(it)f(to.)28 b(Mac)o(hines)18 b(with)f(the)h(same)249 1553 y Fs(arches[i].archnum)8 b FA(ha)o(v)o(e)k(the)g(same)f(binary)g(represen)o(tations)j(for)d(in)o (tegers)h(and)g(\015oating)f(p)q(oin)o(t)249 1607 y(n)o(um)o(b)q(ers.) 18 b(A)o(t)c(w)o(orst,)f(put)i(the)f(new)g(mac)o(hine)f(in)g(a)h(class) g(b)o(y)g(itself.)208 1678 y Ft(\017)20 b FA(Mo)q(dify)12 b(the)i(source)h(if)d(it)h(still)f(do)q(esn't)i(w)o(ork.)k(Use)c Fs(cpp)e FA(sym)o(b)q(ol)g Fs(IMA)p 1377 1678 14 2 v 15 w FB(AR)o(CH)h FA(to)g(include)g(mo)q(di\014-)249 1732 y(cations)h(that)g(only)f(apply)g(to)h FB(AR)o(CH)p FA(,)f(so)h(they)g(don't)g(a\013ect)h(other)f(p)q(orts.)249 1815 y Fr(8.2.2)48 b(Multipro)q(cessors)249 1898 y FA(P)o(orting)14 b(to)g(MPP)h(systems)f(is)g(more)g(di\016cult)f(b)q(ecause)j(most)d(of) h(them)f(do)i(not)f(o\013er)h(a)f(standard)249 1952 y(Unix)g(en)o (vironmen)o(t)e(on)i(the)g(no)q(des.)19 b(W)m(e)14 b(discuss)h(some)e (of)g(these)i(limitations)c(b)q(elo)o(w.)291 2006 y(Pro)q(cesses)19 b(running)d(on)g(the)h(no)q(des)g(of)e(an)h(In)o(tel)g(iPSC/860)g(ha)o (v)o(e)g(no)g(Unix)f(pro)q(cess)k(id's)c(and)249 2060 y(they)f(cannot)f(receiv)o(e)h(Unix)e(signals.)17 b(There)e(is)d(a)h (similar)d(problem)i(for)h(the)g(Thinking)f(Mac)o(hine's)249 2114 y(CM-5.)291 2168 y(If)g(a)h(no)q(de)h(pro)q(cess)h(forks,)e(the)h (b)q(eha)o(vior)f(of)f(the)i(new)g(pro)q(cess)h(is)e(mac)o(hine)f(dep)q (enden)o(t.)19 b(In)14 b(an)o(y)249 2222 y(ev)o(en)o(t)h(it)f(w)o(ould) f(not)h(b)q(e)h(allo)o(w)o(ed)e(to)h(b)q(ecome)h(a)f(new)g(PVM)h(task.) k(In)14 b(general,)g(pro)q(cesses)j(on)d(the)249 2276 y(no)q(des)h(are)f(not)g(allo)o(w)o(ed)e(to)i(enroll)g(unless)g(they)h (w)o(ere)g(spa)o(wned)f(b)o(y)g(PVM.)291 2330 y(By)19 b(default,)g(p)o(vm)p 600 2330 13 2 v 13 w(spa)o(wn\(\))g(starts)h (tasks)f(on)g(the)g(\(compute\))g(no)q(des.)33 b(T)m(o)19 b(spa)o(wn)f(m)o(ultiple)249 2384 y(copies)12 b(of)e(the)i(same)e (executable,)j(the)f(programmer)c(should)j(call)g(p)o(vm)p 1383 2384 V 13 w(spa)o(wn\(\))h(once)f(and)g(sp)q(ecify)249 2438 y(the)k(n)o(um)o(b)q(er)e(of)g(copies.)p eop %%Page: 143 162 143 161 bop 249 251 a Fu(Adv)n(anced)14 b(T)m(opics)1252 b(143)291 507 y FA(On)19 b(some)g(mac)o(hines)g(\(e.g.,)h(iPSC/860\),)f (only)g(one)h(pro)q(cess)h(is)e(allo)o(w)o(ed)g(on)g(eac)o(h)h(no)q (de,)h(so)249 561 y(the)16 b(total)f(n)o(um)o(b)q(er)g(of)g(PVM)h (tasks)g(on)f(these)i(mac)o(hines)e(cannot)h(exceed)h(the)f(n)o(um)o(b) q(er)f(of)g(no)q(des)249 615 y(a)o(v)n(ailable.)291 669 y(Sev)o(eral)e(functions)g(serv)o(e)i(as)e(the)h(m)o(ultipro)q(cessor)f (\\in)o(terface")g(for)g(PVM.)g(They)h(are)f(called)g(b)o(y)249 723 y(p)o(vmd)e(to)i(spa)o(wn)g(new)h(tasks)f(and)g(to)g(comm)o (unicate)e(with)h(them.)17 b(The)d(implemen)o(tati)o(on)c(of)j(these) 249 777 y(functions)f(is)g(system)g(dep)q(enden)o(t;)i(the)e(source)i (co)q(de)f(is)e(k)o(ept)i(in)e(the)i Fs(src/PVM)p 1505 777 14 2 v 14 w(ARCH/pvmdmimd.c)249 831 y FA(\(message)19 b(passing\))h(or)f Fs(src/PVM)p 811 831 V 14 w(ARCH/pvmdshmem.c)d FA(\(shared)21 b(memory\).)32 b(W)m(e)19 b(giv)o(e)g(a)g(brief)249 885 y(description)13 b(of)f(eac)o(h)h(of)f(these)h(functions)g(b)q(elo) o(w.)k(Note)c(that)f(p)o(vmdmim)o(d.)o(c)e(can)j(b)q(e)g(found)f(in)f (the)249 939 y(sub)q(directory)16 b(PVM)p 589 939 13 2 v 16 w(AR)o(CH)e(b)q(ecause)j(MPP)e(platforms)e(are)i(v)o(ery)g (di\013eren)o(t)h(from)d(one)i(another,)249 993 y(ev)o(en)g(those)f (from)e(the)j(same)e(v)o(endor.)249 1080 y Fg(void)18 b(mpp_init\(i)o(nt)e(argc,)i(char)g(**argv\);)328 1126 y(Initiali)o(zat)o(io)o(n.)e(Called)i(once)g(when)g(PVM)g(is)h (started.)e(Arguments)f(argc)i(and)g(argv)328 1171 y(are)g(passed)f (from)h(pvmd)g(main\(\).)249 1263 y(int)h(mpp_load)o(\(in)o(t)d(flags,) i(char)g(*name,)f(char)h(*argv,)g(int)g(count,)f(int)i(*tids,)e(int)h (ptid\);)328 1308 y(Create)f(partition)f(if)j(necessary)o(.)e(Load)h (executabl)o(e)e(onto)i(nodes;)g(create)f(new)328 1354 y(entries)f(in)j(task)f(table,)g(encode)f(node)h(number)f(and)i (process)e(type)h(into)g(task)g(IDs.)328 1400 y(flags:)36 b(exec)18 b(options;)328 1445 y(name:)56 b(executable)16 b(to)j(be)g(loaded;)328 1491 y(argv:)56 b(command)17 b(line)h(argument)f(for)h(executable;)328 1537 y(count:)36 b(number)18 b(of)h(tasks)e(to)i(be)g(created;)328 1582 y(tids:)56 b(array)18 b(to)h(store)f(new)g(task)g(IDs;)328 1628 y(ptid:)56 b(parent)18 b(task)g(ID.)249 1719 y(void)g(mpp_output)o (\(s)o(tru)o(ct)e(task)i(*tp,)g(struct)g(pkt)g(*pp\);)328 1765 y(Send)g(all)g(pending)f(packets)g(to)i(nodes)e(via)i(native)e (send.)h(Node)g(number)f(and)i(process)328 1811 y(type)f(are)g (extracted)e(from)i(task)g(ID.)328 1856 y(tp:)g(destinati)o(on)e(task;) 328 1902 y(pp:)i(packet.)249 1993 y(int)h(mpp_mcas)o(t\(s)o(tr)o(uct)d (pkt)i(pp,)h(int)f(*tids,)g(int)g(ntask\);)328 2039 y(Global)f(send.) 328 2085 y(pp:)96 b(packet;)328 2130 y(tids:)56 b(list)18 b(of)h(destinatio)o(n)e(task)h(IDs;)328 2176 y(ntask:)36 b(how)19 b(many.)249 2267 y(int)g(mpp_prob)o(e\(\))o(;)328 2313 y(Probe)e(for)i(pending)e(packets)f(from)j(nodes)e(\(non-block)o (ing)o(\).)f(Returns)h(1)i(if)g(packets)328 2359 y(are)f(found,)f (otherwise)f(0.)249 2450 y(void)i(mpp_input\()o(\);)328 2496 y(Receive)e(pending)h(packets)g(\(from)h(nodes\))f(via)i(native)e (receive.)p eop %%Page: 144 163 144 162 bop 249 251 a Fu(144)1356 b(Chapter)13 b(8)249 553 y Fg(void)18 b(mpp_free\(i)o(nt)e(tid\))328 599 y(Remove)h (node/proc)o(ess)o(-t)o(ype)f(from)i(active)f(list.)328 644 y(tid:)h(task)g(ID.)291 740 y FA(In)h(addition)g(to)g(these)i (functions,)g(the)f(message)g(exc)o(hange)g(routine)g(in)f(libp)o(vm,)f (mroute\(\),)249 794 y(m)o(ust)c(also)h(b)q(e)h(implemen)o(ted)d(in)i (the)h(most)e(e\016cien)o(t)i(nativ)o(e)f(message-passing)g(primitiv)o (es.)21 b(The)249 848 y(follo)o(wing)11 b(macros)i(are)i(de\014ned)g (in)e Fs(src/pvmmimd.h)p FA(:)249 935 y Fg(ASYNCRECV\()o(bu)o(f,l)o(en) o(\))328 981 y(Non-bloc)o(kin)o(g)j(receive.)h(Returns)g(immediate)o (ly)f(with)i(a)i(message)d(handle.)328 1026 y(buf:)h(\(char)f(*\),)i (buffer)e(to)i(place)f(the)g(data;)328 1072 y(len:)g(\(int\),)f(size)h (of)h(buffer)e(in)i(bytes.)249 1163 y(ASYNCSEND\()o(ta)o(g,b)o(uf)o (,le)o(n,d)o(es)o(t,p)o(ty)o(pe\))328 1209 y(Non-bloc)o(kin)o(g)d (send.)i(Returns)f(immediatel)o(y)f(with)j(a)g(message)e(handle.)328 1254 y(tag:)h(\(int\),)f(message)g(tag;)328 1300 y(buf:)h(\(char)f (*\),)i(location)d(of)j(data;)328 1346 y(len:)f(\(int\),)f(size)h(of)h (data)f(in)h(bytes;)328 1391 y(dest:)e(\(long\),)g(address)g(of)i (destinati)o(on)d(node;)328 1437 y(ptype:)h(instance)f(number)i(of)g (destination)e(task.)249 1528 y(ASYNCWAIT\()o(mi)o(d\))328 1574 y(Blocks)h(until)g(operation)g(associate)o(d)f(with)i(mid)h(has)f (completed.)328 1620 y(mid:)g(message)e(handle)i(\(its)g(type)g(is)h (system-de)o(pen)o(de)o(nt\))o(.)249 1711 y(ASYNCDONE\()o(mi)o(d\))328 1757 y(Returns)d(1)k(if)e(operation)f(associate)o(d)f(with)i(mid)h(has) f(completed,)e(and)j(0)g(otherwise)o(.)328 1802 y(mid:)f(message)e (handle)i(\(its)g(type)g(is)h(system-de)o(pen)o(de)o(nt\))o(.)249 1894 y(MSGSIZE\(mi)o(d\))328 1939 y(Returns)d(size)i(of)h(message)e (most)h(recently)f(arrived.)328 1985 y(mid:)h(message)e(handle)i(\(its) g(type)g(is)h(system-de)o(pen)o(de)o(nt\))o(.)249 2076 y(MSGSENDER\()o(mi)o(d\))328 2122 y(Returns)d(node)i(number)g(of)h(the) f(sender)f(of)i(most)f(recently)f(received)f(message.)328 2168 y(mid:)i(message)e(handle)i(\(its)g(type)g(is)h(system-de)o(pen)o (de)o(nt\))o(.)249 2259 y(PVMCRECV\(t)o(ag)o(,bu)o(f,)o(len)o(\))328 2305 y(Blocks)e(until)g(message)g(has)i(been)f(received)e(into)j (buffer.)328 2350 y(tag:)f(\(int\),)f(expected)f(message)h(tag;)328 2396 y(buf:)h(\(char)f(*\),)i(buffer)e(to)i(place)f(the)g(data;)328 2442 y(len:)g(\(int\),)f(size)h(of)h(buffer)e(in)i(bytes;)p eop %%Page: 145 164 145 163 bop 249 251 a Fu(Adv)n(anced)14 b(T)m(opics)1252 b(145)249 507 y Fg(PVMCSEND\(t)o(ag)o(,bu)o(f,)o(len)o(,de)o(st)o(,pt)o (yp)o(e\))328 553 y(Blocks)17 b(until)g(send)i(operatio)o(n)e(is)i (complete)d(and)j(buffer)e(can)h(be)h(reused.)328 599 y(Non-bloc)o(kin)o(g)d(send.)i(Returns)f(immediatel)o(y)f(with)j(a)g (message)e(handle.)328 644 y(tag:)h(\(int\),)f(message)g(tag;)328 690 y(buf:)h(\(char)f(*\),)i(location)d(of)j(data;)328 736 y(len:)f(\(int\),)f(size)h(of)h(data)f(in)h(bytes;)328 781 y(dest:)e(\(long\),)g(address)g(of)i(destinati)o(on)d(node;)328 827 y(ptype:)h(instance)f(number)i(of)g(destination)e(task.)291 922 y FA(These)g(functions)f(are)h(used)g(b)o(y)f(mroute\(\))f(on)h (MPP)h(systems.)22 b(The)16 b(source)g(co)q(de)g(for)f(mroute)249 976 y(for)f(m)o(ultipro)q(cessors)f(is)h(in)g Fs(src/lpvmmimd.c)d FA(or)i Fs(src/lpvmshmem.c)e FA(dep)q(ending)k(on)e(the)i(class.)291 1022 y(F)m(or)e(shared-memory)f(implemen)o(tations,)f(the)j(follo)o (wing)d(macros)i(are)i(de\014ned)g(in)e(the)h(\014le)249 1068 y Fs(src/pvmshmem.h)p FA(:)249 1147 y Fg(PAGEINITLO)o(CK)o(\(lp)o (\))328 1192 y(Initiali)o(ze)i(the)j(lock)f(pointed)f(to)i(by)f(lp.)249 1284 y(PAGELOCK\(l)o(p\))328 1329 y(Locks)f(the)i(lock)f(pointed)f(to)h (by)h(lp.)249 1421 y(PAGEUNLOCK)o(\(l)o(p\))328 1466 y(Unlocks)d(the)j(lock)f(pointed)f(to)i(by)g(lp.)291 1553 y FA(In)13 b(addition,)g(the)h(\014le)g Fs(pvmshmem.c)e FA(con)o(tains)i(routines)g(used)h(b)o(y)f(b)q(oth)g(p)o(vmd)e(and)i (libp)o(vm.)p eop %%Page: 146 165 146 164 bop eop %%Page: 147 166 147 165 bop 249 325 a Fp(9)25 b FD(T)l(roublesho)q(oting)249 561 y FA(This)17 b(c)o(hapter)h(attempts)f(to)g(answ)o(er)h(some)e(of)g (the)i(most)e(common)e(questions)k(encoun)o(tered)h(b)o(y)249 615 y(users)f(when)f(installing)e(PVM)i(and)f(running)g(PVM)h (programs.)25 b(It)16 b(also)g(co)o(v)o(ers)h(debugging)f(the)249 669 y(system)c(itself,)g(whic)o(h)g(is)g(sometimes)f(necessary)j(when)f (doing)e(new)i(p)q(orts)g(or)f(trying)g(to)g(determine)249 723 y(whether)h(an)f(application)e(or)i(PVM)g(is)g(at)f(fault.)17 b(The)12 b(material)e(here)j(is)e(mainly)e(tak)o(en)j(from)e(other)249 777 y(sections)16 b(of)e(the)h(b)q(o)q(ok,)f(and)g(rearranged)i(to)e (mak)o(e)f(answ)o(ers)j(easier)f(to)g(\014nd.)20 b(As)15 b(alw)o(a)o(ys,)e(R)m(TFM)249 831 y(pages)i(\014rst.)k(Prin)o(ted)c (material)d(alw)o(a)o(ys)h(lags)g(b)q(ehind)i(realit)o(y)m(,)d(while)i (the)h(online)e(do)q(cumen)o(tation)249 885 y(is)k(k)o(ept)g (up-to-date)h(with)e(eac)o(h)i(release.)29 b(The)17 b(newsgroup)h FB(c)n(omp.p)n(ar)n(al)r(lel.pvm)e FA(is)h(a)o(v)n(ailable)e(to)249 939 y(p)q(ost)f(questions)h(and)f(discussions.)291 993 y(If)d(y)o(ou)h(\014nd)g(a)f(problem)g(with)h(PVM,)g(please)g(tell)g (us)g(ab)q(out)g(it.)17 b(A)12 b(bug)g(rep)q(ort)h(form)d(is)i (included)249 1047 y(with)19 b(the)i(distribution)e(in)g Fs($PVM)p 804 1047 14 2 v 15 w(ROOT/doc/bugrepor)o(t)p FA(.)33 b(Please)20 b(use)h(this)e(form)f(or)i(include)249 1101 y(equiv)n(alen)o(t)13 b(information.)291 1155 y(Some)8 b(of)h(the)h(information)d(in)i(this)g(c)o(hapter)i(applies)e(only)g (to)g(the)h(generic)g(Unix)g(implem)o(en)o(tation)249 1209 y(of)16 b(PVM,)g(or)g(describ)q(es)i(features)g(more)d(v)o (olatile)f(than)j(the)f(standard)h(do)q(cumen)o(ted)f(ones.)26 b(It)16 b(is)249 1263 y(presen)o(ted)g(here)f(to)f(aid)f(with)h (debugging,)e(and)i(tagged)g(with)f(a)h Ft(|)f FA(to)h(w)o(arn)g(y)o (ou)f(of)g(its)h(nature.)291 1317 y(Examples)c(of)h(shell)g(scripts)i (are)f(for)f(either)h(C-shell)g(\()p Fs(csh,)21 b(tcsh)p FA(\))10 b(or)i(Bourne)g(shell)g(\()p Fs(sh,)21 b(ksh)p FA(\).)249 1371 y(If)15 b(y)o(ou)f(use)i(some)f(other)g(shell,)g(y)o (ou)g(ma)o(y)e(need)j(to)f(mo)q(dify)e(them)h(somewhat,)g(or)h(use)h Fs(csh)f FA(while)249 1425 y(troublesho)q(oting.)249 1545 y FD(9.1)52 b(Getting)19 b(PVM)d(Installed)249 1653 y FA(Y)m(ou)g(can)i(get)f(a)g(cop)o(y)g(of)f(PVM)h(for)g(y)o(our)g(o)o (wn)f(use)i(or)f(share)h(an)f(already-installed)e(cop)o(y)i(with)249 1707 y(other)e(users.)k(The)14 b(installation)e(pro)q(cess)k(for)e (either)g(case)h(more)e(or)h(less)h(the)f(same.)249 1790 y Fr(9.1.1)48 b(Set)15 b(PVM)p 595 1790 15 2 v 17 w(R)o(OOT)249 1873 y FA(Mak)o(e)g(certain)g(y)o(ou)g(ha)o(v)o(e)f(en)o(vironmen)o(t)g (v)n(ariable)g Fs(PVM)p 1143 1873 14 2 v 15 w(ROOT)g FA(set)h(\(and)g(exp)q(orted,)h(if)e(applicable\))249 1927 y(to)e(directory)h(where)h(PVM)f(is)f(installed)g(b)q(efore)h(y)o (ou)f(do)g(an)o(ything)f(else.)18 b(This)13 b(directory)g(is)f(where) 249 1981 y(the)i(system)e(executables)j(and)e(libraries)f(reside.)19 b(Y)m(our)13 b(application)e(executables)k(go)d(in)h(a)f(priv)n(ate)249 2035 y(directory)m(,)18 b(b)o(y)e(default)h Fs($HOME/pvm3/bin/$)o(PVM)p 1060 2035 V 13 w(ARCH)p FA(.)e(If)i(PVM)g(is)g(already)f(installed)h (at)f(y)o(our)249 2089 y(site)g(y)o(ou)f(can)h(share)h(it)e(b)o(y)g (setting)h Fs(PVM)p 905 2089 V 15 w(ROOT)f FA(to)h(that)f(path,)h(for)f (example)g Fs(/usr/local/pvm3)p FA(.)249 2143 y(If)f(y)o(ou)f(ha)o(v)o (e)h(y)o(our)f(o)o(wn)h(cop)o(y)m(,)f(y)o(ou)g(could)h(install)f(it)g (in)h Fs($HOME/pvm3)p FA(.)291 2197 y(If)f(y)o(ou)g(normally)f(use)i Fs(csh)p FA(,)f(add)h(a)g(line)f(lik)o(e)g(this)h(to)g(y)o(our)f Fs(.cshrc)g FA(\014le:)766 2284 y Fs(setenv)20 b(PVM)p 987 2284 V 15 w(ROOT)h($HOME/pvm3)249 2371 y FA(If)14 b(y)o(ou)f(normally)e(use)k Fs(sh)p FA(,)e(add)h(these)h(lines)f(to)f (y)o(our)h Fs(.profile)p FA(:)249 2458 y Fs(PVM)p 318 2458 V 15 w(ROOT=$HOME/pvm3)d(PVM)p 740 2458 V 15 w(DPATH=$HOME/pvm3/)o (lib/p)o(vmd)f(export)21 b(PVM)p 1532 2458 V 15 w(ROOT)g(PVM)p 1722 2458 V 15 w(DPATH)p eop %%Page: 148 167 148 166 bop 249 251 a Fu(148)1356 b(Chapter)13 b(9)249 507 y FA(Mak)o(e)h(sure)h(these)g(are)g(set)f(in)g(y)o(our)f(curren)o (t)j(session)f(to)q(o.)291 561 y(Older)e(v)o(ersions)h(of)e(PVM)h (assumed)g(an)g(installation)e(path)i(of)f Fs($HOME/pvm3)p FA(.)k(V)m(ersions)d(3.3)f(and)249 615 y(later)18 b(require)h(that)f (the)h Fs(PVM)p 733 615 14 2 v 15 w(ROOT)e FA(v)n(ariable)g(alw)o(a)o (ys)g(b)q(e)i(set.)31 b(Note:)c(F)m(or)18 b(compatibili)o(t)o(y)d(with) 249 669 y(older)d(v)o(ersions)h(of)f(PVM)h(and)f(some)f(command)f (shells)i(that)h(don't)f(execute)i(a)e(startup)h(\014le,)f(new)o(er)249 723 y(v)o(ersions)i(guess)h Fs($HOME/pvm3)d FA(if)h(it's)h(not)f(set,)i (but)f(y)o(ou)f(shouldn't)h(dep)q(end)h(on)e(that.)249 806 y Fr(9.1.2)48 b(On-Line)14 b(Man)o(ual)g(P)o(ages)249 889 y FA(On-line)f(man)o(ual)e(pages)j(compatible)e(with)h(most)g(Unix) g(mac)o(hines)f(are)i(shipp)q(ed)g(with)g(the)g(source)249 943 y(distribution.)j(These)e(reside)g(in)e Fs($PVM)p 868 943 V 15 w(ROOT/man)f FA(and)h(can)h(b)q(e)g(copied)g(to)g(some)e (other)i(place)g(\(for)249 997 y(example)d Fs(/usr/local/man)e FA(or)j(used)h(in-place.)k(If)11 b(the)i Fs(man)e FA(program)g(on)h(y)o (our)f(mac)o(hine)g(uses)i(the)249 1051 y Fs(MANPATH)h FA(en)o(vironmen)o(t)h(v)n(ariable,)f(try)i(adding)e(something)h(lik)o (e)f(the)j(follo)o(wing)12 b(near)k(the)h(end)f(of)249 1105 y(y)o(our)e Fs(.cshrc)e FA(or)i Fs(.login)f FA(\014le:)336 1192 y Fs(if)22 b(\(!)f($?MANPATH\))f(setenv)g(MANPATH)h (/usr/man:/usr/lo)o(cal/)o(man)336 1246 y(setenv)g(MANPATH)f (${MANPATH}:$PVM_RO)o(OT/ma)o(n)291 1333 y FA(Then)13 b(y)o(ou)f(should)g(b)q(e)i(able)e(to)g(read)i(b)q(oth)e(normal)f (system)h(man)f(pages)i(and)g(PVM)g(man)e(pages)249 1387 y(b)o(y)j(simply)e(t)o(yping)h Fs(man)21 b FB(subje)n(ct)p FA(.)249 1470 y Fr(9.1.3)48 b(Buildin)o(g)13 b(the)i(Release)249 1553 y FA(The)f(follo)o(wing)e(commands)f(do)o(wnload,)h(unpac)o(k,)i (build)f(and)h(install)e(a)i(release:)p 291 1627 1324 2 v 315 1659 a Fu(\(start)f(in)h(directory)h(just)e(ab)q(o)o(v)o(e)g (PVM)g(ro)q(ot,)g(for)g(example)h Fg($HOME)d Fu(or)i Fg(/usr/local)o Fu(\))315 1705 y Fg(\045)20 b(ftp)e(netlib2.cs)o(.ut)o (k.)o(edu)315 1751 y(Name:)38 b(anonymous)315 1796 y(Password:)e Fd(your)13 b(id,)g(user@host.domain)315 1842 y Fg(ftp>)19 b(cd)f(pvm3)315 1888 y(ftp>)h(bin)315 1933 y(ftp>)g(get)f(pvm3.3.tar)o (.z)o(.uu)29 b Fu(\(or)13 b(the)g(most)g(recen)o(t)g(v)o(ersion\))315 1979 y Fg(ftp>)19 b(quit)315 2024 y(\045)h(uudecode)c(pvm3.3.tar)o(.z.) o(uu)315 2070 y(\045)k(zcat)e(pvm3.3.ta)o(r.Z)e(|)j(tar)f(xf)h(-)315 2116 y(\045)h(cd)f(pvm3)315 2161 y(\045)h(setenv)d(PVM)p 554 2161 12 2 v 13 w(ROOT)h($cwd)315 2207 y(\045)i(make)p 291 2223 1324 2 v 249 2310 a Fr(9.1.4)48 b(Errors)15 b(During)e(Build)249 2393 y FA(The)h(compiler)e(ma)o(y)g(prin)o(t)h(a)h (few)f(w)o(arning)g(messages;)g(w)o(e)h(suggest)h(y)o(ou)e(ignore)g (these)i(unless)f(the)249 2447 y(build)c(do)q(esn't)i(complete)e(or)h (un)o(til)f(y)o(ou)h(ha)o(v)o(e)f(some)g(other)i(reason)g(to)e(think)h (there)h(is)f(a)g(problem.)k(If)p eop %%Page: 149 168 149 167 bop 249 251 a Fu(T)m(roublesho)q(oting)1268 b(149)249 507 y FA(y)o(ou)11 b(can't)g(build)f(the)i(unmo)q(di\014ed)e (distribution)g(\\out)h(of)f(the)i(b)q(o)o(x")f(on)f(a)h(supp)q(orted)i (arc)o(hitecture,)249 561 y(let)h(us)g(kno)o(w.)249 644 y Fr(9.1.5)48 b(Compatible)13 b(V)l(ersions)249 727 y FA(The)f(proto)q(cols)h(used)g(in)e(building)g(PVM)h(are)g(ev)o (olving,)f(with)h(the)g(result)h(that)f(new)o(er)h(releases)h(are)249 781 y(not)e(compatible)d(with)j(older)f(ones.)18 b(Compatibilit)o(y)8 b(is)j(determined)h(b)o(y)f(the)i(p)o(vmd-task)d(and)h(task-)249 835 y(task)17 b(proto)q(col)f(revision)g(n)o(um)o(b)q(ers.)26 b(These)18 b(are)e(compared)g(when)h(t)o(w)o(o)f(PVM)h(en)o(tities)g (connect;)249 889 y(they)f(will)e(refuse)i(to)f(in)o(terop)q(erate)i (if)d(the)i(n)o(um)o(b)q(ers)f(don't)g(matc)o(h.)21 b(The)16 b(proto)q(col)f(n)o(um)o(b)q(ers)g(are)249 943 y(de\014ned)g(in)e Fs(src/ddpro.h)f FA(and)i Fs(src/tdpro.h)d FA(\()p Fs(DDPROTOCOL)p FA(,)h Fs(TDPROTOCOL)p FA(\).)291 997 y(As)j(a)f(general)i(rule,)e(PVM) i(releases)g(with)f(the)g(same)f(second)i(digit)e(in)g(their)h(v)o (ersion)g(n)o(um)o(b)q(ers)249 1051 y(\(for)h(example)g(3.2.0)e(and)j (3.2.6\))e(will)g(in)o(terop)q(erate.)27 b(Changes)17 b(that)f(result)i(in)e(incompatibili)o(t)o(y)249 1105 y(are)e(held)g(un)o(til)f(a)h(ma)r(jor)e(v)o(ersion)i(c)o(hange)g (\(for)g(example,)e(from)g(3.2)h(to)h(3.3\).)249 1225 y FD(9.2)52 b(Getting)19 b(PVM)d(Running)249 1333 y FA(T)m(o)10 b(get)g(PVM)h(running,)g(y)o(ou)f(m)o(ust)f(start)i(either)g(a)f(p)o (vmd)f(or)i(the)g(PVM)f(console)h(b)o(y)f(hand.)17 b(The)11 b(ex-)249 1387 y(ecutables)g(are)g(named)e Fs(pvmd3)g FA(and)h Fs(pvm)p FA(,)f(resp)q(ectiv)o(ely)m(,)j(and)e(reside)h(in)e (directory)i Fs($PVM)p 1635 1387 14 2 v 15 w(ROOT/lib/)249 1441 y($PVM)p 340 1441 V 15 w(ARCH)p FA(.)j(W)m(e)h(suggest)i(using)e (the)h Fs(pvmd)f FA(or)g Fs(pvm)g FA(script)i(in)e Fs($PVM)p 1365 1441 V 15 w(ROOT/lib)e FA(instead,)j(as)g(this)249 1495 y(simpli\014es)c(setting)i(y)o(our)f(shell)g(path.)18 b(These)d(scripts)f(determine)g(the)g(host)f(arc)o(hitecture)i(and)f (run)249 1549 y(the)h(correct)g(executable,)g(passing)f(on)f(their)h (command)e(line)h(argumen)o(ts.)291 1603 y(Problems)i(when)i(starting)f (PVM)h(can)f(b)q(e)h(caused)g(b)o(y)f(system)g(or)g(net)o(w)o(ork)h (trouble,)f(running)249 1657 y(out)e(of)f(resources)j(\(suc)o(h)f(as)f (disk)g(space\),)g(incorrect)i(installation)c(or)i(a)f(bug)h(in)f(the)i (PVM)f(co)q(de.)249 1740 y Fr(9.2.1)48 b(Pvmd)15 b(Log)g(File)249 1823 y FA(The)f(p)o(vmd)f(writes)i(errors)g(on)f(b)q(oth)g(its)g (standard)g(error)h(stream)e(\(only)h(un)o(til)f(it)g(is)h(fully)f (started\))249 1877 y(and)g(a)g(log)g(\014le,)g(named)f Fs(/tmp/pvml.)p FB(uid)p FA(.)k FB(uid)d FA(is)h(y)o(our)f(n)o(umeric)f (user)j(id)e(\(generally)g(the)h(n)o(um)o(b)q(er)249 1931 y(in)19 b(the)g(third)g(colon-separated)h(\014eld)f(of)f(y)o(our)h FB(p)n(asswd)g FA(en)o(try\).)34 b(If)18 b(PVM)i(w)o(as)f(built)f(with) g(the)249 1985 y Fs(SHAREDTMP)11 b FA(option)h(\(used)i(when)f(a)f (cluster)i(of)e(mac)o(hines)g(shares)i(a)f Fs(/tmp)f FA(directory\),)h(the)g(log)f(\014le)249 2039 y(will)g(instead)j(b)q(e) f(named)f Fs(/tmp/pvml.)p FB(uid)p Fs(.)p FB(hostname)p FA(.)291 2093 y(If)18 b(y)o(ou)g(ha)o(v)o(e)h(trouble)f(getting)h(PVM)g (started,)h(alw)o(a)o(ys)e(c)o(hec)o(k)i(the)f(log)f(\014le)g(for)h (hin)o(ts)f(ab)q(out)249 2147 y(what)13 b(w)o(en)o(t)h(wrong.)j(If)c (more)g(than)g(one)g(host)h(is)f(in)o(v)o(olv)o(ed,)f(c)o(hec)o(k)i (the)g(log)e(\014le)h(on)h(eac)o(h)f(host.)18 b(F)m(or)249 2201 y(example,)11 b(when)j(adding)e(a)h(new)g(host)g(to)g(a)g(virtual) f(mac)o(hine,)f(c)o(hec)o(k)j(the)g(log)e(\014les)h(on)g(the)h FB(master)249 2255 y FA(host)g(and)g(the)g(new)h(host.)291 2309 y(T)m(ry)e(the)i(follo)o(wing)c(command)g(to)j(get)g(y)o(our)g (uid:)328 2396 y Fg(\(grep)j(`whoami`)g(/etc/pass)o(wd)f(||)j(ypmatch)e (`whoami`)f(passwd\))h(\\)367 2442 y(|)i(awk)f(-F:)h('{print)e ($3;exit}')p eop %%Page: 150 169 150 168 bop 249 251 a Fu(150)1356 b(Chapter)13 b(9)249 507 y Fr(9.2.2)48 b(Pvmd)15 b(So)q(c)o(k)o(et)g(Address)f(File)249 590 y FA(The)e(p)o(vmd)d(publishes)j(the)f(address)i(of)d(the)i(so)q(c) o(k)o(et)g(to)f(whic)o(h)g(lo)q(cal)f(tasks)h(connect)i(in)d(a)h (\014le)g(named)249 644 y Fs(/tmp/pvmd.)p FB(uid)p FA(.)19 b FB(uid)d FA(is)e(y)o(our)h(n)o(umeric)f(user)i(id)f(\(generally)g(in) f(the)i(third)f(\014eld)g(of)f(y)o(our)h FB(p)n(asswd)249 698 y FA(en)o(try\).)22 b(If)14 b(PVM)i(w)o(as)e(built)h(with)f(the)i Fs(SHAREDTMP)d FA(option)h(\(used)i(when)f(a)g(cluster)h(of)e(mac)o (hines)249 752 y(shares)g(a)e Fs(/tmp)f FA(directory\),)j(the)f(\014le) f(will)f(b)q(e)i(named)f Fs(/tmp/pvmd.)p FB(uid)p Fs(.)p FB(hostname)p FA(.)k(See)d Ft(x)q FA(7.4.2)d(for)249 806 y(more)j(information)e(on)j(ho)o(w)f(this)h(\014le)g(is)g(used.)291 860 y(The)f(p)o(vmd)e(creates)k(the)f(so)q(c)o(k)o(et)f(address)i (\014le)e(while)f(starting)h(up,)g(and)f(remo)o(v)o(es)h(it)f(while)h (sh)o(ut-)249 914 y(ting)g(do)o(wn.)k(If)c(while)g(starting)g(up,)g(it) f(\014nds)i(the)g(\014le)f(already)g(exists,)g(it)g(prin)o(ts)g(an)g (error)h(message)249 968 y(and)19 b(exits.)34 b(If)19 b(the)h(p)o(vmd)d(can't)i(create)i(the)f(\014le)f(b)q(ecause)h(the)g(p) q(ermissions)f(of)f Fs(/tmp)h FA(are)g(set)249 1022 y(incorrectly)c(or) f(the)g(\014lesystem)g(is)g(full,)e(it)h(w)o(on't)g(b)q(e)i(able)e(to)h (start)h(up.)291 1076 y(If)e(the)h(p)o(vmd)f(is)g(killed)g(with)h(un)g (uncatc)o(hable)g(signal)f(or)g(other)i(catastrophic)f(ev)o(en)o(t)h (suc)o(h)f(as)g(a)249 1130 y(\(Unix\))f(mac)o(hine)e(crash,)j(y)o(ou)e (m)o(ust)g(remo)o(v)o(e)g(the)h(so)q(c)o(k)o(et)h(address)g(\014le)f(b) q(efore)g(another)g(p)o(vmd)f(will)249 1184 y(start)j(on)e(that)h (host.)291 1238 y(Note)h(that)f(if)g(the)h(p)o(vmd)f(is)g(compiled)f (with)h(option)g Fs(OVERLOADHOST)p FA(,)e(it)i(will)g(start)h(up)g(ev)o (en)g(if)249 1292 y(the)f(address)g(\014le)f(already)f(exists)i (\(creating)g(it)e(if)g(it)h(do)q(esn't\).)18 b(It)13 b(do)q(esn't)h(consider)g(the)f(existence)249 1346 y(of)e(the)i (address)g(\014le)e(an)h(error.)18 b(This)12 b(allo)o(ws)e(disjoin)o(t) h(virtual)g(mac)o(hines)f(o)o(wned)i(b)o(y)g(the)g(same)f(user)249 1400 y(to)16 b(use)i(o)o(v)o(erlapping)d(sets)j(of)e(hosts.)26 b(T)m(asks)16 b(not)h(spa)o(wned)g(b)o(y)f(PVM)h(can)g(only)e(connect)j (to)e(the)249 1454 y(\014rst)f(p)o(vmd)e(running)i(on)f(an)g(o)o(v)o (erloaded)g(host,)h(ho)o(w)o(ev)o(er,)f(unless)i(they)f(can)g(someho)o (w)e(guess)i(the)249 1508 y(correct)h(so)q(c)o(k)o(et)e(address)i(of)d (one)h(of)f(the)i(other)f(p)o(vmds.)249 1591 y Fr(9.2.3)48 b(Starting)13 b(PVM)j(from)f(the)g(Console)249 1674 y FA(PVM)e(is)g(normally)d(started)k(b)o(y)e(in)o(v)o(oking)f(the)i (console)h(program,)c(whic)o(h)j(starts)h(a)e(p)o(vmd)f(if)h(one)h(is) 249 1728 y(not)h(already)f(running)h(and)g(connects)h(to)f(it.)k(The)c (syn)o(tax)g(for)f(starting)h(a)g(PVM)g(console)g(is:)627 1869 y Fs(pvm)21 b([-d)p FB(debugmask)p Fs(])h([-n)p FB(hostname)p Fs(])g([)p FB(host\014le)p Fs(])291 1956 y FA(If)13 b(the)i(console)g(can't)f(start)h(the)g(p)o(vmd)d(for)i (some)g(reason,)g(y)o(ou)g(ma)o(y)e(see)k(one)e(of)g(the)h(follo)o (wing)249 2010 y(error)g(messages.)j(Chec)o(k)c(the)g(p)o(vmd)e(log)h (\014le)g(for)h(error)g(messages.)k(The)c(most)f(common)d(ones)15 b(are)249 2064 y(describ)q(ed)h(b)q(elo)o(w.)291 2118 y Fs(Can't)k(start)h(pvmd)12 b FA({)h(This)g(message)g(means)g(that)g (the)h(console)f(either)h(can't)f(\014nd)h(the)g(p)o(vmd)249 2172 y(executable)19 b(or)f(the)g(p)o(vmd)f(is)g(ha)o(ving)g(trouble)h (starting)g(up.)30 b(If)17 b(the)h(p)o(vmd)f(complains)f(that)h(it)249 2226 y(can't)f(bind)g(a)g(so)q(c)o(k)o(et,)h(p)q(erhaps)g(the)f(host)h (name)e(set)i(for)e(the)i(mac)o(hine)e(do)q(es)i(not)f(resolv)o(e)g(to) g(an)249 2280 y(IP)f(address)i(of)d(one)i(of)e(its)i(in)o(terfaces,)g (or)f(that)g(in)o(terface)h(is)f(do)o(wn.)21 b(The)16 b(console/p)o(vmd)e(option)249 2334 y Fs(-n)p FB(name)g FA(can)g(b)q(e)h(used)f(to)g(c)o(hange)g(the)h(default.)291 2388 y Fs(Can't)20 b(contact)h(local)f(daemon)9 b FA({)h(If)g(a)g (previously)g(running)f(p)o(vmd)g(crashed,)j(lea)o(ving)d(b)q(ehind)249 2442 y(its)20 b FB(so)n(cket)g(addr)n(ess)f FA(\014le,)i(the)f(console) g(ma)o(y)e(prin)o(t)h(this)h(message.)34 b(The)20 b(p)o(vmd)e(will)h (log)f(error)249 2496 y(message)c Fs(pvmd)21 b(already)f(running?)p FA(.)c(Find)e(and)g(delete)h(the)f(address)h(\014le.)p eop %%Page: 151 170 151 169 bop 249 251 a Fu(T)m(roublesho)q(oting)1268 b(151)291 507 y Fs(Version)20 b(mismatch)10 b FA({)i(The)h(console)f(\(libp)o (vm\))e(and)i(p)o(vmd)e(proto)q(col)i(revision)g(n)o(um)o(b)q(ers)g (don't)249 561 y(matc)o(h.)k(The)e(proto)q(col)e(has)h(a)f(revision)h (n)o(um)o(b)q(er)f(so)g(that)h(incompatible)e(v)o(ersions)i(w)o(on't)f (attempt)249 615 y(to)k(in)o(terop)q(erate.)25 b(Note)17 b(that)f(ha)o(ving)f(di\013eren)o(t)i(proto)q(col)e(revisions)i(do)q (esn't)f(necessarily)h(cause)249 669 y(this)d(message)g(to)f(b)q(e)i (prin)o(ted;)f(instead)g(the)g(connecting)h(side)f(ma)o(y)e(simply)g (hang.)249 752 y Fr(9.2.4)48 b(Starting)13 b(the)i(Pvmd)g(b)o(y)g(Hand) 249 835 y FA(It)i(is)f(necessary)j(to)d(start)h(the)h(master)e(p)o(vmd) f(b)o(y)h(hand)h(if)e(y)o(ou)i(will)e(use)i(the)g FB(so=pw)g FA(or)f FB(so=ms)249 889 y FA(options)g(in)g(the)h(host)f(\014le)g(or)h (when)f(adding)g(hosts.)26 b(These)17 b(options)f(require)h(direct)g (in)o(teraction)249 943 y(with)d(the)h(p)o(vmd)e(when)i(adding)f(a)g (host.)20 b(If)14 b(the)h(p)o(vmd)e(is)h(started)i(b)o(y)e(the)h (console,)g(or)f(otherwise)249 997 y(bac)o(kgrounded,)g(it)f(will)g (not)h(b)q(e)g(able)g(to)g(read)g(passw)o(ords)h(from)d(a)h(TTY.)291 1051 y(The)h(syn)o(tax)g(to)f(start)i(the)f(master)g(p)o(vmd)e(b)o(y)i (hand)g(is:)467 1188 y Fs($PVM)p 558 1188 14 2 v 15 w(ROOT/lib/pvmd)19 b([-d)p FB(debugmask)p Fs(])j([-n)p FB(hostname)p Fs(])g([)p FB(host\014le)p Fs(])291 1271 y FA(If)c(y)o(ou)h(start)h(a)f(PVM)h (console)f(or)h(application,)e(use)i(another)g(windo)o(w.)33 b(When)20 b(the)g(p)o(vmd)249 1325 y(\014nishes)15 b(starting)f(up,)f (it)h(prin)o(ts)g(out)g(a)f(line)h(lik)o(e)f(either:)18 b Fs(80a95ee4:0a9a)12 b FA(or)h Fs(/tmp/aaa026175)p FA(.)249 1379 y(If)e(it)g(can't)g(start)h(up,)g(y)o(ou)f(ma)o(y)e(not)i(see)i (an)e(error)h(message,)g(dep)q(ending)g(on)f(whether)h(the)g(problem) 249 1433 y(o)q(ccurs)18 b(b)q(efore)f(or)f(after)g(the)h(p)o(vmd)e (stops)i(logging)d(to)i(its)g(standard)h(error)g(output.)26 b(Chec)o(k)16 b(the)249 1487 y(p)o(vmd)c(log)h(\014le)h(for)g(a)f (complete)h(record.)249 1570 y Fr(9.2.5)48 b(Adding)14 b(Hosts)h(to)g(the)g(Virtual)f(Mac)o(hine)249 1653 y FA(This)j(section)g(also)f(applies)h(to)f(hosts)i(started)f(via)f(a)h (host)g(\014le,)g(b)q(ecause)h(the)g(same)d(mec)o(hanism)249 1707 y(is)g(used)h(in)f(b)q(oth)g(cases.)24 b(The)16 b(master)e(p)o(vmd)g(starts)i(up,)f(reads)h(the)g(host)g(\014le,)f (then)h(sends)g(itself)249 1761 y(a)e(request)j(to)d(add)h(more)e (hosts.)21 b(The)15 b(PVM)g(console)g(\(or)g(an)g(application\))e(can)i (return)h(an)e(error)249 1815 y(when)i(adding)e(hosts)i(to)f(the)g (virtual)f(mac)o(hine.)21 b(Chec)o(k)15 b(the)h(p)o(vmd)e(log)g(\014le) h(on)f(the)i(master)f(host)249 1869 y(and)f(the)g(failing)e(host)i(for) g(additional)e(clues)i(to)g(what)g(w)o(en)o(t)g(wrong.)291 1923 y Fs(No)21 b(such)g(host)12 b FA({)h(The)h(master)f(p)o(vmd)e (couldn't)i(resolv)o(e)h(the)g(the)g(host)f(name)f(\(or)h(name)g(giv)o (en)249 1977 y(in)g Fs(ip=)h FA(option\))f(to)h(an)f(IP)h(address.)20 b(Mak)o(e)14 b(sure)h(y)o(ou)e(ha)o(v)o(e)h(the)g(correct)i(host)e (name.)291 2022 y Fs(Can't)20 b(start)h(pvmd)c FA({)g(This)g(message)g (means)f(that)i(the)g(master)e(p)o(vmd)g(failed)g(to)i(start)f(the)249 2068 y(sla)o(v)o(e)c(p)o(vmd)f(pro)q(cess.)20 b(This)13 b(can)h(b)q(e)g(caused)g(b)o(y)f(incorrect)i(installation,)c(net)o(w)o (ork)j(or)f(p)q(ermission)249 2114 y(problems.)18 b(The)d(master)f(p)o (vmd)e(m)o(ust)h(b)q(e)i(able)f(to)g(resolv)o(e)h(the)g(host)f(name)f (\(get)i(its)f(IP)h(address\))249 2159 y(and)c(route)g(pac)o(k)o(ets)g (to)g(it.)16 b(The)11 b(p)o(vmd)e(executable)j(and)f(shell)f(script)i (to)e(start)i(it)e(m)o(ust)f(b)q(e)j(installed)249 2205 y(in)g(the)g(correct)i(lo)q(cation.)j(Y)m(ou)11 b(m)o(ust)h(a)o(v)o (oid)e(prin)o(ting)i(an)o(ything)f(in)h(y)o(our)g Fs(.cshrc)e FA(\(or)j(equiv)n(alen)o(t\))249 2251 y(script,)k(b)q(ecause)h(it)e (will)e(confuse)j(the)g(p)o(vmd)e(comm)o(unicatio)o(n.)22 b(If)16 b(y)o(ou)g(m)o(ust)f(prin)o(t)h(something,)249 2296 y(either)f(mo)o(v)o(e)d(it)i(to)f(y)o(our)h Fs(.login)f FA(\014le)g(or)h(enclose)h(it)f(in)f(a)h(conditional:)328 2371 y Fg(if)k(\()i({)f(tty)f(-s)h(})g(&&)g($?prompt)e(\))i(then)406 2417 y(echo)f(terminal)f(type)h(is)g($TERM)406 2462 y(stty)g(erase)g ('^?')g(kill)g('^u')g(intr)g('^c')g(echo)328 2508 y(endif)p eop %%Page: 152 171 152 170 bop 249 251 a Fu(152)1356 b(Chapter)13 b(9)291 507 y FA(T)m(o)e(test)j(all)d(the)i(ab)q(o)o(v)o(e,)f(try)h(running)f (the)h(follo)o(wing)d(command)f(b)o(y)k(hand)f(on)g(the)h(master)f (host:)729 592 y Fs(rsh)21 b FB(host)h Fs($PVM)p 1002 592 14 2 v 15 w(ROOT/lib/pvmd)d(-s)249 668 y FA(where)f FB(host)g FA(is)f(the)g(name)f(of)h(the)g(sla)o(v)o(e)g(host)h(y)o(ou)e (w)o(an)o(t)h(to)g(test.)29 b(Y)m(ou)16 b(should)h(see)i(a)d(message) 249 714 y(similar)11 b(to)j(the)h(follo)o(wing)c(from)h(the)j(sla)o(v)o (e)e(p)o(vmd)f(and)i(nothing)f(else:)328 790 y Fg([pvmd)k(pid12360])f (slave_conf)o(ig:)g(bad)i(args)328 836 y([pvmd)f(pid12360])f (pvmbailout)o(\(0\))291 920 y Fs(Version)k(mismatch)11 b FA({)i(This)g(message)g(indicates)h(that)f(the)h(proto)q(col)f (revisions)g(of)g(the)h(master)249 974 y(and)i(sla)o(v)o(e)h(p)o(vmd)e (are)i(incompatible.)24 b(Y)m(ou)16 b(m)o(ust)f(install)h(the)h(same)f (\(or)h(compatible\))e(v)o(ersions)249 1028 y(ev)o(erywhere.)291 1082 y Fs(Duplicate)20 b(host)h FA({)g(This)h(message)g(means)f(that)h (PVM)g(thinks)g(there)h(is)f(another)h(p)o(vmd)249 1136 y(\(o)o(wned)d(b)o(y)g(the)g(same)f(user\))i(already)f(running)f(on)h (the)g(host.)36 b(If)20 b(y)o(ou're)f(not)h(already)f(using)249 1190 y(the)14 b(host)f(in)f(the)i(curren)o(t)g(virtual)e(mac)o(hine)g (or)h(a)g(di\013eren)o(t)h(one,)e(the)i(so)q(c)o(k)o(et)g(address)g (\014le)f(\()p Ft(x)q FA(9.2.2\))249 1244 y(m)o(ust)g(b)q(e)h(left)g(o) o(v)o(er)g(from)e(a)i(previous)g(run.)k(Find)c(and)g(delete)h(it.)249 1327 y Fr(9.2.6)48 b(PVM)16 b(Host)f(File)249 1410 y FA(A)g FB(host)h(\014le)e FA(ma)o(y)f(b)q(e)i(supplied)g(to)f(the)i(p)o (vmd)d(\(or)h(console,)h(whic)o(h)f(passes)i(it)f(to)f(the)h(p)o(vmd\)) f(as)g(a)249 1464 y(command-li)o(ne)e(parameter.)21 b(Eac)o(h)15 b(line)f(of)g(the)i(\014le)e(con)o(tains)h(a)g(host)g(name)e(follo)o(w) o(ed)g(b)o(y)i(option)249 1518 y(parameters.)20 b(Hosts)c(not)e (preceded)j(b)o(y)d('&')g(are)h(started)h(automatically)11 b(as)k(so)q(on)g(as)f(the)i(master)249 1572 y(p)o(vmd)c(is)i(ready)m(.) k(The)c(syn)o(tax:)423 1657 y Fs(*)22 b(option)f(option)f(...)249 1741 y FA(c)o(hanges)12 b(the)f(default)f(parameters)h(for)g(subsequen) o(t)h(hosts)g(\(b)q(oth)f(those)g(in)f(the)i(host)f(\014le)g(and)f (those)249 1795 y(added)i(later\).)18 b(Default)11 b(statemen)o(ts)h (are)g(not)g(cum)o(ulativ)o(e;)e(eac)o(h)i(applies)g(to)f(the)i FB(system)e FA(defaults.)249 1849 y(F)m(or)j(example,)e(after)i(the)g (follo)o(wing)e(t)o(w)o(o)h(host)h(\014le)g(en)o(tries:)423 1934 y Fs(*)22 b(dx=pvm3/lib/pvmd)423 1988 y(*)g(ep=/bin:/usr/bin:)o (pvm3/)o(bin/$)o(PVM_A)o(RCH)249 2072 y FA(only)10 b Fs(ep)g FA(is)h(c)o(hanged)g(from)d(its)j(system)g(default)f(\()p Fs(dx)g FA(is)h(reset)h(b)o(y)e(the)i(second)f(line\).)17 b(T)m(o)10 b(set)h(m)o(ultiple)249 2126 y(defaults,)i(com)o(bine)g (them)g(in)o(to)g(a)h(single)f(line.)249 2209 y Fr(9.2.7)48 b(Sh)o(uttin)o(g)13 b(Do)o(wn)249 2292 y FA(The)i(preferred)g(w)o(a)o (y)f(to)g(sh)o(ut)g(do)o(wn)g(a)g(virtual)f(mac)o(hine)g(is)h(to)f(t)o (yp)q(e)i Fs(halt)e FA(at)h(the)h(PVM)f(console,)249 2346 y(or)e(to)g(call)g(libp)o(vm)e(function)h Fs(pvm)p 788 2346 V 16 w(halt\(\))p FA(.)16 b(When)c(sh)o(utting)g(PVM)h(do)o (wn)f(from)e(the)j(console,)g(y)o(ou)249 2400 y(ma)o(y)d(see)i(an)g (error)g(message)f(suc)o(h)h(as)g FB(EOF)h(on)g(pvmd)g(so)n(ck)p FA(.)k(This)12 b(is)f(normal)f(and)h(can)h(b)q(e)g(ignored.)291 2454 y(Y)m(ou)i(can)h(instead)g(kill)e(the)i(p)o(vmd)f(pro)q(cess;)i (it)f(will)e(sh)o(ut)i(do)o(wn,)f(killing)f(an)o(y)h(lo)q(cal)g(tasks)h (with)249 2508 y Fs(SIGTERM)p FA(.)g(If)i(y)o(ou)f(kill)f(a)i(sla)o(v)o (e)f(p)o(vmd,)g(it)h(will)e(b)q(e)j(deleted)g(from)d(the)i(virtual)f (mac)o(hine.)26 b(If)17 b(y)o(ou)p eop %%Page: 153 172 153 171 bop 249 251 a Fu(T)m(roublesho)q(oting)1268 b(153)249 507 y FA(kill)13 b(the)h(master)g(p)o(vmd,)e(the)i(sla)o(v)o(es)g(will) f(all)g(exit)h(to)q(o.)k(Alw)o(a)o(ys)13 b(kill)f(the)j(p)o(vmd)d(with) i(a)g FB(c)n(atchable)249 561 y FA(signal,)j(for)f(example)g Fs(SIGTERM)p FA(.)g(If)g(y)o(ou)h(kill)f(it)g(with)h Fs(SIGKILL)p FA(,)f(it)g(w)o(on't)h(b)q(e)h(able)f(to)g(clean)g(up)249 615 y(after)d(itself,)f(and)h(y)o(ou'll)e(ha)o(v)o(e)i(to)f(do)h(that)g (b)o(y)g(hand.)249 736 y FD(9.3)52 b(Compiling)19 b(Applications)249 844 y Fr(9.3.1)48 b(Header)15 b(Files)249 927 y FA(PVM)f(applications)f (written)i(in)e(C)h(should)g(include)g(header)g(\014le)g Fs(pvm3.h)p FA(,)e(as)i(follo)o(ws:)861 1007 y Fs(#include)20 b(<pvm3.h>)249 1088 y FA(Programs)14 b(using)h(the)g(trace)h(functions) f(should)g(additionally)d(include)j Fs(pvmtev.h)p FA(,)e(and)i (resource)249 1142 y(manager)8 b(programs)g(should)h(include)h Fs(pvmsdpro.h)p FA(.)k(Y)m(ou)9 b(ma)o(y)e(need)j(to)f(sp)q(ecify)h (the)g(PVM)g(include)249 1196 y(directory)15 b(in)e(the)i(compiler)d (\015ags)i(as)g(follo)o(ws:)711 1277 y Fs(cc)22 b(...)43 b(-I$PVM)p 1021 1277 14 2 v 14 w(ROOT/include)19 b(...)291 1358 y FA(A)g(header)i(\014le)f(for)f(F)m(ortran)h(\()p Fs(fpvm3.h)p FA(\))e(is)i(also)f(supplied.)36 b(Syn)o(tax)19 b(for)h(including)e(\014les)i(in)249 1412 y(F)m(ortran)13 b(is)g(v)n(ariable;)f(the)i(header)g(\014le)f(ma)o(y)e(need)k(to)e(b)q (e)g(pasted)h(in)o(to)f(y)o(our)g(source.)19 b(A)13 b(statemen)o(t)249 1466 y(commonly)e(used)j(is:)610 1547 y Fs(INCLUDE)21 b('/usr/local/pvm)o(/incl)o(ude/f)o(pvm3.)o(h')249 1627 y Fr(9.3.2)48 b(Linking)249 1710 y FA(PVM)20 b(applications)f(written)i (in)e(C)h(m)o(ust)f(b)q(e)i(link)o(ed)e(with)h(at)g(least)g(the)h(base) f(PVM)h(library)m(,)249 1764 y FB(libpvm3)p FA(.)c(F)m(ortran)12 b(applications)f(m)o(ust)h(b)q(e)g(link)o(ed)g(with)g(b)q(oth)g FB(libfpvm3)g FA(and)g FB(libpvm3)p FA(.)17 b(Programs)249 1818 y(that)12 b(use)i(group)e(functions)g(m)o(ust)f(also)h(b)q(e)h (link)o(ed)f(with)g FB(lib)n(gpvm3)p FA(.)17 b(On)c(some)e(op)q (erating)h(systems,)249 1872 y(PVM)f(programs)e(m)o(ust)g(b)q(e)i(link) o(ed)e(with)h(still)f(other)i(libraries)f(\(for)g(the)h(so)q(c)o(k)o (et)g(or)f(XDR)f(functions\).)291 1926 y(Note)19 b(that)g(the)h(order)f (of)g(libraries)f(in)h(the)g(link)f(command)e(is)j(imp)q(ortan)o(t;)g (Unix)g(mac)o(hines)249 1980 y(generally)d(pro)q(cess)h(the)g(list)e (from)g(left)g(to)h(righ)o(t,)f(searc)o(hing)i(eac)o(h)f(library)g (once.)24 b(Y)m(ou)16 b(ma)o(y)e(also)249 2034 y(need)e(to)f(sp)q (ecify)h(the)g(PVM)f(library)g(directory)h(in)f(the)g(link)g(command.)j (A)d(correct)i(order)f(is)f(sho)o(wn)249 2088 y(b)q(elo)o(w)j(\(y)o (our)f(compiler)g(ma)o(y)f(b)q(e)i(called)g(something)f(other)h(than)g Fs(cc)f FA(or)h Fs(f77)p FA(\).)328 2167 y Fg(cc/f77)j([)i(compiler)e (flags)g(])i([)h(source)d(files)h(])h([)g(loader)e(flags)h(])465 2213 y(-L$PVM_RO)o(OT/)o(li)o(b/$)o(PV)o(M_A)o(RCH)e(-lfpvm3)h(-lgpvm3) g(-lpvm3)465 2259 y([)i(libraries)d(needed)h(by)i(PVM)g(])g([)g(other)f (libraries)e(])291 2346 y FA(The)9 b Fs(aimk)g FA(program)e(supplied)j (with)f(PVM)g(automatically)d(sets)11 b(en)o(vironmen)o(t)d(v)n (ariable)g Fs(PVM)p 1773 2346 V 15 w(ARCH)249 2400 y FA(to)16 b(the)i(PVM)f(arc)o(hitecture)h(name)d(and)i Fs(ARCHLIB)e FA(to)h(the)h(necessary)i(system)d(libraries.)26 b(Before)249 2454 y(running)12 b(aimk,)e(y)o(ou)i(m)o(ust)g(ha)o(v)o(e) g Fs(PVM)p 857 2454 V 15 w(ROOT)f FA(set)j(to)e(the)h(path)f(where)i (PVM)f(is)f(installed.)17 b(Y)m(ou)12 b(can)249 2508 y(use)j(these)g(v)n(ariables)e(to)h(write)g(a)g(p)q(ortable,)f(shared)i (mak)o(e\014le)e(\()p Fs(Makefile.aimk)p FA(\).)p eop %%Page: 154 173 154 172 bop 249 251 a Fu(154)1356 b(Chapter)13 b(9)249 507 y FD(9.4)52 b(Running)19 b(Applications)249 615 y Fr(9.4.1)48 b(Spa)o(wn)15 b(Can't)h(Find)e(Executables)249 698 y Fs(No)21 b(such)g(file)13 b FA({)h(This)g(error)h(co)q(de)f(is)g (returned)i(instead)e(of)f(a)h(task)g(id)f(when)i(the)f(p)o(vmd)e (fails)h(to)249 752 y(\014nd)h(a)g(program)e(executable)j(during)f(spa) o(wn.)291 806 y(Remem)o(b)q(er)i(that)h(task)h(placemen)o(t)f (decisions)h(are)g(made)f(b)q(efore)h(c)o(hec)o(king)g(the)g(existence) i(of)249 860 y(executables.)f(If)13 b(an)f(executable)i(is)f(not)g (installed)f(on)h(the)g(selected)i(host,)e(PVM)g(returns)h(an)f(error) 249 914 y(instead)j(of)f(trying)h(another)g(one.)24 b(F)m(or)16 b(example,)e(if)h(y)o(ou)h(ha)o(v)o(e)f(installed)g FB(mypr)n(o)n(g)h FA(on)g(4)f(hosts)i(of)249 968 y(a)c(7)h(host)g(virtual)e(mac)o(hine,)g (and)i(spa)o(wn)f(7)h(instances)g(of)f FB(mypr)n(o)n(g)h FA(with)f(default)g(placemen)o(t,)g(only)249 1022 y(4)i(will)g (succeed.)25 b(Mak)o(e)16 b(sure)h(executables)g(are)f(built)f(for)h (eac)o(h)g(arc)o(hitecture)h(y)o(ou're)f(using,)f(and)249 1076 y(installed)c(in)f(the)i(correct)h(directory)m(.)k(By)11 b(default,)g(PVM)g(searc)o(hes)i(\014rst)f(in)f Fs(pvm3/bin/$PVM)p 1746 1076 14 2 v 13 w(ARCH)249 1130 y FA(\(the)16 b(p)o(vmd)e(default)g (w)o(orking)h(directory)h(is)f Fs($HOME)p FA(\))f(and)h(then)h(in)f Fs($PVM)p 1434 1130 V 14 w(ROOT/bin/$PVM)p 1734 1130 V 13 w(ARCH)p FA(.)249 1184 y(This)h(path)h(list)f(can)h(b)q(e)g(c)o (hanged)g(with)f(host)g(\014le)h(option)f Fs(ep=)p FA(.)25 b(If)16 b(y)o(our)g(programs)f(aren't)i(on)f(a)249 1238 y(\014lesystem)e(shared)h(b)q(et)o(w)o(een)g(the)f(hosts,)g(y)o(ou)g(m) o(ust)f(cop)o(y)h(them)f(to)g(eac)o(h)i(host)f(man)o(ually)m(.)249 1321 y Fr(9.4.2)48 b(Group)14 b(F)l(unctions)249 1404 y Fs(failed)21 b(to)g(start)g(group)g(server)16 b FA({)i(This)g (message)g(means)g(that)g(a)g(function)g(in)f(the)i(group)249 1458 y(library)12 b(\()p Fs(libgpvm3.a)p FA(\))f(could)i(not)f(spa)o (wn)h(a)f FB(gr)n(oup)j(server)e(task)f FA(to)h(manage)e(group)i(mem)o (b)q(ership)249 1512 y(lists.)18 b(T)m(asks)13 b(using)g(group)g (library)f(functions)i(m)o(ust)e(b)q(e)i(able)f(to)g(comm)o(unicate)e (with)i(this)g(serv)o(er.)249 1566 y(It)k(is)g(started)h(automatically) 13 b(if)j(one)h(is)g(not)g(already)f(running.)27 b(The)17 b(group)g(serv)o(er)h(executable)249 1620 y(\()p Fs(pvmgs)p FA(\))i(normally)e(resides)k(in)e Fs($PVM)p 879 1620 V 15 w(ROOT/bin/$PVM)p 1180 1620 V 13 w(ARCH)p FA(,)g(whic)o(h)g(m)o (ust)g(b)q(e)h(in)f(the)i(p)o(vmd)249 1674 y(searc)o(h)f(path.)37 b(If)20 b(y)o(ou)g(c)o(hange)g(the)h(path)f(using)g(the)h(host)g (\014le)f Fs(ep=)f FA(option,)i(mak)o(e)e(sure)i(this)249 1728 y(directory)13 b(is)g(still)e(included.)18 b(The)13 b(group)f(serv)o(er)j(ma)o(y)10 b(b)q(e)j(spa)o(wned)g(on)g(an)o(y)f (host,)g(so)h(b)q(e)g(sure)h(one)249 1782 y(is)g(installed)f(and)h(y)o (our)f(path)h(is)g(set)h(correctly)g(ev)o(erywhere.)249 1865 y Fr(9.4.3)48 b(Memory)16 b(Use)249 1948 y FA(T)m(asks)h(and)h(p)o (vmds)e(allo)q(cate)h(some)f(memory)f(\(using)i Fs(malloc\(\))p FA(\))f(as)i(they)g(run.)29 b(Mallo)q(c)16 b(nev)o(er)249 2002 y(giv)o(es)d(memory)d(bac)o(k)j(to)g(the)h(system,)e(so)h(the)h (data)e(size)i(of)e(eac)o(h)i(pro)q(cess)g(only)e(increases)j(o)o(v)o (er)e(its)249 2056 y(lifetime.)20 b(Message)c(and)f(pac)o(k)o(et)g (bu\013ers)i(\(the)e(main)e(users)k(of)d(dynamic)g(memory)e(in)j(PVM\)) h(are)249 2110 y(recycled,)f(ho)o(w)o(ev)o(er.)291 2164 y(The)j(things)g(that)g(most)e(commonly)f(cause)k(PVM)f(to)g(use)h(a)e (large)h(amoun)o(t)e(of)h(memory)f(are)249 2218 y(passing)e(h)o(uge)g (messages,)f(certain)i(comm)o(unicatio)o(n)c(patterns)k(and)f(memory)d (leaks.)291 2271 y(A)k(task)g(sending)h(a)f(PVM)h(message)f(do)q(esn't) h(necessarily)g(blo)q(c)o(k)f(un)o(til)f(the)i(corresp)q(onding)h(re-) 249 2325 y(ceiv)o(e)g(is)g(executed.)28 b(Messages)18 b(are)f(stored)g(at)f(the)i(destination)e(un)o(til)g(claimed,)f(allo)o (wing)f(some)249 2379 y(leew)o(a)o(y)d(when)h(programmi)o(ng)d(in)h (PVM.)i(The)f(programmer)e(should)j(b)q(e)g(careful)f(to)g(limit)e(the) j(n)o(um-)249 2433 y(b)q(er)j(of)f(outstanding)g(messages.)20 b(Ha)o(ving)13 b(to)q(o)h(man)o(y)f(causes)j(the)f(receiving)f(task)h (\(and)f(its)h(p)o(vmd)249 2487 y(if)e(the)i(task)f(is)f(busy\))i(to)e (accum)o(ulate)g(a)h(lot)f(of)h(dynamic)e(memory)f(to)j(hold)f(all)g (the)h(messages.)p eop %%Page: 155 174 155 173 bop 249 251 a Fu(T)m(roublesho)q(oting)1268 b(155)291 507 y FA(There)11 b(is)g(nothing)f(to)h(stop)g(a)f(task)h(from)e (sending)i(a)f(message)g(whic)o(h)h(is)g(nev)o(er)g(claimed)e(\(b)q (ecause)249 561 y(receiv)o(e)17 b(is)f(nev)o(er)i(called)d(with)h(a)g (wildcard)g(pattern\).)25 b(This)16 b(message)g(will)f(b)q(e)i(held)f (in)g(memory)249 615 y(un)o(til)d(the)i(task)f(exits.)291 669 y(Mak)o(e)i(sure)h(y)o(ou're)f(not)h(accum)o(ulating)d(old)i (message)g(bu\013ers)i(b)o(y)e(mo)o(ving)d(them)j(aside.)26 b(The)249 723 y Fs(pvm)p 318 723 14 2 v 15 w(initsend\(\))14 b FA(and)h(receiv)o(e)i(functions)e(automatically)e(free)j(the)g (curren)o(t)h(bu\013er,)g(but)f(if)f(y)o(ou)249 777 y(use)i(the)f Fs(pvm)p 465 777 V 15 w(set[sr]buf\(\))d FA(routines,)j(then)g(the)h (asso)q(ciated)f(bu\013ers)h(ma)o(y)d(not)h(b)q(e)h(freed.)24 b(F)m(or)249 831 y(example,)11 b(the)h(follo)o(wing)e(co)q(de)i (fragmen)o(t)f(allo)q(cates)h(message)g(bu\013ers)h(un)o(til)e(the)i (system)e(runs)i(out)249 885 y(of)g(memory:)328 972 y Fg(while)k(\(1\))i({)406 1018 y(pvm_inits)o(end)o(\(Pv)o(mD)o(ata)o(De) o(fau)o(lt\))o(;)75 b(/*)19 b(make)f(new)h(buffer)e(*/)406 1064 y(pvm_setsb)o(uf\()o(0\);)406 1109 y(/*)i(now)f(buffer)g(won't)f (be)i(freed)f(by)h(next)f(initsend)e(*/)328 1155 y(})291 1250 y Ft(|)c FA(As)i(a)f(quic)o(k)h(c)o(hec)o(k,)g(lo)q(ok)e(at)i(the) g(message)f(handles)h(returned)h(b)o(y)e(initsend)h(or)f(receiv)o(e)i (func-)249 1304 y(tions.)22 b(Message)17 b(ids)e(are)h(tak)o(en)g(from) d(a)i(p)q(o)q(ol,)g(whic)o(h)g(is)g(extended)i(as)f(the)g(n)o(um)o(b)q (er)f(of)f(message)249 1358 y(bu\013ers)k(in)f(use)h(increases.)29 b(If)16 b(there)j(is)d(a)h(bu\013er)h(leak,)f(message)g(ids)g(will)e (start)j(out)e(small)f(and)249 1412 y(increase)g(steadily)m(.)291 1466 y Ft(|)e FA(Tw)o(o)g(undo)q(cumen)o(ted)h(functions)g(in)g(libp)o (vm)d(dump)i(information)d(ab)q(out)k(message)g(bu\013ers:)716 1553 y Fs(umbuf)p 829 1553 V 15 w(dump\(int)20 b(mid,)h(int)g(level\))p FA(,)815 1607 y Fs(umbuf)p 928 1607 V 14 w(list\(int)f(level\))p FA(.)249 1694 y(F)m(unction)12 b Fs(umbuf)p 534 1694 V 15 w(dump\(\))f FA(dumps)h(a)g(message)g(bu\013er)h(b)o(y)f(id)g(\()p Fs(mid)p FA(\).)18 b(P)o(arameter)12 b Fs(level)f FA(is)h(one)h(of:)292 1747 y(Lev)o(el)50 b(Information)12 b(dump)q(ed)p 268 1765 689 2 v 292 1802 a(0)124 b(One-line)14 b(summary)292 1856 y(1)124 b(List)14 b(of)f(data)h(fragmen)o(ts)292 1910 y(2)124 b(All)13 b(data)h(pac)o(k)o(ed)g(in)g(message)p 268 1928 V 263 2021 a(F)m(unction)f Fs(umbuf)p 549 2021 14 2 v 15 w(list\(\))g FA(calls)g Fs(umbuf)p 911 2021 V 15 w(dump\(\))f FA(for)i(eac)o(h)g(message)g(in)f(the)i(message)e (heap.)249 2164 y Fr(9.4.4)48 b(Input)14 b(and)h(Output)249 2247 y FA(Eac)o(h)e(task)g(spa)o(wned)g(through)g(PVM)g(has)f(its)h FB(stdout)g FA(and)f FB(stderr)g FA(\014les)h(connected)h(to)f(a)f(pip) q(e)h(that)249 2301 y(is)k(read)h(b)o(y)e(the)i(p)o(vmd)e(managing)e (the)k(task.)28 b(An)o(ything)16 b(prin)o(ted)i(b)o(y)e(the)i(task)f (is)g(pac)o(k)o(ed)h(in)o(to)249 2355 y(a)e(PVM)h(message)g(b)o(y)f (the)h(p)o(vmd)e(and)i(sen)o(t)g(to)g(the)g(task's)g FB(stdout)g(sink)p FA(.)27 b(The)17 b(implem)o(en)o(tation)249 2409 y(of)e(this)g(mec)o(hanism)e(is)i(describ)q(ed)j(in)d Ft(x)p FA(7.7.2.)21 b(Eac)o(h)15 b(spa)o(wned)h(task)g(has)f Fs(/dev/null)f FA(op)q(ened)i(as)249 2463 y FB(stdin)p FA(.)p eop %%Page: 156 175 156 174 bop 249 251 a Fu(156)1356 b(Chapter)13 b(9)291 507 y FA(Output)f(from)f(a)h(task)g(running)g(on)g(an)o(y)f(host)i(in)e (a)h(virtual)f(mac)o(hine)g(\(unless)i(redirected)i(b)o(y)c(the)249 561 y(console,)j(or)g(a)f(paren)o(t)i(task\))f(is)g(written)g(in)f(the) i(log)e(\014le)h(of)f(the)h FB(master)g FA(p)o(vmd)e(b)o(y)i(default.) 291 615 y(Y)m(ou)20 b(can)h(use)h(the)g(console)g(spa)o(wn)f(command)d (with)j(\015ag)g Fs(->)f FA(to)h(collect)h(output)f(from)e(an)249 669 y(application)i(\(the)h(spa)o(wned)h(tasks)g(and)e(an)o(y)h(others) h(they)g(in)e(turn)i(spa)o(wn\).)42 b(Use)23 b(function)249 723 y Fs(pvm)p 318 723 14 2 v 15 w(catchout\(\))12 b FA(to)i(collect)g(output)g(within)f(an)h(application.)291 777 y(The)19 b(C)f FB(stdio)h FA(library)f(\()p Fs(fgets\(\))p FA(,)g Fs(printf\(\))p FA(,)f(etc.\))34 b(bu\013ers)20 b(input)e(and)h(output)g(whenev)o(er)249 831 y(p)q(ossible,)d(to)g (reduce)h(the)g(frequency)g(of)e(actual)h Fs(read\(\))e FA(or)i Fs(write\(\))f FA(system)g(calls.)24 b(It)16 b(decides)249 885 y(whether)h(to)e(bu\013er)i(b)o(y)e(lo)q(oking)f(at)i (the)g(underlying)f(\014le)h(descriptor)g(of)f(a)h(stream.)22 b(If)15 b(the)i(\014le)e(is)249 939 y(a)f(tt)o(y)m(,)f(it)h(bu\013ers)i (only)d(a)h(line)g(at)g(a)g(time,)e(that)j(is,)e(the)i(bu\013er)g(is)f (\015ushed)i(whenev)o(er)f(the)g(newline)249 993 y(c)o(haracter)f(is)d (encoun)o(tered.)20 b(If)12 b(the)g(descriptor)i(is)e(a)f(\014le,)h (pip)q(e,)h(or)f(so)q(c)o(k)o(et,)g(ho)o(w)o(ev)o(er,)h(stdio)f (bu\013ers)249 1047 y(up)i(m)o(uc)o(h)f(more,)f(t)o(ypically)h(4k)g(b)o (ytes.)291 1101 y(A)f(task)g(spa)o(wned)g(b)o(y)g(PVM)h(writes)f (output)h(through)f(a)f(pip)q(e)i(bac)o(k)f(to)f(its)h(p)o(vmd,)f(so)h (the)h(stdout)249 1155 y(bu\013er)i(isn't)e(\015ushed)h(after)g(ev)o (ery)g(line)f(\(stderr)i(probably)e(is\).)18 b(The)c Fs(pvm)p 1423 1155 V 15 w(exit\(\))e FA(function)h(closes)249 1209 y(the)e(stdio)e(streams,)i(causing)e(them)h(to)f(b)q(e)i (\015ushed)g(so)f(y)o(ou)g(should)f(ev)o(en)o(tually)h(see)h(all)e(y)o (our)g(output.)249 1263 y(Y)m(ou)16 b(can)h(\015ush)g(stdout)g(b)o(y)g (calling)e Fs(fflush\(stdout\))e FA(an)o(ywhere)18 b(in)e(y)o(our)g (program.)25 b(Y)m(ou)16 b(can)249 1317 y(c)o(hange)h(the)h (bu\013ering)f(mo)q(de)f(of)g(stdout)i(to)f(line-orien)o(ted)g(for)f (the)i(en)o(tire)f(program)f(b)o(y)g(calling)249 1371 y Fs(setlinebuf\(stdout\))10 b FA(near)15 b(the)f(top)g(of)f(the)i (program.)291 1425 y(F)m(ortran)g(systems)g(handle)h(output)f (bu\013ering)h(in)f(man)o(y)f(di\013eren)o(t)i(w)o(a)o(ys.)22 b(Sometimes)13 b(there)k(is)249 1479 y(a)d Fs(FLUSH)e FA(subroutine,)j(sometimes)d(not.)291 1533 y(In)18 b(a)g(PVM)h(task,)g (y)o(ou)e(can)i(op)q(en)g(a)f(\014le)g(to)g(read)h(or)f(write,)h(but)g (remem)o(b)q(er)e(that)h(spa)o(wned)249 1587 y(comp)q(onen)o(ts)d (inherit)g(the)g(w)o(orking)f(directory)i(\(b)o(y)f(default)f Fs($HOME)p FA(\))g(from)g(the)h(p)o(vmd)e(so)i(the)h(\014le)249 1641 y(path)f(y)o(ou)f(op)q(en)h(m)o(ust)f(b)q(e)h(relativ)o(e)f(to)h (y)o(our)f(home)g(directory)h(\(or)g(an)f(absolute)h(path\).)21 b(Y)m(ou)14 b(can)249 1694 y(c)o(hange)f(the)g(p)o(vmd)e(\(and)i (therefore)h(task\))f(w)o(orking)f(directory)h(\(p)q(er-host\))h(b)o(y) e(using)h(the)g(host)g(\014le)249 1748 y(option)g Fs(wd=)p FA(.)249 1831 y Fr(9.4.5)48 b(Sc)o(heduli)o(ng)13 b(Priorit)n(y)249 1914 y Ft(|)j FA(PVM)g(do)q(esn't)h(ha)o(v)o(e)g(a)f(built-in)f (facilit)o(y)g(for)h(running)g(programs)f(at)h(di\013eren)o(t)i (priorities)e(\(as)249 1968 y(with)11 b Fs(nice)p FA(\),)g(but)g(y)o (ou)g(can)h(do)f(it)g(y)o(ourself.)17 b(Y)m(ou)11 b(can)g(call)g Fs(setpriority\(\))d FA(\(or)k(p)q(erhaps)g Fs(nice\(\))p FA(\))249 2022 y(in)h(y)o(our)h(co)q(de)h(or)f(replace)h(y)o(our)e (program)f(with)i(a)g(shell)f(script)i(wrapp)q(er)g(as)f(follo)o(ws:) 328 2110 y Fg(cd)k(~/pvm3/bin)o(/SU)o(N4)328 2155 y(mv)g(prog)g(prog-) 328 2201 y(echo)g('P=$0"-")o(;)f(shift;)g(exec)h(nice)g(-10)h($P)f($@') h(>)g(prog)328 2247 y(chmod)e(755)i(prog)291 2342 y FA(When)14 b Fs(prog)f FA(is)g(spa)o(wned,)h(the)h(shell)f(script)g(execs)i Fs(prog-)d FA(at)g(a)h(new)g(priorit)o(y)f(lev)o(el.)291 2396 y(Y)m(ou)h(could)h(b)q(e)h(ev)o(en)g(more)f(creativ)o(e)h(and)f (pass)h(an)f(en)o(vironmen)o(t)f(v)n(ariable)g(through)h(PVM)h(to)249 2450 y(the)g(shell)f(script,)g(to)g(allo)o(w)e(v)n(arying)h(the)i (priorit)o(y)e(without)g(editing)h(the)g(script.)23 b(If)14 b(y)o(ou)h(w)o(an)o(t)f(to)p eop %%Page: 157 176 157 175 bop 249 251 a Fu(T)m(roublesho)q(oting)1268 b(157)249 507 y FA(ha)o(v)o(e)15 b(real)h(fun,)f(hac)o(k)h(the)g FB(tasker)f FA(example)f(to)i(do)f(the)h(w)o(ork,)f(then)h(y)o(ou)g(w)o (on't)e(ha)o(v)o(e)i(to)f(replace)249 561 y(all)e(the)h(programs)f (with)g(wrapp)q(ers.)291 615 y(One)18 b(reason)f(for)g(c)o(hanging)g (the)g(sc)o(heduling)h(priorit)o(y)e(of)h(a)g(task)g(is)g(to)g(allo)o (w)f(it)h(to)g(run)g(on)g(a)249 669 y(w)o(orkstation)f(without)h (impacting)e(the)i(p)q(erformance)g(of)f(the)i(mac)o(hine)d(for)i (someone)f(sitting)g(at)249 723 y(the)e(console.)k(Longer)c(resp)q (onse)i(time)c(seems)i(to)f FB(fe)n(el)g FA(w)o(orse)h(than)f(lo)o(w)o (er)h(throughput.)k(Resp)q(onse)249 777 y(time)c(is)h(a\013ected)i (most)e(b)o(y)g(tasks)h(that)f(use)h(a)g(lot)e(of)h(memory)m(,)e (stealing)i(all)f(the)i(ph)o(ysical)f(pages)249 831 y(from)10 b(other)i(programs.)k(When)c(in)o(teractiv)o(e)g(input)g(arriv)o(es,)g (it)f(tak)o(es)h(the)g(system)g(time)e(to)i(reclaim)249 885 y(all)i(the)h(pages.)21 b(Decreasing)16 b(the)f(priorit)o(y)f(of)g (suc)o(h)i(a)e(task)h(ma)o(y)e(not)i(help)g(m)o(uc)o(h,)e(b)q(ecause)k (if)d(it's)249 939 y(allo)o(w)o(ed)i(to)h(run)g(for)g(a)g(few)g (seconds,)h(it)f(accum)o(ulates)g(pages)g(again.)26 b(In)17 b(con)o(trast,)h(cpu)g(b)q(ound)249 993 y(jobs)d(with)f(small)f(w)o (orking)h(set)h(sizes)h(ma)o(y)d(hardly)h(a\013ect)i(the)g(resp)q(onse) g(time)e(at)h(all,)e(unless)j(y)o(ou)249 1047 y(ha)o(v)o(e)e(man)o(y)e (of)h(them)g(running.)249 1130 y Fr(9.4.6)48 b(Resource)15 b(Limitati)o(on)o(s)249 1213 y FA(Av)n(ailable)i(memory)f(limits)g(the) j(maxim)n(um)14 b(size)20 b(and)e(n)o(um)o(b)q(er)g(of)g(outstanding)g (messages)g(the)249 1267 y(system)c(can)g(handle.)k(The)c(n)o(um)o(b)q (er)g(of)f(\014le)h(descriptors)h(\(I/O)f(c)o(hannels\))h(a)o(v)n (ailable)d(to)i(a)f(pro)q(cess)249 1321 y(limits)d(the)j(n)o(um)o(b)q (er)f(of)g FB(dir)n(e)n(ct)h(r)n(oute)f FA(connections)i(a)e(task)g (can)h(establish)g(to)f(other)h(tasks,)g(and)f(the)249 1375 y(n)o(um)o(b)q(er)i(of)g(tasks)h(a)f(single)g(p)o(vmd)f(can)i (manage.)j(The)d(n)o(um)o(b)q(er)e(of)h(pro)q(cesses)j(allo)o(w)o(ed)c (to)i(a)f(user)249 1429 y(limits)e(the)i(n)o(um)o(b)q(er)f(of)h(tasks)g (that)g(can)g(run)g(on)g(a)f(single)h(host,)g(and)f(so)h(on.)291 1483 y(An)k(imp)q(ortan)o(t)e(thing)i(to)g(kno)o(w)g(is)g(that)g(y)o (ou)g(ma)o(y)e(not)i(see)h(a)f(message)g(when)h(y)o(ou)e(reac)o(h)i(a) 249 1537 y(resource)h(limit.)26 b(PVM)17 b(tries)i(to)e(return)h(an)g (error)g(co)q(de)g(to)g(the)g(o\013ending)f(task)h(and)f(con)o(tin)o (ue)249 1591 y(op)q(eration,)c(but)h(can't)g(reco)o(v)o(er)h(from)d (certain)j(ev)o(en)o(ts)g(\(running)f(out)f(of)h(memory)d(is)j(the)g(w) o(orst\).)291 1645 y(See)g Ft(x)q FA(7.9)f(for)g(more)g(information)e (on)j(ho)o(w)f(resource)j(limits)c(a\013ect)j(PVM.)249 1765 y FD(9.5)52 b(Debugging)19 b(and)f(T)l(racing)249 1873 y FA(First,)11 b(the)f(bad)g(news.)17 b(Adding)10 b Fs(printf\(\))e FA(calls)h(to)h(y)o(our)g(co)q(de)g(is)g(still)f(a)h (state-of-the-art)g(metho)q(d-)249 1927 y(ology)m(.)291 1981 y(PVM)19 b(tasks)h(can)f(b)q(e)g(started)i(in)d(a)h(debugger)h(on) f(systems)g(that)g(supp)q(ort)h(X-Windo)o(ws.)32 b(If)249 2035 y Fs(PvmTaskDebug)11 b FA(is)i(sp)q(eci\014ed)h(in)f Fs(pvm)p 848 2035 14 2 v 15 w(spawn\(\))p FA(,)f(PVM)h(runs)h Fs($PVM)p 1331 2035 V 15 w(ROOT/lib/debugger)o FA(,)c(whic)o(h)249 2089 y(op)q(ens)k(an)e FB(xterm)h FA(in)f(whic)o(h)h(it)f(runs)h(the)h (task)f(in)f(a)g(debugger)i(de\014ned)g(in)e Fs(pvm3/lib/debugger2)p FA(.)249 2143 y(The)17 b Fs(PvmTaskDebug)e FA(\015ag)h(is)g(not)h (inherited,)h(so)f(y)o(ou)f(m)o(ust)g(mo)q(dify)e(eac)o(h)j(call)f(to)h (spa)o(wn.)27 b(The)249 2197 y Fs(DISPLAY)16 b FA(en)o(vironmen)o(t)g (v)n(ariable)g(can)h(b)q(e)h(exp)q(orted)g(to)f(a)g(remote)g(host)g(so) g(the)h(xterm)e(will)g(al-)249 2251 y(w)o(a)o(ys)g(b)q(e)h(displa)o(y)o (ed)e(on)h(the)h(lo)q(cal)f(screen.)27 b(Use)17 b(the)f(follo)o(wing)e (command)f(b)q(efore)k(running)f(the)249 2305 y(application:)406 2392 y Fg(setenv)h(PVM_EXPORT)f(DISPLAY)291 2487 y FA(Mak)o(e)f(sure)i Fs(DISPLAY)c FA(is)j(set)g(to)f(the)h(name)f(of)f(y)o(our)i(host)f (\(not)h Fs(unix:0)p FA(\))e(and)h(the)i(host)e(name)p eop %%Page: 158 177 158 176 bop 249 251 a Fu(158)1356 b(Chapter)13 b(9)249 507 y FA(is)h(fully)f(quali\014ed)h(if)f(y)o(our)h(virtual)g(mac)o (hine)f(includes)i(hosts)g(at)f(more)f(than)i(one)f(administrativ)o(e) 249 561 y(site.)19 b(T)m(o)13 b(spa)o(wn)h(a)f(task)h(in)g(a)f (debugger)i(from)d(the)j(console,)e(use)i(the)f(command:)406 634 y Fg(spawn)k(-?)g([)i(rest)e(of)h(spawn)e(command)g(])291 715 y FA(Y)m(ou)g(ma)o(y)e(b)q(e)k(able)e(to)g(use)i(the)f(libp)o(vm)d (trace)k(facilit)o(y)d(to)h(isolate)g(problems,)g(suc)o(h)i(as)e(h)o (ung)249 769 y(pro)q(cesses.)j(A)11 b(task)g(has)h(a)f FB(tr)n(ac)n(e)g(mask)p FA(,)h(whic)o(h)f(allo)o(ws)f(eac)o(h)h (function)g(in)g(libp)o(vm)e(to)i(b)q(e)h(selectiv)o(ely)249 823 y(traced,)i(and)f(a)f FB(tr)n(ac)n(e)i(sink)p FA(,)f(whic)o(h)g(is) f(another)i(task)f(to)g(whic)o(h)g(trace)h(data)e(is)h(sen)o(t)h(\(as)f (messages\).)249 877 y(A)h(task's)g(trace)h(mask)d(and)i(sink)g(are)g (inherited)g(b)o(y)g(an)o(y)f(tasks)i(spa)o(wned)f(b)o(y)g(it.)291 931 y(The)h(console)g(can)g(spa)o(wn)g(a)f(task)h(with)g(tracing)f (enabled)h(\(using)g(the)g Fs(spawn)21 b(-@)p FA(\),)14 b(collect)h(the)249 985 y(trace)e(data)e(and)g(prin)o(t)g(it)g(out.)18 b(In)11 b(this)h(w)o(a)o(y)m(,)e(a)h(whole)g FB(job)h FA(\(group)f(of)g(tasks)h(related)g(b)o(y)f(paren)o(tage\))249 1039 y(can)16 b(b)q(e)h(traced.)26 b(The)17 b(console)f(has)g(a)g Fs(trace)f FA(command)f(to)i(edit)g(the)h(mask)e(passed)i(to)f(tasks)g (it)249 1093 y(spa)o(wns.)i(Or,)c(XPVM)h(can)f(b)q(e)g(used)h(to)f (collect)g(and)g(displa)o(y)f(trace)i(data)e(graphically)m(.)291 1147 y(It)d(is)h(di\016cult)f(to)g(start)h(an)g(application)e(b)o(y)h (hand)h(and)f(trace)i(it,)f(though.)16 b(T)m(asks)11 b(with)f(no)h(paren)o(t)249 1201 y(\(anon)o(ymous)g(tasks\))j(ha)o(v)o (e)e(a)h(default)g(trace)g(mask)f(and)h(sink)f(of)g(NULL.)h(Not)g(only) f(m)o(ust)g(the)h(\014rst)249 1254 y(task)h(call)g Fs(pvm)p 484 1254 14 2 v 15 w(setopt\(\))f FA(and)h Fs(pvm)p 835 1254 V 15 w(settmask\(\))e FA(to)i(initialize)f(the)i(tracing)f (parameters,)g(but)g(it)249 1308 y(m)o(ust)f(collect)i(and)f(in)o (terpret)h(the)g(trace)g(data.)k(If)14 b(y)o(ou)g(m)o(ust)f(start)i(a)f (traced)h(application)e(from)f(a)249 1362 y(TTY,)i(w)o(e)g(suggest)g (spa)o(wning)g(an)f(xterm)g(from)g(the)h(console:)423 1443 y Fs(spawn)21 b(-@)h(/usr/local/X11R)o(5/bin)o(/xter)o(m)d(-n)i (PVMTASK)291 1524 y FA(The)13 b(task)h(con)o(text)g(held)f(op)q(en)h(b) o(y)f(the)h(xterm)f(has)h(tracing)f(enabled.)18 b(If)13 b(y)o(ou)g(no)o(w)g(run)h(a)f(PVM)249 1578 y(program)h(in)h(the)g (xterm,)g(it)g(will)f(reconnect)j(to)e(the)h(task)f(con)o(text)h(and)f (trace)i(data)e(will)e(b)q(e)j(sen)o(t)249 1632 y(bac)o(k)e(to)g(the)h (PVM)g(console.)k(Once)c(the)g(PVM)g(program)d(exits,)i(y)o(ou)g(m)o (ust)f(spa)o(wn)h(a)g(new)h(xterm)249 1686 y(to)f(run)g(again,)e(since) j(the)f(task)g(con)o(text)h(will)d(b)q(e)j(closed.)291 1740 y(Because)21 b(the)g(libp)o(vm)c(library)i(is)h(link)o(ed)f(with)g (y)o(our)h(program,)f(it)g(can't)h(b)q(e)g(trusted)i(when)249 1794 y(debugging.)17 b(If)12 b(y)o(ou)g(o)o(v)o(erwrite)g(part)h(of)e (its)h(memory)e(\(for)i(example)f(b)o(y)h(o)o(v)o(erstepping)h(the)g(b) q(ounds)249 1848 y(of)k(an)g(arra)o(y\))g(it)g(ma)o(y)e(start)j(to)f(b) q(eha)o(v)o(e)h(erratically)m(,)e(making)f(the)j(fault)f(hard)g(to)g (isolate.)28 b(The)249 1902 y(p)o(vmds)12 b(are)h(somewhat)f(more)g (robust)h(and)g(attempt)f(to)h(sanit)o(y-c)o(hec)o(k)g(messages)g(from) e(tasks,)i(but)249 1956 y(can)h(still)f(b)q(e)i(killed)d(b)o(y)i(erran) o(t)h(programs.)291 2010 y(The)j Fs(pvm)p 449 2010 V 15 w(setopt\(\))f FA(function)h(can)g(b)q(e)h(used)g(to)f(set)i(the)f (debug)f(mask)f(for)h(PVM)h(message-)249 2064 y(passing)14 b(functions,)h(as)f(describ)q(ed)j(in)d Ft(x)p FA(9.6.1.)k(Setting)d (this)f(mask)f(to)i(3,)e(for)i(example,)d(will)h(force)249 2118 y(PVM)18 b(to)g(log)f(for)g(ev)o(ery)i(message)e(sen)o(t)i(or)f (receiv)o(ed)h(b)o(y)f(that)g(task,)g(information)d(suc)o(h)k(as)e(the) 249 2172 y(source,)i(destination,)e(and)f(length)h(of)g(the)g(message.) 27 b(Y)m(ou)16 b(can)h(use)h(this)f(information)d(to)j(trace)249 2226 y(lost)d(or)g(stra)o(y)g(messages.)249 2346 y FD(9.6)52 b(Debugging)19 b(the)e(System)249 2454 y FA(Y)m(ou)9 b(ma)o(y)e(need)k(to)e(debug)h(the)g(PVM)g(system)f(when)h(p)q(orting)f (it)g(to)g(a)g(new)h(arc)o(hitecture,)i(or)d(b)q(ecause)249 2508 y(an)17 b(application)e(is)i(not)f(running)h(correctly)m(.)27 b(If)17 b(y)o(ou'v)o(e)f(thoroughly)g(c)o(hec)o(k)o(ed)i(y)o(our)e (application)p eop %%Page: 159 178 159 177 bop 249 251 a Fu(T)m(roublesho)q(oting)1268 b(159)249 507 y FA(and)16 b(can't)f(\014nd)h(a)f(problem,)f(then)j(it)e(ma)o(y)f (lie)h(in)g(the)h(system)g(itself.)23 b(This)15 b(section)i(describ)q (es)g(a)249 561 y(few)d(tric)o(ks)g(and)g(undo)q(cumen)o(ted)g (features)h(of)e(PVM)i(to)e(help)h(y)o(ou)g(\014nd)g(out)g(what's)f (going)g(on.)249 644 y Fr(9.6.1)48 b(Run)o(time)13 b(Debug)h(Masks)249 727 y Ft(|)d FA(The)g(p)o(vmd)f(and)h(libp)o(vm)e(eac)o(h)i(ha)o(v)o(e) h(a)e(debugging)h(mask)f(that)h(can)h(b)q(e)g(set)g(to)f(enable)g (logging)f(of)249 781 y(v)n(arious)h(information.)k(Logging)10 b(information)g(is)h(divided)h(in)o(to)f(classes,)j(eac)o(h)e(enabled)g (separately)249 835 y(b)o(y)h(a)g(bit)h(in)f(the)h(debug)g(mask.)i(The) e(p)o(vmd)e(and)h(console)h(ha)o(v)o(e)f(a)g(command)e(line)i(option)g (\()p Fs(-d)p FA(\))g(to)249 889 y(set)g(the)g(debug)g(mask)e(of)h(the) h(p)o(vmd)e(to)h(the)h(\(hexadecimal\))e(v)n(alue)h(sp)q(eci\014ed;)i (the)f(default)f(is)h(zero.)249 943 y(Sla)o(v)o(e)g(p)o(vmds)f(inherit) h(the)h(debug)g(mask)e(of)h(the)h(master)f(as)g(they)h(are)g(started.) 19 b(The)14 b(debug)f(mask)249 997 y(of)g(a)g(p)o(vmd)f(can)i(b)q(e)g (set)g(at)g(an)o(y)f(time)f(using)h(the)h(console)g Fs(tickle)e FA(command)f(on)i(that)g(host.)19 b(The)249 1051 y(debug)14 b(mask)f(in)g(libp)o(vm)f(can)i(b)q(e)g(set)h(in)e(the)i(task)f(with)f Fs(pvm)p 1235 1051 14 2 v 16 w(setopt\(\))p FA(.)291 1105 y(The)f(p)o(vmd)e(debug)j(mask)d(bits)i(are)h(de\014ned)g(in)e (ddpro.h,)h(and)g(the)g(libp)o(vm)e(bits)i(in)f(lp)o(vm.c.)16 b(The)249 1159 y(meanings)f(of)g(the)h(bits)g(are)h(not)f(w)o(ell)f (de\014ned,)i(since)g(they're)g(only)e(in)o(tended)h(to)g(b)q(e)h(used) g(when)249 1213 y(\014xing)d(or)h(mo)q(difying)d(the)j(p)o(vmd)f(or)g (libp)o(vm.)19 b(A)o(t)c(presen)o(t,)h(the)f(bits)g(in)g(the)g(debug)g (mask)f(are)h(as)249 1267 y(follo)o(ws:)328 1363 y Fu(Name)d(Bit)63 b(Debug)14 b(Messages)g(ab)q(out)p 291 1378 956 2 v 335 1410 a Fg(pkt)49 b Fu(0x1)h(P)o(ac)o(k)o(et)13 b(routing)335 1456 y Fg(msg)88 b Fu(2)50 b(Message)14 b(routing)335 1502 y Fg(tsk)88 b Fu(4)50 b(T)m(ask)13 b(managemen)o(t)335 1547 y Fg(slv)88 b Fu(8)50 b(Sla)o(v)o(e)14 b(p)o(vmd)g(startup)335 1593 y Fg(hst)69 b Fu(10)50 b(Host)13 b(table)h(up)q(dates)335 1639 y Fg(sel)69 b Fu(20)50 b(Select)14 b(lo)q(op)g(\(b)q(elo)o(w)g (pac)o(k)o(et)g(routing)g(la)o(y)o(er\))335 1684 y Fg(net)69 b Fu(40)50 b(Net)o(w)o(ork)13 b(t)o(widdling)335 1730 y Fg(mpp)69 b Fu(80)50 b(MPP)13 b(p)q(ort)h(sp)q(eci\014c)335 1776 y Fg(sch)50 b Fu(100)g(Resource)14 b(manager)g(in)o(terface)p 291 1791 V 249 1938 a Fr(9.6.2)48 b(Tic)o(kle)15 b(the)f(Pvmd)249 2021 y Ft(|)h FA(The)h(tic)o(kle)g(function)f(is)h(a)f(simple,)f (extensible)j(in)o(terface)f(that)g(allo)o(ws)f(a)g(task)h(to)g(p)q(ok) o(e)f(at)h(its)249 2075 y(lo)q(cal)i(p)o(vmd)f(as)i(it)f(runs.)33 b(It)19 b(is)f(not)h(formally)d(sp)q(eci\014ed,)21 b(but)d(has)h(pro)o (v)o(en)g(to)g(b)q(e)g(v)o(ery)g(useful)249 2129 y(in)e(debugging)g (the)i(system.)29 b(Tic)o(kle)17 b(is)g(accessible)i(from)d(the)j (console)f(\()p Fs(tickle)e FA(command\))f(or)249 2183 y(libp)o(vm.)31 b(F)m(unction)19 b Fs(pvm)p 667 2183 14 2 v 15 w(tickle\(\))e FA(sends)k(a)d Fs(TM)p 1075 2183 V 16 w(TICKLE)f FA(message)i(to)g(the)h(p)o(vmd)d(con)o(taining) 249 2237 y(a)h(short)h(\(maxim)n(um)14 b(of)k(ten\))h(arra)o(y)f(of)g (in)o(tegers)h(and)f(receiv)o(es)i(an)e(arra)o(y)g(in)g(reply)m(.)31 b(The)19 b(\014rst)249 2291 y(elemen)o(t)12 b(of)g(the)h(arra)o(y)g(is) f(a)h(sub)q(command,)d(and)j(the)g(remaining)d(elemen)o(ts)j(are)g (parameters.)18 b(The)249 2345 y(commands)12 b(curren)o(tly)i (de\014ned)h(are:)p eop %%Page: 160 179 160 178 bop 249 251 a Fu(160)1356 b(Chapter)13 b(9)p 291 467 1247 2 v 315 499 a(Args)89 b(Return)50 b(Action)p 291 515 V 315 547 a(0)200 b(-)102 b(Dump)14 b(instrumen)o(ted)h(heap)f (\()p Ff(x)p Fu(9.6.4\))e(to)h(p)o(vmd)h(log)g(\014le)315 592 y(1)200 b(-)102 b(Dump)14 b(host)g(table)315 638 y(2)200 b(-)102 b(Dump)14 b(task)f(table)315 684 y(3)200 b(-)102 b(Dump)14 b(w)o(aitc)f(list)315 729 y(4)200 b(-)102 b(Dump)14 b(class-name)h(list)315 775 y(5)164 b Fd(mask)66 b Fu(Get)13 b(p)o(vmd)h(debug)g(mask)315 821 y(6)f Fd(mask)102 b Fu(-)g(Set)13 b(p)o(vmd)h(debug)g(mask)g(to)f Fd(mask)315 866 y Fu(7)g Fd(max)118 b Fu(-)102 b(Set)13 b(max)h(outstanding)h(pac)o (k)o(ets)f(to)f Fd(max)315 912 y Fu(8)g Fd(tid)142 b Fu(-)102 b(T)m(rigger)14 b(host)f(fail)h(for)f(host)g Fd(tid)315 958 y Fu(9)g Fd(\015ag)126 b Fu(-)102 b(Dump)14 b(p)o(vmd)g(statistics)g(\()p Ff(x)p Fu(9.6.5\);)f(clear)h(if)f Fd(\015ag)e Fu(nonzero)p 291 973 V 291 1031 a FA(New)j(tic)o(kle)g (commands)d(are)j(generally)g(added)g(to)g(the)g(end)h(of)e(the)i (list.)249 1114 y Fr(9.6.3)48 b(Starting)13 b(Pvmd)i(under)f(a)i (Debugger)249 1197 y FA(If)f(the)g(p)o(vmd)f(breaks,)h(y)o(ou)g(ma)o(y) e(need)j(to)f(start)h(it)e(under)i(a)f(debugger.)22 b(The)16 b(master)e(p)o(vmd)g(can)249 1251 y(b)q(e)f(started)g(b)o(y)e(hand)h (under)h(a)e(debugger,)i(and)e(the)i(PVM)f(console)g(started)h(on)f (another)g(terminal.)249 1305 y(T)m(o)g(start)h(a)f(sla)o(v)o(e)g(p)o (vmd)f(under)i(a)f(debugger,)h(use)h(the)f(man)o(ual)d(startup)j(\()p Fs(so=ms)p FA(\))f(host)g(\014le)h(option)249 1359 y(so)i(the)g(master) f(p)o(vmd)f(will)h(allo)o(w)f(y)o(ou)h(to)h(start)g(the)g(sla)o(v)o(e)f (b)o(y)h(hand.)20 b(Or,)15 b(use)h(the)f Fs(dx=)f FA(host)h(\014le)249 1413 y(option)e(to)h(execute)i(a)e(script)h(similar)c(to)j Fs(lib/debugger)p FA(,)d(and)j(run)g(the)h(p)o(vmd)d(in)i(a)g(debugger) g(in)249 1467 y(an)g FB(xterm)f FA(windo)o(w.)249 1550 y Fr(9.6.4)48 b(Sane)15 b(Heap)249 1633 y Ft(|)e FA(T)m(o)f(help)h (catc)o(h)h(memory)d(allo)q(cation)g(errors)k(in)e(the)g(system)g(co)q (de,)h(the)g(p)o(vmd)d(and)j(libp)o(vm)c(use)249 1687 y(a)15 b(sanit)o(y-c)o(hec)o(king)g(library)g(called)g FB(imal)r(lo)n(c)p FA(.)22 b(Imallo)q(c)14 b(functions)h(are)h(wrapp)q (ers)h(for)e(the)h(regular)249 1741 y FB(lib)n(c)e FA(functions)h Fs(malloc\(\))p FA(,)e Fs(realloc\(\))p FA(,)g(and)i Fs(free\(\))p FA(.)k(Up)q(on)c(detecting)h(an)f(error,)g(the)h(imalloc) 249 1795 y(functions)e(ab)q(ort)g(the)g(program)f(so)h(the)g(fault)f (can)h(b)q(e)h(traced.)291 1849 y(The)f(follo)o(wing)d(c)o(hec)o(ks)k (and)f(functions)g(are)g(p)q(erformed)g(b)o(y)g(imalloc:)196 1916 y(1.)20 b(The)14 b(length)f(argumen)o(t)g(to)g(mallo)q(c)e(is)i(c) o(hec)o(k)o(ed)i(for)e(insane)h(v)n(alues.)j(A)d(length)f(of)g(zero)h (is)g(c)o(hanged)249 1970 y(to)g(one)g(so)g(it)f(succeeds.)196 2037 y(2.)20 b(Eac)o(h)e(allo)q(cated)f(blo)q(c)o(k)g(is)h(trac)o(k)o (ed)g(in)f(a)g(hash)h(table)f(to)h(detect)h(when)f Fs(free\(\))e FA(is)i(called)f(more)249 2091 y(than)d(once)g(on)g(a)g(blo)q(c)o(k)f (or)h(on)g(something)e(not)i(from)e Fs(malloc\(\))p FA(.)196 2158 y(3.)20 b Fs(i)p 274 2158 14 2 v 16 w(malloc\(\))9 b FA(and)h Fs(i)p 574 2158 V 16 w(realloc\(\))f FA(write)i(pads)g (\014lled)g(with)f(a)h(pseudo-random)f(pattern)h(outside)g(the)249 2212 y(b)q(ounds)16 b(of)e(eac)o(h)i(blo)q(c)o(k,)f(whic)o(h)g(are)g(c) o(hec)o(k)o(ed)i(b)o(y)e Fs(i)p 1089 2212 V 15 w(free\(\))f FA(to)h(detect)i(when)f(something)d(writes)249 2266 y(past)h(the)h(end) f(of)f(a)h(blo)q(c)o(k.)196 2333 y(4.)20 b Fs(i)p 274 2333 V 16 w(free\(\))e FA(zeros)j(eac)o(h)g(blo)q(c)o(k)e(b)q(efore)i (it)e(frees)j(it)d(so)h(further)h(references)i(ma)o(y)17 b(fail)i(and)h(mak)o(e)249 2387 y(themselv)o(es)14 b(kno)o(wn.)196 2454 y(5.)20 b(Eac)o(h)g(blo)q(c)o(k)f(is)g(tagged)g(with)h(a)f(serial) g(n)o(um)o(b)q(er)g(and)g(string)g(to)h(indicate)f(its)g(use.)36 b(The)20 b(heap)249 2508 y(space)14 b(can)f(b)q(e)g(dump)q(ed)f(or)g (sanit)o(y-c)o(hec)o(k)o(ed)i(at)e(an)o(y)h(time)e(b)o(y)h(calling)f Fs(i)p 1402 2508 V 16 w(dump\(\))p FA(.)16 b(This)d(helps)g(\014nd)p eop %%Page: 161 180 161 179 bop 249 251 a Fu(T)m(roublesho)q(oting)1268 b(161)249 507 y FA(memory)11 b(leaks.)291 578 y(Since)16 b(the)h(o)o(v)o(erhead)g (of)e(this)i(c)o(hec)o(king)f(is)g(quite)h(sev)o(ere,)h(it)e(is)g (disabled)g(at)g(compile)e(time)h(b)o(y)249 632 y(default.)j (De\014ning)13 b Fs(USE)p 639 632 14 2 v 15 w(PVM)p 720 632 V 15 w(ALLOC)g FA(in)h(the)g(source)h(mak)o(e\014le\(s\))e(switc)o (hes)i(it)f(on.)249 715 y Fr(9.6.5)48 b(Statistics)249 798 y Ft(|)17 b FA(The)g(p)o(vmd)f(includes)i(sev)o(eral)g(registers)g (and)g(coun)o(ters)g(to)f(sample)f(certain)i(ev)o(en)o(ts,)h(suc)o(h)f (as)249 852 y(the)g(n)o(um)o(b)q(er)f(of)f(calls)h(made)f(to)h Fs(select\(\))f FA(or)h(the)h(n)o(um)o(b)q(er)f(of)f(pac)o(k)o(ets)i (refragmen)o(ted)f(b)o(y)g(the)249 906 y(net)o(w)o(ork)11 b(co)q(de.)17 b(These)12 b(v)n(alues)e(can)h(b)q(e)g(computed)f(from)f (a)h(debug)h(log,)e(but)i(the)g(coun)o(ters)h(ha)o(v)o(e)e(less)249 960 y(adv)o(erse)17 b(impact)c(on)j(the)g(p)q(erformance)f(of)g(the)h (p)o(vmd)e(than)h(w)o(ould)g(generating)g(a)h(h)o(uge)f(log)g(\014le.) 249 1014 y(The)i(coun)o(ters)h(can)f(b)q(e)g(dump)q(ed)g(or)f(reset)j (using)d(the)h Fs(pvm)p 1217 1014 V 15 w(tickle\(\))e FA(function)i(or)f(the)i(console)249 1068 y(tic)o(kle)13 b(command.)i(The)e(co)q(de)h(to)f(gather)g(statistics)h(is)f(normally)d (switc)o(hed)k(out)f(at)g(compile)e(time.)249 1122 y(T)m(o)i(enable)h (it,)f(one)h(edits)h(the)f(mak)o(e\014le)f(and)h(adds)g Fs(-DSTATISTICS)d FA(to)j(the)g(compile)e(options.)p eop %%Page: 162 181 162 180 bop eop %%Page: 163 182 163 181 bop 249 260 a FD(Glossary)249 583 y Fr(async)o(hronous)18 b FA(Not)11 b(guaran)o(teed)g(to)g(enforce)h(coincidence)f(in)g(clo)q (c)o(k)g(time.)k(In)c(an)f(async)o(hronous)249 637 y(comm)o(unication)i (op)q(eration,)j(the)h(sender)h(and)f(receiv)o(er)h(ma)o(y)c(or)i(ma)o (y)f(not)h(b)q(oth)h(b)q(e)g(engaged)f(in)249 691 y(the)g(op)q(eration) e(at)h(the)h(same)e(instan)o(t)g(in)h(clo)q(c)o(k)g(time.)249 759 y Fr(atomic)20 b FA(Not)12 b(in)o(terruptible.)18 b(An)12 b(atomic)e(op)q(eration)i(is)g(one)g(that)g(alw)o(a)o(ys)f(app) q(ears)i(to)f(ha)o(v)o(e)g(b)q(een)249 813 y(executed)k(as)e(a)f(unit.) 249 882 y Fr(bandwidth)18 b FA(A)e(measure)f(of)g(the)i(sp)q(eed)g(of)e (information)e(transfer)k(t)o(ypically)d(used)j(to)e(quan)o(tify)249 936 y(the)e(comm)o(uni)o(cation)c(capabilit)o(y)i(of)g(m)o(ulticom)o (puter)f(and)i(m)o(ultipro)q(cessor)f(systems.)18 b(Bandwidth)249 990 y(can)h(express)i(p)q(oin)o(t-to-p)q(oin)o(t)d(or)h(collectiv)o(e)g (\(bus\))h(comm)o(unicatio)o(ns)d(rates.)34 b(Bandwidths)20 b(are)249 1043 y(usually)13 b(expressed)j(in)e(megab)o(ytes)f(p)q(er)i (second.)249 1112 y Fr(barrier)f(sync)o(hronizati)o(on)j FA(An)e(ev)o(en)o(t)f(in)g(whic)o(h)f(t)o(w)o(o)h(or)g(more)f(pro)q (cesses)j(b)q(elonging)d(to)h(some)249 1166 y(implicit)e(or)i(explicit) f(group)h(blo)q(c)o(k)g(un)o(til)f(all)g(mem)o(b)q(ers)g(of)h(the)h (group)f(ha)o(v)o(e)g(blo)q(c)o(k)o(ed.)k(They)d(ma)o(y)249 1220 y(then)h(all)d(pro)q(ceed.)23 b(No)15 b(mem)o(b)q(er)e(of)h(the)i (group)e(ma)o(y)f(pass)j(a)e(barrier)i(un)o(til)e(all)f(pro)q(cesses)18 b(in)c(the)249 1274 y(group)g(ha)o(v)o(e)g(reac)o(hed)h(it.)249 1342 y Fr(big-endian)i FA(A)d(binary)g(data)f(format)f(in)i(whic)o(h)f (the)i(most)d(signi\014can)o(t)i(b)o(yte)g(or)g(bit)f(comes)h(\014rst.) 249 1396 y(See)h(also)e FB(little-endian)p FA(.)249 1465 y Fr(bisection)g(bandwidth)18 b FA(The)f(rate)h(at)e(whic)o(h)h(comm)o (unication)c(can)18 b(tak)o(e)e(place)i(b)q(et)o(w)o(een)g(one)249 1519 y(half)10 b(of)h(a)g(computer)g(and)g(the)g(other.)18 b(A)11 b(lo)o(w)g(bisection)g(bandwidth)g(or)g(a)g(large)g(disparit)o (y)g(b)q(et)o(w)o(een)249 1572 y(the)18 b(maxim)o(um)13 b(and)18 b(minim)n(um)13 b(bisection)18 b(bandwidths)g(ac)o(hiev)o(ed)g (b)o(y)g(cutting)g(the)g(computers)249 1626 y(elemen)o(ts)f(in)g (di\013eren)o(t)h(w)o(a)o(ys)f(is)h(a)f(w)o(arning)f(that)i(comm)o(uni) o(cations)d(b)q(ottlenec)o(ks)j(ma)o(y)e(arise)h(in)249 1680 y(some)c(calculations.)249 1749 y Fr(broadcast)19 b FA(T)m(o)13 b(send)h(a)f(message)g(to)h(all)e(p)q(ossible)h(recipien) o(ts.)19 b(Broadcast)c(can)e(b)q(e)h(implemen)o(ted)249 1803 y(as)e(a)f(rep)q(eated)i(send)g(or)e(in)h(a)f(more)g(e\016cien)o (t)h(metho)q(d,)e(for)i(example,)e(o)o(v)o(er)i(a)f(spanning)g(tree)i (where)249 1857 y(eac)o(h)h(no)q(de)h(propagates)f(the)g(message)g(to)g (its)g(descenden)o(ts.)249 1925 y Fr(bu\013er)19 b FA(A)d(temp)q(orary) f(storage)h(area)g(in)f(memory)m(.)20 b(Man)o(y)15 b(metho)q(ds)g(for)h (routing)f(messages)h(b)q(e-)249 1979 y(t)o(w)o(een)e(pro)q(cessors)h (use)f(bu\013ers)g(at)e(the)i(source)g(and)f(destination)g(or)f(at)h (in)o(termediate)f(pro)q(cessors.)249 2048 y Fr(bus)20 b FA(A)f(single)f(ph)o(ysical)g(comm)o(unications)e(medium)g(shared)k (b)o(y)f(t)o(w)o(o)f(or)h(more)f(devices.)34 b(The)249 2101 y(net)o(w)o(ork)16 b(shared)h(b)o(y)e(pro)q(cessors)j(in)e(man)o (y)e(distributed)i(computers)g(is)f(a)h(bus,)g(as)g(is)g(the)g(shared) 249 2155 y(data)e(path)f(in)h(man)o(y)e(m)o(ultipro)q(cessors.)249 2224 y Fr(cac)o(he)k(consistency)i FA(The)11 b(problem)d(of)h(ensuring) h(that)g(the)g(v)n(alues)g(asso)q(ciated)g(with)g(a)f(particular)249 2278 y(v)n(ariable)k(in)g(the)i(cac)o(hes)g(of)e(sev)o(eral)i(pro)q (cessors)h(are)e(nev)o(er)h(visibly)e(di\013eren)o(t.)249 2346 y Fr(c)o(hannel)19 b FA(A)e(p)q(oin)o(t-to-p)q(oin)o(t)f (connection)i(through)f(whic)o(h)g(messages)g(can)h(b)q(e)g(sen)o(t.)29 b(Program-)249 2400 y(ming)12 b(systems)j(that)f(rely)h(on)f(c)o (hannels)h(are)f(sometimes)f(called)h(connection)h(orien)o(ted,)f(to)h (distin-)249 2454 y(guish)10 b(them)f(from)g(connectionless)i(systems)g (in)f(whic)o(h)g(messages)g(are)h(sen)o(t)g(to)f(named)f(destinations) 249 2508 y(rather)15 b(than)f(through)g(named)e(c)o(hannels.)p eop %%Page: 164 183 164 182 bop 249 251 a Fu(164)1392 b(Glossary)249 507 y Fr(circuit)19 b FA(A)h(net)o(w)o(ork)g(where)i(connections)f(are)g (established)g(b)q(et)o(w)o(een)g(senders)i(and)d(receiv)o(ers,)249 561 y(reserving)15 b(net)o(w)o(ork)f(resources.)20 b(Compare)13 b(with)h FB(p)n(acket)h(switching)p FA(.)249 632 y Fr(com)o(bining)i FA(Joining)e(messages)h(together)g(as)g(they)g(tra)o(v)o(erse)h(a)e (net)o(w)o(ork.)24 b(Com)o(bining)13 b(ma)o(y)g(b)q(e)249 686 y(done)h(to)g(reduce)h(the)g(total)e(tra\016c)h(in)f(the)h(net)o(w) o(ork,)g(to)f(reduce)j(the)e(n)o(um)o(b)q(er)f(of)g(times)g(the)i (start-)249 740 y(up)j(p)q(enalt)o(y)g(of)g(messaging)e(is)i(incurred,) i(or)e(to)g(reduce)i(the)e(n)o(um)o(b)q(er)g(of)f(messages)h(reac)o (hing)g(a)249 794 y(particular)c(destination.)249 864 y Fr(comm)o(unication)e(o)o(v)o(erhead)19 b FA(A)11 b(measure)g(of)g (the)g(additional)f(w)o(orkload)g(incurred)i(in)e(a)h(parallel)249 918 y(algorithm)g(as)j(a)g(result)h(of)e(comm)o(unicatio)o(n)e(b)q(et)o (w)o(een)k(the)g(no)q(des)g(of)e(the)h(parallel)f(system.)249 989 y Fr(computation-t)o(o-comm)o(u)o(ni)o(cati)o(on)f(ratio)20 b FA(The)10 b(ratio)g(of)f(the)i(n)o(um)o(b)q(er)e(of)h(calculations)f (a)h(pro-)249 1043 y(cess)15 b(do)q(es)g(to)f(the)g(total)f(size)i(of)e (the)i(messages)e(it)h(sends;)h(alternativ)o(ely)m(,)d(the)i(ratio)f (of)h(time)e(sp)q(en)o(t)249 1097 y(calculating)k(to)g(time)g(sp)q(en)o (t)i(comm)o(unicati)o(ng,)c(whic)o(h)j(dep)q(ends)h(on)f(the)g(relativ) o(e)g(sp)q(eeds)h(of)e(the)249 1151 y(pro)q(cessor)g(and)d(comm)o (unications)e(medium,)f(and)k(on)f(the)i(startup)f(cost)g(and)g (latency)g(of)f(comm)o(u-)249 1205 y(nication.)249 1275 y Fr(con)o(ten)o(tion)33 b FA(Con\015ict)14 b(that)h(arises)g(when)g(t) o(w)o(o)f(or)h(more)e(requests)j(are)f(made)f(concurren)o(tly)h(for)249 1329 y(a)f(resource)i(that)f(cannot)f(b)q(e)h(shared.)20 b(Pro)q(cesses)e(running)c(on)g(a)g(single)g(pro)q(cessor)i(ma)o(y)c (con)o(tend)249 1383 y(for)k(CPU)g(time,)e(or)i(a)g(net)o(w)o(ork)g(ma) o(y)e(su\013er)j(from)d(con)o(ten)o(tion)i(if)f(sev)o(eral)h(messages)g (attempt)f(to)249 1437 y(tra)o(v)o(erse)g(the)g(same)e(link)g(at)g(the) i(same)e(time.)249 1508 y Fr(con)o(text)h(switc)o(hing)34 b FA(Sa)o(ving)15 b(the)i(state)g(of)f(one)g(pro)q(cess)i(and)e (replacing)g(it)g(with)g(that)g(of)f(an-)249 1562 y(other.)38 b(If)20 b(little)f(time)g(is)h(required)h(to)f(switc)o(h)h(con)o (texts,)h(pro)q(cessor)g(o)o(v)o(erloading)d(can)h(b)q(e)h(an)249 1616 y(e\013ectiv)o(e)15 b(w)o(a)o(y)f(to)f(hide)h(latency)g(in)g(a)f (message-passing)h(system.)249 1686 y Fr(daemon)20 b FA(A)14 b(sp)q(ecial-purp)q(ose)h(pro)q(cess)h(that)e(runs)h(on)f(b)q (ehalf)g(of)f(the)i(system,)e(for)h(example,)e(the)249 1740 y(p)o(vmd)g(pro)q(cess)k(or)e(group)g(serv)o(er)h(task.)249 1811 y Fr(data)g(enco)q(ding)k FA(A)e(binary)e(represen)o(tation)j(for) e(data)g(ob)r(jects)i(\(e.g.,)d(in)o(tegers,)j(\015oating-p)q(oin)o(t) 249 1865 y(n)o(um)o(b)q(ers\))f(suc)o(h)g(as)h(XDR)e(or)h(the)g(nativ)o (e)g(format)e(of)h(a)h(micropro)q(cessor.)27 b(PVM)18 b(messages)f(can)249 1919 y(con)o(tain)d(data)f(in)g(XDR,)g(nativ)o(e,) g(or)h FB(fo)n(o)g FA(format.)249 1989 y Fr(data)h(parallelism)33 b FA(A)17 b(mo)q(del)f(of)g(parallel)g(computing)f(in)h(whic)o(h)h(a)g (single)f(op)q(eration)h(can)g(b)q(e)249 2043 y(applied)9 b(to)g(all)f(elemen)o(ts)h(of)g(a)g(data)g(structure)i(sim)o (ultaneously)m(.)j(T)o(ypically)m(,)8 b(these)j(data)e(structures)249 2097 y(are)18 b(arra)o(ys,)g(and)g(the)g(op)q(erations)g(act)f(indep)q (enden)o(tly)i(on)e(ev)o(ery)h(arra)o(y)g(elemen)o(t)f(or)g(reduction) 249 2151 y(op)q(erations.)249 2222 y Fr(deadlo)q(c)o(k)35 b FA(A)13 b(situation)f(in)g(whic)o(h)g(eac)o(h)h(p)q(ossible)g (activit)o(y)f(is)g(blo)q(c)o(k)o(ed,)g(w)o(aiting)g(on)g(some)f(other) 249 2276 y(activit)o(y)i(that)h(is)g(also)f(blo)q(c)o(k)o(ed.)249 2346 y Fr(distribu)o(ted)f(computer)35 b FA(A)15 b(computer)g(made)f (up)i(of)f(smaller)e(and)j(p)q(oten)o(tially)e(indep)q(enden)o(t)249 2400 y(computers,)h(suc)o(h)g(as)g(a)g(net)o(w)o(ork)g(of)f(w)o (orkstations.)21 b(This)15 b(arc)o(hitecture)h(is)f(increasingly)f (studied)249 2454 y(b)q(ecause)j(of)d(its)h(cost)h(e\013ectiv)o(eness)i (and)d(\015exibilit)o(y)m(.)k(Distributed)c(computers)h(are)f(often)g (hetero-)249 2508 y(geneous.)p eop %%Page: 165 184 165 183 bop 249 251 a Fu(Glossary)1393 b(165)249 507 y Fr(distribu)o(ted)12 b(memory)36 b FA(Memory)14 b(that)h(is)h(ph)o (ysically)e(distributed)i(among)d(sev)o(eral)j(mo)q(dules.)249 561 y(A)g(distributed-memory)e(arc)o(hitecture)j(ma)o(y)d(app)q(ear)i (to)g(users)h(to)f(ha)o(v)o(e)f(a)h(single)f(address)i(space)249 615 y(and)11 b(a)f(single)g(shared)i(memory)c(or)j(ma)o(y)e(app)q(ear)i (as)g(disjoin)o(t)e(memory)g(made)g(up)i(of)f(man)o(y)f(separate)249 669 y(address)15 b(spaces.)249 740 y Fr(DMA)21 b FB(Dir)n(e)n(ct)16 b(memory)h(ac)n(c)n(ess,)f FA(allo)o(wing)e(devices)j(on)f(a)f(bus)i (to)f(access)i(memory)13 b(without)j(in-)249 794 y(terfering)e(with)g (the)h(CPU.)249 864 y Fr(e\016ciency)20 b FA(A)13 b(measure)f(of)h (hardw)o(are)g(utilization,)e(equal)h(to)h(the)g(ratio)g(of)f(sp)q (eedup)i(ac)o(hiev)o(ed)f(on)249 918 y FB(P)h FA(pro)q(cessors)i(to)e FB(P)g FA(itself.)249 989 y Fr(Ethernet)19 b FA(A)i(p)q(opular)f(LAN)h (tec)o(hnology)f(in)o(v)o(en)o(ted)h(b)o(y)f(Xero)o(x.)39 b(Ethernet)22 b(is)f(a)f(10-Mbit/S)249 1043 y(CSMA/CD)d(\(Carrier)i (Sense)g(Multiple)d(Access)k(with)e(Collision)d(Detection\))k(bus.)29 b(Computers)249 1097 y(on)15 b(an)h(Ethernet)h(send)f(data)f(pac)o(k)o (ets)h(directly)g(to)g(one)f(another.)23 b(They)16 b(listen)g(for)f (the)h(net)o(w)o(ork)249 1151 y(to)g(b)q(ecome)h(idle)f(b)q(efore)h (transmitting,)e(and)i(retransmit)f(in)g(the)h(ev)o(en)o(t)g(that)g(m)o (ultiple)d(stations)249 1205 y(sim)o(ultaneously)e(attempt)h(to)h (send.)249 1275 y Fr(FDDI)20 b FB(Fib)n(er)12 b(Distribute)n(d)h(Data)g (Interfac)n(e,)f FA(a)f(standard)h(for)f(lo)q(cal)g(area)h(net)o(w)o (orks)g(using)g(optical)249 1329 y(\014b)q(er)i(and)e(a)h(100-Mbit/s)e (data)h(rate.)19 b(A)12 b FB(token)i FA(is)e(passed)i(among)c(the)k (stations)e(to)h(con)o(trol)f(access)249 1383 y(to)g(send)i(on)e(the)h (net)o(w)o(ork.)18 b(Net)o(w)o(orks)13 b(can)f(b)q(e)h(arranged)g(in)f (top)q(ologies)g(suc)o(h)h(as)f(stars,)h(trees,)h(and)249 1437 y(rings.)25 b(Indep)q(enden)o(t)18 b FB(c)n(ounter-r)n(otating)e FA(rings)g(allo)o(w)f(the)i(net)o(w)o(ork)f(to)g(con)o(tin)o(ue)g(to)h (function)e(in)249 1491 y(the)g(ev)o(en)o(t)f(that)g(a)g(station)f(or)h (link)f(fails.)249 1562 y Fr(FLOPS)20 b FB(Flo)n(ating-Point)h(Op)n(er) n(ations)g(p)n(er)h(Se)n(c)n(ond)p FA(,)h(a)e(measure)g(of)g(memory)e (access)k(p)q(erfor-)249 1616 y(mance,)13 b(equal)h(to)g(the)h(rate)f (at)g(whic)o(h)g(a)g(mac)o(hine)f(can)h(p)q(erform)g(single-precision)g (\015oating-p)q(oin)o(t)249 1670 y(calculations.)249 1740 y Fr(fork)20 b FA(T)m(o)d(create)i(another)f(cop)o(y)g(of)f(a)g (running)g(pro)q(cess;)k(fork)c(returns)i(t)o(wice.)30 b(Compare)16 b(with)249 1794 y FB(sp)n(awn)p FA(.)249 1865 y Fr(fragmen)o(t)j FA(A)11 b(con)o(tiguous)h(part)f(of)g(a)h (message.)17 b(Messages)c(are)f(fragmen)o(ted)e(so)i(they)g(can)g(b)q (e)g(sen)o(t)249 1919 y(o)o(v)o(er)i(a)g(net)o(w)o(ork)g(ha)o(ving)e (\014nite)i(maxim)o(um)9 b(pac)o(k)o(et)15 b(length.)249 1989 y Fr(group)k FA(A)14 b(set)h(of)e(tasks)i(assigned)f(a)f(common)f (sym)o(b)q(olic)g(name,)g(for)h(addressing)i(purp)q(oses.)249 2060 y Fr(gran)o(ularit)n(y)j FA(The)d(size)g(of)e(op)q(erations)i (done)g(b)o(y)f(a)g(pro)q(cess)i(b)q(et)o(w)o(een)f(comm)o(unications)c (ev)o(en)o(ts.)249 2114 y(A)h(\014ne-grained)h(pro)q(cess)h(ma)o(y)c(p) q(erform)h(only)h(a)g(few)g(arithmetic)f(op)q(erations)h(b)q(et)o(w)o (een)i(pro)q(cessing)249 2168 y(one)g(message)g(and)f(the)i(next,)f (whereas)h(a)f(coarse-grained)g(pro)q(cess)i(ma)o(y)c(p)q(erform)h (millio)o(ns.)249 2238 y Fr(heterogeneous)18 b FA(Con)o(taining)10 b(comp)q(onen)o(ts)i(of)g(more)f(than)h(one)h(kind.)k(A)12 b(heterogeneous)i(arc)o(hi-)249 2292 y(tecture)j(ma)o(y)c(b)q(e)i(one)g (in)g(whic)o(h)f(some)g(comp)q(onen)o(ts)h(are)g(pro)q(cessors,)i(and)e (others)g(memories,)e(or)249 2346 y(it)h(ma)o(y)e(b)q(e)i(one)g(that)g (uses)h(di\013eren)o(t)g(t)o(yp)q(es)g(of)e(pro)q(cessor)j(together.) 249 2417 y Fr(hierarc)o(hical)d(routing)18 b FA(Messages)e(are)f (routed)g(in)f(PVM)h(based)h(on)e(a)h(hierarc)o(hical)f(address)i(\(a) 249 2471 y(TID\).)9 b(TIDs)h(are)g(divided)f(in)o(to)h(host)g(and)f(lo) q(cal)g(parts)h(to)g(allo)o(w)e(e\016cien)o(t)i(lo)q(cal)f(and)h (global)e(routing.)p eop %%Page: 166 185 166 184 bop 249 251 a Fu(166)1392 b(Glossary)249 507 y Fr(HiPPI)20 b FB(High)c(Performanc)n(e)g(Par)n(al)r(lel)f(Interfac)n (e)p FA(,)h(a)f(p)q(oin)o(t-to-p)q(oin)o(t)f(100-MByte/sec)i(in)o (terface)249 561 y(standard)c(used)h(for)f(net)o(w)o(orking)g(comp)q (onen)o(ts)f(of)h(high-p)q(erformance)f(m)o(ulticom)o(puters)g (together.)249 632 y Fr(host)20 b FA(A)d(computer,)g(esp)q(ecially)h(a) f(self-complete)g(one)g(on)g(a)g(net)o(w)o(ork)h(with)f(others.)29 b(Also,)17 b(the)249 686 y(fron)o(t-end)d(supp)q(ort)h(mac)o(hine)d (for,)h(for)h(example,)e(a)i(m)o(ultipro)q(cessor.)249 756 y Fr(hoster)19 b FA(A)14 b(sp)q(ecial)g(PVM)h(task)f(that)f(p)q (erforms)h(sla)o(v)o(e)f(p)o(vmd)g(startup)h(for)g(the)g(master)g(p)o (vmd.)249 827 y Fr(in)o(terv)m(al)g(routing)k FA(A)12 b(routing)g(algorithm)d(that)j(assigns)h(an)f(in)o(teger)g(iden)o (ti\014er)h(to)f(eac)o(h)h(p)q(ossible)249 881 y(destination)19 b(and)g(then)h(lab)q(els)f(the)h(outgoing)d(links)i(of)g(eac)o(h)g(no)q (de)h(with)f(a)f(single)h(con)o(tiguous)249 935 y(in)o(terv)n(al)13 b(or)h(windo)o(w)f(so)h(that)g(a)f(message)h(can)g(b)q(e)g(routed)h (simply)c(b)o(y)j(sending)g(it)g(out)f(the)i(link)d(in)249 989 y(whose)j(in)o(terv)n(al)e(its)g(destination)h(iden)o(ti\014er)g (falls.)249 1059 y Fr(in)o(terrup)o(t-d)o(ri)o(v)o(en)e(system)20 b FA(A)c(t)o(yp)q(e)g(of)f(message-passing)g(system.)24 b(When)15 b(a)h(message)f(is)h(de-)249 1113 y(liv)o(ered)i(to)g(its)g (destination)g(pro)q(cess,)j(it)d(in)o(terrupts)h(execution)g(of)e (that)i(pro)q(cess)h(and)e(initiates)249 1167 y(execution)e(of)f(an)g (in)o(terrupt)h(handler,)f(whic)o(h)g(ma)o(y)e(either)j(pro)q(cess)h (the)f(message)f(or)g(store)i(it)d(for)249 1221 y(subsequen)o(t)f (retriev)n(al.)k(On)12 b(completion)d(of)i(the)g(in)o(terrupt)h (handler)g(\(whic)o(h)f(ma)o(y)e(set)j(some)e(\015ag)h(or)249 1275 y(sends)g(some)e(signal)g(to)h(denote)h(an)f(a)o(v)n(ailable)e (message\),)i(the)g(original)e(pro)q(cess)k(resumes)f(execution.)249 1346 y Fr(IP)21 b FB(Internet)e(Pr)n(oto)n(c)n(ol)p FA(,)h(the)f(In)o (ternet)i(standard)e(proto)q(col)g(that)g(enables)h(sending)g (datagrams)249 1400 y(\(blo)q(c)o(ks)13 b(of)f(data\))h(b)q(et)o(w)o (een)h(hosts)g(on)e(in)o(terconnected)j(net)o(w)o(orks.)k(It)13 b(pro)o(vides)g(a)f(connectionless,)249 1454 y(b)q(est-e\013ort)18 b(deliv)o(ery)f(service.)27 b(IP)17 b(and)f(the)h(ICMP)g(con)o(trol)f (proto)q(col)h(are)g(the)g(building)e(blo)q(c)o(ks)249 1508 y(for)f(other)g(proto)q(cols)g(suc)o(h)h(as)f(TCP)g(and)g(UDP)m(.) 249 1578 y Fr(k)o(ernel)19 b FA(A)c(program)f(pro)o(viding)h(basic)g (services)i(on)f(a)f(computer,)g(suc)o(h)h(as)g(managing)c(memory)m(,) 249 1632 y(devices,)j(and)e(\014le)h(systems.)k(A)c(k)o(ernel)g(ma)o(y) e(pro)o(vide)h(minima)o(l)e(service)k(\(as)f(on)f(a)g(m)o(ultipro)q (cessor)249 1686 y FB(no)n(de)p FA(\))j(or)f(man)o(y)e(features)j(\(as) f(on)g(a)f(Unix)h(mac)o(hine\).)20 b(Alternativ)o(ely)m(,)14 b(a)g(k)o(ernel)i(ma)o(y)d(b)q(e)i(a)g(basic)249 1740 y(computational)h(building-blo)q(c)o(k)g(\(suc)o(h)j(as)f(a)f(fast)h(F) m(ourier)g(transform\))f(used)i(iterativ)o(ely)f(or)f(in)249 1794 y(parallel)c(to)h(p)q(erform)f(a)g(larger)h(computation.)249 1865 y Fr(latency)20 b FA(The)d(time)e(tak)o(en)h(to)h(service)g(a)g (request)h(or)e(deliv)o(er)h(a)f(message)g(that)g(is)h(indep)q(enden)o (t)249 1919 y(of)f(the)h(size)f(or)h(nature)g(of)e(the)i(op)q(eration.) 25 b(The)17 b(latency)f(of)g(a)g(message-passing)f(system)h(is)g(the) 249 1973 y(minim)n(um)10 b(time)i(to)i(deliv)o(er)g(an)o(y)f(message.) 249 2043 y Fr(Libp)o(vm)18 b FA(The)11 b(core)g(PVM)g(programming)c (library)m(,)i(allo)o(wing)f(a)i(task)h(to)f(in)o(terface)h(with)f(the) h(p)o(vmd)249 2097 y(and)j(other)g(tasks.)249 2168 y Fr(linear)g(sp)q(eedup)19 b FA(The)9 b(case)i(when)f(a)f(program)f (runs)i(faster)h(in)e(direct)h(prop)q(ortion)f(to)h(the)g(n)o(um)o(b)q (er)249 2222 y(of)j(pro)q(cessors)j(used.)249 2292 y Fr(little-en)o(di)o(an)h FA(A)c(binary)e(data)h(format)e(is)i(whic)o(h) g(the)g(least)h(signi\014can)o(t)e(b)o(yte)h(or)g(bit)g(comes)g (\014rst.)249 2346 y(See)j(also)e FB(big-endian)p FA(.)249 2417 y Fr(load)i(balance)k FA(The)d(degree)h(to)e(whic)o(h)g(w)o(ork)g (is)g(ev)o(enly)h(distributed)g(among)d(a)o(v)n(ailable)g(pro)q(ces-) 249 2471 y(sors.)19 b(A)14 b(program)e(executes)k(most)c(quic)o(kly)h (when)h(it)f(is)h(p)q(erfectly)h(load)d(balanced,)i(that)f(is,)h(when)p eop %%Page: 167 186 167 185 bop 249 251 a Fu(Glossary)1393 b(167)249 507 y FA(ev)o(ery)17 b(pro)q(cessor)h(has)e(a)f(share)i(of)e(the)i(total)e (amoun)o(t)f(of)i(w)o(ork)f(to)h(p)q(erform)f(so)h(that)g(all)f(pro)q (ces-)249 561 y(sors)h(complete)e(their)i(assigned)f(tasks)h(at)f(the)h (same)e(time.)20 b(One)c(measure)f(of)g(load)f(im)o(balance)f(is)249 615 y(the)i(ratio)f(of)g(the)i(di\013erence)g(b)q(et)o(w)o(een)g(the)f (\014nishing)f(times)g(of)g(the)h(\014rst)h(and)e(last)g(pro)q(cessors) j(to)249 669 y(complete)c(their)i(p)q(ortion)e(of)g(the)i(calculation)e (to)h(the)g(time)f(tak)o(en)h(b)o(y)f(the)i(last)e(pro)q(cessor.)249 740 y Fr(lo)q(calit)o(y)35 b FA(The)15 b(degree)i(to)e(whic)o(h)g (computations)f(done)h(b)o(y)g(a)g(pro)q(cessor)i(dep)q(end)g(only)d (on)h(data)249 794 y(held)f(in)g(memory)e(that)i(is)g FB(close)g FA(to)g(that)g(pro)q(cessor.)21 b(Also,)13 b(the)i(degree)g(to)f(whic)o(h)g(computations)249 848 y(done)k(on)f(part)g(of)g(a)g(data)g(structure)i(dep)q(end)g(only)d(on) h(neigh)o(b)q(oring)g(v)n(alues.)28 b(Lo)q(calit)o(y)16 b(can)h(b)q(e)249 902 y(measured)10 b(b)o(y)f(the)i(ratio)e(of)g(lo)q (cal)g(to)g(nonlo)q(cal)g(data)g(accesses,)k(or)d(b)o(y)f(the)i (distribution)e(of)g(distances)249 956 y(of,)k(or)h(times)f(tak)o(en)h (b)o(y)m(,)e(nonlo)q(cal)h(accesses.)249 1026 y Fr(lo)q(c)o(k)36 b FA(A)16 b(device)g(or)f(algorithm)e(the)j(use)g(of)f(whic)o(h)g (guaran)o(tees)h(some)f(t)o(yp)q(e)h(of)e(exclusiv)o(e)i(access)249 1080 y(to)e(a)f(shared)i(resource.)249 1151 y Fr(lo)q(ose)g(sync)o (hronizatio)o(n)34 b FA(The)14 b(situation)g(when)g(the)h(no)q(des)g (on)f(a)g(computer)g(are)g(constrained)249 1205 y(to)d(in)o(termitten)o (tly)e(sync)o(hronize)k(with)d(eac)o(h)i(other)f(via)f(some)g(comm)o (unication.)k(F)m(requen)o(tly)m(,)d(some)249 1259 y(global)17 b(computational)g(parameter)i(suc)o(h)g(as)g(a)g(time)f(or)h(iteration) f(coun)o(t)i(pro)o(vides)f(a)g(natural)249 1313 y(sync)o(hronization)f (reference.)31 b(This)18 b(parameter)f(divides)h(the)g(running)g (program)e(in)o(to)h(compute)249 1367 y(and)d(comm)o(unicatio)o(n)d (cycles.)249 1437 y Fr(mapping)34 b FA(An)14 b(allo)q(cation)d(of)i (pro)q(cesses)j(to)d(pro)q(cessors;)i(allo)q(cating)c(w)o(ork)i(to)g (pro)q(cesses)j(is)d(usu-)249 1491 y(ally)g(called)g(sc)o(heduling.)249 1562 y Fr(memory)i(protection)34 b FA(An)o(y)12 b(system)g(that)h(prev) o(en)o(ts)h(one)f(pro)q(cess)h(from)d(accessing)i(a)f(region)h(of)249 1616 y(memory)e(b)q(eing)i(used)h(b)o(y)f(another.)18 b(Memory)13 b(protection)h(is)f(supp)q(orted)h(in)f(most)f(serial)h (comput-)249 1670 y(ers)18 b(b)o(y)g(the)f(hardw)o(are)h(and)f(the)h (op)q(erating)f(system)h(and)f(in)g(most)f(parallel)g(computers)h(b)o (y)g(the)249 1724 y(hardw)o(are)d(k)o(ernel)h(and)e(service)j(k)o (ernel)e(of)f(the)i(pro)q(cessors.)249 1794 y Fr(mesh)20 b FA(A)d(top)q(ology)e(in)i(whic)o(h)g(no)q(des)g(form)f(a)g(regular)h (acyclic)g Fn(d)p FA(-dimensional)d(grid,)j(and)g(eac)o(h)249 1848 y(edge)d(is)e(parallel)g(to)h(a)f(grid)h(axis)f(and)h(joins)f(t)o (w)o(o)g(no)q(des)i(that)f(are)g(adjacen)o(t)g(along)f(that)g(axis.)18 b(The)249 1902 y(arc)o(hitecture)h(of)e(man)o(y)e(m)o(ulticomputers)g (is)i(a)g(t)o(w)o(o-)g(or)g(three-dimensional)f(mesh;)i(meshes)g(are) 249 1956 y(also)e(the)h(basis)f(of)g(man)o(y)e(scien)o(ti\014c)k (calculations,)e(in)g(whic)o(h)g(eac)o(h)h(no)q(de)f(represen)o(ts)k(a) c(p)q(oin)o(t)f(in)249 2010 y(space,)g(and)e(the)i(edges)g(de\014ne)g (the)f(neigh)o(b)q(ors)g(of)f(a)h(no)q(de.)249 2081 y Fr(message)h(ID)21 b FA(An)14 b(in)o(teger)g(handle)g(used)h(to)e (reference)k(a)c(message)h(bu\013er)h(in)e(libp)o(vm.)249 2151 y Fr(message)i(passing)35 b FA(A)15 b(st)o(yle)g(of)f(in)o(terpro) q(cess)j(comm)o(unicatio)o(n)12 b(in)j(whic)o(h)f(pro)q(cesses)k(send)d (dis-)249 2205 y(crete)h(messages)e(to)g(one)g(another.)19 b(Some)13 b(computer)g(arc)o(hitectures)j(are)f(called)f (message-passing)249 2259 y(arc)o(hitectures)f(b)q(ecause)f(they)f (supp)q(ort)g(this)g(mo)q(del)e(in)h(hardw)o(are,)h(although)e(message) i(passing)f(has)249 2313 y(often)15 b(b)q(een)i(used)f(to)f(construct)i (op)q(erating)f(systems)f(and)g(net)o(w)o(ork)h(soft)o(w)o(are)f(for)g (unipro)q(cessors)249 2367 y(and)f(distributed)g(computers.)249 2438 y Fr(message)h(tag)21 b FA(An)14 b(in)o(teger)g(co)q(de)h(\(c)o (hosen)f(b)o(y)g(the)g(programmer\))e(b)q(ound)i(to)g(a)f(message)h(as) g(it)f(is)249 2492 y(sen)o(t.)19 b(Messages)c(can)f(b)q(e)h(accepted)h (b)o(y)d(tag)h(v)n(alue)f(and/or)g(source)j(address)f(at)f(the)g (destination.)p eop %%Page: 168 187 168 186 bop 249 251 a Fu(168)1392 b(Glossary)249 507 y Fr(message)15 b(t)o(yping)35 b FA(The)21 b(asso)q(ciation)f(of)g (information)e(with)i(a)g(message)h(that)f(iden)o(ti\014es)h(the)249 561 y(nature)13 b(of)f(its)g(con)o(ten)o(ts.)18 b(Most)13 b(message-passing)e(systems)i(automatically)c(transfer)k(information) 249 615 y(ab)q(out)h(a)g(message's)g(sender)h(to)f(its)g(receiv)o(er.) 21 b(Man)o(y)13 b(also)h(require)h(the)f(sender)i(to)e(sp)q(ecify)h(a)f (t)o(yp)q(e)249 669 y(for)d(the)h(message,)f(and)f(let)i(the)f(receiv)o (er)i(select)g(whic)o(h)e(t)o(yp)q(es)h(of)e(messages)h(it)g(is)g (willing)e(to)i(receiv)o(e.)249 723 y(See)k FB(message)g(tag)p FA(.)249 794 y Fr(MIMD)37 b FB(Multiple-Instruction)16 b(Multiple-Data)p FA(,)g(a)f(category)i(of)e(Flynn's)g(taxonom)o(y)f (in)h(whic)o(h)249 848 y(man)o(y)f(instruction)i(streams)g(are)g (concurren)o(tly)h(applied)e(to)g(m)o(ultiple)f(data)h(sets.)25 b(A)16 b(MIMD)f(ar-)249 902 y(c)o(hitecture)h(is)d(one)i(in)e(whic)o(h) h(heterogeneous)i(pro)q(cesses)g(ma)o(y)c(execute)k(at)e(di\013eren)o (t)g(rates.)249 972 y Fr(m)o(ulticast)k FA(T)m(o)f(send)h(a)f(message)h (to)f(man)o(y)m(,)f(but)i(not)f(necessarily)i(all)d(p)q(ossible)i (recipien)o(t)g(pro-)249 1026 y(cesses.)249 1097 y Fr(m)o(ulticompu)o (te)o(r)g FA(A)9 b(computer)g(in)g(whic)o(h)g(pro)q(cessors)j(can)d (execute)i(separate)g(instruction)e(streams,)249 1151 y(can)j(ha)o(v)o(e)f(their)h(o)o(wn)f(priv)n(ate)g(memories,)e(and)j (cannot)f(directly)h(access)h(one)f(another's)g(memories.)249 1205 y(Most)h(m)o(ulticomputers)e(are)j(disjoin)o(t)e(memory)f(mac)o (hines,)h(constructed)j(b)o(y)e(joining)e(no)q(des)j(\(eac)o(h)249 1259 y(con)o(taining)f(a)g(micropro)q(cessor)i(and)e(some)g(memory\))f (via)h(links.)249 1329 y Fr(m)o(ultipr)o(o)q(cessor)18 b FA(A)9 b(computer)g(in)g(whic)o(h)g(pro)q(cessors)i(can)f(execute)h (separate)f(instruction)g(streams,)249 1383 y(but)20 b(ha)o(v)o(e)g(access)h(to)f(a)f(single)h(address)h(space.)37 b(Most)20 b(m)o(ultipro)q(cessors)g(are)g(shared-memory)249 1437 y(mac)o(hines,)c(constructed)j(b)o(y)e(connecting)g(sev)o(eral)g (pro)q(cessors)i(to)e(one)g(or)g(more)f(memory)e(banks)249 1491 y(through)g(a)g(bus)g(or)g(switc)o(h.)249 1562 y Fr(m)o(ultipr)o(o)q(cessor)f(host)19 b FA(The)11 b(fron)o(t-end)g(supp) q(ort)g(mac)o(hine)e(of,)h(for)g(example,)f(a)h(m)o(ulticomputer.)249 1616 y(It)h(ma)o(y)e(serv)o(e)j(to)e(b)q(o)q(ot)h(the)g(m)o (ulticomputer,)e(pro)o(vide)h(net)o(w)o(ork)h(access,)i(\014le)d (service,)j(etc.)18 b(Utilities)249 1670 y(suc)o(h)d(as)f(compilers)f (ma)o(y)e(run)k(only)e(on)g(the)i(fron)o(t-end)f(mac)o(hine.)249 1740 y Fr(m)o(ultitaski)o(ng)j FA(Executing)e(man)o(y)c(pro)q(cesses)17 b(on)c(a)h(single)f(pro)q(cessor.)20 b(This)14 b(is)f(usually)g(done)h (b)o(y)249 1794 y(time-slicing)f(the)i(execution)h(of)e(individual)f (pro)q(cesses)k(and)e(p)q(erforming)e(a)i(con)o(text)g(switc)o(h)h(eac) o(h)249 1848 y(time)g(a)h(pro)q(cess)i(is)e(sw)o(app)q(ed)h(in)f(or)g (out,)g(but)h(is)f(supp)q(orted)h(b)o(y)f(sp)q(ecial-purp)q(ose)i (hardw)o(are)e(in)249 1902 y(some)e(computers.)24 b(Most)17 b(op)q(erating)e(systems)i(supp)q(ort)f(m)o(ultitasking,)d(but)k(it)e (can)h(b)q(e)h(costly)f(if)249 1956 y(the)d(need)g(to)f(switc)o(h)g (large)g(cac)o(hes)i(or)e(execution)h(pip)q(elines)f(mak)o(es)f(con)o (text)i(switc)o(hing)f(exp)q(ensiv)o(e)249 2010 y(in)h(time.)249 2081 y Fr(m)o(utual)h(exclusion)k FA(A)13 b(situation)g(in)g(whic)o(h)h (at)f(most)g(one)g(pro)q(cess)j(can)d(b)q(e)i(engaged)e(in)h(a)f(sp)q (ec-)249 2135 y(i\014ed)h(activit)o(y)f(at)h(an)o(y)f(time.)k (Semaphores)d(are)g(often)g(used)h(to)e(implemen)o(t)e(this.)249 2205 y Fr(net)o(w)o(ork)19 b FA(A)f(ph)o(ysical)e(comm)o(unication)e (medium.)25 b(A)17 b(net)o(w)o(ork)h(ma)o(y)d(consist)j(of)e(one)i(or)f (more)249 2259 y(buses,)e(a)e(switc)o(h,)h(or)g(the)g(links)g(joining)e (pro)q(cessors)k(in)d(a)h(m)o(ulticomputer.)249 2330 y Fr(net)o(w)o(ork)g(b)o(yte)h(order)20 b FA(The)14 b(In)o(ternet)h (standard)f(b)o(yte)h(order)f(\(big-endian\).)249 2400 y Fr(no)q(de)20 b FA(Basic)g(compute)g(building)e(blo)q(c)o(k)i(of)f(a) g(m)o(ulticomputer.)34 b(T)o(ypically)18 b(a)i(no)q(de)g(refers)h(to) 249 2454 y(a)f(pro)q(cessor)j(with)d(a)g(memory)e(system)i(and)h(a)f (mec)o(hanism)e(for)i(comm)o(unicating)d(with)j(other)249 2508 y(pro)q(cessors)c(in)e(the)g(system.)p eop %%Page: 169 188 169 187 bop 249 251 a Fu(Glossary)1393 b(169)249 507 y Fr(non-blo)q(c)o(king)17 b FA(An)f(op)q(eration)f(that)g(do)q(es)i (not)e(blo)q(c)o(k)g(the)h(execution)g(of)f(the)h(pro)q(cess)h(using)e (it.)249 561 y(The)k(term)f(is)h(usually)f(applied)g(to)h(comm)o (unicatio)o(ns)e(op)q(erations,)i(where)h(it)f(implies)e(that)h(the)249 615 y(comm)o(unicating)f(pro)q(cess)22 b(ma)o(y)c(p)q(erform)h(other)i (op)q(erations)g(b)q(efore)f(the)h(comm)o(unication)c(has)249 669 y(completed.)249 738 y Fr(notify)i FA(A)d(message)h(generated)g(b)o (y)g(PVM)f(on)h(a)f(sp)q(eci\014ed)i(ev)o(en)o(t.)26 b(A)17 b(task)g(ma)o(y)d(request)k(to)e(b)q(e)249 792 y(noti\014ed)e(when)g(another)h(task)f(exits)g(or)g(the)g(virtual)f (mac)o(hine)g(con\014guration)g(c)o(hanges.)249 861 y Fr(NUMA)37 b FB(Non-Uniform)12 b(Memory)g(A)n(c)n(c)n(ess)p FA(,)f(an)f(arc)o(hitecture)j(that)e(do)q(es)g(not)g(supp)q(ort)h (constan)o(t-)249 915 y(time)j(read)h(and)g(write)g(op)q(erations.)24 b(In)16 b(most)f(NUMA)h(systems,)g(memory)d(is)j(organized)g(hierar-) 249 969 y(c)o(hically)m(,)f(so)g(that)h(some)f(p)q(ortions)h(can)g(b)q (e)h(read)f(and)g(written)g(more)f(quic)o(kly)g(than)h(others)h(b)o(y)e (a)249 1023 y(giv)o(en)e(pro)q(cessor.)249 1092 y Fr(pac)o(k)o(et)20 b FA(A)14 b(quan)o(tit)o(y)f(of)g(data)h(sen)o(t)g(o)o(v)o(er)g(the)h (net)o(w)o(ork.)249 1161 y Fr(pac)o(k)o(et)g(switc)o(hing)j FA(A)12 b(net)o(w)o(ork)h(in)f(whic)o(h)g(limited-length)e(pac)o(k)o (ets)j(are)g(routed)g(indep)q(enden)o(tly)249 1215 y(from)f(source)j (to)f(destination.)k(Net)o(w)o(ork)c(resources)i(are)f(not)e(reserv)o (ed.)21 b(Compare)12 b(with)i FB(cir)n(cuit)p FA(.)249 1284 y Fr(parallel)f(computer)35 b FA(A)12 b(computer)h(system)f(made)f (up)i(of)f(man)o(y)e(iden)o(ti\014able)i(pro)q(cessing)i(units)249 1338 y(w)o(orking)19 b(together)i(in)f(parallel.)35 b(The)20 b(term)g(is)g(often)g(used)h(synon)o(ymously)d(with)h(concurren)o(t)249 1392 y(computer)e(to)h(include)g(b)q(oth)f(m)o(ultipro)q(cessor)g(and)h (m)o(ulticom)o(puter.)28 b(The)18 b(term)f FB(c)n(oncurr)n(ent)g FA(is)249 1446 y(more)12 b(commonly)d(used)14 b(in)e(the)i(United)f (States,)g(whereas)h(the)f(term)g FB(p)n(ar)n(al)r(lel)e FA(is)i(more)f(common)d(in)249 1500 y(Europ)q(e.)249 1569 y Fr(parallel)k(slac)o(kness)35 b FA(Hiding)9 b(the)h(latency)f (of)g(comm)o(unicati)o(on)e(b)o(y)i(giving)e(eac)o(h)j(pro)q(cessor)h (man)o(y)249 1623 y(di\013eren)o(t)16 b(tasks,)f(and)g(ha)o(ving)f(the) i(pro)q(cessors)h(w)o(ork)e(on)g(the)g(tasks)h(that)f(are)g(ready)h (while)e(other)249 1677 y(tasks)g(are)h(blo)q(c)o(k)o(ed)f(\(w)o (aiting)e(on)i(comm)o(unicatio)o(n)d(or)j(other)h(op)q(erations\).)249 1746 y Fr(PID)20 b FB(Pr)n(o)n(c)n(ess)15 b(Identi\014er)f FA(\(in)f(UNIX\))i(that)f(is)f(nativ)o(e)h(to)g(a)f(mac)o(hine)g(or)h (op)q(erating)f(system.)249 1815 y Fr(p)q(olling)34 b FA(An)12 b(alternativ)o(e)g(to)g(in)o(terrupting)g(in)g(a)g(comm)o (unication)d(system.)17 b(A)c(no)q(de)f(insp)q(ects)i(its)249 1869 y(comm)o(unication)c(hardw)o(are)j(\(t)o(ypically)f(a)h(\015ag)f (bit\))h(to)g(see)h(whether)h(information)10 b(has)j(arriv)o(ed)g(or) 249 1923 y(departed.)249 1992 y Fr(priv)m(ate)i(memory)35 b FA(Memory)15 b(that)h(app)q(ears)h(to)f(the)h(user)g(to)f(b)q(e)g (divided)g(b)q(et)o(w)o(een)h(man)o(y)d(ad-)249 2046 y(dress)g(spaces,)f(eac)o(h)g(of)e(whic)o(h)i(can)f(b)q(e)h(accessed)h (b)o(y)e(only)g(one)g(pro)q(cess.)19 b(Most)13 b(op)q(erating)f (systems)249 2100 y(rely)k(on)g(some)f(memory)e(protection)j(mec)o (hanism)e(to)i(prev)o(en)o(t)h(one)f(pro)q(cess)h(from)d(accessing)j (the)249 2154 y(priv)n(ate)c(memory)e(of)i(another;)g(in)g(disjoin)o (t-memo)o(ry)e(mac)o(hines,)h(the)i(problem)e(is)h(usually)g(\014nding) 249 2208 y(a)h(w)o(a)o(y)f(to)h(em)o(ulate)e(shared)j(memory)c(using)j (a)g(set)g(of)g(priv)n(ate)f(memories.)249 2277 y Fr(pro)q(cess)20 b FA(An)14 b(address)h(space,)g(I/O)e(state,)i(and)e(one)i(or)e(more)g (threads)i(of)e(program)g(con)o(trol.)249 2346 y Fr(pro)q(cess)i (creation)35 b FA(The)15 b(act)h(of)e(forking)g(or)g(spa)o(wning)h(a)f (new)i(pro)q(cess.)23 b(If)14 b(a)h(system)g(p)q(ermits)249 2400 y(only)e(static)h(pro)q(cess)i(creation,)e(then)g(all)f(pro)q (cesses)j(are)f(created)g(at)f(the)g(same)f(logical)f(time,)g(and)249 2454 y(no)i(pro)q(cess)i(ma)o(y)c(in)o(teract)j(with)f(an)o(y)f(other)i (un)o(til)e(all)g(ha)o(v)o(e)h(b)q(een)i(created.)k(If)14 b(a)g(system)g(p)q(ermits)249 2508 y(dynamic)g(pro)q(cess)k(creation,)e (then)g(one)g(pro)q(cess)i(can)e(create)h(another)f(at)g(an)o(y)f (time.)22 b(Most)16 b(\014rst)p eop %%Page: 170 189 170 188 bop 249 251 a Fu(170)1392 b(Glossary)249 507 y FA(and)11 b(second)g(generation)g(m)o(ulticomputers)e(only)g(supp)q (orted)j(static)f(pro)q(cess)i(creation,)e(while)f(most)249 561 y(m)o(ultipro)q(cessors,)i(and)h(most)e(op)q(erating)i(systems)g (on)f(unipro)q(cessors,)j(supp)q(ort)e(dynamic)e(pro)q(cess)249 615 y(creation.)249 679 y Fr(pro)q(cess)k(group)35 b FA(A)14 b(set)h(of)f(pro)q(cesses)j(that)d(can)g(b)q(e)h(treated)g(as)f (a)g(single)g(en)o(tit)o(y)g(for)g(some)f(pur-)249 733 y(p)q(oses,)j(suc)o(h)h(as)e(sync)o(hronization)g(and)h(broadcast)g(or) f(m)o(ulticast)f(op)q(erations.)22 b(In)16 b(some)e(parallel)249 787 y(programming)c(systems)k(there)g(is)g(only)f(one)g(pro)q(cess)j (group,)d(whic)o(h)g(implicitly)d(con)o(tains)k(all)e(pro-)249 841 y(cesses;)i(in)e(others,)g(programmers)e(can)i(assign)f(pro)q (cesses)j(to)e(groups)g(statically)e(when)i(con\014guring)249 895 y(their)j(program,)e(or)i(dynamically)d(b)o(y)i(ha)o(ving)g(pro)q (cesses)j(create,)f(join)e(and)h(lea)o(v)o(e)f(groups)h(during)249 949 y(execution.)249 1013 y Fr(pro)q(cess)g(migration)34 b FA(Changing)11 b(the)i(pro)q(cessor)h(resp)q(onsible)f(for)f (executing)h(a)f(pro)q(cess)i(during)249 1067 y(the)j(lifetime)e(of)h (that)h(pro)q(cess.)28 b(Pro)q(cess)19 b(migration)14 b(is)i(sometimes)f(used)j(to)e(dynamically)e(load)249 1121 y(balance)g(a)g(program)e(or)i(system.)249 1185 y Fr(p)o(vmd)20 b FB(PVM)f(daemon)p FA(,)h(a)e(pro)q(cess)i(that)f (serv)o(es)h(as)f(a)f(message)g(router)h(and)g(virtual)e(mac)o(hine)249 1239 y(co)q(ordinator.)h(One)d(PVD)f(daemon)e(runs)j(on)e(eac)o(h)i (host)f(of)f(a)h(virtual)f(mac)o(hine.)249 1304 y Fr(race)j(condition)h FA(A)d(situation)f(in)h(whic)o(h)f(the)i(result)f(of)g(op)q(erations)g (b)q(eing)f(executed)j(b)o(y)e(t)o(w)o(o)f(or)249 1357 y(more)j(pro)q(cesses)j(dep)q(ends)f(on)e(the)h(order)g(in)f(whic)o(h)h (those)g(pro)q(cesses)i(execute,)f(for)f(example,)e(if)249 1411 y(t)o(w)o(o)e(pro)q(cesses)k Fn(A)d FA(and)g Fn(B)i FA(are)e(to)g(write)g(di\013eren)o(t)h(v)n(alues)f Fn(V)1218 1417 y Fk(A)1259 1411 y FA(and)g Fn(V)1364 1417 y Fk(B)1406 1411 y FA(to)g(the)g(same)f(v)n(ariable.)249 1476 y Fr(randomized)g (routing)34 b FA(A)11 b(routing)f(tec)o(hnique)i(in)e(whic)o(h)g(eac)o (h)h(message)g(is)f(sen)o(t)h(to)g(a)f(randomly)249 1530 y(c)o(hosen)16 b(no)q(de,)g(whic)o(h)f(then)h(forw)o(ards)g(it)f(to)g (its)g(\014nal)g(destination.)23 b(Theory)15 b(and)h(practice)g(sho)o (w)249 1584 y(that)e(this)g(can)g(greatly)g(reduce)i(the)e(amoun)o(t)f (of)g(con)o(ten)o(tion)h(for)g(access)h(to)f(links)g(in)f(a)h(m)o (ulticom)o(-)249 1638 y(puter.)249 1702 y Fr(resource)g(manager)20 b FA(A)d(sp)q(ecial)g(task)g(that)g(manages)e(other)i(tasks)h(and)e (the)h(virtual)f(mac)o(hine)249 1756 y(con\014guration.)i(It)c(in)o (tercepts)h(requests)h(to)e(create/destro)o(y)i(tasks)e(and)g (add/delete)g(hosts.)249 1820 y Fr(route)19 b FA(The)d(act)f(of)g(mo)o (ving)e(a)h(message)h(from)f(its)h(source)h(to)g(its)f(destination.)21 b(A)16 b(routing)e(algo-)249 1874 y(rithm)f(is)i(a)f(rule)h(for)f (deciding,)g(at)h(an)o(y)f(in)o(termediate)g(no)q(de,)h(where)h(to)e (send)i(a)e(message)g(next;)h(a)249 1928 y(routing)c(tec)o(hnique)i(is) e(a)h(w)o(a)o(y)e(of)i(handling)e(the)i(message)f(as)h(it)f(passes)i (through)f(individual)e(no)q(des.)249 1992 y Fr(R)l(TFM)21 b FB(R)n(e)n(ad)16 b(The)e(Fine)i(Manual)249 2056 y Fr(scalable)35 b FA(Capable)15 b(of)f(b)q(eing)h(increased)h(in)e(size;)i(More)f(imp)q (ortan)o(t,)e(capable)i(of)f(deliv)o(ering)g(an)249 2110 y(increase)h(in)f(p)q(erformance)f(prop)q(ortional)g(to)h(an)g (increase)h(in)e(size.)249 2174 y Fr(sc)o(hedulin)o(g)34 b FA(Deciding)15 b(the)h(order)h(in)e(whic)o(h)h(the)g(calculations)f (in)h(a)f(program)f(are)i(to)g(b)q(e)g(exe-)249 2228 y(cuted)f(and)g(b)o(y)f(whic)o(h)g(pro)q(cesses.)22 b(Allo)q(cating)13 b(pro)q(cesses)k(to)d(pro)q(cessors)i(is)e(usually)g(called)g(map-)249 2282 y(ping.)249 2346 y Fr(self-sc)o(hedul)o(i)o(ng)33 b FA(Automatically)11 b(allo)q(cating)g(w)o(ork)i(to)g(pro)q(cesses.)21 b(If)12 b Fn(T)20 b FA(tasks)13 b(are)h(to)f(b)q(e)h(done)249 2400 y(b)o(y)k Fn(P)24 b FA(pro)q(cessors,)d(and)d Fn(P)24 b(<)19 b(T)6 b FA(,)19 b(then)g(they)g(ma)o(y)d(b)q(e)j(self-sc)o (heduled)h(b)o(y)e(k)o(eeping)g(them)g(in)f(a)249 2454 y(cen)o(tral)g(p)q(o)q(ol)e(from)f(whic)o(h)i(eac)o(h)h(pro)q(cessor)g (claims)e(a)g(new)i(job)e(when)i(it)e(\014nishes)i(executing)g(its)249 2508 y(old)c(one.)p eop %%Page: 171 190 171 189 bop 249 251 a Fu(Glossary)1393 b(171)249 507 y Fr(semaphore)35 b FA(A)15 b(data)f(t)o(yp)q(e)h(for)f(con)o(trolling) f(concurrency)m(.)22 b(A)15 b(semaphore)f(is)h(initialized)e(to)h(an) 249 561 y(in)o(teger)i(v)n(alue.)21 b(Tw)o(o)15 b(op)q(erations)g(ma)o (y)e(b)q(e)j(applied)f(to)g(it:)20 b FB(signal)15 b FA(incremen)o(ts)h (the)f(semaphore's)249 615 y(v)n(alue)e(b)o(y)h(one,)g(and)g FB(wait)f FA(blo)q(c)o(ks)h(its)g(caller)g(un)o(til)f(the)i (semaphore's)e(v)n(alue)h(is)g(greater)h(than)f(zero,)249 669 y(then)i(decremen)o(ts)h(the)g(semaphore.)23 b(A)16 b(binary)f(semaphore)g(is)h(one)g(that)f(can)h(only)f(tak)o(e)h(on)f (the)249 723 y(v)n(alues)c(0)h(and)f(1.)17 b(An)o(y)11 b(other)i(sync)o(hronization)e(primitiv)o(e)e(can)j(b)q(e)g(built)f(in) g(terms)g(of)g(semaphores.)249 788 y Fr(sequen)o(tial)i(b)q(ottlenec)o (k)34 b FA(A)15 b(part)g(of)f(a)h(computation)e(for)i(whic)o(h)g(there) h(is)f(little)f(or)h(no)g(paral-)249 842 y(lelism.)249 907 y Fr(sequen)o(tial)e(computer)34 b FA(Synon)o(ymous)15 b(with)h(a)g(V)m(on)f(Neumann)g(computer,)h(that)g(is,)g(a)g(\\con-)249 961 y(v)o(en)o(tional")10 b(computer)i(in)f(whic)o(h)h(only)f(one)h (pro)q(cessing)h(elemen)o(t)e(w)o(orks)h(on)g(a)f(problem)f(at)i(a)g (giv)o(en)249 1015 y(time.)249 1081 y Fr(shared)j(memory)20 b FA(Real)15 b(or)i(virtual)f(memory)e(that)i(app)q(ears)i(to)e(users)i (to)e(constitute)i(a)e(single)249 1135 y(address)f(space,)g(but)f(whic) o(h)g(is)g(actually)f(ph)o(ysically)g(disjoin)o(t.)18 b(Virtual)13 b(shared)i(memory)d(is)i(often)249 1188 y(implemen)o(ted)8 b(using)i(some)f(com)o(bination)f(of)i(hashing)g (and)g(lo)q(cal)f(cac)o(hing.)17 b(Memory)9 b(that)h(app)q(ears)249 1242 y(to)16 b(the)h(user)h(to)e(b)q(e)h(con)o(tained)f(in)g(a)g (single)g(address)h(space)h(and)e(that)g(can)h(b)q(e)g(accessed)h(b)o (y)f(an)o(y)249 1296 y(pro)q(cess.)23 b(In)15 b(a)f(unipro)q(cessor)j (or)d(m)o(ultipro)q(cessor)h(there)h(is)f(t)o(ypically)e(a)i(single)f (memory)f(unit,)h(or)249 1350 y(sev)o(eral)g(memory)e(units)i(in)o (terlea)o(v)o(ed)g(to)g(giv)o(e)f(the)h(app)q(earance)h(of)f(a)f (single)h(memory)d(unit.)249 1416 y Fr(shared)k(v)m(ariables)35 b FA(V)m(ariables)12 b(to)h(whic)o(h)f(t)o(w)o(o)h(or)f(more)g(pro)q (cesses)k(ha)o(v)o(e)d(access,)h(or)f(a)f(mo)q(del)g(of)249 1469 y(parallel)i(computing)g(in)i(whic)o(h)f(in)o(terpro)q(cess)j (comm)o(unicatio)o(n)13 b(and)i(sync)o(hronization)h(are)g(man-)249 1523 y(aged)e(through)g(suc)o(h)g(v)n(ariables.)249 1589 y Fr(signal)249 1654 y(SIMD)36 b FB(Single-Instruction)19 b(Multiple-Data)p FA(,)g(a)f(category)g(of)g(Flynn's)g(taxonom)o(y)e (in)h(whic)o(h)h(a)249 1708 y(single)12 b(instruction)g(stream)f(is)h (concurren)o(tly)h(applied)e(to)h(m)o(ultiple)e(data)h(sets.)19 b(A)12 b(SIMD)f(arc)o(hitec-)249 1762 y(ture)i(is)f(one)h(in)e(whic)o (h)h(homogeneous)g(pro)q(cesses)j(sync)o(hronously)d(execute)i(the)f (same)e(instructions)249 1816 y(on)k(their)g(o)o(wn)g(data,)f(or)h(one) g(in)g(whic)o(h)g(an)g(op)q(eration)g(can)g(b)q(e)g(executed)i(on)e(v)o (ectors)h(of)f(\014xed)g(or)249 1870 y(v)n(arying)e(size.)249 1935 y Fr(so)q(c)o(k)o(et)20 b FA(An)d(endp)q(oin)o(t)g(for)f(net)o(w)o (ork)h(comm)o(unication.)24 b(F)m(or)16 b(example,)g(on)h(a)f(Unix)h (mac)o(hine,)e(a)249 1989 y(TCP/IP)f(connection)h(ma)o(y)e(terminate)g (in)h(a)g(so)q(c)o(k)o(et,)g(whic)o(h)g(can)h(b)q(e)g(read)f(or)g (written)h(through)f(a)249 2043 y(\014le)g(descriptor.)249 2108 y Fr(space)i(sharing)34 b FA(Dividing)10 b(the)i(resources)i(of)e (a)f(parallel)g(computer)g(among)f(man)o(y)f(programs)i(so)249 2162 y(they)j(can)h(run)f(sim)o(ultaneously)e(without)h(a\013ecting)h (one)g(another's)h(p)q(erformance.)249 2227 y Fr(spanning)e(tree)36 b FA(A)14 b(tree)g(con)o(taining)f(a)g(subset)i(of)e(the)h(edges)h(in)e (a)g(graph)g(and)h(including)e(ev)o(ery)249 2281 y(no)q(de)17 b(in)e(that)h(graph.)25 b(A)16 b(spanning)g(tree)h(can)g(alw)o(a)o(ys)e (b)q(e)i(constructed)h(so)e(that)g(its)g(depth)h(\(the)249 2335 y(greatest)g(distance)f(b)q(et)o(w)o(een)h(its)f(ro)q(ot)g(and)f (an)o(y)g(leaf)s(\))g(is)h(no)f(greater)i(than)e(the)i(diameter)d(of)h (the)249 2389 y(graph.)j(Spanning)13 b(trees)j(are)e(frequen)o(tly)g (used)h(to)f(implem)o(en)o(t)e(broadcast)i(op)q(erations.)249 2454 y Fr(spa)o(wn)20 b FA(T)m(o)13 b(create)i(a)e(new)h(pro)q(cess)h (or)f(PVM)g(task,)f(p)q(ossibly)g(di\013eren)o(t)i(from)c(the)j(paren)o (t.)19 b(Com-)249 2508 y(pare)14 b(with)g(fork.)p eop %%Page: 172 191 172 190 bop 249 251 a Fu(172)1392 b(Glossary)249 507 y Fr(sp)q(eedup)35 b FA(The)14 b(ratio)g(of)g(t)o(w)o(o)g(program)e (execution)j(times,)e(particularly)h(when)h(times)e(are)i(from)249 561 y(execution)j(on)e(1)h(and)f(P)h(no)q(des)h(of)e(the)i(same)e (computer.)26 b(Sp)q(eedup)18 b(is)f(usually)f(discussed)i(as)f(a)249 615 y(function)e(of)g(the)h(n)o(um)o(b)q(er)f(of)g(pro)q(cessors,)i (but)f(is)f(also)g(a)g(function)g(\(implicitly\))e(of)h(the)i(problem) 249 669 y(size.)249 734 y Fr(SPMD)36 b FB(Single-Pr)n(o)n(gr)n(am)15 b(Multiple-Data)p FA(,)g(a)g(category)g(sometimes)f(added)h(to)g (Flynn's)g(taxon-)249 788 y(om)o(y)f(to)h(describ)q(e)j(programs)c (made)h(up)g(of)g(man)o(y)f(instances)j(of)e(a)g(single)h(t)o(yp)q(e)g (of)f(pro)q(cess,)j(eac)o(h)249 842 y(executing)d(the)g(same)f(co)q(de) h(indep)q(enden)o(tly)m(.)20 b(SPMD)15 b(can)g(b)q(e)g(view)o(ed)f (either)i(as)e(an)g(extension)i(of)249 896 y(SIMD)e(or)g(as)g(a)f (restriction)i(of)e(MIMD.)249 961 y Fr(startup)h(cost)36 b FA(The)12 b(time)f(tak)o(en)g(to)h(initiate)f(an)o(y)g(transaction)h (with)g(some)e(en)o(tit)o(y)m(.)17 b(The)12 b(startup)249 1015 y(cost)k(of)e(a)g(message-passing)h(system,)f(for)h(example,)e(is) i(the)g(time)f(needed)i(to)f(send)h(a)e(message)h(of)249 1069 y(zero)g(length)f(to)f(no)o(where.)249 1135 y Fr(sup)q(ercomputer) 33 b FA(A)12 b(time-dep)q(enden)o(t)h(term)e(that)h(refers)h(to)f(the)h (class)f(of)f(most)g(p)q(o)o(w)o(erful)g(com-)249 1188 y(puter)k(systems)f(w)o(orldwide)f(at)h(the)g(time)f(of)g(reference.) 249 1254 y Fr(switc)o(h)35 b FA(A)17 b(ph)o(ysical)g(comm)o(unication)d (medium)g(con)o(taining)i(no)q(des)i(that)f(p)q(erform)f(only)g(com-) 249 1308 y(m)o(unications)11 b(functions.)18 b(Examples)11 b(include)i(crossbar)h(switc)o(hes,)g(in)e(whic)o(h)g Fn(N)g FA(+)7 b Fn(M)18 b FA(buses)c(cross)249 1362 y(orthogonally)e (at)i Fn(N)5 b(M)18 b FA(switc)o(hing)c(p)q(oin)o(ts)f(to)h(connect)h Fn(N)k FA(ob)r(jects)c(of)e(one)h(t)o(yp)q(e)g(to)g Fn(M)19 b FA(ob)r(jects)c(of)249 1416 y(another,)i(and)e(m)o(ultistage)g(switc) o(hes)i(in)e(whic)o(h)h(sev)o(eral)h(la)o(y)o(ers)f(of)f(switc)o(hing)h (no)q(des)h(connect)g Fn(N)249 1469 y FA(ob)r(jects)e(of)e(one)i(t)o (yp)q(e)f(to)g Fn(N)k FA(ob)r(jects)d(of)f(another)g(t)o(yp)q(e.)249 1535 y Fr(sync)o(hronizatio)o(n)34 b FA(The)15 b(act)g(of)f(bringing)g (t)o(w)o(o)g(or)h(more)f(pro)q(cesses)j(to)e(kno)o(wn)g(p)q(oin)o(ts)f (in)h(their)249 1589 y(execution)h(at)e(the)i(same)e(clo)q(c)o(k)h (time.)k(Explicit)c(sync)o(hronization)f(is)h(not)g(needed)h(in)f(SIMD) f(pro-)249 1643 y(grams)i(\(in)h(whic)o(h)h(ev)o(ery)g(pro)q(cessor)h (either)g(executes)g(the)f(same)f(op)q(eration)g(as)h(ev)o(ery)g(other) g(or)249 1697 y(do)q(es)e(nothing\))f(but)h(is)f(often)g(necessary)j (in)d(SPMD)g(and)g(MIMD)g(programs.)22 b(The)15 b(time)f(w)o(asted)249 1751 y(b)o(y)e(pro)q(cesses)k(w)o(aiting)11 b(for)h(other)h(pro)q (cesses)i(to)e(sync)o(hronize)h(with)e(them)g(can)g(b)q(e)i(a)e(ma)r (jor)f(source)249 1804 y(of)i(ine\016ciency)i(in)e(parallel)g (programs.)249 1870 y Fr(sync)o(hronous)34 b FA(Occurring)11 b(at)f(the)g(same)f(clo)q(c)o(k)h(time.)15 b(F)m(or)10 b(example,)e(if)h(a)h(comm)o(unication)c(ev)o(en)o(t)249 1924 y(is)17 b(sync)o(hronous,)g(then)h(there)f(is)g(some)f(momen)o(t)e (at)i(whic)o(h)h(b)q(oth)f(the)i(sender)g(and)e(the)h(receiv)o(er)249 1978 y(are)d(engaged)g(in)g(the)g(op)q(eration.)249 2043 y Fr(task)21 b FA(The)15 b(smallest)f(comp)q(onen)o(t)g(of)h(a)g (program)e(addressable)j(in)f(PVM.)g(A)g(task)h(is)f(generally)f(a)249 2097 y(nativ)o(e)g(\\pro)q(cess")h(to)f(the)g(mac)o(hine)f(on)g(whic)o (h)h(it)g(runs.)249 2162 y Fr(task)o(er)20 b FA(A)c(sp)q(ecial)h(task)g (that)f(manages)f(other)j(tasks)f(on)f(the)h(same)f(host.)26 b(It)16 b(is)h(the)g(paren)o(t)g(of)249 2216 y(the)c(target)g(tasks,)g (allo)o(wing)e(it)h(to)g(manipulate)f(them)h(\(e.g.,)g(for)g(debugging) g(or)g(other)i(instrumen-)249 2270 y(tation\).)249 2335 y Fr(TCP)21 b FB(T)m(r)n(ansmission)e(Contr)n(ol)f(Pr)n(oto)n(c)n(ol)p FA(,)g(a)h(reliable)f(host-host)g(stream)g(proto)q(col)h(for)f(pac)o(k) o(et-)249 2389 y(switc)o(hed)d(in)o(terconnected)h(net)o(w)o(orks)e (suc)o(h)h(as)f(IP)m(.)249 2454 y Fr(thread)19 b FA(A)c(thread)g(of)g (program)e(con)o(trol)h(sharing)h(resources)i(\(memory)m(,)12 b(I/O)i(state\))i(with)e(other)249 2508 y(threads.)19 b(A)14 b(ligh)o(t)o(w)o(eigh)o(t)e(pro)q(cess.)p eop %%Page: 173 192 173 191 bop 249 251 a Fu(Glossary)1393 b(173)249 507 y Fr(TID)21 b FB(T)m(ask)14 b(Identi\014er)p FA(,)g(an)g(address)h (used)f(in)g(PVM)g(for)g(tasks,)g(p)o(vmds,)e(and)i(m)o(ulticast)e (groups.)249 575 y Fr(time)i(sharing)35 b FA(Sharing)15 b(a)g(pro)q(cessor)j(among)13 b(m)o(ultiple)g(programs.)22 b(Time)14 b(sharing)h(attempts)249 629 y(to)d(b)q(etter)h(utilize)e(a)h (CPU)g(b)o(y)f(o)o(v)o(erlapping)g(I/O)g(in)h(one)f(program)g(with)g (computation)f(in)h(another.)249 697 y Fr(trace)16 b(sc)o(heduli)o(ng)h FA(A)j(compiler)e(optimization)f(tec)o(hnique)j(that)g(v)o(ectorizes)h (the)f(most)e(lik)o(ely)249 751 y(path)c(through)h(a)f(program)f(as)h (if)g(it)g(w)o(ere)h(a)f(single)g(basic)h(blo)q(c)o(k,)e(includes)i (extra)g(instructions)g(at)249 805 y(eac)o(h)i(branc)o(h)h(to)e(undo)h (an)o(y)f(ill)g(e\013ects)i(of)f(ha)o(ving)e(made)h(a)g(wrong)h(guess,) h(v)o(ectorizes)g(the)g(next)249 859 y(most)13 b(lik)o(ely)f(branc)o (hes,)j(and)f(so)g(on.)249 927 y Fr(top)q(ology)35 b FA(the)15 b(con\014guration)f(of)g(the)h(pro)q(cessors)i(in)d(a)g(m)o (ulticom)o(puter)f(and)h(the)h(circuits)g(in)f(a)249 981 y(switc)o(h.)k(Among)11 b(the)j(most)e(common)e(top)q(ologies)j (are)g(the)h(mesh,)e(the)i(h)o(yp)q(ercub)q(e,)g(the)g(butter\015y)m(,) 249 1034 y(the)h(torus,)f(and)f(the)i(sh)o(u\017e)f(exc)o(hange)h(net)o (w)o(ork.)249 1102 y Fr(tuple)34 b FA(An)13 b(ordered)h(sequence)g(of)e (\014xed)h(length)f(of)g(v)n(alues)g(of)g(arbitrary)g(t)o(yp)q(es.)19 b(T)m(uples)12 b(are)h(used)249 1156 y(for)h(b)q(oth)g(data)g(storage)g (and)g(in)o(terpro)q(cess)i(comm)o(unication)11 b(in)i(the)i(generativ) o(e)g(comm)o(uni)o(cation)249 1210 y(paradigm.)249 1278 y Fr(tuple)f(space)36 b FA(A)20 b(rep)q(ository)h(for)f(tuples)g(in)g (a)g(generativ)o(e)g(comm)o(unication)d(system.)36 b(T)m(uple)249 1332 y(space)15 b(is)f(an)f(asso)q(ciativ)o(e)h(memory)m(.)249 1400 y Fr(UDP)20 b FA(User)d(Datagram)c(Proto)q(col,)i(a)h(simple)e (proto)q(col)h(allo)o(wing)e(datagrams)h(\(blo)q(c)o(ks)i(of)f(data\)) 249 1454 y(to)g(b)q(e)h(sen)o(t)f(b)q(et)o(w)o(een)i(hosts)e(in)o (terconnected)i(b)o(y)e(net)o(w)o(orks)h(suc)o(h)g(as)f(IP)m(.)f(UDP)h (can)g(duplicate)g(or)249 1508 y(lose)f(messages,)g(and)f(imp)q(oses)g (a)h(length)g(limit)d(of)i(64)h(kb)o(ytes.)249 1575 y Fr(unipro)q(cessor)34 b FA(A)17 b(computer)g(con)o(taining)f(a)g (single)h(pro)q(cessor.)29 b(The)18 b(term)e(is)h(generally)g(syn-)249 1629 y(on)o(ymous)12 b(with)i(scalar)g(pro)q(cessor.)249 1697 y Fr(virtual)g(c)o(hannel)34 b FA(A)20 b(logical)f(p)q(oin)o (t-to-p)q(oin)o(t)g(connection)i(b)q(et)o(w)o(een)h(t)o(w)o(o)e(pro)q (cesses.)39 b(Man)o(y)249 1751 y(virtual)13 b(c)o(hannels)i(ma)o(y)c (time)i(share)i(a)e(single)h(link)f(to)g(hide)h(latency)h(and)e(to)h(a) o(v)o(oid)f(deadlo)q(c)o(k.)249 1819 y Fr(virtual)h(concurren)o(t)f (computer)35 b FA(A)14 b(computer)g(system)g(that)g(is)g(programmed)e (as)i(a)g(concur-)249 1873 y(ren)o(t)20 b(computer)f(of)g(some)f(n)o (um)o(b)q(er)g(of)h(no)q(des)h Fn(P)k FA(but)c(that)f(is)g(implemen)o (ted)e(either)j(on)f(a)g(real)249 1927 y(concurren)o(t)d(computer)d(of) g(some)g(n)o(um)o(b)q(er)g(of)g(no)q(des)i(less)f(than)g(P)g(or)f(on)h (a)f(unipro)q(cessor)i(running)249 1981 y(soft)o(w)o(are)d(to)f(em)o (ulate)f(the)i(en)o(vironmen)o(t)f(of)g(a)g(concurren)o(t)i(mac)o (hine.)j(Suc)o(h)c(an)f(em)o(ulation)e(system)249 2035 y(is)14 b(said)f(to)h(pro)o(vide)g(virtual)f(no)q(des)i(to)e(the)i (user.)249 2103 y Fr(virtual)f(cut-through)33 b FA(A)15 b(tec)o(hnique)h(for)f(routing)f(messages)h(in)f(whic)o(h)h(the)h(head) f(and)g(tail)f(of)249 2157 y(the)f(message)g(b)q(oth)g(pro)q(ceed)h(as) f(rapidly)e(as)i(they)g(can.)18 b(If)12 b(the)i(head)f(is)f(blo)q(c)o (k)o(ed)h(b)q(ecause)h(a)f(link)e(it)249 2211 y(w)o(an)o(ts)k(to)g (cross)h(is)f(b)q(eing)g(used)h(b)o(y)f(some)f(other)i(message,)f(the)h (tail)e(con)o(tin)o(ues)h(to)g(adv)n(ance,)g(and)249 2265 y(the)g(message's)e(con)o(ten)o(ts)i(are)f(put)g(in)o(to)g (bu\013ers)h(on)f(in)o(termediate)f(no)q(des.)249 2332 y Fr(virtual)h(mac)o(hine)k FA(A)e(m)o(ulticom)o(puter)e(comp)q(osed)h (of)f(separate)j(\(p)q(ossibly)e(self-complete\))g(ma-)249 2386 y(c)o(hines)g(and)e(a)h FB(softwar)n(e)g(b)n(ackplane)h FA(to)e(co)q(ordinate)h(op)q(eration.)249 2454 y Fr(virtual)g(memory)35 b FA(Con\014guration)15 b(in)h(whic)o(h)f(p)q(ortions)h(of)f(the)i (address)g(space)g(are)f(k)o(ept)g(on)f(a)249 2508 y(secondary)h (medium,)11 b(suc)o(h)16 b(as)f(a)f(disk)g(or)h(auxiliary)e(memory)m(.) k(When)e(a)g(reference)i(is)d(made)g(to)g(a)p eop %%Page: 174 193 174 192 bop 249 251 a Fu(174)1392 b(Glossary)249 507 y FA(lo)q(cation)15 b(not)h(residen)o(t)i(in)e(main)e(memory)m(,)f(the) k(virtual)e(memory)f(manager)h(loads)g(the)i(lo)q(cation)249 561 y(from)g(secondary)j(storage)f(b)q(efore)g(the)h(access)g (completes.)32 b(If)19 b(no)f(space)i(is)e(a)o(v)n(ailable)f(in)h(main) 249 615 y(memory)m(,)9 b(data)i(is)h(written)g(to)g(secondary)h (storage)f(to)f(mak)o(e)g(some)g(a)o(v)n(ailable.)k(Virtual)c(memory)e (is)249 669 y(used)15 b(b)o(y)f(almost)e(all)g(unipro)q(cessors)k(and)e (m)o(ultipro)q(cessors)g(to)g(increase)h(apparen)o(t)f(memory)e(size,) 249 723 y(but)i(is)g(not)g(a)o(v)n(ailable)d(on)j(some)f(arra)o(y)h (pro)q(cessors)i(and)d(m)o(ulticomputers.)249 794 y Fr(virtual)h (shared)g(memory)36 b FA(Memory)11 b(that)i(app)q(ears)g(to)g(users)h (to)e(constitute)h(a)g(single)f(address)249 848 y(space,)19 b(but)f(that)g(is)f(actually)g(ph)o(ysically)f(disjoin)o(t.)28 b(Virtual)17 b(shared)i(memory)c(is)i(often)h(imple-)249 902 y(men)o(ted)c(using)f(some)g(com)o(bination)f(of)h(hashing)g(and)h (lo)q(cal)f(cac)o(hing.)249 972 y Fr(V)l(on)i(Neumann)g(arc)o (hitecture)34 b FA(An)o(y)20 b(computer)h(that)f(do)q(es)i(not)e(emplo) o(y)f(concurrency)k(or)249 1026 y(parallelism.)31 b(Named)18 b(after)h(John)g(V)m(on)f(Neumann)g(\(1903{1957\),)g(who)h(is)g (credited)h(with)e(the)249 1080 y(in)o(v)o(en)o(tion)13 b(of)g(the)i(basic)f(arc)o(hitecture)h(of)f(curren)o(t)h(sequen)o(tial) f(computers.)249 1151 y Fr(w)o(ait)h(con)o(text)k FA(A)c(data)f (structure)i(used)g(in)e(the)h(p)o(vmd)e(to)h(hold)g(state)h(when)g(a)f (thread)h(of)f(op)q(er-)249 1205 y(ation)f(m)o(ust)g(b)q(e)i(susp)q (ended,)g(for)f(example,)e(when)i(calling)e(a)i(p)o(vmd)e(on)i(another) g(host.)249 1275 y Fr(w)o(orking)h(set)35 b FA(Those)15 b(v)n(alues)f(from)e(shared)j(memory)c(that)j(a)g(pro)q(cess)i(has)e (copied)g(in)o(to)f(its)h(pri-)249 1329 y(v)n(ate)k(memory)m(,)f(or)h (those)h(pages)g(of)f(virtual)g(memory)e(b)q(eing)i(used)h(b)o(y)g(a)f (pro)q(cess.)33 b(Changes)19 b(a)249 1383 y(pro)q(cess)e(mak)o(es)d(to) g(the)i(v)n(alues)f(in)f(its)h(w)o(orking)f(set)i(are)f(not)g (automatically)d(seen)k(b)o(y)f(other)g(pro-)249 1437 y(cesses.)249 1508 y Fr(XDR)20 b FB(eXternal)f(Data)h(R)n(epr)n (esentation)g FA(An)f(In)o(ternet)h(standard)f(data)g(enco)q(ding)g (\(essen)o(tially)249 1562 y(just)c(big-endian)f(in)o(tegers)i(and)f (IEEE)g(format)e(\015oating)h(p)q(oin)o(t)g(n)o(um)o(b)q(ers\).)21 b(PVM)15 b(con)o(v)o(erts)h(data)249 1616 y(to)10 b(XDR)g(format)f(to)i (allo)o(w)d(comm)o(unication)g(b)q(et)o(w)o(een)k(hosts)f(with)f (di\013eren)o(t)i(nativ)o(e)e(data)g(formats.)p eop %%Page: 175 194 175 193 bop 249 331 a Fp(A)25 b FD(History)17 b(of)g(PVM)g(V)l(ersions) 249 561 y FA(This)f(app)q(endix)g(con)o(tains)h(a)e(list)h(of)g(all)f (the)i(v)o(ersions)f(of)g(PVM)h(that)f(ha)o(v)o(e)g(b)q(een)h(released) h(from)249 615 y(the)13 b(\014rst)h(one)f(in)f(F)m(ebruary)h(1991)e (through)i(August)g(1994.)k(Along)12 b(with)g(eac)o(h)h(v)o(ersion)g(w) o(e)g(include)249 669 y(a)f(brief)g(synopsis)h(of)e(the)i(impro)o(v)o (emen)o(ts)d(made)h(in)h(this)g(v)o(ersion.)17 b(Although)12 b(not)g(listed)g(here,)i(new)249 723 y(p)q(orts)i(w)o(ere)g(b)q(eing)e (added)i(to)e(PVM)i(with)e(eac)o(h)i(release.)22 b(PVM)15 b(con)o(tin)o(ues)h(to)f(ev)o(olv)o(e)f(driv)o(en)h(b)o(y)249 777 y(new)d(tec)o(hnology)g(and)f(user)i(feedbac)o(k.)18 b(New)o(er)13 b(v)o(ersions)f(of)f(PVM)i(b)q(ey)o(ond)f(those)g(listed) g(here)h(ma)o(y)249 831 y(exist)h(at)g(the)h(time)d(of)h(reading.)18 b(The)d(latest)f(v)o(ersion)g(can)g(alw)o(a)o(ys)f(b)q(e)h(found)g(on)f FB(netlib)p FA(.)249 981 y Fs(PVM)21 b(1.0)43 b(\(never)21 b(released\))336 1034 y(any)g(of)h(the)f(several)f(initial)h (experimental)e(PVM)i(versions)336 1088 y(used)g(to)h(study)e (heterogeneous)f(distributed)h(computing)g(issues.)249 1196 y(PVM)h(2.0)43 b(\(Feb.)21 b(1991\))336 1250 y(+)h(Complete)e (rewrite)g(of)i(in-house)e(experimental)f(PVM)i(software)f(\(v1.0\),) 336 1304 y(+)i(cleaned)e(up)i(the)f(specification)e(and)i (implementation)380 1358 y(to)g(improve)g(robustness)e(and)i (portablility.)249 1466 y(PVM)g(2.1)43 b(\(Mar.)21 b(1991\))336 1520 y(+)h(process-process)d(messages)h(switched)g(to)h(XDR)380 1574 y(to)g(improve)g(protability)e(of)i(source)g(in)g(heterogeneous)e (environments.)336 1628 y(+)j(Simple)e(console)h(interpreter)e(added)i (to)g(master)g(pvmd.)249 1736 y(PVM)g(2.2)43 b(\(April)21 b(1991\))336 1790 y(+)h(pvmd-pvmd)e(message)g(format)h(switched)f(to)h (XDR.)336 1844 y(+)h(Get)f(and)g(put)g(functions)f(vectorized)g(to)h (improve)g(performance.)336 1898 y(+)h(broadcast)e(function)g(-->)h (deprecated)249 2006 y(PVM)g(2.3.2)43 b(\(June)21 b(1991\))336 2060 y(+)h(improved)e(password-less)f(startup)h(via)i(rsh/rcmd)336 2114 y(+)g(added)f(per-host)f(options)g(to)h(hostfile)g(format:)423 2168 y(ask)h(for)f(password)423 2222 y(specify)g(alternate)f(loginname) 423 2276 y(specify)h(alternate)f(pvmd)h(executable)e(location)336 2330 y(+)j(pvmd-pvmd)e(protocol)g(version)g(checked)h(to)g(prevent)f (mixed)h(versions)380 2384 y(interoperating.)336 2438 y(+)h(added)f(support)f(for)h(short)g(and)g(long)g(integers)f(in)i (messages.)336 2492 y(+)g(added)f('reset')f(pvmd)h(command)f(to)i (reset)e(the)i(vm.)p eop %%Page: 176 195 176 194 bop 249 251 a Fu(176)1320 b(App)q(endix)14 b(A)336 507 y Fs(+)22 b(can)f(specify)f(".")i(as)f(host)g(to)g(initiateM\(\))f (to)h(create)g(on)g(localhost)249 615 y(PVM)g(2.3.3)43 b(\(July)21 b(1991\))336 669 y(+)h(added)f('barr')f(command)g(to)i (check)f(barrier/ready)e(status)336 723 y(+)j(pstatus\(\))e(libpvm)g (call)h(added)g(to)g(return)g(size)g(of)g(virtual)g(machine)249 831 y(PVM)g(2.3.4)43 b(\(Oct.)21 b(1991\))336 885 y(+)h(pvmds)f (negotiate)f(maximum)g(UDP)h(message)f(length)h(at)g(startup.)336 939 y(+)h(removed)e(static)h(limitation)e(on)j(number)e(of)i(hosts)f (\(used)f(to)i(be)f(40\).)249 1047 y(PVM)g(2.4.0)43 b(\(Feb.)21 b(1992\))336 1101 y(+)h(added)f(direct-connect)d(TCP)k(message)e (transfer)g(available)g(through)380 1155 y(vsnd\(\))g(and)i(vrcv\(\))e (to)h(improve)g(communication)e(performance.)336 1209 y(+)j(added)f(option)f(to)i(specify)e(user)h(executable)f(path)h(on)g (each)g(host.)336 1263 y(+)h(version)e(check)h(added)g(between)f(pvmd)h (and)g(libpvm)g(to)g(prevent)f(running)380 1317 y(incompatible)f (versions.)336 1371 y(+)j(libpvm)e(automatically)f(prints)i(error)g (messages.)336 1425 y(+)h(libpvm)e(error)h(codes)g(standardized)e(and)i (exported)g(in)g("pvmuser.h".)336 1479 y(+)h(includes)e(instrumented)f (heap)i(to)h(aid)f(system)f(debugging.)336 1533 y(+)i(host)f(file)g (default)f(parameters)g(can)h(be)g(set)h(with)f('*'.)336 1587 y(+)h(libpvm)e(returns)h(error)f(code)h(instead)g(of)g(exiting)g (in)g(case)380 1641 y(of)g(fatal)g(error.)249 1748 y(PVM)g(2.4.1)43 b(\(June)21 b(1992\))336 1802 y(+)h(added)f(new)g(ports)g(and)g(bug)g (fixes)249 1910 y(PVM)g(2.4.2)43 b(\(Dec.)21 b(1992\))336 1964 y(+)h(pvmuser.h)e(made)h(compatible)e(with)i(C++.)336 2018 y(+)h(can)f(force)g(messages)f(to)h(be)h(packed)e(in)i(raw)f(data) g(format)f(to)i(avoid)e(XDR.)336 2072 y(+)i(rcv\(\))f(will)g(return)f (BadMsg)h(if)g(message)f(can't)h(be)h(decoded.)249 2180 y(PVM)f(3.0)43 b(\(Feb.)21 b(1993\))336 2234 y(Complete)f(redesign)h (of)g(PVM)g(software)f(both)h(the)g(user)g(interface)f(and)336 2288 y(the)h(implementation)e(in)j(order)e(to:)336 2342 y(+)i(allow)f(scalability)e(to)i(hundreds)g(of)g(hosts.)336 2396 y(+)h(allow)f(portability)e(to)i(multiprocessors)e(/)j(operating)e (systems)380 2450 y(other)h(than)g(Unix.)336 2504 y(+)h(allows)e (dynamic)h(reconfiguration)d(of)k(the)f(virtual)f(machine,)p eop %%Page: 177 196 177 195 bop 249 251 a Fu(History)14 b(of)f(PVM)g(V)m(ersions)1114 b(177)336 507 y Fs(+)22 b(allows)e(fault)h(tolerance)336 561 y(+)h(allows)e(asynchronous)g(task)h(notification)e(-)j(task)f (exit,)380 615 y(machine)f(reconfiguration.)336 669 y(+)i(includes)e (dynamic)g(process)h(groups,)336 723 y(+)h(separate)e(PVM)h(console)f (task.)249 885 y(PVM)h(3.1)43 b(\(April)21 b(1993\))336 939 y(+)h(added)f(task-task)f(direct)g(routing)g(via)i(TCP)380 993 y(using)f(normal)f(send)h(and)g(receive)g(calls.)249 1101 y(PVM)g(3.1.1)43 b(\(May)21 b(1993\))42 b(Five)21 b(bug)g(fix)h(patches)e(released)g(for)h(PVM)g(3.1)249 1155 y(PVM)g(3.1.2)43 b(\(May)21 b(1993\))249 1209 y(PVM)g(3.1.3)43 b(\(June)21 b(1993\))249 1263 y(PVM)g(3.1.4)43 b(\(July)21 b(1993\))249 1317 y(PVM)g(3.1.5)43 b(\(Aug.)21 b(1993\))249 1425 y(PVM)g(3.2)43 b(\(Aug.)21 b(1993\))336 1479 y(+)h(distributed)d (memory)i(ports)g(merged)f(with)h(Unix)g(port)g(source.)380 1533 y(Ports)g(include)f(I860,)h(PGON,)f(CM5.)336 1641 y(+)i(conf/ARCH.def)d(files)i(created)f(for)h(per-machine)f (configuration)380 1694 y(to)h(improve)g(source)f(portability)g(and)h (package)f(size.)336 1802 y(+)i(pvmd)f(adds)g(new)g(slave)g(hosts)f(in) i(parallel)e(to)h(improve)g(performance.)336 1910 y(+)h(stdout)e(and)i (stderr)e(from)h(tasks)g(can)g(be)g(redirected)f(to)h(a)h (task/console.)336 2018 y(+)g(option)e(OVERLOADHOST)g(allows)g(virtual) h(machines)f(running)g(under)h(the)380 2072 y(same)g(login)g(to)g (overlap)f(i.e.)h(user)g(can)g(have)g(multiple)f(overlapping)g(vm.)336 2180 y(+)i(new)f(printf-like)f(pack)g(and)i(unpack)e(routines)g (pvm_packf\(\))g(and)380 2234 y(pvm_unpackf\(\))f(available)h(to)h(C)h (and)f(C++)g(programmers.)336 2342 y(+)h(added)f(pack,)f(unpack)h (routines)f(for)h(unsigned)f(integers.)336 2450 y(+)i(environment)d (passed)i(through)f(spawn\(\),)g(controlled)g(by)380 2504 y(variable)g(PVM_EXPORT.)p eop %%Page: 178 197 178 196 bop 249 251 a Fu(178)1320 b(App)q(endix)14 b(A)336 561 y Fs(+)22 b(many)f(enhancements)e(and)i(features)f(added)h(to)h (PVM)f(console)f(program.)336 669 y(+)i(pvmd)f(and)g(libpvm)g(use)g (PVM_ROOT)f(and)h(PVM_ARCH)f(environment)380 723 y(variables)g(if)h (set.)249 831 y(PVM)g(3.2.1)43 b(\(Sept.)20 b(1993\))43 b(Six)21 b(bug)g(fix)g(patches)g(released)f(for)h(PVM)g(3.2)249 885 y(PVM)g(3.2.2)43 b(\(Sept.)20 b(1993\))249 939 y(PVM)h(3.2.3)43 b(\(Oct.)21 b(1993\))249 993 y(PVM)g(3.2.4)43 b(\(Nov.)21 b(1993\))249 1047 y(PVM)g(3.2.5)43 b(\(Dec.)21 b(1993\))249 1101 y(PVM)g(3.2.6)43 b(\(Jan.)21 b(1994\))249 1209 y(PVM)g(3.3.0)43 b(\(June)21 b(1994\))336 1317 y(+)h(PVM_ROOT)e(environment)f(variable)i (now)g(must)g(be)g(set.)380 1371 y($HOME/pvm3)f(is)h(no)g(longer)g (assumed.)336 1479 y(+)h(shared-memory)d(ports)i(merged)f(with)h(Unix)g (and)g(distributed)f(memory)g(ports.)380 1533 y(Ports)h(include)f (SUNMP)h(and)g(SGIMP.)336 1641 y(+)h(New)f(functions)f(pvm_psend\(\))f (and)j(pvm_precv\(\))d(send)i(and)g(receive)g(raw)380 1694 y(data)g(buffers,)f(enabling)g(more)h(efficient)f(implementation)f (on)i(machines)380 1748 y(such)g(as)g(multiprocessors.)336 1856 y(+)h(new)f(function)f(pvm_trecv\(\))g(blocks)g(until)h(a)h (message)e(is)h(received)f(or)i(a)380 1910 y(specified)e(timeout)g (\(in)h(seconds)g(and)g(usec\))g(improves)f(fault)g(tolerance.)336 2018 y(+)i(Inplace)e(packing)h(implemented)e(for)i(dense)g(data)g (reducing)f(packing)g(costs.)336 2126 y(+)i(Resource)e(Manager,)g (Hoster)h(and)g(Tasker)f(interfaces)g(defined)380 2180 y(to)h(allow)g(third)g(party)f(debuggers)g(and)i(resource)e(managers)g (to)h(use)g(PVM.)336 2288 y(+)h(libpvm)e(parameter/result)f(tracing)h (implemented)g(to)h(drive)g(XPVM)g(tool.)380 2342 y(tasks)g(inherit)f (trace)h(destination)e(and)i(per-call)g(event)f(mask.)336 2450 y(+)i(XPVM,)f(a)g(graphical)f(user)h(interface)f(for)h(PVM,)g(is)h (released.)p eop %%Page: 179 198 179 197 bop 249 251 a Fu(History)14 b(of)f(PVM)g(V)m(ersions)1114 b(179)336 507 y Fs(+)22 b(added)f(collective)e(communication)g (routines)i(to)g(group)g(library.)380 561 y(global)f(reduce)h(and)g (scatter/gather)336 669 y(+)h(libpvm)e(function)h(pvm_catchout\(\))d (collects)j(output)f(of)h(children)g(tasks.)445 723 y(output)g(can)g (be)g(appended)f(to)i(any)f(FILE*)g(\(e.g.)g(stdout\).)336 831 y(+)h(new)f(hostfile)f(option)h("wd=")f(sets)h(the)h(working)e (directory)g(of)h(the)g(pvmd.)336 939 y(+)h(environment)d(variables)h (expanded)g(when)h(setting)g(ep=)g(or)380 993 y(bp=)g(in)g(the)h (hostfile.)249 1101 y(PVM)f(3.3.1)65 b(\(June)20 b(1994\))65 b(bug)21 b(fix)g(patches)f(for)i(PVM)f(3.3)249 1155 y(PVM)g(3.3.2)65 b(\(July)20 b(1994\))249 1209 y(PVM)h(3.3.3)65 b(\(August)20 b(1994\))p eop %%Page: 180 199 180 198 bop eop %%Page: 181 200 181 199 bop 249 331 a Fp(B)25 b FD(PVM)17 b(3)g(Routines)291 561 y FA(This)11 b(app)q(endix)g(con)o(tains)g(an)g(alphab)q(etical)g (listing)f(of)h(all)f(the)i(PVM)f(3)g(routines.)18 b(Eac)o(h)12 b(routine)249 615 y(is)k(describ)q(ed)i(in)d(detail)g(for)h(b)q(oth)g (C)g(and)g(F)m(ortran)f(use.)25 b(There)17 b(are)g(examples)e(and)g (diagnostics)249 669 y(for)f(eac)o(h)g(routine.)p eop %%Page: 182 201 182 200 bop 249 251 a Fu(182)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfaddhost\(\))641 b(p)n(vm)p 1506 511 21 2 v 24 w(addhosts\(\))p 249 595 1591 16 v 249 658 a FA(Adds)15 b(one)f(or)f(more)g(hosts)i(to)f(the)g(virtual)f(mac)o(hine.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(addhosts\()e(char)h(**hosts,)f(int)h(nhost,)g(int)g (*infos)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfaddhost\()f(host,)g(info)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(hosts)49 b FA({)g(an)14 b(arra)o(y)f(of)g(p)q(oin)o(ters)h (to)g(c)o(haracter)g(strings)g(con)o(taining)f(the)h(names)f(of)503 1110 y(the)i(mac)o(hines)e(to)h(b)q(e)g(added.)274 1164 y Fs(nhost)49 b FA({)g(in)o(teger)15 b(sp)q(ecifying)e(the)i(n)o(um)o (b)q(er)e(of)g(hosts)i(to)f(b)q(e)g(added.)274 1217 y Fs(infos)49 b FA({)g(in)o(teger)15 b(arra)o(y)g(of)f(length)g Fs(nhost)g FA(whic)o(h)g(con)o(tains)h(the)g(status)g(co)q(de)h(re-)503 1271 y(turned)h(b)o(y)e(the)h(routine)g(for)f(the)h(individual)e (hosts.)24 b(V)m(alues)15 b(less)h(than)503 1325 y(zero)f(indicate)f (an)g(error.)274 1379 y Fs(host)71 b FA({)49 b(c)o(haracter)13 b(string)f(con)o(taining)f(the)h(name)f(of)g(the)h(mac)o(hine)f(to)g(b) q(e)h(added.)274 1433 y Fs(info)71 b FA({)49 b(in)o(teger)21 b(status)f(co)q(de)h(returned)h(b)o(y)d(the)i(routine.)36 b(V)m(alues)20 b(less)g(than)503 1487 y(nhost)g(indicate)f(partial)g (failure;)i(v)n(alues)e(less)h(than)f(1)h(indicate)f(total)503 1541 y(failure.)249 1649 y Fr(Discussion)249 1719 y FA(The)13 b(routine)f Fs(pvm)p 543 1719 V 15 w(addhosts)f FA(adds)h(the)h(list)f (of)f(computers)h(p)q(oin)o(ted)h(to)f(in)f Fs(hosts)h FA(to)g(the)g(existing)249 1773 y(con\014guration)e(of)g(computers)h (making)d(up)j(the)g(virtual)f(mac)o(hine.)16 b(If)10 b(p)o(vm)p 1437 1773 13 2 v 13 w(addhosts)h(is)g(successful,)249 1827 y Fs(info)h FA(will)f(b)q(e)i(equal)f(to)g Fs(nhost)p FA(.)17 b(P)o(artial)11 b(success)k(is)d(indicated)h(b)o(y)f(1)g Fn(<)p FA(=)p Fs(info)p Fn(<)p Fs(nhost)p FA(,)f(and)i(total)249 1881 y(failure)f(b)o(y)g Fs(info)p Fn(<)f FA(1.)18 b(The)12 b(arra)o(y)g Fs(infos)g FA(can)g(b)q(e)h(c)o(hec)o(k)o(ed)h(to)e (determine)g(whic)o(h)g(host)h(caused)g(the)249 1935 y(error.)249 1997 y(The)h(F)m(ortran)e(routine)i Fs(pvmfaddhost)c FA(adds)j(a)g(single)g(host)g(to)g(the)h(con\014guration)e(with)h(eac)o (h)g(call.)249 2059 y(If)h(a)g(host)g(fails,)e(the)j(PVM)g(system)f (will)e(con)o(tin)o(ue)i(to)g(function.)19 b(The)14 b(user)h(can)g(use) g(this)f(routine)249 2113 y(to)20 b(increase)i(the)f(fault)f(tolerance) h(of)f(his)g(PVM)h(application.)36 b(The)21 b(status)g(of)f(hosts)h (can)f(b)q(e)249 2167 y(requested)f(b)o(y)d(the)i(application)d(using)h (p)o(vm)p 983 2167 V 14 w(mstat)f(and)i(p)o(vm)p 1281 2167 V 13 w(con\014g.)27 b(If)16 b(a)h(host)g(has)g(failed,)e(it)249 2221 y(will)c(b)q(e)j(automatically)c(deleted)k(from)d(the)i (con\014guration.)k(With)c(p)o(vm)p 1408 2221 V 13 w(addhosts)g(a)g (replacemen)o(t)249 2275 y(host)19 b(can)g(b)q(e)g(added)g(b)o(y)f(the) h(application.)31 b(It)19 b(is)f(still)g(the)h(resp)q(onsibilit)o(y)f (of)g(the)h(application)249 2329 y(dev)o(elop)q(er)e(to)g(mak)o(e)d (the)j(application)e(toleran)o(t)i(of)e(host)i(failure.)25 b(Another)17 b(use)g(of)f(this)g(feature)249 2383 y(w)o(ould)e(b)q(e)h (to)f(add)g(more)g(hosts)h(as)f(they)h(b)q(ecome)f(a)o(v)n(ailable)f (\(for)h(example,)f(on)h(a)g(w)o(eek)o(end\))h(or)g(if)249 2437 y(the)g(application)d(dynamically)f(determines)j(it)g(could)f(use) i(more)e(computational)e(p)q(o)o(w)o(er.)p eop %%Page: 183 202 183 201 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(183)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(static)20 b(char)h(*hosts[])f(=)i({)756 682 y("sparky",)756 736 y("thud.cs.utk.edu",)495 790 y(};)495 844 y(info)f(=)g(pvm_addhosts\()e (hosts,)i(2,)g(infos)g(\);)274 898 y Fr(F)l(ortran:)495 952 y Fs(CALL)g(PVMFADDHOST\()e('azure',)h(INFO)h(\))249 1059 y Fr(Errors)249 1129 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1129 14 2 v 15 w(addhosts)274 1197 y FA(Name)221 b(P)o(ossible)14 b(Cause)p 249 1215 1338 2 v 274 1252 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(argumen)o(t)h(v) n(alue.)274 1306 y(PvmAlready)98 b(already)14 b(b)q(een)h(added.)274 1360 y(PvmSysErr)120 b(lo)q(cal)13 b(p)o(vmd)g(is)g(not)h(resp)q (onding.)249 1426 y(The)g(follo)o(wing)e(error)i(conditions)g(can)g(b)q (e)h(returned)g(in)f Fs(infos)274 1493 y FA(Name)236 b(P)o(ossible)14 b(Cause)p 249 1511 1352 2 v 274 1548 a(PvmBadP)o(aram)62 b(bad)14 b(hostname)f(syn)o(tax.)274 1602 y(PvmNoHost)120 b(no)14 b(suc)o(h)g(host.)274 1656 y(PvmCan)o(tStart)75 b(failed)13 b(to)g(start)i(p)o(vmd)d(on)i(host.) 274 1710 y(PvmDupHost)94 b(host)14 b(already)g(in)f(con\014guration.) 274 1764 y(PvmBadV)m(ersion)49 b(remote)13 b(p)o(vmd)g(v)o(ersion)h(do) q(esn't)g(matc)o(h.)274 1818 y(PvmOutOfRes)75 b(PVM)14 b(has)g(run)g(out)g(of)f(system)h(resources.)p eop %%Page: 184 203 184 202 bop 249 251 a Fu(184)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfbarrier\(\))725 b(p)n(vm)p 1562 511 21 2 v 24 w(barrier\(\))p 249 595 1591 16 v 249 658 a FA(Blo)q(c)o(ks)14 b(the)h(calling)d(pro)q(cess)k(un)o(til)d(all)g(pro)q(cesses)j(in)e(a)f (group)h(ha)o(v)o(e)g(called)f(it.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(barrier\()e(char)h(*group,)g(int)g(count)f(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfbarrier\()f(group,)g(count,)h (info)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(group)49 b FA({)g(c)o(haracter)15 b(string)e(group)g(name.)k(The)d(group)f(m)o (ust)f(exist)h(and)g(the)h(call-)503 1110 y(ing)g(pro)q(cess)h(m)o(ust) e(b)q(e)i(a)e(mem)o(b)q(er)f(of)i(the)g(group.)274 1164 y Fs(count)49 b FA({)g(in)o(teger)17 b(sp)q(ecifying)f(the)h(n)o(um)o (b)q(er)f(of)f(group)h(mem)o(b)q(ers)f(that)i(m)o(ust)e(call)503 1217 y(p)o(vm)p 585 1217 13 2 v 14 w(barrier)e(b)q(efore)g(they)g(are)f (all)g(released.)18 b(Though)12 b(it)g(can)h(b)q(e)g(di\013er-)503 1271 y(en)o(t,)h(the)h(coun)o(t)f(is)g(exp)q(ected)j(to)c(b)q(e)i(the)g (total)e(n)o(um)o(b)q(er)h(of)f(mem)o(b)q(ers)g(of)503 1325 y(the)i(sp)q(eci\014ed)g(group.)274 1379 y Fs(info)71 b FA({)49 b(in)o(teger)12 b(status)h(co)q(de)f(returned)h(b)o(y)f(the)g (routine.)17 b(V)m(alues)12 b(less)g(than)f(zero)503 1433 y(indicate)j(an)g(error.)249 1541 y Fr(Discussion)249 1611 y FA(The)i(routine)g Fs(pvm)p 550 1611 14 2 v 15 w(barrier)e FA(blo)q(c)o(ks)i(the)g(calling)e(pro)q(cess)j(un)o(til)e Fs(count)g FA(mem)o(b)q(ers)f(of)h(the)h Fs(group)249 1665 y FA(ha)o(v)o(e)i(called)g(p)o(vm)p 553 1665 13 2 v 14 w(barrier.)32 b(The)19 b(coun)o(t)f(argumen)o(t)g(is)g(required) h(b)q(ecause)h(pro)q(cesses)h(could)d(b)q(e)249 1719 y(joining)9 b(the)j(giv)o(en)e(group)h(after)g(other)h(pro)q(cesses)i (ha)o(v)o(e)c(called)h(p)o(vm)p 1339 1719 V 13 w(barrier.)18 b(Th)o(us)11 b(PVM)h(do)q(esn't)249 1773 y(kno)o(w)k(ho)o(w)f(man)o(y)f (group)i(mem)o(b)q(ers)f(to)h(w)o(ait)f(for)h(at)g(an)o(y)f(giv)o(en)h (instan)o(t.)24 b(Although)16 b(coun)o(t)g(can)249 1827 y(b)q(e)f(set)h(less,)f(it)f(is)g(t)o(ypically)g(the)h(total)f(n)o(um)o (b)q(er)f(of)h(mem)o(b)q(ers)g(of)g(the)h(group.)20 b(Hence,)c(the)f (logical)249 1881 y(function)e(of)f(the)h(p)o(vm)p 609 1881 V 14 w(barrier)g(call)f(is)h(to)f(pro)o(vide)h(a)g(group)f(sync)o (hronization.)18 b(During)12 b(an)o(y)h(giv)o(en)249 1935 y(barrier)g(call)e(all)g(participating)h(group)g(mem)o(b)q(ers)f (m)o(ust)g(call)h(barrier)g(with)g(the)h(same)f(coun)o(t)g(v)n(alue.) 249 1989 y(Once)18 b(a)e(giv)o(en)g(barrier)i(has)e(b)q(een)i (successfully)g(passed,)g(p)o(vm)p 1277 1989 V 13 w(barrier)f(can)g(b)q (e)g(called)g(again)e(b)o(y)249 2043 y(the)g(same)e(group)g(using)h (the)g(same)f(group)h(name.)249 2105 y(As)f(a)g(sp)q(ecial)g(case,)h (if)e Fs(count)f FA(equals)i(-1)g(then)g(PVM)h(will)d(use)j(the)f(v)n (alue)f(of)h(p)o(vm)p 1564 2105 V 13 w(gsize\(\))h(\(i.e.,)d(all)249 2159 y(the)17 b(group)f(mem)o(b)q(ers\).)23 b(This)16 b(case)h(is)f(useful)g(after)g(a)g(group)f(is)h(established)h(and)f (not)g(c)o(hanging)249 2213 y(during)e(an)f(application.)249 2275 y(If)h(p)o(vm)p 373 2275 V 13 w(barrier)g(is)g(successful,)h Fs(info)e FA(will)g(b)q(e)h(0.)k(If)13 b(some)g(error)i(o)q(ccurs,)g Fs(info)e FA(will)g(b)q(e)h Fn(<)e FA(0.)p eop %%Page: 185 204 185 203 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(185)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(inum)21 b(=)g (pvm_joingroup\()e("worker")h(\);)669 682 y(.)669 736 y(.)495 790 y(info)h(=)g(pvm_barrier\()e("worker",)h(5)i(\);)274 844 y Fr(F)l(ortran:)495 898 y Fs(CALL)f(PVMFJOINGROUP\()d("shakers",)i (INUM)h(\))495 952 y(COUNT)f(=)i(10)495 1006 y(CALL)f(PVMFBARRIER\()e ("shakers",)h(COUNT,)g(INFO)h(\))249 1112 y Fr(Errors)249 1183 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h (returned)g(b)o(y)f Fs(pvm)p 1238 1183 14 2 v 15 w(barrier)p FA(.)274 1251 y(Name)250 b(P)o(ossible)14 b(Cause)p 249 1269 1367 2 v 274 1306 a(PvmSysErr)149 b(p)o(vmd)13 b(w)o(as)g(not)h (started)h(or)f(has)g(crashed.)274 1360 y(PvmBadP)o(aram)76 b(giving)13 b(a)g(coun)o(t)h Fn(<)e FA(1.)274 1414 y(PvmNoGroup)102 b(giving)13 b(a)g(nonexisten)o(t)i(group)f(name.)274 1468 y(PvmNotInGroup)48 b(calling)13 b(pro)q(cess)i(is)f(not)g(in)f(sp) q(eci\014ed)j(group.)p eop %%Page: 186 205 186 204 bop 249 251 a Fu(186)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfb)r(cast\(\))823 b(p)n(vm)p 1611 511 21 2 v 25 w(b)r(cast\(\))p 249 595 1591 16 v 249 658 a FA(Broadcasts)15 b(the)g(data)e(in)h(the)g(activ)o(e)g(message)g (bu\013er.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(bcast\()f(char)g(*group,)f(int)h (msgtag)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfbcast\()f(group,)h(msgtag,)f(info)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(group)71 b FA({)49 b(c)o(haracter)15 b(string)f(group)g(name)f(of)g(an)h(existing)f(group.)274 1110 y Fs(msgtag)49 b FA({)g(in)o(teger)11 b(message)e(tag)h(supplied)g (b)o(y)g(the)h(user.)18 b(msgtag)8 b(should)i(b)q(e)h Fn(>)p FA(=)h(0.)525 1164 y(It)e(allo)o(ws)f(the)i(user's)g(program)e (to)h(distinguish)f(b)q(et)o(w)o(een)j(di\013eren)o(t)f(kinds)525 1217 y(of)i(messages.)274 1271 y Fs(info)93 b FA({)49 b(in)o(teger)12 b(status)g(co)q(de)h(returned)g(b)o(y)e(the)i(routine.) k(V)m(alues)11 b(less)i(than)e(zero)525 1325 y(indicate)j(an)g(error.) 249 1433 y Fr(Discussion)249 1503 y FA(The)i(routine)f Fs(pvm)p 549 1503 V 15 w(bcast)f FA(broadcasts)i(a)f(message)g(stored)h (in)f(the)g(activ)o(e)g(send)h(bu\013er)h(to)e(all)e(the)249 1557 y(mem)o(b)q(ers)i(of)g Fs(group)p FA(.)23 b(In)15 b(PVM)i(3.2)e(the)h(broadcast)g(message)g(is)g(not)f(sen)o(t)i(bac)o(k) f(to)f(the)i(sender.)249 1611 y(An)o(y)12 b(PVM)g(task)g(can)h(call)e (p)o(vm)p 763 1611 13 2 v 13 w(b)q(cast\(\);)j(it)d(need)i(not)f(b)q(e) h(a)e(mem)o(b)q(er)g(of)g(the)i(group.)k(The)12 b(con)o(ten)o(t)249 1665 y(of)i(the)g(message)g(can)h(b)q(e)f(distinguished)g(b)o(y)g Fs(msgtag)p FA(.)k(If)c(p)o(vm)p 1257 1665 V 13 w(b)q(cast)h(is)f (successful,)h Fs(info)f FA(will)e(b)q(e)249 1719 y(0.)18 b(If)13 b(some)g(error)i(o)q(ccurs,)g Fs(info)e FA(will)f(b)q(e)j Fn(<)d FA(0.)249 1781 y(p)o(vm)p 331 1781 V 13 w(b)q(cast)17 b(is)e(async)o(hronous.)23 b(Computation)14 b(on)h(the)h(sending)g(pro) q(cessor)h(resumes)f(as)f(so)q(on)h(as)249 1835 y(the)d(message)e(is)h (safely)f(on)h(its)g(w)o(a)o(y)f(to)h(the)g(receiving)g(pro)q(cessors.) 20 b(This)11 b(pro)q(cedure)j(is)e(in)f(con)o(trast)249 1889 y(to)f(sync)o(hronous)i(comm)o(uni)o(cation,)c(during)i(whic)o(h)g (computation)e(on)j(the)f(sending)h(pro)q(cessor)h(halts)249 1943 y(un)o(til)h(a)h(matc)o(hing)e(receiv)o(e)j(is)f(executed)h(b)o(y) f(all)f(the)h(receiving)g(pro)q(cessors.)249 2006 y(p)o(vm)p 331 2006 V 13 w(b)q(cast)g(\014rst)f(determines)g(the)g(tids)g(of)f (the)h(group)f(mem)o(b)q(ers)f(b)o(y)i(c)o(hec)o(king)g(a)f(group)g (database.)249 2059 y(A)j(m)o(ulticast)e(is)i(p)q(erformed)f(to)h (these)h(tids.)21 b(If)14 b(the)i(group)e(is)h(c)o(hanged)g(during)g(a) f(broadcast,)h(the)249 2113 y(c)o(hange)j(will)f(not)g(b)q(e)i (re\015ected)h(in)d(the)i(broadcast.)30 b(Multicasting)17 b(is)h(not)f(supp)q(orted)j(b)o(y)d(most)249 2167 y(m)o(ultipro)q (cessor)c(v)o(endors.)18 b(T)o(ypically)12 b(their)h(nativ)o(e)g(calls) g(supp)q(ort)h(only)e(broadcasting)h(to)g FB(al)r(l)f FA(the)249 2221 y(user's)17 b(pro)q(cesses)j(on)c(a)g(m)o(ultipro)q (cessor.)25 b(Because)18 b(of)e(this)h(omission,)d(p)o(vm)p 1508 2221 V 13 w(b)q(cast)k(ma)o(y)c(not)i(b)q(e)249 2275 y(an)e(e\016cien)o(t)g(comm)o(unication)d(metho)q(d)i(on)g(some)g (m)o(ultipro)q(cessors.)p eop %%Page: 187 206 187 205 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(187)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(info)21 b(=)g (pvm_initsend\()e(PvmDataRaw)h(\);)495 682 y(info)h(=)g(pvm_pkint\()f (array,)g(10,)i(1)f(\);)495 736 y(msgtag)f(=)i(5)f(;)495 790 y(info)g(=)g(pvm_bcast\()f("worker",)g(msgtag)g(\);)274 844 y Fr(F)l(ortran:)495 898 y Fs(CALL)h(PVMFINITSEND\()e(PVMDEFAULT)g (\))495 952 y(CALL)i(PVMFPKFLOAT\()e(DATA,)i(100,)g(1,)g(INFO)g(\))495 1006 y(CALL)g(PVMFBCAST\()e('worker',)h(5,)i(INFO)f(\))249 1112 y Fr(Errors)249 1183 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1183 14 2 v 15 w(bcast)p FA(.)274 1251 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1269 1338 2 v 274 1306 a(PvmSysErr)120 b(p)o(vmd)13 b(w)o(as)g(not)h(started)h(or)f(has)g (crashed.)274 1360 y(PvmBadP)o(aram)47 b(giving)13 b(a)g(negativ)o(e)h (msgtag.)274 1414 y(PvmNoGroup)73 b(giving)13 b(a)g(nonexisten)o(t)i (group)f(name.)p eop %%Page: 188 207 188 206 bop 249 251 a Fu(188)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfbu\014nfo\(\))724 b(p)n(vm)p 1561 511 21 2 v 24 w(bu\014nfo\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(information)c(ab)q(out)j(the)g(requested)i(message)e (bu\013er.)249 770 y Fr(Synopsis)274 836 y(C)195 b Fs(int)21 b(info)g(=)h(pvm_bufinfo\()d(int)i(bufid,)g(int)g(*bytes,)1048 890 y(int)g(*msgtag,)f(int)h(*tid)g(\))274 944 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfbufinfo\()f(bufid,)g(bytes,)h(msgtag,)f(tid,)h(info) g(\))249 1051 y Fr(P)o(arameters)274 1110 y Fs(bufid)71 b FA({)49 b(in)o(teger)14 b(sp)q(ecifying)g(a)g(particular)f(message)h (bu\013er)h(iden)o(ti\014er.)274 1164 y Fs(bytes)71 b FA({)49 b(in)o(teger)14 b(returning)h(the)f(length)g(in)g(b)o(ytes)g (of)g(the)g(en)o(tire)h(message.)274 1217 y Fs(msgtag)49 b FA({)g(in)o(teger)14 b(returning)h(the)f(message)g(lab)q(el.)274 1271 y Fs(tid)115 b FA({)49 b(in)o(teger)14 b(returning)h(the)f(source) i(of)d(the)h(message.)274 1325 y Fs(info)93 b FA({)49 b(in)o(teger)12 b(status)g(co)q(de)h(returned)g(b)o(y)e(the)i(routine.) k(V)m(alues)11 b(less)i(than)e(zero)525 1379 y(indicate)j(an)g(error.) 249 1487 y Fr(Discussion)249 1557 y FA(The)f(routine)h Fs(pvm)p 545 1557 14 2 v 15 w(bufinfo)d FA(returns)k(information)10 b(ab)q(out)i(the)i(requested)h(message)e(bu\013er.)18 b(T)o(yp-)249 1611 y(ically)e(it)h(is)h(used)g(to)f(determine)h(facts)g (ab)q(out)f(the)h(last)f(receiv)o(ed)i(message)f(suc)o(h)g(as)f(its)h (size)g(or)249 1665 y(source.)29 b(p)o(vm)p 484 1665 13 2 v 13 w(bu\014nfo)17 b(is)f(esp)q(ecially)i(useful)f(when)g(an)g (application)e(is)i(able)g(to)g(receiv)o(e)h(an)o(y)f(in-)249 1719 y(coming)10 b(message.)17 b(The)c(action)e(tak)o(en)h(dep)q(ends)i (on)d(the)i(source)g Fs(tid)e FA(and)h(the)h Fs(msgtag)d FA(asso)q(ciated)249 1773 y(with)i(the)g(message)g(that)g(comes)f(in)h (\014rst.)18 b(If)11 b(p)o(vm)p 1046 1773 V 14 w(bu\014nfo)g(is)h (successful,)h Fs(info)e FA(will)g(b)q(e)h(0.)17 b(If)12 b(some)249 1827 y(error)j(o)q(ccurs,)g Fs(info)e FA(will)f(b)q(e)j Fn(<)c FA(0.)249 1939 y Fr(Examples)274 2006 y(C:)538 2060 y Fs(bufid)21 b(=)h(pvm_recv\()d(-1,)j(-1)f(\);)538 2114 y(info)g(=)h(pvm_bufinfo\()d(bufid,)i(&bytes,)f(&type,)g(&source)h (\);)274 2168 y Fr(F)l(ortran:)560 2222 y Fs(CALL)g(PVMFRECV\()f(-1,)h (-1,)g(BUFID)g(\))560 2276 y(CALL)g(PVMFBUFINFO\()e(BUFID,)i(BYTES,)f (TYPE,)h(SOURCE,)f(INFO)h(\))249 2382 y Fr(Errors)249 2453 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h (returned)g(b)o(y)f Fs(pvm)p 1238 2453 14 2 v 15 w(bufinfo)p FA(.)p eop %%Page: 189 208 189 207 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(189)274 504 y FA(Name)232 b(P)o(ossible)14 b(Cause)p 249 521 1348 2 v 274 559 a(PvmNoSuc)o(hBuf)49 b(sp)q(eci\014ed)15 b(bu\013er)g(do)q(es)g(not)f(exist.)274 613 y(PvmBadP)o(aram)58 b(in)o(v)n(alid)12 b(argumen)o(t.)p eop %%Page: 190 209 190 208 bop 249 251 a Fu(190)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfcatc)n(hout\(\))625 b(p)n(vm)p 1512 511 21 2 v 25 w(catc)n(hout\(\))p 249 595 1591 16 v 249 658 a FA(Catc)o(hes)15 b(output)f(from)e(c)o(hild)h(tasks.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(#include)20 b(<stdio.h>)481 890 y(int)h(bufid)g(=)h(pvm)p 812 890 14 2 v 15 w(catchout\()e(FILE)h (*ff)g(\))274 944 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfcatchout\()e (onoff)i(\))249 1051 y Fr(P)o(arameters)274 1110 y Fs(ff)115 b FA({)49 b(File)14 b(descriptor)h(on)f(whic)o(h)f(to)h(write)g (collected)h(output.)274 1164 y Fs(onoff)49 b FA({)g(In)o(teger)15 b(parameter.)j(T)m(urns)c(output)g(collection)f(on)h(or)g(o\013.)249 1271 y Fr(Discussion)249 1341 y FA(The)d(routine)g Fs(pvm)p 540 1341 V 15 w(catchout)e FA(causes)j(the)f(calling)e(task)i(\(the)g (paren)o(t\))g(to)g(catc)o(h)g(output)g(from)e(tasks)249 1395 y(spa)o(wned)i(after)f(the)h(call)e(to)h(p)o(vm)p 776 1395 13 2 v 13 w(catc)o(hout.)17 b(Characters)12 b(prin)o(ted)e(on)g FB(stdout)g FA(or)g FB(stderr)f FA(in)h(c)o (hildren)249 1449 y(tasks)k(are)h(collected)f(b)o(y)g(the)g(p)o(vmds)f (and)g(sen)o(t)i(in)e(con)o(trol)h(messages)f(to)h(the)g(paren)o(t)h (task,)e(whic)o(h)249 1503 y(tags)h(eac)o(h)g(line)g(and)f(app)q(ends)i (it)e(to)h(the)g(sp)q(eci\014ed)i(\014le.)i(Output)c(from)e(grandc)o (hildren)i(\(spa)o(wned)249 1557 y(b)o(y)g(c)o(hildren\))g(tasks)g(is)g (also)f(collected,)i(pro)o(vided)e(the)i(c)o(hildren)f(don't)f(reset)j (PvmOutputTid.)249 1619 y(Eac)o(h)e(line)g(of)f(output)h(has)g(one)g (of)f(the)i(follo)o(wing)c(forms:)249 1698 y Fs([txxxxx])20 b(BEGIN)249 1752 y([txxxxx])g(\(text)h(from)g(child)g(task\))249 1806 y([txxxxx])f(END)249 1885 y FA(The)c(output)f(from)e(eac)o(h)j (task)f(includes)h(one)f(BEGIN)h(line)e(and)h(one)h(END)f(line,)f(with) h(whatev)o(er)249 1939 y(the)g(task)f(prin)o(ts)g(in)f(b)q(et)o(w)o (een.)249 2001 y(In)18 b(C,)f(the)i(output)e(\014le)h(descriptor)h(ma)o (y)d(b)q(e)j(sp)q(eci\014ed.)31 b(Giving)16 b(a)h(n)o(ull)g(p)q(oin)o (ter)h(turns)h(output)249 2055 y(collection)c(o\013.)22 b Fr(Note:)f FA(The)16 b(\014le)f(option)g(is)g(not)g(implemen)o(ted)e (in)i(PVM)g(3.3.0;)f(output)h(go)q(es)h(to)249 2109 y(calling)d(task's) g(stdout.)249 2172 y(In)g(F)m(ortran,)g(output)g(collection)g(can)g (only)f(b)q(e)i(turned)g(on)f(or)g(o\013,)f(and)h(is)g(logged)g(to)f (stdout)i(of)e(the)249 2226 y(paren)o(t)i(task.)249 2288 y(If)c Fs(pvm)p 356 2288 14 2 v 15 w(exit)g FA(is)g(called)g(while)g (output)g(collection)g(is)g(in)g(e\013ect,)j(it)c(will)g(blo)q(c)o(k)h (un)o(til)g(all)f(tasks)i(sending)249 2342 y(it)j(output)h(ha)o(v)o(e)f (exited,)h(in)f(order)i(to)e(prin)o(t)g(all)g(their)h(output.)20 b(T)m(o)14 b(a)o(v)o(oid)f(this,)h(one)h(can)g(turn)g(o\013)249 2396 y(the)g(output)f(collection)f(b)o(y)h(calling)e(p)o(vm)p 912 2396 13 2 v 14 w(catc)o(hout\(0\))i(b)q(efore)h(calling)d(p)o(vm)p 1484 2396 V 14 w(exit.)249 2458 y(p)o(vm)p 331 2458 V 13 w(catc)o(hout\(\))j(alw)o(a)o(ys)e(returns)i(PvmOk.)p eop %%Page: 191 210 191 209 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(191)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(#include)20 b(<stdio.h>)495 682 y(pvm_catchout\(st)o(dout\))o(;)274 736 y Fr(F)l(ortran:)495 790 y Fs(CALL)h(PVMFCATCHOUT\()e(1)i(\))249 897 y Fr(Errors)249 967 y FA(No)14 b(error)h(conditions)e(are)h (returned)i(b)o(y)e Fs(pvm)p 980 967 14 2 v 15 w(catchout)p FA(.)p eop %%Page: 192 211 192 210 bop 249 251 a Fu(192)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfcon\014g\(\))788 b(p)n(vm)p 1593 511 21 2 v 25 w(con\014g\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(information)c(ab)q(out)j(the)g(presen)o(t)i(virtual)d (mac)o(hine)f(con\014guration.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(config\()e(int)i(*nhost,)e(int)h(*narch,)743 890 y(struct)f(pvmhostinfo)g(**hostp)g(\))481 944 y(struct)h (pvmhostinfo)e({)568 998 y(int)43 b(hi_tid;)568 1052 y(char)21 b(*hi_name;)568 1106 y(char)g(*hi_arch;)568 1160 y(int)43 b(hi_speed;)481 1214 y(})22 b(hostp;)274 1268 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfconfig\()f(nhost,)g(narch,)h (dtid,)874 1322 y(name,)f(arch,)h(speed,)g(info)g(\))249 1429 y Fr(P)o(arameters)274 1487 y Fs(nhost)49 b FA({)g(in)o(teger)22 b(returning)g(the)g(n)o(um)o(b)q(er)f(of)g(hosts)h(\(p)o(vmds\))f(in)g (the)h(virtual)503 1541 y(mac)o(hine.)274 1595 y Fs(narch)49 b FA({)g(in)o(teger)11 b(returning)g(the)f(n)o(um)o(b)q(er)g(of)f (di\013eren)o(t)i(data)f(formats)f(b)q(eing)h(used.)274 1649 y Fs(hostp)49 b FA({)g(p)q(oin)o(ter)15 b(to)f(an)f(arra)o(y)h(of) g(structures)i(that)f(con)o(tain)e(information)e(ab)q(out)503 1703 y(eac)o(h)18 b(host,)f(including)f(its)h(p)o(vmd)f(task)h(ID,)f (name,)g(arc)o(hitecture,)j(and)503 1757 y(relativ)o(e)14 b(sp)q(eed.)274 1811 y Fs(dtid)71 b FA({)49 b(In)o(teger)15 b(returning)g(p)o(vmd)d(task)i(ID)f(for)h(this)g(host.)274 1865 y Fs(name)71 b FA({)49 b(Character)15 b(string)f(returning)h(name) d(of)i(this)g(host.)274 1919 y Fs(arch)71 b FA({)49 b(Character)15 b(string)f(returning)h(name)d(of)i(host)g(arc)o(hitecture.)274 1973 y Fs(speed)49 b FA({)g(In)o(teger)21 b(returning)g(relativ)o(e)e (sp)q(eed)j(of)d(this)h(host.)37 b(Default)19 b(v)n(alue)g(is)503 2027 y(1000.)274 2081 y Fs(info)71 b FA({)49 b(in)o(teger)12 b(status)h(co)q(de)f(returned)h(b)o(y)f(the)g(routine.)17 b(V)m(alues)12 b(less)g(than)f(zero)503 2135 y(indicate)j(an)g(error.) 249 2242 y Fr(Discussion)249 2313 y FA(The)19 b(routine)f Fs(pvm)p 555 2313 V 15 w(config)f FA(returns)j(information)15 b(ab)q(out)j(the)h(presen)o(t)h(virtual)d(mac)o(hine.)30 b(The)249 2367 y(information)9 b(returned)14 b(is)e(similar)d(to)j (that)g(a)o(v)n(ailable)e(from)g(the)j(console)f(command)d Fs(conf)p FA(.)17 b(The)12 b(C)249 2421 y(function)j(returns)i (information)12 b(ab)q(out)j(the)h(en)o(tire)g(virtual)f(mac)o(hine)f (in)h(one)g(call.)21 b(The)16 b(F)m(ortran)249 2475 y(function)h (returns)h(information)c(ab)q(out)j(one)g(host)g(p)q(er)h(call)e(and)h (cycles)h(through)f(all)e(the)j(hosts.)p eop %%Page: 193 212 193 211 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(193)249 507 y FA(Th)o(us,)13 b(if)g(p)o(vmfcon\014g)f(is)h(called)g(nhost)h (times,)e(the)i(en)o(tire)g(virtual)f(mac)o(hine)f(will)g(b)q(e)i (represen)o(ted.)249 561 y(If)g(p)o(vm)p 373 561 13 2 v 13 w(con\014g)g(is)g(successful,)h Fs(info)e FA(will)f(b)q(e)j(0.)i (If)d(some)f(error)i(o)q(ccurs,)g Fs(info)e FA(will)f(b)q(e)j Fn(<)c FA(0.)249 673 y Fr(Examples)274 740 y(C:)495 794 y Fs(info)21 b(=)g(pvm_config\()f(&nhost,)g(&narch,)g(&hostp)h(\);)274 848 y Fr(F)l(ortran:)495 902 y Fs(Do)g(i=1,)g(NHOST)538 956 y(CALL)g(PVMFCONFIG\()f(NHOST,NARCH,DTID)o(\(i\),H)o(OST\()o (i\),AR)o(CH\(i\))o(,)909 1010 y(SPEED\(i\),INFO)f(\))495 1064 y(Enddo)249 1225 y Fr(Errors)249 1295 y FA(The)14 b(follo)o(wing)e(error)i(condition)g(can)g(b)q(e)g(returned)i(b)o(y)e Fs(pvm)p 1222 1295 14 2 v 15 w(config)274 1363 y FA(Name)151 b(P)o(ossible)14 b(Cause)p 249 1381 1267 2 v 274 1418 a(PvmSysErr)50 b(p)o(vmd)12 b(not)i(resp)q(onding.)p eop %%Page: 194 213 194 212 bop 249 251 a Fu(194)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfdelhost\(\))681 b(p)n(vm)p 1527 511 21 2 v 24 w(delhosts\(\))p 249 595 1591 16 v 249 658 a FA(Deletes)15 b(one)f(or)g(more)f(hosts)h(from)f(the)h(virtual)f(mac)o(hine.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(delhosts\()e(char)h(**hosts,)f(int)h(nhost,)g(int)g (*infos)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfdelhost\()f(host,)g(info)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(hosts)49 b FA({)g(an)14 b(arra)o(y)f(of)g(p)q(oin)o(ters)h (to)g(c)o(haracter)g(strings)g(con)o(taining)f(the)h(names)f(of)503 1110 y(the)i(mac)o(hines)e(to)h(b)q(e)g(deleted.)274 1164 y Fs(nhost)49 b FA({)g(in)o(teger)15 b(sp)q(ecifying)e(the)i(n)o (um)o(b)q(er)e(of)g(hosts)i(to)f(b)q(e)g(deleted.)274 1217 y Fs(infos)49 b FA({)g(in)o(teger)15 b(arra)o(y)g(of)f(length)g Fs(nhost)g FA(whic)o(h)g(con)o(tains)h(the)g(status)g(co)q(de)h(re-)503 1271 y(turned)h(b)o(y)e(the)h(routine)g(for)f(the)h(individual)e (hosts.)24 b(V)m(alues)15 b(less)h(than)503 1325 y(zero)f(indicate)f (an)g(error.)274 1379 y Fs(host)71 b FA({)49 b(c)o(haracter)11 b(string)f(con)o(taining)f(the)h(name)e(of)h(the)i(mac)o(hine)d(to)h(b) q(e)i(deleted.)274 1433 y Fs(info)71 b FA({)49 b(in)o(teger)21 b(status)f(co)q(de)h(returned)h(b)o(y)d(the)i(routine.)36 b(V)m(alues)20 b(less)g(than)503 1487 y(nhost)g(indicate)f(partial)g (failure;)i(v)n(alues)e(less)h(than)f(1)h(indicate)f(total)503 1541 y(failure.)249 1649 y Fr(Discussion)249 1719 y FA(The)i(routine)g Fs(pvm)p 560 1719 V 15 w(delhosts)e FA(deletes)j(from)d(the)i(virtual)f (mac)o(hine)g(one)h(or)f(more)g(computers)249 1773 y(p)q(oin)o(ted)f (to)g(in)f Fs(hosts)p FA(.)32 b(All)18 b(PVM)h(pro)q(cesses)i(and)e (the)g(p)o(vmd)f(running)g(on)h(these)h(computers)249 1827 y(are)15 b(killed)f(as)g(the)i(computer)e(is)h(deleted.)21 b(If)14 b(p)o(vm)p 1069 1827 13 2 v 13 w(delhosts)i(is)e(successful,)i Fs(info)e FA(will)f(b)q(e)j Fs(nhost)p FA(.)249 1881 y(P)o(artial)d(success)k(is)d(indicated)g(b)o(y)g(1)g Fn(<)p FA(=)h Fs(info)e Fn(<)i Fs(nhost)p FA(,)d(and)i(total)g(failure) f(b)o(y)h Fs(info)f Fn(<)i FA(1.)k(The)249 1935 y(arra)o(y)14 b Fs(infos)e FA(can)j(b)q(e)f(c)o(hec)o(k)o(ed)h(to)f(determine)g(whic) o(h)g(host)g(caused)h(the)f(error.)249 1997 y(The)g(F)m(ortran)e (routine)i Fs(pvmfdelhost)c FA(deletes)15 b(a)d(single)h(host)g(from)f (the)h(con\014guration)g(with)g(eac)o(h)249 2051 y(call.)249 2113 y(If)i(a)h(host)f(fails,)g(the)h(PVM)g(system)f(will)g(con)o(tin)o (ue)g(to)h(function)f(and)g(will)g(automatically)d(delete)249 2167 y(this)k(host)g(from)e(the)i(virtual)f(mac)o(hine.)22 b(An)16 b(application)e(can)i(b)q(e)g(noti\014ed)g(of)f(a)g(host)h (failure)f(b)o(y)249 2221 y(calling)e(p)o(vm)p 463 2221 V 14 w(notify)m(.)19 b(It)c(is)f(still)g(the)i(resp)q(onsibilit)o(y)e (of)g(the)h(application)f(dev)o(elop)q(er)h(to)g(mak)o(e)e(his)249 2275 y(application)g(toleran)o(t)g(of)h(host)g(failure.)p eop %%Page: 195 214 195 213 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(195)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(static)20 b(char)h(*hosts[])f(=)i({)756 682 y("sparky",)756 736 y("thud.cs.utk.edu",)495 790 y(};)495 844 y(info)f(=)g(pvm_delhosts\()e (hosts,)i(2)g(\);)274 898 y Fr(F)l(ortran:)495 952 y Fs(CALL)g(PVMFDELHOST\()e('azure',)h(INFO)h(\))249 1059 y Fr(Errors)249 1129 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g (can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1129 14 2 v 15 w(delhosts)p FA(.)274 1197 y(Name)221 b(P)o(ossible)14 b(cause)p 249 1215 1338 2 v 274 1252 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(argumen)o(t)h(v)n(alue.)274 1306 y(PvmSysErr)120 b(lo)q(cal)13 b(p)o(vmd)g(not)g(resp)q(onding.)274 1360 y(PvmOutOfRes)60 b(PVM)14 b(has)h(run)f(out)g(of)f(system)g (resources.)p eop %%Page: 196 215 196 214 bop 249 251 a Fu(196)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfexit\(\))910 b(p)n(vm)p 1655 511 21 2 v 25 w(exit\(\))p 249 595 1591 16 v 249 658 a FA(T)m(ells)13 b(the)i(lo)q(cal)e(p)o(vmd)f(that)i(this)g(pro)q(cess)i(is)d(lea)o (ving)g(PVM.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(exit\()f(void)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfexit\()f(info)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(info)49 b FA({)h(in)o(teger)12 b(status)g(co)q(de)g(returned)i(b)o(y)d(the)h(routine.)17 b(V)m(alues)12 b(less)g(than)g(zero)482 1110 y(indicate)h(an)h(error.) 249 1217 y Fr(Discussion)249 1287 y FA(The)e(routine)g Fs(pvm)p 542 1287 V 15 w(exit)e FA(tells)i(the)g(lo)q(cal)e(p)o(vmd)g (that)i(this)f(pro)q(cess)j(is)d(lea)o(ving)f(PVM.)h(This)h(routine)249 1341 y(do)q(es)k(not)e(kill)g(the)h(pro)q(cess,)i(whic)o(h)d(can)h(con) o(tin)o(ue)g(to)g(p)q(erform)f(tasks)h(just)g(lik)o(e)f(an)o(y)h(other) g(serial)249 1395 y(pro)q(cess.)249 1458 y(Pvm)p 337 1458 13 2 v 14 w(exit)h(should)h(b)q(e)g(called)g(b)o(y)f(all)f(PVM)i (pro)q(cesses)j(b)q(efore)d(they)g(stop)g(or)g(exit)g(for)f(go)q(o)q (d.)26 b(It)249 1512 y FB(must)14 b FA(b)q(e)g(called)g(b)o(y)g(pro)q (cesses)i(that)e(w)o(ere)h(not)f(started)h(with)e(p)o(vm)p 1338 1512 V 14 w(spa)o(wn.)249 1624 y Fr(Examples)274 1690 y(C:)495 1744 y Fs(/*)21 b(Program)f(done)h(*/)495 1798 y(pvm_exit\(\);)495 1852 y(exit\(\);)274 1906 y Fr(F)l(ortran:)495 1960 y Fs(CALL)g(PVMFEXIT\(INFO\))495 2014 y(STOP)249 2121 y Fr(Errors)249 2191 y FA(The)14 b(follo)o(wing)e(error)i(condition)g(can)g(b)q(e)g(returned)i(b)o(y)e Fs(pvm)p 1222 2191 14 2 v 15 w(exit\(\))p FA(.)274 2259 y(Name)151 b(P)o(ossible)14 b(Cause)p 249 2277 1267 2 v 274 2315 a(PvmSysErr)50 b(p)o(vmd)12 b(not)i(resp)q(onding)p eop %%Page: 197 216 197 215 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(197)291 511 y FE(p)n(vm\013reebuf\(\))721 b(p)n(vm)p 1559 511 21 2 v 25 w(freebuf\(\))p 249 595 1591 16 v 249 658 a FA(Disp)q(oses)15 b(of)e(a)h(message)f(bu\013er.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(freebuf\()e(int)h(bufid)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmffreebuf\()f(bufid,)g(info)h (\))249 997 y Fr(P)o(arameters)274 1056 y Fs(bufid)49 b FA({)g(in)o(teger)15 b(message)e(bu\013er)i(iden)o(ti\014er.)274 1110 y Fs(info)71 b FA({)49 b(in)o(teger)12 b(status)h(co)q(de)f (returned)h(b)o(y)f(the)g(routine.)17 b(V)m(alues)12 b(less)g(than)f(zero)503 1164 y(indicate)j(an)g(error.)249 1271 y Fr(Discussion)249 1341 y FA(The)f(routine)f Fs(pvm)p 543 1341 V 15 w(freebuf)f FA(frees)i(the)g(memory)c(asso)q(ciated)k (with)f(the)h(message)f(bu\013er)h(iden)o(ti\014ed)249 1395 y(b)o(y)i Fs(bufid)p FA(.)22 b(Message)16 b(bu\013ers)h(are)f (created)h(b)o(y)e(p)o(vm)p 1112 1395 13 2 v 14 w(mkbuf,)e(p)o(vm)p 1348 1395 V 14 w(initsend,)i(and)g(p)o(vm)p 1694 1395 V 14 w(recv.)23 b(If)249 1449 y(p)o(vm)p 331 1449 V 13 w(freebuf)15 b(is)f(successful,)h Fs(info)e FA(will)f(b)q(e)j(0.)i(If)d (some)f(error)i(o)q(ccurs,)g Fs(info)e FA(will)f(b)q(e)j Fn(<)c FA(0.)249 1512 y(p)o(vm)p 331 1512 V 13 w(freebuf)j(can)f(b)q(e) g(called)g(for)f(a)h(send)h(bu\013er)f(created)i(b)o(y)d(p)o(vm)p 1317 1512 V 14 w(mkbuf)f(after)i(the)g(message)g(has)249 1566 y(b)q(een)i(sen)o(t)g(and)f(is)f(no)h(longer)g(needed.)249 1628 y(Receiv)o(e)19 b(bu\013ers)i(t)o(ypically)c(do)i(not)f(ha)o(v)o (e)h(to)g(b)q(e)g(freed)h(unless)f(they)h(ha)o(v)o(e)e(b)q(een)i(sa)o (v)o(ed)f(in)f(the)249 1682 y(course)d(of)f(using)f(m)o(ultiple)f (bu\013ers.)20 b(But)14 b(p)o(vm)p 1011 1682 V 14 w(freebuf)g(can)g(b)q (e)h(used)g(to)f(destro)o(y)g(receiv)o(e)i(bu\013ers)249 1736 y(as)h(w)o(ell.)27 b(Therefore,)19 b(messages)e(that)g(arriv)o(e)g (but)g(are)h(no)e(longer)h(needed)i(as)e(a)g(result)g(of)g(some)249 1790 y(other)e(ev)o(en)o(t)f(in)g(an)f(application)g(can)h(b)q(e)g (destro)o(y)o(ed)h(so)f(they)h(will)d(not)i(consume)f(bu\013er)i (space.)249 1852 y(T)o(ypically)m(,)c(m)o(ultiple)g(send)j(and)g (receiv)o(e)g(bu\013ers)h(are)f(not)f(needed,)i(and)e(the)h(user)g(can) g(simply)d(use)249 1906 y(the)k(p)o(vm)p 403 1906 V 13 w(initsend)f(routine)g(to)g(reset)h(the)g(default)e(send)i(bu\013er.) 249 1968 y(There)f(are)g(sev)o(eral)f(cases)h(where)h(m)o(ultiple)10 b(bu\013ers)15 b(are)e(useful.)18 b(One)c(example)d(in)o(v)o(olv)o(es)h (libraries)249 2022 y(or)i(graphical)f(in)o(terfaces)i(that)f(use)g (PVM)g(and)g(in)o(teract)h(with)e(a)h(running)f(PVM)h(application)f (but)249 2076 y(do)20 b(not)f(w)o(an)o(t)h(to)f(in)o(terfere)i(with)e (the)i(application's)d(o)o(wn)h(comm)o(unication.)32 b(When)20 b(m)o(ultiple)249 2130 y(bu\013ers)c(are)f(used,)g(they)g (generally)f(are)h(made)e(and)h(freed)i(for)e(eac)o(h)h(message)f(that) h(is)f(pac)o(k)o(ed.)20 b(In)249 2184 y(fact,)c(p)o(vm)p 427 2184 V 13 w(initsend)g(simply)d(do)q(es)k(a)e(p)o(vm)p 945 2184 V 14 w(freebuf)h(follo)o(w)o(ed)e(b)o(y)h(a)h(p)o(vm)p 1437 2184 V 13 w(mkbuf)e(for)h(the)h(default)249 2238 y(bu\013er.)p eop %%Page: 198 217 198 216 bop 249 251 a Fu(198)1321 b(App)q(endix)15 b(B)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(bufid)20 b(=)i(pvm_mkbuf\()e(PvmDataDefault)f(\);)625 682 y(:)495 736 y(info)i(=)g(pvm_freebuf\()e(bufid)i(\);)274 790 y Fr(F)l(ortran:)495 844 y Fs(CALL)g(PVMFMKBUF\()e(PVMDEFAULT,)h(BUFID) h(\))625 898 y(:)495 952 y(CALL)g(PVMFFREEBUF\()e(BUFID,)h(INFO)h(\)) 249 1059 y Fr(Errors)249 1129 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1129 14 2 v 15 w(freebuf)p FA(.)274 1197 y(Name)232 b(P)o(ossible)14 b(Cause)p 249 1215 1348 2 v 274 1252 a(PvmBadP)o(aram)58 b(giving)12 b(an)i(in)o(v)n(alid)e(argumen)o(t)h(v) n(alue.)274 1306 y(PvmNoSuc)o(hBuf)49 b(giving)12 b(an)i(in)o(v)n(alid) e(bu\014d)i(v)n(alue.)p eop %%Page: 199 218 199 217 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(199)291 511 y FE(p)n(vmfgetinst\(\))730 b(p)n(vm)p 1565 511 21 2 v 25 w(getinst\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f(instance)h(n)o(um)o(b)q(er)e(in)h(a)f(group)h(of)f(a)h(PVM)g (pro)q(cess.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(inum)g(=)h(pvm)p 790 836 14 2 v 15 w(getinst\()e(char)h (*group,)g(int)g(tid)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfgetinst\()f(group,)g(tid,)h(inum)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(group)49 b FA({)g(c)o(haracter)16 b(string)e(group)f(name)g(of)g(an)h(existing)f(group.)274 1110 y Fs(tid)93 b FA({)49 b(in)o(teger)15 b(task)f(iden)o(ti\014er)g (of)f(a)h(PVM)g(pro)q(cess.)274 1164 y Fs(inum)71 b FA({)49 b(in)o(teger)15 b(instance)g(n)o(um)o(b)q(er)f(returned)i(b)o(y)e(the)h (routine.)k(Instance)d(n)o(um-)503 1217 y(b)q(ers)i(start)e(at)g(0)g (and)g(coun)o(t)h(up.)25 b(V)m(alues)15 b(less)i(than)f(zero)h (indicate)g(an)503 1271 y(error.)249 1379 y Fr(Discussion)249 1449 y FA(The)d(routine)f Fs(pvm)p 545 1449 V 15 w(getinst)f FA(tak)o(es)h(a)g(group)g(name)f Fs(group)g FA(and)h(a)g(PVM)h(task)f (iden)o(ti\014er)h Fs(tid)e FA(and)249 1503 y(returns)20 b(the)f(unique)g(instance)g(n)o(um)o(b)q(er)f(that)h(corresp)q(onds)h (to)f(the)g(input.)32 b(If)18 b(p)o(vm)p 1663 1503 13 2 v 13 w(getinst)h(is)249 1557 y(successful,)c Fs(inum)e FA(will)g(b)q(e)h Fn(>)p FA(=)e(0.)18 b(If)c(some)f(error)h(o)q(ccurs,) h Fs(inum)e FA(will)g(b)q(e)h Fn(<)e FA(0.)249 1669 y Fr(Examples)274 1736 y(C:)495 1790 y Fs(inum)21 b(=)g(pvm_getinst\()e ("worker",)h(pvm_mytid\(\))g(\);)495 1844 y(--------)495 1898 y(inum)h(=)g(pvm_getinst\()e("worker",)h(tid[i])h(\);)274 1952 y Fr(F)l(ortran:)495 2006 y Fs(CALL)g(PVMFGETINST\()e('GROUP3',)h (TID,)h(INUM)g(\))249 2113 y Fr(Errors)249 2183 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2183 14 2 v 15 w(getinst)p FA(.)274 2251 y(Name)250 b(P)o(ossible)14 b(Cause)p 249 2269 1367 2 v 274 2307 a(PvmSysErr)149 b(p)o(vmd)13 b(w)o(as)g(not)h(started)h(or)f (has)g(crashed.)274 2361 y(PvmBadP)o(aram)76 b(giving)13 b(an)g(in)o(v)n(alid)f(tid)i(v)n(alue.)274 2414 y(PvmNoGroup)102 b(giving)13 b(a)g(nonexisten)o(t)i(group)f(name.)274 2468 y(PvmNotInGroup)48 b(sp)q(ecifying)14 b(a)g(group)f(in)h(whic)o(h) g(the)g(tid)g(is)f(not)h(a)g(mem)o(b)q(er.)p eop %%Page: 200 219 200 218 bop 249 251 a Fu(200)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfgetopt\(\))755 b(p)n(vm)p 1577 511 21 2 v 25 w(getopt\(\))p 249 595 1591 16 v 249 658 a FA(Sho)o(ws)14 b(v)n(arious)f(libp)o(vm)f(options.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(val)h(=)f(pvm)p 768 836 14 2 v 15 w(getopt\()g(int)g(what)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfgetrbuf\()f(what,)g(val)i(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(what)49 b FA({)h(In)o(teger)14 b(de\014ning)g(what)g(to)g(get.)k(Options)c(include)g(the)h(follo)o (wing:)577 1110 y(Option)f(v)n(alue)120 b(Meaning)p 482 1127 1244 2 v 528 1165 a Fs(PvmRoute)157 b FA(1)50 b(routing)13 b(p)q(olicy)528 1219 y Fs(PvmDebugMask)69 b FA(2)50 b(debugmask)528 1273 y Fs(PvmAutoErr)113 b FA(3)50 b(auto)13 b(error)i(rep)q(orting)528 1327 y Fs(PvmOutputTid)69 b FA(4)50 b(stdout)14 b(device)h(for)f(c)o (hildren)528 1381 y Fs(PvmOutputCode)47 b FA(5)j(output)14 b(msgtag)528 1435 y Fs(PvmTraceTid)91 b FA(6)50 b(trace)15 b(device)f(for)g(c)o(hildren)528 1489 y Fs(PvmTraceCode)69 b FA(7)50 b(trace)15 b(msgtag)528 1543 y Fs(PvmFragSize)91 b FA(8)50 b(message)14 b(fragmen)o(t)e(size)528 1597 y Fs(PvmResvTids)91 b FA(9)50 b(Allo)o(w)13 b(messages)g(to)h(reserv)o (ed)i(tags)e(and)g(TIDs)p 482 1615 V 274 1706 a Fs(val)71 b FA({)50 b(In)o(teger)13 b(sp)q(ecifying)g(v)n(alue)g(of)f(option.)17 b(Prede\014ned)e(route)e(v)n(alues)g(are)g(as)482 1760 y(follo)o(ws:)588 1814 y(Option)h(v)n(alue)131 b(Meaning)p 482 1832 751 2 v 528 1870 a Fs(PvmRoute)179 b FA(1)50 b(routing)13 b(p)q(olicy)528 1924 y Fs(PvmDontRoute)91 b FA(1)528 1978 y Fs(PvmAllowDirect)47 b FA(2)528 2032 y Fs(PvmRouteDirect)g FA(3)p 482 2050 V 249 2195 a Fr(Discussion)249 2265 y FA(The)19 b(routine)g Fs(pvm)p 556 2265 14 2 v 15 w(getopt)e FA(allo)o(ws)h(the)h(user)h(to)e(see)i(the)f(v)n(alue)f (of)h(options)f(set)h(in)g(PVM.)f(See)249 2319 y(p)o(vm)p 331 2319 13 2 v 13 w(setopt)d(for)f(a)f(description)i(of)e(options)h (that)g(can)g(b)q(e)g(set.)p eop %%Page: 201 220 201 219 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(201)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(route_method)19 b(=)i(pvm_getopt\()f(PvmRoute)g(\);)274 682 y Fr(F)l(ortran:)495 736 y Fs(CALL)h(PVMFGETOPT\()e(PVMAUTOERR,)h(VAL)h(\))249 843 y Fr(Errors)249 913 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 913 14 2 v 15 w(getopt)p FA(.)274 981 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 999 1338 2 v 274 1037 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(argumen)o(t.)p eop %%Page: 202 221 202 220 bop 249 251 a Fu(202)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfgetrbuf\(\))703 b(p)n(vm)p 1551 511 21 2 v 24 w(getrbuf\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f(message)g(bu\013er)h(iden)o(ti\014er)f(for)g(the)g(activ)o(e)g (receiv)o(e)h(bu\013er.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(bufid)g(=)h(pvm)p 812 836 14 2 v 15 w(getrbuf\()e(void)h(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfgetrbuf\()f(bufid)g(\))249 997 y Fr(P)o(arameters) 274 1056 y Fs(bufid)49 b FA({)g(in)o(teger)10 b(the)h(returned)g (message)f(bu\013er)g(iden)o(ti\014er)g(for)g(the)g(activ)o(e)g(receiv) o(e)503 1110 y(bu\013er.)249 1217 y Fr(Discussion)249 1287 y FA(The)g(routine)g Fs(pvm)p 538 1287 V 15 w(getrbuf)f FA(returns)i(the)f(message)g(bu\013er)g(iden)o(ti\014er)h Fs(bufid)d FA(for)i(the)g(activ)o(e)g(receiv)o(e)249 1341 y(bu\013er)15 b(or)f(0)f(if)g(there)j(is)d(no)h(curren)o(t)h (bu\013er.)249 1453 y Fr(Examples)274 1520 y(C:)495 1574 y Fs(bufid)20 b(=)i(pvm_getrbuf\(\);)274 1628 y Fr(F)l(ortran:)495 1682 y Fs(CALL)f(PVMFGETRBUF\()e(BUFID)i(\))249 1789 y Fr(Errors)249 1859 y FA(No)14 b(error)h(conditions)e(are)h(returned)i (b)o(y)e Fs(pvm)p 980 1859 V 15 w(getrbuf)p FA(.)p eop %%Page: 203 222 203 221 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(203)291 511 y FE(p)n(vmfgetsbuf\(\))705 b(p)n(vm)p 1552 511 21 2 v 25 w(getsbuf\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f(message)g(bu\013er)h(iden)o(ti\014er)f(for)g(the)g(activ)o(e)g (send)h(bu\013er.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(bufid)g(=)h(pvm)p 812 836 14 2 v 15 w(getsbuf\()e(void)h (\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfgetsbuf\()f(bufid)g (\))249 997 y Fr(P)o(arameters)274 1056 y Fs(bufid)49 b FA({)g(in)o(teger)15 b(the)g(returned)h(message)e(bu\013er)h(iden)o (ti\014er)g(for)f(the)h(activ)o(e)f(send)503 1110 y(bu\013er.)249 1217 y Fr(Discussion)249 1287 y FA(The)g(routine)f Fs(pvm)p 545 1287 V 15 w(getsbuf)f FA(returns)j(the)e(message)g(bu\013er)i(iden) o(ti\014er)e Fs(bufid)f FA(for)h(the)h(activ)o(e)f(send)249 1341 y(bu\013er)i(or)f(0)f(if)g(there)j(is)d(no)h(curren)o(t)h (bu\013er.)249 1453 y Fr(Examples)274 1520 y(C:)495 1574 y Fs(bufid)20 b(=)i(pvm_getsbuf\(\);)274 1628 y Fr(F)l(ortran:)495 1682 y Fs(CALL)f(PVMFGETSBUF\()e(BUFID)i(\))249 1789 y Fr(Errors)249 1859 y FA(No)14 b(error)h(conditions)e(are)h(returned)i (b)o(y)e Fs(pvm)p 980 1859 V 15 w(getsbuf)p FA(.)p eop %%Page: 204 223 204 222 bop 249 251 a Fu(204)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfgettid\(\))784 b(p)n(vm)p 1592 511 21 2 v 25 w(gettid\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f(tid)g(of)f(the)i(pro)q(cess)g(iden)o(ti\014ed)f(b)o(y)g(a)g (group)f(name)g(and)h(instance)g(n)o(um)o(b)q(er.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(tid)h(=)f(pvm)p 768 836 14 2 v 15 w(gettid\()g(char)g(*group,)f(int)h(inum)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfgettid\()f(group,)g(inum,)h (tid)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(group)49 b FA({)g(c)o(haracter)16 b(string)e(that)f(con)o(tains)h(the)h(name)d (of)i(an)f(existing)h(group.)274 1110 y Fs(inum)71 b FA({)49 b(in)o(teger)15 b(instance)f(n)o(um)o(b)q(er)f(of)h(the)g(pro)q (cess)i(in)d(the)i(group.)274 1164 y Fs(tid)93 b FA({)49 b(in)o(teger)15 b(task)f(iden)o(ti\014er)g(returned.)249 1271 y Fr(Discussion)249 1341 y FA(The)e(routine)f Fs(pvm)p 541 1341 V 15 w(gettid)f FA(returns)i(the)g(tid)f(of)f(the)i(PVM)g(pro) q(cess)g(iden)o(ti\014ed)g(b)o(y)f(the)g(group)g(name)249 1395 y Fs(group)16 b FA(and)g(the)i(instance)f(n)o(um)o(b)q(er)f Fs(inum)p FA(.)26 b(If)16 b(p)o(vm)p 1103 1395 13 2 v 13 w(gettid)h(is)g(successful,)h Fs(tid)e FA(will)f(b)q(e)j Fn(>)e FA(0.)26 b(If)249 1449 y(some)13 b(error)i(o)q(ccurs,)g Fs(tid)e FA(will)f(b)q(e)j Fn(<)d FA(0.)249 1561 y Fr(Examples)274 1628 y(C:)538 1682 y Fs(tid)21 b(=)h(pvm_gettid\("worke)o(r",0\))o(;) 274 1736 y Fr(F)l(ortran:)560 1790 y Fs(CALL)f(PVMFGETTID\('worke)o (r',5,)o(TID\))249 1897 y Fr(Errors)249 1967 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1967 14 2 v 15 w(gettid)p FA(.)274 2035 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 2053 1338 2 v 274 2091 a(PvmSysErr)120 b(Cannot)14 b(con)o(tact)h(the)g(lo)q(cal)e (p)o(vmd)f(\(most)i(lik)o(ely)m(,)d(it)j(is)g(not)601 2145 y(running\).)274 2199 y(PvmBadP)o(aram)47 b(Bad)32 b(parameter)f(\(most)f(lik)o(ely)m(,)j(a)e(NULL)h(c)o(haracter)601 2253 y(string\).)274 2307 y(PvmNoGroup)73 b(No)14 b(group)g(exists)g(b) o(y)g(that)g(name.)274 2361 y(PvmNoInst)119 b(No)14 b(suc)o(h)h (instance)f(in)g(the)g(group.)p eop %%Page: 205 224 205 223 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(205)291 511 y FE(p)n(vmfgsize\(\))852 b(p)n(vm)p 1626 511 21 2 v 25 w(gsize\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f(n)o(um)o(b)q(er)f(of)h(mem)o(b)q(ers)e(curren)o(tly)j(in)f(the) g(named)f(group.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(size)g(=)h(pvm)p 790 836 14 2 v 15 w(gsize\()f(char)g (*group)f(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfgsize\()f(group,)h(size)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(group)49 b FA({)g(c)o(haracter)16 b(string)e(group)f(name)g (of)g(an)h(existing)f(group.)274 1110 y Fs(size)71 b FA({)49 b(in)o(teger)14 b(returning)f(the)h(n)o(um)o(b)q(er)e(of)g(mem) o(b)q(ers)g(presen)o(tly)i(in)e(the)i(group.)503 1164 y(V)m(alues)g(less)h(than)e(zero)i(indicate)f(an)g(error.)249 1271 y Fr(Discussion)249 1341 y FA(The)h(routine)g Fs(pvm)p 548 1341 V 15 w(gsize)f FA(returns)i(the)f(size)g(of)f(the)i(group)e (named)f Fs(group)p FA(.)20 b(If)14 b(there)i(is)e(an)h(error,)249 1395 y Fs(size)e FA(will)f(b)q(e)j(negativ)o(e.)249 1458 y(Since)c(groups)g(can)g(c)o(hange)g(dynamically)c(in)j(PVM)h(3,)g (this)f(routine)h(can)g(guaran)o(tee)g(only)e(to)i(return)249 1512 y(the)k(instan)o(taneous)f(size)g(of)g(a)f(giv)o(en)h(group.)249 1624 y Fr(Examples)274 1690 y(C:)495 1744 y Fs(size)21 b(=)g(pvm_gsize\()f("worker")g(\);)274 1798 y Fr(F)l(ortran:)495 1852 y Fs(CALL)h(PVMFGSIZE\()e('group2',)h(SIZE)h(\))249 1959 y Fr(Errors)249 2030 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2030 V 15 w(gsize)p FA(.)274 2097 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 2115 1338 2 v 274 2153 a(PvmSysErr)120 b(p)o(vmd)13 b(w)o(as)g(not)h(started)h(or)f(has)g(crashed.)274 2207 y(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(group)i (name.)p eop %%Page: 206 225 206 224 bop 249 251 a Fu(206)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfhalt)958 b(p)n(vm)p 1652 511 21 2 v 24 w(halt\(\))p 249 595 1591 16 v 249 658 a FA(Sh)o(uts)14 b(do)o(wn)g(the)g(en)o(tire)h(PVM)f(system.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(halt\()f(void)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfhalt\()f(info)h(\))249 997 y Fr(P)o(arameters)274 1068 y Fs(info)49 b FA({)h(In)o(teger)14 b(returns)i(the)e(error)h (status.)249 1180 y Fr(Discussion)249 1250 y FA(The)d(routine)f Fs(pvm)p 541 1250 V 15 w(halt)g FA(sh)o(uts)h(do)o(wn)f(the)h(en)o (tire)g(PVM)f(system)g(including)g(remote)g(tasks,)g(remote)249 1304 y(p)o(vmd,)h(the)i(lo)q(cal)f(tasks)i(\(including)e(the)h(calling) f(task\),)g(and)h(the)h(lo)q(cal)e(p)o(vmd.)249 1416 y Fr(Errors)249 1487 y FA(The)h(follo)o(wing)e(error)i(condition)g(can) g(b)q(e)g(returned)i(b)o(y)e Fs(pvm)p 1222 1487 V 15 w(halt)p FA(.)274 1555 y(Name)151 b(P)o(ossible)14 b(Cause)p 249 1572 1267 2 v 274 1610 a(PvmSysErr)50 b(lo)q(cal)13 b(p)o(vmd)f(is)i(not)g(resp)q(onding.)p eop %%Page: 207 226 207 225 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(207)291 511 y FE(p)n(vmfhostsync\(\))622 b(p)n(vm)p 1510 511 21 2 v 25 w(hostsync\(\))p 249 595 1591 16 v 249 658 a FA(Gets)14 b(time-of-da)o(y)e(clo)q(c)o(k)i(from)e(PVM)i(host.)249 767 y Fr(Synopsis)274 827 y(C)173 b Fs(#include)20 b(<sys/time.h>)481 881 y(int)h(info)g(=)h(pvm)p 790 881 14 2 v 15 w(hostsync\()e(int)h (host,)g(struct)g(timeval)f(*clk,)1048 935 y(struct)g(timeval)h(*delta) f(\))274 989 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfhostsync\()e(host,)i (clksec,)f(clkusec,)895 1043 y(deltasec,)g(deltausec,)g(info)h(\))249 1147 y Fr(P)o(arameters)274 1199 y Fs(host)217 b FA({)49 b(TID)14 b(of)f(host.)274 1253 y Fs(clk)g FA(or)274 1307 y Fs(clksec)g FA(and)274 1361 y Fs(clkusec)p FA(\))135 b({)49 b(Returns)15 b(time-of-da)o(y)c(clo)q(c)o(k)j(sample)f(from)f (host.)274 1415 y Fs(delta)h FA(or)274 1469 y Fs(deltasec)f FA(and)274 1523 y Fs(deltausec)p FA(\))91 b({)49 b(Returns)15 b(di\013erence)h(b)q(et)o(w)o(een)f(lo)q(cal)e(clo)q(c)o(k)h(and)g (remote)f(host)i(clo)q(c)o(k.)249 1627 y Fr(Discussion)249 1691 y Fs(pvm)p 318 1691 V 15 w(hostsync\(\))j FA(samples)g(the)i (time-of)e(da)o(y)h(clo)q(c)o(k)g(of)g(a)g(host)h(in)f(the)h(virtual)f (mac)o(hine)f(and)249 1745 y(returns)e(b)q(oth)e(the)g(clo)q(c)o(k)g(v) n(alue)f(and)h(the)g(di\013erence)i(b)q(et)o(w)o(een)f(lo)q(cal)e(and)h (remote)g(clo)q(c)o(ks.)249 1804 y(T)m(o)k(reduce)i(the)g(delta)e (error)i(due)f(to)g(message)f(transit)h(time,)f(lo)q(cal)g(clo)q(c)o(k) h(samples)f(are)h(tak)o(en)249 1858 y(b)q(efore)13 b(and)e(after)i (reading)e(the)i(remote)e(clo)q(c)o(k.)18 b(Delta)11 b(is)h(the)h(di\013erence)g(b)q(et)o(w)o(een)h(the)e(mean)f(lo)q(cal) 249 1912 y(clo)q(c)o(ks)j(and)g(remote)g(clo)q(c)o(k.)249 1971 y(Note)i(that)f(the)h(delta)f(time)f(can)i(b)q(e)g(negativ)o(e.)22 b(The)16 b(microseconds)f(\014eld)g(is)g(alw)o(a)o(ys)g(normalized)249 2025 y(to)f(0..999999,)d(while)i(the)h(sign)g(of)f(the)i(seconds)g (\014eld)f(giv)o(es)g(the)g(sign)g(of)f(the)i(delta.)249 2084 y(In)f(C,)f(if)g Fs(clk)h FA(or)f Fs(delta)g FA(is)h(input)g(as)g (a)f(n)o(ull)g(p)q(oin)o(ter,)h(that)g(parameter)f(is)h(not)g (returned.)249 2193 y Fr(Errors)249 2257 y FA(The)g(follo)o(wing)e (error)i(conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f(.)p Fs(pvm)p 1250 2257 V 14 w(synchost)274 2318 y FA(Name)180 b(P)o(ossible)14 b(Cause)p 249 2336 1297 2 v 274 2374 a(PvmSysErr)79 b(Lo)q(cal)14 b(p)o(vmd)e(is)i(not)g(resp)q(onding.)274 2428 y(PvmNoHost)64 b(no)14 b(suc)o(h)h(host.)274 2482 y(PvmHostF)m(ail)47 b(host)15 b(is)e(unreac)o(hable)i(\(and)f(th)o(us)g (p)q(ossibly)g(failed\).)p eop %%Page: 208 227 208 226 bop 249 251 a Fu(208)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vm\014nitsend\(\))664 b(p)n(vm)p 1531 511 21 2 v 25 w(initsend\(\))p 249 595 1591 16 v 249 658 a FA(Clears)14 b(default)g(send)h(bu\013er)f(and)g(sp)q(eci\014es)i (message)d(enco)q(ding.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(bufid)g(=)h(pvm)p 812 836 14 2 v 15 w(initsend\()e(int)h(encoding)f(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfinitsend\()e(encoding,)h(bufid)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(encoding)48 b FA({)i(in)o(teger)14 b(sp)q(ecifying)g(the)g(next)h(message's)e(enco)q(ding)h(sc)o(heme.)569 1110 y(Options)g(in)f(C)h(are)g(as)g(follo)o(ws:)654 1164 y(Enco)q(ding)g(v)n(alue)109 b(Meaning)p 569 1181 805 2 v 615 1219 a Fs(PvmDataDefault)47 b FA(0)j(XDR)615 1273 y Fs(PvmDataRaw)135 b FA(1)50 b(no)14 b(enco)q(ding)615 1327 y Fs(PvmDataInPlace)47 b FA(2)j(data)13 b(left)h(in)g(place)p 569 1345 V 274 1437 a Fs(bufid)114 b FA({)50 b(in)o(teger)17 b(message)f(bu\013er)i(iden)o(ti\014er.)27 b(V)m(alues)16 b(less)i(than)e(zero)i(indicate)569 1491 y(an)13 b(error.)249 1598 y Fr(Discussion)249 1668 y FA(The)h(routine)f Fs(pvm)p 545 1668 14 2 v 15 w(initsend)e FA(clears)j(the)g(send)f(bu\013er)h (and)f(prepares)i(it)e(for)f(pac)o(king)h(a)f(new)i(mes-)249 1722 y(sage.)21 b(The)15 b(enco)q(ding)h(sc)o(heme)f(used)g(for)g(this) g(pac)o(king)f(is)g(set)i(b)o(y)f Fs(encoding)p FA(.)k(XDR)14 b(enco)q(ding)h(is)249 1776 y(used)f(b)o(y)f(default)g(b)q(ecause)i (PVM)e(cannot)h(kno)o(w)e(whether)j(the)f(user)g(is)f(going)f(to)h(add) g(a)g(heteroge-)249 1830 y(neous)i(mac)o(hine)d(b)q(efore)j(this)f (message)g(is)g(sen)o(t.)19 b(If)13 b(the)i(user)g(kno)o(ws)f(that)g (the)g(next)h(message)f(will)249 1884 y(b)q(e)g(sen)o(t)h(only)e(to)g (a)h(mac)o(hine)e(that)i(understands)h(the)f(nativ)o(e)f(format,)f(he)i (can)g(use)g FB(PvmDataR)n(aw)249 1938 y FA(enco)q(ding)g(and)g(sa)o(v) o(e)g(on)g(enco)q(ding)g(costs.)249 2001 y(PvmDataInPlace)e(enco)q (ding)i(sp)q(eci\014es)i(that)e(data)f(b)q(e)i(left)e(in)h(place)g (during)f(pac)o(king.)18 b(The)c(mes-)249 2055 y(sage)f(bu\013er)h(con) o(tains)f(only)f(the)i(sizes)g(and)e(p)q(oin)o(ters)i(to)f(the)g(items) f(to)h(b)q(e)g(sen)o(t.)19 b(When)13 b(p)o(vm)p 1751 2055 13 2 v 13 w(send)249 2108 y(is)i(called,)g(the)g(items)f(are)i (copied)f(directly)g(out)g(of)g(the)h(user's)g(memory)m(.)i(This)d (option)f(decreases)249 2162 y(the)i(n)o(um)o(b)q(er)f(of)g(times)f(a)i (message)f(is)g(copied,)h(at)f(the)h(exp)q(ense)i(of)d(requiring)g (that)g(the)i(user)f(not)249 2216 y(mo)q(dify)f(the)j(items)f(b)q(et)o (w)o(een)i(the)f(time)e(they)i(are)g(pac)o(k)o(ed)g(and)f(the)i(time)d (they)i(are)g(sen)o(t.)30 b(The)249 2270 y(PvmDataInPlace)13 b(is)g(not)h(implemen)o(ted)e(in)h(PVM)h(3.2.)249 2333 y(If)i(p)o(vm)p 375 2333 V 14 w(initsend)h(is)f(successful,)j Fs(bufid)d FA(will)f(con)o(tain)h(the)i(message)e(bu\013er)i(iden)o (ti\014er.)27 b(If)16 b(some)249 2387 y(error)f(o)q(ccurs,)g Fs(bufid)e FA(will)f(b)q(e)i Fn(<)e FA(0.)249 2449 y(See)j(also)e(p)o (vm)p 488 2449 V 13 w(mkbuf.)p eop %%Page: 209 228 209 227 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(209)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(bufid)20 b(=)i(pvm_initsend\()d(PvmDataDefault)g(\);)495 682 y(info)i(=)g (pvm_pkint\()f(array,)g(10,)i(1)f(\);)495 736 y(msgtag)f(=)i(3)f(;)495 790 y(info)g(=)g(pvm_send\()f(tid,)h(msgtag)g(\);)274 844 y Fr(F)l(ortran:)495 898 y Fs(CALL)g(PVMFINITSEND\(PV)o(MRAW,)d (BUFID\))495 952 y(CALL)j(PVMFPACK\()e(REAL4,)i(DATA,)g(100,)g(1,)g (INFO)g(\))495 1006 y(CALL)g(PVMFSEND\()e(TID,)i(3,)h(INFO)f(\))249 1112 y Fr(Errors)249 1183 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1183 14 2 v 15 w(initsend)p FA(.)274 1251 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1269 1338 2 v 274 1306 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(enco)q(ding)i(v) n(alue.)274 1360 y(PvmNoMem)97 b(Mallo)q(c)18 b(has)h(failed.)30 b(There)20 b(is)e(not)h(enough)f(memory)e(to)601 1414 y(create)g(the)e(bu\013er.)p eop %%Page: 210 229 210 228 bop 249 251 a Fu(210)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfjoingroup\(\))568 b(p)n(vm)p 1483 511 21 2 v 25 w(joingroup\(\))p 249 595 1591 16 v 249 658 a FA(Enrolls)14 b(the)g(calling)f(pro)q(cess)i(in)f(a)f(named)g(group.) 249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(inum)g(=)h(pvm)p 790 836 14 2 v 15 w(joingroup\()e(char)h(*group)f(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfjoingroup\()e(group,)i(inum)g (\))249 997 y Fr(P)o(arameters)274 1056 y Fs(group)49 b FA({)g(c)o(haracter)16 b(string)e(group)f(name)g(of)g(an)h(existing)f (group.)274 1110 y Fs(inum)71 b FA({)49 b(in)o(teger)15 b(instance)g(n)o(um)o(b)q(er)f(returned)i(b)o(y)e(the)h(routine.)k (Instance)d(n)o(um-)503 1164 y(b)q(ers)i(start)e(at)g(0)g(and)g(coun)o (t)h(up.)25 b(V)m(alues)15 b(less)i(than)f(zero)h(indicate)g(an)503 1217 y(error.)249 1325 y Fr(Discussion)249 1395 y FA(The)10 b(routine)g Fs(pvm)p 538 1395 V 15 w(joingroup)e FA(enrolls)i(the)g (calling)e(task)i(in)g(the)g(group)g(named)e Fs(group)h FA(and)g(returns)249 1449 y(the)17 b(instance)g(n)o(um)o(b)q(er)f Fs(inum)f FA(of)h(this)g(task)g(in)g(this)g(group.)25 b(If)16 b(there)i(is)e(an)g(error,)h Fs(inum)f FA(will)e(b)q(e)249 1503 y(negativ)o(e.)249 1566 y(Instance)19 b(n)o(um)o(b)q(ers)e(start)h (at)f(0)g(and)g(coun)o(t)h(up.)28 b(When)18 b(using)f(groups,)h(a)f (\(group,)h(in)o(um\))d(pair)249 1619 y(uniquely)h(iden)o(ti\014es)h(a) g(PVM)g(pro)q(cess.)28 b(This)16 b(is)h(consisten)o(t)h(with)e(the)h (previous)g(PVM)g(naming)249 1673 y(sc)o(hemes.)g(If)10 b(a)g(task)h(lea)o(v)o(es)f(a)g(group)g(b)o(y)g(calling)f(p)o(vm)p 1101 1673 13 2 v 13 w(lvgroup)h(and)g(later)g(rejoins)g(the)h(same)f (group,)249 1727 y(the)18 b(task)f(is)g(not)g(guaran)o(teed)g(to)g(get) g(the)h(same)e(instance)i(n)o(um)o(b)q(er.)27 b(PVM)17 b(attempts)g(to)f(reuse)249 1781 y(old)g(instance)i(n)o(um)o(b)q(ers;)f (th)o(us,)g(when)g(a)g(task)g(joins)f(a)g(group,)h(it)f(will)f(get)i (the)h(lo)o(w)o(est)e(a)o(v)n(ailable)249 1835 y(instance)f(n)o(um)o(b) q(er.)i(A)d(PVM)g(3)g(task)g(can)g(b)q(e)g(a)g(mem)o(b)q(er)e(of)i(m)o (ultiple)d(groups)j(sim)o(ultaneously)m(.)249 1947 y Fr(Examples)274 2014 y(C:)495 2068 y Fs(inum)21 b(=)g(pvm_joingroup\()e ("worker")h(\);)274 2122 y Fr(F)l(ortran:)495 2176 y Fs(CALL)h(PVMFJOINGROUP\()d('group2',)i(INUM)h(\))249 2283 y Fr(Errors)249 2353 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2353 14 2 v 15 w(joingroup)p FA(.)p eop %%Page: 211 230 211 229 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(211)274 504 y FA(Name)222 b(P)o(ossible)14 b(Cause)p 249 521 1338 2 v 274 559 a(PvmSysErr)121 b(p)o(vmd)12 b(w)o(as)i(not)g(started) h(or)f(has)g(crashed.)274 613 y(PvmBadP)o(aram)48 b(giving)12 b(a)i(NULL)g(group)g(name.)274 667 y(PvmDupGroup)48 b(trying)14 b(to)f(join)g(a)h(group)g(one)g(is)f(already)h(in.)p eop %%Page: 212 231 212 230 bop 249 251 a Fu(212)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfkill\(\))949 b(p)n(vm)p 1675 511 21 2 v 25 w(kill\(\))p 249 595 1591 16 v 249 658 a FA(T)m(erminates)13 b(a)h(sp)q(eci\014ed)h(PVM)f(pro)q(cess.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(kill\()f(int)g(tid)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfkill\()f(tid,)h(info)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(tid)71 b FA({)50 b(in)o(teger)24 b(task)g(iden)o(ti\014er)g(of)f(the)i(PVM)f(pro)q(cess)h(to)f(b)q(e)h (killed)d(\(not)482 1110 y(y)o(ourself)s(\).)274 1164 y Fs(info)49 b FA({)h(in)o(teger)12 b(status)g(co)q(de)g(returned)i(b)o (y)d(the)h(routine.)17 b(V)m(alues)12 b(less)g(than)g(zero)482 1217 y(indicate)h(an)h(error.)249 1325 y Fr(Discussion)249 1395 y FA(The)i(routine)g Fs(pvm)p 550 1395 V 15 w(kill)e FA(sends)j(a)e(terminate)g(\(SIGTERM\))g(signal)g(to)g(the)h(PVM)g(pro) q(cess)h(iden-)249 1449 y(ti\014ed)i(b)o(y)g Fs(tid)p FA(.)33 b(In)19 b(the)h(case)g(of)e(m)o(ultipro)q(cessors)h(the)h (terminate)f(signal)f(is)h(replaced)h(with)e(a)249 1503 y(host-dep)q(enden)o(t)e(metho)q(d)e(for)f(killing)f(a)i(pro)q(cess.)21 b(If)14 b(p)o(vm)p 1202 1503 13 2 v 13 w(kill)f(is)h(successful,)i Fs(info)d FA(will)g(b)q(e)i(0.)j(If)249 1557 y(some)13 b(error)i(o)q(ccurs,)g Fs(info)e FA(will)f(b)q(e)j Fn(<)c FA(0.)249 1619 y(p)o(vm)p 331 1619 V 13 w(kill)j(is)g(not)h(designed)g (to)g(kill)e(the)i(calling)f(pro)q(cess.)22 b(T)m(o)14 b(kill)f(y)o(ourself)i(in)f(C)g(call)g(p)o(vm)p 1731 1619 V 14 w(exit\(\))249 1673 y(follo)o(w)o(ed)e(b)o(y)i(exit\(\).)k(T) m(o)13 b(kill)g(y)o(ourself)g(in)h(F)m(ortran,)f(call)g(p)o(vmfexit)f (follo)o(w)o(ed)g(b)o(y)i(stop.)249 1785 y Fr(Examples)274 1852 y(C:)495 1906 y Fs(info)21 b(=)g(pvm_kill\()f(tid)h(\);)274 1960 y Fr(F)l(ortran:)495 2014 y Fs(CALL)g(PVMFKILL\()e(TID,)i(INFO)g (\))249 2121 y Fr(Errors)249 2191 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2191 14 2 v 15 w(kill)p FA(.)274 2259 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 2277 1338 2 v 274 2315 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(tid)i(v)n(alue.) 274 2369 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)p eop %%Page: 213 232 213 231 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(213)291 511 y FE(p)n(vm\015vgroup\(\))685 b(p)n(vm)p 1540 511 21 2 v 25 w(lvgroup\(\))p 249 595 1591 16 v 249 658 a FA(Unenrolls)14 b(the)h(calling)d(pro)q(cess)k(from)c(a)h(named)g (group.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(lvgroup\()e(char)h(*group)g(\)) 274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmflvgroup\()f(group,)g (info)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(group)49 b FA({)g(c)o(haracter)16 b(string)e(group)f(name)g(of)g(an)h(existing)f (group.)274 1110 y Fs(info)71 b FA({)49 b(in)o(teger)12 b(status)h(co)q(de)f(returned)h(b)o(y)f(the)g(routine.)17 b(V)m(alues)12 b(less)g(than)f(zero)503 1164 y(indicate)j(an)g(error.) 249 1271 y Fr(Discussion)249 1341 y FA(The)h(routine)f Fs(pvm)p 547 1341 V 15 w(lvgroup)f FA(unenrolls)h(the)h(calling)e(pro)q (cess)j(from)c(the)j(group)f(named)f Fs(group)p FA(.)18 b(If)249 1395 y(there)d(is)f(an)g(error,)g Fs(info)f FA(will)f(b)q(e)j(negativ)o(e.)249 1458 y(If)g(a)f(pro)q(cess)j(lea)o (v)o(es)e(a)g(group)g(b)o(y)g(calling)e(either)j(p)o(vm)p 1140 1458 13 2 v 14 w(lvgroup)e(or)h(p)o(vm)p 1438 1458 V 13 w(exit,)g(and)g(later)g(rejoins)249 1512 y(the)20 b(same)f(group,)h(the)g(pro)q(cess)h(ma)o(y)d(b)q(e)i(assigned)g(a)f (new)h(instance)g(n)o(um)o(b)q(er.)34 b(Old)19 b(instance)249 1566 y(n)o(um)o(b)q(ers)14 b(are)g(reassigned)h(to)f(pro)q(cesses)i (calling)d(p)o(vm)p 1129 1566 V 13 w(joingroup.)249 1678 y Fr(Examples)274 1744 y(C:)495 1798 y Fs(info)21 b(=)g(pvm_lvgroup\()e ("worker")i(\);)274 1852 y Fr(F)l(ortran:)495 1906 y Fs(CALL)g(PVMFLVGROUP\()e('group2',)h(INFO)h(\))249 2013 y Fr(Errors)249 2084 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g (can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2084 14 2 v 15 w(lvgroup)p FA(.)274 2151 y(Name)250 b(P)o(ossible)14 b(Cause)p 249 2169 1367 2 v 274 2207 a(PvmSysErr)149 b(p)o(vmd)13 b(not)g(resp)q(onding.)274 2261 y(PvmBadP)o(aram)76 b(giving)13 b(a)g(NULL)h(group)g(name.)274 2315 y(PvmNoGroup)102 b(giving)13 b(a)g(nonexisten)o(t)i(group)f(name.)274 2369 y(PvmNotInGroup)48 b(asking)14 b(to)f(lea)o(v)o(e)h(a)g(group)f (one)h(is)g(not)g(a)f(mem)o(b)q(er)g(of.)p eop %%Page: 214 233 214 232 bop 249 251 a Fu(214)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfmcast\(\))788 b(p)n(vm)p 1594 511 21 2 v 25 w(mcast\(\))p 249 595 1591 16 v 249 658 a FA(Multicasts)14 b(the)h(data)e(in)h(the)g(activ)o(e)g(message)g(bu\013er)h(to)e(a)h (set)h(of)e(tasks.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(mcast\()f(int)g (*tids,)f(int)i(ntask,)e(int)h(msgtag)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfmcast\()f(ntask,)h(tids,)f(msgtag,) h(info)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(ntask)71 b FA({)49 b(in)o(teger)14 b(sp)q(ecifying)g(the)h(n)o(um)o(b)q(er)e(of) g(tasks)i(to)e(b)q(e)i(sen)o(t)g(to.)274 1110 y Fs(tids)93 b FA({)49 b(in)o(teger)15 b(arra)o(y)f(of)g(length)h(at)f(least)h Fs(ntask)e FA(con)o(taining)g(the)j(task)e(IDs)h(of)525 1164 y(the)g(tasks)f(to)g(b)q(e)g(sen)o(t)h(to.)274 1217 y Fs(msgtag)49 b FA({)g(in)o(teger)11 b(message)e(tag)h(supplied)g(b)o (y)g(the)h(user.)18 b(msgtag)8 b(should)i(b)q(e)h Fn(>)p FA(=)h(0.)274 1271 y Fs(info)93 b FA({)49 b(in)o(teger)12 b(status)g(co)q(de)h(returned)g(b)o(y)e(the)i(routine.)k(V)m(alues)11 b(less)i(than)e(zero)525 1325 y(indicate)j(an)g(error.)249 1433 y Fr(Discussion)249 1503 y FA(The)j(routine)f Fs(pvm)p 551 1503 V 15 w(mcast)g FA(m)o(ulticasts)f(a)h(message)g(stored)h(in)f (the)h(activ)o(e)f(send)i(bu\013er)f(to)f Fs(ntask)249 1557 y FA(tasks)f(sp)q(eci\014ed)h(in)f(the)g Fs(tids)f FA(arra)o(y)m(.)19 b(The)d(message)e(is)g(not)h(sen)o(t)h(to)e(the)h (caller)g(ev)o(en)g(if)f(its)h(tid)f(is)249 1611 y(in)h Fs(tids)p FA(.)23 b(The)16 b(con)o(ten)o(t)g(of)f(the)h(message)g(can)f (b)q(e)i(distinguished)e(b)o(y)h Fs(msgtag)p FA(.)22 b(If)15 b(p)o(vm)p 1682 1611 13 2 v 13 w(mcast)g(is)249 1665 y(successful,)g Fs(info)e FA(will)g(b)q(e)h(0.)k(If)13 b(some)g(error)i(o)q(ccurs,)g Fs(info)e FA(will)g(b)q(e)h Fn(<)e FA(0.)249 1727 y(The)f(receiving)h(pro)q(cesses)h(can)e(call)g (either)g(p)o(vm)p 1022 1727 V 14 w(recv)h(or)f(p)o(vm)p 1250 1727 V 13 w(nrecv)h(to)f(receiv)o(e)h(their)f(cop)o(y)g(of)f(the) 249 1781 y(m)o(ulticast.)19 b(p)o(vm)p 531 1781 V 13 w(mcast)14 b(is)h(async)o(hronous.)21 b(Computation)12 b(on)j(the)g(sending)g(pro)q(cessor)i(resumes)249 1835 y(as)12 b(so)q(on)g(as)g(the)g(message)f(is)h(safely)g(on)f(its)h(w)o (a)o(y)f(to)h(the)g(receiving)g(pro)q(cessors.)20 b(This)11 b(is)h(in)f(con)o(trast)249 1889 y(to)f(sync)o(hronous)i(comm)o(uni)o (cation,)c(during)i(whic)o(h)g(computation)e(on)j(the)f(sending)h(pro)q (cessor)h(halts)249 1943 y(un)o(til)h(the)i(matc)o(hing)d(receiv)o(e)j (is)f(executed)h(b)o(y)f(the)g(receiving)h(pro)q(cessor.)249 2006 y(p)o(vm)p 331 2006 V 13 w(mcast)e(\014rst)i(determines)f(whic)o (h)g(other)g(p)o(vmds)f(con)o(tain)g(the)i(sp)q(eci\014ed)g(tasks.)j (Then)d(passes)249 2059 y(the)j(message)e(to)h(these)h(p)o(vmds,)e (whic)o(h)h(in)f(turn)i(distribute)f(the)h(message)e(to)h(their)h(lo)q (cal)e(tasks)249 2113 y(without)e(further)g(net)o(w)o(ork)g(tra\016c.) 249 2176 y(Multicasting)j(is)g(not)h(supp)q(orted)g(b)o(y)g(most)e(m)o (ultipro)q(cessor)h(v)o(endors.)30 b(T)o(ypically)16 b(their)h(nativ)o(e)249 2230 y(calls)d(supp)q(ort)h(only)e (broadcasting)i(to)f FB(al)r(l)f FA(the)i(user's)h(pro)q(cesses)g(on)f (a)e(m)o(ultipro)q(cessor.)19 b(Because)249 2284 y(of)f(this)g (omission,)f(p)o(vm)p 654 2284 V 13 w(mcast)g(ma)o(y)g(not)h(b)q(e)g (an)g(e\016cien)o(t)h(comm)o(unicatio)o(n)d(metho)q(d)h(on)h(some)249 2338 y(m)o(ultipro)q(cessors)c(except)h(in)f(the)g(sp)q(ecial)g(case)h (of)e(broadcasting)h(to)g(all)f(PVM)h(pro)q(cesses.)p eop %%Page: 215 234 215 233 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(215)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(info)21 b(=)g (pvm_initsend\()e(PvmDataRaw)h(\);)495 682 y(info)h(=)g(pvm_pkint\()f (array,)g(10,)i(1)f(\);)495 736 y(msgtag)f(=)i(5)f(;)495 790 y(info)g(=)g(pvm_mcast\()f(tids,)h(ntask,)f(msgtag)h(\);)274 844 y Fr(F)l(ortran:)495 898 y Fs(CALL)g(PVMFINITSEND\(PV)o(MDEFA)o (ULT\))495 952 y(CALL)g(PVMFPACK\()e(REAL4,)i(DATA,)g(100,)g(1,)g(INFO) g(\))495 1006 y(CALL)g(PVMFMCAST\()e(NPROC,)i(TIDS,)g(5,)g(INFO)g(\)) 249 1112 y Fr(Errors)249 1183 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1183 14 2 v 15 w(mcast)p FA(..)274 1251 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1269 1338 2 v 274 1306 a(PvmBadP)o(aram)47 b(giving)13 b(a)g(msgtag)f Fn(<)g FA(0.)274 1360 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)274 1414 y(PvmNoBuf)124 b(no)14 b(send)h(bu\013er.)p eop %%Page: 216 235 216 234 bop 249 251 a Fu(216)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfmkbuf\(\))757 b(p)n(vm)p 1578 511 21 2 v 25 w(mkbuf\(\))p 249 595 1591 16 v 249 658 a FA(Creates)15 b(a)f(new)g(message)g(bu\013er.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(bufid)g(=)h(pvm)p 812 836 14 2 v 15 w(mkbuf\()e(int)i(encoding)e(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfmkbuf\()f(encoding,)g(bufid)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(encoding)48 b FA({)i(in)o(teger)14 b(sp)q(ecifying)g(the)g(bu\013er's)h(enco)q(ding)f(sc)o(heme.)569 1110 y(Options)g(in)f(C)h(are)g(as)g(follo)o(ws:)654 1164 y(Enco)q(ding)g(v)n(alue)109 b(Meaning)p 569 1181 805 2 v 615 1219 a Fs(PvmDataDefault)47 b FA(0)j(XDR)615 1273 y Fs(PvmDataRaw)135 b FA(1)50 b(no)14 b(enco)q(ding)615 1327 y Fs(PvmDataInPlace)47 b FA(2)j(data)13 b(left)h(in)g(place)p 569 1345 V 274 1437 a Fs(bufid)114 b FA({)50 b(in)o(teger)16 b(message)f(bu\013er)h(iden)o(ti\014er)g(returned.)25 b(V)m(alues)15 b(less)h(than)g(zero)569 1491 y(indicate)e(an)f(error.) 249 1598 y Fr(Discussion)249 1668 y FA(The)20 b(routine)f Fs(pvm)p 557 1668 14 2 v 16 w(mkbuf)f FA(creates)j(a)e(new)h(message)f (bu\013er)h(and)f(sets)i(its)e(enco)q(ding)h(status)g(to)249 1722 y Fs(encoding)p FA(.)25 b(If)16 b(p)o(vm)p 588 1722 13 2 v 14 w(mkbuf)f(is)h(successful,)j Fs(bufid)d FA(will)f(b)q(e)i (the)h(iden)o(ti\014er)f(for)f(the)h(new)h(bu\013er,)249 1776 y(whic)o(h)c(can)g(b)q(e)g(used)h(as)f(a)g(send)h(bu\013er.)k(If) 13 b(some)g(error)i(o)q(ccurs,)g Fs(bufid)e FA(will)f(b)q(e)j Fn(<)c FA(0.)249 1839 y(With)h(the)h(default)e(setting)i(XDR)f(enco)q (ding)g(is)g(used)i(when)e(pac)o(king)g(the)h(message)f(b)q(ecause)i (PVM)249 1893 y(cannot)21 b(kno)o(w)f(whether)j(the)e(user)h(is)f (going)e(to)i(add)g(a)f(heterogeneous)j(mac)o(hine)c(b)q(efore)j(this) 249 1947 y(message)d(is)g(sen)o(t.)36 b(The)20 b(other)g(options)f(to)g (enco)q(ding)h(allo)o(w)e(the)i(user)g(to)g(tak)o(e)f(adv)n(an)o(tage)g (of)249 2001 y(kno)o(wledge)14 b(ab)q(out)f(his)h(virtual)f(mac)o(hine) f(ev)o(en)i(when)g(it)g(is)f(heterogeneous.)20 b(F)m(or)14 b(example,)e(if)g(the)249 2055 y(user)17 b(kno)o(ws)e(that)h(the)g (next)g(message)f(will)f(b)q(e)j(sen)o(t)f(only)f(to)g(a)g(mac)o(hine)g (that)g(understands)i(the)249 2108 y(nativ)o(e)d(format,)d(he)k(can)f (use)g Fs(PvmDataRaw)e FA(enco)q(ding)i(and)g(sa)o(v)o(e)g(on)g(enco)q (ding)g(costs.)249 2171 y(PvmDataInPlace)e(enco)q(ding)i(sp)q (eci\014es)i(that)e(data)f(b)q(e)i(left)e(in)h(place)g(during)f(pac)o (king.)18 b(The)c(mes-)249 2225 y(sage)f(bu\013er)h(con)o(tains)f(only) f(the)i(sizes)g(and)e(p)q(oin)o(ters)i(to)f(the)g(items)f(to)h(b)q(e)g (sen)o(t.)19 b(When)13 b(p)o(vm)p 1751 2225 V 13 w(send)249 2279 y(is)i(called,)g(the)g(items)f(are)i(copied)f(directly)g(out)g(of) g(the)h(user's)g(memory)m(.)i(This)d(option)f(decreases)249 2333 y(the)j(n)o(um)o(b)q(er)e(of)h(times)f(a)h(message)g(is)g(copied)h (at)f(the)h(exp)q(ense)h(of)e(requiring)g(that)g(the)h(user)g(not)249 2387 y(mo)q(dify)e(the)j(items)f(b)q(et)o(w)o(een)i(the)f(time)e(they)i (are)g(pac)o(k)o(ed)g(and)f(the)i(time)d(they)i(are)g(sen)o(t.)30 b(The)249 2441 y(PvmDataInPlace)13 b(is)g(also)h(not)f(implemen)o(ted)f (in)h(PVM)i(3.2.)p eop %%Page: 217 236 217 235 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(217)249 507 y FA(p)o(vm)p 331 507 13 2 v 13 w(mkbuf)11 b(is)h(required)i(if)d (the)i(user)h(wishes)f(to)f(manage)f(m)o(ultiple)f(message)i(bu\013ers) i(and)e(should)249 561 y(b)q(e)i(used)g(in)f(conjunction)g(with)g(p)o (vm)p 847 561 V 13 w(freebuf.)18 b(p)o(vm)p 1094 561 V 14 w(freebuf)c(should)f(b)q(e)g(called)g(for)g(a)g(send)h(bu\013er) 249 615 y(after)g(a)g(message)f(has)h(b)q(een)h(sen)o(t)g(and)f(is)g (no)f(longer)h(needed.)249 677 y(Receiv)o(e)h(bu\013ers)h(are)f (created)h(automatically)c(b)o(y)i(the)i(p)o(vm)p 1228 677 V 13 w(recv)g(and)e(p)o(vm)p 1492 677 V 13 w(nrecv)i(routines)f (and)249 731 y(do)f(not)g(ha)o(v)o(e)f(to)h(b)q(e)g(freed)h(unless)g (they)f(ha)o(v)o(e)g(b)q(een)h(explicitly)e(sa)o(v)o(ed)h(with)g(p)o (vm)p 1565 731 V 13 w(setrbuf.)249 794 y(T)o(ypically)e(m)o(ultiple)g (send)j(and)f(receiv)o(e)h(bu\013ers)g(are)g(not)f(needed,)h(and)e(the) i(user)g(can)f(simply)e(use)249 848 y(the)j(p)o(vm)p 403 848 V 13 w(initsend)f(routine)g(to)g(reset)h(the)g(default)e(send)i (bu\013er.)249 910 y(There)20 b(are)e(sev)o(eral)h(cases)h(where)f(m)o (ultiple)d(bu\013ers)k(are)f(useful.)31 b(One)19 b(example)e(where)j(m) o(ulti-)249 964 y(ple)d(message)f(bu\013ers)i(are)g(needed)g(in)o(v)o (olv)o(es)e(libraries)g(or)h(graphical)f(in)o(terfaces)h(that)g(use)h (PVM)249 1018 y(and)h(in)o(teract)h(with)f(a)g(running)g(PVM)g (application)f(but)h(do)g(not)g(w)o(an)o(t)g(to)g(in)o(terfere)i(with)d (the)249 1072 y(application's)12 b(o)o(wn)i(comm)o(unicatio)o(n.)249 1134 y(When)e(m)o(ultiple)e(bu\013ers)j(are)g(used,)f(they)h(generally) e(are)i(made)e(and)g(freed)i(for)f(eac)o(h)g(message)g(that)249 1188 y(is)i(pac)o(k)o(ed.)249 1300 y Fr(Examples)274 1367 y(C:)495 1421 y Fs(bufid)20 b(=)i(pvm_mkbuf\()e(PvmDataRaw)f(\);) 538 1475 y(/*)j(send)f(the)g(message)f(*/)495 1529 y(info)h(=)g (pvm_freebuf\()e(bufid)i(\);)274 1583 y Fr(F)l(ortran:)495 1637 y Fs(CALL)g(PVMFMKBUF\(PVMDE)o(FAULT)o(,)e(MBUF\))274 1690 y(*)220 b(SEND)21 b(MESSAGE)g(HERE)495 1744 y(CALL)g (PVMFFREEBUF\()e(MBUF,)i(INFO)g(\))249 1851 y Fr(Errors)249 1922 y FA(The)14 b(follo)o(wing)e(error)i(condition)g(can)g(b)q(e)g (returned)i(b)o(y)e Fs(pvm)p 1222 1922 14 2 v 15 w(mkbuf)p FA(.)274 1990 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 2008 1338 2 v 274 2045 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(enco)q(ding)i(v)n(alue.)274 2099 y(PvmNoMem)97 b(Mallo)q(c)18 b(has)h(failed.)30 b(There)20 b(is)e(not)h(enough)f(memory)e(to)601 2153 y(create)g(the)e(bu\013er.)p eop %%Page: 218 237 218 236 bop 249 251 a Fu(218)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfmstat\(\))796 b(p)n(vm)p 1598 511 21 2 v 24 w(mstat\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f(status)h(of)e(a)h(host)g(in)f(the)i(virtual)e(mac)o(hine.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(mstat)g(=)h(pvm)p 812 836 14 2 v 15 w(mstat\()e(char)h(*host)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfmstat\()f(host,)h(mstat)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(host)71 b FA({)49 b(c)o(haracter)16 b(string)e(con)o(taining)e(the)j(host)f(name.)274 1110 y Fs(mstat)49 b FA({)g(in)o(teger)15 b(returning)f(mac)o(hine)f (status:)596 1164 y(V)m(alue)117 b(Meaning)p 503 1181 1160 2 v 528 1219 a(PvmOk)147 b(host)14 b(is)g(OK)528 1273 y(PvmNoHost)65 b(host)14 b(is)g(not)f(in)h(virtual)f(mac)o(hine) 528 1327 y(PvmHostF)m(ail)48 b(host)14 b(is)g(unreac)o(hable)g(\(and)g (th)o(us)g(p)q(ossibly)g(failed\))p 503 1345 V 249 1436 a Fr(Discussion)249 1507 y FA(The)c(routine)f Fs(pvm)p 537 1507 14 2 v 15 w(mstat)g FA(returns)h(the)g(status)g Fs(mstat)f FA(of)f(the)i(computer)f(named)f Fs(host)h FA(with)g(resp)q(ect)249 1561 y(to)14 b(running)f(PVM)i(pro)q(cesses.) 20 b(This)14 b(routine)g(can)h(b)q(e)f(used)h(to)f(determine)f(whether) j(a)d(particular)249 1614 y(host)h(has)g(failed)f(and)h(whether)h(the)g (virtual)e(mac)o(hine)f(needs)j(to)f(b)q(e)h(recon\014gured.)249 1727 y Fr(Examples)274 1793 y(C:)495 1847 y Fs(mstat)20 b(=)i(pvm_mstat\()e("msr.ornl.gov")f(\);)274 1901 y Fr(F)l(ortran:)495 1955 y Fs(CALL)i(PVMFMSTAT\()e('msr.ornl.gov',)g(MSTAT)i(\))249 2062 y Fr(Errors)249 2133 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2133 V 15 w(mstat)p FA(.)274 2200 y(Name)180 b(P)o(ossible)14 b(Cause)p 249 2218 1297 2 v 274 2256 a(PvmSysErr)79 b(p)o(vmd)13 b(not)h(resp)q(onding.)274 2310 y(PvmNoHost)64 b(giving)13 b(a)g(host)i(name)d(not)i(in)f(the)i(virtual)e(mac)o(hine.)274 2364 y(PvmHostF)m(ail)47 b(host)15 b(is)e(unreac)o(hable)i(\(and)f(th)o (us)g(p)q(ossibly)g(failed\).)p eop %%Page: 219 238 219 237 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(219)291 511 y FE(p)n(vmfm)n(ytid\(\))786 b(p)n(vm)p 1593 511 21 2 v 25 w(m)n(ytid\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f FB(tid)g FA(of)f(the)i(pro)q(cess.)249 769 y Fr(Synopsis)274 835 y(C)173 b Fs(int)21 b(tid)h(=)f(pvm)p 768 835 14 2 v 15 w(mytid\()g(void)g(\))274 889 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfmytid\()f(tid)h(\))249 995 y Fr(P)o(arameters)274 1053 y Fs(tid)49 b FA({)h(in)o(teger)20 b(task)g(iden)o(ti\014er)h(of)e (the)i(calling)d(PVM)j(pro)q(cess)h(is)d(returned.)460 1107 y(V)m(alues)13 b(less)i(than)f(zero)h(indicate)e(an)h(error.)249 1214 y Fr(Discussion)249 1283 y FA(The)g(routine)g(enrolls)g(this)g (pro)q(cess)i(in)o(to)d(PVM)h(on)g(its)f(\014rst)i(call)e(and)h (generates)h(a)f(unique)g Fs(tid)f FA(if)249 1337 y(this)j(pro)q(cess)i (w)o(as)e(not)g(created)i(b)o(y)d(p)o(vm)p 926 1337 13 2 v 14 w(spa)o(wn.)24 b(p)o(vm)p 1168 1337 V 14 w(m)o(ytid)14 b(returns)j(the)g Fs(tid)e FA(of)h(the)g(calling)249 1391 y(pro)q(cess)h(and)e(can)g(b)q(e)h(called)e(m)o(ultiple)f(times)h (in)h(an)g(application.)20 b(An)o(y)15 b(PVM)g(system)g(call)f(\(not) 249 1445 y(just)g(p)o(vm)p 413 1445 V 14 w(m)o(ytid\))e(will)g(enroll)h (a)h(task)g(in)f(PVM)i(if)e(the)h(task)g(is)g(not)g(enrolled)g(b)q (efore)g(the)h(call.)249 1507 y(The)h(tid)f(is)h(a)f(32-bit)f(p)q (ositiv)o(e)i(in)o(teger)g(created)h(b)o(y)e(the)h(lo)q(cal)f(p)o(vmd.) 21 b(The)16 b(32)f(bits)h(are)f(divided)249 1561 y(in)o(to)j(\014elds)g (that)h(enco)q(de)g(v)n(arious)f(information)d(ab)q(out)j(this)h(pro)q (cess,)h(suc)o(h)f(as)g(its)f(lo)q(cation)f(in)249 1615 y(the)g(virtual)e(mac)o(hine)f(\(i.e.,)h(lo)q(cal)h(p)o(vmd)e (address\),)j(the)g(CPU)f(n)o(um)o(b)q(er)f(in)h(the)g(case)h(where)g (the)249 1669 y(pro)q(cess)e(is)e(on)g(a)f(m)o(ultipro)q(cessor,)h(and) g(a)f(pro)q(cess)j(ID)e(\014eld.)18 b(This)13 b(information)d(is)j (used)h(b)o(y)f(PVM)249 1723 y(and)h(is)g(not)f(exp)q(ected)j(to)e(b)q (e)h(used)f(b)o(y)g(applications.)249 1785 y(If)i(PVM)h(has)g(not)f(b)q (een)i(started)f(b)q(efore)h(an)e(application)f(calls)h(p)o(vm)p 1386 1785 V 14 w(m)o(ytid,)e(the)j(returned)i Fs(tid)249 1839 y FA(will)12 b(b)q(e)j Fn(<)d FA(0.)249 1950 y Fr(Examples)274 2016 y(C:)495 2070 y Fs(tid)21 b(=)g(pvm_mytid\()f(\);)274 2124 y Fr(F)l(ortran:)495 2178 y Fs(CALL)h(PVMFMYTID\()e(TID)i(\))249 2284 y Fr(Errors)249 2354 y FA(The)14 b(follo)o(wing)e(error)i (condition)g(can)g(b)q(e)g(returned)i(b)o(y)e Fs(pvm)p 1222 2354 14 2 v 15 w(mytid)p FA(.)274 2421 y(Name)151 b(P)o(ossible)14 b(cause)p 249 2438 1267 2 v 274 2476 a(PvmSysErr)50 b(p)o(vmd)12 b(not)i(resp)q(onding.)p eop %%Page: 220 239 220 238 bop 249 251 a Fu(220)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfnotify\(\))787 b(p)n(vm)p 1593 511 21 2 v 25 w(notify\(\))p 249 595 1591 16 v 249 658 a FA(Requests)15 b(noti\014cation)e(of)h(PVM)g(ev)o(en)o(t)g(suc)o(h)h(as)f(host)g (failure.)249 770 y Fr(Synopsis)274 836 y(C)195 b Fs(int)21 b(info)g(=)h(pvm_notify\()d(int)j(what,)e(int)h(msgtag,)1026 890 y(int)g(cnt,)g(int)g(*tids)g(\))274 944 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfnotify\()f(what,)h(msgtag,)f(cnt,)h(tids,)g(info)g (\))249 1051 y Fr(P)o(arameters)274 1110 y Fs(what)93 b FA({)49 b(in)o(teger)20 b(iden)o(ti\014er)g(of)e(what)i(ev)o(en)o(t)g (should)f(trigger)g(the)h(noti\014cation.)525 1164 y(Presen)o(tly)15 b(the)g(options)e(are:)641 1217 y(V)m(alue)141 b(Meaning)p 525 1235 803 2 v 550 1273 a(PvmT)m(askExit)84 b(notify)13 b(if)g(task)h(exits)550 1327 y(PvmHostDelete)50 b(notify)13 b(if)g(host)h(is)g(deleted)550 1381 y(PvmHostAdd)87 b(notify)13 b(if)g(host)h(is)g(added)p 525 1399 V 274 1437 a Fs(msgtag)49 b FA({)g(in)o(teger)14 b(message)g(tag)g(to)f(b)q(e)i(used)g(in)e (noti\014cation.)274 1491 y Fs(cnt)115 b FA({)49 b(in)o(teger)17 b(sp)q(ecifying)f(the)h(length)f(of)g(the)h(tids)f(arra)o(y)g(for)g (PvmT)m(askExit)525 1545 y(and)g(PvmHostDelete.)26 b(F)m(or)16 b(PvmHostAdd)g(sp)q(eci\014es)j(the)e(n)o(um)o(b)q(er)f(of)525 1599 y(times)d(to)h(notify)m(.)274 1653 y Fs(tids)93 b FA({)49 b(in)o(teger)23 b(arra)o(y)g(of)f(length)g Fs(ntask)g FA(that)h(con)o(tains)g(a)f(list)g(of)g(task)h(or)525 1706 y(p)o(vmd)15 b(tids)i(to)g(b)q(e)h(noti\014ed.)27 b(The)17 b(arra)o(y)g(should)f(b)q(e)i(empt)o(y)e(with)g(the)525 1760 y(PvmHostAdd)d(option.)274 1814 y Fs(info)93 b FA({)49 b(in)o(teger)12 b(status)g(co)q(de)h(returned)g(b)o(y)e(the)i(routine.) k(V)m(alues)11 b(less)i(than)e(zero)525 1868 y(indicate)j(an)g(error.) 249 1976 y Fr(Discussion)249 2046 y FA(The)i(routine)f Fs(pvm)p 549 2046 14 2 v 15 w(notify)f FA(requests)j(PVM)f(to)f(notify) f(the)i(caller)f(on)g(detecting)h(certain)f(ev)o(en)o(ts.)249 2100 y(In)f(resp)q(onse)j(to)d(a)g(notify)f(request,)j(some)d(n)o(um)o (b)q(er)h(of)f(messages)i(\(see)h(b)q(elo)o(w\))e(are)g(sen)o(t)i(b)o (y)e(PVM)249 2154 y(bac)o(k)i(to)g(the)h(calling)e(task.)24 b(The)17 b(messages)f(are)h(tagged)f(with)g(the)g(co)q(de)h(\(msgtag\)) e(supplied)h(to)249 2208 y(notify)m(.)249 2270 y(The)f(tids)f(arra)o(y) g(sp)q(eci\014es)i(who)d(to)h(monitor)f(when)h(using)g(T)m(askExit)f (or)i(HostDelete;)f(it)g(con)o(tains)249 2324 y(nothing)i(when)g(using) g(HostAdd.)26 b(If)16 b(required,)h(the)g(routines)g(p)o(vm)p 1363 2324 13 2 v 13 w(con\014g)g(and)f(p)o(vm)p 1662 2324 V 13 w(tasks)h(can)249 2378 y(b)q(e)e(used)f(to)g(obtain)f(task)h (and)g(p)o(vmd)e(tids.)249 2441 y(The)i(noti\014cation)f(messages)h(ha) o(v)o(e)g(the)h(follo)o(wing)c(format:)p eop %%Page: 221 240 221 239 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(221)249 507 y Fs(PvmTaskExit)13 b FA(One)j(notify)e(message)g(for)h(eac)o(h)h (tid)e(requested.)24 b(The)16 b(message)e(b)q(o)q(dy)h(con)o(tains)g(a) 249 561 y(single)f(tid)f(of)g(exited)i(task.)249 624 y Fs(PvmHostDelete)9 b FA(One)k(message)e(for)h(eac)o(h)g(tid)g (requested.)19 b(The)13 b(message)e(b)q(o)q(dy)h(con)o(tains)g(a)f (single)249 677 y(p)o(vmd-tid)h(of)h(exited)i(p)o(vmd.)249 740 y Fs(PvmHostAdd)d FA(Up)i(to)g Fs(cnt)f FA(notify)h(messages)g(are) g(sen)o(t.)19 b(The)c(message)f(b)q(o)q(dy)g(con)o(tains)g(an)g(in)o (teger)249 794 y(coun)o(t)i(follo)o(w)o(ed)f(b)o(y)h(a)f(list)h(of)f(p) o(vmd-tids)g(of)g(the)i(new)f(p)o(vmds.)24 b(The)16 b(coun)o(ter)h(of)f (PvmHostAdd)249 848 y(messages)f(remaining)e(is)i(up)q(dated)g(b)o(y)g (successiv)o(e)i(calls)d(to)h(p)o(vm)p 1306 848 13 2 v 13 w(notify)m(.)20 b(Sp)q(ecifying)14 b(a)h(cn)o(t)g(of)f(-1)249 902 y(turns)h(on)e(PvmHostAdd)h(messages)g(un)o(til)f(a)g(future)i (notify;)d(a)i(coun)o(t)g(of)f(zero)i(disables)f(them.)249 964 y(Tids)g(in)f(the)i(notify)e(messages)h(are)g(pac)o(k)o(ed)g(as)g (in)o(tegers.)249 1026 y(The)i(calling)f(task\(s\))i(are)f(resp)q (onsible)h(for)f(receiving)g(the)g(message)g(with)g(the)g(sp)q (eci\014ed)i(msgtag)249 1080 y(and)13 b(taking)f(appropriate)i(action.) j(F)m(uture)d(v)o(ersions)f(of)g(PVM)h(ma)o(y)d(expand)i(the)h(list)f (of)f(a)o(v)n(ailable)249 1134 y(noti\014cation)h(ev)o(en)o(ts.)249 1196 y(Note)h(that)f(the)h(notify)f(request)h(is)g(\\consumed";)e(for)h (example,)f(a)h(PvmHostAdd)f(request)j(gener-)249 1250 y(ates)g(a)e(single)h(reply)g(message.)249 1362 y Fr(Examples)274 1429 y(C:)538 1483 y Fs(info)21 b(=)h(pvm_notify\()d(PvmHostAdd,)h (9999,)h(1,)g(dummy)g(\))274 1537 y Fr(F)l(ortran:)560 1591 y Fs(CALL)g(PVMFNOTIFY\()e(PVMHOSTDELETE,)g(1111,)i(NPROC,)g (TIDS,)f(INFO)h(\))249 1698 y Fr(Errors)249 1768 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1768 14 2 v 15 w(notify)p FA(.)274 1836 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1854 1338 2 v 274 1892 a(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)274 1946 y(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(argumen)o (t)h(v)n(alue.)p eop %%Page: 222 241 222 240 bop 249 251 a Fu(222)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfnrecv\(\))809 b(p)n(vm)p 1604 511 21 2 v 25 w(nrecv\(\))p 249 595 1591 16 v 249 658 a FA(Chec)o(ks)15 b(for)f(non)o(blo)q(c)o(king)e(message)i(with)f(lab)q(el)h Fs(msgtag)p FA(.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(bufid)g(=)h(pvm)p 812 836 14 2 v 15 w(nrecv\()e(int)i (tid,)f(int)g(msgtag)f(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfnrecv\()f(tid,)h(msgtag,)f(bufid)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(tid)115 b FA({)49 b(in)o(teger)13 b(task)f(iden)o(ti\014er)g(of)g(sending)g(pro)q(cess)i (supplied)e(b)o(y)g(the)g(user.)19 b(\(A)525 1110 y(-1)14 b(in)f(this)h(argumen)o(t)f(matc)o(hes)g(an)o(y)h(tid)f (\(wildcard\).\))274 1164 y Fs(msgtag)49 b FA({)g(in)o(teger)11 b(message)e(tag)h(supplied)g(b)o(y)g(the)h(user.)18 b(msgtag)8 b(should)i(b)q(e)h Fn(>)p FA(=)h(0.)525 1217 y(\(A)i(-1)g(in)f(this)h (argumen)o(t)f(matc)o(hes)g(an)o(y)h(message)f(tag)h(\(wildcard\).\)) 274 1271 y Fs(bufid)71 b FA({)49 b(in)o(teger)15 b(returning)f(the)h(v) n(alue)f(of)f(the)i(new)f(activ)o(e)h(receiv)o(e)g(bu\013er)g(iden-)525 1325 y(ti\014er.)k(V)m(alues)13 b(less)i(than)f(zero)g(indicate)g(an)g (error.)249 1433 y Fr(Discussion)249 1503 y FA(The)i(routine)g Fs(pvm)p 550 1503 V 15 w(nrecv)e FA(c)o(hec)o(ks)j(to)f(see)g(whether)h (a)f(message)f(with)g(lab)q(el)g Fs(msgtag)f FA(has)i(arriv)o(ed)249 1557 y(from)10 b Fs(tid)p FA(.)17 b(If)11 b(a)g(matc)o(hing)f(message)i (has)g(arriv)o(ed,)f(p)o(vm)p 1152 1557 13 2 v 14 w(nrecv)h (immediately)d(places)j(the)g(message)249 1611 y(in)17 b(a)f(new)i FB(active)f FA(receiv)o(e)h(bu\013er,)g(whic)o(h)f(also)f (clears)i(the)g(curren)o(t)g(receiv)o(e)g(bu\013er,)h(if)d(an)o(y)m(,)g (and)249 1665 y(returns)g(the)e(bu\013er)h(iden)o(ti\014er)f(in)g Fs(bufid)p FA(.)249 1727 y(If)g(the)h(requested)h(message)e(has)h(not)f (arriv)o(ed,)g(then)h(p)o(vm)p 1188 1727 V 13 w(nrecv)h(imm)o(ediately) 11 b(returns)16 b(with)e(a)g(0)249 1781 y(in)f Fs(bufid)p FA(.)k(If)d(some)f(error)i(o)q(ccurs,c)g(/whic)o(h)f Fs(bufid)e FA(will)h(b)q(e)h Fn(<)e FA(0.)249 1844 y(A)j(-1)f(in)g Fs(msgtag)f FA(or)i Fs(tid)f FA(matc)o(hes)g(an)o(ything.)20 b(This)14 b(allo)o(ws)f(the)j(user)f(the)h(follo)o(wing)c(options.)19 b(If)249 1898 y(tid)13 b(=)f Ft(\000)p FA(1)i(and)f(msgtag)f(is)i (de\014ned)g(b)o(y)g(the)g(user,)g(then)g(p)o(vm)p 1235 1898 V 14 w(nrecv)g(will)e(accept)j(a)f(message)f(from)249 1952 y(an)o(y)g(pro)q(cess)i(that)f(has)f(a)g(matc)o(hing)f(msgtag.)k (If)d(msgtag)e(=)h Ft(\000)p FA(1)i(and)f(tid)g(is)g(de\014ned)h(b)o(y) f(the)h(user,)249 2006 y(p)o(vm)p 331 2006 V 13 w(nrecv)g(will)c (accept)k(an)o(y)d(message)h(that)g(is)g(sen)o(t)h(from)d(pro)q(cess)k (tid.)j(If)12 b(tid)g(=)g Ft(\000)p FA(1)g(and)g(msgtag)249 2059 y(=)g Ft(\000)p FA(1,)h(then)i(p)o(vm)p 548 2059 V 13 w(nrecv)g(will)e(accept)i(an)o(y)e(message)h(from)e(an)o(y)h(pro)q (cess.)249 2122 y(p)o(vm)p 331 2122 V 13 w(nrecv)f(is)d(non-blo)q(c)o (king)g(in)h(the)g(sense)i(that)e(the)h(routine)f(alw)o(a)o(ys)f (returns)j(imm)o(ediately)7 b(either)249 2176 y(with)14 b(the)h(message)g(or)f(with)h(the)g(information)c(that)k(the)g(message) f(has)h(not)g(arriv)o(ed)f(at)h(the)g(lo)q(cal)249 2230 y(p)o(vmd)c(y)o(et.)18 b(p)o(vm)p 530 2230 V 13 w(nrecv)13 b(can)g(b)q(e)g(called)f(m)o(ultiple)e(times)i(to)g(c)o(hec)o(k)h (whether)h(a)e(giv)o(en)g(message)g(has)249 2284 y(arriv)o(ed)i(y)o (et.)k(In)c(addition,)e(p)o(vm)p 784 2284 V 14 w(recv)j(can)f(b)q(e)g (called)g(for)f(the)i(same)d(message)i(if)f(the)h(application)249 2338 y(runs)h(out)e(of)h(w)o(ork)f(it)h(could)g(do)f(b)q(efore)i (receiving)f(the)h(data.)249 2400 y(If)h(p)o(vm)p 375 2400 V 13 w(nrecv)i(returns)g(with)e(the)h(message,)f(the)h(data)f(in)g (the)g(message)g(can)h(b)q(e)g(unpac)o(k)o(ed)g(in)o(to)249 2454 y(the)e(user's)f(memory)e(using)h(the)i(unpac)o(k)f(routines.)p eop %%Page: 223 242 223 241 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(223)249 507 y FA(The)14 b(PVM)g(mo)q(del)e(guaran)o(tees)i(the)g(follo)o(wing)d (ab)q(out)j(message)f(order.)19 b(If)13 b(task)g(1)h(sends)g(message) 249 561 y(A)k(to)g(task)h(2,)f(then)h(task)f(1)g(sends)i(message)e(B)g (to)g(task)g(2,)h(message)f(A)g(will)f(arriv)o(e)h(at)g(task)g(2)249 615 y(b)q(efore)c(message)f(B.)g(Moreo)o(v)o(er,)h(if)e(b)q(oth)i (messages)f(arriv)o(e)g(b)q(efore)i(task)e(2)g(do)q(es)h(a)f(receiv)o (e,)h(then)g(a)249 669 y(wildcard)g(receiv)o(e)h(will)d(alw)o(a)o(ys)h (return)i(message)f(A.)249 781 y Fr(Examples)274 848 y(C:)495 902 y Fs(tid)21 b(=)g(pvm_parent\(\);)495 956 y(msgtag)f(=)i(4)f(;)495 1010 y(arrived)f(=)i(pvm_nrecv\()d(tid,)i (msgtag)g(\);)495 1064 y(if)g(\()h(arrived)e(>)h(0)h(\))538 1118 y(info)f(=)h(pvm_upkint\()d(tid_array,)h(10,)h(1)h(\);)495 1172 y(else)495 1226 y(/*)f(go)g(do)h(other)e(computing)g(*/)274 1280 y Fr(F)l(ortran:)495 1333 y Fs(CALL)h(PVMFNRECV\()e(-1,)i(4,)h (ARRIVED)e(\))495 1387 y(IF)h(\()h(ARRIVED)e(.GT.)h(0)g(\))h(THEN)560 1441 y(CALL)f(PVMFUNPACK\()e(INTEGER4,)h(TIDS,)h(25,)g(1,)h(INFO)f(\)) 560 1495 y(CALL)g(PVMFUNPACK\()e(REAL8,)i(MATRIX,)f(100,)h(100,)g(INFO) g(\))495 1549 y(ELSE)274 1603 y(*)264 b(GO)21 b(DO)h(USEFUL)e(WORK)495 1657 y(ENDIF)249 1764 y Fr(Errors)249 1835 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1835 14 2 v 15 w(nrecv)p FA(.)274 1903 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1920 1338 2 v 274 1958 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(tid)i (v)n(alue)f(or)h(msgtag.)274 2012 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)p eop %%Page: 224 243 224 242 bop 249 251 a Fu(224)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfpac)n(k\(\))897 b(p)n(vm)p 1663 511 21 2 v 25 w(pk)p Fa(*)p FE(\(\))p 249 595 1591 16 v 249 658 a FA(P)o(ac)o(ks)14 b(the)h(activ)o(e)f(message)f(bu\013er)i(with)f (arra)o(ys)g(of)f(prescrib)q(ed)j(data)e(t)o(yp)q(e.)249 770 y Fr(Synopsis)274 836 y(C)296 890 y Fs(int)21 b(info)g(=)g (pvm_packf\()f(const)h(char)g(*fmt,)g(...)g(\))296 944 y(int)g(info)g(=)g(pvm_pkbyte\()42 b(char)64 b(*xp,)21 b(int)g(nitem,)g(int)g(stride)g(\))296 998 y(int)g(info)g(=)g (pvm_pkcplx\()42 b(float)g(*cp,)21 b(int)g(nitem,)g(int)g(stride)g(\)) 296 1052 y(int)g(info)g(=)g(pvm_pkdcplx\()f(double)g(*zp,)h(int)g (nitem,)g(int)g(stride)g(\))296 1106 y(int)g(info)g(=)g (pvm_pkdouble\(double)d(*dp,)j(int)g(nitem,)g(int)g(stride)g(\))296 1160 y(int)g(info)g(=)g(pvm_pkfloat\()f(float)42 b(*fp,)21 b(int)g(nitem,)g(int)g(stride)g(\))296 1214 y(int)g(info)g(=)g (pvm_pkint\()64 b(int)86 b(*ip,)21 b(int)g(nitem,)g(int)g(stride)g(\)) 296 1268 y(int)g(info)g(=)g(pvm_pkuint\()f(unsigned)g(int)h(*ip,)g(int) g(nitem,)g(int)g(stride)g(\))296 1322 y(int)g(info)g(=)g (pvm_pkushort\()f(unsigned)g(short)g(*ip,)h(int)h(nitem,)e(int)h (stride)g(\))296 1376 y(int)g(info)g(=)g(pvm_pkulong\()f(unsigned)g (long)h(*ip,)g(int)g(nitem,)g(int)g(stride)f(\))296 1430 y(int)h(info)g(=)g(pvm_pklong\()42 b(long)64 b(*ip,)21 b(int)g(nitem,)g(int)g(stride)g(\))296 1484 y(int)g(info)g(=)g (pvm_pkshort\()f(short)42 b(*jp,)21 b(int)g(nitem,)g(int)g(stride)g(\)) 296 1538 y(int)g(info)g(=)g(pvm_pkstr\()64 b(char)g(*sp)22 b(\))274 1612 y Fr(F)l(ortran)274 1666 y Fs(call)f(pvmfpack\()f(what,)h (xp,)g(nitem,)f(stride,)h(info)g(\))249 1773 y Fr(P)o(arameters)274 1832 y Fs(fmt)115 b FA({)49 b(prin)o(tflik)o(e)13 b(format)f (expression)j(sp)q(ecifying)f(what)f(to)h(pac)o(k)g(\(see)h (discussion\).)274 1886 y Fs(nitem)71 b FA({)49 b(the)15 b(total)e(n)o(um)o(b)q(er)g(of)g FB(items)h FA(to)f(b)q(e)i(pac)o(k)o (ed)f(\(not)g(the)g(n)o(um)o(b)q(er)g(of)f(b)o(ytes\).)274 1940 y Fs(stride)49 b FA({)g(the)15 b(stride)f(to)g(b)q(e)h(used)f (when)h(pac)o(king)e(the)h(items.)k(F)m(or)13 b(example,)f(if)h (stride=)g(2)h(in)525 1994 y(p)o(vm)p 607 1994 13 2 v 13 w(pk)o(cplx,)g(then)g(ev)o(ery)h(other)f(complex)f(n)o(um)o(b)q(er)g (will)f(b)q(e)j(pac)o(k)o(ed.)274 2048 y Fs(xp)137 b FA({)49 b(p)q(oin)o(ter)17 b(to)g(the)g(b)q(eginning)f(of)g(a)h(blo)q (c)o(k)f(of)g(b)o(ytes.)28 b(Can)16 b(b)q(e)i(an)o(y)e(data)g(t)o(yp)q (e,)i(but)525 2102 y(m)o(ust)13 b(matc)o(h)g(the)h(corresp)q(onding)h (unpac)o(k)f(data)g(t)o(yp)q(e.)274 2156 y Fs(cp)137 b FA({)49 b(complex)13 b(arra)o(y)g(at)h(least)g(nitem*stride)f(items)g (long.)274 2210 y Fs(zp)137 b FA({)49 b(double)14 b(precision)g (complex)f(arra)o(y)g(at)h(least)g(nitem*stride)f(items)g(long.)274 2264 y Fs(dp)137 b FA({)49 b(double)14 b(precision)g(real)g(arra)o(y)g (at)f(least)h(nitem*stride)g(items)f(long.)274 2318 y Fs(fp)137 b FA({)49 b(real)14 b(arra)o(y)g(at)f(least)h(nitem*stride)g (items)f(long.)274 2371 y Fs(ip)137 b FA({)49 b(in)o(teger)14 b(arra)o(y)g(at)g(least)g(nitem*stride)f(items)g(long.)274 2425 y Fs(jp)137 b FA({)49 b(in)o(teger*2)14 b(arra)o(y)g(at)f(least)h (nitem*stride)g(items)f(long.)274 2479 y Fs(sp)137 b FA({)49 b(p)q(oin)o(ter)14 b(to)g(a)g(n)o(ull)e(terminated)i(c)o (haracter)h(string.)p eop %%Page: 225 244 225 243 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(225)274 504 y Fs(what)49 b FA({)h(in)o(teger)14 b(sp)q(ecifying)g(the)g(t)o(yp) q(e)h(of)e(data)g(b)q(eing)h(pac)o(k)o(ed.)703 558 y Fs(what)g FA(options)p 482 575 677 2 v 528 613 a Fs(STRING)92 b FA(0)72 b Fs(REAL4)157 b FA(4)528 667 y Fs(BYTE1)114 b FA(1)72 b Fs(COMPLEX8)91 b FA(5)528 721 y Fs(INTEGER2)48 b FA(2)72 b Fs(REAL8)157 b FA(6)528 775 y Fs(INTEGER4)48 b FA(3)72 b Fs(COMPLEX16)d FA(7)p 482 793 V 274 831 a Fs(info)49 b FA({)h(in)o(teger)14 b(status)h(co)q(de)g(returned)g(b)o (y)f(the)h(routine.)j(V)m(alues)c(less)h(than)f(zero)h(indicate)482 885 y(an)e(error.)249 991 y Fr(Discussion)249 1058 y FA(Eac)o(h)19 b(of)f(the)40 b Fs(pvm_pk*)17 b FA(routines)i(pac)o(ks)g (an)f(arra)o(y)g(of)g(the)h(giv)o(en)f(data)g(t)o(yp)q(e)h(in)o(to)f (the)h(activ)o(e)249 1112 y(send)c(bu\013er.)k(The)14 b(argumen)o(ts)f(for)h(eac)o(h)g(of)f(the)h(routines)h(are)f(a)g(p)q (oin)o(ter)g(to)f(the)i(\014rst)f(item)f(to)g(b)q(e)249 1166 y(pac)o(k)o(ed,)j Fs(nitem)f FA(whic)o(h)g(is)h(the)g(total)f(n)o (um)o(b)q(er)g(of)g(items)f(to)i(pac)o(k)f(from)f(this)i(arra)o(y)m(,)f (and)g Fs(stride)249 1220 y FA(whic)o(h)f(is)g(the)g(stride)h(to)e(use) i(when)g(pac)o(king.)249 1281 y(An)k(exception)g(is)f(p)o(vm)p 640 1281 13 2 v 13 w(pkstr\(\))i(whic)o(h)e(b)o(y)g(de\014nition)g(pac) o(ks)g(a)g(NULL)h(terminated)f(c)o(haracter)249 1334 y(string)d(and)g(th)o(us)h(do)q(es)g(not)f(need)h Fs(nitem)e FA(or)h Fs(stride)f FA(argumen)o(ts.)21 b(The)16 b(F)m(ortran)f (routine)g(p)o(vmf-)249 1388 y(pac)o(k\()k(STRING,)e(...\))31 b(exp)q(ects)20 b Fs(nitem)e FA(to)g(b)q(e)h(the)h(n)o(um)o(b)q(er)d (of)h(c)o(haracters)i(in)f(the)g(string)f(and)249 1442 y Fs(stride)13 b FA(to)g(b)q(e)i(1.)249 1503 y(If)f(the)g(pac)o(king)f (is)h(successful,)h Fs(info)e FA(will)g(b)q(e)h(0.)k(If)13 b(some)g(error)i(o)q(ccurs,)g Fs(info)e FA(will)f(b)q(e)j Fn(<)d FA(0.)249 1564 y(A)j(single)f(v)n(ariable)g(\(not)h(an)g(arra)o (y\))f(can)h(b)q(e)h(pac)o(k)o(ed)f(b)o(y)g(setting)g Fs(nitem)p FA(=)d(1)j(and)f Fs(stride)p FA(=)f(1.)20 b(C)249 1618 y(structures)c(ha)o(v)o(e)e(to)g(b)q(e)g(pac)o(k)o(ed)h (one)f(data)f(t)o(yp)q(e)i(at)e(a)h(time.)249 1678 y(The)g(routine)g(p) o(vm)p 559 1678 V 14 w(pac)o(kf\(\))f(uses)i(a)f(prin)o(tflik)o(e)f (format)e(expression)k(to)f(sp)q(ecify)g(what)g(and)g(ho)o(w)f(to)249 1732 y(pac)o(k)h(data)g(in)o(to)g(the)h(send)g(bu\013er.)20 b(All)14 b(v)n(ariables)f(are)i(passed)g(as)g(addresses)h(if)e(coun)o (t)g(and)g(stride)249 1786 y(are)j(sp)q(eci\014ed)h(otherwise,)g(v)n (ariables)d(are)i(assumed)g(to)f(b)q(e)h(v)n(alues.)26 b(A)16 b(BNF-lik)o(e)h(description)g(of)249 1840 y(the)e(format)d(syn)o (tax)h(is:)336 1914 y Fs(format)21 b(:)g(null)g(|)h(init)f(|)g(format)g (fmt)336 1968 y(init)g(:)h(null)f(|)g('\045')h('+')336 2022 y(fmt)f(:)h('\045')f(count)g(stride)f(modifiers)g(fchar)336 2076 y(fchar)h(:)h('c')f(|)g('d')h(|)f('f')g(|)h('x')f(|)h('s')336 2130 y(count)f(:)h(null)f(|)g([0-9]+)g(|)g('*')336 2184 y(stride)g(:)g(null)g(|)h('.')f(\()h([0-9]+)e(|)i('*')f(\))336 2238 y(modifiers)f(:)i(null)f(|)g(modifiers)f(mchar)336 2292 y(mchar)h(:)h('h')f(|)g('l')h(|)f('u')249 2400 y(Formats:)293 2454 y(+)43 b(means)21 b(initsend)f(-)i(must)e(match)h(an)h(int)f (\(how\))g(in)g(the)g(param)g(list.)293 2508 y(c)43 b(pack/unpack)20 b(bytes)p eop %%Page: 226 245 226 244 bop 249 251 a Fu(226)1321 b(App)q(endix)15 b(B)293 507 y Fs(d)43 b(integers)293 561 y(f)g(float)293 615 y(x)g(complex)20 b(float)293 669 y(s)43 b(string)249 777 y(Modifiers:)293 831 y(h)g(short)21 b(\(int\))293 885 y(l)43 b(long)g(\(int,)21 b(float,)f(complex)g(float\))293 939 y(u)43 b(unsigned)20 b(\(int\))249 1047 y('*')h(count)g(or)g (stride)g(must)g(match)g(an)g(int)g(in)h(the)f(param)g(list.)249 1126 y FA(F)m(uture)12 b(extensions)g(to)f(the)h Fs(what)e FA(argumen)o(t)g(in)h(p)o(vmfpac)o(k)e(will)g(include)j(64)e(bit)h(t)o (yp)q(es)h(when)g(XDR)249 1180 y(enco)q(ding)h(of)f(these)i(t)o(yp)q (es)g(is)e(a)o(v)n(ailable.)j(Mean)o(while)e(users)h(should)e(b)q(e)i (a)o(w)o(are)e(that)h(precision)g(can)249 1234 y(b)q(e)j(lost)e(when)h (passing)g(data)g(from)e(a)h(64)h(bit)f(mac)o(hine)g(lik)o(e)g(a)g(Cra) o(y)h(to)f(a)h(32)f(bit)h(mac)o(hine)e(lik)o(e)h(a)249 1288 y(SP)m(AR)o(Cstation.)20 b(As)15 b(a)g(mnemonic)d(the)k Fs(what)e FA(argumen)o(t)f(name)h(includes)h(the)h(n)o(um)o(b)q(er)e (of)g(b)o(ytes)249 1342 y(of)e(precision)g(to)g(exp)q(ect.)19 b(By)12 b(setting)h(enco)q(ding)f(to)g(PVMRA)-5 b(W)12 b(\(see)i(p)o(vm\014nitsend\))d(data)h(can)g(b)q(e)249 1396 y(transferred)g(b)q(et)o(w)o(een)f(t)o(w)o(o)f(64)g(bit)g(mac)o (hines)f(with)h(full)e(precision)j(ev)o(en)g(if)e(the)i(PVM)f (con\014guration)249 1450 y(is)k(heterogeneous.)249 1512 y(Messages)21 b(should)f(b)q(e)g(unpac)o(k)o(ed)g(exactly)f(lik)o(e)g (they)h(w)o(ere)h(pac)o(k)o(ed)f(to)f(insure)h(data)g(in)o(tegrit)o(y)m (.)249 1566 y(P)o(ac)o(king)d(in)o(tegers)g(and)g(unpac)o(king)g(them)f (as)h(\015oats)g(will)f(often)h(fail)f(b)q(ecause)i(a)f(t)o(yp)q(e)h (enco)q(ding)249 1620 y(will)8 b(ha)o(v)o(e)i(o)q(ccurred)h (transferring)f(the)h(data)e(b)q(et)o(w)o(een)i(heterogeneous)h(hosts.) 17 b(P)o(ac)o(king)9 b(10)g(in)o(tegers)249 1674 y(and)14 b(100)f(\015oats)h(then)g(trying)g(to)g(unpac)o(k)g(only)f(3)g(in)o (tegers)i(and)f(the)g(100)f(\015oats)h(will)f(also)g(fail.)p eop %%Page: 227 246 227 245 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(227)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(info)21 b(=)g (pvm_initsend\()e(PvmDataDefault)g(\);)495 682 y(info)i(=)g (pvm_pkstr\()f("initial)g(data")h(\);)495 736 y(info)g(=)g(pvm_pkint\() f(&size,)g(1,)i(1)f(\);)495 790 y(info)g(=)g(pvm_pkint\()f(array,)g (size,)h(1)h(\);)495 844 y(info)f(=)g(pvm_pkdouble\()e(matrix,)i (size*size,)e(1)j(\);)495 898 y(msgtag)e(=)i(3)f(;)495 952 y(info)g(=)g(pvm_send\()f(tid,)h(msgtag)g(\);)274 1006 y Fr(F)l(ortran:)495 1060 y Fs(CALL)g(PVMFINITSEND\(PV)o(MRAW,)d (INFO\))495 1114 y(CALL)j(PVMFPACK\()e(INTEGER4,)h(NSIZE,)h(1,)g(1,)h (INFO)f(\))495 1167 y(CALL)g(PVMFPACK\()e(STRING,)i('row)g(5)g(of)h (NXN)f(matrix',)f(19,)h(1,)h(INFO)f(\))495 1221 y(CALL)g(PVMFPACK\()e (REAL8,)i(A\(5,1\),)f(NSIZE,)h(NSIZE)g(,)g(INFO)g(\))495 1275 y(CALL)g(PVMFSEND\()e(TID,)i(MSGTAG,)g(INFO)g(\))249 1382 y Fr(Errors)249 1453 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1453 14 2 v 15 w(pk*)p FA(.)274 1521 y(Name)172 b(P)o(ossible)14 b(Cause)p 249 1538 1288 2 v 274 1576 a(PvmNoMem)48 b(Mallo)q(c)16 b(has)h(failed.)26 b(Message)18 b(bu\013er)g(size)f(has)g(exceeded)552 1630 y(the)d(a)o(v)n(ailable)e (memory)f(on)j(this)g(host.)274 1684 y(PvmNoBuf)75 b(There)11 b(is)e(no)h(activ)o(e)g(send)h(bu\013er)g(to)e(pac)o(k)h(in)o(to.)16 b(T)m(ry)10 b(calling)552 1738 y(p)o(vm)p 634 1738 13 2 v 13 w(initsend)k(b)q(efore)h(pac)o(king)e(message.)p eop %%Page: 228 247 228 246 bop 249 251 a Fu(228)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfparen)n(t\(\))751 b(p)n(vm)p 1575 511 21 2 v 24 w(paren)n(t\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f(tid)g(of)f(the)i(pro)q(cess)g(that)f(spa)o (wned)h(the)f(calling)f(pro)q(cess.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(tid)h(=)f(pvm)p 768 836 14 2 v 15 w(parent\()g(void)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfparent\()f(tid)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(tid)49 b FA({)h(in)o(teger)21 b(returns)h(the)g(task)f(iden)o (ti\014er)g(of)f(the)h(paren)o(t)h(of)e(the)h(calling)460 1110 y(pro)q(cess.)h(If)15 b(the)g(calling)e(pro)q(cess)k(w)o(as)d(not) h(created)h(with)f(p)o(vm)p 1495 1110 13 2 v 13 w(spa)o(wn,)460 1164 y(then)f(tid)g(=)g(PvmNoP)o(aren)o(t.)249 1271 y Fr(Discussion)249 1341 y FA(The)f(routine)f Fs(pvm)p 543 1341 14 2 v 15 w(parent)f FA(returns)j(the)f Fs(tid)f FA(of)g(the)h(pro)q(cess)h(that)e(spa)o(wned)h(the)g(calling)e(pro)q (cess.)249 1395 y(If)h(the)h(calling)e(pro)q(cess)k(w)o(as)d(not)g (created)i(with)f(p)o(vm)p 1103 1395 13 2 v 13 w(spa)o(wn,)f(then)h Fs(tid)f FA(is)h(set)g(to)f(PvmNoP)o(aren)o(t.)249 1507 y Fr(Examples)274 1574 y(C:)538 1628 y Fs(tid)21 b(=)h(pvm_parent\(\);) 274 1682 y Fr(F)l(ortran:)560 1736 y Fs(CALL)f(PVMFPARENT\()e(TID)j(\)) 249 1843 y Fr(Errors)249 1913 y FA(The)14 b(follo)o(wing)e(error)i (condition)g(can)g(b)q(e)g(returned)i(b)o(y)e Fs(pvm)p 1222 1913 14 2 v 15 w(parent)p FA(.)274 1981 y(Name)201 b(P)o(ossible)14 b(Cause)p 249 1999 1317 2 v 274 2037 a(PvmNoP)o(aren)o(t)49 b(The)13 b(calling)d(pro)q(cess)k(w)o(as)e(not)h (created)g(with)f(p)o(vm)p 1406 2037 13 2 v 13 w(spa)o(wn.)p eop %%Page: 229 248 229 247 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(229)291 511 y FE(p)n(vmfp)r(error\(\))758 b(p)n(vm)p 1578 511 21 2 v 25 w(p)r(error\(\))p 249 595 1591 16 v 249 658 a FA(Prin)o(ts)14 b(the)h(error)g(status)f(of)g(the)g(last)g(PVM)g (call.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(perror\()e(char)h(*msg)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfperror\()f(msg,)h(info)g(\)) 249 997 y Fr(P)o(arameters)274 1056 y Fs(msg)71 b FA({)50 b(c)o(haracter)15 b(string)e(supplied)h(b)o(y)f(the)h(user)h(whic)o(h)f (will)e(b)q(e)i(prep)q(ended)i(to)482 1110 y(the)e(error)h(message)e (of)h(the)g(last)g(PVM)g(call.)274 1164 y Fs(info)49 b FA({)h(in)o(teger)12 b(status)g(co)q(de)g(returned)i(b)o(y)d(the)h (routine.)17 b(V)m(alues)12 b(less)g(than)g(zero)482 1217 y(indicate)h(an)h(error.)249 1325 y Fr(Discussion)249 1395 y FA(The)i(routine)g Fs(pvm)p 550 1395 V 15 w(perror)e FA(returns)j(the)g(error)f(message)f(of)g(the)i(last)e(PVM)h(call.)22 b(The)16 b(user)h(can)249 1449 y(use)e Fs(msg)e FA(to)h(add)f (additional)f(information)f(to)j(the)h(error)f(message,)g(for)f (example,)f(its)i(lo)q(cation.)249 1512 y(All)h(stdout)i(and)f(stderr)i (messages)e(are)h(placed)f(in)g(the)g(\014le)h(/tmp/p)o(vm)o(l.)o Fn(<)p FA(uid)p Fn(>)d FA(on)i(the)h(master)249 1566 y(p)o(vmd's)12 b(host.)249 1678 y Fr(Examples)274 1744 y(C:)495 1798 y Fs(if)21 b(\()h(pvm_send\()d(tid,)i(msgtag)g(\))538 1852 y(pvm_perror\(\);)274 1906 y Fr(F)l(ortran:)560 1960 y Fs(CALL)g(PVMFSEND\()f(TID,)h(MSGTAG)f(\))560 2014 y(IF\()h(INFO)g(.LT.)g(0)h(\))f(CALL)g(PVMFPERROR\()f('Step)g(6',) i(INFO)f(\))249 2121 y Fr(Errors)249 2191 y FA(No)14 b(error)h(condition)e(is)h(returned)h(b)o(y)f Fs(pvm)p 936 2191 V 15 w(perror)p FA(.)p eop %%Page: 230 249 230 248 bop 249 251 a Fu(230)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfprecv\(\))809 b(p)n(vm)p 1604 511 21 2 v 25 w(precv\(\))p 249 595 1591 16 v 249 658 a FA(Receiv)o(es)15 b(a)f(message)f(directly)h(in)o(to)f(a)h(bu\013er.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(psend\()f(int)g(tid,)g(int)g(msgtag,)481 890 y(char)g(*buf,)g(int)g(len,)g(int)g(datatype)f(\))481 944 y(int)h(atid,)g(int)g(atag,)g(int)g(alen)g(\))274 998 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfpsend\()f(tid,)h(msgtag,)f (buf,)h(len,)g(datatype,)481 1052 y(atid,)g(atag,)g(alen,)g(info)g(\)) 249 1159 y Fr(P)o(arameters)274 1217 y Fs(tid)158 b FA({)50 b(in)o(teger)14 b(task)g(iden)o(ti\014er)g(of)g(sending)g(pro)q(cess)h (\(to)f(matc)o(h\).)274 1271 y Fs(msgtag)92 b FA({)50 b(in)o(teger)14 b(message)g(tag)f(\(to)h(matc)o(h\))f(msgtag)f(should)i (b)q(e)g Fn(>)p FA(=)e(0.)274 1325 y Fs(buf)158 b FA({)50 b(p)q(oin)o(ter)14 b(to)g(a)f(bu\013er)i(to)f(receiv)o(e)h(in)o(to.)274 1379 y Fs(len)158 b FA({)50 b(length)14 b(of)f(bu\013er)i(\(in)e(m)o (ultiple)f(of)h(data)h(t)o(yp)q(e)g(size\).)274 1433 y Fs(datatype)48 b FA({)i(t)o(yp)q(e)14 b(of)f(data)h(to)g(whic)o(h)f (buf)h(p)q(oin)o(ts)g(\(see)h(b)q(elo)o(w\).)274 1487 y Fs(atid)136 b FA({)50 b(returns)15 b(actual)f(TID)f(of)g(sender.)274 1541 y Fs(atag)136 b FA({)50 b(returns)15 b(actual)f(message)f(tag.)274 1595 y Fs(atid)136 b FA({)50 b(returns)15 b(actual)f(message)f(length.) 274 1649 y Fs(info)136 b FA({)50 b(in)o(teger)12 b(status)g(co)q(de)g (returned)i(b)o(y)d(the)h(routine.)18 b(V)m(alues)11 b(less)h(than)g(zero)569 1703 y(indicate)i(an)f(error.)249 1810 y Fr(Discussion)249 1881 y FA(The)i(routine)g Fs(pvm)p 548 1881 V 15 w(recv)f FA(blo)q(c)o(ks)g(the)h(pro)q(cess)i(un)o(til)c (a)i(message)f(with)g(lab)q(el)g Fs(msgtag)f FA(has)i(arriv)o(ed)249 1935 y(from)e Fs(tid)p FA(.)19 b(p)o(vm)p 527 1935 13 2 v 14 w(precv;)c(it)f(then)h(places)h(the)f(con)o(ten)o(ts)g(of)f(the) h(message)g(in)f(the)h(supplied)g(bu\013er,)249 1989 y Fs(buf)p FA(,)e(up)h(to)g(a)f(maxim)n(um)d(length)k(of)f(len)h(*)f (\(size)i(of)e(data)h(t)o(yp)q(e\).)249 2051 y(p)o(vm)p 331 2051 V 13 w(precv)d(can)e(receiv)o(e)i(messages)e(sen)o(t)h(b)o(y)g (p)o(vm)p 1042 2051 V 13 w(psend,)h(p)o(vm)p 1261 2051 V 13 w(send,)g(p)o(vm)p 1457 2051 V 13 w(mcast,)e(or)g(p)o(vm)p 1724 2051 V 14 w(b)q(cast.)249 2113 y(A)15 b(-1)f(in)g Fs(msgtag)f FA(or)i Fs(tid)f FA(matc)o(hes)g(an)o(ything.)20 b(This)14 b(allo)o(ws)f(the)j(user)f(the)h(follo)o(wing)c(options.)19 b(If)249 2167 y(tid)d(=)f Ft(\000)p FA(1)h(and)g(msgtag)e(is)i (de\014ned)h(b)o(y)e(the)i(user,)g(p)o(vm)p 1166 2167 V 13 w(recv)g(will)e(accept)i(a)f(message)f(from)g(an)o(y)249 2221 y(pro)q(cess)20 b(that)d(has)h(a)f(matc)o(hing)f(msgtag.)28 b(If)17 b(msgtag)f(=)i Ft(\000)p FA(1)g(and)f(tid)h(is)f(de\014ned)i(b) o(y)e(the)h(user,)249 2275 y(p)o(vm)p 331 2275 V 13 w(recv)d(will)d (accept)j(an)o(y)f(message)f(that)h(is)f(sen)o(t)i(from)d(pro)q(cess)j (tid.)j(If)13 b(tid)h(=)d Ft(\000)p FA(1)j(and)g(msgtag)249 2329 y(=)e Ft(\000)p FA(1,)h(p)o(vm)p 453 2329 V 14 w(recv)i(will)d (accept)j(an)o(y)f(message)f(from)f(an)o(y)i(pro)q(cess.)249 2392 y(In)e(C)f(the)h(datat)o(yp)q(e)g(parameter)f(m)o(ust)g(b)q(e)h (one)g(of)f(the)h(follo)o(wing,)d(dep)q(ending)j(on)f(the)h(t)o(yp)q(e) g(of)f(data)249 2446 y(to)j(b)q(e)g(sen)o(t:)p eop %%Page: 231 250 231 249 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(231)423 507 y Fs(datatype)173 b(Data)21 b(Type)423 561 y(PVM_STR)195 b(string)423 615 y(PVM_BYTE)173 b(byte)423 669 y(PVM_SHORT)151 b(short)423 723 y(PVM_INT)195 b(int)423 777 y(PVM_FLOAT)151 b(real)423 831 y(PVM_CPLX)173 b(complex)423 885 y(PVM_DOUBLE)129 b(double)423 939 y(PVM_DCPLX)151 b(double)21 b(complex)423 993 y(PVM_LONG)173 b(long)21 b(integer)423 1047 y(PVM_USHORT)129 b(unsigned)20 b(short)h(int)423 1101 y(PVM_UINT)173 b(unsigned)20 b(int)423 1155 y(PVM_ULONG)151 b(unsigned)20 b(long)h(int)249 1242 y FA(In)14 b(F)m(ortran)g(the)g(same)f(data)h(t)o(yp)q(es)g(sp)q (eci\014ed)i(for)d(unpac)o(k)h(should)g(b)q(e)h(used.)249 1304 y(The)f(PVM)g(mo)q(del)e(guaran)o(tees)i(the)g(follo)o(wing)d(ab)q (out)j(message)f(order.)19 b(If)13 b(task)g(1)h(sends)g(message)249 1358 y(A)k(to)g(task)h(2,)f(then)h(task)f(1)g(sends)i(message)e(B)g(to) g(task)g(2,)h(message)f(A)g(will)f(arriv)o(e)h(at)g(task)g(2)249 1412 y(b)q(efore)c(message)f(B.)g(Moreo)o(v)o(er,)h(if)e(b)q(oth)i (messages)f(arriv)o(e)g(b)q(efore)i(task)e(2)g(do)q(es)h(a)f(receiv)o (e,)h(then)g(a)249 1466 y(wildcard)g(receiv)o(e)h(will)d(alw)o(a)o(ys)h (return)i(message)f(A.)249 1528 y(p)o(vm)p 331 1528 13 2 v 13 w(recv)i(is)e(blo)q(c)o(king,)f(whic)o(h)h(means)g(the)h (routine)g(w)o(aits)f(un)o(til)f(a)h(message)g(matc)o(hing)f(the)i (user)249 1582 y(sp)q(eci\014ed)k(tid)d(and)h(msgtag)e(v)n(alues)i (arriv)o(es)g(at)g(the)h(lo)q(cal)e(p)o(vmd.)25 b(If)17 b(the)h(message)e(has)h(already)249 1636 y(arriv)o(ed,)d(p)o(vm)p 484 1636 V 13 w(recv)h(returns)g(immediately)c(with)i(the)i(message.) 249 1699 y(p)o(vm)p 331 1699 V 13 w(precv)f(do)q(es)f(not)g(a\013ect)g (the)h(state)f(of)f(the)h(curren)o(t)h(receiv)o(e)g(message)e(bu\013er) i(\(created)g(b)o(y)e(the)249 1753 y(other)j(receiv)o(e)g(functions\).) 249 1865 y Fr(Examples)274 1931 y(C:)495 1985 y Fs(info)21 b(=)g(pvm_precv\()f(tid,)h(msgtag,)f(array,)h(cnt,)g(PVM_FLOAT,)887 2039 y(&src,)g(&atag,)f(&acnt)h(\);)274 2093 y Fr(F)l(ortran:)495 2147 y Fs(CALL)g(PVMFPRECV\()e(-1,)i(4,)h(BUF,)f(CNT,)g(REAL4,)843 2201 y(SRC,)g(ATAG,)g(ACNT,)g(INFO)g(\))p eop %%Page: 232 251 232 250 bop 249 251 a Fu(232)1321 b(App)q(endix)15 b(B)249 507 y Fr(Errors)249 578 y FA(The)f(follo)o(wing)e(error)i(conditions)g (can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 578 14 2 v 15 w(send)p FA(.)274 646 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 663 1338 2 v 274 701 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(tid)i(or)f(a)h(msgtag.)274 755 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)p eop %%Page: 233 252 233 251 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(233)291 511 y FE(p)n(vmfprob)r(e\(\))795 b(p)n(vm)p 1597 511 21 2 v 24 w(prob)r(e\(\))p 249 595 1591 16 v 249 658 a FA(Chec)o(ks)15 b(whether)g(message)f(has)g(arriv)o(ed.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(bufid)g(=)h(pvm)p 812 836 14 2 v 15 w(probe\()e(int)i(tid,)f(int)g(msgtag)f(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfprobe\()f(tid,)h(msgtag,)f (bufid)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(tid)115 b FA({)49 b(in)o(teger)13 b(task)f(iden)o(ti\014er)g(of)g(sending)g (pro)q(cess)i(supplied)e(b)o(y)g(the)g(user.)19 b(\(A)525 1110 y(-1)14 b(in)f(this)h(argumen)o(t)f(matc)o(hes)g(an)o(y)h(tid)f (\(wildcard\).\))274 1164 y Fs(msgtag)49 b FA({)g(in)o(teger)11 b(message)e(tag)h(supplied)g(b)o(y)g(the)h(user.)18 b(msgtag)8 b(should)i(b)q(e)h Fn(>)p FA(=)h(0.)525 1217 y(\(A)i(-1)g(in)f(this)h (argumen)o(t)f(matc)o(hes)g(an)o(y)h(message)f(tag)h(\(wildcard\).\)) 274 1271 y Fs(bufid)71 b FA({)49 b(in)o(teger)15 b(returning)f(the)h(v) n(alue)f(of)f(the)i(new)f(activ)o(e)h(receiv)o(e)g(bu\013er)g(iden-)525 1325 y(ti\014er.)k(V)m(alues)13 b(less)i(than)f(zero)g(indicate)g(an)g (error.)249 1433 y Fr(Discussion)249 1503 y FA(The)d(routine)g Fs(pvm)p 540 1503 V 15 w(probe)f FA(c)o(hec)o(ks)i(to)f(see)h(if)e(a)h (message)f(with)h(lab)q(el)f Fs(msgtag)f FA(has)i(arriv)o(ed)g(from)e Fs(tid)p FA(.)249 1557 y(If)14 b(a)f(matc)o(hing)f(message)i(has)g (arriv)o(ed,)g(p)o(vm)p 975 1557 13 2 v 13 w(prob)q(e)h(returns)g(a)f (bu\013er)h(iden)o(ti\014er)f(in)g Fs(bufid)p FA(.)j(This)249 1611 y Fs(bufid)f FA(can)i(b)q(e)g(used)g(in)f(a)h(p)o(vm)p 786 1611 V 13 w(bu\014nfo)f(call)g(to)g(determine)g(information)e(ab)q (out)i(the)h(message)249 1665 y(suc)o(h)d(as)f(its)g(source)h(and)e (length.)249 1727 y(If)h(the)g(requested)i(message)d(has)h(not)g(arriv) o(ed,)f(p)o(vm)p 1089 1727 V 14 w(prob)q(e)h(returns)i(with)d(a)h(0)f (in)h Fs(bufid)p FA(.)i(If)e(some)249 1781 y(error)h(o)q(ccurs,)g Fs(bufid)e FA(will)f(b)q(e)i Fn(<)e FA(0.)249 1844 y(A)19 b(-1)f(in)g Fs(msgtag)g FA(or)h Fs(tid)f FA(matc)o(hes)g(an)o(ything.) 32 b(This)18 b(feature)i(allo)o(ws)d(the)i(user)h(the)g(follo)o(wing) 249 1898 y(options.)25 b(If)16 b(tid)g(=)g Ft(\000)p FA(1)g(and)g(msgtag)f(is)h(de\014ned)h(b)o(y)f(the)h(user,)h(then)f(p)o (vm)p 1480 1898 V 13 w(prob)q(e)g(will)e(accept)i(a)249 1952 y(message)11 b(from)f(an)o(y)g(pro)q(cess)j(that)f(has)f(a)g(matc) o(hing)f(msgtag.)15 b(If)c(msgtag)f(=)h Ft(\000)p FA(1)h(and)f(tid)g (is)g(de\014ned)249 2006 y(b)o(y)h(the)i(user,)f(then)h(p)o(vm)p 650 2006 V 13 w(prob)q(e)f(will)e(accept)j(an)o(y)e(message)h(that)f (is)h(sen)o(t)g(from)e(pro)q(cess)k(tid.)i(If)12 b(tid)249 2059 y(=)g Ft(\000)p FA(1)i(and)f(msgtag)g(=)f Ft(\000)p FA(1,)h(then)h(p)o(vm)p 882 2059 V 14 w(prob)q(e)g(will)f(accept)i(an)o (y)e(message)h(from)e(an)o(y)h(pro)q(cess.)249 2122 y(p)o(vm)p 331 2122 V 13 w(prob)q(e)18 b(can)e(b)q(e)i(called)e(m)o(ultiple)e (times)i(to)g(c)o(hec)o(k)i(whether)g(a)e(giv)o(en)g(message)g(has)h (arriv)o(ed)249 2176 y(y)o(et.)j(After)15 b(the)g(message)f(has)h (arriv)o(ed,)f(p)o(vm)p 987 2176 V 13 w(recv)i(m)o(ust)d(b)q(e)i (called)f(b)q(efore)i(the)f(message)f(can)g(b)q(e)249 2230 y(unpac)o(k)o(ed)g(in)o(to)g(the)g(user's)h(memory)c(using)j(the)g (unpac)o(k)g(routines.)p eop %%Page: 234 253 234 252 bop 249 251 a Fu(234)1321 b(App)q(endix)15 b(B)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(tid)21 b(=)g (pvm_parent\(\);)495 682 y(msgtag)f(=)i(4)f(;)495 736 y(arrived)f(=)i(pvm_probe\()d(tid,)i(msgtag)g(\);)495 790 y(if)g(\()h(arrived)e(>)h(0)h(\))538 844 y(info)f(=)h (pvm_bufinfo\()d(arrived,)h(&len,)h(&tag,)g(&tid)g(\);)495 898 y(else)495 952 y(/*)g(go)g(do)h(other)e(computing)g(*/)274 1006 y Fr(F)l(ortran:)495 1060 y Fs(CALL)h(PVMFPROBE\()e(-1,)i(4,)h (ARRIVED)e(\))495 1114 y(IF)h(\()h(ARRIVED)e(.GT.)h(0)g(\))h(THEN)560 1167 y(CALL)f(PVMFBUFINFO\()e(ARRIVED,)h(LEN,)h(TAG,)g(TID,)g(INFO)g (\))495 1221 y(ELSE)274 1275 y(*)264 b(GO)21 b(DO)h(USEFUL)e(WORK)495 1329 y(ENDIF)249 1436 y Fr(Errors)249 1507 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1507 14 2 v 15 w(probe)p FA(.)274 1575 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1592 1338 2 v 274 1630 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(tid)i (v)n(alue)f(or)h(msgtag.)274 1684 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)p eop %%Page: 235 254 235 253 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(235)291 511 y FE(p)n(vmfpsend\(\))793 b(p)n(vm)p 1596 511 21 2 v 24 w(psend\(\))p 249 595 1591 16 v 249 658 a FA(P)o(ac)o(ks)14 b(and)g(sends)h(data)f(in)f(one)h(call.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(psend\()f(int)g(tid,)g(int)g(msgtag,)f(char)h(*buf,)983 890 y(int)g(len,)g(int)g(datatype)f(\))274 944 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfpsend\()f(tid,)h(msgtag,)f(buf,)h(len,)g(datatype,)f (info)h(\))249 1051 y Fr(P)o(arameters)274 1110 y Fs(tid)158 b FA({)50 b(in)o(teger)14 b(task)g(iden)o(ti\014er)g(of)g(destination)f (pro)q(cess.)274 1164 y Fs(msgtag)92 b FA({)50 b(in)o(teger)10 b(message)g(tag)g(supplied)g(b)o(y)g(the)g(user.)18 b(msgtag)9 b(should)h(b)q(e)g Fn(>)p FA(=)i(0.)274 1217 y Fs(buf)158 b FA({)50 b(p)q(oin)o(ter)14 b(to)g(a)f(bu\013er)i(to)f(send.)274 1271 y Fs(len)158 b FA({)50 b(length)14 b(of)f(bu\013er)i(\(in)e(m)o (ultiple)f(of)h(data)h(t)o(yp)q(e)g(size\).)274 1325 y Fs(datatype)48 b FA({)i(t)o(yp)q(e)14 b(of)f(data)h(to)g(whic)o(h)f (buf)h(p)q(oin)o(ts)g(\(see)h(b)q(elo)o(w\).)274 1379 y Fs(info)136 b FA({)50 b(in)o(teger)12 b(status)g(co)q(de)g(returned)i (b)o(y)d(the)h(routine.)18 b(V)m(alues)11 b(less)h(than)g(zero)569 1433 y(indicate)i(an)f(error.)249 1541 y Fr(Discussion)249 1611 y FA(The)h(routine)g Fs(pvm)p 546 1611 V 15 w(psend)e FA(tak)o(es)i(a)g(p)q(oin)o(ter)f(to)h(a)f(bu\013er)h Fs(buf)p FA(,)f(its)g(length)h Fs(len)p FA(,)e(and)i(its)f(data)h(t)o (yp)q(e)249 1665 y Fs(datatype)e FA(and)i(sends)h(this)f(data)g (directly)g(to)g(the)g(PVM)g(task)g(iden)o(ti\014ed.)249 1727 y(p)o(vm)p 331 1727 13 2 v 13 w(psend)h(data)f(can)g(b)q(e)g (receiv)o(ed)i(b)o(y)d(p)o(vm)p 986 1727 V 14 w(precv,)h(p)o(vm)p 1203 1727 V 14 w(recv,)g(p)o(vm)p 1397 1727 V 13 w(trecv,)h(or)f(p)o (vm)p 1658 1727 V 13 w(nrecv.)249 1790 y Fs(msgtag)f FA(is)i(used)g(to)f(lab)q(el)g(the)i(con)o(ten)o(t)f(of)f(the)h (message.)20 b(If)14 b(p)o(vm)p 1327 1790 V 13 w(send)h(is)g (successful,)h Fs(info)e FA(will)249 1844 y(b)q(e)h(0.)i(If)d(some)f (error)i(o)q(ccurs,)g Fs(info)e FA(will)f(b)q(e)i Fn(<)e FA(0.)249 1906 y(The)g(p)o(vm)p 414 1906 V 14 w(psend)h(routine)f(is)g (async)o(hronous.)18 b(Computation)9 b(on)j(the)h(sending)f(pro)q (cessor)i(resumes)249 1960 y(as)j(so)q(on)g(as)g(the)h(message)f(is)g (safely)g(on)f(its)h(w)o(a)o(y)g(to)g(the)g(receiving)h(pro)q(cessor.) 29 b(This)17 b(approac)o(h)249 2014 y(is)d(in)f(con)o(trast)h(to)g (sync)o(hronous)g(comm)o(unication,)c(during)k(whic)o(h)f(computation)f (on)i(the)g(sending)249 2068 y(pro)q(cessor)i(halts)d(un)o(til)h(the)g (matc)o(hing)e(receiv)o(e)j(is)f(executed)i(b)o(y)d(the)i(receiving)f (pro)q(cessor.)249 2130 y(In)e(C)f(the)h(datat)o(yp)q(e)g(parameter)f (m)o(ust)g(b)q(e)h(one)g(of)f(the)h(follo)o(wing,)d(dep)q(ending)j(on)f (the)h(t)o(yp)q(e)g(of)f(data)249 2184 y(to)j(b)q(e)g(sen)o(t:)423 2271 y Fs(datatype)173 b(Data)21 b(Type)423 2325 y(PVM_STR)195 b(string)423 2379 y(PVM_BYTE)173 b(byte)423 2433 y(PVM_SHORT)151 b(short)423 2487 y(PVM_INT)195 b(int)p eop %%Page: 236 255 236 254 bop 249 251 a Fu(236)1321 b(App)q(endix)15 b(B)423 507 y Fs(PVM_FLOAT)151 b(real)423 561 y(PVM_CPLX)173 b(complex)423 615 y(PVM_DOUBLE)129 b(double)423 669 y(PVM_DCPLX)151 b(double)21 b(complex)423 723 y(PVM_LONG)173 b(long)21 b(integer)423 777 y(PVM_USHORT)129 b(unsigned)20 b(short)h(int)423 831 y(PVM_UINT)173 b(unsigned)20 b(int)423 885 y(PVM_ULONG)151 b(unsigned)20 b(long)h(int)249 972 y FA(In)14 b(F)m(ortran)g(the)g (same)f(data)h(t)o(yp)q(es)g(sp)q(eci\014ed)i(for)d(pac)o(k)h(should)g (b)q(e)g(used.)249 1034 y(The)g(PVM)g(mo)q(del)e(guaran)o(tees)i(the)g (follo)o(wing)d(ab)q(out)j(message)f(order.)19 b(If)13 b(task)g(1)h(sends)g(message)249 1088 y(A)k(to)g(task)h(2,)f(then)h (task)f(1)g(sends)h(message)f(B)h(to)f(task)g(2;)h(message)f(A)g(will)f (arriv)o(e)h(at)g(task)g(2)249 1142 y(b)q(efore)c(message)f(B.)g(Moreo) o(v)o(er,)h(if)e(b)q(oth)i(messages)f(arriv)o(e)g(b)q(efore)i(task)e(2) g(do)q(es)h(a)f(receiv)o(e,)h(then)g(a)249 1196 y(wildcard)g(receiv)o (e)h(will)d(alw)o(a)o(ys)h(return)i(message)f(A.)249 1259 y(p)o(vm)p 331 1259 13 2 v 13 w(psend)i(do)q(es)g(not)f(a\013ect)g (the)h(state)g(of)e(the)h(curren)o(t)i(outgoing)c(message)i(bu\013er)h (\(created)g(b)o(y)249 1313 y(p)o(vm)p 331 1313 V 13 w(initsend)e(and)g(used)h(b)o(y)f(p)o(vm)p 815 1313 V 13 w(send\).)249 1425 y Fr(Examples)274 1491 y(C:)495 1545 y Fs(info)21 b(=)g(pvm_psend\()f(tid,)h(msgtag,)f(array,)h(1000,)f (PVM_FLOAT)g(\);)274 1599 y Fr(F)l(ortran:)495 1653 y Fs(CALL)h(PVMFPSEND\()e(TID,)i(MSGTAG,)g(BUF,)g(CNT,)g(REAL4,)f(INFO)h (\))p eop %%Page: 237 256 237 255 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(237)249 507 y Fr(Errors)249 578 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 578 14 2 v 15 w(send)p FA(.)274 646 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 663 1338 2 v 274 701 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(tid)i(or)f(a)h(msgtag.)274 755 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)p eop %%Page: 238 257 238 256 bop 249 251 a Fu(238)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfpstat\(\))835 b(p)n(vm)p 1617 511 21 2 v 24 w(pstat\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f(status)h(of)e(the)i(sp)q(eci\014ed)g(PVM)f(pro)q(cess.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(status)g(=)h(pvm)p 834 836 14 2 v 15 w(pstat\()e(tid)h(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfpstat\()f(tid,)h(status)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(tid)115 b FA({)49 b(in)o(teger)14 b(task)g(iden)o(ti\014er)h(of)e(the)h(PVM)h(pro)q(cess)g(in)f (question.)274 1110 y Fs(status)49 b FA({)g(in)o(teger)15 b(returns)h(the)f(status)g(of)f(the)h(PVM)f(pro)q(cess)j(iden)o (ti\014ed)d(b)o(y)g Fs(tid)p FA(.)525 1164 y(Status)i(is)f(PvmOk)e(if)i (the)g(task)h(is)e(running,)h(PvmNoT)m(ask)e(if)h(not,)h(and)525 1217 y(PvmBadP)o(aram)c(if)i(the)i Fs(tid)e FA(is)h(bad.)249 1325 y Fr(Discussion)249 1395 y FA(The)k(routine)g Fs(pvm)p 554 1395 V 15 w(pstat)e FA(returns)j(the)f(status)h(of)e(the)h(pro)q (cess)h(iden)o(ti\014ed)f(b)o(y)f Fs(tid)p FA(.)28 b(Also)18 b(note)249 1449 y(that)c(p)o(vm)p 421 1449 13 2 v 13 w(notify\(\))g(can)g(b)q(e)g(used)h(to)f(notify)f(the)h(caller)g(that)g (a)f(task)h(has)g(failed.)249 1561 y Fr(Examples)274 1628 y(C:)538 1682 y Fs(tid)21 b(=)h(pvm_parent\(\);)538 1736 y(status)f(=)g(pvm_pstat\()f(tid)h(\);)274 1790 y Fr(F)l(ortran:)560 1844 y Fs(CALL)g(PVMFPARENT\()e(TID)j(\))560 1898 y(CALL)f(PVMFPSTAT\()f(TID,)h(STATUS)f(\))249 2005 y Fr(Errors)249 2075 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g (can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2075 14 2 v 15 w(pstat)p FA(.)274 2143 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 2161 1338 2 v 274 2199 a(PvmBadP)o(aram)47 b(bad)14 b(parameter)f(\(most)g(lik)o(ely)m(,)f(an)i(in)o(v)n(alid)d (tid)j(v)n(alue\).)274 2253 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)274 2307 y(PvmNoT)m(ask)103 b(task)14 b(not)g(running.)p eop %%Page: 239 258 239 257 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(239)291 511 y FE(p)n(vmfrecv\(\))885 b(p)n(vm)p 1642 511 21 2 v 25 w(recv\(\))p 249 595 1591 16 v 249 657 a FA(Receiv)o(es)15 b(a)f(message.)249 769 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(bufid)g(=)h(pvm)p 812 836 14 2 v 15 w(recv\()f(int)g (tid,)g(int)g(msgtag)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfrecv\()f(tid,)h(msgtag,)g(bufid)f(\))249 997 y Fr(P)o(arameters)274 1055 y Fs(tid)115 b FA({)49 b(in)o(teger)13 b(task)f(iden)o(ti\014er)g(of)g(sending)g(pro)q(cess)i (supplied)e(b)o(y)g(the)g(user.)19 b(\(A)525 1109 y(-1)14 b(in)f(this)h(argumen)o(t)f(matc)o(hes)g(an)o(y)h(tid)f (\(wildcard\).\))274 1163 y Fs(msgtag)49 b FA({)g(in)o(teger)11 b(message)e(tag)h(supplied)g(b)o(y)g(the)h(user.)18 b(msgtag)8 b(should)i(b)q(e)h Fn(>)p FA(=)h(0.)525 1217 y(It)e(allo)o(ws)f(the)i (user's)g(program)e(to)h(distinguish)f(b)q(et)o(w)o(een)j(di\013eren)o (t)f(kinds)525 1271 y(of)16 b(messages)h(.)26 b(\(A)17 b(-1)f(in)g(this)h(argumen)o(t)f(matc)o(hes)g(an)o(y)g(message)g(tag) 525 1325 y(\(wildcard\).\))274 1379 y Fs(bufid)71 b FA({)49 b(in)o(teger)10 b(returns)i(the)e(v)n(alue)f(of)h(the)g(new)g(activ)o (e)g(receiv)o(e)h(bu\013er)g(iden)o(ti\014er.)525 1433 y(V)m(alues)j(less)g(than)g(zero)h(indicate)f(an)f(error.)249 1540 y Fr(Discussion)249 1611 y FA(The)i(routine)g Fs(pvm)p 548 1611 V 15 w(recv)f FA(blo)q(c)o(ks)g(the)h(pro)q(cess)i(un)o(til)c (a)i(message)f(with)g(lab)q(el)g Fs(msgtag)f FA(has)i(arriv)o(ed)249 1665 y(from)f Fs(tid)p FA(.)22 b(p)o(vm)p 531 1665 13 2 v 14 w(recv)16 b(then)h(places)f(the)g(message)g(in)f(a)g(new)h FB(active)g FA(receiv)o(e)h(bu\013er,)f(whic)o(h)g(also)249 1719 y(clears)f(the)f(curren)o(t)i(receiv)o(e)f(bu\013er.)249 1781 y(A)g(-1)f(in)g Fs(msgtag)f FA(or)i Fs(tid)f FA(matc)o(hes)g(an)o (ything.)20 b(This)14 b(allo)o(ws)f(the)j(user)f(the)h(follo)o(wing)c (options.)19 b(If)249 1835 y(tid)c(=)e Ft(\000)p FA(1)i(and)g(msgtag)e (is)i(de\014ned)h(b)o(y)f(the)h(user,)g(then)f(p)o(vm)p 1251 1835 V 14 w(recv)h(will)d(accept)j(a)f(message)g(from)249 1889 y(an)o(y)i(pro)q(cess)i(whic)o(h)e(has)g(a)g(matc)o(hing)f (msgtag.)26 b(If)17 b(msgtag)e(=)j Ft(\000)p FA(1)f(and)g(tid)g(is)g (de\014ned)h(b)o(y)f(the)249 1943 y(user,)f(then)g(p)o(vm)p 528 1943 V 14 w(recv)g(will)e(accept)j(an)o(y)d(message)h(that)h(is)f (sen)o(t)h(from)e(pro)q(cess)j(tid.)22 b(If)15 b(tid)g(=)f Ft(\000)p FA(1)249 1997 y(and)g(msgtag)e(=)g Ft(\000)p FA(1,)h(then)i(p)o(vm)p 772 1997 V 13 w(recv)g(will)d(accept)k(an)o(y)d (message)h(from)e(an)o(y)h(pro)q(cess.)249 2059 y(The)h(PVM)g(mo)q(del) e(guaran)o(tees)i(the)g(follo)o(wing)d(ab)q(out)j(message)f(order.)19 b(If)13 b(task)g(1)h(sends)g(message)249 2113 y(A)k(to)g(task)h(2,)f (then)h(task)f(1)g(sends)i(message)e(B)g(to)g(task)g(2,)h(message)f(A)g (will)f(arriv)o(e)h(at)g(task)g(2)249 2167 y(b)q(efore)c(message)f(B.)g (Moreo)o(v)o(er,)h(if)e(b)q(oth)i(messages)f(arriv)o(e)g(b)q(efore)i (task)e(2)g(do)q(es)h(a)f(receiv)o(e,)h(then)g(a)249 2221 y(wildcard)g(receiv)o(e)h(will)d(alw)o(a)o(ys)h(return)i(message)f (A.)249 2283 y(If)c(p)o(vm)p 369 2283 V 13 w(recv)h(is)f(successful,)i Fs(bufid)c FA(will)h(b)q(e)h(the)h(v)n(alue)e(of)g(the)i(new)f(activ)o (e)g(receiv)o(e)h(bu\013er)g(iden)o(ti\014er.)249 2337 y(If)j(some)f(error)h(o)q(ccurs,)h Fs(bufid)e FA(will)f(b)q(e)j Fn(<)d FA(0.)249 2399 y(p)o(vm)p 331 2399 V 13 w(recv)k(is)e(blo)q(c)o (king,)f(whic)o(h)h(means)g(the)h(routine)g(w)o(aits)f(un)o(til)f(a)h (message)g(matc)o(hing)f(the)i(user)249 2453 y(sp)q(eci\014ed)k(tid)d (and)h(msgtag)e(v)n(alues)i(arriv)o(es)g(at)g(the)h(lo)q(cal)e(p)o (vmd.)25 b(If)17 b(the)h(message)e(has)h(already)249 2507 y(arriv)o(ed,)d(then)g(p)o(vm)p 578 2507 V 13 w(recv)h(returns)h (imm)o(ediately)11 b(with)j(the)g(message.)p eop %%Page: 240 259 240 258 bop 249 251 a Fu(240)1321 b(App)q(endix)15 b(B)249 507 y FA(Once)e(p)o(vm)p 435 507 13 2 v 13 w(recv)g(returns,)h(the)e (data)f(in)h(the)g(message)g(can)g(b)q(e)g(unpac)o(k)o(ed)g(in)o(to)f (the)i(user's)g(memory)249 561 y(using)h(the)g(unpac)o(k)g(routines.) 249 673 y Fr(Examples)274 740 y(C:)495 794 y Fs(tid)21 b(=)g(pvm_parent\(\);)495 848 y(msgtag)f(=)i(4)f(;)495 902 y(bufid)f(=)i(pvm_recv\()e(tid,)h(msgtag)f(\);)495 956 y(info)h(=)g(pvm_upkint\()f(tid_array,)f(10,)j(1)f(\);)495 1010 y(info)g(=)g(pvm_upkint\()f(problem_size,)f(1,)i(1)h(\);)495 1064 y(info)f(=)g(pvm_upkfloat\()e(input_array,)h(100,)h(1)g(\);)274 1118 y Fr(F)l(ortran:)495 1172 y Fs(CALL)g(PVMFRECV\()e(-1,)j(4,)f (BUFID)g(\))495 1226 y(CALL)g(PVMFUNPACK\()e(INTEGER4,)h(TIDS,)h(25,)g (1,)g(INFO)g(\))495 1280 y(CALL)g(PVMFUNPACK\()e(REAL8,)i(MATRIX,)f (100,)h(100,)g(INFO)g(\))249 1386 y Fr(Errors)249 1457 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h (returned)g(b)o(y)f Fs(pvm)p 1238 1457 14 2 v 15 w(recv)p FA(.)274 1525 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1543 1338 2 v 274 1580 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(tid)i(v)n(alue,)e(or)i(msgtag)e Fn(<)g Ft(\000)p FA(1.)274 1634 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)p eop %%Page: 241 260 241 259 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(241)291 511 y FE(|||{)955 b(p)n(vm)p 1621 511 21 2 v 25 w(recvf\(\))p 249 595 1591 16 v 249 658 a FA(Rede\014nes)15 b(the)g(comparison)d (function)i(used)h(to)e(accept)j(messages.)249 770 y Fr(Synopsis)274 836 y(C)195 b Fs(int)21 b(\(*old\)\(\))f(=)i (pvm_recvf\()e(int)h(\(*new\)\()f(int)h(bufid,)1092 890 y(int)g(tid,)g(int)g(tag)g(\)\))274 944 y Fr(F)l(ortran)48 b FA(NOT)15 b(A)-5 b(V)g(AILABLE)249 1051 y Fr(P)o(arameters)274 1110 y Fs(tid)93 b FA({)49 b(in)o(teger)15 b(task)f(iden)o(ti\014er)g (of)f(sending)h(pro)q(cess)i(supplied)e(b)o(y)g(the)g(user.)274 1164 y Fs(tag)93 b FA({)49 b(in)o(teger)15 b(message)e(tag)h(supplied)g (b)o(y)f(the)i(user.)274 1217 y Fs(bufid)49 b FA({)g(in)o(teger)15 b(message)e(bu\013er)i(iden)o(ti\014er.)249 1325 y Fr(Discussion)249 1395 y FA(The)f(routine)f Fs(pvm)p 545 1395 14 2 v 15 w(recvf)f FA(de\014nes)j(the)f(comparison)e(function)h(to)g(b)q(e)h (used)g(b)o(y)f(the)h(p)o(vm)p 1677 1395 13 2 v 13 w(recv)g(and)249 1449 y(p)o(vm)p 331 1449 V 13 w(nrecv)20 b(functions.)33 b(It)18 b(is)h(a)o(v)n(ailable)d(as)j(a)f(means)g(to)h(customize)f(PVM) h(message)g(passing.)249 1503 y(p)o(vm)p 331 1503 V 13 w(recvf)d(sets)g(a)e(user)i(supplied)f(comparison)f(function)g(to)h(ev) n(aluate)f(messages)h(for)f(receiving)i(.)249 1557 y(The)g(default)f (comparison)g(function)g(ev)n(aluates)h(the)g(source)h(and)e(message)h (tag)f(asso)q(ciated)h(with)249 1611 y(all)d(incoming)e(messages.)249 1673 y(p)o(vm)p 331 1673 V 13 w(recvf)16 b(is)e(in)o(tended)h(for)f (sophisticated)h(C)g(programmers)d(who)j(understand)g(the)g(function)g (of)249 1727 y(suc)o(h)k(routines)f(\(lik)o(e)f(signal\))g(and)g(who)h (require)g(a)g(receiv)o(e)h(routine)e(that)h(can)g(matc)o(h)f(on)g (more)249 1781 y(complex)c(message)g(con)o(texts)i(than)f(the)h (default)e(pro)o(vides.)249 1844 y(p)o(vm)p 331 1844 V 13 w(recvf)i(returns)g(0)e(if)g(the)h(default)f(matc)o(hing)f (function;)h(otherwise,)h(it)g(returns)h(the)f(matc)o(hing)249 1898 y(function.)k(The)c(matc)o(hing)e(function)i(should)f(return)i (the)g(follo)o(wing:)274 1956 y(V)m(alue)49 b(Action)14 b(T)m(ak)o(en)p 249 1974 1228 2 v 311 2012 a Fn(<)e FA(0)49 b(return)15 b(immediately)c(with)i(this)h(error)h(co)q(de)355 2065 y(0)49 b(do)14 b(not)g(pic)o(k)f(this)h(message)355 2119 y(1)49 b(pic)o(k)14 b(this)g(message,)f(and)h(do)f(not)h(scan)h (the)f(rest)311 2173 y Fn(>)e FA(1)49 b(pic)o(k)14 b(this)g(highest)g (rank)o(ed)g(message)g(after)g(scanning)g(them)f(all)p 249 2191 V eop %%Page: 242 261 242 260 bop 249 251 a Fu(242)1321 b(App)q(endix)15 b(B)249 507 y Fr(Example:)21 b(Implemen)o(ti)o(n)o(g)13 b(prob)q(e)i(with)g (recvf)249 594 y Fs(#include)20 b("pvm3.h")249 702 y(static)h(int)g (foundit)f(=)i(0;)249 810 y(static)f(int)249 864 y(foo_match\(mid,)e (tid,)i(code\))423 918 y(int)h(mid;)423 972 y(int)g(tid;)423 1026 y(int)g(code;)249 1080 y({)423 1134 y(int)g(t,)f(c,)g(cc;)423 1242 y(if)h(\(\(cc)f(=)g(pvm_bufinfo\(mid,)e(\(int*\)0,)h(&c,)h(&t\)\)) g(<)h(0\))598 1296 y(return)e(cc;)423 1350 y(if)i(\(\(tid)f(==)g(-1)g (||)h(tid)f(==)g(t\))423 1404 y(&&)h(\(code)f(==)g(-1)g(||)h(code)f(==) g(c\)\))598 1458 y(foundit)f(=)i(1;)423 1512 y(return)f(0;)249 1566 y(})249 1620 y(int)249 1674 y(probe\(src,)f(code\))249 1728 y({)423 1782 y(int)i(\(*omatch\)\(\);)423 1836 y(int)g(cc;)423 1944 y(omatch)f(=)h(pvm_recvf\(foo_m)o(atch\))o(;)423 1998 y(foundit)f(=)g(0;)423 2051 y(if)h(\(\(cc)f(=)g(pvm_nrecv\(src,)e (code\)\))i(<)g(0\))598 2105 y(return)f(cc;)423 2159 y(pvm_recvf\(omatch\);)423 2213 y(return)h(foundit;)249 2267 y(})249 2379 y Fr(Errors)249 2450 y FA(No)14 b(error)h(condition)e (is)h(returned)h(b)o(y)f Fs(pvm)p 936 2450 14 2 v 15 w(recvf)p FA(.)p eop %%Page: 243 262 243 261 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(243)291 511 y FE(p)n(vmfreduce\(\))742 b(p)n(vm)p 1571 511 21 2 v 24 w(reduce\(\))p 249 595 1591 16 v 249 658 a FA(P)o(erforms)13 b(a)h(reduce)i(op)q(eration)d(o)o(v)o(er)h(mem)o(b)q(ers)f(of)g(the)i (sp)q(eci\014ed)g(group.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 836 14 2 v 15 w(reduce\()e(void)h(\(*func\)\(\),)699 890 y(void)g(*data,)g(int)g (count,)f(int)i(datatype,)699 944 y(int)f(msgtag,)g(char)g(*group,)f (int)h(root\))274 998 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfreduce\()f(func,)h(data,)f(count,)h(datatype,)721 1052 y(msgtag,)f(group,)h(root,)g(info)g(\))249 1159 y Fr(P)o(arameters)274 1217 y Fs(func)136 b FA({)50 b(function)11 b(that)h(de\014nes)h(the)g(op)q(eration)f(p)q(erformed)f(on)h(the)g (global)e(data.)569 1271 y(Prede\014ned)17 b(are)e(PvmMax,)e(PvmMin,)g (PvmSum,)f(and)i(PvmPro)q(duct.)569 1325 y(Users)h(can)f(de\014ne)h (their)f(o)o(wn)g(function.)274 1379 y Fs(data)136 b FA({)50 b(-oin)o(ter)18 b(to)g(the)h(starting)f(address)i(of)e(an)g (arra)o(y)g(of)g(lo)q(cal)f(v)n(alues.)31 b(On)569 1433 y(return,)18 b(the)f(data)f(arra)o(y)h(on)f(the)h(ro)q(ot)g(will)e(b)q (e)i(o)o(v)o(erwritten)h(with)e(the)569 1487 y(result)e(of)g(the)g (reduce)i(op)q(eration)d(o)o(v)o(er)h(the)h(group.)274 1541 y Fs(count)114 b FA({)50 b(in)o(teger)14 b(sp)q(ecifying)g(the)g (n)o(um)o(b)q(er)f(of)h(elemen)o(ts)f(in)h(data)f(arra)o(y)m(.)274 1595 y Fs(datatype)48 b FA({)i(in)o(teger)14 b(sp)q(ecifying)g(the)g(t) o(yp)q(e)h(of)e(the)h(en)o(tries)h(in)f(the)g(data)g(arra)o(y)m(.)274 1649 y Fs(msgtag)92 b FA({)50 b(in)o(teger)14 b(message)f(tag)g (supplied)h(b)o(y)f(the)h(user.)19 b(msgtag)12 b(should)h(b)q(e)i Ft(\025)c FA(0.)274 1703 y Fs(group)114 b FA({)50 b(c)o(haracter)15 b(string)f(group)g(name)e(of)i(an)f(existing)h(group.)274 1757 y Fs(root)136 b FA({)50 b(in)o(teger)14 b(instance)h(n)o(um)o(b)q (er)e(of)g(group)h(mem)o(b)q(er)e(who)i(gets)g(the)h(result.)274 1811 y Fs(info)136 b FA({)50 b(in)o(teger)12 b(status)g(co)q(de)g (returned)i(b)o(y)d(the)h(routine.)18 b(V)m(alues)11 b(less)h(than)g(zero)569 1865 y(indicate)i(an)f(error.)249 1972 y Fr(Discussion)249 2043 y FA(The)i(routine)h Fs(pvm)p 549 2043 V 15 w(reduce\(\))d FA(p)q(erforms)h(global)g(op)q(erations)h (suc)o(h)h(as)f(max,)d(min,)h(and)i(sum)f(o)o(v)o(er)249 2097 y(all)e(the)h(tasks)g(in)f(a)h(group.)k(All)12 b(group)g(mem)o(b)q (ers)g(call)g(p)o(vm)p 1209 2097 13 2 v 13 w(reduce\(\))j(with)d(their) h(lo)q(cal)f(data,)g(and)249 2151 y(the)j(result)h(of)e(the)h (reduction)h(op)q(eration)f(app)q(ears)g(on)g(the)g(user-sp)q (eci\014ed)i(ro)q(ot)e(task)g Fs(root)p FA(.)20 b(The)249 2205 y(ro)q(ot)14 b(task)g(is)g(iden)o(ti\014ed)g(b)o(y)f(its)h (instance)h(n)o(um)o(b)q(er)e(in)h(the)g(group.)249 2267 y(The)e(p)o(vm)f(supplies)h(the)g(follo)o(wing)d(prede\014ned)14 b(global)c(functions)i(that)g(can)g(b)q(e)h(sp)q(eci\014ed)g(in)e Fs(func)p FA(.)445 2346 y Fs(PvmMin)445 2400 y(PvmMax)445 2454 y(PvmSum)445 2508 y(PvmProduct)p eop %%Page: 244 263 244 262 bop 249 251 a Fu(244)1321 b(App)q(endix)15 b(B)249 507 y FA(PvmMax)g(and)h(PvmMin)f(are)h(implemen)o(ted)f(for)h(datat)o (yp)q(es)g(b)o(yte,)h(short,)g(in)o(teger,)g(long,)f(\015oat,)249 561 y(double,)e(complex,)f(and)i(double)f(complex.)19 b(F)m(or)14 b(complex)g(v)n(alues)g(the)h(minim)n(um)10 b(\(maxim)o(um)n(\))i(is)249 615 y(that)i(complex)f(pair)h(with)g(the)g (minim)n(um)c(\(maxim)o(um)n(\))h(mo)q(dulus.)18 b(PvmSum)11 b(and)j(PvmPro)q(duct)249 669 y(are)j(implemen)o(ted)d(for)i(datat)o (yp)q(es)h(short,)g(in)o(teger,)g(long,)e(\015oat,)h(double,)h (complex,)e(and)h(double)249 723 y(complex.)249 785 y(C)e(and)g(F)m (ortran)f(de\014ned)i Fs(datatypes)34 b FA(are)14 b(as)g(follo)o(ws:) 489 864 y Fs(C)21 b(Data)g(Types)65 b(Fortran)20 b(Data)h(Types)445 918 y(------------------)o(-----)o(-----)o(-----)o(--)489 972 y(PVM_BYTE)151 b(BYTE1)489 1026 y(PVM_SHORT)129 b(INT2)489 1080 y(PVM_INT)173 b(INT4)489 1134 y(PVM_FLOAT)129 b(REAL4)489 1188 y(PVM_CPLX)151 b(COMPLEX8)489 1242 y(PVM_DOUBLE)107 b(REAL8)489 1296 y(PVM_DCPLX)129 b(COMPLEX16)489 1350 y(PVM_LONG)249 1429 y FA(A)14 b(user-de\014ned)i(function)e(ma)o(y)e(b) q(e)i(used)h(used)g(in)e Fs(func)p FA(,)g(the)h(synax)g(is:)293 1516 y Fs(C)65 b(void)21 b(func\(int)f(*datatype,)g(void)h(*x,)g(void)g (*y,)598 1570 y(int)g(*num,)g(int)g(*info\))293 1678 y(Fortran)85 b(call)21 b(func\(datatype,)e(x,)j(y,)f(num,)g(info\))249 1765 y FA(func)16 b(is)g(the)g(base)h(function)e(used)i(for)e(the)i (reduction)f(op)q(eration.)24 b(Both)16 b(x)g(and)g(y)f(are)i(arra)o (ys)f(of)249 1819 y(t)o(yp)q(e)h(sp)q(eci\014ed)g(b)o(y)f(datat)o(yp)q (e)h(with)e(n)o(um)g(en)o(tries.)26 b(The)17 b(argumen)o(ts)e(datat)o (yp)q(e)h(and)g(info)f(are)i(as)249 1873 y(sp)q(eci\014ed)h(ab)q(o)o(v) o(e.)24 b(The)17 b(argumen)o(ts)e(x)h(and)g(n)o(um)f(corresp)q(ond)j (to)e(data)g(and)g(coun)o(t)g(ab)q(o)o(v)o(e.)25 b(The)249 1927 y(argumen)o(t)13 b(y)h(con)o(tains)f(receiv)o(ed)j(v)n(alues.)249 1989 y Fr(Note:)h FA(p)o(vm)p 463 1989 13 2 v 13 w(reduce\(\))c(do)q (es)f(not)f(blo)q(c)o(k.)16 b(if)10 b(a)h(task)g(calls)f(p)o(vm)p 1245 1989 V 14 w(reduce)i(and)f(then)h(lea)o(v)o(es)f(the)g(group)249 2043 y(b)q(efore)k(the)f(ro)q(ot)g(has)g(called)g(p)o(vm)p 808 2043 V 13 w(reduce,)h(an)f(error)h(ma)o(y)d(o)q(ccur.)249 2105 y(The)17 b(curren)o(t)h(algorithm)c(is)i(v)o(ery)h(simple)e(and)i (robust.)26 b(A)17 b(future)g(implemen)o(tatio)o(n)d(ma)o(y)h(mak)o(e) 249 2159 y(more)e(e\016cien)o(t)h(use)h(of)e(the)i(arc)o(hitecture)h (to)d(allo)o(w)f(greater)j(parallelism.)p eop %%Page: 245 264 245 263 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(245)249 507 y Fr(Examples)274 574 y(C:)495 628 y Fs(info)21 b(=)43 b(pvm_reduce\(PvmMax)o(,)19 b(&myvals,)h(10,)h(PVM_INT,)909 682 y(msgtag,)f("workers",)g(roottid\);)274 736 y Fr(F)l(ortran:)495 790 y Fs(CALL)h(PVMFREDUCE\(PvmM)o(ax,)e(MYVALS,)h(COUNT,)h(INT4,)843 844 y(MTAG,)g('workers',)f(ROOT,)h(INFO\))249 951 y Fr(Errors)249 1021 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h (returned)g(b)o(y)f Fs(pvm)p 1238 1021 14 2 v 15 w(reduce)p FA(.)274 1089 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1107 1338 2 v 274 1145 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(argumen)o(t)h(v)n(alue.)274 1199 y(PvmNoInst)119 b(calling)13 b(task)h(is)f(not)h(in)g(the)g(group.)274 1252 y(PvmSysErr)120 b(lo)q(cal)13 b(p)o(vmd)g(is)g(not)h(resp)q (onding.)p eop %%Page: 246 265 246 264 bop 249 251 a Fu(246)1321 b(App)q(endix)15 b(B)291 511 y FE(||{)867 b(p)n(vm)p 1464 511 21 2 v 24 w(reg)p 1582 511 V 25 w(hoster\(\))p 249 595 1591 16 v 249 658 a FA(Registers)15 b(this)f(task)g(as)g(resp)q(onsible)h(for)e(adding)g (new)i(PVM)f(hosts.)249 769 y Fr(Synopsis)274 833 y(C)50 b Fs(#include)20 b(<pvmsdpro.h>)358 887 y(int)h(info)g(=)h(pvm)p 667 887 14 2 v 15 w(reg)p 748 887 V 15 w(hoster\(\))249 993 y Fr(P)o(arameters)274 1061 y Fs(info)49 b FA({)h(in)o(teger)14 b(status)h(co)q(de)f(returned)i(b)o(y)d(the)i(routine.)249 1172 y Fr(Discussion)249 1240 y FA(The)k(routine)g Fs(pvm)p 556 1240 V 15 w(reg)p 637 1240 V 15 w(hoster)f FA(registers)i(the)f (calling)f(task)g(as)h(a)g(PVM)g(sla)o(v)o(e)f(p)o(vmd)f(starter.)249 1294 y(When)e(the)g(master)f(p)o(vmd)f(receiv)o(es)j(a)f(DM)p 957 1294 13 2 v 15 w(ADD)f(message,)g(instead)h(of)f(starting)g(the)h (new)g(sla)o(v)o(e)249 1348 y(p)o(vmd)e(pro)q(cesses)18 b(itself,)c(it)g(passes)i(a)f(message)f(to)h(the)g(hoster,)h(whic)o(h)e (do)q(es)i(the)f(dirt)o(y)g(w)o(ork)f(and)249 1402 y(sends)h(a)f (message)f(bac)o(k)h(to)g(the)g(p)o(vmd.)249 1463 y Fr(Note:)21 b FA(This)15 b(function)g(isn't)g(for)g(b)q(eginners.)23 b(If)15 b(one)h(do)q(esn't)f(grok)g(what)g(it)g(do)q(es,)h(he)g (probably)249 1517 y(do)q(esn't)e(need)h(it.)249 1578 y(F)m(or)h(a)g(more)f(complete)h(explanation)f(of)h(what's)g(going)f (on)h(here,)i(the)f(user)g(should)f(refer)h(to)f(the)249 1632 y(PVM)e(source)g(co)q(de)h(and/or)d(user)j(guide)e(section)h(on)f (implemen)o(tation;)d(this)j(is)g(just)h(a)f(man)f(page.)249 1686 y(That)i(said...)249 1747 y(When)i(the)g(master)f(p)o(vmd)f (receiv)o(es)j(a)e Fs(DM)p 937 1747 14 2 v 15 w(ADD)g FA(message)g(\(request)j(to)d(add)g(hosts)h(to)g(the)g(virtual)249 1801 y(mac)o(hine\),)g(it)h(lo)q(oks)f(up)h(the)g(new)g(host)h(IP)f (addresses,)i(gets)e(parameters)g(from)e(the)j(host)f(\014le)g(if)249 1855 y(it)g(w)o(as)f(started)i(with)f(one,)g(and)g(sets)h(default)e (parameters.)27 b(It)17 b(then)h(either)f(attempts)g(to)f(start)249 1909 y(the)h(pro)q(cesses)h(\(using)e FB(rsh)g FA(or)f FB(r)n(exe)n(c\(\))p FA(\))h(or,)g(if)f(a)h(hoster)h(has)f(registered,) i(sends)f(it)e(a)h Fs(SM)p 1700 1909 V 15 w(STHOST)249 1963 y FA(message.)249 2024 y(The)e(format)e(of)i(the)g(SM)p 651 2024 13 2 v 15 w(STHOST)h(message)e(is)h(as)g(follo)o(ws:)274 2074 y Fs(int)21 b(nhosts)404 b FA(n)o(um)o(b)q(er)13 b(of)g(hosts)274 2128 y Ft(f)542 2182 y Fs(int)21 b(tid)202 b FA(of)13 b(host)542 2236 y Fs(string)20 b(options)49 b FA(from)12 b(host\014le)i(so=)g(\014eld)542 2290 y Fs(string)20 b(login)93 b FA(in)13 b(form)f Fs([username@]hostnam)o (e.dom)o(ain)542 2344 y(string)20 b(command)49 b FA(to)13 b(run)i(on)e(remote)h(host)274 2398 y Ft(g)22 b Fs([nhosts])249 2454 y FA(The)14 b(hoster)h(should)f(attempt)f(to)h(run)g(eac)o(h)g (command)e(on)h(eac)o(h)i(host)f(and)g(record)h(the)f(result.)19 b(A)249 2508 y(command)11 b(usually)i(lo)q(oks)h(lik)o(e)p eop %%Page: 247 266 247 265 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(247)249 507 y Fs($PVM_ROOT/lib/pvmd)18 b(-s)k(-d8)f(-nhonk)f(1)i(80a9ca95:0f5a) d(4096)i(3)g(80a95c43:0000)249 586 y FA(and)14 b(a)f(reply)h(from)f(a)g (sla)o(v)o(e)h(p)o(vmd)e(lik)o(e)249 665 y Fs(ddpro<2312>)20 b(arch<ALPHA>)f(ip<80a95c43:0b3f>)f(mtu<4096>)249 744 y FA(When)e(\014nished,)g(the)g(hoster)h(should)e(send)h(a)g Fs(SM)p 1051 744 14 2 v 15 w(STHOSTACK)d FA(message)j(bac)o(k)f(to)h (the)g(address)h(of)249 798 y(the)e(sender)g(\(the)g(master)e(p)o (vmd\).)k(The)d(format)e(of)h(the)i(reply)f(message)f(is)h(as)g(follo)o (ws:)274 850 y Ft(f)410 904 y Fs(int)21 b(tid)180 b FA(of)13 b(host,)h(m)o(ust)f(matc)o(h)g(request)410 958 y Fs(string)20 b(status)49 b FA(result)15 b(line)e(from)f(sla)o(v)o(e)i(or)g(error)g (co)q(de)274 1012 y Ft(g)22 b Fs([])382 b FA(implied)12 b(coun)o(t)249 1061 y(The)18 b(TIDs)g(in)g(the)g(reply)g(m)o(ust)f (matc)o(h)g(those)i(in)e(the)i(request.)31 b(They)19 b(ma)o(y)c(b)q(e)k(in)e(a)h(di\013eren)o(t)249 1115 y(order,)c(ho)o(w)o (ev)o(er.)249 1177 y(The)d(result)h(string)f(should)f(con)o(tain)g(the) i(en)o(tire)f(reply)g(\(a)g(single)f(line\))g(from)f(eac)o(h)j(new)f (sla)o(v)o(e)f(p)o(vmd,)249 1231 y(or)j(an)h(error)g(co)q(de)g(if)f (something)f(w)o(en)o(t)i(wrong.)k(Legal)12 b(error)j(co)q(des)f(are)g (the)g(literal)f(names)g(of)f(the)249 1285 y(p)o(vm)p 331 1285 13 2 v 13 w(errno)19 b(co)q(des,)i(for)d(example)f(\\PvmCan)o (tStart".)29 b(The)19 b(default)f(PVM)h(hoster)g(can)g(return)249 1339 y(PvmDSysErr)13 b(or)h(PvmCan)o(tStart,)f(and)g(the)i(sla)o(v)o(e) e(p)o(vmd)g(itself)g(can)h(return)h(PvmDupHost.)249 1402 y(The)h(hoster)g(task)g(m)o(ust)e(use)j(p)o(vm)p 813 1402 V 13 w(setopt\(PvmResvTids,)e(1\))h(to)f(allo)o(w)f(sending)h (reserv)o(ed)j(mes-)249 1456 y(sages.)h(Messages)c(m)o(ust)e(b)q(e)i (pac)o(k)o(ed)f(using)f(data)h(format)e(PvmDataF)m(o)q(o.)p eop %%Page: 248 267 248 266 bop 249 251 a Fu(248)1321 b(App)q(endix)15 b(B)291 511 y FE(||{)967 b(p)n(vm)p 1564 511 21 2 v 25 w(reg)p 1683 511 V 25 w(rm\(\))p 249 595 1591 16 v 249 658 a FA(Registers)15 b(this)f(task)g(as)g(PVM)g(resource)i(manager.)249 770 y Fr(Synopsis)274 836 y(C)50 b Fs(#include)20 b(<pvmsdpro.h>)358 890 y(int)h(info)g(=)h(pvm)p 667 890 14 2 v 15 w(reg)p 748 890 V 15 w(rm\()f(struct)g(hostinfo)f(**hip)h(\))358 944 y(struct)g(hostinfo{)445 998 y(int)43 b(hi_tid;)445 1052 y(char)21 b(*hi_name;)445 1106 y(char)g(*hi_arch;)445 1160 y(int)43 b(hi_speed;)358 1214 y(})22 b(hip;)249 1321 y Fr(P)o(arameters)274 1379 y Fs(hostp)49 b FA({)g(p)q(oin)o(ter) 15 b(to)f(an)f(arra)o(y)h(of)g(structures)i(that)f(con)o(tain)e (information)e(ab)q(out)503 1433 y(eac)o(h)18 b(host,)f(including)f (its)h(p)o(vmd)f(task)h(ID,)f(name,)g(arc)o(hitecture,)j(and)503 1487 y(relativ)o(e)14 b(sp)q(eed.)274 1541 y Fs(info)71 b FA({)49 b(in)o(teger)12 b(status)h(co)q(de)f(returned)h(b)o(y)f(the)g (routine.)17 b(V)m(alues)12 b(less)g(than)f(zero)503 1595 y(indicate)j(an)g(error.)249 1702 y Fr(Discussion)249 1773 y FA(The)f(routine)f Fs(pvm)p 543 1773 V 15 w(reg)p 624 1773 V 15 w(rm\(\))g FA(registers)h(the)g(calling)e(task)h(as)h(a)f (PVM)g(task)h(and)f(sla)o(v)o(e)g(host)g(sc)o(hed-)249 1827 y(uler.)25 b(This)15 b(means)h(it)f(in)o(tercepts)j(certain)e (libp)o(vm)e(calls)h(from)g(other)h(tasks)h(in)e(order)i(to)f(ha)o(v)o (e)f(a)249 1881 y(sa)o(y)f(in)f(sc)o(heduling)h(p)q(olicy)m(.)j(The)d (sc)o(heduler)i(will)c(async)o(hronously)i(receiv)o(e)h(messages)f (from)f(tasks)249 1935 y(con)o(taining)j(requests)j(for)e(service,)h (as)f(w)o(ell)g(as)g(messages)g(from)e(p)o(vmds)h(notifying)f(it)i(of)f (system)249 1989 y(failures.)249 2051 y Fr(Note:)i FA(this)12 b(is)h(not)g(a)f(trivial)f(task.)18 b(It)13 b(cannot)f(b)q(e)i(called)e (simply)e(to)j(turn)g(o\013)g(the)g(default)f(round-)249 2105 y(robin)h(task)g(assignmen)o(t.)k(Rather,)c(it)g(allo)o(ws)f(the)i (user)h(to)e(write)g(his)h(o)o(wn)f(sc)o(heduler)h(and)g(ho)q(ok)e(it) 249 2159 y(to)i(PVM.)249 2221 y(T)m(o)k(understand)h(what)g(the)g (follo)o(wing)d(messages)i(mean,)g(the)h(user)h(should)e(refer)h(to)g (the)g(PVM)249 2275 y(source)d(co)q(de)f(and/or)f(user)i(guide)e (section)h(on)f(implemen)o(tation;)d(There's)16 b(just)e(to)q(o)h(m)o (uc)o(h)e(to)h(sa)o(y)249 2329 y(ab)q(out)g(them.)249 2392 y(When)j(one)g(of)g(the)g(follo)o(wing)e(libp)o(vm)f(functions)j (is)g(called)g(in)f(a)h(task)g(with)f(resource)j(manager)249 2446 y(set,)14 b(the)h(giv)o(en)e(message)h(tag)f(is)h(sen)o(t)h(to)f (to)f(sc)o(heduler.)p eop %%Page: 249 268 249 267 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(249)274 558 y FA(Libp)o(vm)12 b(call)128 b(Sc)o(hed.)19 b(message)56 b(Normal)12 b(message)p 249 575 1026 2 v 274 613 a(p)o(vm)p 356 613 13 2 v 13 w(addhosts\(\))60 b(SM)p 681 613 V 15 w(ADDHOST)50 b(TM)p 1025 613 V 15 w(ADDHOST)274 667 y(p)o(vm)p 356 667 V 13 w(con\014g\(\))113 b(SM)p 681 667 V 15 w(CONFIG)93 b(TM)p 1025 667 V 15 w(CONFIG)274 721 y(p)o(vm)p 356 721 V 13 w(delhosts\(\))74 b(SM)p 681 721 V 15 w(DELHOST)59 b(TM)p 1025 721 V 15 w(DELHOST)274 775 y(p)o(vm)p 356 775 V 13 w(notify\(\))112 b(SM)p 681 775 V 15 w(NOTIFY)95 b(TM)p 1025 775 V 15 w(NOTIFY)274 829 y(p)o(vm)p 356 829 V 13 w(spa)o(wn\(\))107 b(SM)p 681 829 V 15 w(SP)m(A)-5 b(WN)113 b(TM)p 1025 829 V 15 w(SP)m(A)-5 b(WN)274 883 y(p)o(vm)p 356 883 V 13 w(tasks\(\))128 b(SM)p 681 883 V 15 w(T)m(ASK)148 b(TM)p 1025 883 V 15 w(T)m(ASK)274 937 y(p)o(vm)p 356 937 V 13 w(reg)p 424 937 V 16 w(sc)o(hed\(\))51 b(SM)p 681 937 V 15 w(SCHED)117 b(TM)p 1025 937 V 15 w(SCHED)p 249 955 1026 2 v 249 1056 a(The)16 b(resource)i(manager)d(m)o(ust)g(in)g(turn)h(comp)q(ose)g(the) g(follo)o(wing)e(messages)i(and)f(send)i(them)e(to)249 1110 y(the)g(p)o(vmds:)274 1222 y(Sc)o(hed.)k(Message)54 b(Normal)12 b(Message)p 249 1240 686 2 v 274 1278 a(SM)p 337 1278 13 2 v 15 w(EXEC)144 b(DM)p 683 1278 V 15 w(EXEC)274 1332 y(SM)p 337 1332 V 15 w(EXECA)o(CK)52 b(DM)p 683 1332 V 15 w(EXECA)o(CK)274 1386 y(SM)p 337 1386 V 15 w(ADD)166 b(DM)p 683 1386 V 15 w(ADD)274 1440 y(SM)p 337 1440 V 15 w(ADD)o(A)o(CK)75 b(DM)p 683 1440 V 15 w(ADD)o(A)o(CK)274 1494 y(SM)p 337 1494 V 15 w(HANDOFF)50 b(\(none\))p 249 1512 686 2 v 249 1613 a(The)14 b(follo)o(wing)d (messages)i(are)h(sen)o(t)g(async)o(hronously)g(to)f(the)h(resource)i (manager)c(b)o(y)h(the)h(system:)274 1777 y(Sc)o(hed.)19 b(Message)51 b(Meaning)p 249 1795 825 2 v 274 1833 a(SM)p 337 1833 13 2 v 15 w(T)m(ASKX)114 b(notify)13 b(of)g(task)h(exit/fail) 274 1887 y(SM)p 337 1887 V 15 w(HOSTX)111 b(notify)13 b(of)g(host)h(delete/fail)p 249 1905 825 2 v 249 2008 a(The)21 b(resource)i(manager)d(task)g(m)o(ust)g(use)i(p)o(vm)p 1052 2008 13 2 v 13 w(setopt\(PvmResvTids,)g(1\))f(to)g(allo)o(w)e (sending)249 2062 y(reserv)o(ed)d(messages.)i(Messages)d(m)o(ust)e(b)q (e)i(pac)o(k)o(ed)f(using)g(data)f(format)f(PvmDataF)m(o)q(o.)p eop %%Page: 250 269 250 268 bop 249 251 a Fu(250)1321 b(App)q(endix)15 b(B)291 511 y FE(||{)872 b(p)n(vm)p 1469 511 21 2 v 24 w(reg)p 1587 511 V 25 w(task)n(er\(\))p 249 595 1591 16 v 249 658 a FA(Registers)15 b(this)f(task)g(as)g(resp)q(onsible)h(for)e (starting)h(new)g(PVM)h(tasks.)249 770 y Fr(Synopsis)274 836 y(C)50 b Fs(#include)20 b(<pvmsdpro.h>)358 890 y(int)h(info)g(=)h (pvm)p 667 890 14 2 v 15 w(reg)p 748 890 V 15 w(tasker\(\))249 997 y Fr(P)o(arameters)274 1068 y Fs(info)49 b FA({)h(in)o(teger)14 b(status)h(co)q(de)f(returned)i(b)o(y)d(the)i(routine.)249 1180 y Fr(Discussion)249 1250 y FA(The)h(routine)g Fs(pvm)p 550 1250 V 15 w(reg)p 631 1250 V 15 w(tasker)e FA(registers)j(the)f (calling)e(task)i(as)g(a)f(PVM)h(task)f(starter.)25 b(When)15 b(a)249 1304 y(task)o(er)h(is)e(registered)j(with)d(a)h(p)o(vmd,)e(and) i(the)g(p)o(vmd)e(receiv)o(es)k(a)d(DM)p 1396 1304 13 2 v 15 w(EXEC)h(message,)g(instead)249 1358 y(of)g(fork\(\)ing)g(and)g (exec\(\)ing)i(the)f(task)f(itself,)h(it)f(passes)i(a)e(message)g(to)h (the)g(task)o(er,)g(whic)o(h)f(do)q(es)249 1412 y(the)g(dirt)o(y)e(w)o (ork)h(and)f(sends)j(a)d(message)h(bac)o(k)g(to)f(the)i(p)o(vmd.)249 1474 y Fr(Note:)22 b FA(If)15 b(this)h(do)q(esn't)g(mak)o(e)e(sense,)j (don't)e(w)o(orry)h(ab)q(out)f(it.)23 b(This)16 b(function)f(is)g(for)g (folks)g(who)249 1528 y(are)i(writing)f(stu\013)i(lik)o(e)e(debugger)h (serv)o(ers)i(and)d(so)h(on.)26 b(F)m(or)17 b(a)f(more)g(complete)g (explanation)g(of)249 1582 y(what's)f(going)g(on)g(here,)i(the)f(user)h (should)e(refer)i(to)e(the)h(PVM)g(source)h(co)q(de)f(and/or)g(user)g (guide)249 1636 y(section)f(on)e(implemen)o(tation;)d(this)k(is)g(only) f(a)h(man)e(page.)249 1699 y(When)j(the)h(p)o(vmd)d(receiv)o(es)k(a)d (DM)p 821 1699 V 15 w(EXEC)i(message)e(\(request)j(to)e(exec)h(new)f (tasks\),)h(it)e(searc)o(hes)249 1753 y FB(ep)n(ath)d FA(\(the)g(PVM)g(executable)g(searc)o(h)h(path\))e(for)g(the)h(\014le)f (name.)16 b(If)10 b(it)g(\014nds)h(the)g(\014le,)f(it)g(then)h(either) 249 1807 y(attempts)16 b(to)g(start)h(the)g(pro)q(cesses)i(\(using)e (fork\(\))f(and)g(exec\(\)\))i(or,)f(if)e(a)h(task)o(er)h(has)g (registered,)249 1860 y(sends)e(it)f(a)f(SM)p 499 1860 V 15 w(STT)m(ASK)h(message.)249 1923 y(The)g(format)e(of)i(the)g(SM)p 651 1923 V 15 w(STT)m(ASK)g(message)g(is)f(as)h(follo)o(ws:)274 1973 y Fs(int)21 b(tid)267 b FA(of)14 b(task)274 2027 y Fs(int)21 b(flags)223 b FA(as)14 b(passed)h(to)f(spa)o(wn\(\))274 2081 y Fs(string)21 b(path)179 b FA(absolute)14 b(path)g(of)f(the)i (executable)274 2135 y Fs(int)21 b(argc)245 b FA(n)o(um)o(b)q(er)13 b(of)h(argumen)o(ts)f(to)h(pro)q(cess)274 2189 y Fs(string)21 b(argv[argc])47 b FA(argumen)o(t)13 b(strings)274 2243 y Fs(int)21 b(nenv)245 b FA(n)o(um)o(b)q(er)13 b(of)h(en)o(vironmen)o (t)f(v)n(ariables)g(to)g(pass)i(to)f(task)274 2297 y Fs(string)21 b(env[nenv])69 b FA(en)o(vironmen)o(t)13 b(strings)249 2354 y(The)j(task)o(er)g(m)o(ust)f(attempt)g(to)g(start)h (the)h(pro)q(cess)g(when)f(it)f(gets)i(one)e(of)g(these)i(messages.)24 b(The)249 2408 y(task)o(er)12 b(do)q(esn't)f(reply)g(to)g(the)h(p)o (vmd)d(if)h(the)i(task)f(is)g(successfully)h(started;)h(the)e(task)g (will)f(reconnect)249 2462 y(to)k(the)g(p)o(vmd)f(on)g(its)h(o)o(wn)g (\(using)f(the)i(iden)o(ti\014er)f(in)g(en)o(v)n(ar)f(PVMEPID\).)p eop %%Page: 251 270 251 269 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(251)249 507 y FA(The)16 b(task)o(er)g(m)o(ust)f(send)i(a)e(SM)p 761 507 13 2 v 15 w(T)m(ASKX)h(message)f(to)h(the)g(p)o(vmd)e(when)i (an)o(y)f(task)h(that)g(it)f(o)o(wns)249 561 y(\(has)g(started\))h (exits,)f(or)f(if)g(it)g(can't)h(start)g(a)f(particular)h(task.)20 b(The)15 b(format)e(of)h(the)h(SM)p 1686 561 V 15 w(T)m(ASKX)249 615 y(message)f(is)f(as)h(follo)o(ws:)274 665 y Fs(int)21 b(tid)115 b FA(of)13 b(task)274 719 y Fs(int)21 b(status)49 b FA(the)14 b(Unix)g(exit)g(status)g(\(from)f Fs(wait\(\))p FA(\))274 773 y Fs(int)21 b(u)p 386 773 14 2 v 16 w(sec)77 b FA(user)15 b(time)d(used)j(b)o(y)f(the)g(task,)g(seconds)274 827 y Fs(int)21 b(u)p 386 827 V 16 w(usec)55 b FA(microseconds)274 881 y Fs(int)21 b(s)p 386 881 V 16 w(sec)77 b FA(system)13 b(time)g(used)i(b)o(y)e(the)i(task,)e(seconds)274 935 y Fs(int)21 b(s)p 386 935 V 16 w(usec)55 b FA(microseconds)249 995 y(The)16 b(task)o(er)g(task)g(m)o(ust)f(use)h(p)o(vm)p 811 995 13 2 v 14 w(setopt\(PvmResvTids,)f(1\))h(to)f(allo)o(w)f (sending)i(reserv)o(ed)i(mes-)249 1049 y(sages.)h(Messages)c(m)o(ust)e (b)q(e)i(pac)o(k)o(ed)f(using)f(data)h(format)e(PvmDataF)m(o)q(o.)p eop %%Page: 252 271 252 270 bop 249 251 a Fu(252)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfsend\(\))869 b(p)n(vm)p 1634 511 21 2 v 25 w(send\(\))p 249 595 1591 16 v 249 658 a FA(Sends)15 b(the)f(data)g(in)f(the)i(activ)o(e)f(message)f(bu\013er.)249 768 y Fr(Synopsis)274 830 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 830 14 2 v 15 w(send\()f(int)g(tid,)g(int)g(msgtag)g(\))274 884 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfsend\()f(tid,)h(msgtag,)g (info)f(\))249 989 y Fr(P)o(arameters)274 1043 y Fs(tid)115 b FA({)49 b(in)o(teger)14 b(task)g(iden)o(ti\014er)h(of)e(destination)h (pro)q(cess.)274 1097 y Fs(msgtag)49 b FA({)g(in)o(teger)11 b(message)e(tag)h(supplied)g(b)o(y)g(the)h(user.)18 b(msgtag)8 b(should)i(b)q(e)h Fn(>)p FA(=)h(0.)274 1151 y Fs(info)93 b FA({)49 b(in)o(teger)12 b(status)g(co)q(de)h(returned)g(b)o(y)e(the)i (routine.)k(V)m(alues)11 b(less)i(than)e(zero)525 1205 y(indicate)j(an)g(error.)249 1311 y Fr(Discussion)249 1377 y FA(The)c(routine)g Fs(pvm)p 538 1377 V 15 w(send)f FA(sends)i(a)e(message)g(stored)i(in)e(the)h(activ)o(e)g(send)g (bu\013er)h(to)e(the)h(PVM)g(pro)q(cess)249 1431 y(iden)o(ti\014ed)17 b(b)o(y)g Fs(tid)p FA(.)26 b Fs(msgtag)16 b FA(is)g(used)i(to)f(lab)q (el)f(the)i(con)o(ten)o(t)f(of)f(the)i(message.)27 b(If)16 b(p)o(vm)p 1706 1431 13 2 v 13 w(send)i(is)249 1485 y(successful,)d Fs(info)e FA(will)g(b)q(e)h(0.)k(If)13 b(some)g(error)i(o)q(ccurs,)g Fs(info)e FA(will)g(b)q(e)h Fn(<)e FA(0.)249 1545 y(The)j(p)o(vm)p 417 1545 V 13 w(send)g(routine)g(is)f(async)o(hronous.)20 b(Computation)12 b(on)i(the)h(sending)f(pro)q(cessor)j(resumes)249 1599 y(as)c(so)q(on)g(as)g(the)g(message)g(is)f(safely)h(on)f(its)h(w)o (a)o(y)f(to)h(the)g(receiving)g(pro)q(cessor.)20 b(This)12 b(is)h(in)f(con)o(trast)249 1653 y(to)e(sync)o(hronous)i(comm)o(uni)o (cation,)c(during)i(whic)o(h)g(computation)e(on)j(the)f(sending)h(pro)q (cessor)h(halts)249 1707 y(un)o(til)h(the)i(matc)o(hing)d(receiv)o(e)j (is)f(executed)h(b)o(y)f(the)g(receiving)h(pro)q(cessor.)249 1767 y(p)o(vm)p 331 1767 V 13 w(send)h(\014rst)g(c)o(hec)o(ks)g(to)f (see)h(whether)g(the)f(destination)g(is)f(on)h(the)g(same)f(mac)o (hine.)20 b(If)14 b(so)h(and)249 1821 y(this)f(host)g(is)g(a)g(m)o (ultipro)q(cessor,)f(then)h(the)h(v)o(endor's)f(underlying)g (message-passing)f(routines)i(are)249 1875 y(used)g(to)f(mo)o(v)o(e)e (the)i(data)g(b)q(et)o(w)o(een)h(pro)q(cesses.)249 1985 y Fr(Examples)274 2048 y(C:)495 2102 y Fs(info)21 b(=)g(pvm_initsend\() e(PvmDataDefault)g(\);)495 2156 y(info)i(=)g(pvm_pkint\()f(array,)g (10,)i(1)f(\);)495 2210 y(msgtag)f(=)i(3)f(;)495 2264 y(info)g(=)g(pvm_send\()f(tid,)h(msgtag)g(\);)274 2318 y Fr(F)l(ortran:)495 2372 y Fs(CALL)g(PVMFINITSEND\(PV)o(MRAW,)d (INFO\))495 2426 y(CALL)j(PVMFPACK\()e(REAL8,)i(DATA,)g(100,)g(1,)g (INFO)g(\))495 2480 y(CALL)g(PVMFSEND\()e(TID,)i(3,)h(INFO)f(\))p eop %%Page: 253 272 253 271 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(253)249 507 y Fr(Errors)249 578 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 578 14 2 v 15 w(send)p FA(.)274 646 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 663 1338 2 v 274 701 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(tid)i(or)f(a)h(msgtag.)274 755 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)274 809 y(PvmNoBuf)124 b(no)14 b(activ)o(e)h(send)g(bu\013er.)20 b(T)m(ry)14 b(calling)f(p)o(vm)p 1304 809 13 2 v 13 w(initsend\(\))i(b) q(e-)601 863 y(fore)f(sending.)p eop %%Page: 254 273 254 272 bop 249 251 a Fu(254)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfsendsig\(\))707 b(p)n(vm)p 1553 511 21 2 v 25 w(sendsig\(\))p 249 595 1591 16 v 249 658 a FA(Sends)15 b(a)f(signal)e(to)i(another)g(PVM)h(pro)q(cess.)249 767 y Fr(Synopsis)274 828 y(C)173 b Fs(int)21 b(info)g(=)h(pvm)p 790 828 14 2 v 15 w(sendsig\()e(int)h(tid,)g(int)h(signum)e(\))274 882 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfsendsig\()f(tid,)h(signum,)f (info)h(\))249 986 y Fr(P)o(arameters)274 1039 y Fs(tid)115 b FA({)49 b(in)o(teger)14 b(task)g(iden)o(ti\014er)h(of)e(PVM)h(pro)q (cess)i(to)e(receiv)o(e)h(the)f(signal.)274 1093 y Fs(signum)49 b FA({)g(in)o(teger)14 b(signal)f(n)o(um)o(b)q(er.)274 1147 y Fs(info)93 b FA({)49 b(in)o(teger)12 b(status)g(co)q(de)h (returned)g(b)o(y)e(the)i(routine.)k(V)m(alues)11 b(less)i(than)e(zero) 525 1201 y(indicate)j(an)g(error.)249 1306 y Fr(Discussion)249 1371 y FA(The)e(routine)h Fs(pvm)p 543 1371 V 15 w(sendsig)d FA(sends)j(the)g(signal)e(n)o(um)o(b)q(er)g Fs(signum)g FA(to)g(the)i(PVM)f(pro)q(cess)i(iden)o(ti\014ed)249 1425 y(b)o(y)h Fs(tid)p FA(.)21 b(If)15 b(p)o(vm)p 532 1425 13 2 v 13 w(sendsig)h(is)f(successful,)h Fs(info)f FA(will)e(b)q(e)j(0.)21 b(If)15 b(some)f(error)i(o)q(ccurs,)h Fs(info)d FA(will)f(b)q(e)249 1479 y Fn(<)f FA(0.)249 1538 y(p)o(vm)p 331 1538 V 13 w(sendsig)18 b(should)f(b)q(e)h(used)g (only)f(b)o(y)g(programmers)e(with)i(signal-handling)e(exp)q(erience.) 30 b(It)249 1592 y(is)14 b(v)o(ery)g(easy)g(in)f(a)h(parallel)e(en)o (vironmen)o(t)h(for)g(in)o(terrupts)i(to)f(cause)h(nondeterministic)e (b)q(eha)o(vior,)249 1646 y(deadlo)q(c)o(ks,)e(and)f(ev)o(en)g(system)g (crashes.)19 b(F)m(or)9 b(example,)g(if)g(an)h(in)o(terrupt)h(is)f (caugh)o(t)g(while)f(a)h(pro)q(cess)249 1700 y(is)k(inside)g(a)f(Unix)h (k)o(ernel)g(call,)f(then)h(a)g(graceful)g(reco)o(v)o(ery)h(ma)o(y)d (not)h(b)q(e)i(p)q(ossible.)249 1809 y Fr(Examples)274 1870 y(C:)516 1924 y Fs(tid)22 b(=)f(pvm_parent\(\);)495 1978 y(info)g(=)g(pvm_sendsig\()e(tid,)i(SIGKILL\);)274 2032 y Fr(F)l(ortran:)495 2086 y Fs(CALL)g(PVMFBUFINFO\()e(BUFID,)h (BYTES,)h(TYPE,)g(TID,)g(INFO)g(\);)495 2140 y(CALL)g(PVMFSENDSIG\()e (TID,)i(SIGNUM,)f(INFO)h(\))249 2245 y Fr(Errors)249 2309 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h (returned)g(b)o(y)f Fs(pvm)p 1238 2309 14 2 v 15 w(sendsig)p FA(.)274 2371 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 2389 1338 2 v 274 2427 a(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q (onding.)274 2481 y(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid) f(tid)i(v)n(alue.)p eop %%Page: 255 274 255 273 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(255)291 511 y FE(p)n(vmfsetopt\(\))769 b(p)n(vm)p 1584 511 21 2 v 25 w(setopt\(\))p 249 595 1591 16 v 249 658 a FA(Sets)15 b(v)n(arious)e(libp)o(vm)e(options)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(oldval)g(=)h(pvm)p 834 836 14 2 v 15 w(setopt\()e(int)h(what,)g(int)g(val)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfsetrbuf\()f(what,)g(val,)h (oldval)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(what)93 b FA({)49 b(In)o(teger)15 b(de\014ning)f(what)g(is)f(b)q(eing)h(set.)19 b(Options)14 b(include:)617 1110 y(Option)f(V)m(alue)117 b(Meaning)p 525 1127 1233 2 v 572 1165 a Fs(PvmRoute)157 b FA(1)50 b(routing)13 b(p)q(olicy)572 1219 y Fs(PvmDebugMask)69 b FA(2)50 b(debugmask)572 1273 y Fs(PvmAutoErr)113 b FA(3)50 b(auto)13 b(error)i(rep)q(orting)572 1327 y Fs(PvmOutputTid)69 b FA(4)50 b(stdout)14 b(device)h(for)e(c)o(hildren)572 1381 y Fs(PvmOutputCode)47 b FA(5)j(output)14 b(msgtag)572 1435 y Fs(PvmTraceTid)91 b FA(6)50 b(trace)14 b(device)h(for)f(c)o (hildren)572 1489 y Fs(PvmTraceCode)69 b FA(7)50 b(trace)14 b(msgtag)572 1543 y Fs(PvmFragSize)91 b FA(8)50 b(message)13 b(fragmen)o(t)f(size)572 1597 y Fs(PvmResvTids)91 b FA(9)50 b(allo)o(w)12 b(messages)i(to)f(reserv)o(ed)j(tags)e(and)g(TIDs)p 525 1615 V 274 1706 a Fs(val)115 b FA({)49 b(In)o(teger)15 b(sp)q(ecifying)e(new)h(setting)g(of)f(option.)k(Prede\014ned)f(route)e (v)n(alues)525 1760 y(are)g(as)g(follo)o(ws:)628 1814 y(Option)f(V)m(alue)127 b(Meaning)p 525 1832 751 2 v 572 1870 a Fs(PvmRoute)179 b FA(1)49 b(routing)14 b(p)q(olicy)572 1924 y Fs(PvmDontRoute)91 b FA(1)572 1978 y Fs(PvmAllowDirect)47 b FA(2)572 2032 y Fs(PvmRouteDirect)g FA(3)p 525 2050 V 274 2142 a Fs(oldval)i FA({)g(In)o(teger)15 b(returning)f(the)h (previous)f(setting)g(of)g(the)g(option.)249 2303 y Fr(Discussion)249 2373 y FA(The)g(routine)f Fs(pvm)p 545 2373 14 2 v 15 w(setopt)f FA(is)h(a)f(general-purp)q(ose)j(function)e(to)g(allo)o(w)e (the)j(user)g(to)f(set)h(options)e(in)249 2427 y(the)j(PVM)g(system.)k (In)14 b(PVM)h(3.2)e(p)o(vm)p 901 2427 13 2 v 13 w(setopt)j(can)e(b)q (e)h(used)g(to)f(set)i(sev)o(eral)e(options,)g(including)p eop %%Page: 256 275 256 274 bop 249 251 a Fu(256)1321 b(App)q(endix)15 b(B)249 507 y FA(automatic)e(error)j(message)f(prin)o(ting,)e(debugging)i(lev)o (el,)f(and)h(comm)o(unication)c(routing)k(metho)q(d)249 561 y(for)f(all)e(subsequen)o(t)k(PVM)e(calls.)k(Pvm)p 891 561 13 2 v 13 w(setopt)d(returns)h(the)e(previous)g(v)n(alue)g(of)f (set)i(in)e(oldv)n(al.)249 622 y(PvmRoute:)j(In)d(the)h(case)g(of)e (comm)o(unication)e(routing,)i(p)o(vm)p 1254 622 V 13 w(setopt)i(advises)g(PVM)f(on)g(whether)249 676 y(to)g(set)h(up)f (direct)h(task-to-task)f(links)g Fs(PvmRouteDirect)d FA(\(using)j(TCP\))g(for)g(all)f(subsequen)o(t)i(com-)249 730 y(m)o(unication.)h(Once)c(a)e(link)g(is)h(established,)h(it)f (remains)f(un)o(til)g(the)i(application)d(\014nishes.)18 b(If)9 b(a)h(direct)249 784 y(link)i(can)h(not)g(b)q(e)h(established)g (b)q(ecause)h(one)e(of)f(the)i(t)o(w)o(o)f(tasks)g(has)g(requested)j Fs(PvmDontRoute)10 b FA(or)249 838 y(b)q(ecause)16 b(no)d(resources)k (are)d(a)o(v)n(ailable,)d(then)k(the)f(default)g(route)g(through)g(the) h(PVM)f(daemons)f(is)249 892 y(used.)20 b(On)14 b(m)o(ultipro)q (cessors)g(suc)o(h)h(as)f(In)o(tel)g(P)o(aragon)g(this)g(option)f(is)h (ignored)g(b)q(ecause)i(the)e(com-)249 946 y(m)o(unication)g(b)q(et)o (w)o(een)j(tasks)f(on)g(these)h(mac)o(hines)e(alw)o(a)o(ys)f(uses)j (the)g(nativ)o(e)e(proto)q(col)h(for)f(direct)249 1000 y(comm)o(unication.)20 b(p)o(vm)p 642 1000 V 14 w(setopt)d(can)f(b)q(e) g(called)g(m)o(ultiple)d(times)i(to)h(selectiv)o(ely)g(establish)g (direct)249 1054 y(links,)d(but)h(is)g(t)o(ypically)e(set)j(only)e (once)h(near)h(the)f(b)q(eginning)f(of)h(eac)o(h)g(task.)k Fs(PvmAllowDirect)11 b FA(is)249 1108 y(the)j(default)e(route)h (setting.)19 b(This)12 b(setting)i(on)e(task)h(A)g(allo)o(ws)f(other)h (tasks)h(to)e(set)i(up)f(direct)h(links)249 1162 y(to)h(A.)g(Once)h(a)f (direct)h(link)e(is)h(established)h(b)q(et)o(w)o(een)g(tasks,)g(b)q (oth)f(tasks)h(will)d(use)j(it)f(for)g(sending)249 1216 y(messages.)249 1277 y(PvmDebugMask:)j(F)m(or)d(this)f(option)g(v)n(al) g(is)g(the)i(debugging)e(lev)o(el.)20 b(When)14 b(debugging)h(is)f (turned)249 1331 y(on,)j(PVM)h(will)d(log)i(detailed)g(information)d (ab)q(out)j(its)g(op)q(erations)g(and)g(progress)i(on)d(its)i(stderr) 249 1385 y(stream.)g(The)c(default)f(is)h(no)g(debug)g(information.)249 1446 y(PvmAutoErr:)25 b(In)18 b(the)g(case)g(of)f(automatic)f(error)j (prin)o(ting,)e(an)o(y)g(PVM)h(routines)g(that)g(return)249 1500 y(an)c(error)h(condition)f(will)f(automatically)e(prin)o(t)j(the)h (asso)q(ciated)g(error)g(message.)k(The)c(argumen)o(t)249 1554 y(v)n(al)d(de\014nes)j(whether)g(this)e(rep)q(orting)h(is)f(to)g (b)q(e)h(turned)g(on)f(\(1\))g(or)h(turned)g(o\013)f(\(0\))g(for)g (subsequen)o(t)249 1608 y(calls.)18 b(A)13 b(v)n(alue)g(of)g(\(2\))g (will)f(cause)j(the)f(program)e(to)h(exit)h(after)g(prin)o(ting)e(the)i (error)h(message)e(\(not)249 1662 y(implemen)o(ted)f(in)h(3.2\).)k(The) e(default)e(is)h(rep)q(orting)g(turned)h(on.)249 1724 y(PvmOutputTid:)20 b(F)m(or)15 b(this)h(option)f(v)n(al)f(is)h(the)h (stdout)g(device)h(for)e(c)o(hildren.)23 b(All)15 b(the)h(standard)249 1778 y(output)f(from)e(the)j(calling)d(task)i(and)g(an)o(y)f(tasks)i (it)e(spa)o(wns)h(will)f(b)q(e)h(redirected)i(to)e(the)g(sp)q (eci\014ed)249 1831 y(device.)23 b(V)m(al)14 b(is)h(the)h(tid)f(of)f(a) h(PVM)h(task)f(or)g(p)o(vmd.)20 b(The)c(default)f(v)n(al)f(of)h(0)f (redirects)k(stdout)d(to)249 1885 y(master)e(host,)h(whic)o(h)g(writes) h(to)e(the)i(log)e(\014le)h Fs(/tmp/pvml.<uid>)249 1947 y FA(PvmOutputCo)q(de:)24 b(Only)17 b(meaningful)d(on)j(task)g(with)g (PvmOutputTid)f(set)i(to)e(itself.)27 b(This)17 b(is)249 2001 y(the)d(message)e(tag)h(v)n(alue)f(to)h(b)q(e)h(used)f(in)g (receiving)g(messages)g(con)o(taining)f(standard)i(output)f(from)249 2055 y(other)i(tasks.)249 2116 y(PvmT)m(raceTid:)i(F)m(or)d(this)g (option)g(v)n(al)f(is)h(the)h(task)f(resp)q(onsible)h(for)f(writing)f (out)h(trace)i(ev)o(en)o(t)e(for)249 2170 y(the)h(calling)d(task)j(and) f(all)e(its)j(c)o(hildren.)j(V)m(al)13 b(is)h(the)h(tid)f(of)f(a)h(PVM) h(task)f(or)g(p)o(vmd.)j(The)d(default)249 2224 y(v)n(al)f(of)g(0)h (redirects)h(trace)g(to)f(master)g(host.)249 2285 y(PvmT)m(raceCo)q (de:)23 b(Only)16 b(meaningful)e(on)i(task)h(with)f(PvmT)m(raceTid)f (set)i(to)f(itself.)26 b(This)16 b(is)g(the)249 2339 y(message)f(tag)g(v)n(alue)g(to)g(b)q(e)i(used)f(in)f(receiving)h (messages)f(con)o(taining)g(trace)h(output)g(from)d(other)249 2393 y(tasks.)249 2454 y(PvmF)m(ragSize:)28 b(F)m(or)19 b(this)h(option)f(v)n(al)f(sp)q(eci\014es)k(the)e(message)f(fragmen)o (t)f(size)j(in)e(b)o(ytes.)36 b(The)249 2508 y(default)14 b(v)n(alue)f(v)n(aries)h(with)f(host)h(arc)o(hitecture.)p eop %%Page: 257 276 257 275 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(257)249 507 y FA(PvmResvTids:)21 b(A)15 b(v)n(al)g(of)g(1)g(enables)i(the)f (task)g(to)g(send)g(messages)g(with)f(reserv)o(ed)j(tags)e(and)f(to)249 561 y(non-task)f(destinations.)k(The)c(default)g(\(0\))g(results)h(in)e (a)h(PvmBadP)o(aram)d(error)k(instead.)249 673 y Fr(Examples)274 740 y(C:)495 794 y Fs(oldval)20 b(=)i(pvm_setopt\()d(PvmRoute,)h (PvmRouteDirect)f(\);)274 848 y Fr(F)l(ortran:)495 902 y Fs(CALL)i(PVMFSETOPT\()e(PVMAUTOERR,)h(1,)h(OLDVAL)g(\))249 1009 y Fr(Errors)249 1079 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1079 14 2 v 15 w(setopt)p FA(.)274 1147 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1165 1338 2 v 274 1203 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(arg.)p eop %%Page: 258 277 258 276 bop 249 251 a Fu(258)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfsetrbuf\(\))717 b(p)n(vm)p 1558 511 21 2 v 25 w(setrbuf\(\))p 249 595 1591 16 v 249 658 a FA(Switc)o(hes)15 b(the)f(activ)o(e)g(receiv)o(e)h(bu\013er)g(and)f(sa)o(v)o(es)g(the)h (previous)f(bu\013er.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(oldbuf)g(=)h(pvm)p 834 836 14 2 v 15 w(setrbuf\()e(int)h (bufid)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfsetrbuf\()f (bufid,)g(oldbuf)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(bufid)71 b FA({)49 b(in)o(teger)13 b(sp)q(ecifying)g(the)g (message)g(bu\013er)g(iden)o(ti\014er)g(for)g(the)g(new)g(activ)o(e)525 1110 y(receiv)o(e)i(bu\013er.)274 1164 y Fs(oldbuf)49 b FA({)g(in)o(teger)19 b(returning)h(the)f(message)g(bu\013er)h(iden)o (ti\014er)f(for)f(the)i(previous)525 1217 y(activ)o(e)14 b(receiv)o(e)h(bu\013er.)249 1325 y Fr(Discussion)249 1395 y FA(The)g(routine)f Fs(pvm)p 547 1395 V 15 w(setrbuf)f FA(switc)o(hes)j(the)f(activ)o(e)f(receiv)o(e)i(bu\013er)f(to)f Fs(bufid)g FA(and)g(sa)o(v)o(es)h(the)f(pre-)249 1449 y(vious)g(activ)o(e)g(receiv)o(e)i(bu\013er)f Fs(oldbuf)p FA(.)j(If)c Fs(bufid)f FA(is)h(set)h(to)f(0)p Fn(;)g FA(the)g(presen)o(t)i(activ)o(e)f(receiv)o(e)g(bu\013er)249 1503 y(is)f(sa)o(v)o(ed,)f(and)h(no)g(activ)o(e)g(receiv)o(e)h (bu\013er)g(exists.)249 1566 y(A)20 b(successful)i(receiv)o(e)f (automatically)c(creates)22 b(a)d(new)i(activ)o(e)f(receiv)o(e)h (bu\013er.)37 b(If)20 b(a)g(previous)249 1619 y(receiv)o(e)d(has)e(not) g(b)q(een)h(unpac)o(k)o(ed)g(and)f(needs)h(to)g(b)q(e)f(sa)o(v)o(ed)h (for)f(later,)g(then)h(the)f(previous)h(bu\014d)249 1673 y(can)e(b)q(e)h(sa)o(v)o(ed)f(and)f(reset)j(later)e(to)g(the)g(activ)o (e)g(bu\013er)h(for)f(unpac)o(king.)249 1736 y(The)d(routine)g(is)g (required)g(when)h(managing)c(m)o(ultiple)g(message)i(bu\013ers.)19 b(F)m(or)10 b(example,)g(in)g(switc)o(h-)249 1790 y(ing)j(bac)o(k)g (and)h(forth)f(b)q(et)o(w)o(een)i(t)o(w)o(o)e(bu\013ers,)i(one)e (bu\013er)i(could)e(b)q(e)h(used)h(to)e(send)i(information)10 b(to)249 1844 y(a)j(graphical)g(in)o(terface)h(while)f(a)g(second)h (bu\013er)h(could)e(b)q(e)h(used)h(send)f(data)f(to)g(other)h(tasks)g (in)f(the)249 1898 y(application.)249 2010 y Fr(Examples)274 2076 y(C:)495 2130 y Fs(rbuf1)20 b(=)i(pvm_setrbuf\()d(rbuf2)i(\);)274 2184 y Fr(F)l(ortran:)495 2238 y Fs(CALL)g(PVMFSETRBUF\()e(NEWBUF,)h (OLDBUF)h(\))249 2345 y Fr(Errors)249 2416 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2416 V 15 w(setrbuf)p FA(.)p eop %%Page: 259 278 259 277 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(259)274 504 y FA(Name)232 b(P)o(ossible)14 b(Cause)p 249 521 1348 2 v 274 559 a(PvmBadP)o(aram)58 b(giving)12 b(an)i(in)o(v)n(alid)e (bu\014d.)274 613 y(PvmNoSuc)o(hBuf)49 b(switc)o(hing)14 b(to)f(a)h(nonexisten)o(t)h(message)e(bu\013er.)p eop %%Page: 260 279 260 278 bop 249 251 a Fu(260)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfsetsbuf\(\))719 b(p)n(vm)p 1559 511 21 2 v 25 w(setsbuf\(\))p 249 595 1591 16 v 249 658 a FA(Switc)o(hes)15 b(the)f(activ)o(e)g(send)h(bu\013er.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(oldbuf)g(=)h(pvm)p 834 836 14 2 v 15 w(setsbuf\()e(int)h(bufid)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfsetsbuf\()f(bufid,)g(oldbuf)h(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(bufid)71 b FA({)49 b(in)o(teger)10 b(the)g(message)g(bu\013er)g(iden)o(ti\014er)g(for)f (the)h(new)g(activ)o(e)g(send)h(bu\013er.)525 1110 y(A)j(v)n(alue)f(of) h(0)f(indicates)h(the)h(default)e(receiv)o(e)j(bu\013er.)274 1164 y Fs(oldbuf)49 b FA({)g(in)o(teger)19 b(returning)h(the)f(message) g(bu\013er)h(iden)o(ti\014er)f(for)f(the)i(previous)525 1217 y(activ)o(e)14 b(send)h(bu\013er.)249 1325 y Fr(Discussion)249 1395 y FA(The)d(routine)f Fs(pvm)p 541 1395 V 16 w(setsbuf)e FA(switc)o(hes)k(the)f(activ)o(e)f(send)i(bu\013er)f(to)f Fs(bufid)g FA(and)g(sa)o(v)o(es)h(the)g(previous)249 1449 y(activ)o(e)k(send)g(bu\013er)h Fs(oldbuf)p FA(.)22 b(If)15 b Fs(bufid)f FA(is)i(set)g(to)g(0)p Fn(;)f FA(the)h(presen)o(t) h(activ)o(e)f(send)g(bu\013er)h(is)e(sa)o(v)o(ed,)249 1503 y(and)f(no)f(activ)o(e)h(send)h(bu\013er)g(exists.)249 1566 y(The)c(routine)g(is)g(required)g(when)h(managing)c(m)o(ultiple)g (message)i(bu\013ers.)19 b(F)m(or)10 b(example,)g(in)g(switc)o(h-)249 1619 y(ing)j(bac)o(k)g(and)h(forth)f(b)q(et)o(w)o(een)i(t)o(w)o(o)e (bu\013ers,)i(one)e(bu\013er)i(could)e(b)q(e)h(used)h(to)e(send)i (information)10 b(to)249 1673 y(a)j(graphical)g(in)o(terface)h(while)f (a)g(second)h(bu\013er)h(could)e(b)q(e)h(used)h(send)f(data)f(to)g (other)h(tasks)g(in)f(the)249 1727 y(application.)249 1839 y Fr(Examples)274 1906 y(C:)495 1960 y Fs(sbuf1)20 b(=)i(pvm_setsbuf\()d(sbuf2)i(\);)274 2014 y Fr(F)l(ortran:)495 2068 y Fs(CALL)g(PVMFSETSBUF\()e(NEWBUF,)h(OLDBUF)h(\))249 2175 y Fr(Errors)249 2245 y FA(The)14 b(follo)o(wing)e(error)i (conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2245 V 15 w(setsbuf)p FA(.)274 2313 y(Name)232 b(P)o(ossible)14 b(Cause)p 249 2331 1348 2 v 274 2369 a(PvmBadP)o(aram)58 b(giving)12 b(an)i(in)o(v)n(alid)e(bu\014d.)274 2423 y(PvmNoSuc)o(hBuf)49 b(switc)o(hing)14 b(to)f(a)h(nonexisten)o(t)h (message)e(bu\013er.)p eop %%Page: 261 280 261 279 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(261)291 511 y FE(p)n(vmfspa)n(wn\(\))770 b(p)n(vm)p 1584 511 21 2 v 25 w(spa)n(wn\(\))p 249 595 1591 16 v 249 657 a FA(Starts)15 b(new)f(PVM)g(pro)q(cesses.)249 769 y Fr(Synopsis)274 836 y(C)50 b Fs(int)21 b(numt)g(=)h(pvm)p 667 836 14 2 v 15 w(spawn\()49 b(char)21 b(*task,)f(char)h(**argv,)860 890 y(int)g(flag,)g(char)g(*where,)860 944 y(int)g(ntask,)f(int)i (*tids)e(\))274 1072 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmfspawn\()48 b(task,)21 b(flag,)g(where,)858 1126 y(ntask,)g(tids,)f(numt)h(\))249 1233 y Fr(P)o(arameters)274 1292 y Fs(task)49 b FA({)h(c)o(haracter)15 b(string)f(con)o(taining)e (the)j(executable)g(\014le)f(name)e(of)i(the)g(PVM)482 1346 y(pro)q(cess)g(to)f(b)q(e)g(started.)19 b(The)13 b(executable)h(m)o(ust)d(already)i(reside)g(on)g(the)482 1400 y(host)e(on)g(whic)o(h)g(it)g(is)g(to)g(b)q(e)h(started.)18 b(The)11 b(default)g(lo)q(cation)f(PVM)i(lo)q(oks)482 1454 y(at)h(is)36 b Fs($HOME/pvm3/bin/$)o(PVM_A)o(RCH/f)o(ilena)o(me)19 b FA(.)274 1508 y Fs(argv)49 b FA({)h(p)q(oin)o(ter)14 b(to)g(an)g(arra)o(y)g(of)g(argumen)o(ts)f(to)h(the)h(executable)g (with)f(the)h(end)482 1562 y(of)e(the)i(arra)o(y)f(sp)q(eci\014ed)h(b)o (y)f(NULL.)g(If)f(the)i(executable)g(tak)o(es)g(no)f(argu-)482 1616 y(men)o(ts,)e(then)j(the)f(second)h(argumen)o(t)e(to)h(p)o(vm)p 1233 1616 13 2 v 13 w(spa)o(wn)g(is)g(NULL.)274 1669 y Fs(flag)49 b FA({)h(in)o(teger)14 b(sp)q(ecifying)g(spa)o(wn)g (options.)482 1723 y(In)f(C)h Fs(flag)f FA(should)h(b)q(e)g(the)h Fr(sum)e FA(of)g(the)i(follo)o(wing:)599 1777 y(Option)e(v)n(alue)141 b(Meaning)p 482 1795 1304 2 v 528 1833 a Fs(PvmTaskDefault)68 b FA(0)49 b(PVM)15 b(can)f(c)o(ho)q(ose)h(an)o(y)e(mac)o(hine)g(to)g (start)i(task)528 1887 y Fs(PvmTaskHost)134 b FA(1)49 b Fs(where)13 b FA(sp)q(eci\014es)j(a)e(particular)f(host)528 1941 y Fs(PvmTaskArch)134 b FA(2)49 b Fs(where)13 b FA(sp)q(eci\014es)j (a)e(t)o(yp)q(e)g(of)f(arc)o(hitecture)528 1995 y Fs(PvmTaskDebug)112 b FA(4)49 b(start)15 b(pro)q(cesses)i(under)d(debugger)528 2049 y Fs(PvmTaskTrace)112 b FA(8)49 b(pro)q(cesses)17 b(will)12 b(generate)k(PVM)e(trace)h(data)e(*)528 2103 y Fs(PvmMppFront)113 b FA(16)49 b(start)15 b(pro)q(cess)h(on)d(MPP)i (fron)o(t-end)528 2157 y Fs(PvmHostCompl)91 b FA(32)49 b(use)15 b(complemen)o(t)d(host)i(set)p 482 2175 V eop %%Page: 262 281 262 280 bop 249 251 a Fu(262)1321 b(App)q(endix)15 b(B)274 558 y Fs(where)49 b FA({)g(c)o(haracter)15 b(string)e(sp)q(ecifying)g (where)h(to)f(start)h(the)f(PVM)h(pro)q(cess.)19 b(Dep)q(ending)14 b(on)503 611 y(the)h(v)n(alue)e(of)g Fs(flag)p FA(,)g Fs(where)g FA(can)h(b)q(e)g(a)g(host)g(name)f(suc)o(h)h(as)g (\\ibm1.epm.)o(ornl.)o(go)o(v")503 665 y(or)d(a)g(PVM)h(arc)o (hitecture)h(class)e(suc)o(h)h(as)f(\\SUN4".)17 b(If)11 b Fs(flag)f FA(is)h(0,)g Fs(where)f FA(is)h(ignored,)503 719 y(and)j(PVM)g(will)f(select)i(the)f(most)f(appropriate)h(host.)274 773 y Fs(ntask)49 b FA({)g(in)o(teger)15 b(sp)q(ecifying)e(the)i(n)o (um)o(b)q(er)e(of)g(copies)i(of)e(the)i(executable)g(to)e(start)i(up.) 274 827 y Fs(tids)71 b FA({)49 b(in)o(teger)18 b(arra)o(y)f(of)f (length)i(at)f(least)g Fs(ntask)p FA(.)27 b(On)17 b(return)i(the)f (arra)o(y)f(con)o(tains)g(the)503 881 y(tids)h(of)f(the)i(PVM)f(pro)q (cesses)i(started)f(b)o(y)f(this)f(p)o(vm)p 1386 881 13 2 v 14 w(spa)o(wn)h(call.)28 b(If)18 b(there)h(is)f(a)503 935 y(error)d(starting)e(a)h(giv)o(en)f(task,)g(then)h(that)g(lo)q (cation)f(in)g(the)h(arra)o(y)f(will)g(con)o(tain)g(the)503 989 y(asso)q(ciated)i(error)g(co)q(de.)274 1043 y Fs(numt)71 b FA({)49 b(in)o(teger)21 b(returning)h(the)f(actual)f(n)o(um)o(b)q(er) g(of)h(tasks)g(started.)39 b(V)m(alues)21 b(less)g(than)503 1097 y(zero)16 b(indicate)g(a)f(system)g(error.)23 b(A)15 b(p)q(ositiv)o(e)g(v)n(alue)g(less)h(than)f Fs(ntask)f FA(indicates)i(a)503 1151 y(partial)g(failure.)27 b(In)17 b(this)g(case)h(the)f(user)h(should)f(c)o(hec)o(k)h(the)f Fs(tids)f FA(arra)o(y)h(for)g(the)503 1205 y(error)e(co)q(de\(s\).)249 1312 y Fr(Discussion)249 1383 y FA(The)c(routine)g Fs(pvm)p 540 1383 14 2 v 15 w(spawn)e FA(starts)i(up)g Fs(ntask)e FA(copies)i(of)f(the)h(executable)h(named)d Fs(task)p FA(.)16 b(On)11 b(systems)249 1437 y(that)h(supp)q(ort)g(en)o(vironmen) o(t,)f(spa)o(wn)h(passes)h(selected)g(v)n(ariables)e(in)g(paren)o(t)i (en)o(vironmen)o(t)d(to)i(c)o(hil-)249 1491 y(dren)g(tasks.)18 b(if)11 b(set,)h(the)g(en)o(vironmen)o(t)e(v)n(ariable)h(PVM)p 1130 1491 13 2 v 15 w(EXPOR)m(T)h(is)f(passed.)18 b(if)11 b(PVM)p 1653 1491 V 15 w(EXPOR)m(T)249 1545 y(con)o(tains)h(the)h (names)e(of)h(other)h(v)n(ariables)e(\(separated)j(b)o(y)e(':'\),)e (they)j(are)g(passed)g(to)q(o.)k(This)12 b(is)g(use-)249 1599 y(ful,)h(for)g(example,)f(for)i(the)g(follo)o(wing:)249 1732 y Fs(setenv)21 b(DISPLAY)f(myworkstation:0.0)249 1786 y(setenv)h(MYSTERYVAR)e(13)249 1840 y(setenv)i(PVM_EXPORT)e (DISPLAY:MYSTERYVAR)249 1918 y FA(The)d(hosts)f(on)g(whic)o(h)g(the)h (PVM)f(pro)q(cesses)j(are)d(started)h(is)f(set)h(b)o(y)f(the)g Fs(flag)g FA(and)f Fs(where)g FA(argu-)249 1972 y(men)o(ts.)28 b(On)18 b(return,)h(the)f(arra)o(y)f Fs(tids)g FA(con)o(tains)g(the)h (PVM)g(task)g(iden)o(ti\014ers)g(for)f(eac)o(h)h(pro)q(cess)249 2026 y(started.)249 2089 y(If)13 b(p)o(vm)p 372 2089 V 14 w(spa)o(wn)g(starts)i(one)f(or)f(more)g(tasks,)g Fs(numt)g FA(will)f(b)q(e)i(the)g(actual)g(n)o(um)o(b)q(er)e(of)h (tasks)h(started.)249 2143 y(If)g(a)g(system)g(error)i(o)q(ccurs,)f Fs(numt)f FA(will)f(b)q(e)i Fn(<)e FA(0,)g(If)i Fs(numt)e FA(is)h(less)h(than)g Fs(ntask)p FA(,)e(some)g(executables)249 2197 y(ha)o(v)o(e)f(failed)f(to)h(start)h(and)f(the)g(user)h(should)f (c)o(hec)o(k)h(the)g(last)f Fs(ntask)f FA(-)h Fs(numt)f FA(lo)q(cations)h(in)f(the)i Fs(tids)249 2250 y FA(arra)o(y)18 b(that)h(will)e(con)o(tain)h(the)h(asso)q(ciated)g(error)g(co)q(des)h (\(see)f(b)q(elo)o(w)f(for)h(meaning\).)29 b(The)19 b(\014rst)249 2304 y(n)o(um)o(t)12 b(tids)h(in)g(the)h(arra)o(y)g(are)f(go)q(o)q(d,)g (whic)o(h)g(can)h(b)q(e)g(useful)f(for)g(functions)h(suc)o(h)g(as)g(p)o (vm)p 1682 2304 V 13 w(mcast\(\).)249 2367 y(When)g Fs(flag)f FA(is)g(set)h(to)g(0)f(and)h Fs(where)e FA(is)i(set)g(to)g(NULL)f(\(or) h(\\)p Fs(*)p FA(")f(in)g(F)m(ortran\),)g(a)g(heuristic)i(is)e(used)249 2421 y(to)h(distribute)h(the)g Fs(ntask)e FA(pro)q(cesses)k(across)f (the)f(virtual)e(mac)o(hine.)18 b(Curren)o(tly)m(,)c(the)h(heuristic)g (is)249 2475 y(round-robin)d(assignmen)o(t)f(starting)h(with)g(the)h (next)f(host)h(in)e(the)i(table.)18 b(Later)12 b(PVM)h(will)d(use)j (the)p eop %%Page: 263 282 263 281 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(263)249 507 y FA(metrics)12 b(of)f(mac)o(hine)g(load)f(and)i(rated)h(p)q (erformance)e(\(sp=\))i(to)f(determine)g(the)g(most)f(appropriate)249 561 y(hosts.)249 624 y(If)17 b(the)g(PvmHostCompl)d(\015ag)i(is)h(set,) h(the)g(resulting)f(host)g(set)h(gets)f(complemen)o(ted.)26 b(Also,)16 b(the)249 677 y(T)m(askHost)f(hostname)g(".")f(is)i(tak)o (en)f(as)h(lo)q(calhost.)22 b(This)15 b(allo)o(ws)f(spa)o(wning)h (tasks)h(on)f(\\.")f(to)i(get)249 731 y(the)f(lo)q(calhost)e(or)h(to)f (spa)o(wn)h Fn(n)9 b Ft(\000)h FA(1)j(things)h(on)g(T)m (askHost|HostCompl)d(\\.")i(to)h(get)g(an)o(y)f(but)h(the)249 785 y(lo)q(calhost.)249 848 y(In)i(the)h(sp)q(ecial)g(case)g(where)g(a) f(m)o(ultipro)q(cessor)g(is)g(sp)q(eci\014ed)i(b)o(y)e Fs(where)p FA(,)f(p)o(vm)p 1537 848 13 2 v 13 w(spa)o(wn)i(will)d (start)249 902 y(all)f Fs(ntask)g FA(copies)h(on)g(this)g(single)f(mac) o(hine)g(using)g(the)i(v)o(endor's)f(underlying)f(routines.)249 964 y(If)h(PvmT)m(askDebug)e(is)i(set,)g(the)h(p)o(vmd)d(will)h(start)h (the)h(task\(s\))g(in)e(a)h(debugger.)19 b(In)14 b(this)g(case,)h(in-) 249 1018 y(stead)f(of)f(executing)h Fs(pvm3/bin/ARCH/task)k(args)p FA(,)12 b(p)o(vmd)g(will)g(executes)k Fs(pvm3/lib/debugge)o(r)249 1072 y(pvm3/bin/ARCH/task)i(args)p FA(.)f(The)d(debugger)g(is)f(a)h (shell)f(script)h(that)g(the)g(users)g(can)g(mo)q(dify)d(to)249 1126 y(their)16 b(individual)d(tastes.)22 b(Curren)o(tly)m(,)15 b(the)h(script)g(starts)g(an)f(xterm)f(with)h(db)o(x)g(or)g(a)f (comparable)249 1180 y(debugger)h(in)e(it.)249 1292 y Fr(Examples)274 1358 y(C:)495 1412 y Fs(numt)21 b(=)g(pvm_spawn\()f ("host",)g(0,)i(PvmTaskHost,)887 1466 y("sparky",)e(1,)h(&tid[0])g(\);) 495 1520 y(numt)g(=)g(pvm_spawn\()f("host",)g(0,)i(\(PvmTaskHost+Pv)o (mTask)o(Debug)o(\),)887 1574 y("sparky",)e(1,)h(&tid[0])g(\);)495 1628 y(numt)g(=)g(pvm_spawn\()f("node",)g(0,)i(PvmTaskArch,)887 1682 y("RIOS",)e(1,)i(&tid[i])e(\);)495 1736 y(numt)h(=)g(pvm_spawn\()f ("FEM1",)g(args,)h(0,)g(0,)h(16,)f(tids)g(\);)495 1790 y(numt)g(=)g(pvm_spawn\()f("pde",)g(0,)i(PvmTaskHost,)887 1844 y("paragon.ornl",)d(512,)i(tids)f(\);)274 1898 y Fr(F)l(ortran:)495 1952 y Fs(FLAG)h(=)g(PVMARCH)f(+)i(PVMDEBUG)495 2006 y(CALL)f(PVMFSPAWN\()e('node',)i(FLAG,)f('SUN4',)h(1,)g(TID\(3\),) f(NUMT)h(\))495 2060 y(CALL)g(PVMFSPAWN\()e('FEM1',)i(PVMDEFAULT,)e ('*',)i(16,)g(TIDS,)g(NUMT)g(\))495 2114 y(CALL)g(PVMFSPAWN\()e ('TBMD',)i(PVMHOST,)f('cm5.utk.edu',)f(32,)i(TIDS,)g(NUMT)g(\))249 2221 y Fr(Errors)249 2291 y FA(The)d(follo)o(wing)c(error)k(conditions) f(can)h(b)q(e)f(returned)i(b)o(y)e Fs(pvm)p 1264 2291 14 2 v 15 w(spawn)f FA(either)j(in)d Fs(numt)h FA(or)g(in)f(the)249 2345 y Fs(tids)d FA(arra)o(y)m(.)p eop %%Page: 264 283 264 282 bop 249 251 a Fu(264)1321 b(App)q(endix)15 b(B)274 504 y FA(Name)221 b(V)m(alue)50 b(P)o(ossible)14 b(Cause)p 249 521 1489 2 v 274 559 a(PvmBadP)o(aram)96 b Ft(\000)p FA(2)50 b(giving)12 b(an)i(in)o(v)n(alid)d(argumen)o(t)i(v)n(alue.)274 613 y(PvmNoHost)154 b Ft(\000)p FA(6)50 b(Sp)q(eci\014ed)15 b(host)f(is)g(not)f(in)h(the)g(virtual)f(mac)o(hine.)274 667 y(PvmNoFile)169 b Ft(\000)p FA(7)50 b(Sp)q(eci\014ed)20 b(executable)h(cannot)f(b)q(e)g(found.)35 b(The)20 b(default)753 721 y(lo)q(cation)26 b(PVM)i(lo)q(oks)e(in)49 b Fs(~/pvm3/bin/ARCH)24 b FA(where)753 775 y(AR)o(CH)13 b(is)h(PVM)g(arc)o(hitecture)i(name.) 274 829 y(PvmNoMem)125 b Ft(\000)p FA(10)50 b(Mallo)q(c)13 b(failed.)k(Not)c(enough)h(memory)e(on)h(host.)274 883 y(PvmSysErr)148 b Ft(\000)p FA(14)50 b(p)o(vmd)12 b(not)i(resp)q (onding.)274 937 y(PvmOutOfRes)88 b Ft(\000)p FA(27)50 b(out)13 b(of)h(resources.)p eop %%Page: 265 284 265 283 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(265)291 511 y FE(p)n(vmftasks\(\))838 b(p)n(vm)p 1618 511 21 2 v 25 w(tasks\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(information)c(ab)q(out)j(the)g(tasks)g(running)g(on)g(the)g(virtual)f (mac)o(hine.)249 770 y Fr(Synopsis)274 836 y(C)195 b Fs(int)21 b(info)g(=)h(pvm_tasks\()e(int)h(where,)f(int)h(*ntask,)1004 890 y(struct)g(pvmtaskinfo)e(**taskp)i(\))481 944 y(struct)g (pvmtaskinfo{)568 998 y(int)43 b(ti_tid;)568 1052 y(int)g(ti_ptid;)568 1106 y(int)g(ti_host;)568 1160 y(int)g(ti_flag;)568 1214 y(char)21 b(*ti_a_out;)568 1268 y(int)43 b(ti_pid;)481 1322 y(})22 b(taskp;)274 1376 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmftasks\()f(where,)h(ntask,)f(tid,)h(ptid,)852 1430 y(dtid,)g(flag,)f(aout,info)g(\))249 1537 y Fr(P)o(arameters)274 1595 y Fs(where)49 b FA({)g(in)o(teger)17 b(sp)q(ecifying)f(what)g (tasks)g(to)g(return)h(information)c(ab)q(out.)25 b(The)503 1649 y(options)14 b(are)g(the)h(follo)o(wing:)528 1703 y(0)195 b(for)14 b(all)e(the)j(tasks)f(on)g(the)g(virtual)f(mac)o(hine) 528 1757 y(p)o(vmd)g(tid)49 b(for)14 b(all)e(tasks)j(on)e(a)h(giv)o(en) f(host)528 1811 y(tid)165 b(for)14 b(a)f(sp)q(eci\014c)j(task)274 1865 y Fs(ntask)49 b FA({)g(in)o(teger)15 b(returning)f(the)h(n)o(um)o (b)q(er)e(of)g(tasks)h(b)q(eing)g(rep)q(orted)i(on.)274 1919 y Fs(taskp)49 b FA({)g(p)q(oin)o(ter)11 b(to)g(an)g(arra)o(y)f(of) h(structures)i(whic)o(h)e(con)o(tain)f(information)e(ab)q(out)503 1973 y(eac)o(h)18 b(task)g(including)e(its)h(task)h(ID,)e(paren)o(t)i (tid,)f(p)o(vmd)f(task)i(ID,)e(sta-)503 2027 y(tus)i(\015ag,)f(the)h (name)e(of)h(this)g(task's)g(executable)i(\014le,)f(and)f(task)g(\(O/S) 503 2081 y(dep)q(enden)o(t\))i(pro)q(cess)f(id.)26 b(The)18 b(status)f(\015ag)f(v)n(alues)h(are)g(w)o(aiting)e(for)i(a)503 2135 y(message,)c(w)o(aiting)g(for)g(the)i(p)o(vmd,)d(and)h(running.) 274 2189 y Fs(tid)93 b FA({)49 b(in)o(teger)15 b(returning)f(task)g(ID) g(of)f(one)h(task)274 2243 y Fs(ptid)71 b FA({)49 b(in)o(teger)15 b(returning)f(paren)o(t)g(task)h(ID)274 2297 y Fs(dtid)71 b FA({)49 b(in)o(teger)15 b(returning)f(p)o(vmd)e(task)i(ID)g(of)f (host)h(task)g(is)g(on.)p eop %%Page: 266 285 266 284 bop 249 251 a Fu(266)1321 b(App)q(endix)15 b(B)274 504 y Fs(flag)49 b FA({)h(in)o(teger)14 b(returning)g(status)h(of)e (task)274 558 y Fs(aout)49 b FA({)h(c)o(haracter)16 b(string)g (returning)g(the)g(name)f(of)g(spa)o(wned)h(task.)23 b(Man)o(ually)482 611 y(started)15 b(tasks)f(return)h(blank.)274 665 y Fs(info)49 b FA({)h(in)o(teger)12 b(status)g(co)q(de)g(returned)i (b)o(y)d(the)h(routine.)17 b(V)m(alues)12 b(less)g(than)g(zero)482 719 y(indicate)h(an)h(error.)249 827 y Fr(Discussion)249 897 y FA(The)f(routine)h Fs(pvm)p 545 897 14 2 v 15 w(tasks)e FA(returns)i(information)c(ab)q(out)j(tasks)h(running)e(on)h(the)h (virtual)e(mac)o(hine.)249 951 y(The)17 b(information)c(returned)18 b(is)e(the)g(same)g(as)g(that)g(a)o(v)n(ailable)e(from)g(the)j(console) g(command)c Fs(ps)p FA(.)249 1005 y(The)k(C)g(function)f(returns)i (information)c(ab)q(out)i(the)i(en)o(tire)f(virtual)f(mac)o(hine)f(in)h (one)h(call.)26 b(The)249 1059 y(F)m(ortran)20 b(function)h(returns)h (information)17 b(ab)q(out)j(one)h(task)g(p)q(er)g(call)f(and)g(cycles) i(through)e(all)249 1113 y(the)f(tasks.)31 b(Th)o(us,)19 b(if)e(where)j(=)e(0,)h(and)f(p)o(vmftasks)e(is)i(called)g(n)o(task)g (times,)g(all)f(tasks)i(will)d(b)q(e)249 1167 y(represen)o(ted.)249 1229 y(If)e(p)o(vm)p 373 1229 13 2 v 13 w(tasks)g(is)g(successful,)h Fs(info)e FA(will)g(b)q(e)h(0.)k(If)13 b(some)g(error)i(o)q(ccurs,)g Fs(info)e FA(will)g(b)q(e)h Fn(<)e FA(0.)249 1341 y Fr(Examples)274 1408 y(C:)495 1462 y Fs(info)21 b(=)g(pvm_tasks\()f(0,)h(&ntask,)g (&taskp)f(\);)274 1516 y Fr(F)l(ortran:)495 1570 y Fs(CALL)h (PVMFTASKS\()e(DTID,)i(NTASK,)g(INFO)g(\))249 1677 y Fr(Errors)249 1747 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g (can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 1747 14 2 v 15 w(tasks)p FA(.)274 1815 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 1833 1338 2 v 274 1871 a(PvmBadP)o(aram)47 b(in)o(v)n(alid)12 b(v)n(alue)h(for)h Fs(where)f FA(argumen)o(t.)274 1925 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)274 1979 y(PvmNoHost)105 b(sp)q(eci\014ed)16 b(host)e(not)g(in)f(virtual)g (mac)o(hine.)p eop %%Page: 267 286 267 285 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(267)291 511 y FE(p)n(vmftidtohost\(\))596 b(p)n(vm)p 1498 511 21 2 v 24 w(tidtohost\(\))p 249 595 1591 16 v 249 658 a FA(Returns)15 b(the)f(host)g(ID)g(on)g(whic)o(h)f(the)i(sp)q (eci\014ed)g(task)f(is)g(running.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(dtid)g(=)h(pvm)p 790 836 14 2 v 15 w(tidtohost\()e(int)h(tid)g(\))274 890 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmftidtohost\()e(tid,)i(dtid)g(\))249 997 y Fr(P)o(arameters)274 1056 y Fs(tid)71 b FA({)50 b(in)o(teger)14 b(task)g(iden)o(ti\014er)g(sp)q(eci\014ed.)274 1110 y Fs(dtid)49 b FA({)h(in)o(teger)14 b(tid)f(of)h(the)g(host's)g(p) o(vmd)f(returned.)249 1217 y Fr(Discussion)249 1287 y FA(The)h(routine)g Fs(pvm)p 546 1287 V 15 w(tidtohost)e FA(returns)j(the)f(host)g(ID)f Fs(dtid)g FA(on)h(whic)o(h)f(the)h(sp)q (eci\014ed)h(task)f Fs(tid)f FA(is)249 1341 y(running.)249 1453 y Fr(Examples)274 1520 y(C:)538 1574 y Fs(host)21 b(=)h(pvm_tidtohost\()d(tid[0])h(\);)274 1628 y Fr(F)l(ortran:)560 1682 y Fs(CALL)h(PVMFTIDTOHOST\(TID)o(,)e(HOSTID\))249 1789 y Fr(Errors)249 1859 y FA(These)c(error)g(conditions)f(can)g(b)q (e)g(returned)i(b)o(y)d Fs(pvm)p 1097 1859 V 16 w(tidtohost)p FA(.)274 1927 y(Name)221 b(P)o(ossible)14 b(cause)p 249 1945 1338 2 v 274 1983 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(tid.)p eop %%Page: 268 287 268 286 bop 249 251 a Fu(268)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmftrecv\(\))832 b(p)n(vm)p 1616 511 21 2 v 24 w(trecv\(\))p 249 595 1591 16 v 249 658 a FA(Receiv)o(es)15 b(with)e(timeout.)249 770 y Fr(Synopsis)274 836 y(C)173 b Fs(int)21 b(bufid)g(=)h(pvm)p 812 836 14 2 v 15 w(trecv\()e(int)i (tid,)f(int)g(msgtag,)983 890 y(struct)f(timeval)g(*tmout)h(\))274 944 y Fr(F)l(ortran)48 b Fs(call)21 b(pvmftrecv\()f(tid,)h(msgtag,)f (sec,)h(usec,)g(bufid)g(\))249 1051 y Fr(P)o(arameters)274 1110 y Fs(tid)180 b FA({)49 b(in)o(teger)15 b(to)f(matc)o(h)e(task)i (iden)o(ti\014er)g(of)g(sending)g(pro)q(cess.)274 1164 y Fs(msgtag)114 b FA({)49 b(in)o(teger)15 b(to)f(matc)o(h)e(message)i (tag;)f(should)h(b)q(e)g Ft(\025)g FA(0.)274 1217 y Fs(tmout)136 b FA({)49 b(time)13 b(to)h(w)o(ait)f(b)q(efore)i(returning)f(without)f (a)h(message.)274 1271 y Fs(sec,)21 b(usec)49 b FA({)g(in)o(tegers)31 b(de\014ning)f(Time)e(to)i(w)o(ait)f(b)q(efore)h(returning)g(without)g (a)590 1325 y(message.)274 1379 y Fs(bufid)136 b FA({)49 b(in)o(teger)11 b(returns)g(the)g(v)n(alue)e(of)g(the)h(new)h(activ)o (e)f(receiv)o(e)h(bu\013er)g(iden)o(ti\014er.)590 1433 y(V)m(alues)j(less)h(than)f(zero)g(indicate)g(an)g(error.)249 1541 y Fr(Discussion)249 1611 y FA(The)f(routine)g Fs(pvm)p 544 1611 V 16 w(trecv)e FA(blo)q(c)o(ks)i(the)h(pro)q(cess)g(un)o(til)e (a)h(message)g(with)f(lab)q(el)g Fs(msgtag)g FA(has)h(arriv)o(ed)249 1665 y(from)c Fs(tid)p FA(.)17 b(p)o(vm)p 521 1665 13 2 v 13 w(trecv,)c(then)e(places)h(the)g(message)f(in)g(a)f(new)i FB(active)f FA(receiv)o(e)i(bu\013er,)f(also)e(clearing)249 1719 y(the)17 b(curren)o(t)h(receiv)o(e)f(bu\013er.)26 b(If)16 b(no)g(matc)o(hing)e(message)i(arriv)o(es)h(within)e(the)i(sp)q (eci\014ed)g(w)o(aiting)249 1773 y(time,)12 b(p)o(vm)p 437 1773 V 14 w(trecv)j(returns)g(without)f(a)f(message.)249 1835 y(A)i(-1)f(in)g Fs(msgtag)f FA(or)i Fs(tid)f FA(matc)o(hes)g(an)o (ything.)20 b(This)14 b(allo)o(ws)f(the)j(user)f(the)h(follo)o(wing)c (options.)19 b(If)249 1889 y(tid)c(=)e Ft(\000)p FA(1)i(and)g(msgtag)e (is)i(de\014ned)h(b)o(y)f(the)h(user,)g(then)f(p)o(vm)p 1251 1889 V 14 w(recv)h(will)d(accept)j(a)f(message)g(from)249 1943 y(an)o(y)e(pro)q(cess)i(that)f(has)f(a)g(matc)o(hing)f(msgtag.)k (If)d(msgtag)e(=)h Ft(\000)p FA(1)i(and)f(tid)g(is)g(de\014ned)h(b)o(y) f(the)h(user,)249 1997 y(then)j(p)o(vm)p 428 1997 V 13 w(recv)h(will)d(accept)i(an)o(y)f(message)g(that)h(is)f(sen)o(t)h(from) e(pro)q(cess)j(tid.)25 b(If)16 b(tid)g(=)g Ft(\000)p FA(1)g(and)249 2051 y(msgtag)c(=)g Ft(\000)p FA(1,)i(then)g(p)o(vm)p 691 2051 V 13 w(recv)h(will)e(accept)i(an)o(y)e(message)h(from)e(an)o (y)h(pro)q(cess.)249 2113 y(In)i(C,)g(the)h Fs(tmout)e FA(\014elds)i(tv)p 704 2113 V 15 w(sec)g(and)g(tv)p 908 2113 V 15 w(usec)g(sp)q(ecify)g(ho)o(w)f(long)f(p)o(vm)p 1412 2113 V 14 w(trecv)i(will)e(w)o(ait)g(without)249 2167 y(returning)h(a)f(matc)o(hing)f(message.)20 b(In)14 b(F)m(ortran,)g(t)o(w)o(o)g(separate)i(parameters,)e Fs(sec)g FA(and)g Fs(usec)p FA(,)g(are)249 2221 y(passed.)19 b(With)13 b(b)q(oth)h(set)h(to)f(zero,)g(p)o(vm)p 899 2221 V 13 w(trecv)h(b)q(eha)o(v)o(es)g(the)g(same)e(as)h(p)o(vm)p 1479 2221 V 13 w(nrecv\(\),)h(whic)o(h)e(is)h(to)249 2275 y(prob)q(e)d(for)g(messages)f(and)h(return)h(immedia)o(tely)c(ev)o (en)j(if)f(none)h(are)g(matc)o(hed.)16 b(In)11 b(C,)f(passing)h(a)f(n)o (ull)249 2329 y(p)q(oin)o(ter)16 b(in)e(tmout)g(mak)o(es)h(p)o(vm)p 778 2329 V 13 w(trecv)h(act)g(lik)o(e)e(p)o(vm)p 1125 2329 V 14 w(recv\(\);)j(that)e(is,)g(it)g(will)f(w)o(ait)g (inde\014nitely)m(.)249 2383 y(In)g(F)m(ortran,)f(setting)h(sec)i(to)d (-1)h(has)g(the)g(same)f(e\013ect.)249 2446 y(The)h(PVM)g(mo)q(del)e (guaran)o(tees)i(the)g(follo)o(wing)d(ab)q(out)j(message)f(order.)19 b(If)13 b(task)g(1)h(sends)g(message)249 2500 y(A)k(to)g(task)h(2,)f (then)h(task)f(1)g(sends)i(message)e(B)g(to)g(task)g(2,)h(message)f(A)g (will)f(arriv)o(e)h(at)g(task)g(2)p eop %%Page: 269 288 269 287 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(269)249 507 y FA(b)q(efore)14 b(message)f(B.)g(Moreo)o(v)o(er,)h(if)e(b)q(oth)i (messages)f(arriv)o(e)g(b)q(efore)i(task)e(2)g(do)q(es)h(a)f(receiv)o (e,)h(then)g(a)249 561 y(wildcard)g(receiv)o(e)h(will)d(alw)o(a)o(ys)h (return)i(message)f(A.)249 624 y(If)g(p)o(vm)p 373 624 13 2 v 13 w(trecv)i(is)e(successful,)i Fs(bufid)d FA(will)g(b)q(e)i (the)g(v)n(alue)e(of)h(the)h(new)g(activ)o(e)f(receiv)o(e)i(bu\013er)f (iden-)249 677 y(ti\014er.)j(If)c(some)f(error)i(o)q(ccurs,)g Fs(bufid)d FA(will)h(b)q(e)h Fn(<)e FA(0.)249 740 y(Once)g(p)o(vm)p 434 740 V 13 w(trecv)g(returns,)g(the)g(data)e(in)g(the)h(message)g (can)f(b)q(e)i(unpac)o(k)o(ed)f(in)o(to)f(the)h(user's)h(memory)249 794 y(using)i(the)g(unpac)o(k)g(routines.)249 906 y Fr(Examples)274 972 y(C:)495 1026 y Fs(struct)20 b(timeval)g(tmout;)495 1134 y(tid)h(=)g(pvm_parent\(\);)495 1188 y(msgtag)f(=)i(4)f(;)495 1242 y(if)g(\(\(bufid)f(=)i(pvm_trecv\()e(tid,)h(msgtag,)f(&tmout)g (\)\))i(>0\))f({)538 1296 y(pvm_upkint\()f(tid_array,)f(10,)j(1)f(\);) 538 1350 y(pvm_upkint\()f(problem_size,)f(1,)i(1)h(\);)538 1404 y(pvm_upkfloat\()d(input_array,)h(100,)h(1)g(\);)495 1458 y(})274 1512 y Fr(F)l(ortran:)495 1566 y Fs(CALL)g(PVMFRECV\()e (-1,)j(4,)f(60,)g(0,)h(BUFID)e(\))495 1620 y(IF)h(\(BUFID)g(.GT.)f(0\)) i(THEN)495 1674 y(CALL)f(PVMFUNPACK\()e(INTEGER4,)h(TIDS,)h(25,)g(1,)g (INFO)g(\))495 1728 y(CALL)g(PVMFUNPACK\()e(REAL8,)i(MATRIX,)f(100,)h (100,)g(INFO)g(\))495 1782 y(ENDIF)249 1889 y Fr(Errors)249 1959 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h (returned)g(b)o(y)f Fs(pvm)p 1238 1959 14 2 v 15 w(trecv)p FA(.)274 2027 y(Name)221 b(P)o(ossible)14 b(Cause)p 249 2045 1338 2 v 274 2083 a(PvmBadP)o(aram)47 b(giving)13 b(an)g(in)o(v)n(alid)f(tid)i(v)n(alue,)e(or)i(msgtag)e Fn(<)g Ft(\000)p FA(1.)274 2137 y(PvmSysErr)120 b(p)o(vmd)13 b(not)g(resp)q(onding.)p eop %%Page: 270 289 270 288 bop 249 251 a Fu(270)1321 b(App)q(endix)15 b(B)291 511 y FE(p)n(vmfunpac)n(k\(\))783 b(p)n(vm)p 1625 511 21 2 v 25 w(upk)p Fa(*)p FE(\(\))p 249 595 1591 16 v 249 658 a FA(Unpac)o(ks)14 b(the)h(activ)o(e)f(message)f(bu\013er)i(in) o(to)f(arra)o(ys)g(of)f(prescrib)q(ed)j(data)d(t)o(yp)q(e.)249 770 y Fr(Synopsis)274 836 y(C)296 890 y Fs(int)21 b(info)g(=)g (pvm_unpackf\()f(const)h(char)g(*fmt,)f(...)h(\))296 944 y(int)g(info)g(=)g(pvm_upkbyte\()42 b(char)64 b(*xp,)21 b(int)g(nitem,)g(int)g(stride)g(\))296 998 y(int)g(info)g(=)g (pvm_upkcplx\()42 b(float)g(*cp,)21 b(int)g(nitem,)g(int)g(stride)g(\)) 296 1052 y(int)g(info)g(=)g(pvm_upkdcplx\()f(double)g(*zp,)h(int)g (nitem,)g(int)g(stride)g(\))296 1106 y(int)g(info)g(=)g (pvm_upkdouble\(double)d(*dp,)j(int)g(nitem,)g(int)g(stride)g(\))296 1160 y(int)g(info)g(=)g(pvm_upkfloat\()f(float)42 b(*fp,)21 b(int)g(nitem,)g(int)g(stride)g(\))296 1214 y(int)g(info)g(=)g (pvm_upkint\()64 b(int)86 b(*ip,)21 b(int)g(nitem,)g(int)g(stride)g(\)) 296 1268 y(int)g(info)g(=)g(pvm_upklong\()42 b(long)64 b(*ip,)21 b(int)g(nitem,)g(int)g(stride)g(\))296 1322 y(int)g(info)g(=)g(pvm_upkshort\()f(short)42 b(*jp,)21 b(int)g(nitem,)g(int)g(stride)g(\))296 1376 y(int)g(info)g(=)g (pvm_upkstr\()64 b(char)g(*sp)21 b(\))274 1451 y Fr(F)l(ortran)274 1505 y Fs(call)g(pvmfunpack\()e(what,)i(xp,)g(nitem,)g(stride,)f(info)h (\))249 1611 y Fr(P)o(arameters)274 1670 y Fs(fmt)115 b FA({)49 b(prin)o(tf-lik)o(e)13 b(format)f(expression)j(sp)q(ecifying) f(what)f(to)h(pac)o(k)g(\(see)h(discussion\).)274 1724 y Fs(nitem)71 b FA({)49 b(the)15 b(total)e(n)o(um)o(b)q(er)g(of)g FB(items)h FA(to)f(b)q(e)i(unpac)o(k)o(ed)f(\(not)g(the)h(n)o(um)o(b)q (er)e(of)g(b)o(ytes\).)274 1778 y Fs(stride)49 b FA({)g(the)15 b(stride)f(to)g(b)q(e)h(used)f(when)h(pac)o(king)e(the)h(items.)k(F)m (or)13 b(example,)f(if)h(stride=)g(2)h(in)525 1832 y(p)o(vm)p 607 1832 13 2 v 13 w(upk)o(cplx,)g(then)g(ev)o(ery)h(other)f(complex)f (n)o(um)o(b)q(er)g(will)g(b)q(e)h(unpac)o(k)o(ed.)274 1886 y Fs(xp)137 b FA({)49 b(p)q(oin)o(ter)17 b(to)g(the)g(b)q (eginning)f(of)g(a)h(blo)q(c)o(k)f(of)g(b)o(ytes.)28 b(Can)16 b(b)q(e)i(an)o(y)e(data)g(t)o(yp)q(e,)i(but)525 1940 y(m)o(ust)13 b(matc)o(h)g(the)h(corresp)q(onding)h(pac)o(k)f(data) f(t)o(yp)q(e.)274 1994 y Fs(cp)137 b FA({)49 b(complex)13 b(arra)o(y)g(at)h(least)g(nitem*stride)f(items)g(long.)274 2048 y Fs(zp)137 b FA({)49 b(double)14 b(precision)g(complex)f(arra)o (y)g(at)h(least)g(nitem*stride)f(items)g(long.)274 2102 y Fs(dp)137 b FA({)49 b(double)14 b(precision)g(real)g(arra)o(y)g(at)f (least)h(nitem*stride)g(items)f(long.)274 2156 y Fs(fp)137 b FA({)49 b(real)14 b(arra)o(y)g(at)f(least)h(nitem*stride)g(items)f (long.)274 2210 y Fs(ip)137 b FA({)49 b(in)o(teger)14 b(arra)o(y)g(at)g(least)g(nitem*stride)f(items)g(long.)274 2264 y Fs(jp)137 b FA({)49 b(in)o(teger*2)14 b(arra)o(y)g(at)f(least)h (nitem*stride)g(items)f(long.)274 2318 y Fs(sp)137 b FA({)49 b(p)q(oin)o(ter)14 b(to)g(a)g(n)o(ull)e(terminated)i(c)o (haracter)h(string.)p eop %%Page: 271 290 271 289 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(271)274 504 y Fs(what)49 b FA({)h(in)o(teger)14 b(sp)q(ecifying)g(the)g(t)o(yp) q(e)h(of)e(data)g(b)q(eing)h(unpac)o(k)o(ed.)703 558 y Fs(what)g FA(options)p 482 575 677 2 v 528 613 a Fs(STRING)92 b FA(0)72 b Fs(REAL4)157 b FA(4)528 667 y Fs(BYTE1)114 b FA(1)72 b Fs(COMPLEX8)91 b FA(5)528 721 y Fs(INTEGER2)48 b FA(2)72 b Fs(REAL8)157 b FA(6)528 775 y Fs(INTEGER4)48 b FA(3)72 b Fs(COMPLEX16)d FA(7)274 829 y Fs(info)49 b FA({)h(in)o(teger)14 b(status)h(co)q(de)g(returned)g(b)o(y)f(the)h (routine.)j(V)m(alues)c(less)h(than)f(zero)h(indicate)482 883 y(an)e(error.)249 989 y Fr(Discussion)249 1057 y FA(Eac)o(h)g(of)g(the)35 b Fs(pvm_upk*)11 b FA(routines)j(unpac)o(ks)f (an)g(arra)o(y)g(of)f(the)i(giv)o(en)e(data)h(t)o(yp)q(e)g(from)e(the)j (activ)o(e)249 1111 y(receiv)o(e)j(bu\013er.)24 b(The)16 b(argumen)o(ts)e(for)i(eac)o(h)g(of)e(the)j(routines)f(are)g(a)f(p)q (oin)o(ter)g(to)h(the)g(arra)o(y)f(to)g(b)q(e)249 1165 y(unpac)o(k)o(ed)h(in)o(to,)e Fs(nitem)g FA(whic)o(h)g(is)h(the)h (total)e(n)o(um)o(b)q(er)g(of)h(items)f(to)h(unpac)o(k,)g(and)f Fs(stride)g FA(whic)o(h)249 1219 y(is)g(the)g(stride)h(to)f(use)g(when) h(unpac)o(king.)249 1280 y(An)d(exception)h(is)f(p)o(vm)p 621 1280 13 2 v 13 w(upkstr\(\))h(whic)o(h)f(b)o(y)g(de\014nition)g (unpac)o(ks)g(a)g(NULL)g(terminated)g(c)o(haracter)249 1333 y(string)k(and)g(th)o(us)g(do)q(es)h(not)f(need)h Fs(nitem)e FA(or)h Fs(stride)f FA(argumen)o(ts.)23 b(The)17 b(F)m(ortran)f(routine)g(p)o(vm-)249 1387 y(funpac)o(k\()f(STRING,)e (...\))20 b(exp)q(ects)d Fs(nitem)d FA(to)h(b)q(e)g(the)h(n)o(um)o(b)q (er)e(of)g(c)o(haracters)i(in)f(the)g(string)g(and)249 1441 y Fs(stride)e FA(to)g(b)q(e)i(1.)249 1502 y(If)f(the)g(unpac)o (king)f(is)h(successful,)h Fs(info)e FA(will)g(b)q(e)h(0.)k(If)13 b(some)g(error)i(o)q(ccurs,)g Fs(info)e FA(will)g(b)q(e)h Fn(<)e FA(0.)249 1563 y(A)i(single)g(v)n(ariable)e(\(not)i(an)g(arra)o (y\))g(can)g(b)q(e)g(unpac)o(k)o(ed)h(b)o(y)e(setting)i Fs(nitem)p FA(=)10 b(1)k(and)g Fs(stride)p FA(=)c(1.)249 1624 y(The)k(routine)f(p)o(vm)p 558 1624 V 13 w(unpac)o(kf\(\))g(uses)h (a)f(prin)o(tf-lik)o(e)f(format)f(expression)j(to)f(sp)q(ecify)h(what)f (and)f(ho)o(w)249 1678 y(to)f(unpac)o(k)g(data)g(from)e(the)j(receiv)o (e)g(bu\013er.)19 b(All)10 b(v)n(ariables)g(are)i(passed)g(as)f (addresses.)19 b(A)11 b(BNF-lik)o(e)249 1732 y(description)k(of)e(the)h (format)e(syn)o(tax)i(is)g(as)g(follo)o(ws:)336 1807 y Fs(format)21 b(:)g(null)g(|)h(init)f(|)g(format)g(fmt)336 1861 y(init)g(:)h(null)f(|)g('\045')h('+')336 1914 y(fmt)f(:)h('\045')f (count)g(stride)f(modifiers)g(fchar)336 1968 y(fchar)h(:)h('c')f(|)g ('d')h(|)f('f')g(|)h('x')f(|)h('s')336 2022 y(count)f(:)h(null)f(|)g ([0-9]+)g(|)g('*')336 2076 y(stride)g(:)g(null)g(|)h('.')f(\()h([0-9]+) e(|)i('*')f(\))336 2130 y(modifiers)f(:)i(null)f(|)g(modifiers)f(mchar) 336 2184 y(mchar)h(:)h('h')f(|)g('l')h(|)f('u')249 2292 y(Formats:)293 2346 y(+)43 b(means)21 b(initsend)f(-)i(must)e(match)h (an)h(int)f(\(how\))g(in)g(the)g(param)g(list.)293 2400 y(c)43 b(pack/unpack)20 b(bytes)293 2454 y(d)43 b(integer)293 2508 y(f)g(float)p eop %%Page: 272 291 272 290 bop 249 251 a Fu(272)1321 b(App)q(endix)15 b(B)293 507 y Fs(x)43 b(complex)20 b(float)293 561 y(s)43 b(string)249 669 y(Modifiers:)293 723 y(h)g(short)21 b(\(int\))293 777 y(l)43 b(long)g(\(int,)21 b(float,)f(complex)g(float\))293 831 y(u)43 b(unsigned)20 b(\(int\))249 939 y('*')h(count)g(or)g(stride) g(must)g(match)g(an)g(int)g(in)h(the)f(param)g(list.)249 1018 y FA(F)m(uture)16 b(extensions)h(to)f(the)h Fs(what)e FA(argumen)o(t)f(will)h(include)h(64-bit)f(t)o(yp)q(es)h(when)h(XDR)e (enco)q(ding)249 1072 y(of)k(these)j(t)o(yp)q(es)e(is)g(a)o(v)n (ailable.)34 b(Mean)o(while,)20 b(users)h(should)f(b)q(e)h(a)o(w)o(are) e(that)h(precision)g(can)g(b)q(e)249 1126 y(lost)e(when)h(passing)f (data)g(from)e(a)i(64-bit)g(mac)o(hine)f(lik)o(e)g(a)h(Cra)o(y)g(to)g (a)g(32)g(bit)g(mac)o(hine)f(lik)o(e)g(a)249 1180 y(SP)m(AR)o (Cstation.)j(As)15 b(a)g(mnemonic)d(the)k Fs(what)e FA(argumen)o(t)f (name)h(includes)h(the)h(n)o(um)o(b)q(er)e(of)g(b)o(ytes)249 1234 y(of)d(precision)g(to)g(exp)q(ect.)19 b(By)11 b(setting)h(enco)q (ding)f(to)g(PVMRA)-5 b(W)11 b(\(see)i(p)o(vm\014nitsend\),)d(data)h (can)g(b)q(e)249 1288 y(transferred)h(b)q(et)o(w)o(een)f(t)o(w)o(o)e (64-bit)g(mac)o(hines)g(with)g(full)g(precision)h(ev)o(en)h(if)e(the)h (PVM)g(con\014guration)249 1342 y(is)k(heterogeneous.)249 1404 y(Messages)f(should)e(b)q(e)h(unpac)o(k)o(ed)f(exactly)h(as)f (they)h(w)o(ere)g(pac)o(k)o(ed)f(to)g(ensure)i(data)e(in)o(tegrit)o(y)m (.)16 b(P)o(ac)o(k-)249 1458 y(ing)10 b(in)o(tegers)i(and)f(unpac)o (king)f(them)g(as)h(\015oats)g(will)e(often)i(fail)e(b)q(ecause)k(a)d (t)o(yp)q(e)i(enco)q(ding)f(will)e(ha)o(v)o(e)249 1512 y(o)q(ccurred)k(transferring)f(the)g(data)f(b)q(et)o(w)o(een)i (heterogeneous)g(hosts.)18 b(P)o(ac)o(king)11 b(10)f(in)o(tegers)j(and) e(100)249 1566 y(\015oats,)j(then)g(trying)g(to)f(unpac)o(k)h(only)f(3) h(in)o(tegers)h(and)e(the)i(100)e(\015oats,)g(will)g(also)g(fail.)249 1678 y Fr(Examples)274 1744 y(C:)495 1798 y Fs(info)21 b(=)g(pvm_recv\()f(tid,)h(msgtag)g(\);)495 1852 y(info)g(=)g (pvm_upkstr\()f(string)g(\);)495 1906 y(info)h(=)g(pvm_upkint\()f (&size,)g(1,)i(1)f(\);)495 1960 y(info)g(=)g(pvm_upkint\()f(array,)g (size,)h(1)h(\);)495 2014 y(info)f(=)g(pvm_upkdouble\()e(matrix,)h (size*size,)g(1)i(\);)274 2068 y Fr(F)l(ortran:)495 2122 y Fs(CALL)f(PVMFRECV\()e(TID,)i(MSGTAG)g(\);)495 2176 y(CALL)g(PVMFUNPACK\()e(INTEGER4,)h(NSIZE,)h(1,)g(1,)g(INFO)g(\))495 2230 y(CALL)g(PVMFUNPACK\()e(STRING,)h(STEPNAME,)g(8,)i(1,)f(INFO)g(\)) 495 2284 y(CALL)g(PVMFUNPACK\()e(REAL4,)i(A\(5,1\),)f(NSIZE,)h(NSIZE)f (,)i(INFO)f(\))249 2391 y Fr(Errors)249 2462 y FA(The)14 b(follo)o(wing)e(error)i(conditions)g(can)g(b)q(e)h(returned)g(b)o(y)f Fs(pvm)p 1238 2462 14 2 v 15 w(upk*)p FA(.)p eop %%Page: 273 292 273 291 bop 249 251 a Fu(PVM)13 b(3)g(Routines)1255 b(273)274 504 y FA(Name)177 b(P)o(ossible)14 b(Cause)p 249 521 1293 2 v 274 559 a(PvmNoData)55 b(Reading)15 b(b)q(ey)o(ond)i(the)f (end)h(of)f(the)g(receiv)o(e)i(bu\013er.)26 b(Most)557 613 y(lik)o(ely)11 b(cause)j(is)e(trying)g(to)g(unpac)o(k)h(more)e (items)h(than)g(w)o(ere)557 667 y(originally)f(pac)o(k)o(ed)k(in)o(to)e (the)h(bu\013er.)274 721 y(PvmBadMsg)49 b(The)12 b(receiv)o(ed)h (message)e(cannot)h(b)q(e)h(deco)q(ded.)18 b(Most)12 b(lik)o(ely)557 775 y(b)q(ecause)25 b(the)f(hosts)f(are)h (heterogeneous)h(and)e(the)h(user)557 829 y(sp)q(eci\014ed)19 b(an)d(incompatible)f(enco)q(ding.)28 b(T)m(ry)17 b(setting)g(the)557 883 y(enco)q(ding)d(to)g(PvmDataDefault)d(\(see)k(p)o(vm)p 1269 883 13 2 v 14 w(mkbuf)s(\).)274 937 y(PvmNoBuf)80 b(There)15 b(is)f(no)f(activ)o(e)h(receiv)o(e)h(bu\013er)g(to)f(unpac)o (k.)p eop %%Page: 274 293 274 292 bop eop %%Page: 275 294 275 293 bop 249 260 a FD(Bibliograph)o(y)276 487 y Fy([1])20 b(R.)14 b(Butler)e(and)g(E.)h(Lusk.)20 b(Monitors,)12 b(messages,)g(and)g(clusters:)17 b(The)d(p4)e(parallel)g(programm)o (ing)e(system.)334 524 y(T)m(ec)o(hnical)g(Rep)q(ort)g(Preprin)o(t)g (MCS-P362-0493,)f(Argonne)h(National)g(Lab)q(oratory)m(,)f(Argonne,)h (IL,)h(1993.)276 578 y([2])20 b(L.E.)11 b(Cannon.)i(A)f(cellular)c (computer)g(to)i(implemen)o(t)e(the)i(k)n(alman)e(\014lter)h (algorithm.)j(Phd)e(thesis,)g(Mon)o(tana)334 615 y(State)h(Univ)o (ersit)o(y)m(,)e(1969.)276 669 y([3])20 b(Nic)o(holas)e(Carriero)g(and) h(Da)o(vid)f(Gelern)o(ter.)36 b(LIND)o(A)20 b(in)e(con)o(text.)36 b Fm(Communic)n(ations)21 b(of)f(the)g(A)o(CM)p Fy(,)334 707 y(32\(4\):444{45)o(8,)9 b(April)i(1989.)276 760 y([4])20 b(Da)o(vid)10 b(Cheriton.)j(VMTP:)e(Versatile)e(Message)g(Transaction)f (Proto)q(col.)13 b(RF)o(C)e(1045,)e(Stanford)f(Univ)o(ersit)o(y)m(,)334 798 y(F)m(ebruary)i(1988.)276 852 y([5])20 b(J.)10 b(W)m(ang)f(et.)f (al.)14 b(LSBA)m(TCH:)d(A)f(Distributed)d(Load)h(Sharing)f(Batc)o(h)i (System.)j(Csri)e(tec)o(hnical)c(rep)q(ort)i(#286,)334 889 y(Univ)o(ersit)o(y)i(of)h(T)m(oron)o(to,)f(April)i(1993.)276 943 y([6])20 b(J.)13 b(Flo)o(w)o(er,)f(A.)h(Kola)o(w)o(a,)f(and)g(S.)g (Bharadw)o(a)r(j.)k(The)c(Express)f(w)o(a)o(y)i(to)f(distributed)d(pro) q(cessing.)15 b Fm(Sup)n(er)n(c)n(om-)334 981 y(puting)f(R)n(eview)p Fy(,)e(pages)e(54{55,)g(Ma)o(y)i(1991.)276 1034 y([7])20 b(Message)11 b(P)o(assing)g(In)o(terface)e(F)m(orum.)15 b(Mpi:)g(A)e(message-pass)o(ing)8 b(in)o(terface)i(standard.)j (Computer)d(Science)334 1072 y(Dept.)e(Tec)o(hnical)f(Rep)q(ort)h (CS-94-230,)f(Univ)o(ersit)o(y)g(of)i(T)m(ennessee,)e(Kno)o(xville,)h (TN,)i(April)e(1994.)13 b(\(T)m(o)c(app)q(ear)334 1109 y(in)j(the)e(In)o(ternationa)o(l)f(Journal)h(of)h(Sup)q(ercompu)o(ter)d (Applications,)h(V)m(olume)h(8,)i(Num)o(b)q(ers)e(3/4,)g(1994\).)276 1163 y([8])20 b(G.)8 b(C.)g(F)m(o)o(x,)g(S.)f(W.)h(Otto,)h(and)d(A.)j (J.)f(G.)f(Hey)m(.)14 b(Matrix)7 b(algorithms)e(on)i(a)g(h)o(yp)q (ercub)q(e)e(I:)j(Matrix)f(m)o(ultiplicat)o(ion)o(.)334 1201 y Fm(Par)n(al)r(lel)14 b(Computing)p Fy(,)e(4:17{31,)e(1987.)276 1254 y([9])20 b(Da)o(vid)c(Gelern)o(ter)f(and)h(Da)o(vid)f(Kaminsky)m (.)30 b(Sup)q(ercompu)o(tin)o(g)14 b(out)i(of)h(recycled)d(garbage:)24 b(Preliminary)334 1292 y(exp)q(erience)12 b(with)i(Piranha.)21 b(In)14 b Fm(1992)i(International)g(Confer)n(enc)n(e)h(on)e(Sup)n(er)n (c)n(omputing)p Fy(,)j(pages)13 b(417{427.)334 1329 y(A)o(CM,)g(A)o(CM) g(Press,)e(July)g(1992.)259 1383 y([10])19 b(T.)d(Green)d(and)h(J.)h (Sn)o(yder.)22 b(DQS,)15 b(A)h(Distributed)c(Queuing)h(System.)23 b(Scri)14 b(tec)o(hnical)e(rep)q(ort)h(#92-115,)334 1421 y(Florida)d(State)h(Univ)o(ersit)o(y)m(,)e(August)i(1992.)259 1474 y([11])19 b(M.)13 b(Litzk)o(o)o(w,)e(M.)h(Livn)o(y)m(,)f(and)g(M.) h(Mutk)n(a.)k(Condor)11 b({)h(A)g(h)o(un)o(ter)f(of)g(idle)g(w)o (orkstations.)k(In)c Fm(Pr)n(o)n(c)n(e)n(e)n(dings)16 b(of)334 1512 y(the)e(Eighth)f(Confer)n(enc)n(e)i(on)e(Distribute)n(d)g (Computing)g(Systems)p Fy(,)e(San)g(Jose,)g(California,)e(June)i(1988.) 259 1566 y([12])19 b(John)11 b(K.)h(Ousterhout.)h Fm(Tcl)g(and)g(the)g (Tk)g(T)m(o)n(olkit)p Fy(.)j(Addison-W)m(esley)m(,)9 b(1994.)259 1620 y([13])19 b(J.)d(P)o(ostel.)26 b(T)m(ransmission)14 b(con)o(trol)f(proto)q(col.)25 b(RF)o(C)16 b(793,)g(Information)c (Sciences)h(Institute,)h(Septem)o(b)q(er)334 1657 y(1981.)259 1711 y([14])19 b(J.)12 b(P)o(ostel.)i(User)e(datagram)d(proto)q(col.)k (RF)o(C)f(768,)e(Information)e(Sciences)i(Institute,)f(Septem)o(b)q(er) f(1981.)259 1765 y([15])19 b(Daniel)9 b(A.)h(Reed,)e(Rob)q(ert)h(D.)g (Olson,)g(Ruth)g(A.)h(Aydt,)f(T)m(ara)h(M.)g(Madh)o(y)o(astha,)d (Thomas)h(Birk)o(ett,)h(Da)o(vid)f(W.)334 1802 y(Jensen,)k(Bobb)o(y)f (A.)i(A.)f(Nazief,)g(and)f(Brian)h(K.)h(T)m(ott)o(y)m(.)k(Scalable)10 b(p)q(erformance)f(en)o(vironmen)n(ts)h(for)h(parallel)334 1840 y(systems.)j(In)d(Quen)o(tin)f(Stout)f(and)i(Mic)o(hael)f(W)m (olfe,)g(editors,)g Fm(The)i(Sixth)h(Distribute)n(d)g(Memory)h (Computing)334 1877 y(Confer)n(enc)n(e)p Fy(,)g(pages)c(562{569.)f (IEEE,)i(IEEE)h(Computer)d(So)q(ciet)o(y)h(Press,)h(April)g(1991.)259 1931 y([16])19 b(Sun)11 b(Microsystems,)d(Inc.)15 b(XDR:)c(External)e (Data)i(Represen)o(tatio)o(n)d(Standard.)13 b(RF)o(C)f(1014,)d(Sun)i (Microsys-)334 1968 y(tems,)g(Inc.,)f(June)h(1987.)259 2022 y([17])19 b(Louis)11 b(T)m(urcotte.)j(A)f(surv)o(ey)d(of)h(soft)o (w)o(are)g(en)o(vironme)o(n)o(ts)e(for)i(exploiting)d(net)o(w)o(ork)o (ed)i(computing)f(resources.)334 2060 y(Draft)i(rep)q(ort,)f (Mississippi)g(State)g(Univ)o(ersit)o(y)m(,)g(Jac)o(kson,)f (Mississippi,)h(Jan)o(uary)g(1993.)p eop %%Page: 276 295 276 294 bop eop %%Page: 277 296 277 295 bop 249 218 a FD(Index)249 507 y Fy(A)m(TM,)13 b(5)249 586 y(b)q(ottlenec)o(k,)8 b(125)249 665 y(C)269 702 y(language)h(binding,)g(12)249 740 y(C++)269 777 y(language)g(binding,)g(12)249 814 y(c)o(hat)h(script,)h(107)249 852 y(commen)o(ts,)e(xvi)249 889 y(comp.parall)o(el.p)n(vm)o(,)g(xvi) 249 927 y(console)h(program,)f(124)249 964 y(con)o(trol)h(messages,)f (101)249 1001 y(Cra)o(y)i(Researc)o(h's)f(CS6400,)g(127)249 1039 y(cro)o(wd)h(computing,)d(33)249 1117 y(daemon,)h(12)249 1155 y(data)h(parallelism,)f(12)249 1192 y(debugging,)f(124,)j(157)269 1230 y(imallo)q(c,)e(160)269 1267 y(log,)i(161)269 1304 y(mask,)f(159)269 1342 y(p)o(vm)p 339 1342 11 2 v 11 w(setopt\(\),)g(159)269 1379 y(run)o(time,)f(159)269 1416 y(system,)h(158)269 1454 y(tic)o(kle,)g(159)249 1491 y(debugmask,)e(159)249 1528 y(DEC's)k(VMS,)g(140)249 1566 y(distributed)d(computing)o(,)g(1)249 1603 y(dynamic)g (con\014guration)o(,)g(50{51)249 1641 y(dynamic)g(pro)q(cess)h(groups,) g(60{62)249 1719 y(en)o(vironmen)n(t)f(v)n(ariables,)g(121)249 1757 y(ethernet,)g(4)249 1794 y(examples)269 1831 y(Cannon's)h (algorithm,)f(36)269 1869 y(dot)i(pro)q(duct,)e(68{73)269 1906 y(em)o(barrassing)o(ly)g(parallel,)g(34)269 1944 y(failure,)h(73{76)269 1981 y(fork)h(join,)f(63{68)269 2018 y(heat)g(equation,)f(83{89)269 2056 y(Mandelbrot,)g(34)269 2093 y(matrix)h(m)o(ultiply)m(,)f(36,)i(76{78)269 2130 y(tree)g(computati)o(ons,)d(37)249 2168 y(Express,)i(6,)h(7)249 2247 y(fault)f(detection,)f(106)249 2284 y(fault)h(tolerance,)f(113)249 2321 y(FDDI,)i(4)249 2359 y(\014le)g(descriptor,)e(125)249 2396 y(\014rew)o(all)i(mac)o(hines,)e(107)249 2433 y(F)m(ortran,)h(111) 269 2471 y(language)f(binding,)g(13)249 2508 y(functional)g (parallelism,)f(12)1119 507 y(Gan)o(tt)i(c)o(hart,)g(138)1119 545 y(getting)f(options,)h(52{53)1119 582 y(global)g(max,)g(62)1119 619 y(global)g(sum,)g(62)1119 657 y(Grand)g(Challenge)f(problems,)g(1) 1119 694 y(group)h(of)h(tasks,)f(14)1119 773 y(heterogene)o(it)o(y)m(,) e(2)1119 810 y(HiPPI,)j(4)1119 848 y(host)f(p)q(o)q(ol,)h(11)1119 885 y(host)f(table,)g(102)1119 922 y(host-no)q(de,)e(33)1119 960 y(hoster,)i(109)1119 997 y(host\014le,)f(23,)i(29)1119 1034 y(hostless,)e(129)1119 1113 y(IBM's)i(OS/2,)g(140)1119 1151 y(inplace)e(message,)h(126)1119 1188 y(In)o(tel)1139 1225 y(iPSC/860,)g(127,)g(129)1139 1263 y(P)o(aragon,)f(127,)i(128)1119 1300 y(In)o(tel)f(iPSC/860,)g(142)1119 1337 y(In)o(tel)g(NX)j(op)q (erating)8 b(system,)i(128)1119 1416 y(libfp)o(vm3.a)o(,)f(111)1119 1454 y(libgp)o(vm3.a)o(,)g(15)1119 1491 y(Linda,)h(6,)h(8)1139 1528 y(Pirhana,)e(8)1139 1566 y(tuple-space)o(,)g(8)1119 1645 y(m4,)h(111)1119 1682 y(mac)o(hine)f(con\014guratio)o(n,)f(102) 1119 1719 y(man)o(ual)h(startup,)h(107)1119 1757 y(massiv)o(ely)f (parallel)g(pro)q(cessors)h(MPP)m(,)i(1)1119 1794 y(master-sla)o(v)o(e) o(,)d(33)1119 1831 y(memory)g(limit,)h(125)1119 1869 y(message)1139 1906 y(maxim)o(um)e(size,)j(126)1119 1944 y(message)e(bu\013ers,)h(53{55)1119 1981 y(message)f(passing,)h(1,)h (53)1119 2018 y(message)e(routing,)h(117)1119 2056 y(MID,)h(98)1119 2093 y(MPI,)g(6{7)1119 2130 y(MPP)m(,)h(129)1119 2168 y(MPSD,)f(41)1119 2205 y(m)o(ulticast)e(address,)g(121)1119 2242 y(m)o(ulticastin)o(g,)g(120)1119 2280 y(m)o(ultiple)g(consoles,)g (28)1119 2317 y(m)o(ultipro)q(ce)o(ssor)f(systems,)i(126)1119 2355 y(m)o(ultipro)q(ce)o(ssors,)e(142)1119 2433 y(netlib,)h(135)1119 2471 y(no)q(de-only)m(,)f(33)1119 2508 y(non-Unix)i(systems,)f(140)p eop %%Page: 278 297 278 296 bop 249 251 a Fu(278)1443 b(Index)249 507 y Fy(Ousterhout,)9 b(135)249 545 y(o)o(v)o(erhead,)g(113)249 624 y(P4,)i(6)249 661 y(P)o(ablo,)f(137)249 698 y(pac)o(king)f(data,)i(55{56)249 736 y(passw)o(ord,)f(107)249 773 y(p)q(orting)g(existing)f (applications,)f(43{44)249 810 y(p)q(orting)i(PVM,)i(139)249 848 y(prob)q(e)e(function,)f(59)249 885 y(pro)q(cess)h(con)o(trol,)f (46)249 922 y(pro)q(cesses)269 960 y(limit,)h(125)249 997 y(proto)q(col)269 1034 y(p)o(vmd-p)o(vmd)o(,)f(106,)h(112)269 1072 y(p)o(vmd-task,)e(116)269 1109 y(task-task,)h(116)269 1147 y(TCP)m(,)k(112)269 1184 y(UDP)m(,)f(112)269 1221 y(VMTP)m(,)h(112)249 1259 y(proto)q(cols,)c(112{117)249 1296 y(PVM)269 1333 y(computing)f(mo)q(del,)i(12)269 1371 y(console,)g(27{28)269 1408 y(deamon,)f(101{110)269 1445 y(GUI,)i(135)269 1483 y(host)g(\014le,)f(29{30)269 1520 y(instance)f(n)o(um)o(b)q(er,)h(15)269 1558 y(PVM)p 353 1558 11 2 v 13 w(AR)o(CH,)j(20)269 1595 y(PVM)p 353 1595 V 13 w(R)o(OOT,)g(20)269 1632 y(running)c(programs,)g(25{26)269 1670 y(setup,)h(19{20)269 1707 y(signal)g(handlers,)f(101)269 1744 y(starting,)g(22{24)269 1782 y(TID,)j(14)249 1819 y(PVM)p 333 1819 V 14 w(AR)o(CH,)g(122)249 1856 y(PVM)p 333 1856 V 14 w(DEBUGGER,)f(121)249 1894 y(PVM)p 333 1894 V 14 w(DP)m(A)m(TH,)h(121)249 1931 y(PVM)p 333 1931 V 14 w(EXPOR)m(T,)g(121)249 1968 y(PVM)p 333 1968 V 14 w(R)o(OOT,)g(121)249 2006 y(p)o(vmd,)e(12)269 2043 y(connecting,)e(111) 269 2081 y(delete)i(hosts,)g(102)269 2118 y(direct)g(message)g (routing,)f(119)269 2155 y(dynamic)g(memory)m(,)g(125)269 2193 y(foreign)h(tasks,)g(118)269 2230 y(libp)o(vmd,)f(119)269 2267 y(message)h(routing,)f(117)269 2305 y(messages,)g(98)269 2342 y(MPP)m(,)j(128)269 2379 y(pac)o(k)o(et)e(bu\013ers,)f(117)269 2417 y(pac)o(k)o(et)h(routing,)f(117)269 2454 y(refragmen)o(ta)o(tio)o (n,)g(118)269 2492 y(sh)o(utdo)o(wn,)h(102)1139 507 y(sla)o(v)o(e,)g (107)1139 545 y(startup,)f(101)1139 582 y(task)h(limit,)g(126)1139 619 y(task)g(manager,)f(104)1139 657 y(w)o(ait)i(con)o(text,)e(105)1119 694 y(p)o(vmd',)g(106)1119 731 y(p)o(vmd-task,)f(125,)j(126)1119 769 y(p)o(vmd3,)e(12)1119 806 y(PVMEPID,)j(122)1119 844 y(PVMSOCK,)h(122)1119 881 y(PVMTMASK,)g(122)1119 960 y(questions,)c(xvi)1119 1039 y(receiving)g(data,)h(57{59)1119 1076 y(reduction)f(op)q(eration,)f(62)1119 1113 y(Reed,)i(137)1119 1151 y(resoruce)f(limitations,)g(125{126)1119 1188 y(resource)g (manager,)g(109)1119 1225 y(rexec,)h(107)1119 1263 y(rlogin,)g(107)1119 1300 y(rsh,)h(107)1119 1379 y(scalabilit)o(y)m(,)d(112)1119 1416 y(SDDF,)j(137)1119 1454 y(self)g(de\014ning)e(data)h(format,)g (137)1119 1491 y(sending)f(data,)i(57{59)1119 1528 y(service)f(no)q (des,)g(128)1119 1566 y(setting)g(options,)f(52{53)1119 1603 y(shado)o(w)h(p)o(vmd,)g(106)1119 1641 y(shared)g(memory)m(,)f (130)1119 1678 y(signaling,)g(51)1119 1715 y(Solaris,)g(127)1119 1753 y(SONET,)j(5)1119 1790 y(SPMD,)f(12)1119 1827 y(SPMD)g(program,)e (129)1119 1865 y(standard)g(I/O,)i(122)1119 1902 y(stderr,)f(48)1119 1939 y(stdout,)f(48)1119 1977 y(Sun)h(Microsystems,)f(127)1119 2056 y(task,)h(11)1119 2093 y(task-task,)f(126)1119 2130 y(TCL/TK,)k(135)1119 2168 y(telnet,)c(107)1119 2205 y(Thinking)h(Mac)o (hine's)f(CM-5,)j(127,)f(142)1119 2242 y(trace)f(ev)o(en)o(ts,)g(47) 1119 2280 y(tracing,)f(124,)i(157)1119 2317 y(tree)f(computation)o(,)f (33)1119 2355 y(troublesho)q(o)o(tin)o(g)1139 2392 y(startup)g (problems,)g(24)1119 2471 y(Unix)i(w)o(orkstations,)e(140)1119 2508 y(unpac)o(king)f(data,)i(59{60)p eop %%Page: 279 298 279 297 bop 249 251 a Fu(Index)1443 b(279)249 507 y Fy(user)11 b(output,)e(48)249 586 y(virtual)h(mac)o(hine,)f(1)249 665 y(w)o(orkload)269 702 y(data)h(decomp)q(ositio)o(n,)f(40{41)269 740 y(function)g(decomp)q(ositio)o(n,)f(41{43)249 777 y(wrapp)q(er)i(functions,)f(111)249 856 y(XDR,)j(56)249 893 y(XPVM,)h(23,)e(135{139)269 931 y(net)o(w)o(ork)f(view,)h(137{138) 269 968 y(space-time)e(view,)i(138)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF