New version of 1sided chapter (sent the old way, as the server at

Marc Snir (SNIR@watson.ibm.com)
Fri, 13 Sep 1996 11:15:48 -0400

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
Content-type: text/plain; charset=us-ascii

%!PS-Adobe-2.0
%%Creator: dvips 5.47 (RS/6000 1.0) Copyright 1986-91 Radical Eye Software
%%Title: temp.dvi
%%Pages: 34 1
%%BoundingBox: 0 0 612 792
%%EndComments
%%BeginProcSet: tex.pro
/TeXDict 250 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 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}N /eop{clear SI restore
showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
known{start-hook}if /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}N /p /show load 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 statusdict begin /product where{pop product dup length 7 ge{0
7 getinterval(Display)eq}{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 /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{clear 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 false N /BBcalc false N
/p 3 def}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{
@scaleunit div /vsc X}B /@hsize{/hs X /CLIP true N}B /@vsize{/vs X /CLIP true
N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X}
B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X /BBcalc true N}B
/magscale true def end /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{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}N /psfts{S 65536 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}N /@setspecial{CLIP{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 BBcalc{rwi urx llx sub div dup scale llx neg lly neg
TR}if /showpage{}N /erasepage{}N /copypage{}N newpath}N /@endspecial{grestore
clear 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 1000 300 300 @start /Fa 1 1 df<FFFFC0FFFFC012027D871A>0
D E /Fb 3 62 df<03060C1C183830706060E0E0E0E0E0E0E0E0E0E06060703038181C0C060308
1E7E950D>40 D<C0603038181C0C0E06060707070707070707070706060E0C1C18383060C0081E
7E950D>I<7FFFE0FFFFF0000000000000000000000000000000000000FFFFF07FFFE0140A7E8B
19>61 D E /Fc 6 113 df<0C000C001C003C00FC004C000C000C000C000C000C000C000C000C
000C000C007FC07FC00A127E910F>49 D<7C00FF00E380418001801F807F80E180C180C180E380
7FF03CF00C0D7E8C0F>97 D<0E000E000E000000000000007E007E000600060006000600060006
00060006000600FFE0FFE00B137E920F>105 D<0380038003800000000000003F803F80018001
80018001800180018001800180018001800180018001804180E380FF007C0009197F920F>I<FE
E0FFF03BB033303330333033303330333033303330FFFCFFFC0E0D808C0F>109
D<F780FFC038E0387030303030303030303030387038E03FC037003000300030003000FC00FC00
0C137F8C0F>112 D E /Fd 1 81 df<FFFFFFFFE0FFFFFFFFF07800001FF07C000003F03E0000
00F81F000000380F0000001C0F8000000C07C000000C03C000000603E000000001F000000000F8
0000000078000000007C000000003E000000001E000000001F000000000F8000000007C0000000
03C000000003C000000001800000000380000000030000000006000000000C0000000018000000
00380000000030000000006000000000C0000006018000000C038000000C030000001C06000000
380C000000F818000001F83800001FF03FFFFFFFF07FFFFFFFF0FFFFFFFFE0272A7E7F2C>80
D E /Fe 38 123 df<FFE0FFE0FFE00B037F8C10>45 D<F0F0F0F004047B830E>I<00C001C007
C0FFC0FFC0FBC003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C0
03C003C003C003C003C003C003C003C003C0FFFFFFFFFFFF10227CA118>49
D<03F0000FFC001FFE003C1F003807807007C07003C0F003E0E001E06001E02001E00001E00001
E00001E00003C00003C0000780000780000F00001E00003C0000780000F00001E00001C0000380
000700000E00001C0000380000700000FFFFE0FFFFE0FFFFE013227EA118>I<01F00007FC001F
FF003E0F003807807003C02003C02003C00003C00003C00003C0000780000780000F00001E0003
FC0003F80003FE00000F000007800003C00003C00001E00001E00001E00001E00001E08001E0C0
03C0E003C07007803C0F801FFF000FFC0003F00013237EA118>I<001F00001F00002F00002F00
006F0000EF0000CF0001CF0001CF00038F00038F00078F00070F000F0F000E0F001E0F003C0F00
3C0F00780F00780F00F00F00FFFFF8FFFFF8FFFFF8000F00000F00000F00000F00000F00000F00
000F00000F00000F0015217FA018>I<3FFF803FFF803FFF803C00003C00003C00003C00003C00
003C00003C00003C00003C00003CF8003FFE003FFF003F0F803E07803C03C03803C00001E00001
E00001E00001E00001E00001E00001E04003C04003C0E003C07007807C1F003FFE000FFC0003F0
0013227EA018>I<001F0000001F0000003F8000003F8000003B8000007BC0000073C0000071C0
0000F1E00000F1E00000E0E00001E0F00001E0F00001C0F00003C0780003C07800038078000780
3C0007803C0007003C000F001E000F001E000FFFFE001FFFFF001FFFFF001C000F003C0007803C
00078038000780780003C0780003C0700003C0F00001E0F00001E0E00001E01B237EA220>65
D<FFFC00FFFF80FFFFC0F007F0F001F0F00078F0003CF0003CF0003CF0003CF0003CF00038F000
78F000F0F003E0FFFFC0FFFF00FFFFC0F00FE0F001F8F00078F0003CF0001CF0001EF0001EF000
1EF0001EF0001EF0003CF0007CF000F8F003F0FFFFE0FFFFC0FFFE0017237BA220>I<000FF000
007FFC0000FFFF0001F01F0003C00700078002000F0000001E0000003E0000003C0000003C0000
00780000007800000078000000F0000000F0000000F0000000F0000000F0000000F0000000F000
0000F0000000F00000007800000078000000780000003C0000003C0000003E0000001E0000000F
0000800780018003C0038001F00F8000FFFF00007FFC00000FF00019257DA31F>I<FFFFF0FFFF
F0FFFFF0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00FFFFE0FFFFE0FFFFE0F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000FFFFF8FFFFF8FFFFF815237BA21D>69 D<FFFFF0FFFFF0FFFFF0
F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
FFFFC0FFFFC0FFFFC0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
F00000F00000F00000F00000F00000F0000014237BA21C>I<000FF000003FFE0000FFFF8001F8
1F8003E00780078001000F0000001E0000001E0000003C0000003C000000780000007800000078
000000F0000000F0000000F0000000F0000000F0000000F0000000F000FFC0F000FFC0F000FFC0
780003C0780003C0780003C03C0003C03C0003C01E0003C01E0003C00F0003C0078003C003E003
C001F80FC000FFFFC0003FFF00000FF8001A257DA321>I<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237CA20D>73 D<F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000FFFFC0FFFFC0FFFFC012237BA21A>76 D<001FC000007FF00001FFFC0003F07E
0007C01F000F800F801F0007C01E0003C03C0001E03C0001E0780000F0780000F0780000F07000
0070F0000078F0000078F0000078F0000078F0000078F0000078F0000078F0000078F000007878
0000F0780000F0780000F07C0001F03C0001E03E0003E01E0003C01F0007C00F800F8007C01F00
03F07E0001FFFC00007FF000001FC0001D257DA324>79 D<FFFE00FFFF80FFFFC0F003E0F000F0
F00078F00078F0003CF0003CF0003CF0003CF0003CF0003CF00078F00078F000F0F003E0FFFFC0
FFFF80FFFE00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
F00000F00000F00000F0000016237BA21F>I<FFFC00FFFF80FFFFC0F003E0F000F0F00078F000
38F0003CF0003CF0003CF0003CF0003CF00038F00078F000F0F003E0FFFFC0FFFF80FFFE00F01E
00F00F00F00700F00780F00380F003C0F001E0F001E0F000F0F000F0F00078F00038F0003CF000
1EF0001EF0000F18237BA21F>82 D<07E01FF83FFC3C1E301E200F000F000F000F01FF0FFF3FFF
7F0F780FF00FF00FF00FF80F7C3F7FFF3FFF1F8F10167E9517>97 D<01FC0007FF000FFF801F07
803C0180780000780000700000F00000F00000F00000F00000F00000F000007800007800007800
403C00C01F07C00FFFC007FF8001FC0012167E9516>99 D<0003C00003C00003C00003C00003C0
0003C00003C00003C00003C00003C00003C00003C00003C003F3C00FFFC01FFFC03F0FC03C07C0
7803C07803C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C07803C07803C03C07C0
3E0FC01FFFC00FFBC003E3C012237EA219>I<03F00007FC001FFE003E0F003C07807803807803
80F001C0FFFFC0FFFFC0FFFFC0F00000F00000F000007000007800007800003C00801F07800FFF
8007FF0001F80012167E9516>I<01F0F807FFF80FFFF81F1F801E0F003C07803C07803C07803C
07803C07801E0F001F1F001FFE001FFC0039F0003800003800003C00003FFE001FFFC01FFFE03F
FFF07801F0F800F8F00078F00078F00078F000787800F03E03E01FFFC00FFF8001FC0015217F95
18>103 D<F000F000F000F000F000F000F000F000F000F000F000F000F000F1F8F7FCFFFEFE1E
F80FF80FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F10237C
A219>I<F0F0F0F0000000000000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
04237DA20B>I<F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F01F80F03F00F03E00F07C00F0F800F1F000F3E000F7C000FFC000FFC000FFE0
00FFE000FDF000F8F800F07800F07C00F03E00F01E00F01F00F00F00F00F80F007C012237CA218
>107 D<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
04237DA20B>I<F0F807C0F3FE1FF0FFFF7FF8FE0FF078FC0FE07CF807C03CF807C03CF007803C
F007803CF007803CF007803CF007803CF007803CF007803CF007803CF007803CF007803CF00780
3CF007803CF007803CF007803CF007803C1E167C9529>I<F1F8F7FCFFFEFE1EF80FF80FF00FF0
0FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F10167C9519>I<01FC00
07FF000FFF801F07C03C01E07800F07800F0700070F00078F00078F00078F00078F00078F00078
7800F07800F07C01F03E03E01F07C00FFF8007FF0001FC0015167F9518>I<F1F000F7FC00FFFE
00FC3F00F80F00F00780F00780F007C0F003C0F003C0F003C0F003C0F003C0F003C0F007C0F007
80F00F80F80F00FC3E00FFFE00F7F800F3F000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F0000012207C9519>I<F0E0F3E0F7E0FFE0FF00FC00F800F800F000F000F000
F000F000F000F000F000F000F000F000F000F000F0000B167C9511>114
D<07F01FFE3FFF3C0F7803780078007C003F003FF01FF80FFC01FE001F000F000F400FE00FF81E
FFFE3FFC0FF010167F9513>I<0F000F000F000F000F000F00FFF8FFF8FFF80F000F000F000F00
0F000F000F000F000F000F000F000F000F000F000F080F1C07FC07F803E00E1C7F9B12>I<F00F
F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF01FF83F7FFF7F
EF1F8F10167C9519>I<7801F07C01E03E03C01E07C00F0780078F0007DE0003FC0001FC0000F8
0000700000F80001FC0003DC00039E00078F000F07801E07801E03C03C01E07800F0F800F81516
809516>120 D<F001E0F001E07803C07803C07C03C03C07803C07801E07801E07001E0F000F0F
000F0E00071E00079E00039C00039C00039C0001980001D80000F80000F00000F00000F00000E0
0000E00001E00001C00001C0004380007F80007F00007E000013207F9516>I<7FFFC07FFFC07F
FFC0000F80000F00001E00003E00007C0000780000F00001F00003E00003C0000780000F80001F
00001E00003C00007C0000FFFFC0FFFFC0FFFFC012167F9515>I E /Ff
5 103 df<70F8F8F87005057C840D>58 D<70F8FCFC7C0C0C0C181838306040060E7C840D>I<00
F18003FDC0078F800E07801C07803C07803C0700780700780700780700F00E00F00E00F00E00F0
0E18F01C30F03C30707C3078FC603FCFC00F078015147E9318>97 D<07803F803F000700070007
000E000E000E000E001C001C001CF01FFC3F1E3E0E3C0F380F700F700F700F700FE01EE01EE01E
E03CE03CE038607071E03FC01F0010207E9F14>I<00007C0000FE00019E00039E00030C000700
000700000700000700000E00000E00000E0000FFF001FFF0000E00001C00001C00001C00001C00
001C0000380000380000380000380000380000700000700000700000700000700000E00000E000
00E00000E00000C00001C00031C000798000F300007E00003C000017297E9F16>102
D E /Fg 17 119 df<387CFEFEFE7C3800000000387CFEFEFE7C3807127D910D>58
D<00038000000380000007C0000007C0000007C000000FE000000FE000001FF000001BF000001B
F0000031F8000031F8000061FC000060FC0000E0FE0000C07E0000C07E0001803F0001FFFF0003
FFFF8003001F8003001F8006000FC006000FC00E000FE00C0007E0FFC07FFEFFC07FFE1F1C7E9B
24>65 D<FFFFF800FFFFFF000FC01FC00FC007E00FC003F00FC001F80FC001F80FC000FC0FC000
FC0FC000FC0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC0
00FC0FC000FC0FC000FC0FC001F80FC001F80FC003F00FC007E00FC01FC0FFFFFF00FFFFF8001F
1C7E9B25>68 D<FFC00003FFFFE00007FF0FE00007F00DF0000DF00DF0000DF00DF0000DF00CF8
0019F00CF80019F00C7C0031F00C7C0031F00C3E0061F00C3E0061F00C1F00C1F00C1F00C1F00C
1F00C1F00C0F8181F00C0F8181F00C07C301F00C07C301F00C03E601F00C03E601F00C01FC01F0
0C01FC01F00C01FC01F00C00F801F00C00F801F0FFC0701FFFFFC0701FFF281C7E9B2D>77
D<0FF8001FFE003E1F803E07803E07C01C07C00007C003FFC01FFFC03F87C07E07C0FC07C0FC07
C0FC07C0FC0FC07E1FC03FFBF80FE1F815127F9117>97 D<03FC000FFE001F1F003E1F007C1F00
7C0E00FC0000FC0000FC0000FC0000FC0000FC00007C00007E01803E03801F07000FFE0003F800
11127E9115>99 D<01FC000FFF001F0F803E07C07C03C07C03E0FC03E0FFFFE0FFFFE0FC0000FC
0000FC00007C00007E00603E00C01F81C00FFF0001FC0013127F9116>101
D<03F0F00FFFF83E1F383C0F307C0F807C0F807C0F807C0F803C0F003E1F001FFC0033F0003000
007000003800003FFF003FFFC01FFFE03FFFF07801F8F00078F00078F000787800F03E03E01FFF
C003FE00151B7F9118>103 D<1E003F003F007F003F003F001E0000000000000000000000FF00
FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F9D0E
>105 D<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C0E>108
D<FF1FC0FF7FE01FE1F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
F81F00F81F00F81F00F8FFE7FFFFE7FF18127F911B>110 D<01FC000FFF801F07C03E03E07C01
F07C01F0FC01F8FC01F8FC01F8FC01F8FC01F8FC01F87C01F07C01F03E03E01F07C00FFF8001FC
0015127F9118>I<FE3E00FE7F001ECF801F8F801F8F801F07001F00001F00001F00001F00001F
00001F00001F00001F00001F00001F0000FFF000FFF00011127F9114>114
D<1FD83FF87038E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CF038FFF0CFC00E12
7E9113>I<030003000300070007000F000F003F00FFFCFFFC1F001F001F001F001F001F001F00
1F001F001F0C1F0C1F0C1F0C0F9807F003E00E1A7F9913>I<FF07F8FF07F81F00F81F00F81F00
F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F01F80F03F80FFEFF03F8
FF18127F911B>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003E30001
F60001F60001FE0000FC0000FC0000780000780000300016127F9119>I
E /Fh 38 119 df<00E001C0038007000E000E001C001C003800380038007000700070007000E0
00E000E000E000E000E000E000E000E000E000E000E00070007000700070003800380038001C00
1C000E000E000700038001C000E00B2A7E9E10>40 D<E000700038001C000E000E000700070003
800380038001C001C001C001C000E000E000E000E000E000E000E000E000E000E000E000E001C0
01C001C001C0038003800380070007000E000E001C0038007000E0000B2A7E9E10>I<018001C0
018001806186F99F7DBE1FF807E007E01FF87DBEF99F61860180018001C0018010127E9E15>I<
7878787838307060E005097D830C>44 D<7FFFFFC0FFFFFFE00000000000000000000000000000
000000000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61
D<001C0000003E0000003E0000002E0000006700000067000000E7800000C7800000C3800001C3
C0000183C0000181C0000381E0000381E0000700F0000700F0000600F0000E0078000FFFF8000F
FFF8001FFFFC001C003C0018003C0038001E0038001E0070001F0070000F0070000F00E0000780
191D7F9C1C>65 D<003FC000FFF003FFF007C0700F80001E00003E00003C000078000078000078
0000F00000F00000F00000F00000F00000F00000F00000F00000F000007800007800007800003C
00003E00001E00000F800807C07803FFF800FFF0003F80151F7D9D1B>67
D<FFFC00FFFF00FFFF80F00FE0F003F0F000F0F00078F00078F0003CF0003CF0001CF0001EF000
1EF0001EF0001EF0001EF0001EF0001EF0001EF0003CF0003CF0007CF00078F000F0F001F0F007
E0FFFFC0FFFF00FFFC00171D7C9C1E>I<FFFFC0FFFFC0FFFFC0F00000F00000F00000F00000F0
0000F00000F00000F00000F00000FFFF80FFFF80FFFF80F00000F00000F00000F00000F00000F0
0000F00000F00000F00000F00000F00000FFFFC0FFFFC0FFFFC0121D7C9C19>I<003F8001FFF0
03FFF807C0F80F00181E00003E00003C0000780000780000780000F00000F00000F00000F00000
F00000F00000F007F8F007F8F007F87800387800387800383C00383E00381E00380F003807C078
03FFF801FFF0003F80151F7D9D1C>71 D<F000F0F000F0F000F0F000F0F000F0F000F0F000F0F0
00F0F000F0F000F0F000F0F000F0FFFFF0FFFFF0FFFFF0F000F0F000F0F000F0F000F0F000F0F0
00F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0141D7C9C1D>I<F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0041D7C9C0C>I<F0003CF00078F000F0
F001E0F003C0F00780F00F00F01E00F03C00F07800F0F000F0E000F1F000F3F000F77800FE7C00
FC3C00FC1E00F81F00F00F00F00F80F00780F003C0F003E0F001E0F000F0F000F0F00078F0007C
161D7C9C1D>75 D<F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F0
00F000F000F000F000F000F000F000F000F000F000FFFEFFFEFFFE0F1D7C9C16>I<FC0007E0FC
0007E0FC0007E0EE000DE0EE000DE0EE000DE0E70019E0E70019E0E70019E0E78039E0E38031E0
E3C071E0E3C071E0E1C061E0E1C061E0E1E0E1E0E1E0E1E0E0E0C1E0E0F1C1E0E07181E0E07181
E0E07181E0E03B01E0E03B01E0E03B01E0E01E01E0E01E01E0E01E01E0E00001E01B1D7C9C24>
I<FC0070FC0070FE0070EE0070EF0070E70070E70070E78070E38070E3C070E3C070E1E070E1E0
70E0E070E0F070E07070E07870E07870E03C70E03C70E01C70E01E70E00E70E00E70E00F70E007
70E007F0E003F0E003F0141D7C9C1D>I<003F000001FFE00003FFF00007C0F8000F807C001E00
1E003E001F003C000F00780007807800078078000780F00003C0F00003C0F00003C0F00003C0F0
0003C0F00003C0F00003C0F00003C0F80007C078000780780007807C000F803C000F003E001F00
1F003E000F807C0007C0F80003FFF00001FFE000003F00001A1F7E9D1F>I<FFFC00FFFF00FFFF
80F007C0F003E0F001E0F000F0F000F0F000F0F000F0F000F0F001E0F003E0F007C0FFFF80FFFF
00FFFC00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00141D7C9C1B>I<FFF800FFFF00FFFF80F007C0F001E0F000E0F000F0F000F0F000F0F000F0F0
00E0F001E0F007C0FFFF80FFFF00FFF800F03C00F01C00F01E00F00F00F00F00F00780F00780F0
03C0F003C0F001E0F000F0F000F0F00078151D7C9C1B>82 D<03F8000FFE001FFF003E0F007803
00780000F00000F00000F00000F00000F800007C00007F00003FE0001FFC0007FE0001FF00001F
800007800007C00003C00003C00003C00003C00003C0C00780E00780FC1F007FFE001FFC0007F0
00121F7E9D17>I<FFFFFF80FFFFFF80FFFFFF80001E0000001E0000001E0000001E0000001E00
00001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E
0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E000000
1E0000001E0000191D7F9C1C>I<F00070F00070F00070F00070F00070F00070F00070F00070F0
0070F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070F0
0070F000F07800E07801E03C03C01F07800FFF8007FE0001F800141E7C9C1D>I<F0000380F000
03807800070078000700780007003C000E003C000E003E000E001E001C001E001C000F0038000F
0038000F003800078070000780700003C0600003C0E00003C0E00001E0C00001E1C00001E1C000
00F1800000F380000073000000730000007B0000003E0000003E0000001C0000191D7F9C1C>I<
F000F00070F000F80070F000F800707800B8006078019C00E078019C00E078019C00E03C039C01
C03C031E01C03C030E01C01E030E01801E070F03801E070F03801E060F03800F060703000F0E07
87000F0C078700070C038600070C038600079C038E00079803CE00039801CC00039801CC000398
01CC0001D001C80001D000D80001F000F80001E000F80000E0007000241D7F9C27>I<78000E00
7C001E003C003C001E0038000F0070000F00F0000781E00003C1C00001C3C00001E7800000F700
00007E0000003E0000003C0000003C0000007E00000077000000E7800001E3800003C1C0000381
E0000700F0000F00F8000E0078001C003C003C003E0078001F0070000F00F0000F80191D7F9C1C
>I<7FFFF07FFFF07FFFF00001E00003C00007C0000780000F80001F00001E00003E00003C0000
780000F80000F00001F00001E00003C00007C0000780000F80001F00001E00003E00003C000078
0000FFFFF0FFFFF0FFFFF0141D7E9C19>90 D<0FC03FF07FF87038401C001C001C00FC0FFC3FFC
781CE01CE01CE01CF07C7FFC7FDC3F1C0E127E9114>97 D<000E000E000E000E000E000E000E00
0E000E000E000E0F8E1FEE3FFE7C3E700E700EE00EE00EE00EE00EE00EE00EF00E701E7C3E3FFE
1FEE0F8E0F1D7E9C15>100 D<07C01FE03FF078787018601CFFFCFFFCFFFCE000E000E0007000
70043C1C3FFC1FF807E00E127E9112>I<F0F0F0F0000000000000007070707070707070707070
70707070707070041D7E9C0A>105 D<E000E000E000E000E000E000E000E000E000E000E000E0
3CE078E0F0E1E0E3C0E780EF00FF00FF80FB80F9C0F1E0E0E0E0F0E078E038E03CE01E0F1D7D9C
14>107 D<E3E0EFF0FFF8F83CF01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C
E01C0E127D9115>110 D<03F0000FFC001FFE003C0F00780780700380E001C0E001C0E001C0E0
01C0E001C0F003C07003807807803C0F001FFE000FFC0003F00012127F9115>I<E380E780EF80
FC00F800F000F000E000E000E000E000E000E000E000E000E000E000E00009127D910E>114
D<1FC03FF07FF0F030E000E000F0007F003FC01FE000F0003800388038F078FFF07FE01FC00D12
7F9110>I<1C001C001C001C001C001C00FFE0FFE0FFE01C001C001C001C001C001C001C001C00
1C001C001C001C201FF00FF007C00C187F970F>I<E01CE01CE01CE01CE01CE01CE01CE01CE01C
E01CE01CE01CE01CE01CE07CFFFC7FDC3F1C0E127D9115>I<E007E0077006700E700E381C381C
381C1C381C381C380E700E700660076007E003C003C010127F9113>I E
/Fi 1 64 df<000600000006000000060000000600000006000000060000000600000006000000
060000000600000006000000060000000600000006000000060000000600000006000000060000
0006000000060000000600000006000000060000000600000006000000060000FFFFFFF0FFFFFF
F01C1C7E9B21>63 D E /Fj 52 123 df<003F0F0000FFBF8003C3F3C00703E3C00703C1800E01
C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC00FFFFFC000E01C0000E01C0000E
01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
0E01C0000E01C0007F87FC007F87FC001A1D809C18>11 D<003FC000FFC003C3C00703C00701C0
0E01C00E01C00E01C00E01C00E01C00E01C0FFFFC0FFFFC00E01C00E01C00E01C00E01C00E01C0
0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF87FCFF8151D809C17>
13 D<7070F8F8FCFCFCFC7C7C0C0C0C0C0C0C181818183030606040400E0D7F9C15>34
D<00C00180030006000E000C001C0018003800300030007000700060006000E000E000E000E000
E000E000E000E000E000E000E000E000600060007000700030003000380018001C000C000E0006
000300018000C00A2A7D9E10>40 D<C0006000300018001C000C000E0006000700030003000380
03800180018001C001C001C001C001C001C001C001C001C001C001C001C0018001800380038003
000300070006000E000C001C00180030006000C0000A2A7E9E10>I<70F0F8F878181818303070
6040050D7D840C>44 D<FFE0FFE0FFE00B0380890E>I<70F8F8F87005057D840C>I<030007003F
00FF00C70007000700070007000700070007000700070007000700070007000700070007000700
0700070007000700FFF8FFF80D1C7C9B15>49 D<07C01FF03878603C601EF01EF80FF80FF80F70
0F000F000E001E001C003C0078007000E001C0038007000E030C03180330067FFEFFFEFFFE101C
7E9B15>I<07E01FF03838301C781E781E781E381E001E003C0038007007E007E00038001C001E
000E000F000F700FF80FF80FF80EF01E601C38381FF007C0101D7E9B15>I<70F8F8F870000000
000000000070F8F8F87005127D910C>58 D<0FE03FF8703C601CF01EF01EF01E001E003C007800
E001C001800380030003000300030003000200000000000000000007000F800F800F8007000F1D
7E9C14>63 D<00060000000F0000000F0000000F0000001F8000001F8000001F8000001F800000
33C0000033C0000033C0000061E0000061E0000061E00000C0F00000C0F00000C0F00001807800
0180780001FFF80003FFFC0003003C0003003C0006001E0006001E0006001E001F001F00FFC0FF
F0FFC0FFF01C1D7F9C1F>65 D<FFFFC000FFFFF0000F007C000F001E000F000F000F0007000F00
03800F0003C00F0003C00F0001C00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F
0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007800F000F000F001E000F007C00
FFFFF000FFFFC0001B1C7E9B20>68 D<FFFFF8FFFFF80F00780F00380F00180F001C0F000C0F00
0C0F030C0F030C0F03000F03000F07000FFF000FFF000F07000F03000F03000F03000F03000F00
000F00000F00000F00000F00000F0000FFF800FFF800161C7E9B1B>70 D<FFF0FFF00F000F000F
000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
0F000F00FFF0FFF00C1C7F9B0F>73 D<FF8000FF80FFC001FF800FC001F8000FC001F8000DE003
78000DE00378000DE00378000CF00678000CF00678000CF00678000C780C78000C780C78000C78
0C78000C3C1878000C3C1878000C3C1878000C1E3078000C1E3078000C1E3078000C0F6078000C
0F6078000C0F6078000C07C078000C07C078000C07C078001E03807800FFC387FF80FFC387FF80
211C7E9B26>77 D<FF00FFC0FF80FFC00F801E000FC00C000FC00C000DE00C000CF00C000CF00C
000C780C000C780C000C3C0C000C1E0C000C1E0C000C0F0C000C0F0C000C078C000C07CC000C03
CC000C01EC000C01EC000C00FC000C00FC000C007C000C003C000C003C001E001C00FFC01C00FF
C00C001A1C7E9B1F>I<003F800000FFE00003E0F80007803C000E000E001E000F003C00078038
000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0
F00001E0F00001E0780003C0780003C0780003C03C0007803C0007801E000F000F001E0007803C
0003E0F80000FFE000003F80001B1E7E9C20>I<FFFF0000FFFFE0000F00F0000F0038000F003C
000F001E000F001E000F001E000F001E000F001E000F003C000F0038000F00F0000FFFE0000FFF
C0000F01E0000F00F0000F0078000F0078000F0078000F0078000F0078000F0078000F0078000F
0078300F003830FFF03C60FFF01FE0000007C01C1D7E9B1F>82 D<07E0801FF9803C1F80700780
700380E00380E00180E00180E00180F00000F000007C00007FC0003FF8001FFE0007FF0000FF80
000F800003C00003C00001C0C001C0C001C0C001C0E00180E00380F00300FC0E00CFFC0083F800
121E7E9C17>I<7FFFFFC07FFFFFC0780F03C0700F01C0600F00C0E00F00E0C00F0060C00F0060
C00F0060C00F0060000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00
00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000003FFFC0003FF
FC001B1C7F9B1E>I<FFF0FFC0FFF0FFC00F001E000F000C000F000C000F000C000F000C000F00
0C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F
000C000F000C000F000C000F000C000F000C0007001800078018000380300001C0300000E0E000
007FC000001F00001A1D7E9B1F>I<FFE0FFE1FFFFE0FFE1FF1F001E007C0F001E00300F003F00
300F003F00300F803F007007806780600780678060078067806003C0E780C003C0C3C0C003C0C3
C0C001E0C3C18001E181E18001E181E18001E181E18000F381F30000F300F30000F300F300007B
00F600007E007E00007E007E00007E007E00003C003C00003C003C00003C003C00001C00380000
18001800281D7F9B2B>87 D<08081818303060606060C0C0C0C0C0C0F8F8FCFCFCFC7C7C38380E
0D7B9C15>92 D<0FE0001FF8003C3C003C1E00180E00000E00001E0007FE001FFE003E0E00780E
00F00E00F00E60F00E60F01E60783E603FFFC01F878013127F9115>97 D<FC0000FC00001C0000
1C00001C00001C00001C00001C00001C00001C00001C00001C7E001DFF001F87801E01C01C01E0
1C00E01C00F01C00F01C00F01C00F01C00F01C00F01C00E01C01E01E01C01F078019FF00187C00
141D7F9C17>I<03F00FF81E3C383C78187000F000F000F000F000F000F000780078063C061E0C
0FF803E00F127F9112>I<001F80001F8000038000038000038000038000038000038000038000
038000038003E3800FFB801E0F80380780780380700380F00380F00380F00380F00380F00380F0
03807003807803803807801E1F800FFBF007E3F0141D7F9C17>I<03E00FF01C38381C781E700E
FFFEFFFEF000F000F000F000700078063C061E0C0FF803E00F127F9112>I<007801FC039E071E
0E0C0E000E000E000E000E000E00FFE0FFE00E000E000E000E000E000E000E000E000E000E000E
000E000E000E007FE07FE00F1D809C0D>I<00038007E7C00FFDC03C3DC0381C00781E00781E00
781E00781E00381C003C3C003FF00037E0007000007000003000003FFC001FFF003FFF80700780
E001C0E001C0E001C0E001C07003803C0F001FFE0007F800121C7F9215>I<FC0000FC00001C00
001C00001C00001C00001C00001C00001C00001C00001C00001C7C001DFF001F07001E03801E03
801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0FF9F
F0141D7F9C17>I<18003C007C003C001800000000000000000000000000FC00FC001C001C001C
001C001C001C001C001C001C001C001C001C001C001C00FF80FF80091D7F9C0C>I<01C003E003
E003E001C00000000000000000000000000FE00FE000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E060E0F1C0F1C07F803E000B25839C0D>I<FC00
00FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7FC01C7FC01C3E
001C18001C30001C60001CC0001DE0001FE0001E70001C78001C38001C3C001C1C001C0E001C0F
00FF9FE0FF9FE0131D7F9C16>I<FC00FC001C001C001C001C001C001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80FF80091D7F9C0C>
I<FC7E07E000FDFF9FF8001F83B838001E01E01C001E01E01C001C01C01C001C01C01C001C01C0
1C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01
C01C00FF8FF8FF80FF8FF8FF8021127F9124>I<FC7C00FDFF001F07001E03801E03801C03801C
03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0FF9FF014127F91
17>I<03F0000FFC001E1E00380700780780700380F003C0F003C0F003C0F003C0F003C0F003C0
7003807807803807001E1E000FFC0003F00012127F9115>I<FC7E00FDFF001F87801E03C01C01
E01C01E01C00F01C00F01C00F01C00F01C00F01C00F01C01E01C01E01E03C01F07801DFF001C7C
001C00001C00001C00001C00001C00001C0000FF8000FF8000141A7F9117>I<03E1800FF9801E
1F803C0780780780780380F00380F00380F00380F00380F00380F003807803807807803C07801E
1F800FFB8007E380000380000380000380000380000380000380001FF0001FF0141A7F9116>I<
FDE0FFF01F781E781E301C001C001C001C001C001C001C001C001C001C001C00FFC0FFC00D127F
9110>I<1F903FF07070E030E030E030F8007F803FE00FF000F8C038C038E038E038F070DFE08F
C00D127F9110>I<0C000C000C000C000C001C001C003C00FFE0FFE01C001C001C001C001C001C

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
001C001C001C301C301C301C301C301E600FC007800C1A7F9910>I<FC1F80FC1F801C03801C03
801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C0F800FFB
F003E3F014127F9117>I<FF0FE0FF0FE01C07801C03000E06000E06000E0600070C00070C0007
1C0003980003980003F80001F00001F00000E00000E00000E00013127F9116>I<FF3FCFE0FF3F
CFE01C0F07801C0F03001C1F03000E1B06000E1B86000E1B86000E318E000731CC000731CC0007
60CC0003E0F80003E0F80003E0F80001C0700001C0700001C070001B127F911E>I<7F8FF07F8F
F00F0780070600038E0001DC0001D80000F00000700000780000F80001DC00038E00030E000607
000F0380FF8FF8FF8FF81512809116>I<FF0FE0FF0FE01C07801C03000E06000E06000E060007
0C00070C00071C0003980003980003F80001F00001F00000E00000E00000E00000C00000C00000
C000F18000F18000C700007E00003C0000131A7F9116>I<7FFC7FFC7838707060F060E061C063
C00380070C0F0C0E0C1C1C3C1838187078FFF8FFF80E127F9112>I E /Fk
25 91 df<7FE07FE0FFC00B037E8A0F>45 D<3078F8787005057C840D>I<003F0000FFC001C1E0
0300F00600780600780F007C0F807C0F807C0F00780600780000F80000F00001F00001E00003C0
000780000F00001C0000380000700000C0000180000300600600601C00C03800C07FFFC0FFFF80
FFFF80161E7E9D17>50 D<007F0001FFC00383E00701E00700F00F00F00F01F00F01F00001E000
01E00003C0000780000F0000FE0000F800000E000007000007800003C00003C00003C03007C078
07C0F807C0F807C0F00F80C00F00601E00383C001FF80007E000141F7D9D17>I<0001C00003C0
0003C0000780000F80001B80003B8000738000638000C7000187000307000707000E07000C0700
180E00300E00600E00E00E00FFFFF0FFFFF0001C00001C00001C00001C00001C00001C00003C00
03FFC003FFC0141E7D9D17>I<03007003FFF003FFE003FF8003FE000600000600000600000600
000600000600000C7C000DFF000F87800E03800C01C00C01C00001E00001E00001E00001E07003
C0F003C0F003C0F00380C00780E00700600E00383C001FF0000FC000141F7D9D17>I<000F8000
7FC000F0E001C0E00381E00701E00E00C01E00001C00003C000038000079FC007BFE007E07007C
0380F80380F803C0F003C0F003C0F003C0F003C0F00780E00780E00780E00700E00F00700E0070
1C003838001FF00007C000131F7C9D17>I<0000180000003800000038000000780000007C0000
00FC000000FC000001BC000001BC0000033C0000033E0000061E0000061E00000C1E00000C1E00
00181E0000181F0000300F0000300F0000600F00007FFF0000FFFF0000C00F0001800780018007
80030007800300078006000780060007801F0007C0FFC07FFCFFC07FFC1E207E9F22>65
D<0003F808000FFE18003F0738007801F801F000F803C000F007C00070078000700F0000701F00
00701E0000703E0000603C0000607C0000007C0000007C0000007C000000F8000000F8000000F8
000000F8000000F80000C0780000C0780001807C0001803C0003003C0003001E0006001E000C00
0F80180007E0700001FFC000007F00001D217B9F21>67 D<07FFFF0007FFFFE0003C01F0003C00
F80078007C0078003C0078001E0078001E0078001E0078001F00F0001F00F0001F00F0001F00F0
001F00F0001F00F0001F01E0001E01E0003E01E0003E01E0003E01E0003C01E0007C03C0007803
C000F003C000F003C001E003C003C003C00F8007C03F007FFFFC00FFFFE000201F7E9E23>I<07
FFFFF807FFFFF8003C00F8003C0078007800380078003800780038007800380078003800780C30
00F0183000F0180000F0180000F0380000FFF80000FFF80001E0700001E0300001E0300001E030
1801E0303001E0003003C0003003C0006003C0006003C000E003C001C003C003C007C00FC07FFF
FF80FFFFFF801D1F7E9E1F>I<07FFC7FFC007FFC7FFC0003C007800003C007800007800F00000
7800F000007800F000007800F000007800F000007800F00000F001E00000F001E00000F001E000
00F001E00000FFFFE00000FFFFE00001E003C00001E003C00001E003C00001E003C00001E003C0
0001E003C00003C007800003C007800003C007800003C007800003C007800003C007800007C00F
80007FFCFFF800FFF8FFF800221F7E9E22>72 D<07FFE007FFE0003C00003C0000780000780000
780000780000780000780000F00000F00000F00000F00000F00000F00001E00001E00001E00001
E00001E00001E00003C00003C00003C00003C00003C00003C00007C000FFFC00FFFC00131F7F9E
10>I<07FFF00007FFF000003C0000003C00000078000000780000007800000078000000780000
0078000000F0000000F0000000F0000000F0000000F0000000F0000001E0000001E0000001E000
0001E0018001E0018001E0030003C0030003C0030003C0070003C0060003C00E0003C01E0007C0
7E007FFFFC00FFFFFC00191F7E9E1C>76 D<07FC0000FFC007FC0001FFC0003E0001F800003E00
037800006E0003F000006E0006F000006E0006F000006E000CF0000067000CF00000670018F000
00C70019E00000C70031E00000C70031E00000C70061E00000C38061E00000C380C1E000018380
C3C00001838183C00001838183C0000181C303C0000181C303C0000181C603C0000301C6078000
0301CC0780000301CC0780000300F80780000300F80780000700F00780000F80F00F80007FF0E0
FFF800FFF0E1FFF8002A1F7E9E2A>I<07FC03FFC007FC03FFC0003E007C00003E003800006F00
3000006F003000006F003000006780300000678030000063C0300000C3C0600000C3C0600000C1
E0600000C1E0600000C0F0600000C0F060000180F0C000018078C000018078C00001803CC00001
803CC00001803CC00003001F800003001F800003000F800003000F800003000F80000700078000
0F800700007FF0030000FFF0030000221F7E9E22>I<0003F800001FFE00003C1F0000F0078001
E003C003C001E0078001E00F8000F00F0000F01F0000F01E0000F83E0000F83C0000F87C0000F8
7C0000F87C0000F87C0000F8F80001F0F80001F0F80001F0F80001F0F80003E0780003E0780007
C07C0007C07C000F803C000F003E001E001E003C000F00780007C1F00003FFC00000FE00001D21
7B9F23>I<07FFFF0007FFFFC0003C03E0003C01F0007800F0007800F8007800F8007800F80078
00F8007800F800F001F000F001F000F001E000F003C000F00F8000FFFE0001FFF80001E0000001
E0000001E0000001E0000001E0000003C0000003C0000003C0000003C0000003C0000003C00000
07C000007FFC0000FFFC00001D1F7E9E1F>I<07FFFC0007FFFF00003C07C0003C03E0007801E0
007801F0007801F0007801F0007801F0007801E000F003E000F003C000F0078000F01F0000FFFC
0000FFF00001E0380001E03C0001E01C0001E01C0001E01E0001E01E0003C03E0003C03E0003C0
3E0003C03E0003C03E0603C03E0607C03E0C7FFC1F18FFFC0FF8000003E01F207E9E21>82
D<003F04007FCC01E0FC03807C03003C0700380600180E00180E00180E00180E00000F00000F00
000FE00007FE0003FF8001FFC0007FE00007E00001E00000E00000F00000F06000E06000E06000
E06000E07001C0700180F80380FE0F00C7FC0081F80016217D9F19>I<1FFFFFF81FFFFFF81E03
C0F83803C038380780383007803870078018600780186007803860078030C00F0030000F000000
0F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000001E0000001E0000
003C0000003C0000003C0000003C0000003C0000003C0000007C00001FFFF0003FFFF0001D1F7B
9E21>I<FFFC7FF8FFFC7FF807800F80078007000F0006000F0006000F0006000F0006000F0006
000F0006001E000C001E000C001E000C001E000C001E000C001E000C003C0018003C0018003C00
18003C0018003C0018003C001800380030003800300038003000380060003C00C0001C00C0001E
0180000F07000007FC000001F800001D20799E22>I<03FFC1FFC003FFC1FFC0003E007C00001E
007000001E006000000F00C000000F01C000000F83800000078300000007C600000003CC000000
03FC00000001F800000001F000000000F000000000F800000001F800000003FC000000033C0000
00063C0000000C1E0000001C1E000000381F000000300F000000600F800000C007800001C007C0
00038003C0000FC003E000FFF01FFE00FFE01FFE00221F7F9E22>88 D<7FF803FF80FFF803FF00
07C000F80007C000E00003C000C00003E001C00001E003800001F003000000F006000000F80E00
0000F80C00000078180000007C300000003C700000003E600000001EC00000001F800000000F80
0000000F000000000F000000000F000000000E000000001E000000001E000000001E000000001E
000000001E000000001C000000003C00000003FFE0000007FFE00000211F7B9E22>I<03FFFFC0
03FFFFC003F0078007C00F0007001F0007001E000E003C000C0078000C00F8000C00F0001801E0
000003C00000078000000F8000000F0000001E0000003C0000007C00000078030000F0030001E0
030003E0060003C00600078006000F000E001F001C001E001C003C007C007801FC00FFFFF800FF
FFF8001A1F7D9E1C>I E /Fl 52 122 df<387CFEFEFE7C3807077C860F>46
D<01FC0007FF001F07C01E03C03E03E07C01F07C01F07C01F0FC01F8FC01F8FC01F8FC01F8FC01
F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F87C01F07C01F07C01F03E03E01E03
C01F8FC007FF0001FC00151D7E9C1A>48 D<00700000F0000FF000FFF000F3F00003F00003F000
03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000
03F00003F00003F00003F00003F00003F00003F000FFFF80FFFF80111D7C9C1A>I<07F0001FFE
00383F007C1F80FE0FC0FE0FC0FE0FE0FE07E07C07E03807E0000FE0000FC0000FC0001F80001F
00003E0000780000F00000E00001C0600380600700600C00E01FFFE01FFFC03FFFC07FFFC0FFFF
C0FFFFC0131D7D9C1A>I<01FC0007FF000E0F801E0FC03F07E03F87E03F87E03F87E01F0FC00E
0FC0000F80001F0001FC0001FC00000F800007C00003E00003F03C03F87E03F8FF03F8FF03F8FF
03F8FF03F07E03F07C07E03C0FC00FFF8003FC00151D7E9C1A>I<0001C00003C00007C00007C0
000FC0001FC0003FC00077C00067C000C7C00187C00387C00707C00E07C00C07C01807C03807C0
7007C0E007C0FFFFFEFFFFFE000FC0000FC0000FC0000FC0000FC0000FC001FFFE01FFFE171D7F
9C1A>I<3803803FFF803FFF003FFE003FFC003FF0003F800030000030000030000030000033F8
003FFE003C1F00380F80300FC0000FC0000FE0000FE0780FE0FC0FE0FE0FE0FE0FE0FC0FC0780F
C0601F80383F001FFC0007F000131D7D9C1A>I<003F0001FFC007E0E00F81E01F03F01E03F03E
03F07C03F07C01E07C0000FC1000FCFF00FDFFC0FF03E0FE01F0FE01F0FC01F8FC01F8FC01F8FC
01F87C01F87C01F87C01F83C01F03E01F01E03E00F07C007FF8001FE00151D7E9C1A>I<600000
7FFFF87FFFF87FFFF07FFFE07FFFE0FFFFC0E00380C00700C00E00C00C00001C00003800007800
00780000F00000F00000F00001F00001F00001F00003F00003F00003F00003F00003F00003F000
03F00003F00001E000151E7D9D1A>I<01FC0007FF000F07801C03C01C01E03C01E03C01E03E01
E03F81E03FE3C03FF3801FFF000FFF000FFFC007FFE01FFFE03C7FF0781FF87807F8F001F8F000
F8F00078F00078F000707800707C00E03E03C00FFF8003FC00151D7E9C1A>I<01FC000FFF001F
07803E03C07C03E07C01E0FC01F0FC01F0FC01F0FC01F8FC01F8FC01F8FC01F87C03F87C03F83E
07F81FFDF807F9F80041F80001F03C01F07E01F07E03E07E03E07E07C03C0780381F001FFC0007
F000151D7E9C1A>I<387CFEFEFE7C38000000000000387CFEFEFE7C3807147C930F>I<07F8001F
FE00381F80780F80FC0FC0FC0FC0FC0FC0780FC0301F80001F00003E00007C0000700000E00000
E00000C00000C00000C00000C00000C00000C00000000000000000000000000001C00007F00007
F00007F00007F00007F00001C00012207D9F19>63 D<0000E000000000E000000001F000000001
F000000001F000000003F800000003F800000007FC00000007FC0000000FFE0000000CFE000000
0CFE000000187F000000187F000000307F800000303F800000703FC00000601FC00000601FC000
00C01FE00000C00FE00001FFFFF00001FFFFF000018007F000030003F800030003F800060003FC
00060001FC000E0001FE00FFE01FFFE0FFE01FFFE0231F7E9E28>65 D<FFFFFE00FFFFFFC007E0
07E007E003F007E001F807E001FC07E001FC07E001FC07E001FC07E001FC07E001F807E003F807
E003F007E00FE007FFFF8007FFFFE007E003F007E001F807E001FC07E000FC07E000FE07E000FE
07E000FE07E000FE07E000FE07E000FC07E001FC07E001F807E007F0FFFFFFE0FFFFFF001F1F7E
9E25>I<0007FC02003FFF0E00FE03DE03F000FE07E0003E0FC0001E1F80001E3F00000E3F0000
0E7F0000067E0000067E000006FE000000FE000000FE000000FE000000FE000000FE000000FE00
00007E0000007E0000067F0000063F0000063F00000C1F80000C0FC0001807E0003803F0007000
FE01C0003FFF800007FC001F1F7D9E26>I<FFFFFE0000FFFFFFC00007F007F00007F001F80007
F000FC0007F0007E0007F0003F0007F0003F0007F0001F8007F0001F8007F0001F8007F0001FC0
07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001F
C007F0001F8007F0001F8007F0001F8007F0003F0007F0003F0007F0007E0007F000FC0007F001
F80007F007F000FFFFFFC000FFFFFE0000221F7E9E28>I<FFFFFFE0FFFFFFE007F007E007F001
E007F000E007F0006007F0007007F0003007F0003007F0603007F0603007F0600007F0600007F1
E00007FFE00007FFE00007F1E00007F0600007F0600007F0600C07F0600C07F0000C07F0001807
F0001807F0001807F0003807F0007807F000F807F003F0FFFFFFF0FFFFFFF01E1F7E9E22>I<00
07FC0200003FFF0E0000FE03DE0003F000FE0007E0003E000FC0001E001F80001E003F00000E00
3F00000E007F000006007E000006007E00000600FE00000000FE00000000FE00000000FE000000
00FE00000000FE007FFFE0FE007FFFE07E0000FE007E0000FE007F0000FE003F0000FE003F0000
FE001F8000FE000FC000FE0007E000FE0003F001FE0000FE03BE00003FFF1E000007FC0600231F
7D9E29>71 D<FFFF9FFFF0FFFF9FFFF007F000FE0007F000FE0007F000FE0007F000FE0007F000
FE0007F000FE0007F000FE0007F000FE0007F000FE0007F000FE0007F000FE0007F000FE0007FF
FFFE0007FFFFFE0007F000FE0007F000FE0007F000FE0007F000FE0007F000FE0007F000FE0007
F000FE0007F000FE0007F000FE0007F000FE0007F000FE0007F000FE0007F000FE00FFFF9FFFF0
FFFF9FFFF0241F7E9E29>I<FFFF80FFFF8007F00007F00007F00007F00007F00007F00007F000
07F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000
07F00007F00007F00007F00007F00007F00007F000FFFF80FFFF80111F7F9E14>I<FFFF80FFE0
FFFF80FFE007F0001E0007F0001C0007F000780007F000E00007F001C00007F003800007F00700
0007F00E000007F01C000007F078000007F0F8000007F1F8000007F3FC000007F7FE000007FEFF
000007FCFF000007F87F800007F03FC00007F01FE00007F01FE00007F00FF00007F007F80007F0
07F80007F003FC0007F001FE0007F000FF0007F000FF00FFFF87FFF0FFFF87FFF0241F7E9E29>
75 D<FFF000007FF8FFF80000FFF807F80000FF0006FC0001BF0006FC0001BF0006FC0001BF00
067E00033F00067E00033F00063F00063F00063F00063F00061F800C3F00061F800C3F00061F80
0C3F00060FC0183F00060FC0183F000607E0303F000607E0303F000603F0603F000603F0603F00
0603F0603F000601F8C03F000601F8C03F000600FD803F000600FD803F0006007F003F0006007F
003F0006003E003F0006003E003F0006003E003F00FFF01C07FFF8FFF01C07FFF82D1F7E9E32>
77 D<FFF800FFF0FFF800FFF007FC00060007FE00060007FF00060006FF800600067F80060006
3FC00600061FE00600060FF00600060FF806000607FC06000603FC06000601FE06000600FF0600
06007F860006007FC60006003FE60006001FE60006000FF600060007FE00060003FE00060003FE
00060001FE00060000FE000600007E000600003E000600001E000600001E00FFF0000E00FFF000
0600241F7E9E29>I<001FF80000FFFF0001F81F8007E007E00FC003F01F8001F81F0000F83F00
00FC7F0000FE7E00007E7E00007EFE00007FFE00007FFE00007FFE00007FFE00007FFE00007FFE
00007FFE00007FFE00007F7E00007E7F0000FE7F0000FE3F0000FC3F8001FC1F8001F80FC003F0
07E007E001F81F8000FFFF00001FF800201F7D9E27>I<FFFFFE00FFFFFF8007F00FE007F003F0
07F001F807F001F807F001FC07F001FC07F001FC07F001FC07F001FC07F001F807F001F807F003
F007F00FE007FFFF8007FFFE0007F0000007F0000007F0000007F0000007F0000007F0000007F0
000007F0000007F0000007F0000007F0000007F00000FFFF8000FFFF80001E1F7E9E24>I<FFFF
F80000FFFFFF000007F01FC00007F007E00007F003F00007F003F00007F003F80007F003F80007
F003F80007F003F80007F003F00007F003F00007F007E00007F01FC00007FFFF000007FFFE0000
07F03F800007F01FC00007F01FE00007F00FE00007F00FE00007F00FE00007F00FE00007F00FE0
0007F00FE00007F00FE03007F00FE03007F00FF07007F007F860FFFF81FFE0FFFF807F80241F7E
9E27>82 D<03FC080FFF381E03F83C00F8780078780038F80038F80018FC0018FC0000FF0000FF
F8007FFF007FFFC03FFFE01FFFF00FFFF803FFF8001FFC0001FC0000FC0000FCC0007CC0007CC0
007CE00078E00078F800F0FE01E0E7FFC081FF00161F7D9E1D>I<7FFFFFFC7FFFFFFC7C0FE07C
700FE01C600FE00C600FE00CE00FE00EC00FE006C00FE006C00FE006C00FE006000FE000000FE0
00000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000F
E000000FE000000FE000000FE000000FE000000FE00007FFFFC007FFFFC01F1E7E9D24>I<FFFF
81FFE0FFFF81FFE007F0000C0007F0000C0007F0000C0007F0000C0007F0000C0007F0000C0007
F0000C0007F0000C0007F0000C0007F0000C0007F0000C0007F0000C0007F0000C0007F0000C00
07F0000C0007F0000C0007F0000C0007F0000C0007F0000C0007F0000C0007F0000C0007F0001C
0003F000180003F800380001F800300000FC007000007F03E000001FFF80000003FC0000231F7E
9E28>I<FFFF1FFFC0FFE0FFFF1FFFC0FFE00FE001FC000E0007F001FC000C0007F001FE000C00
07F800FE000C0003F800FE00180003F800FF00180003FC00FF00380001FC01FF80300001FC01BF
80300000FE01BF80600000FE031FC0600000FF031FC0E000007F031FE0C000007F060FE0C00000
3F860FE18000003F8E0FF18000003FCC07F18000001FCC07F30000001FD803FB0000001FF803FF
0000000FF803FE0000000FF001FE00000007F001FC00000007E000FC00000007E000FC00000003
E000F800000003C0007800000001C00070000000018000300000331F7F9E36>87
D<3FFFFF803FFFFF803F807F803E00FF003801FE003801FE007003FC007003F8006007F800600F
F000600FF000001FE000003FC000003FC000007F8000007F000000FF000001FE000001FE018003
FC018007F8018007F801800FF003800FE003801FE003003FC007003FC00F007F801F00FF007F00
FFFFFF00FFFFFF00191F7D9E20>90 D<07FC001FFF003F0F803F07C03F03E03F03E00C03E00003
E001FFE00FFFE03F83E07E03E07C03E0F803E0F803E0F803E0FC07E07E0DE03FF9FE07E07E1714
7F9319>97 D<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000
FC0000FC00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>99
D<0007F80007F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F801F8
F80FFEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00
F87C00F87E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF801F83E03F01F07E
00F07E00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007E00003E00183F00380F
807007FFE000FF8015147F9318>I<01FC3C07FFFE0F07DE1E03DE3E03E03E03E03E03E03E03E0
3E03E01E03C00F07800FFF0019FC001800001800001C00001FFF801FFFF00FFFF83FFFFC7C007C
70003EF0001EF0001EF0001E78003C78003C3F01F80FFFE001FF00171E7F931A>103
D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0F
C01F3FE01F61F01FC0F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18207D9F1D>I<1C003F007F007F007F003F001C
00000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F00FFE0FFE00B217EA00E>I<FF0000FF00001F00001F00001F00001F0000
1F00001F00001F00001F00001F00001F00001F01FE1F01FE1F00F01F01C01F03801F07001F1E00
1F38001F7C001FFE001FFF001F1F001E0F801E07C01E07E01E03F01E01F01E00F8FFC3FFFFC3FF
18207E9F1C>107 D<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B207E9F0E
>I<FE0FE03F80FE3FF0FFC01E70F9C3E01EC07F01F01F807E01F01F807E01F01F007C01F01F00
7C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F
007C01F01F007C01F01F007C01F0FFE3FF8FFEFFE3FF8FFE27147D932C>I<FE0FC0FE3FE01E61
F01EC0F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
F81F00F81F00F8FFE3FFFFE3FF18147D931D>I<01FF0007FFC01F83F03E00F83E00F87C007C7C
007CFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F83E00F81F83F007FFC001
FF0017147F931A>I<FF1FC0FF7FF01FE1F81F80FC1F007E1F007E1F003E1F003F1F003F1F003F
1F003F1F003F1F003F1F003E1F007E1F007C1F80FC1FC1F81F7FE01F1F801F00001F00001F0000
1F00001F00001F00001F0000FFE000FFE000181D7E931D>I<FE3E00FE7F801ECFC01F8FC01F8F
C01F8FC01F03001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00
00FFF000FFF00012147E9316>114 D<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03
FE001FC007C007E007F006F81EFFFCC7F010147E9315>I<01800180018003800380038007800F
803F80FFFCFFFC0F800F800F800F800F800F800F800F800F800F800F860F860F860F860F8607CC
03F801F00F1D7F9C14>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
00F81F00F81F00F81F00F81F00F81F00F81F01F81F01F80F07F807FEFF03F8FF18147D931D>I<
FFE7FE1FE0FFE7FE1FE01F00F007001F00F803000F80F806000F80F8060007C1BC0C0007C1BC0C
0007C1BE0C0003E31E180003E31E180001F60F300001F60F300001F60FB00000FC07E00000FC07
E000007803C000007803C000007803C000003001800023147F9326>119
D<FFE1FF00FFE1FF000F80700007C0E00007E0C00003E1800001F3800000FF0000007E0000003E
0000003F0000007F8000006F800000C7C0000183E0000381F0000701F8000E00FC00FF81FF80FF
81FF8019147F931C>I<FFE07F80FFE07F801F001C000F8018000F80180007C0300007C0300003
E0600003E0600001F0C00001F0C00001F9C00000F9800000FF8000007F0000007F0000003E0000
003E0000001C0000001C0000001800000018000078300000FC300000FC600000C0E00000E1C000
007F8000001E000000191D7F931C>I E /Fm 58 123 df<00F8F001F8F003F8F00780F00700F0
0F00F00F00F00F00F00F00F00F00F00F00F00F00F0FFF8F0FFF8F0FFF8F00F00F00F00F00F00F0
0F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F0
0F00F01420809F18>13 D<007C000000FE000001FF000003C78000038780000383C0000783C000
0703C0000703C0000783C00007878000078F8000078F0000079E000003BC008003F800E003F001
E003E001C007E001C00FF003C01EF003803CF8078078780700787C0F00F03E0E00F01F1E00F01F
3C00F00FF800F807F0007803E0007C0FF8303FFFFFF01FFE3FF007F00FC01C227EA022>38
D<007000E001C00380078007000E001E001E003C003C003C0078007800780078007000F000F000
F000F000F000F000F000F000F000F000F000F000700078007800780078003C003C003C001E001E
000E0007000780038001C000E000700C2E7EA112>40 D<E000700038001C001E000E0007000780
078003C003C003C001E001E001E001E000E000F000F000F000F000F000F000F000F000F000F000
F000F000E001E001E001E001E003C003C003C00780078007000E001E001C0038007000E0000C2E
7DA112>I<00060000000600000006000000060000000600000006000000060000000600000006
0000000600000006000000060000000600000006000000060000FFFFFFF0FFFFFFF00006000000
060000000600000006000000060000000600000006000000060000000600000006000000060000
000600000006000000060000000600001C207D9A23>43 D<787878781830306060E0050A7D830D
>I<FFC0FFC0FFC00A037F8B0F>I<F0F0F0F004047C830D>I<03F00007F8001FFE001E1E003C0F
00380700780780780780700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003
C0F003C0F003C0F003C0F003C0F003C07807807807807807803807003C0F001E1E001FFE000FFC
0003F00012207E9E17>48 D<F0F0F0F0000000000000000000000000F0F0F0F004147C930D>58
D<FFFFFFF0FFFFFFF0000000000000000000000000000000000000000000000000000000000000
0000FFFFFFF0FFFFFFF01C0C7D9023>61 D<001F0000001F0000003F8000003B8000003B800000
7BC0000073C0000071C00000F1E00000E1E00000E0E00001E0F00001E0F00001C0F00003C07800
03C078000380780007803C0007803C0007003C000FFFFE000FFFFE000FFFFE001E000F001E000F
003C000F803C0007803C000780780007C0780003C0780003C0F00003E01B207F9F1E>65
D<FFF800FFFF00FFFF80F00FC0F003E0F001E0F000F0F000F0F000F0F000F0F000F0F001E0F003
C0F01F80FFFF00FFFF00FFFF80F007E0F001E0F000F0F00078F00078F00078F00078F00078F000
78F000F0F001F0F007E0FFFFC0FFFF80FFFC0015207B9F1E>I<001FC000FFF801FFFC03E03C07
800C0F00001E00003E00003C00007C0000780000780000780000F00000F00000F00000F00000F0
0000F00000F00000F000007800007800007800007C00003C00003E00001E00000F000207800E03
E03E01FFFC00FFF0001FC017227DA01D>I<FFFC00FFFF80FFFFC0F007E0F001F0F000F8F00078
F0003CF0003CF0001EF0001EF0000EF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000F
F0000FF0001EF0001EF0001EF0003CF0007CF000F8F001F0F007E0FFFFC0FFFF80FFFC0018207B
9F21>I<FFFFC0FFFFC0FFFFC0F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000FFFF80FFFF80FFFF80F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000FFFFE0FFFFE0FFFFE013207B9F1B>I<FFFFC0FFFFC0FFFFC0F0
0000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000FFFF00FFFF00FF
FF00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0
0000F00000F0000012207B9F1A>I<001FE000FFF801FFFE03E03E07800E0F00001E00003E0000
3C00007C0000780000780000780000F00000F00000F00000F00000F00000F00000F003FEF003FE
7803FE78001E78001E7C001E3C001E3E001E1E001E0F001E07801E03E03E01FFFE00FFF8001FC0
17227DA01E>I<F00078F00078F00078F00078F00078F00078F00078F00078F00078F00078F000
78F00078F00078F00078FFFFF8FFFFF8FFFFF8F00078F00078F00078F00078F00078F00078F000
78F00078F00078F00078F00078F00078F00078F00078F0007815207B9F20>I<F0F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004207C9F0D>I<F0003EF0007CF0
00F8F001F0F003E0F007C0F00780F00F00F01F00F03E00F07C00F0F800F1F000F3F800F3F800F7
FC00FFBC00FF1E00FE1F00FC0F00F80780F00780F003C0F003E0F001E0F000F0F000F8F00078F0
003CF0003CF0001EF0001F18207B9F20>75 D<F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F00000FFFF80FFFF80FFFF801120
7B9F19>I<F80001F8FC0003F8FC0003F8F4000378F6000778F6000778F6000778F7000F78F300
0E78F3000E78F3801E78F3801E78F1801C78F1C03C78F1C03C78F1C03C78F0C03878F0E07878F0
E07878F0607078F070F078F070F078F030E078F039E078F039E078F019C078F019C078F019C078
F00F8078F00F8078F00F8078F00000781D207B9F28>I<FC0078FE0078FE0078F60078F70078F7
0078F38078F38078F38078F3C078F1C078F1E078F1E078F0E078F0F078F07078F07078F07878F0
3878F03C78F03C78F01C78F01E78F00E78F00E78F00E78F00778F00778F00378F003F8F003F8F0
01F815207B9F20>I<003F000000FFC00003FFF00007E1F8000F807C001F003E001E001E003C00
0F003C000F00780007807800078078000780F00003C0F00003C0F00003C0F00003C0F00003C0F0
0003C0F00003C0F00003C0F00003C0F80007C07800078078000780780007803C000F003C000F00
1E001E001F003E000F807C0007E1F80003FFF00000FFC000003F00001A227DA021>I<FFF800FF
FF00FFFF80F00FC0F003E0F001E0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F001E0F0
03E0F00FC0FFFF80FFFF00FFF800F00000F00000F00000F00000F00000F00000F00000F00000F0
0000F00000F00000F00000F0000014207B9F1D>I<FFF800FFFF00FFFF80F007C0F003E0F001E0
F000F0F000F0F000F0F000F0F000F0F001E0F003E0F007C0FFFF80FFFF00FFF800F03C00F01E00
F01E00F00F00F00F00F00780F00780F003C0F001C0F001E0F000F0F000F0F00078F00078F0003C
16207B9F1D>82 D<01FC0007FF800FFFC01F03C03C00C03C000078000078000078000078000078
00007C00003C00003F00001FE0000FFC0007FE0001FF00003F800007C00003C00003E00001E000
01E00001E00001E00001E00001C0C003C0F007C0FC0F807FFF001FFE0003F80013227EA019>I<
FFFFFFC0FFFFFFC0FFFFFFC0001E0000001E0000001E0000001E0000001E0000001E0000001E00
00001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E
0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E000000
1E0000001E0000001E00001A207E9F1F>I<F000F0F000F0F000F0F000F0F000F0F000F0F000F0
F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0
F000F0F000F0F000F0F000F0F000F07801E07801E03C03C03C03C01F0F800FFF0007FE0001F800
14217B9F1F>I<F00001E0F00001E0780003C0780003C0780003C03C0007803C0007803C000780
1E000F001E000F001F000F000F001E000F001E0007801C0007803C0007803C0003C0380003C078
0003C0780001E0700001E0F00001E0F00000F0E00000F1E00000F1E0000071C000007BC000003B
8000003B8000003F8000001F0000001F00001B207F9F1E>I<F0007C000FF0007E000FF0007E00
0F78006E000E7800EE001E7800E7001E7800E7001E3C00E7003C3C01E7803C3C01C7803C3C01C3
803C1E01C380781E03C3C0781E0383C0780E0381C0700F0381C0F00F0781E0F00F0701E0F00707
00E0E0078700E1E0078F00F1E0078E00F1E0038E0071C0038E0071C003CE0073C001DC007B8001
DC003B8001DC003B8001DC003B8000F8003F0000F8001F0000F8001F0028207F9F2B>I<780007
807C000F003E001F001E001E000F003C000F807C000780780003C0F00003E1F00001F1E00000F3
C000007FC000007F8000003F0000001F0000001E0000003F0000007F8000007FC00000F3C00001
F1E00001E0F00003C0F80007C0780007803C000F003E001F001E001E000F003C000F807C0007C0
780003C0F00003E01B207F9F1E>I<F80000F87C0001F03C0001E03E0003E01F0003C00F000780
0F800F8007C00F0003C01F0003E01E0001F03C0000F07C00007878000078F000003CF000001DE0
00001FE000000FC000000780000007800000078000000780000007800000078000000780000007
80000007800000078000000780000007800000078000000780001D20809F1E>I<FFFFF8FFFFF8
FFFFF80000F00001F00001E00003C00007C0000780000F80000F00001E00003E00003C00007C00
00780000F00001F00001E00003E00003C0000780000F80000F00001F00001E00003C00007C0000
780000FFFFFCFFFFFCFFFFFC16207D9F1C>I<07E03FF87FFC701E401F000F000F000F003F07FF
1FFF7E0FF80FF00FF00FF00FF83F7FFF3FEF1F8F10147E9316>97 D<F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F1F000F7FC00FFFE00FC3E00F80F
00F00F00F00780F00780F00780F00780F00780F00780F00780F00F00F00F00F81F00FC3E00FFFC
00F7F800F1E00011207D9F17>I<03F00FFC1FFE3E0E3C0278007800F000F000F000F000F000F0
00780078003C013E0F1FFF0FFE03F010147E9314>I<0007800007800007800007800007800007
8000078000078000078000078000078000078007C7800FF7801FFF803E1F807C0780780780F807
80F00780F00780F00780F00780F00780F00780F00780780780780F803E1F801FFF800FF78007C7
8011207E9F17>I<03F0000FFC001FFE003E1F003C0700780700700380FFFF80FFFF80FFFF80F0
0000F00000F000007000007800003C01003E07001FFF0007FE0001F80011147F9314>I<007E01
FE03FE078007000F000F000F000F000F000F000F00FFF0FFF0FFF00F000F000F000F000F000F00
0F000F000F000F000F000F000F000F000F000F000F000F20809F0E>I<03E0F00FFFF01FFFF03E
3E003C1E00780F00780F00780F00780F00780F003C1E003E3E001FFC003FF80033E00030000038
00003FFE003FFF801FFFC03FFFE07803F0F000F0F000F0F000F0F801F07E07E03FFFC00FFF0003
FC00141E7F9317>I<F000F000F000F000F000F000F000F000F000F000F000F000F1F8F3FCF7FE
FC1FF80FF80FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F10207D9F17
>I<F0F0F0F00000000000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004207D9F0B>
I<F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F01F
00F01E00F03C00F07800F0F000F1E000F3C000F78000FFC000FFC000FFE000F9F000F8F000F0F8
00F07C00F07C00F03E00F01E00F01F00F00F8011207D9F16>107 D<F0F0F0F0F0F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004207D9F0B>I<F0FC07E0F3FE1FF0F7FF3F
F8FE0FF07CF807C03CF807C03CF007803CF007803CF007803CF007803CF007803CF007803CF007
803CF007803CF007803CF007803CF007803CF007803CF007803CF007803C1E147D9327>I<F1F8
F3FCF7FEFC1FF80FF80FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F10
147D9317>I<01F80007FE001FFF803F0FC03C03C07801E07801E0F000F0F000F0F000F0F000F0
F000F0F000F07801E07801E03C03C03F0FC01FFF8007FE0001F80014147F9317>I<F1F000F7FC
00FFFE00FC3E00F81F00F00F00F00F80F00780F00780F00780F00780F00780F00780F00F00F00F
00F81F00FC3E00FFFC00F7F800F1E000F00000F00000F00000F00000F00000F00000F00000F000
00F00000111D7D9317>I<F0E0F3E0F7E0FF00FC00FC00F800F800F000F000F000F000F000F000
F000F000F000F000F000F0000B147D9310>114 D<07F01FFC3FFC780C7800780078007C003FC0
1FF00FF803F8007C003C003CC03CF07CFFF87FF00FC00E147F9311>I<1E001E001E001E001E00
1E00FFF0FFF0FFF01E001E001E001E001E001E001E001E001E001E001E001E001E001E201FF00F
F007C00C1A7F9910>I<F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0
0FF01FF03FFFFF7FEF3F0F10147D9317>I<F003C0F003C07803807807807807803C0F003C0F00
3C0F001E0E001E1E001E1E000F1C000F3C000F3C0007380007380007B80003F00003F00001E000
12147F9315>I<F01F00F0F01F80F0F01F80F0781B81E0783B81E0783BC1E07839C1E03C31C3C0
3C71C3C03C71E3C01C70E3801E60E7801E60E7801EE0E7800EE077000EC077000EC0770007C07E
0007C03E0007803E001C147F931F>I<F003C0F003C07807807807807C07803C0F003C0F001E0F
001E1E000E1E000F1C000F1C00073C0007380003B80003B80003B00001F00001F00000E00000E0
0001C00001C00003C0000380000780007F00007E00007C0000121D7F9315>121
D<7FFF7FFF7FFF003E003C007800F800F001E003E007C007800F001F001E003C007C00FFFFFFFF
FFFF10147F9314>I E /Fn 28 123 df<70F8F8F0E005057B840E>46 D<000007000000070000
000F0000000F0000001F0000003F0000003F0000006F0000006F000000CF000000CF0000018F00
00038F0000030F0000060F0000060F00000C0F80000C07800018078000180780003FFF80007FFF
800060078000C0078000C00780018007800180078003000780070007800F0007807FC07FF8FFC0
7FF81D207E9F22>65 D<01FFFFFE01FFFFFC001E003C001E001C001E001C003C000C003C000C00
3C000C003C001800780C1800780C1800780C0000781C0000F0380000FFF80000FFF80000F03800
01E0300001E0300001E0303001E0306003C0006003C0006003C000C003C001C007800180078003
800780070007801F00FFFFFF00FFFFFE001F1F7D9E1F>69 D<01FF0000FFC001FF0000FFC0001F
0001F800001F0001F800001F0003780000370003F00000370006F0000037000CF0000037000CF0
0000670019E00000638019E00000638031E00000638031E00000C38063C00000C380C3C00000C3
80C3C00000C38183C00001838187800001838307800001838307800001838607800003038C0F00
0003038C0F00000303980F00000301D80F00000601F01E00000601F01E00000601E01E00000E01
C01E0000FFE1C3FFE000FFC183FFC0002A1F7D9E29>77 D<01FFFF0001FFFFC0001E01E0001E00
F0001E0078003C0078003C0078003C0078003C0078007800F0007800F0007801E0007803C000F0
0F0000FFFE0000FFF80000F03C0001E01E0001E00E0001E00F0001E00F0003C01E0003C01E0003
C01E0003C01E0007803C0007803C1807803C1807803C30FFF81E30FFF00FE0000007C01D207D9E
21>82 D<00F18003FDC0078F800E07801C07803C07803C0700780700780700780700F00E00F00E
00F00E00F00E30F01C60F03C60707C6078FCC03FCFC00F078014147C9317>97
D<07803F803F000700070007000E000E000E000E001C001C001CF01FFC3F1E3E0E3C0F380F700F
700F700F700FE01EE01EE01EE03CE03CE038607071E03FC01F0010207B9F15>I<007E0001FF00
0383800F07801E07801C07003C0200780000780000780000F00000F00000F00000F00000F00000
700200700700381E001FF80007E00011147C9315>I<0000780003F80003F00000700000700000
700000E00000E00000E00000E00001C00001C000F1C003FDC0078F800E07801C07803C07803C07
00780700780700780700F00E00F00E00F00E00F00E30F01C60F03C60707C6078FCC03FCFC00F07
8015207C9F17>I<007C0001FF000783000F01801E01803C01803C0300780E007FFC007FE000F0
0000F00000F00000F000007000007002007807003C1E001FF80007E00011147C9315>I<0000F8
0001FC0003BC00033C000718000700000700000E00000E00000E00000E00000E0001FFE001FFE0
001C00001C00001C00003800003800003800003800003800007000007000007000007000007000
00700000E00000E00000E00000E00001C00001C00001C0000180003380007B8000F300007E0000
3C00001629829F0E>I<003C6000FF7001E3E00381E00701E00F01E00F01C01E01C01E01C01E01
C03C03803C03803C03803C03803C07003C0F001C1F001E3F000FFE0003CE00000E00000E00001C
00001C00301C00783800F0F0007FE0003F8000141D7E9315>I<01E0000FE0000FC00001C00001
C00001C000038000038000038000038000070000070000073E00077F000EC3800F81C00F01C00E
01C01E03801C03801C03801C0380380700380700380700380E18700E30700E30701C60700C60E0
0FC060078015207D9F17>I<006000F000F000E000000000000000000000000000000F001F8031
8031C063806380C3800700070007000E000E000E001C301C601C6038C018C01F800F000C1F7D9E
0E>I<01E0000FE0000FC00001C00001C00001C000038000038000038000038000070000070000

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
0703C00707E00E0C600E10E00E21E00E61E01CC1C01F80001F00001FC00039E000387000387000
3838607070C07070C07070C0703180E03F00601E0013207D9F15>107 D<03C01FC01F80038003
80038007000700070007000E000E000E000E001C001C001C001C00380038003800380070007000
70007180E300E300E300E6007E003C000A207C9F0C>I<1E07C0F8003F1FE1FC0033B8730E0063
E076070063C03C07006380380700C780780E000700700E000700700E000700700E000E00E01C00
0E00E01C000E00E01C000E00E038601C01C038C01C01C038C01C01C071801C01C031803803803F
001801801E0023147D9325>I<1E07C03F1FE033B87063E07063C038638038C780700700700700
700700700E00E00E00E00E00E00E01C31C01C61C01C61C038C1C018C3801F81800F018147D931A
>I<007C0001FF000383800F01C01E01C01C01E03C01E07801E07801E07801E0F003C0F003C0F0
03C0F00780F00700700F00701E003838001FF00007C00013147C9317>I<03C1E007E7F8067E3C
0C7C1C0C781E0C701E18E01E00E01E00E01E00E01E01C03C01C03C01C03C01C07803C07803C070
03C0E003E3C0077F80071E000700000700000E00000E00000E00000E00001C0000FFC000FFC000
171D809317>I<1E0F003F3F8033F1C063C1C063C3C06383C0C783800700000700000700000E00
000E00000E00000E00001C00001C00001C00001C000038000018000012147D9313>114
D<00FC03FE07070E0F0E0F0E0E1E000F800FF007F803FC003E001E701EF01CF01CE03860703FE0
1F8010147D9313>I<018001C0038003800380038007000700FFF0FFF00E000E000E000E001C00
1C001C001C0038003800380038307060706070C071803F001E000C1C7C9B0F>I<0F00601F8070
3180E031C0E06380E06380E0C381C00701C00701C00701C00E03800E03800E03800E038C0E0718
0E07180E0F180E1F3007F3F003E1E016147D9318>I<0F01C01F83C03183E031C1E06380E06380
E0C380C00700C00700C00700C00E01800E01800E01800E03000E03000E06000E06000F0C0007F8
0001E00013147D9315>I<0F0060E01F8071E03180E1F031C0E0F06380E0706380E070C381C060
0701C0600701C0600701C0600E0380C00E0380C00E0380C00E0381800E0381800E0781000E0783
00070F860007F9FC0001F0F8001C147D931E>I<0F00601F80703180E031C0E06380E06380E0C3
81C00701C00701C00701C00E03800E03800E03800E03800E07000E07000E0F000E1F0007FE0003
EE00000E00000E00001C00781C0078380070700060E0003FC0001F0000141D7D9316>121
D<00E06003F0C007FFC00E1F800C0300000600000C0000180000300000600000C0000180000300
000600C00C01801801803F87007FFE0060FC00C0780013147E9313>I E
/Fo 73 126 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000000070F8F8F870051C779B
18>33 D<03C00007E0000FF0001E78001C38001C38001C38001C38001C7BF01CF3F01EE3F00FE7
800FC7000F87000F0F001F0E003F8E007B9E0073DC00F1DC00E1FC00E0F800E07870F0F87071FE
707FFFF03FCFE01F03C0141C7F9B18>38 D<007000F001F003C007800F001E001C003C00380078
0070007000F000E000E000E000E000E000E000E000E000F00070007000780038003C001C001E00
0F00078003C001F000F000700C24799F18>40 D<6000F00078003C001E000F000780038003C001
C001E000E000E000F00070007000700070007000700070007000F000E000E001E001C003C00380
07800F001E003C007800F00060000C247C9F18>I<01C00001C00001C00001C000C1C180F1C780
F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C780C1C18001C00001C00001C000
01C00011147D9718>I<00600000F00000F00000F00000F00000F00000F00000F0007FFFC0FFFF
E0FFFFE07FFFC000F00000F00000F00000F00000F00000F00000F00000600013147E9718>I<3C
7E7F7F7F3F0F0E1E7CF870080C788518>I<7FFF00FFFF80FFFF807FFF0011047D8F18>I<78FCFC
FCFC780606778518>I<000300000780000F80000F80000F00001F00001F00003E00003E00003C
00007C00007C0000F80000F80000F00001F00001F00003E00003E00007C00007C0000780000F80
000F80001F00001F00001E00003E00003E00007C00007C0000780000F80000F80000F000006000
0011247D9F18>I<01F00007FC000FFE001F1F001C07003803807803C07001C07001C0E000E0E0
00E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C03803801C
07001F1F000FFE0007FC0001F000131C7E9B18>I<01800380078007800F803F80FF80FB806380
03800380038003800380038003800380038003800380038003800380038003807FFCFFFE7FFC0F
1C7B9B18>I<07F8001FFE003FFF007C0F807003C0F001E0F000E0F000E0F000E00000E00000E0
0001E00001C00003C0000780000F00001E00003C0000780000F00003E00007C0000F80001E00E0
3C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<001F00003F00007F0000770000F70001E70001C7
0003C7000787000707000E07001E07003C0700380700780700F00700FFFFF8FFFFF8FFFFF80007
00000700000700000700000700000700007FF000FFF8007FF0151C7F9B18>52
D<78FCFCFCFC78000000000000000078FCFCFCFC780614779318>58 D<3C7E7E7E7E3C00000000
00000000387C7E7E7E3E0E1E3C78F060071A789318>I<000300000F80001F80003F0000FE0001
FC0003F00007E0001FC0003F80007E0000FC0000FC00007E00003F80001FC00007E00003F00001
FC0000FE00003F00001F80000F8000030011187D9918>I<7FFFC0FFFFE0FFFFE0FFFFE0000000
000000000000000000FFFFE0FFFFE0FFFFE07FFFC0130C7E9318>I<600000F80000FC00007E00
003F80001FC00007E00003F00001FC0000FE00003F00001F80001F80003F0000FE0001FC0003F0
0007E0001FC0003F80007E0000FC0000F8000060000011187D9918>I<00700000F80000F80000
D80000D80001DC0001DC0001DC00018C00038E00038E00038E00038E0003060007070007070007
07000707000FFF800FFF800FFF800E03800E03801C01C01C01C07F07F0FF8FF87F07F0151C7F9B
18>65 D<FFFC00FFFF00FFFF801C03C01C01C01C00E01C00E01C00E01C00E01C01E01C01C01C07
C01FFF801FFF001FFFC01C03C01C00E01C00F01C00701C00701C00701C00701C00F01C00E01C03
E0FFFFC0FFFF80FFFE00141C7F9B18>I<01FCE003FEE007FFE00F07E01E03E03C01E07800E070
00E07000E0F00000E00000E00000E00000E00000E00000E00000E00000E00000F000007000E070
00E07800E03C01E01E01C00F07C007FF8003FF0001FC00131C7E9B18>I<7FF800FFFE007FFF00
1C0F801C03C01C03C01C01E01C00E01C00E01C00F01C00701C00701C00701C00701C00701C0070
1C00701C00701C00F01C00E01C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F
9B18>I<FFFFF0FFFFF0FFFFF01C00701C00701C00701C00701C00001C00001C0E001C0E001C0E
001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C00381C00381C00381C00381C00
38FFFFF8FFFFF8FFFFF8151C7F9B18>I<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C00E01C
00001C00001C1C001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C1C001C00001C00001C
00001C00001C00001C00001C0000FFC000FFC000FFC000131C7E9B18>I<01F9C007FFC00FFFC0
1F0FC01C03C03C03C07801C07001C07001C0F00000E00000E00000E00000E00000E00000E00FF0
E01FF0E00FF0F001C07001C07003C07803C03C03C01C07C01F0FC00FFFC007FDC001F9C0141C7E
9B18>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01
C01FFFC01FFFC01FFFC01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01
C07F07F0FF8FF87F07F0151C7F9B18>I<7FFF00FFFF807FFF0001C00001C00001C00001C00001
C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C00001C00001C00001C0007FFF00FFFF807FFF00111C7D9B18>I<7F07F0FF87F87F07F0
1C03C01C07801C07001C0F001C1E001C3C001C38001C78001CF0001DF0001DF8001FF8001FBC00
1F1C001E1E001E0E001C0F001C07001C07801C03801C03C01C01C07F03F0FF87F87F03F0151C7F
9B18>75 D<7FE000FFE0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E
00000E00000E00000E00000E00000E00000E00000E00000E00000E00700E00700E00700E00700E
00707FFFF0FFFFF07FFFF0141C7F9B18>I<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E0
3B8EE03B8EE0398CE0398CE039DCE039DCE039DCE038D8E038D8E038F8E03870E03870E03800E0
3800E03800E03800E03800E03800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07
F01D81C01D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31
C01C39C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C
7F9B18>I<0FF8003FFE007FFF00780F00700700F00780E00380E00380E00380E00380E00380E0
0380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380F0078070070078
0F007FFF003FFE000FF800111C7D9B18>I<FFFE00FFFF80FFFFC01C03C01C01E01C00E01C0070
1C00701C00701C00701C00701C00E01C01E01C03C01FFFC01FFF801FFE001C00001C00001C0000
1C00001C00001C00001C00001C0000FF8000FF8000FF8000141C7F9B18>I<7FF800FFFE007FFF
001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FFE001C0F
001C07801C03801C03801C03801C03801C03801C039C1C039C1C039C7F03FCFF81F87F00F0161C
7F9B18>82 D<07F3801FFF803FFF807C1F80700780F00380E00380E00380E00000F00000780000
3F00001FF0000FFE0001FF00001F800003C00001E00000E00000E06000E0E000E0E001E0F001C0
FC07C0FFFF80FFFF00E7FC00131C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038E070
380070000070000070000070000070000070000070000070000070000070000070000070000070
0000700000700000700000700000700007FF0007FF0007FF00151C7F9B18>I<FF83FEFF83FEFF
83FE1C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C
00701C00701C00701C00701C00701C00701E00F00E00E00F01E007C7C003FF8001FF00007C0017
1C809B18>I<FF07F8FF07F8FF07F81C01C01C01C01C01C01C01C00E03800E03800E03800E0380
0F0780070700070700070700070700038E00038E00038E00038E00018C0001DC0001DC0001DC00
00D80000F80000F800007000151C7F9B18>I<FE03F8FE03F8FE03F87000707000707000703800
E03800E03800E03800E03800E038F8E038F8E039DCE039DCE019DCC019DCC019DCC0198CC01D8D
C01D8DC01D8DC01D8DC00D8D800D05800F07800F07800E0380151C7F9B18>I<7F8FE07F9FE07F
8FE00E07000F0700070E00078E00039C0003DC0001F80001F80000F00000F00000700000F00000
F80001F80001DC00039E00038E00070F000707000E07800E03801E03C07F07F0FF8FF87F07F015
1C7F9B18>I<FF07F8FF07F8FF07F81C01C01E03C00E03800F0780070700070700038E00038E00
01DC0001DC0001FC0000F80000F800007000007000007000007000007000007000007000007000
00700001FC0003FE0001FC00151C7F9B18>I<3FFFE07FFFE07FFFE07001C07003C07007807007
00000F00001E00001C00003C0000780000700000F00001E00001C00003C0000780000700000F00
001E00E01C00E03C00E07800E07000E0FFFFE0FFFFE0FFFFE0131C7E9B18>I<FFF8FFF8FFF8E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
E000E000E000E000E000E000E000E000E000E000FFF8FFF8FFF80D24779F18>I<FFF8FFF8FFF8
003800380038003800380038003800380038003800380038003800380038003800380038003800
380038003800380038003800380038003800380038FFF8FFF8FFF80D247F9F18>93
D<7FFF00FFFF80FFFF807FFF0011047D7F18>95 D<1FE0003FF8007FFC00783E00300F00000700
00070001FF000FFF003FFF007F0700780700F00700E00700E00700F00F00783F007FFFF03FFBF0
0FE1F014147D9318>97 D<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000E
FF800FFFC00FE3E00F80F00F00700F00780E00380E00380E00380E00380E00380F00380F00780F
00700F80F00FC3E00FFFC00EFF80067E00151C809B18>I<01FE0007FF001FFF803F07803C0300
780000700000F00000E00000E00000E00000E00000F000007000007801C03C01C03F07C01FFF80
07FF0001FC0012147D9318>I<001F80003F80001F8000038000038000038000038000038003F3
800FFB801FFF803E1F80780F80700780F00780E00380E00380E00380E00380E00380E00780F007
80700780780F803E3F801FFFF00FFBF803E3F0151C7E9B18>I<03F0000FFC001FFE003E1F0078
0780700380F003C0E001C0E001C0FFFFC0FFFFC0FFFFC0F000007000007801C03C01C03F07C01F
FF8007FF0001FC0012147D9318>I<001FC0007FE000FFE001F1E001C0C001C00001C00001C000
7FFFC0FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
01C00001C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<03F1F007FFF80FFFF81E1F
303C0F003807003807003807003807003807003C0F001E1E001FFC003FF8003BF0003800003C00
001FFF001FFFC03FFFE07801F0F00078E00038E00038E00038F000787800F07E03F03FFFE00FFF
8003FE00151F7F9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3F000E
FF800FFFC00FE1E00F80E00F00E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E
00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03800007C00007C00007C000038000
0000000000000000000000007FC000FFC0007FC00001C00001C00001C00001C00001C00001C000
01C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF80FFFF00111D7C9C18>
I<0038007C007C007C003800000000000000000FFC1FFC0FFC001C001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C001C001C001C001C001C003C6038F078FFF07FE03F
C00E277E9C18>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E3FF00E7FF00E
3FF00E07800E0F000E1E000E3C000E78000EF0000FF8000FFC000F9C000F1E000E0F000E07800E
03800E03C0FFC7F8FFC7F8FFC7F8151C7F9B18>I<7FE000FFE0007FE00000E00000E00000E000
00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
00E00000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7DF1F000FF
FBF8007FFFFC001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00
1C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F00191481
9318>I<7E3F00FEFF807FFFC00FE1E00F80E00F00E00F00E00E00E00E00E00E00E00E00E00E00
E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE001F
FF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C
07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FE3E00F80F00F0070
0F00780E00380E00380E00380E00380E00380F00380F00780F00700F80F00FC3E00FFFC00EFF80
0E7E000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000151E809318>
I<7F87E0FF9FF87FBFF803FC7803F03003E00003C00003C00003C0000380000380000380000380
000380000380000380000380007FFE00FFFF007FFE0015147F9318>114
D<0FF7003FFF007FFF00F81F00E00700E00700F007007C00007FF0001FFC0007FE00001F006007
80E00380F00380F00780FC0F00FFFF00FFFE00E7F80011147D9318>I<01800003800003800003
80000380007FFFC0FFFFC0FFFFC003800003800003800003800003800003800003800003800003
80000380400380E00380E00381E003C3C001FFC000FF80007E0013197F9818>I<7E07E0FE0FE0
7E07E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
0E01E00F07E007FFFC03FFFE01FCFC1714809318>I<7F8FF0FF8FF87F8FF01E03C00E03800E03
800E0380070700070700070700038E00038E00038E00038E0001DC0001DC0001DC0000F80000F8
0000700015147F9318>I<FF8FF8FF8FF8FF8FF83800E03800E03800E01C01C01C01C01C71C01C
F9C01CF9C01CD9C01CD9C00DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318>I<
7F8FF07F9FF07F8FF0070700078E00039E0001DC0001F80000F80000700000F00000F80001DC00
039E00038E000707000F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E01
C00E03800E0380070380070700070700038700038600038E0001CE0001CE0000CC0000CC0000DC
0000780000780000780000700000700000700000F00000E00079E0007BC0007F80003F00001E00
00151E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00001E00007C0000F80001
F00003E0000780000F00701E00703C0070780070FFFFF0FFFFF0FFFFF014147F9318>I<0007E0
003FE0007FE000FC0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
00E00001E0007FC000FF8000FF80007FC00001E00000E00000E00000E00000E00000E00000E000
00E00000E00000E00000E00000E00000FC00007FE0003FE00007E013247E9F18>I<7C0000FF80
00FFC00007E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
0000F000007FC0003FE0003FE0007FC000F00000E00000E00000E00000E00000E00000E00000E0
0000E00000E00000E00000E00007E000FFC000FF80007C000013247E9F18>125
D E /Fp 15 117 df<060C183030606060C0C0C0C0C0C0C0C0C0C06060603030180C06071A7F92
0C>40 D<C0603018180C0C0C060606060606060606060C0C0C18183060C0071A7E920C>I<1F00
3F8060C04040C060C060C060C060C060C060C060C06060C060C03F801F000B107F8F0F>48
D<18007800F80098001800180018001800180018001800180018001800FF80FF8009107E8F0F>
I<3F007F80F1C0F0E06060006000E000C00180030006001C0038606060FFC0FFC00B107F8F0F>
I<1F003F8071C071C031C001800F800F0001C000E060E0F0E0F0E0F1C07F801F000B107F8F0F>
I<070007000F001F001B003B0033006300E300FFE0FFE00300030003001FE01FE00B107F8F0F>
I<60807F807F007C00600060006F007F8070C060E000E060E0E0E0E1C07F803F000B107F8F0F>
I<07801FC039C061C06000C000DF80FFC0E060C060C060C060606060C03F801F000B107F8F0F>
I<60007FE07FE0C0C0C1800180030006000E000C000C001C001C001C001C001C0008000B117E90
0F>I<1F003F8061C060C060C079C03F801F803FC063E0C0E0C060C06060C03F801F000B107F8F
0F>I<1F003F8060C0C0C0C060C060C060C0E07FE03F60006000C070C071807F003E000B107F8F
0F>I<03E0000FF8001C1C00380E00700700600300E00380E00380E00380E00380E00380700700
700700380E003C1E000FF80003E00011117E9017>79 D<1F803FC071C0C000C000C000C000E0C0
70C03F801F000A0B7F8A0E>99 D<30303070FEFE303030303636363C18070F7F8E0C>116
D E /Fq 4 64 df<C0000CE0001C7000383800701C00E00E01C006018007038003870001CE0000
FC0000780000780000FC0001CE000387000703800601800E01C01C00E0380070700038E0001CC0
000C16187A9623>2 D<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFE7F
FE3FFC1FF807E010127D9317>15 D<FFFFFFF0FFFFFFF000060000000600000006000000060000
000600000006000000060000000600000006000000060000000600000006000000060000000600
000006000000060000000600000006000000060000000600000006000000060000000600000006
000000060000000600001C1C7D9B23>62 D<000600000006000000060000000600000006000000
060000000600000006000000060000000600000006000000060000000600000006000000060000
000600000006000000060000000600000006000000060000000600000006000000060000000600
0000060000FFFFFFF0FFFFFFF01C1C7D9B23>I E /Fr 29 123 df<F8F8F8F8F805057B8410>
46 D<00180000380000F80007F800FFF800FFF800FFF800F8F80000F80000F80000F80000F800
00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8007FFFF07FFFF0
7FFFF07FFFF014287CA71D>49 D<00FE0003FF800FFFC01FFFE01F07F03C01F87800FC78007C70
007CF0003EF0003E60003E20003E00003E00003E00003E00007C00007C0000780000F80001F000
01E00003E00007C0000F80001F00003E00007C0000F80001F00003E00003C0000780000F00001E
00003C00007FFFFE7FFFFE7FFFFE7FFFFE17287EA71D>I<007E0003FF8007FFE00FFFF01F81F8
3E00F87C007C78007C30007C10007C00007C00007C0000780000F80000F80001F00007E000FFC0
00FF8000FFC000FFF00001F80000FC00007C00003E00003E00001F00001F00001F00001F00001F
80001FC0003EE0003EF0007E7C00FC3F01F81FFFF00FFFE003FFC000FE0018297EA71D>I<0007
E0000FE0000BE0001BE0001BE0003BE0003BE00073E00073E000F3E000F3E001E3E001E3E003E3
E003C3E007C3E00F83E00F83E01F03E01F03E03E03E03E03E07C03E07C03E0F803E0FFFFFFFFFF
FFFFFFFFFFFFFF0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E01827
7EA61D>I<3FFFF83FFFF83FFFF83FFFF83E00003E00003E00003E00003E00003E00003E00003E
00003E00003E00003E3E003EFF803FFFE03FFFF03FC1F03F80F83F007C3E007C00007C00003E00
003E00003E00003E00003E00003E00003E20003E60007C70007CF800F87C01F87F07F03FFFE00F
FFC007FF0001FC0017287EA61D>I<000FE0003FF800FFF801FFF803F81807E0000F80000F8000
1F00003E00003E00003C00007C00007C02007C3FC0F8FFE0F9FFF0FBFFF8FF80FCFE007CFE003E
FC003EFC003FFC001FF8001FF8001FF8001FF8001F78001F7C001F7C001F7C001E3C003E3E003E
1E007C1F00FC0FC1F807FFF003FFE001FF80007E0018297EA71D>I<0003FE00000FFFC0003FFF
F000FFFFF001FE03F003F8006007E0002007C000000F8000001F8000001F0000003E0000003E00
00007C0000007C0000007C0000007C000000F8000000F8000000F8000000F8000000F8000000F8
000000F8000000F8000000F8000000F80000007C0000007C0000007C0000007C0000003E000000
3E0000001F0000001F8000000F80000007C0000007E0000803F8003801FE01F800FFFFF8003FFF
F0000FFFC00003FE001D2C7CAA25>67 D<FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0F8000000F800
0000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
000000F8000000F8000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00F8000000F8000000F8000000
F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000
00F8000000F8000000F8000000FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE01B2A7BA923>69
D<F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
F8F8F8F8052A7BA910>73 D<007FC00001FFF80007FFFE000FFFFF001FC07F003F000F007E0006
007C0000007C000000F8000000F8000000F8000000F8000000F8000000FC0000007E0000007F00
00003F8000001FF800000FFF000007FFE00003FFF80000FFFC00000FFE000000FF0000003F0000
001F8000000F8000000FC0000007C0000007C0000007C0000007C0000007C0000007C000000F80
60000F80F0001F00FC003F00FF80FE007FFFFC001FFFF80007FFE00000FF80001A2C7DAA21>83
D<01FC000FFF003FFF803FFFC03C07E03003E00001F00001F00001F00001F00001F00003F001FF
F007FFF01FFFF03FC1F07E01F0FC01F0F801F0F801F0F801F0FC03F07E0FF07FFFF03FFFF01FF9
F00FE1F0141B7E9A1C>97 D<007F8001FFE007FFF80FFFF81FC0783F00103E00007C00007C0000
7C0000F80000F80000F80000F80000F80000F80000F800007C00007C00007C00003E00003F0018
1FC0780FFFF807FFF801FFE0007F80151B7E9A1A>99 D<00007C00007C00007C00007C00007C00
007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00FC7C03FF7C07FFFC0F
FFFC1FC1FC3F00FC3E007C7C007C7C007CFC007CF8007CF8007CF8007CF8007CF8007CF8007CF8
007CF8007C7C007C7C007C7E00FC3F00FC1F83FC1FFFFC0FFF7C03FE7C01F87C162A7EA91E>I<
00FC0003FF0007FF800FFFC01F87E03F01E03E00F07C00F07C0070F80078FFFFF8FFFFF8FFFFF8
FFFFF8F80000F80000F800007800007C00007C00003E00003F00181FC0F80FFFF807FFF801FFE0
007F00151B7E9A1A>I<F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
00F80000F80000F80000F80000F80000F87E00F9FF00FBFF80FFFFC0FF0FC0FE07E0FC03E0FC03
E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803
E0F803E0F803E0F803E0F803E0F803E0F803E0132A7BA91E>104 D<F8F8F8F8F8000000000000
00000000F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7CA90E>I<F8
F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
F8F8052A7CA90E>108 D<F83F007E00F9FF83FF00FBFFC7FF80FFFFEFFFC0FF07FE0FC0FE03FC
07E0FC01F803E0FC01F803E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801
F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F8
01F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0231B7B9A30>I<F87E00
F9FF00FBFF80FFFFC0FF0FC0FE07E0FC03E0FC03E0F803E0F803E0F803E0F803E0F803E0F803E0
F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0
131B7B9A1E>I<007E0001FF8007FFE00FFFF01F81F83F00FC3E007C7C003E7C003E78001EF800
1FF8001FF8001FF8001FF8001FF8001FF8001F7C003E7C003E7C003E3E007C3F00FC1FC3F80FFF
F007FFE003FFC0007E00181B7E9A1D>I<F87E00F9FF80FFFFC0FFFFE0FF0FE0FC03F0F801F8F8
00F8F800F8F800FCF8007CF8007CF8007CF8007CF8007CF8007CF8007CF800FCF800F8F801F8F8
01F0FC03F0FE0FE0FFFFC0FFFF80FBFF00F8FC00F80000F80000F80000F80000F80000F80000F8
0000F80000F80000F80000F80000F8000016277B9A1E>I<F838F8F8F9F8FBF8FFC0FF00FE00FE
00FC00FC00F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800
0D1B7B9A14>114 D<07F8001FFF003FFF807FFF807C0780F80100F80000F80000F80000FC0000
7F00007FF0003FFC001FFE0007FF0000FF80001FC0000FC00007C00007C04007C0E007C0FC1F80
FFFF807FFF001FFE0007F800121B7E9A16>I<07C00007C00007C00007C00007C00007C00007C0
00FFFF80FFFF80FFFF80FFFF8007C00007C00007C00007C00007C00007C00007C00007C00007C0
0007C00007C00007C00007C00007C00007C00007C00007C00007C08007E38003FFC003FFC001FF
0000FC0012227FA115>I<F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8
03E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F807E0F807E0FC
1FE0FFFFE07FFBE03FF3E01F83E0131B7B9A1E>I<7C001F803E003F003F003E001F807C000F80
FC0007C0F80007E1F00003F3E00001F7E00000FFC000007F8000007F0000003E0000003E000000
3F0000007F800000FFC00001F3E00003E1E00003E1F00007C0F8000F807C001F807C001F003E00
3E001F007C001F80FC000FC01A1B809A1B>120 D<F8001FFC001F7C003E7C003E3E003E3E007C
3F007C1F007C1F00F80F80F80F80F00F81F007C1F007C1E003C1E003E3E003E3C001E3C001E3C0
00F78000F78000F780007700007700003F00003E00003E00003E00003C00003C00007800007800
00780000F00001F0007FE0007FE0007FC0007F000018277F9A1B>I<FFFFF0FFFFF0FFFFF0FFFF
E00007E00007C0000F80001F80001F00003E00007E00007C0000F80001F80001F00003E00007E0
0007C0000F80001F80001F00003E00007E00007FFFF8FFFFF8FFFFF8FFFFF8151B7E9A19>I
E /Fs 23 122 df<FFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFF
FEFFFFFFFE1F097F9B27>45 D<FFFFFFFFFFFFC00000FFFFFFFFFFFFFC0000FFFFFFFFFFFFFF80
00FFFFFFFFFFFFFFE000FFFFFFFFFFFFFFF800001FFF000003FFFC00001FFF0000007FFE00001F
FF0000003FFF00001FFF0000001FFF80001FFF0000000FFFC0001FFF0000000FFFC0001FFF0000
0007FFE0001FFF00000007FFE0001FFF00000007FFE0001FFF00000003FFF0001FFF00000003FF
F0001FFF00000003FFF0001FFF00000003FFF0001FFF00000003FFF0001FFF00000003FFF0001F
FF00000003FFF0001FFF00000003FFF0001FFF00000007FFE0001FFF00000007FFE0001FFF0000
0007FFC0001FFF0000000FFFC0001FFF0000000FFF80001FFF0000001FFF00001FFF0000003FFE
00001FFF0000007FFC00001FFF000001FFF800001FFF00000FFFE000001FFFFFFFFFFF8000001F
FFFFFFFFFC0000001FFFFFFFFFFF8000001FFFFFFFFFFFF000001FFF000000FFFC00001FFF0000
003FFF00001FFF0000000FFF80001FFF00000007FFE0001FFF00000003FFF0001FFF00000001FF
F0001FFF00000001FFF8001FFF00000000FFFC001FFF00000000FFFC001FFF000000007FFE001F
FF000000007FFE001FFF000000007FFE001FFF000000007FFF001FFF000000007FFF001FFF0000
00007FFF001FFF000000007FFF001FFF000000007FFF001FFF000000007FFF001FFF000000007F
FF001FFF000000007FFF001FFF000000007FFE001FFF00000000FFFE001FFF00000000FFFE001F
FF00000001FFFC001FFF00000001FFFC001FFF00000003FFF8001FFF00000007FFF0001FFF0000
000FFFE0001FFF0000003FFFC0001FFF000001FFFF80FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFC
00FFFFFFFFFFFFFFF000FFFFFFFFFFFFFF8000FFFFFFFFFFFFF8000048477CC653>66
D<000000007FFC00000E0000000FFFFFC0001E0000007FFFFFF8003E000003FFFFFFFE007E0000
0FFFFFFFFF80FE00003FFFF8007FC1FE0000FFFF80000FF3FE0003FFFC000003FFFE0007FFF000
0001FFFE000FFFC00000007FFE001FFF800000003FFE003FFF000000001FFE007FFC000000000F
FE00FFFC000000000FFE01FFF80000000007FE03FFF00000000003FE03FFE00000000003FE07FF
E00000000001FE0FFFC00000000001FE0FFFC00000000000FE1FFF800000000000FE1FFF800000
0000007E3FFF8000000000007E3FFF0000000000007E3FFF0000000000003E7FFF000000000000
3E7FFF0000000000003E7FFF0000000000003E7FFE000000000000007FFE00000000000000FFFE
00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000FFFE000000
00000000FFFE00000000000000FFFE00000000000000FFFE00000000000000FFFE000000000000
00FFFE00000000000000FFFE00000000000000FFFE00000000000000FFFE000000000000007FFE
000000000000007FFE000000000000007FFF000000000000007FFF0000000000003E7FFF000000
0000003E3FFF0000000000003E3FFF0000000000003E3FFF8000000000003E1FFF800000000000
7E1FFF8000000000007C0FFFC000000000007C0FFFC00000000000FC07FFE00000000000FC03FF
E00000000000F803FFF00000000001F801FFF80000000003F000FFFC0000000003F0007FFE0000
000007E0003FFF000000000FC0001FFF800000001F80000FFFC00000003F000007FFF0000000FE
000003FFFC000001FC000000FFFF80000FF80000003FFFF8007FE00000000FFFFFFFFFC0000000
03FFFFFFFF00000000007FFFFFFC00000000000FFFFFE00000000000007FFE00000047497AC754
>I<00000003FFF0000000000000007FFFFF80000000000003FFFFFFF000000000000FFFFFFFFC
00000000003FFF003FFF0000000000FFF80007FFC000000003FFE00001FFF000000007FF800000
7FF80000000FFF0000003FFC0000001FFE0000001FFE0000003FFC0000000FFF0000007FF80000
0007FF800000FFF000000003FFC00001FFF000000003FFE00003FFE000000001FFF00003FFC000
000000FFF00007FFC000000000FFF80007FFC000000000FFF8000FFF80000000007FFC000FFF80
000000007FFC001FFF80000000007FFE001FFF00000000003FFE003FFF00000000003FFF003FFF
00000000003FFF003FFF00000000003FFF007FFF00000000003FFF807FFE00000000001FFF807F
FE00000000001FFF807FFE00000000001FFF807FFE00000000001FFF80FFFE00000000001FFFC0
FFFE00000000001FFFC0FFFE00000000001FFFC0FFFE00000000001FFFC0FFFE00000000001FFF
C0FFFE00000000001FFFC0FFFE00000000001FFFC0FFFE00000000001FFFC0FFFE00000000001F
FFC0FFFE00000000001FFFC0FFFE00000000001FFFC0FFFE00000000001FFFC0FFFE0000000000
1FFFC0FFFE00000000001FFFC07FFE00000000001FFF807FFF00000000003FFF807FFF00000000
003FFF807FFF00000000003FFF803FFF00000000003FFF003FFF00000000003FFF003FFF800000
00007FFF001FFF80000000007FFE001FFF80000000007FFE001FFF80000000007FFE000FFFC000
000000FFFC000FFFC000000000FFFC0007FFE000000001FFF80003FFE000000001FFF00003FFF0
00000003FFF00001FFF000000003FFE00000FFF800000007FFC000007FFC0000000FFF8000007F
FE0000001FFF8000003FFF0000003FFF0000000FFFC00000FFFC00000007FFE00001FFF8000000
03FFF80007FFF000000000FFFF003FFFC0000000007FFFFFFFFF80000000000FFFFFFFFC000000
000003FFFFFFF00000000000007FFFFF8000000000000003FFF0000000004A497AC757>79
D<00007FF00007000007FFFF000F00001FFFFFE01F00007FFFFFF83F0000FFFFFFFC7F0003FFC0
0FFFFF0007FE0000FFFF000FFC00003FFF000FF800001FFF001FF000000FFF003FE0000007FF00
3FE0000003FF007FE0000001FF007FC0000000FF007FC0000000FF00FFC00000007F00FFC00000
007F00FFC00000003F00FFE00000003F00FFE00000003F00FFE00000001F00FFF00000001F00FF
F80000001F00FFFC0000001F00FFFE00000000007FFF80000000007FFFF8000000007FFFFF8000
00003FFFFFFC0000003FFFFFFFC000001FFFFFFFF800001FFFFFFFFF00000FFFFFFFFFC00007FF
FFFFFFE00003FFFFFFFFF00001FFFFFFFFFC0000FFFFFFFFFC00003FFFFFFFFE00000FFFFFFFFF
000003FFFFFFFF8000007FFFFFFF80000003FFFFFFC00000003FFFFFC000000001FFFFE0000000
003FFFE0000000000FFFE00000000003FFF00000000001FFF00000000001FFF0F800000000FFF0
F8000000007FF0F8000000007FF0F8000000007FF0F8000000003FF0FC000000003FF0FC000000
003FF0FC000000003FE0FE000000003FE0FE000000003FE0FF000000007FE0FF800000007FC0FF
800000007FC0FFC0000000FF80FFF0000001FF80FFF8000001FF00FFFE000003FE00FFFFC0000F
FC00FF7FFC007FF800FE3FFFFFFFF000FC0FFFFFFFC000F803FFFFFF0000F0007FFFFC0000E000
03FFE0000034497AC741>83 D<0003FFF0000000003FFFFF00000000FFFFFFE0000001FFFFFFF8
000003FF003FFC000007FF800FFE000007FF8007FF000007FF8003FF800007FF8003FFC00007FF
8001FFC00007FF8001FFC00003FF0000FFE00001FE0000FFE00000FC0000FFE00000000000FFE0
0000000000FFE00000000000FFE00000000000FFE00000000000FFE000000000FFFFE00000007F
FFFFE0000007FFFFFFE000003FFFFCFFE00000FFFE00FFE00003FFF000FFE00007FFC000FFE000
0FFF0000FFE0001FFE0000FFE0003FFC0000FFE0007FFC0000FFE0007FF80000FFE000FFF80000
FFE000FFF00000FFE000FFF00000FFE000FFF00000FFE000FFF00001FFE000FFF00001FFE000FF
F80003FFE0007FFC0007FFE0007FFC000FFFE0003FFE001F7FF8001FFF80FE7FFFF007FFFFFC3F
FFF003FFFFF01FFFF0007FFFC00FFFF00007FE0003FFF0342E7DAD38>97
D<007FC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC0
0000000003FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000000
01FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000
00000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001
FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00FFE000001FFC0FFFF
C00001FFC3FFFFF00001FFCFFFFFFC0001FFFFE01FFF0001FFFF0007FF8001FFFC0001FFC001FF
F80000FFE001FFF00000FFF001FFE000007FF001FFC000007FF801FFC000003FFC01FFC000003F
FC01FFC000003FFC01FFC000001FFE01FFC000001FFE01FFC000001FFE01FFC000001FFF01FFC0
00001FFF01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC000001FFF
01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC000
001FFE01FFC000001FFE01FFC000003FFE01FFC000003FFC01FFC000003FFC01FFC000003FF801
FFC000007FF801FFE000007FF001FFF00000FFE001FFF80001FFE001FFFC0003FFC001FF7F0007
FF0001FE3FC03FFE0001FC0FFFFFF80001FC03FFFFF00001F800FFFF800001F0001FF800003848
7CC741>I<00001FFF80000001FFFFF8000007FFFFFE00001FFFFFFF00007FF801FF8000FFE003
FFC003FFC003FFC007FF8003FFC007FF0003FFC00FFE0003FFC01FFE0003FFC01FFC0001FF803F
FC0000FF003FFC00007E007FFC000000007FF8000000007FF800000000FFF800000000FFF80000
0000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FF
F800000000FFF800000000FFF800000000FFF8000000007FFC000000007FFC000000007FFC0000
00003FFC000000003FFE000000001FFE000001F01FFF000001F00FFF000003F007FF800007E007
FFC00007C003FFE0000FC000FFF8003F80007FFF00FF00001FFFFFFC000007FFFFF0000001FFFF
C00000001FFC00002C2E7CAD34>I<0000000000FF8000000001FFFF8000000001FFFF80000000
01FFFF8000000001FFFF8000000001FFFF800000000007FF800000000003FF800000000003FF80
0000000003FF800000000003FF800000000003FF800000000003FF800000000003FF8000000000
03FF800000000003FF800000000003FF800000000003FF800000000003FF800000000003FF8000
00000003FF800000000003FF800000000003FF800000000003FF800000000003FF800000000003
FF8000001FF803FF800001FFFF03FF80000FFFFFE3FF80003FFFFFFBFF80007FFC03FFFF8001FF
E0007FFF8003FFC0003FFF8007FF80000FFF800FFF000007FF800FFE000003FF801FFE000003FF
801FFC000003FF803FFC000003FF803FFC000003FF807FFC000003FF807FF8000003FF807FF800
0003FF80FFF8000003FF80FFF8000003FF80FFF8000003FF80FFF8000003FF80FFF8000003FF80
FFF8000003FF80FFF8000003FF80FFF8000003FF80FFF8000003FF80FFF8000003FF80FFF80000
03FF80FFF8000003FF807FF8000003FF807FF8000003FF807FF8000003FF803FFC000003FF803F
FC000003FF803FFC000003FF801FFE000007FF800FFE000007FF800FFF00000FFF8007FF00001F
FF8003FF80007FFF8001FFE000FFFFC000FFF807FBFFFF003FFFFFE3FFFF000FFFFFC3FFFF0003
FFFE03FFFF00003FF003FFFF38487CC741>I<00003FFE00000001FFFFC000000FFFFFF800003F
FFFFFC00007FFC0FFE0000FFE003FF0001FF8000FF8003FF0000FFC007FF00007FE00FFE00003F
F01FFE00003FF01FFC00003FF03FFC00001FF83FFC00001FF87FFC00001FF87FF800001FFC7FF8
00000FFC7FF800000FFCFFF800000FFCFFFFFFFFFFFCFFFFFFFFFFFCFFFFFFFFFFFCFFFFFFFFFF
FCFFF800000000FFF800000000FFF800000000FFF800000000FFF8000000007FF8000000007FF8
000000007FFC000000007FFC000000003FFC000000003FFC0000007C1FFE0000007C0FFE000000
FC0FFF000000F807FF800001F803FFC00003F001FFE00007E000FFF8001FC0007FFF00FF80001F
FFFFFF000007FFFFFC000000FFFFF00000000FFF00002E2E7DAD35>I<00000000003F000000FF
F000FFC00007FFFE03FFE0003FFFFFCFFFF0007FFFFFFFCFF001FFE07FFE0FF003FF801FFC1FF0
07FF000FFE0FF00FFE0007FF0FF00FFE0007FF07E01FFC0003FF81801FFC0003FF80003FFC0003
FFC0003FFC0003FFC0003FFC0003FFC0003FFC0003FFC0003FFC0003FFC0003FFC0003FFC0003F
FC0003FFC0003FFC0003FFC0003FFC0003FFC0001FFC0003FF80001FFC0003FF80000FFE0007FF

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
00000FFE0007FF000007FF000FFE000003FF801FFC000001FFE07FF8000003FFFFFFE0000003FF
FFFFC000000787FFFE0000000780FFF0000000078000000000000F8000000000000F8000000000
000FC000000000000FC000000000000FE000000000000FF8000000000007FFFFFFF0000007FFFF
FFFF000007FFFFFFFFE00003FFFFFFFFF80003FFFFFFFFFC0001FFFFFFFFFE0000FFFFFFFFFF00
03FFFFFFFFFF800FFFFFFFFFFF801FF000001FFFC03FC0000001FFC07F800000007FE07F800000
003FE0FF000000003FE0FF000000001FE0FF000000001FE0FF000000001FE0FF000000001FE0FF
800000003FE07F800000003FC07FC00000007FC03FE0000000FF801FF8000003FF000FFE00000F
FE0007FFE000FFFC0001FFFFFFFFF000003FFFFFFF8000000FFFFFFE000000007FFFC000003444
7DAE3A>103 D<007FC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000
000000FFFFC00000000003FFC00000000001FFC00000000001FFC00000000001FFC00000000001
FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000
000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF
C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC007FE00
0001FFC03FFFC00001FFC0FFFFF00001FFC1FFFFFC0001FFC7F01FFC0001FFCFC00FFE0001FFDF
0007FF0001FFDE0007FF0001FFFC0007FF0001FFF80003FF8001FFF80003FF8001FFF00003FF80
01FFE00003FF8001FFE00003FF8001FFE00003FF8001FFC00003FF8001FFC00003FF8001FFC000
03FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001
FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003
FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FF
C00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF
8001FFC00003FF80FFFFFF81FFFFFFFFFFFF81FFFFFFFFFFFF81FFFFFFFFFFFF81FFFFFFFFFFFF
81FFFFFF38487BC741>I<00FC0001FF0003FF8007FF800FFFC00FFFC00FFFE00FFFE00FFFE00F
FFC00FFFC007FF8003FF8001FF0000FC0000000000000000000000000000000000000000000000
0000000000000000000000000000007FC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001
FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001
FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001
FFC001FFC001FFC001FFC001FFC001FFC001FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18497CC8
20>I<007FC000FFFFC000FFFFC000FFFFC000FFFFC000FFFFC00003FFC00001FFC00001FFC000
01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF
C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000FFFF
FF80FFFFFF80FFFFFF80FFFFFF80FFFFFF8019487CC720>108 D<00FF8003FF000003FF000000
FFFF801FFFE0001FFFE00000FFFF807FFFF8007FFFF80000FFFF81FFFFFC01FFFFFC0000FFFF83
F01FFE03F01FFE0000FFFF87C007FF07C007FF000003FF8F0007FF8F0007FF800001FF9E0003FF
9E0003FF800001FFBC0003FFBC0003FF800001FFF80001FFF80001FFC00001FFF80001FFF80001
FFC00001FFF00001FFF00001FFC00001FFE00001FFE00001FFC00001FFE00001FFE00001FFC000
01FFE00001FFE00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF
C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF
C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
01FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF
80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80592E7BAD62>
I<00FF8007FE0000FFFF803FFFC000FFFF80FFFFF000FFFF81FFFFFC00FFFF87F01FFC00FFFF8F
C00FFE0003FF9F0007FF0001FF9E0007FF0001FFBC0007FF0001FFF80003FF8001FFF80003FF80
01FFF00003FF8001FFE00003FF8001FFE00003FF8001FFE00003FF8001FFC00003FF8001FFC000
03FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001
FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003
FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FF
C00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF
8001FFC00003FF8001FFC00003FF80FFFFFF81FFFFFFFFFFFF81FFFFFFFFFFFF81FFFFFFFFFFFF
81FFFFFFFFFFFF81FFFFFF382E7BAD41>I<00000FFE0000000001FFFFF000000007FFFFFC0000
001FFFFFFF0000007FF803FFC00000FFE000FFE00001FF80003FF00003FF00001FF80007FE0000
0FFC000FFE00000FFE000FFC000007FE001FFC000007FF003FFC000007FF803FF8000003FF803F
F8000003FF807FF8000003FFC07FF8000003FFC07FF8000003FFC0FFF8000003FFE0FFF8000003
FFE0FFF8000003FFE0FFF8000003FFE0FFF8000003FFE0FFF8000003FFE0FFF8000003FFE0FFF8
000003FFE0FFF8000003FFE0FFF8000003FFE07FF8000003FFC07FF8000003FFC07FF8000003FF
C07FF8000003FFC03FFC000007FF803FFC000007FF801FFC000007FF001FFC000007FF000FFE00
000FFE0007FF00001FFC0003FF00001FF80001FFC0007FF00000FFE000FFE000007FFC07FFC000
001FFFFFFF00000007FFFFFC00000001FFFFF0000000001FFF000000332E7DAD3A>I<007FC00F
FE0000FFFFC0FFFFC000FFFFC3FFFFF000FFFFCFFFFFFC00FFFFFFE03FFF00FFFFFF000FFF8003
FFFC0007FFC001FFF80003FFE001FFF00001FFF001FFE00000FFF001FFC00000FFF801FFC00000
7FFC01FFC000007FFC01FFC000003FFC01FFC000003FFE01FFC000003FFE01FFC000003FFE01FF
C000001FFF01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC000001F
FF01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC000001FFF01FFC0
00001FFF01FFC000003FFE01FFC000003FFE01FFC000003FFE01FFC000007FFC01FFC000007FFC
01FFC000007FF801FFC00000FFF801FFE00000FFF001FFF00001FFE001FFF80003FFE001FFFC00
07FFC001FFFF000FFF0001FFFFC07FFE0001FFCFFFFFF80001FFC3FFFFF00001FFC0FFFF800001
FFC01FF8000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000
000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF
C00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000000FFFFFF800000
00FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF8000000038427CAD41>I<00FF80
7F00FFFF81FFC0FFFF87FFF0FFFF8FFFF8FFFF9F8FFCFFFF9F1FFE03FFBE1FFE01FFBC1FFE01FF
F81FFE01FFF81FFE01FFF01FFE01FFF00FFC01FFE007F801FFE003F001FFE0000001FFE0000001
FFE0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC00000
01FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC000
0001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0
000001FFC00000FFFFFFE000FFFFFFE000FFFFFFE000FFFFFFE000FFFFFFE000272E7CAD2F>
114 D<000FFE01C000FFFFC7C003FFFFFFC007FFFFFFC01FF001FFC03FC0007FC03F80003FC07F
00001FC07E00000FC0FE00000FC0FE000007C0FE000007C0FF000007C0FF800007C0FFC0000000
FFF8000000FFFFC000007FFFFE00007FFFFFE0003FFFFFF8001FFFFFFE000FFFFFFF0007FFFFFF
8001FFFFFFC0007FFFFFE0001FFFFFF00000FFFFF0000007FFF00000007FF80000001FF8F80000
0FF8F8000007F8FC000007F8FC000003F8FC000003F8FE000003F8FF000003F0FF000007F0FF80
0007F0FFC0000FE0FFF0001FC0FFFC00FF80FFFFFFFF00FC7FFFFC00F01FFFF000E003FF800025
2E7CAD2E>I<0001F000000001F000000001F000000001F000000001F000000001F000000003F0
00000003F000000003F000000007F000000007F000000007F00000000FF00000000FF00000001F
F00000003FF00000003FF00000007FF0000001FFF0000003FFF000000FFFFFFFC0FFFFFFFFC0FF
FFFFFFC0FFFFFFFFC0FFFFFFFFC0007FF00000007FF00000007FF00000007FF00000007FF00000
007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF000
00007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF0
0000007FF00000007FF00000007FF001F0007FF001F0007FF001F0007FF001F0007FF001F0007F
F001F0007FF001F0007FF001F0007FF001F0007FF003F0003FF803E0003FF807E0001FFC07C000
1FFE0F80000FFFFF800003FFFE000000FFFC0000001FE00024427EC12D>I<007FC00000FF80FF
FFC001FFFF80FFFFC001FFFF80FFFFC001FFFF80FFFFC001FFFF80FFFFC001FFFF8003FFC00007
FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FF
C00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF
8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC0
0003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF80
01FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00007FF8001FFC000
07FF8001FFC00007FF8001FFC0000FFF8001FFC0001FFF8000FFC0003FFF8000FFE0007FFF8000
7FE000FBFFC0007FF803F3FFFF003FFFFFE3FFFF000FFFFF83FFFF0003FFFE03FFFF00007FF003
FFFF382E7BAD41>I<FFFFFF0003FFFFFFFFFF0003FFFFFFFFFF0003FFFFFFFFFF0003FFFFFFFF
FF0003FFFF01FFE000001F8000FFE000001F0000FFF000003F00007FF000003E00007FF800007E
00003FF800007C00003FFC0000FC00001FFC0000F800001FFC0000F800001FFE0001F800000FFE
0001F000000FFF0003F0000007FF0003E0000007FF8007E0000003FF8007C0000003FFC007C000
0003FFC00FC0000001FFC00F80000001FFE01F80000000FFE01F00000000FFF03F000000007FF0
3E000000007FF87E000000003FF87C000000003FF87C000000003FFCFC000000001FFCF8000000
001FFFF8000000000FFFF0000000000FFFF00000000007FFE00000000007FFE00000000003FFC0
0000000003FFC00000000003FFC00000000001FF800000000001FF800000000000FF0000000000
00FF0000000000007E0000000000007E0000000000007E0000000000007C000000000000FC0000
00000000F8000000000001F8000000000001F00000001F0003F00000003F8003E00000007FC003
E0000000FFE007C0000000FFE00FC0000000FFE00F80000000FFE01F80000000FFE03F00000000
7FC0FE000000007F83FC000000003FFFF8000000001FFFE00000000007FF800000000001FE0000
00000038427EAD3D>121 D E /Ft 8 117 df<0C000001800F80000F800FF800FF800FFFFFFF00
0FFFFFFF000FFFFFFE000FFFFFFC000FFFFFF0000FFFFFE0000FFFFFC0000FFFFF00000FFFF800
000F1F8000000F000000000F000000000F000000000F000000000F000000000F000000000F0000
00000F000000000F03FE00000F1FFFE0000F7FFFF8000FFE07FC000FF003FF000FC001FF800F80
00FFC00F0000FFC0060000FFE00000007FE00000007FF00000007FF00000007FF00000007FF800
00007FF80000007FF81F00007FF87F80007FF87FC0007FF8FFE0007FF8FFE0007FF8FFE0007FF8
FFE0007FF0FFC0007FF0FFC0007FF07F8000FFE07C0000FFE07C0000FFC03E0001FFC01F0003FF
801FC007FF000FF01FFE0003FFFFF80001FFFFE000007FFF8000000FF8000025397BB730>53
D<0000001FFE0000E0000003FFFFE001E000001FFFFFF803E000007FFFFFFE07E00001FFFC00FF
0FE00007FFC0001FDFE0000FFF000007FFE0003FFC000001FFE0007FF0000000FFE000FFE00000
007FE001FFC00000003FE003FF800000001FE007FF800000001FE007FF000000000FE00FFE0000
000007E00FFE0000000007E01FFC0000000007E01FFC0000000003E03FFC0000000003E03FF800
00000003E07FF80000000001E07FF80000000001E07FF80000000001E07FF0000000000000FFF0
000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FF
F0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000
FFF0000000000000FFF0000000000000FFF00000000000007FF00000000000007FF80000000000
007FF80000000001E07FF80000000001E03FF80000000001E03FFC0000000001E01FFC00000000
01E01FFC0000000003E00FFE0000000003C00FFE0000000007C007FF0000000007C007FF800000
000F8003FF800000000F8001FFC00000001F0000FFE00000003E00007FF00000007C00003FFC00
0000F800000FFF000003F0000007FFC0000FE0000001FFFC007FC00000007FFFFFFF000000001F
FFFFFC0000000003FFFFE000000000001FFE0000003B3D7BBB46>67 D<003FFF00000001FFFFE0
000007FFFFFC00000FF007FE00001FF801FF80001FF800FFC0001FF8007FE0001FF8007FE0001F
F8007FF0000FF0003FF00007E0003FF00003C0003FF0000000003FF0000000003FF0000000003F
F0000000003FF0000000FFFFF000000FFFFFF000007FF83FF00003FF803FF00007FE003FF0001F
FC003FF0003FF8003FF0007FF0003FF0007FE0003FF000FFE0003FF000FFC0003FF000FFC0003F
F000FFC0003FF000FFC0007FF000FFC0007FF000FFE000FFF0007FE001DFF0003FF003DFFC001F
FC0F9FFFE00FFFFE0FFFE001FFF807FFE0003FE001FFE02B267DA52F>97
D<0003FF8000001FFFF000007FFFFC0000FF83FF0003FE00FF8007FC003F800FF8003FC01FF800
1FE01FF0001FE03FF0001FF03FF0000FF07FE0000FF07FE0000FF87FE0000FF8FFE0000FF8FFE0
000FF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFE0000000FFE0000000FFE0000000FFE0000000FF
E00000007FE00000007FE00000007FF00000003FF00000783FF00000781FF80000F80FF80000F0
07FC0001F003FE0003E001FF000FC000FFC07F80003FFFFE00000FFFFC000001FFC00025267DA5
2C>101 D<00FF0000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF00000000
0007FF000000000003FF000000000003FF000000000003FF000000000003FF000000000003FF00
0000000003FF000000000003FF000000000003FF000000000003FF000000000003FF0000000000
03FF000000000003FF000000000003FF000000000003FF000000000003FF000000000003FF0000
00000003FF003FE0000003FF01FFFC000003FF07FFFE000003FF0F81FF800003FF3C00FF800003
FF3800FFC00003FF7000FFC00003FFE0007FE00003FFC0007FE00003FFC0007FE00003FF80007F
E00003FF80007FE00003FF00007FE00003FF00007FE00003FF00007FE00003FF00007FE00003FF
00007FE00003FF00007FE00003FF00007FE00003FF00007FE00003FF00007FE00003FF00007FE0
0003FF00007FE00003FF00007FE00003FF00007FE00003FF00007FE00003FF00007FE00003FF00
007FE00003FF00007FE00003FF00007FE00003FF00007FE00003FF00007FE00003FF00007FE000
03FF00007FE000FFFFFC1FFFFF80FFFFFC1FFFFF80FFFFFC1FFFFF80FFFFFC1FFFFF80313C7DBB
36>104 D<00FF00FF8000FFFF0FFFF800FFFF3FFFFE00FFFFFE03FF00FFFFF000FFC007FFE000
7FE003FFC0003FF003FF80003FF803FF00001FF803FF00001FFC03FF00000FFC03FF00000FFE03
FF00000FFE03FF00000FFE03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF0000
07FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF00000FFE03
FF00000FFE03FF00000FFE03FF00000FFC03FF00001FFC03FF00001FF803FF80003FF003FFC000
7FF003FFE000FFE003FFF001FF8003FFFE07FF0003FF3FFFFC0003FF0FFFF00003FF01FF000003
FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000
000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000FF
FFFC000000FFFFFC000000FFFFFC000000FFFFFC00000030377EA536>112
D<00FE01F800FFFE07FF00FFFE1FFF80FFFE3E3FC0FFFE787FE007FE707FE003FEE07FE003FEE0
7FE003FFC07FE003FFC03FC003FF801F8003FF800F0003FF80000003FF80000003FF00000003FF
00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003
FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000
03FF00000003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE000023267EA5
28>114 D<000F0000000F0000000F0000000F0000000F0000001F0000001F0000001F0000001F
0000003F0000003F0000007F0000007F000000FF000001FF000003FF000007FF00001FFFFFF0FF
FFFFF0FFFFFFF0FFFFFFF003FF000003FF000003FF000003FF000003FF000003FF000003FF0000
03FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF00
0003FF000003FF000003FF003C03FF003C03FF003C03FF003C03FF003C03FF003C03FF003C03FF
003C01FF807801FF807800FFC0F000FFE1F0003FFFE0000FFF800001FE001E377EB626>116
D E /Fu 76 124 df<000FC3E0007FEFF000E07C7801C0F8780380F83007007000070070000700
700007007000070070000700700007007000FFFFFF80FFFFFF8007007000070070000700700007
007000070070000700700007007000070070000700700007007000070070000700700007007000
0700700007007000070070007FE3FF007FE3FF001D20809F1B>11 D<001F80007FC001E0E00381
E00381E00701E0070000070000070000070000070000070000FFFFE0FFFFE00700E00700E00700
E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700
E07FC3FE7FC3FE1720809F19>I<001FE0007FE001E1E00381E00380E00700E00700E00700E007
00E00700E00700E00700E0FFFFE0FFFFE00700E00700E00700E00700E00700E00700E00700E007
00E00700E00700E00700E00700E00700E00700E00700E00700E07FE7FE7FE7FE1720809F19>I<
000F80F800007FE7FE0000E06E060001C0FC0F000380F80F000700F00F00070070000007007000
000700700000070070000007007000000700700000FFFFFFFF00FFFFFFFF000700700700070070
070007007007000700700700070070070007007007000700700700070070070007007007000700
7007000700700700070070070007007007000700700700070070070007007007007FE3FE3FF07F
E3FE3FF02420809F26>I<000FC0FF00007FE7FF0000E07E0F0001C0FC0F000380F80700070070
0700070070070007007007000700700700070070070007007007000700700700FFFFFFFF00FFFF
FFFF00070070070007007007000700700700070070070007007007000700700700070070070007
007007000700700700070070070007007007000700700700070070070007007007000700700700
07007007007FE3FE3FF07FE3FE3FF02420809F26>I<7038F87CFC7EFC7E7C3E0C060C060C0618
0C180C381C3018603040200F0E7E9F17>34 D<70F8FCFC7C0C0C0C181838306040060E7C9F0D>
39 D<006000C001800300070006000C001C00180038003800300070007000700060006000E000
E000E000E000E000E000E000E000E000E000E000E0006000600070007000700030003800380018
001C000C00060007000300018000C000600B2E7DA112>I<C0006000300018001C000C00060007
00030003800380018001C001C001C000C000C000E000E000E000E000E000E000E000E000E000E0
00E000E000C000C001C001C001C00180038003800300070006000C001C00180030006000C0000B
2E7DA112>I<70F8FCFC7C0C0C0C181838306040060E7C840D>44 D<FFC0FFC0FFC00A037F8A0F>
I<70F8F8F87005057C840D>I<00030003000700060006000E000C000C001C0018001800380030
003000700060006000E000C000C001C00180018001800380030003000700060006000E000C000C
001C0018001800380030003000700060006000E000C000C000102D7DA117>I<03F0000FFC001E
1E001C0E00380700780780700380700380700380F003C0F003C0F003C0F003C0F003C0F003C0F0
03C0F003C0F003C0F003C0F003C0F003C0F003C07003807003807003807807803807001C0E001E
1E000FFC0003F000121F7E9D17>I<018003801F80FF80E3800380038003800380038003800380
0380038003800380038003800380038003800380038003800380038003800380FFFEFFFE0F1E7C
9D17>I<03F0000FFC00183E00300F00600F80C00780F007C0F807C0F803C0F803C02003C00007
C0000780000780000F00000E00001C0000380000700000E00001C0000380000300000600C00C00
C01800C03001807FFF80FFFF80FFFF80121E7E9D17>I<03F0000FFC001C1E00300F00780F8078
0F80780780380F80000F80000F00000F00001E00003C0003F80003F000001C00000E00000F0000
07800007800007C02007C0F807C0F807C0F807C0F00780600F80700F003C1E001FFC0003F00012
1F7E9D17>I<000E00000E00001E00003E00003E00006E0000EE0000CE00018E00038E00030E00
060E000E0E000C0E00180E00380E00300E00600E00E00E00FFFFF0FFFFF0000E00000E00000E00
000E00000E00000E00000E0000FFE000FFE0141E7F9D17>I<3803003FFF003FFE003FF8003FE0
0030000030000030000030000030000030000031F00037FC003E0E003C07003807803003800003
800003C00003C00003C06003C0F003C0F003C0F00380C00780600700700E003C1E000FF80007E0
00121F7E9D17>I<007C0001FE000783000E03800C07801C078038030038000078000070000070
0000F3F800F7FE00FC0E00F80700F80380F80380F003C0F003C0F003C0F003C0F003C07003C070
03C07003803803803807001C07000E1E0007FC0001F000121F7E9D17>I<6000007FFFC07FFFC0
7FFF80600180C00300C00600C00600000C0000180000180000300000600000600000E00000C000
01C00001C00001C000038000038000038000038000078000078000078000078000078000078000
078000030000121F7D9D17>I<03F0000FFC001E1E003807003007007003807003807003807003
807807003E07003F0E001FDC000FF80003F80007FC001E7E00383F00700F80700780E003C0E001
C0E001C0E001C0E001C0F001807003803807001E0E000FFC0003F000121F7E9D17>I<03F00007
F8001E1C00380E00380700700700700380F00380F00380F003C0F003C0F003C0F003C0F003C070
07C07007C0380FC01C0FC01FFBC007F3C0000380000380000780000700300700780E00780E0070
1C003078001FF0000FC000121F7E9D17>I<70F8F8F8700000000000000000000070F8F8F87005
147C930D>I<70F8F8F8700000000000000000000070F8F8F878181818183030606040051D7C93
0D>I<7FFFFFE0FFFFFFF000000000000000000000000000000000000000000000000000000000
00000000FFFFFFF07FFFFFE01C0C7D9023>61 D<0FC03FF070786038E03CF03CF03C603C003C00
7800F000E001C00180038003000300030003000300030003000000000000000000000007000F80
0F800F8007000E207D9F15>63 D<0003800000038000000380000007C0000007C0000007C00000
0DE000000DE000000DE0000018F0000018F0000018F00000307800003078000030780000603C00
00603C0000603C0000E01E0000C01E0000FFFE0001FFFF0001800F0001800F0003800F80030007
8003000780070007C0070003C00F8003C0FFE03FFEFFE03FFE1F207F9F22>65
D<FFFFE000FFFFF80007803E0007801F0007800F0007800F8007800F8007800F8007800F800780
0F8007800F0007801F0007803E0007807C0007FFF80007FFFC0007801E0007800F0007800F8007
800780078007C0078007C0078007C0078007C0078007C00780078007800F8007801F0007803E00
FFFFFC00FFFFF0001A1F7E9E20>I<001FC040007FF0C001F839C003C00DC0078007C00F0003C0
1E0003C03E0001C03C0001C07C0001C07C0000C0780000C0F80000C0F8000000F8000000F80000
00F8000000F8000000F8000000F8000000F8000000780000C07C0000C07C0000C03C0000C03E00
01801E0001800F0003000780030003C00E0001F81C00007FF000001FC0001A217D9F21>I<FFFF
E000FFFFFC0007803E0007800F0007800780078003C0078003E0078001E0078001F0078000F007
8000F0078000F8078000F8078000F8078000F8078000F8078000F8078000F8078000F8078000F8
078000F0078000F0078001F0078001E0078001E0078003C00780078007800F0007803E00FFFFFC
00FFFFE0001D1F7E9E23>I<FFFFFF00FFFFFF0007801F00078007000780030007800300078003
8007800180078001800780C1800780C1800780C0000780C0000781C00007FFC00007FFC0000781
C0000780C0000780C0000780C0600780C06007800060078000C0078000C0078000C0078001C007
8001C0078003C007800F80FFFFFF80FFFFFF801B1F7E9E1F>I<FFFFFF00FFFFFF0007801F0007
80070007800300078003000780038007800180078001800780C1800780C1800780C0000780C000
0781C00007FFC00007FFC0000781C0000780C0000780C0000780C0000780C00007800000078000
00078000000780000007800000078000000780000007800000FFFE0000FFFE0000191F7E9E1E>
I<FFF8FFF8FFF8FFF807800F0007800F0007800F0007800F0007800F0007800F0007800F000780
0F0007800F0007800F0007800F0007800F0007FFFF0007FFFF0007800F0007800F0007800F0007
800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F00
FFF8FFF8FFF8FFF81D1F7E9E22>72 D<FFFCFFFC07800780078007800780078007800780078007
8007800780078007800780078007800780078007800780078007800780078007800780FFFCFFFC
0E1F7F9E10>I<FFFC1FFCFFFC1FFC078007C0078007000780060007800C000780180007803000
078070000780E0000781C000078380000787000007878000078F8000079BC00007B1E00007E1E0
0007C0F0000780F0000780780007803C0007803C0007801E0007801E0007800F00078007800780
0780078007C0FFFC3FFCFFFC3FFC1E1F7E9E23>75 D<FFFE00FFFE000780000780000780000780
000780000780000780000780000780000780000780000780000780000780000780000780000780
0007800607800607800607800607800E07800E07800C07801C07803C0780FCFFFFFCFFFFFC171F
7E9E1C>I<FF80001FF8FFC0003FF807C0003F0007C0003F0006E0006F0006E0006F0006E0006F
00067000CF00067000CF00067000CF000638018F000638018F000638018F00061C030F00061C03
0F00061C030F00060E060F00060E060F00060E060F0006070C0F0006070C0F0006070C0F000603
980F000603980F000603980F000601F00F000601F00F000601F00F000F00E00F00FFF0E1FFF8FF
F0E1FFF8251F7E9E2A>I<FF807FF8FFC07FF807C0078007E0030007E0030006F0030006F00300
06780300063C0300063C0300061E0300061E0300060F0300060F0300060783000607C3000603C3
000601E3000601E3000600F3000600F30006007B0006007B0006003F0006001F0006001F000600
0F0006000F000F000700FFF00700FFF003001D1F7E9E22>I<001F800000FFF00001E0780007C0
3E000F801F000F000F001E0007803C0003C03C0003C07C0003E07C0003E0780001E0F80001F0F8
0001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E0
7C0003E03C0003C03E0007C01E0007800F000F000F801F0007C03E0001F0F80000FFF000001F80
001C217D9F23>I<FFFFE000FFFFF80007807C0007801E0007801F0007800F0007800F8007800F
8007800F8007800F8007800F8007800F0007801F0007801E0007807C0007FFF80007FFE0000780
000007800000078000000780000007800000078000000780000007800000078000000780000007
80000007800000FFFC0000FFFC0000191F7E9E1F>I<FFFF8000FFFFF0000780F80007803C0007
803E0007801E0007801F0007801F0007801F0007801F0007801E0007803E0007803C000780F800
07FFF00007FF80000781C0000780E000078070000780700007807800078078000780780007807C
0007807C0007807C0007807C0C07807E0C07803E0CFFFC1F18FFFC0FF0000003E01E207E9E21>
82 D<07E0800FF9801C1F80300F80700780600380E00380E00180E00180E00180F00000F00000
7800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C0C001C0C001C0
C001C0C001C0E00180F00380F80700FE0E00CFFC0081F80012217D9F19>I<7FFFFFE07FFFFFE0
780F01E0700F00E0600F0060600F0060E00F0070C00F0030C00F0030C00F0030C00F0030000F00
00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
0000000F0000000F0000000F0000000F0000000F0000000F0000000F000007FFFE0007FFFE001C
1F7E9E21>I<FFFC7FF8FFFC7FF807800780078003000780030007800300078003000780030007
800300078003000780030007800300078003000780030007800300078003000780030007800300
0780030007800300078003000780030007800300078003000380020003C0060003C0060001C00C
0000E0180000783000003FE000000FC0001D207E9E22>I<FFF007FEFFF007FE0F8001F00F0000
E0078000C0078000C007C001C003C0018003C0018003E0038001E0030001E0030000F0060000F0
060000F0060000780C0000780C0000780C00003C1800003C1800003C1800001E3000001E300000
1F7000000F6000000F6000000FE0000007C0000007C0000003800000038000000380001F207F9E
22>I<FFF07FF83FF0FFF07FF83FF00F0007800F800F00078003000F000780030007800FC00600
07800FC0060007800FC00600078019E00E0003C019E00C0003C019E00C0003C039E00C0001E030
F0180001E030F0180001E030F0180000F06078300000F06078300000F06078300000F0E07C3000
0078C03C60000078C03C60000078C03C6000003D801EC000003D801EC000003D801EC000003F00
0FC000001F000F8000001F000F8000001F000F8000000E00070000000E00070000000E00070000
2C207F9E2F>I<7FF83FF87FF83FF807C00F8003C0060001E00E0001F00C0000F0180000783800
007C3000003C7000003E6000001EC000000FC000000F8000000780000007C0000007E000000DE0
00001DF0000018F8000038780000307C0000603C0000E01E0000C01F0001800F00038007800300
07C00F8007C0FFE01FFEFFE01FFE1F1F7F9E22>I<0804180C3018703860306030C060C060C060
F87CFC7EFC7E7C3E381C0F0E7B9F17>92 D<1FE0003FF000783800781C00300E00000E00000E00
000E0003FE001FFE003E0E00780E00F80E00F00E30F00E30F00E30F01E30783F703FEFE00F8780
14147E9317>97 D<0E0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E
00000E00000E3F000EFF800FC3C00F00E00E00F00E00700E00780E00780E00780E00780E00780E
00780E00780E00700E00F00F00F00F01E00FC3C00CFF800C3E0015207F9F19>I<03F80FFC1E1E
3C1E380C78007000F000F000F000F000F000F0007000780038033C031F0E0FFC03F010147E9314
>I<000380003F80003F8000038000038000038000038000038000038000038000038000038003
E3800FFB801E0F803C0780780380780380700380F00380F00380F00380F00380F00380F0038070
03807003807807803807801E1F800FFBF803E3F815207E9F19>I<03F0000FFC001E1E003C0F00
380700780700700380F00380FFFF80FFFF80F00000F00000F000007000007800003801801C0380
0F070007FE0001F80011147F9314>I<003C00FE01CF038F030607000700070007000700070007
00FFF0FFF007000700070007000700070007000700070007000700070007000700070007007FF0
7FF01020809F0E>I<0001E003E3F00FFF701C1C703C1E00380E00780F00780F00780F00780F00
380E003C1E001C1C003FF80033E0003000003000003800003FFE001FFF803FFFC07003E07000F0
E00070E00070E00070F000F07801E03E07C00FFF0003FC00141F7F9417>I<0E0000FE0000FE00
000E00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000EFF000FC3800F01
C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
C00E01C0FFE7FCFFE7FC16207F9F19>I<1C001E003E001E001C00000000000000000000000000
0E007E007E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFC0FF
C00A1F809E0C>I<00E001F001F001F000E0000000000000000000000000007007F007F000F000
700070007000700070007000700070007000700070007000700070007000700070007000700070
6070F0E0F1C07F803E000C28829E0E>I<0E0000FE0000FE00000E00000E00000E00000E00000E
00000E00000E00000E00000E00000E1FF00E1FF00E0F800E0E000E0C000E18000E30000E70000E
F0000FF8000F38000E1C000E1E000E0E000E07000E07800E03800E03C0FFCFF8FFCFF815207F9F
18>I<0E00FE00FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E000E000E000E000E000E000E00FFE0FFE00B20809F0C>I<0E3F03F0
00FEFF8FF800FFC1DC1C000F80F80E000F00F00E000E00E00E000E00E00E000E00E00E000E00E0
0E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00
E00E000E00E00E00FFE7FE7FE0FFE7FE7FE023147F9326>I<0E3E00FEFF00FFC3800F01C00F01
C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
C0FFE7FCFFE7FC16147F9319>I<01F80007FE001E07803C03C03801C07000E07000E0F000F0F0
00F0F000F0F000F0F000F0F000F07000E07801E03801C03C03C01E078007FE0001F80014147F93
17>I<0E3F00FEFF80FFC3C00F01E00E00F00E00F00E00780E00780E00780E00780E00780E0078
0E00780E00700E00F00F00F00F01E00FC3C00EFF800E3E000E00000E00000E00000E00000E0000
0E00000E0000FFE000FFE000151D7F9319>I<03E1800FF9801E1F803C07807807807803807003
80F00380F00380F00380F00380F00380F003807003807803807807803C0F801E1F800FF38003E3
80000380000380000380000380000380000380000380003FF8003FF8151D7E9318>I<0E78FEFC
FF9E0F1E0F0C0F000E000E000E000E000E000E000E000E000E000E000E000E00FFE0FFE00F147F
9312>I<1F903FF07070E030E030E030F00078007F803FE00FF000F0C078C038C038E038E038F0
70DFE08F800D147E9312>I<06000600060006000E000E001E003E00FFF8FFF80E000E000E000E
000E000E000E000E000E000E000E180E180E180E180E18073007E003C00D1C7F9B12>I<0E01C0
FE1FC0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
0E01C00E03C00E03C0070FC007FDFC01F1FC16147F9319>I<FF87F8FF87F81E01E00E01C00E01
800E0180070300070300070300038600038600038E0001CC0001CC0001FC0000F80000F8000070
0000700000700015147F9318>I<FF9FF3FCFF9FF3FC1C0780F01C0780601C07C0E00E0FC0C00E
0CC0C00E0CE0C0070CE18007186180071871800398730003B0330003B0330003B03F0001F03E00
01E01E0001E01E0000E01C0000C00C001E147F9321>I<7FC7FC7FC7FC0703E007038003830001
C70000EE0000EC00007800003800003C00007C0000EE0001C7000187000303800701C00F01E0FF
87FEFF87FE1714809318>I<FF87F8FF87F81E01E00E01C00E01800E0180070300070300070300
038600038600038E0001CC0001CC0001FC0000F80000F800007000007000007000006000006000
00600000C000F0C000F18000F380007F00003C0000151D7F9318>I<3FFF3FFF380E301C703C60
38607060F001E001C0038007830F030E031C073C063806701EFFFEFFFE10147F9314>I<FFFFFC
FFFFFC1602808C17>I E /Fv 45 122 df<70F8FCFC7C0C0C0C0C181830306040060F7C840E>
44 D<FFE0FFE0FFE00B037F8B10>I<70F8F8F87005057C840E>I<01F00007FC000E0E001C0700
3803803803807803C07001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0
F001E0F001E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C07803C0380380380380
1C07000E0E0007FC0001F00013227EA018>48 D<018003800F80FF80F380038003800380038003
800380038003800380038003800380038003800380038003800380038003800380038003800380
03800380FFFEFFFE0F217CA018>I<03F0000FFC001C1F003007807007807807C07807C07803C0
3807C00007C0000780000780000F00000E00003C0003F80003F800001E00000F000007800007C0
0003C00003E02003E07003E0F803E0F803E0F003C06003C06007803007801C1F000FFC0003F000
13227EA018>51 D<000E00000E00001E00001E00003E00003E00006E0000EE0000CE0001CE0001
8E00030E00070E00060E000E0E000C0E00180E00180E00300E00700E00600E00E00E00FFFFF8FF
FFF8000E00000E00000E00000E00000E00000E00000E0001FFF001FFF015217FA018>I<100080
1C07801FFF001FFE001FFC001FF00018000018000018000018000018000018000018F8001BFE00
1F0F001C07801803801803C00001C00001E00001E00001E00001E06001E0F001E0F001E0F001C0
C003C06003C06003803007001C1E000FFC0003F00013227EA018>I<007E0001FF0003C1800701
C00E03C01C03C01C0180380000380000780000700000702000F1FC00F3FE00F60700FC0380F803
C0F801C0F001C0F001E0F001E0F001E0F001E0F001E07001E07001E07001E03801C03803C01803
801C07000E0E0007FC0001F00013227EA018>I<01F00007FC000E0F001807803803803001C070
01C07001C07001C07801C07803803E03803F07001FCE000FFC0003F80003FC000F7F001C3F8038
0F807007C07003C0E001E0E000E0E000E0E000E0E000E0E000E07001C07001C03803801E0F000F
FE0003F00013227EA018>56 D<01F00007FC000E0E001C0700380380780380700380F001C0F001
C0F001C0F001E0F001E0F001E0F001E0F001E07001E07003E07803E03807E01C0DE00FF9E007F1
E00081C00001C00003C0000380000380300700780700780E00701C003838001FF0000FC0001322
7EA018>I<000180000003C0000003C0000003C0000007E0000007E0000007E000000FF000000C
F000000CF000001CF800001878000018780000383C0000303C0000303C0000601E0000601E0000
601E0000C00F0000C00F0000C00F0001FFFF8001FFFF8001800780030003C0030003C0030003C0
060001E0060001E0060001E00E0000F01F0001F0FFC00FFFFFC00FFF20237EA225>65
D<000FE010003FF83000F81C7001E0067003C003F0078001F00F0000F01E0000F03E0000703C00
00707C0000707C0000307800003078000030F8000030F8000000F8000000F8000000F8000000F8
000000F8000000F800000078000030780000307C0000307C0000303C0000603E0000601E000060
0F0000C0078000C003C0018001E0030000F80E00003FF800000FE0001C247DA223>67
D<FFFFFFC0FFFFFFC007800FC0078003C0078001C0078000C0078000E0078000E0078000600780
60600780606007806060078060000780E0000781E00007FFE00007FFE0000781E0000780E00007
806000078060000780601807806018078000180780003007800030078000300780003007800070
078000F0078001F0078007E0FFFFFFE0FFFFFFE01D227EA121>69 D<FFFFFFC0FFFFFFC007800F
C0078003C0078001C0078000C0078000E0078000E0078000600780006007806060078060600780
6000078060000780E0000781E00007FFE00007FFE0000781E0000780E000078060000780600007
806000078060000780000007800000078000000780000007800000078000000780000007800000

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
FFFE0000FFFE00001B227EA120>I<FFFCFFFC0780078007800780078007800780078007800780
078007800780078007800780078007800780078007800780078007800780078007800780078007
80FFFCFFFC0E227EA112>73 D<FFC00003FFFFE00007FF07E00007E007E00007E006F0000DE006
F0000DE006F0000DE006780019E006780019E006780019E0063C0031E0063C0031E0063C0031E0
061E0061E0061E0061E0061E0061E0060F00C1E0060F00C1E006078181E006078181E006078181
E00603C301E00603C301E00603C301E00601E601E00601E601E00601E601E00600FC01E00600FC
01E00600FC01E006007801E01F807801E0FFF0783FFFFFF0303FFF28227EA12D>77
D<FF800FFFFFC00FFF07C001F807E0006007F0006006F000600678006006780060063C0060063E
0060061E0060060F0060060F0060060780600607C0600603C0600601E0600601E0600600F06006
0078600600786006003C6006003C6006001E6006000F6006000F60060007E0060007E0060003E0
060001E0060001E01F8000E0FFF000E0FFF0006020227EA125>I<FFFFF000FFFFFC0007803F00
07800F8007800780078003C0078003C0078003E0078003E0078003E0078003E0078003E0078003
C0078003C00780078007800F8007803F0007FFFC0007FFF0000780000007800000078000000780
0000078000000780000007800000078000000780000007800000078000000780000007800000FF
FC0000FFFC00001B227EA121>80 D<FFFFE00000FFFFF8000007803E000007800F000007800780
00078007C000078003E000078003E000078003E000078003E000078003E000078003E000078007
C000078007800007800F000007803E000007FFF8000007FFF00000078078000007803C00000780
1E000007800E000007800F000007800F000007800F000007800F000007800F800007800F800007
800F800007800F818007800FC180078007C180FFFC03E300FFFC01FE000000007C0021237EA124
>82 D<03F0200FFC601C0EE03803E07001E07001E0E000E0E000E0E00060E00060E00060F00000
F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E00001E00000F00000F0000070
C00070C00070C00070C00070E00060E000E0F000C0F801C0EF0380C7FF0081FC0014247DA21B>
I<7FFFFFF87FFFFFF87C0780F8700780386007801860078018E007801CC007800CC007800CC007
800CC007800CC007800C0007800000078000000780000007800000078000000780000007800000
078000000780000007800000078000000780000007800000078000000780000007800000078000
00078000000780000007800003FFFF0003FFFF001E227EA123>I<0FE0001FF8003C1C003C0E00
180700000700000700000F0003FF000FFF003F07007C0700780700F00700F00718F00718F00F18
780F187C3FB83FF3F00FC3C015157E9418>97 D<0E0000FE0000FE00001E00000E00000E00000E
00000E00000E00000E00000E00000E00000E00000E00000E1F800E7FE00FC0F00F00780E00380E
003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0F00380F80700F
C1F00C7FC00C1F0017237FA21B>I<01FE0007FF000F07801C0780380300780000700000F00000
F00000F00000F00000F00000F00000F000007800007800C03C00C01E01800F030007FE0001F800
12157E9416>I<0000E0000FE0000FE00001E00000E00000E00000E00000E00000E00000E00000
E00000E00000E00000E003F0E007FEE01F07E03C01E03800E07800E07000E0F000E0F000E0F000
E0F000E0F000E0F000E0F000E07000E07800E03801E03C03E01E0EF00FFCFE03F0FE17237EA21B
>I<01FC0007FF000F07801C03C03801C07801E07000E0FFFFE0FFFFE0F00000F00000F00000F0
0000F000007800007800603C00601E00C00F838007FF0000FC0013157F9416>I<003C00FE01CF
038F038F070007000700070007000700070007000700FFF8FFF807000700070007000700070007
0007000700070007000700070007000700070007007FF87FF8102380A20F>I<0000F001F1F807
FFB80F1F381E0F001C07003C07803C07803C07803C07803C07801C07001E0F000F1E001FFC0019
F0001800001800001C00001FFF000FFFC01FFFE03801F0700070E00038E00038E00038E0003870
00707800F01E03C00FFF8001FC0015217F9518>I<0E0000FE0000FE00001E00000E00000E0000
0E00000E00000E00000E00000E00000E00000E00000E00000E1F800E7FC00FC1E00F80F00F0070
0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070
0E0070FFE7FFFFE7FF18237FA21B>I<1C001E003E001E001C0000000000000000000000000000
0000000E00FE00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E00FFC0FFC00A227FA10E>I<01C003E003E003E001C000000000000000000000000000000000
01E00FE00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
E000E000E000E000E000E000E060C0F1C0F1807F003E000B2C82A10F>I<0E0000FE0000FE0000
1E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FFC0E0FFC
0E07E00E03800E07000E0E000E18000E30000E78000EF8000F9C000F1E000E0E000E07000E0780
0E03C00E01C00E01E00E01F0FFE3FEFFE3FE17237FA21A>I<0E00FE00FE001E000E000E000E00
0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
000E000E000E000E000E000E00FFE0FFE00B237FA20E>I<0E1FC07F00FE7FE1FF80FEC0F303C0
1F807E01E00F003C00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800
E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E0038
00E0FFE3FF8FFEFFE3FF8FFE27157F942A>I<0E1F80FE7FC0FFC1E01F80F00F00700E00700E00
700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070FFE7
FFFFE7FF18157F941B>I<01FC0007FF000F07801C01C03800E07800F0700070F00078F00078F0
0078F00078F00078F00078F000787000707800F03800E01C01C00F078007FF0001FC0015157F94
18>I<0E1F80FE7FE0FFC1F00F00780E00780E003C0E003C0E001E0E001E0E001E0E001E0E001E
0E001E0E001E0E003C0E003C0F00780F80700FC1F00E7FC00E1F000E00000E00000E00000E0000
0E00000E00000E00000E0000FFE000FFE000171F7F941B>I<0E3CFEFEFFCF1F8F0F060F000E00
0E000E000E000E000E000E000E000E000E000E000E000E00FFF0FFF010157F9413>114
D<0F883FF87078E038E018E018E018F0007F003FE01FF001F8003CC01CC01CE01CE01CF018F878
DFF08FC00E157E9413>I<060006000600060006000E000E000E001E003E00FFF8FFF80E000E00
0E000E000E000E000E000E000E000E000E0C0E0C0E0C0E0C0E0C0E08071803F001E00E1F7F9E13
>I<0E0070FE07F0FE07F01E00F00E00700E00700E00700E00700E00700E00700E00700E00700E
00700E00700E00700E00700E00F00E01F007037803FE7F01F87F18157F941B>I<FFC3FEFFC3FE
1E00F80E00600E00600700C00700C00700C003818003818003C38001C30001C30000E60000E600
00E600007C00007C00007C0000380000380017157F941A>I<FF8FF9FFFF8FF9FF1E01C07C1C03
C0380E03E0300E03E0300E0660300706706007067060070E7060038C30C0038C38C0039C38C001
D8198001D81D8001D81D8001F00F8000F00F0000F00F0000E007000060060020157F9423>I<FF
C3FEFFC3FE1E00F80E00600E00600700C00700C00700C003818003818003C38001C30001C30000
E60000E60000E600007C00007C00007C00003800003800003000003000007000006000006000F0
C000F1C000F380007F00003E0000171F7F941A>121 D E /Fw 20 118 df<FFFF80FFFF80FFFF
8011037F9016>45 D<FFFFFFE00000FFFFFFFC000007E0007F000003E0000F800003E00007C000
03E00001E00003E00000F00003E00000780003E000007C0003E000003E0003E000003E0003E000
001F0003E000001F0003E000000F8003E000000F8003E000000FC003E000000FC003E0000007C0
03E0000007C003E0000007E003E0000007E003E0000007E003E0000007E003E0000007E003E000
0007E003E0000007E003E0000007E003E0000007E003E0000007E003E0000007E003E0000007C0
03E0000007C003E0000007C003E000000FC003E000000F8003E000000F8003E000000F8003E000
001F0003E000001F0003E000003E0003E000007C0003E00000780003E00000F80003E00001F000
03E00007E00003E0000F800007E0007F0000FFFFFFFC0000FFFFFFE000002B317CB033>68
D<FFFF80FFFF8007F00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
0003E00003E00003E00003E00003E00003E00003E00007F000FFFF80FFFF8011317DB017>73
D<FFF00000007FF8FFF8000000FFF807F8000000FF0003F8000000FE00037C000001BE00037C00
0001BE00037C000001BE00033E0000033E00033E0000033E00033E0000033E00031F0000063E00
031F0000063E00031F0000063E00030F80000C3E00030F80000C3E00030F80000C3E000307C000
183E000307C000183E000307C000183E000303E000303E000303E000303E000303E000303E0003
01F000603E000301F000603E000301F000C03E000300F800C03E000300F800C03E0003007C0180
3E0003007C01803E0003007C01803E0003003E03003E0003003E03003E0003003E03003E000300
1F06003E0003001F06003E0003001F06003E0003000F8C003E0003000F8C003E0003000F8C003E
00030007D8003E00030007D8003E00030007D8003E00030003F0003E00030003F0003E00030003
F0003E00078001E0003E000FC001E0007F00FFFC01E00FFFF8FFFC00C00FFFF835317CB03D>77
D<FFFFFFC000FFFFFFF80007E000FE0003E0001F0003E0000F8003E00007C003E00003E003E000
03F003E00001F003E00001F003E00001F803E00001F803E00001F803E00001F803E00001F803E0
0001F803E00001F003E00001F003E00003F003E00003E003E00007C003E0000F8003E0001F0003
E000FE0003FFFFF80003FFFFC00003E000000003E000000003E000000003E000000003E0000000
03E000000003E000000003E000000003E000000003E000000003E000000003E000000003E00000
0003E000000003E000000003E000000003E000000003E000000003E000000003E000000007F000
0000FFFF800000FFFF80000025317CB02D>80 D<007F802001FFE06007C0F8600F001CE01E000F
E03C0007E0380003E0780001E0700001E0700000E0F00000E0F00000E0F0000060F0000060F000
0060F8000060F80000007C0000007E0000003F0000003FC000001FF800000FFF800007FFF80003
FFFC0000FFFF00000FFF800000FFC000001FE0000007E0000003F0000001F0000000F0000000F8
000000F8C0000078C0000078C0000078C0000078C0000078E0000078E0000070F00000F0F00000
E0F80000E0FC0001C0FE000380E7800700C1F01E00C07FFC00800FF0001D337CB125>83
D<01FE00000FFFC0001C03E0003C00F0003E0078003E003C003E001C0008001E0000001E000000
1E0000001E0000001E000001FE00003FFE0001FF1E0007F01E000F801E001F001E003E001E007C
001E007C001E00F8001E0CF8001E0CF8001E0CF8003E0CF8003E0C7C007E0C3E00DF1C1F038FB8
0FFF07F003F803C01E1F7D9E21>97 D<003FC000FFF803E01C07801E0F003E1E003E1E003E3C00
087C00007C0000780000F80000F80000F80000F80000F80000F80000F80000F80000F800007C00
007C00007C00003E00031E00031F00060F800E07C01C03F03800FFE0003F80181F7D9E1D>99
D<000001E000003FE000003FE0000003E0000001E0000001E0000001E0000001E0000001E00000
01E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E000
3F81E000FFE1E003E079E007800DE00F0007E01E0003E01E0001E03C0001E07C0001E07C0001E0
780001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001
E0780001E07C0001E07C0001E03C0001E03E0003E01E0007E00F000FE007801DE003E071F001FF
E1FF003F01FF20327DB125>I<003F800000FFE00003E0F80007803C000F001E001E001E001E00
0F003C000F007C000F007C000F8078000780F8000780FFFFFF80FFFFFF80F8000000F8000000F8
000000F8000000F8000000F8000000780000007C0000003C0000003C0001801E0001800F000300
0F80060007C00E0001F03C0000FFF000001FC000191F7E9E1D>I<0003E0001FF8003C3800707C
00F07C01E07C01E03803C00003C00003C00003C00003C00003C00003C00003C00003C00003C000
03C00003C000FFFFC0FFFFC003C00003C00003C00003C00003C00003C00003C00003C00003C000
03C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C000
03C00003C00003C00003C00007E0007FFF007FFF0016327FB114>I<000000F0007F03F801FFCF
1C03C1FC1C0780F8180F0078001F007C001E003C003E003E003E003E003E003E003E003E003E00
3E003E003E003E003E001E003C001F007C000F0078000780F0000FC1E0000DFFC0001C7F000018
000000180000001C0000001C0000001E0000000FFFF8000FFFFF0007FFFF800FFFFFC01E0007E0
380001F07000007070000078E0000038E0000038E0000038E0000038E000003870000070780000
F03C0001E01E0003C007C01F0001FFFC00003FE0001E2F7E9F21>I<07000F801F801F800F8007
00000000000000000000000000000000000000000000000780FF80FF800F800780078007800780
078007800780078007800780078007800780078007800780078007800780078007800780078007
800FC0FFF8FFF80D307EAF12>105 D<0781FE003FC000FF87FF80FFF000FF8E07C1C0F8000F98
03E3007C0007B001E6003C0007E000FC001E0007C000F8001E0007C000F8001E0007C000F8001E
00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000
F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00
078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0
001E00078000F0001E00078000F0001E000FC001F8003F00FFFC1FFF83FFF0FFFC1FFF83FFF034
1F7E9E38>109 D<0781FE0000FF87FF8000FF8E07C0000F9803E00007B001E00007E000F00007
C000F00007C000F00007C000F000078000F000078000F000078000F000078000F000078000F000
078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0
00078000F000078000F000078000F000078000F000078000F000078000F0000FC001F800FFFC1F
FF80FFFC1FFF80211F7E9E25>I<001FC00000FFF80001E03C0007800F000F0007801E0003C01E
0003C03C0001E03C0001E0780000F0780000F0780000F0F80000F8F80000F8F80000F8F80000F8
F80000F8F80000F8F80000F8F80000F8780000F07C0001F03C0001E03C0001E01E0003C01E0003
C00F00078007C01F0001F07C0000FFF800001FC0001D1F7E9E21>I<0783E0FF8FF8FF9C7C0FB0
7C07F07C07E03807C00007C00007C0000780000780000780000780000780000780000780000780
000780000780000780000780000780000780000780000780000780000780000780000FC000FFFE
00FFFE00161F7E9E19>114 D<01FC100FFF301E03F03800F0700070E00070E00030E00030E000
30F00030F800007E00003FF0001FFF000FFF8003FFE0003FF00003F8000078C0003CC0003CC000
1CE0001CE0001CF0001CF00018F80038FC0070EF01E0C3FFC080FE00161F7E9E1A>I<00C00000
C00000C00000C00000C00001C00001C00001C00003C00003C00007C0000FC0001FC000FFFFE0FF
FFE003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003
C00003C00003C00003C00003C03003C03003C03003C03003C03003C03003C03003C03001E06001
E06000F0C0007F80001F00142C7FAB19>I<078000F000FF801FF000FF801FF0000F8001F00007
8000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F000
078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0
00078000F000078000F000078000F000078001F000078001F000078003F000038007F00003C00E
F00001F03CF80000FFF0FF80003FC0FF80211F7E9E25>I E /Fx 5 85 df<0000000060000000
0000E00000000000E00000000001E00000000001F00000000003F00000000003F00000000007F0
000000000FF0000000000FF0000000001BF0000000001BF00000000033F00000000033F0000000
0063F00000000063F000000000C3F000000001C3F00000000183F00000000303F00000000303F0
0000000603F80000000603F80000000C01F80000000C01F80000001801F80000003801F8000000
3001F80000006001F80000006001F8000000C001F8000000C001F80000018001F8000001FFFFF8
000003FFFFF80000070001F80000060001F800000C0001F800000C0001F80000180001FC000018
0001FC0000300000FC0000300000FC0000600000FC0000E00000FC0000C00000FC0001C00000FC
0003C00000FC000FE00003FC00FFFC003FFFE0FFF8003FFFE02B337CB234>65
D<000FFFFFFC00000FFFFFFF8000007F000FC000007E0003E000007E0001F000007E0000F80000
7E00007C0000FC00007C0000FC00003E0000FC00003E0000FC00003E0001F800001E0001F80000
1F0001F800001F0001F800001F0003F000001F0003F000001F0003F000001F0003F000001F0007
E000003F0007E000003F0007E000003F0007E000003F000FC000003E000FC000007E000FC00000
7E000FC000007E001F8000007C001F800000FC001F800000FC001F800000F8003F000001F8003F
000001F0003F000003F0003F000003E0007E000007E0007E000007C0007E00000F80007E00000F
0000FC00001F0000FC00003E0000FC00007C0000FC0000F80001F80001F00001F80007C00001F8
000F800003F8007E0000FFFFFFF80000FFFFFFC0000030317BB035>68 D<000FFFFFFFF8000FFF
FFFFF800007F0003F800007E0000F800007E00007800007E00007800007E0000300000FC000030
0000FC0000300000FC0000300000FC0000300001F80000300001F80000300001F80000300001F8
0000600003F00180600003F00180000003F00180000003F00180000007E00300000007E0030000
0007E00700000007E01F0000000FFFFE0000000FFFFE0000000FC01E0000000FC00E0000001F80
0C0000001F800C0000001F800C0000001F800C0000003F00180000003F00180000003F00000000
003F00000000007E00000000007E00000000007E00000000007E0000000000FC0000000000FC00
00000000FC0000000000FC0000000001F80000000001F80000000001F80000000003F800000000
FFFFF0000000FFFFF00000002D317BB02E>70 D<000FFFFFE000000FFFFFFC0000007F003F0000
007E000F8000007E0007C000007E0003E000007E0003F00000FC0001F00000FC0001F00000FC00
01F00000FC0001F00001F80003F00001F80003F00001F80003F00001F80003E00003F00007E000
03F00007C00003F0000FC00003F0001F800007E0003F000007E0007C000007E000F8000007E007
E000000FFFFF8000000FFFFF0000000FC00FC000000FC007E000001F8003F000001F8001F00000
1F8001F800001F8001F800003F0001F800003F0001F800003F0001F800003F0001F800007E0003
F000007E0003F000007E0003F000007E0003F00000FC0007E00000FC0007E00000FC0007E00000
FC0007E01801F80007E03001F80007E03001F80007E06003F80003E060FFFFE001F1C0FFFFC000
FF80000000003E002D327BB033>82 D<07FFFFFFFFF007FFFFFFFFF00FE007F007F00F8007E001
F00E0007E000E00C0007E000E01C0007E000E018000FC000E018000FC000E030000FC000C03000
0FC000C030001F8000C060001F8000C060001F8000C060001F8000C0C0003F00018000003F0000
0000003F00000000003F00000000007E00000000007E00000000007E00000000007E0000000000
FC0000000000FC0000000000FC0000000000FC0000000001F80000000001F80000000001F80000
000001F80000000003F00000000003F00000000003F00000000003F00000000007E00000000007
E00000000007E00000000007E0000000000FC0000000000FC0000000000FC0000000000FC00000
00001F80000000001F80000000001F80000000003F800000007FFFFF8000007FFFFF8000002C31
74B032>84 D E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300
TeXDict begin
%%EndSetup
%%Page: 1 1
bop 75 361 a Ft(Chapter)31 b(5)75 568 y Fs(One-Sided)37 b(Comm)m(unications)
75 809 y Fr(5.1)59 b(Intro)r(duction)75 910 y Fu(Remote)11
b(Memory)f(Access)i(\(RMA\))e(extends)i(the)f(comm)o(unication)g(mec)o
(hanisms)h(of)e(MPI)h(b)o(y)g(allo)o(wing)75 967 y(one)k(pro)q(cess)g(to)f
(sp)q(ecify)i(all)f(comm)o(unication)h(parameters,)d(b)q(oth)i(for)f(the)h
(sending)g(side)h(and)f(for)f(the)75 1023 y(receiving)j(side.)166
1080 y(This)g(mo)q(de)f(of)g(comm)o(unication)h(facilitates)h(the)e(co)q
(ding)h(of)f(some)g(applications)i(with)f(dynam-)75 1136 y(ically)24
b(c)o(hanging)f(data)f(access)h(patterns)f(but)g(where)h(the)f(data)g
(distribution)i(is)f(\014xed)h(or)e(slo)o(wly)75 1193 y(c)o(hanging.)41
b(Eac)o(h)21 b(pro)q(cess)i(can)f(compute)g(what)f(data)h(it)g(needs)h(to)e
(access)h(or)f(up)q(date)i(at)e(other)75 1249 y(pro)q(cesses.)35
b(Ho)o(w)o(ev)o(er,)21 b(pro)q(cesses)f(ma)o(y)g(not)g(kno)o(w)f(whic)o(h)i
(data)f(in)h(their)g(o)o(wn)f(memory)f(need)i(b)q(e)75 1306
y(accessed)15 b(or)f(up)q(dated)h(b)o(y)f(remote)g(pro)q(cesses,)h(nor)f(do)g
(they)h(kno)o(w)f(the)g(iden)o(tit)o(y)h(of)f(these)h(pro)q(cesses.)75
1362 y(Regular)h(send/receiv)o(e)h(comm)o(unication)g(requires)f(matc)o(hing)
g(op)q(erations)g(b)o(y)f(sender)i(and)f(receiv)o(er.)75 1418
y(In)e(our)g(situation,)g(The)g(transfer)f(parameters)g(are)g(all)i(a)o(v)m
(ailable)g(on)f(one)g(side.)20 b(In)15 b(order)e(to)g(issue)i(the)p
Fq(>)h Fp(\(Oct\))75 1475 y Fu(matc)o(hing)h(op)q(erations,)h(one)f(needs)h
(to)e(distribute)j(this)e(information.)26 b(This)18 b(requires)g(all)g(pro)q
(cesses)75 1531 y(to)c(participate)h(in)g(a)f(time)h(consuming)g(global)g
(computation,)f(or)g(to)g(p)q(erio)q(dically)k(p)q(oll)d(for)f(p)q(oten)o
(tial)75 1588 y(comm)o(unication)20 b(requests)f(to)f(receiv)o(e)i(and)f(act)
g(up)q(on.)32 b(The)19 b(use)g(of)g(put)g(or)g(get)f(calls)i(a)o(v)o(oids)f
(the)p Fq(?)d Fp(\(Oct\))75 1644 y Fu(need)f(for)f(the)g(global)i
(computation)e(or)g(the)g(explicit)j(p)q(olling.)k(A)15 b(generic)g(example)g
(of)f(this)h(nature)f(is)75 1701 y(the)f(execution)h(of)f(an)g(assignmen)o(t)
g(of)f(the)h(form)f Fo(A)24 b(=)g(B\(map\))p Fu(,)12 b(where)h
Fo(map)g Fu(is)g(a)g(p)q(erm)o(utation)g(v)o(ector,)75 1757
y(and)i Fo(A,)24 b(B)15 b Fu(and)g Fo(map)g Fu(are)g(distributed)i(in)f(the)f
(same)g(manner.)166 1814 y(Message-passing)23 b(comm)o(unication)h(ac)o(hiev)
o(es)h(t)o(w)o(o)d(e\013ects:)36 b Fn(c)n(ommunic)n(ation)23
b Fu(of)g(data)g(from)75 1870 y(sender)f(to)f(receiv)o(er;)k(and)d
Fn(synchr)n(onization)e Fu(of)h(sender)i(with)f(receiv)o(er.)39
b(The)22 b(RMA)g(design)g(sep-)75 1927 y(arates)d(these)h(t)o(w)o(o)f
(functions.)34 b(Three)21 b(comm)o(unication)f(calls)h(are)f(pro)o(vided:)30
b Fm(MPI)p 1597 1927 14 2 v 16 w(PUT)20 b Fu(\(remote)75 1983
y(write\),)d Fm(MPI)p 309 1983 V 16 w(GET)h Fu(\(remote)e(read\))h(and)h
Fm(MPI)p 896 1983 V 15 w(A)o(CCUMULA)l(TE)g Fu(\(remote)f(up)q(date\).)26
b(A)18 b(larger)f(n)o(um-)75 2039 y(b)q(er)g(of)f(sync)o(hronization)h(calls)
h(are)e(pro)o(vided,)h(to)f(supp)q(ort)g(di\013eren)o(t)h(sync)o(hronization)
g(st)o(yles.)24 b(The)75 2096 y(design)18 b(is)f(similar)h(to)e(that)g(of)g
(w)o(eakly)h(coheren)o(t)f(memory)h(systems:)22 b(correct)16
b(ordering)h(of)g(memory)75 2152 y(accesses)c(has)g(to)f(b)q(e)h(imp)q(osed)h
(b)o(y)f(the)g(user,)g(using)h(sync)o(hronization)f(calls;)i(the)e(implemen)o
(tation)h(can)75 2209 y(dela)o(y)i(comm)o(unication)g(op)q(erations)f(un)o
(til)h(the)g(sync)o(hronization)g(call)g(o)q(ccurs,)f(for)g(e\016ciency)l(.)
137 b Fq(>)16 b Fp(\(Oct\))166 2265 y Fu(The)h(design)g(of)g(RMA)f(functions)
i(allo)o(ws)e(implemen)o(tors)i(to)e(tak)o(e)g(adv)m(an)o(tage,)g(in)h(man)o
(y)f(cases,)75 2322 y(of)d(fast)h(comm)o(unication)g(mec)o(hanisms)h(pro)o
(vided)f(b)o(y)g(v)m(arious)g(platforms,)g(suc)o(h)g(as)f(coheren)o(t)h(or)g
(non-)75 2378 y(coheren)o(t)f(shared)g(memory)l(,)f(DMA)g(engines,)i(hardw)o
(are-supp)q(orted)f(put/get)f(op)q(erations,)h(comm)o(uni-)75
2435 y(cation)k(copro)q(cessors,)f(etc.)23 b(The)17 b(most)f(frequen)o(tly)h
(used)g(RMA)g(comm)o(unication)g(mec)o(hanisms)g(can)75 2491
y(b)q(e)g(la)o(y)o(ered)g(on)g(top)f(of)g(message)g(passing.)25
b(Ho)o(w)o(ev)o(er,)15 b(supp)q(ort)i(for)f(async)o(hronous)g(comm)o
(unication)75 2548 y(agen)o(ts)k(\(handlers,)k(threads,)e(etc.\))38
b(is)22 b(needed,)h(for)e(certain)h(RMA)f(functions,)i(in)f(a)f(distributed)
75 2604 y(memory)15 b(en)o(vironmen)o(t.)1365 b Fq(?)16 b Fp(\(Oct\))166
2660 y Fu(W)l(e)e(shall)h(denote)f(b)o(y)g Fl(origin)h Fu(the)f(pro)q(cess)g
(that)g(p)q(erforms)f(the)i(call,)g(and)f(b)o(y)g Fl(target)g
Fu(the)g(other)964 2828 y(1)p eop
%%Page: 2 2
bop 75 -100 a Fu(2)746 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fu(pro)q(cess)21 b(in)g(whic)o(h)g(the)g(memory)f
(is)h(accessed.)36 b(Th)o(us,)21 b(in)h(a)e(put)g(op)q(eration,)i
(source=origin)g(and)75 106 y(destination=target;)15 b(in)h(a)f(get)g(op)q
(eration,)g(source=target)f(and)h(destination=origin.)75 249
y Fr(5.2)59 b(Initialization)75 350 y Fu(In)15 b(some)f(systems,)g
(message-passing)h(and)f(RMA)h(op)q(erations)g(will)h(run)e(faster)g(when)h
(accessing)g(sp)q(e-)75 406 y(cially)20 b(allo)q(cated)g(memory)e(\(e.g.,)g
(memory)g(that)g(is)h(shared)g(b)o(y)g(the)f(other)h(pro)q(cesses)g(in)g(the)
g(com-)75 463 y(m)o(unicating)d(group,)e(on)h(an)g(SMP\).)f(MPI)g(pro)o
(vides)i(a)e(mec)o(hanism)i(for)e(allo)q(cating)i(and)f(freeing)h(suc)o(h)75
519 y(sp)q(ecial)h(memory)l(.)j(The)15 b(use)h(of)e(suc)o(h)i(memory)f(for)f
(RMA)i(is)f(not)g(mandatory)l(,)f(except)i(for)e(RMA)i(op-)-1992
b Fq(>)15 b Fp(\(Oct\))75 576 y Fu(erations)f(that)g(are)g(sync)o(hronized)i
(with)f Fm(MPI)p 877 576 14 2 v 16 w(WIN)p 981 576 V 16 w(LOCK)f
Fu(and)g Fm(MPI)p 1299 576 V 16 w(WIN)p 1403 576 V 16 w(UNLOCK)h
Fu(calls)g(\(3-part)o(y)75 632 y(comm)o(unication\).)-524 b
Fq(?)15 b Fp(\(Oct\))75 783 y Fm(MPI)p 160 783 V 16 w(MEM)p
283 783 V 16 w(ALLOC\(size,)g(comm)m(,)d(base\))117 860 y Fj(IN)155
b Fm(size)519 b Fj(size)11 b(of)e(memory)e(segmen)o(t)i(in)g(b)o(ytes)h
(\(non)g(negativ)o(e)f(in)o(teger\))-117 917 y Fq(>)15 b Fp(\(Oct\))117
992 y Fj(IN)155 b Fm(comm)466 b Fj(comm)o(unicator)13 b(for)j(group)g(where)h
(comm)o(unicati)o(on)c(is)j(ex-)-1994 b Fi(?)13 b Fp(\(Oct\))905
1048 y Fj(p)q(ected)j(to)e(o)q(ccur)h(\(handle\))117 1123 y(OUT)108
b Fm(base)505 b Fj(initial)12 b(address)j(of)f(memory)d(allo)q(cated)i(\(in)o
(teger\))75 1247 y Fo(int)23 b(MPI)p 245 1247 15 2 v 17 w(Mem)p
334 1247 V 17 w(alloc\(int)g(size,)g(MPI)p 805 1247 V 17 w(Comm)g(comm,)g
(void)g(*base\))-117 1284 y Fq(>)15 b Fp(\(Oct\))75 1334 y
Fo(MPI)p 150 1334 V 17 w(MEM)p 239 1334 V 17 w(ALLOC\()23 b(SIZE,)g(COMM,)g
(BASE,)g(IERROR\))170 1390 y(INTEGER)g(SIZE,)h(COMM,)f(IERROR)170
1447 y(INTEGER\(KIND=MPI)p 557 1447 V 15 w(ADDRESS)p 740 1447
V 17 w(SIZE\))g(BASE)75 1533 y(static)g(int)g(MPI::Mem)p 532
1533 V 17 w(alloc\(int)f(size,)h(const)h(MPI::Comm&)e(comm,)h(void*)g(base\))
-117 1569 y Fq(?)15 b Fp(\(Oct\))75 1714 y Fm(MPI)p 160 1714
14 2 v 16 w(MEM)p 283 1714 V 16 w(FREE\(base\))117 1791 y Fj(IN)155
b Fm(base)505 b Fj(initial)12 b(address)j(of)f(memory)d(segmen)o(t)i(allo)q
(cated)h(b)o(y)905 1848 y Fh(MPI)p 982 1848 13 2 v 15 w(MEM)p
1094 1848 V 15 w(MALLOC)75 1972 y Fo(static)23 b(int)g(MPI::Mem)p
532 1972 15 2 v 17 w(alloc\(int)f(size,)h(const)h(MPI::Comm&)e(comm,)h(void*)
g(base\))75 2059 y(int)g(MPI)p 245 2059 V 17 w(Mem)p 334 2059
V 17 w(free\(void)g(*base\))-117 2092 y Fq(>)15 b Fp(\(Oct\))75
2145 y Fo(MPI)p 150 2145 V 17 w(MEM)p 239 2145 V 17 w(FREE\()23
b(BASE,)g(IERROR\))170 2201 y(INTEGER\(KIND=MPI)p 557 2201
V 15 w(ADDRESS)p 740 2201 V 17 w(SIZE\))g(BASE)75 2288 y(static)g(int)g
(MPI::Mem)p 532 2288 V 17 w(free\(void)f(*base\))166 2374 y
Fu(The)16 b(F)l(ortran)e(90)h(t)o(yp)q(e)g Fh(INTEGER\(KIND)e(=)i(MPI)p
1015 2374 13 2 v 14 w(ADDRESS)p 1215 2374 V 14 w(SIZE\))h Fu(is)g(an)f
(address)h(sized)g(in)o(teger,)75 2431 y(as)11 b(describ)q(ed)j(in)e(Section)
h Fl(??)p Fu(,)e(on)h(page)f Fl(??)p Fu(.)18 b(The)12 b(functions)g(are)f
(useful,)j(in)e(F)l(ortran,)f(only)h(on)f(systems)75 2487 y(that)j(supp)q
(ort)i(\\true")e(\(C-lik)o(e,)i(Cra)o(y-lik)o(e\))f(p)q(oin)o(ters.)-1146
b Fq(?)15 b Fp(\(Oct\))189 2591 y Fn(A)n(dvic)n(e)c(to)h(users.)37
b Fu(The)10 b(comm)o(unicator)g(argumen)o(t)g(in)h(the)g(call)h(is)f(only)g
(a)f(\\p)q(erformance)g(hin)o(t":)189 2647 y(the)17 b(allo)q(cated)h(memory)e
(ma)o(y)h(b)q(e)h(used)f(for)g(comm)o(unication)h(with)f(an)o(y)g(comm)o
(unicator,)g(lik)o(e)189 2704 y(an)o(y)d(other)h(memory)l(.)1967
46 y Fp(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967
328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 3 3
bop 75 -100 a Fk(5.2.)34 b(INITIALIZA)l(TION)1302 b Fu(3)189
49 y(In)17 b(the)f(C)h(binding,)h(the)f Fm(base)g Fu(argumen)o(ts)f(of)g(the)
g(calls)i Fm(MPI)p 1276 49 14 2 v 16 w(Mem)p 1390 49 V 13 w(allo)q(c)e
Fu(and)h Fm(MPI)p 1680 49 V 16 w(Mem)p 1795 49 V 13 w(free)189
106 y Fu(are)g(not)g(the)h(same)g(v)m(ariable:)26 b(a)17 b(call)i(to)e
Fm(MPI)p 1010 106 V 16 w(Mem)p 1125 106 V 13 w(allo)q(c\(&base\))i
Fu(should)f(b)q(e)h(paired)f(with)g(a)189 162 y(call)d(to)e
Fm(MPI)p 410 162 V 16 w(Mem)p 524 162 V 13 w(free\(base\))h
Fu(\(one)f(less)i(dereference\).)20 b(Both)14 b(argumen)o(ts)f(are)g
(declared)i(to)e(b)q(e)189 219 y(of)h(same)h(t)o(yp)q(e)h Fh(void*)p
Fu(,)e(so)h(as)g(to)g(facilitate)h(t)o(yp)q(e)f(casting.)20
b(\()p Fn(End)15 b(of)i(advic)n(e)f(to)h(users.)p Fu(\))189
321 y Fn(A)n(dvic)n(e)11 b(to)h(implementors.)37 b Fu(If)11
b Fm(MPI)p 824 321 V 16 w(MEM)p 947 321 V 16 w(ALLOC)g Fu(allo)q(cates)g(sp)q
(ecial)i(memory)l(,)e(then)g(a)f(design)189 378 y(similar)18
b(to)e(the)h(design)h(of)e(C)h(mallo)q(c)h(and)f(free)g(functions)h(has)e(to)
h(b)q(e)g(used,)h(in)f(order)g(to)f(\014nd)189 434 y(out)d(the)h(size)g(of)f
(a)h(memory)f(segmen)o(t,)g(when)h(the)g(segmen)o(t)f(is)h(freed.)20
b(If)13 b(no)h(sp)q(ecial)h(memory)e(is)189 491 y(used,)i Fm(MPI)p
390 491 V 16 w(MEM)p 513 491 V 16 w(MALLOC)g Fu(simply)h(in)o(v)o(ok)o(es)f
Fm(mallo)q(c)p Fu(,)d(and)j Fm(MPI)p 1351 491 V 16 w(MEM)p
1474 491 V 16 w(FREE)h Fu(in)o(v)o(ok)o(es)f Fm(free)p Fu(.)189
565 y(A)j(call)i(to)e Fm(MPI)p 472 565 V 15 w(MEM)p 594 565
V 17 w(ALLOC)g Fu(can)h(b)q(e)g(used)g(in)g(shared)g(memory)f(systems)g(to)g
(allo)q(cate)h(the)189 622 y(windo)o(w)c(in)h(a)f(shared)g(memory)g(segmen)o
(t.)k(\()p Fn(End)d(of)g(advic)n(e)g(to)h(implementors.)p Fu(\))166
771 y Fg(Missing:)35 b Fj(Need)15 b(new)f(error)h(co)q(des.)166
922 y Fg(Discussion:)g Fj(These)h(t)o(w)o(o)d(functions)h(should)g(mo)o(v)o
(e)e(to)i(misc)e(c)o(hapter)75 1072 y Fl(Example)18 b(5.1)k
Fu(Example)17 b(of)e(use)h(of)f Fm(MPI)p 838 1072 V 16 w(MEM)p
961 1072 V 16 w(ALLOC)p Fu(,)g(in)i(F)l(ortran)d(with)i(p)q(oin)o(ter)g(supp)
q(ort.)22 b(W)l(e)75 1129 y(assume)15 b(4)g(b)o(yte)g Fh(REAL)p
Fu(s.)75 1220 y Fo(REAL)23 b(A)75 1276 y(POINTER)g(\(P,)g(A\(100,100\)\))70
b(!)24 b(no)g(memory)f(is)g(allocated)75 1333 y(CALL)g
(MPI_MEM_MALLOC\(4*100*100,)e(COMM,)i(P,)h(IERR\))695 1389
y(!)g(memory)f(is)h(allocated)1875 1434 y Fq(>)16 b Fp(\(Oct\))166
1480 y Fu(Since)h(standard)d(F)l(ortran)g(do)q(es)i(not)f(supp)q(ort)g
(\(C-lik)o(e\))g(p)q(oin)o(ters,)h(this)f(co)q(de)h(is)g(not)f(F)l(ortran)f
(77)75 1537 y(or)f(F)l(ortran)g(90)g(co)q(de.)20 b(It)14 b(is)g(exp)q(ected)h
(that)e(most)g(\(all?\))21 b(F)l(ortran)12 b(compilers)j(o\013er)e(similar)i
(facilities.)r Fq(?)h Fp(\(Oct\))166 1639 y Fu(The)g(initialization)j(op)q
(eration)d(allo)o(ws)g(eac)o(h)g(pro)q(cess)h(to)e(sp)q(ecify)l(,)i(in)g(a)f
(collectiv)o(e)h(op)q(eration,)f(a)75 1696 y(\\memory)11 b(windo)o(w")h(that)
f(is)h(made)g(accessible)h(to)f(accesses)g(b)o(y)f(remote)h(pro)q(cesses.)19
b(The)12 b(information)75 1752 y(is)18 b(attac)o(hed)e(to)g(an)h(opaque)g(ob)
s(ject)g(returned)g(b)o(y)g(the)g(call.)27 b(This)17 b(ob)s(ject)g(represen)o
(ts)g(the)g(group)f(of)75 1809 y(pro)q(cesses)i(that)f(o)o(wn)h(and)g(access)
g(the)g(set)f(of)h(windo)o(ws,)g(and)g(the)g(attributes)g(of)f(eac)o(h)h
(windo)o(w,)g(as)75 1865 y(sp)q(eci\014ed)f(b)o(y)e(the)h(init)g(call.)75
2016 y Fm(MPI)p 160 2016 V 16 w(WIN)p 264 2016 V 16 w(INIT)e(\(base,)i(size,)
f(disp)p 682 2016 V 18 w(unit,)h(info,)e(comm)m(,)e(win\))117
2093 y Fj(IN)155 b Fm(base)505 b Fj(initial)12 b(address)j(of)f(windo)o(w)f
(\(c)o(hoice\))117 2168 y(IN)155 b Fm(size)519 b Fj(size)15
b(of)e(windo)o(w)g(in)h(b)o(ytes)g(\(nonnegativ)o(e)g(in)o(teger\))117
2242 y(IN)155 b Fm(disp)p 395 2242 V 18 w(unit)422 b Fj(lo)q(cal)17
b(unit)h(size)g(for)g(displacemen)o(ts)f(in)g(RMA)h(op)q(erations)905
2299 y(\(p)q(ositiv)o(e)c(in)o(teger\))117 2373 y(IN)155 b
Fm(info)516 b Fj(info)13 b(argumen)o(t)117 2448 y(IN)155 b
Fm(comm)466 b Fj(comm)o(unicator)11 b(\(handle\))117 2523 y(OUT)108
b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i(returned)h(b)o(y)d(the)i(call)e
(\(handle\))75 2647 y Fo(int)23 b(MPI)p 245 2647 15 2 v 17
w(Win)p 334 2647 V 17 w(init\(void*)f(base,)i(int)f(size,)g(int)h(disp)p
1187 2647 V 16 w(unit,)g(MPI)p 1419 2647 V 16 w(Info)g(info,)393
2704 y(MPI)p 468 2704 V 17 w(Comm)f(comm,)g(MPI)p 819 2704
V 17 w(Win)h(*win\))-32 46 y Fp(1)-32 103 y(2)-32 159 y(3)-32
215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32
498 y(9)-40 554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40
780 y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40
1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288
y(23)-40 1345 y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40
1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796
y(32)-40 1853 y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40
2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304
y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40
2587 y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 4 4
bop 75 -100 a Fu(4)746 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fo(MPI)p 150 49 15 2 v 17 w(WIN)p
239 49 V 17 w(INIT\(BASE,)22 b(SIZE,)h(DISP)p 757 49 V 17 w(UNIT,)g(INFO,)g
(COMM,)g(WIN,)h(IERROR\))170 106 y(<type>)f(BASE\(*\))170 162
y(INTEGER)g(SIZE,)h(DISP)p 604 162 V 16 w(UNIT,)f(INFO,)h(COMM,)f(WIN,)g
(IERROR)-117 198 y Fq(>)15 b Fp(\(Oct\))75 249 y Fo(int)23
b(MPI::Win::init\(void)f(*base,)h(int)g(size,)g(int)h(disp)p
1248 249 V 16 w(unit,)g(const)f(MPI::Info&)393 305 y(info,)g(const)h
(MPI::Comm&)e(comm\))-117 341 y Fq(?)15 b Fp(\(Oct\))166 392
y Fu(This)20 b(is)h(a)e(collectiv)o(e)j(call)f(executed)g(b)o(y)e(all)i(pro)q
(cesses)g(in)f(the)g(group)g(of)f Fm(comm)m Fu(.)31 b(It)20
b(returns)75 448 y(a)e(windo)o(w)g(ob)s(ject)g(that)f(can)h(b)q(e)h(used)g(b)
o(y)f(these)g(pro)q(cesses)h(to)e(p)q(erform)h(RMA)g(op)q(erations.)29
b(Eac)o(h)75 504 y(pro)q(cess)21 b(sp)q(eci\014es)i(a)d(windo)o(w)h(of)g
(existing)h(memory)e(that)g(it)h(exp)q(oses)h(to)e(RMA)h(accesses)g(b)o(y)g
(the)75 561 y(pro)q(cesses)13 b(in)h(the)f(group)g(of)f Fm(comm)m
Fu(.)k(The)d(windo)o(w)h(consists)f(of)f Fm(size)h Fu(b)o(ytes,)g(starting)f

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
(at)g(address)h Fm(base)p Fu(.)75 617 y(A)i(pro)q(cess)h(ma)o(y)e(elect)i(to)
f(exp)q(ose)h(no)f(memory)f(b)o(y)h(sp)q(ecifying)j Fm(size)d(=)g(0)p
Fu(.)166 674 y(The)h(displacemen)o(t)h(unit)g(argumen)o(t)e(is)h(pro)o(vided)
g(to)f(facilitate)i(address)f(arithmetics)g(in)h(RMA)75 730
y(op)q(erations:)j(the)15 b(target)e(displacemen)o(t)j(argumen)o(t)e(of)h(an)
g(RMA)f(op)q(eration)h(is)h(scaled)f(b)o(y)g(the)g(factor)75
787 y Fm(disp)p 152 787 14 2 v 18 w(unit)h Fu(sp)q(eci\014ed)h(b)o(y)e(the)h
(target)e(pro)q(cess,)h(at)f(windo)o(w)i(creation.)-1396 b
Fq(>)15 b Fp(\(Oct\))189 893 y Fn(A)n(dvic)n(e)e(to)h(users.)38
b Fu(Common)12 b(c)o(hoices)h(for)f Fm(disp)p 1024 893 V 18
w(unit)i Fu(are)e(1)g(\(no)h(scaling\),)g(and)g Fo(sizeof\(type\))p
Fu(,)189 949 y(for)g(a)i(windo)o(w)f(that)g(consists)h(of)f(an)g(arra)o(y)f
(of)h(elemen)o(ts)h(of)f(t)o(yp)q(e)h Fo(type)p Fu(.)k(The)c(later)f(c)o
(hoice)h(will)189 1006 y(allo)o(w)h(one)g(to)g(use)h(arra)o(y)e(indices)j(in)
f(RMA)f(calls,)i(and)e(ha)o(v)o(e)g(those)g(scaled)h(correctly)g(to)e(b)o
(yte)189 1062 y(displacemen)o(ts,)h(ev)o(en)f(in)h(a)f(heterogeneous)h(en)o
(vironmen)o(t.)k(\()p Fn(End)15 b(of)i(advic)n(e)f(to)g(users.)p
Fu(\))-117 1124 y Fq(?)f Fp(\(Oct\))166 1169 y Fu(The)d Fm(info)f
Fu(argumen)o(t)g(pro)o(vides)h(optimization)h(hin)o(ts)f(to)f(the)h(run)o
(time)g(ab)q(out)g(the)f(exp)q(ected)i(usage)75 1225 y(pattern)i(of)g(the)g
(windo)o(w.)20 b(The)15 b(follo)o(wing)h(t)o(w)o(o)e(info)i(k)o(eys)f(are)g
(de\014ned:)-1457 b Fq(>)15 b Fp(\(Oct\))75 1319 y Fl(no)p
133 1319 16 2 v 19 w(lo)q(c)o(ks)23 b Fu(If)12 b(set)g(to)g
Fh(true)p Fu(,)h(then)g(the)f(implemen)o(tation)i(ma)o(y)d(assume)h(that)g
(the)g(lo)q(cal)i(windo)o(w)e(is)h(nev)o(er)189 1375 y(lo)q(c)o(k)o(ed)18
b(\(b)o(y)e(a)h(call)i(to)d Fm(MPI)p 680 1375 14 2 v 16 w(WIN)p
784 1375 V 16 w(LOCK)p Fu(\).)g(This)i(implies)i(that)c(this)i(windo)o(w)f
(is)h(not)f(used)h(for)189 1432 y(3-part)o(y)e(comm)o(unication,)i(and)f(RMA)
g(can)g(b)q(e)h(implemen)o(ted)h(with)e(no)g(\(less\))g(async)o(hronous)189
1488 y(agen)o(t)d(activit)o(y)i(at)e(this)i(pro)q(cess.)75
1582 y Fl(no)p 133 1582 16 2 v 19 w(stores)22 b Fu(If)e(set)f(to)g
Fh(true)p Fu(,)j(then)e(the)g(implemen)o(tation)h(ma)o(y)d(assume)i(that)f
(the)h(lo)q(cal)h(windo)o(w)e(is)189 1639 y(not)h(accessed)i(b)o(y)f(lo)q
(cal)h(stores.)37 b(This)22 b(ma)o(y)e(sa)o(v)o(e,)h(on)g(some)g(systems,)h
(explicit)h(coherence)189 1695 y(op)q(erations.)-117 1741 y
Fq(?)15 b Fp(\(Oct\))166 1789 y Fu(The)k(v)m(arious)h(pro)q(cesses)f(in)h
(the)f(group)g(of)f Fm(comm)13 b Fu(ma)o(y)18 b(sp)q(ecify)j(completely)f
(di\013eren)o(t)f(target)75 1845 y(windo)o(ws,)e(in)g(lo)q(cation,)g(size,)h
(displacemen)o(t)g(units)f(and)g(info)g(argumen)o(ts.)23 b(As)16
b(long)h(as)f(all)i(the)e(gets)75 1902 y(and)f(puts)g(to)g(a)f(particular)i
(pro)q(cess)f(\014t)g(its)g(sp)q(eci\014c)i(target)d(windo)o(w)h(this)g
(should)h(p)q(ose)g(no)f(problem.)166 1958 y(The)23 b(same)f(area)g(in)i
(memory)e(ma)o(y)g(app)q(ear)h(in)g(m)o(ultiple)i(windo)o(ws,)f(eac)o(h)f
(asso)q(ciated)g(with)75 2015 y(a)d(di\013eren)o(t)g(comm)o(unicator.)34
b(Ho)o(w)o(ev)o(er,)19 b(concurren)o(t)h(comm)o(unications)h(to)e(distinct,)j
(o)o(v)o(erlapping)75 2071 y(windo)o(ws)15 b(ma)o(y)g(lead)h(to)e(erroneous)h
(results.)166 2128 y(The)g(information)g(ab)q(out)g(the)g(lo)q(cal)h(windo)o
(w)g(asso)q(ciated)f(with)g Fm(win)h Fu(is)f(cac)o(hed)h(with)f(the)g(newly)
75 2184 y(created)g(windo)o(w)h(ob)s(ject,)e(and)h(is)h(attac)o(hed)f(to)f
(the)h(follo)o(wing)h(three)g(attributes.)75 2290 y Fl(MPI)p
184 2290 V 18 w(WINDO)o(W)p 449 2290 V 19 w(BASE:)22 b Fu(Initial)17
b(address)e(of)g(lo)q(cal)h(address)75 2384 y Fl(MPI)p 184
2384 V 18 w(WINDO)o(W)p 449 2384 V 19 w(SIZE:)22 b Fu(size)16
b(of)f(lo)q(cal)h(windo)o(w,)f(in)h(b)o(ytes)75 2478 y Fl(MPI)p
184 2478 V 18 w(WINDO)o(W)p 449 2478 V 19 w(DISP)p 593 2478
V 18 w(UNIT:)23 b Fu(displacemen)o(t)16 b(unit)g(used)g(for)f(lo)q(cal)h
(windo)o(w)166 2584 y(If)k(a)f(windo)o(w)i(ob)s(ject)e Fm(win)h
Fu(w)o(as)f(created)h(b)o(y)g(a)f(call)i(to)e Fm(MPI)p 1255
2584 14 2 v 16 w(WIN)p 1359 2584 V 16 w(INIT\(base,)i(size,)g(disp)p
1774 2584 V 17 w(unit,)75 2641 y Ff(:)8 b(:)g(:)e Fm(\))p Fu(,)18
b(then)h Fm(MPI)p 377 2641 V 16 w(HANDLE)p 572 2641 V 17 w(A)l(TTR)p
706 2641 V 17 w(GET\(win,)g(MPI)p 1008 2641 V 16 w(WINDO)o(W)p
1220 2641 V 16 w(BASE,)g(val,)g(\015ag,)g(MPI)p 1649 2641 V
16 w(WIN)f(\))g Fu(will)75 2697 y(return)d Fm(val)g(=)g(base)p
Fu(;)h(and)g(similarly)l(,)g(for)f(the)g(other)g(t)o(w)o(o.)1967
46 y Fp(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967
328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 5 5
bop 75 -100 a Fk(5.3.)34 b(COMMUNICA)l(TION)16 b(CALLS)1090
b Fu(5)166 49 y Fg(Missing:)17 b Fj(Stev)o(e)e(needs)h(to)e(add)g(this)h(new)
g(opaque)f(ob)r(ject)h(to)f(the)h(list)f(of)g(ob)r(jects)h(that)f(accept)i
(cac)o(hed)75 106 y(attributes.)j(Also)14 b(need)g(to)g(add)g(the)g(constan)o
(t)h Fh(MPI)p 921 106 13 2 v 14 w(WIN)p 1015 106 V 15 w(NULL)p
Fj(.)189 254 y Fn(A)n(dvic)n(e)21 b(to)h(users.)77 b Fu(A)21
b(windo)o(w)h(can)f(b)q(e)h(created)g(in)g(an)o(y)f(part)g(of)g(the)g(pro)q
(cess)h(memory)l(.)189 311 y(Ho)o(w)o(ev)o(er,)h(on)g(some)g(systems,)g(the)g
(p)q(erformance)h(of)e(windo)o(ws)h(in)h(memory)e(allo)q(cated)i(b)o(y)189
367 y Fm(MPI)p 274 367 14 2 v 15 w(MEM)p 396 367 V 16 w(ALLOC)f
Fu(will)h(b)q(e)f(b)q(etter.)42 b(Suc)o(h)23 b(\\go)q(o)q(d")f(windo)o(w)h
(for)f(RMA)g(comm)o(unication)189 424 y(is)c(created)g(b)o(y)g(\014rst)g
(allo)q(cating)h(\\go)q(o)q(d")e(memory)h(with)g Fm(MPI)p 1302
424 V 16 w(MEM)p 1425 424 V 16 w(ALLOC)p Fu(,)g(next)g(creating)189
480 y(an)d(RMA)g(windo)o(w)h(in)g(the)f(memory)f(allo)q(cated)j(with)e
Fm(MPI)p 1230 480 V 16 w(WIN)p 1334 480 V 16 w(INIT)p Fu(.)189
554 y(Also,)g(on)g(some)g(systems,)g(p)q(erformance)g(is)h(impro)o(v)o(ed)g
(when)g(windo)o(ws)f(b)q(oundaries)i(are)e(w)o(ord)189 611
y(or)f(double-w)o(ord)i(aligned.)22 b(\()p Fn(End)15 b(of)i(advic)n(e)f(to)g
(users.)p Fu(\))189 712 y Fn(A)n(dvic)n(e)g(to)i(implementors.)50
b Fu(In)17 b(cases)g(where)g(RMA)f(op)q(erations)h(use)g(di\013eren)o(t)g
(mec)o(hanisms)189 769 y(in)d(di\013eren)o(t)f(memory)g(areas)f(\(e.g.,)g
(load/store)h(in)h(a)f(shared)g(memory)g(segmen)o(t,)f(and)i(an)f(asyn-)189
825 y(c)o(hronous)d(handler)j(in)e(priv)m(ate)h(memory\),)f(the)g
Fm(MPI)p 1095 825 V 16 w(WIN)p 1199 825 V 16 w(INIT)f Fu(call)i(needs)g(to)e
(\014gure)h(out)g(whic)o(h)189 882 y(t)o(yp)q(e)k(of)g(memory)f(is)i(used)g
(for)e(the)i(windo)o(w.)k(T)l(o)15 b(do)g(so,)f(MPI)h(main)o(tains,)g(in)o
(ternally)l(,)i(the)e(list)189 938 y(of)21 b(memory)g(segmen)o(ts)g(allo)q
(cated)h(b)o(y)g Fm(MPI)p 983 938 V 16 w(MEM)p 1106 938 V 16
w(ALLOC)p Fu(,)f(or)g(b)o(y)g(other,)i(implemen)o(tation)189
994 y(sp)q(eci\014c,)16 b(mec)o(hanisms,)e(together)g(with)g(information)g
(on)g(the)h(t)o(yp)q(e)f(of)g(memory)f(segmen)o(t)h(allo-)189
1051 y(cated.)k(When)13 b(a)e(call)i(to)e Fm(MPI)p 707 1051
V 16 w(WIN)p 811 1051 V 16 w(INIT)g Fu(o)q(ccurs,)i(then)f(MPI)g(c)o(hec)o
(ks)g(whic)o(h)g(segmen)o(t)g(con)o(tains)189 1107 y(eac)o(h)j(windo)o(w,)g
(and)g(decide,)i(accordingly)l(,)f(whic)o(h)g(mec)o(hanism)g(to)e(use)i(for)f
(RMA)g(op)q(erations.)189 1182 y(V)l(endors)d(ma)o(y)f(pro)o(vide)i
(additional,)h(implemen)o(tation-sp)q(eci\014c)h(mec)o(hanisms)e(to)e(allo)o
(w)i(\\go)q(o)q(d")189 1238 y(memory)h(to)h(b)q(e)h(used)f(for)g(static)g(v)m
(ariables.)21 b(\()p Fn(End)16 b(of)g(advic)n(e)g(to)h(implementors.)p
Fu(\))75 1434 y Fm(MPI)p 160 1434 V 16 w(WIN)p 264 1434 V 16
w(FREE\(win\))117 1511 y Fj(INOUT)62 b Fm(win)522 b Fj(windo)o(w)13
b(ob)r(ject)i(\(handle\))75 1636 y Fo(int)23 b(MPI)p 245 1636
15 2 v 17 w(Win)p 334 1636 V 17 w(free\(MPI)p 543 1636 V 16
w(Win)h(*win\))75 1722 y(MPI)p 150 1722 V 17 w(WIN)p 239 1722
V 17 w(FREE\(WIN,)e(IERROR\))170 1779 y(INTEGER)h(WIN,)h(IERROR)1875
1815 y Fq(>)16 b Fp(\(Oct\))75 1865 y Fo(int)23 b(MPI::Win::free\(void\))166
1951 y Fu(F)l(rees)f(the)h(windo)o(w)g(ob)s(ject)f Fm(win)h
Fu(and)f(returns)h(a)f(n)o(ull)i(handle.)43 b(The)23 b(usual)g(ob)s(ject)f
(freeing)75 2008 y(seman)o(tics)e(are)g(used:)30 b(the)20 b(ob)s(ject)f
(deallo)q(cation)i(will)h(b)q(e)f(dela)o(y)o(ed)f(if)h(there)f(is)g(an)g
(ongoing)g(RMA)75 2064 y(comm)o(unication)d(that)e(uses)h(this)h(ob)s(ject;)e
(the)h(ob)s(ject)g(will)i(b)q(e)e(actually)h(freed)f(some)g(time)h(after)e
(the)75 2121 y(call.)1720 b Fq(?)16 b Fp(\(Oct\))75 2263 y
Fr(5.3)59 b(Communication)17 b(Calls)75 2365 y Fu(MPI)i(supp)q(orts)g(three)g
(RMA)h(comm)o(unication)g(calls:)28 b Fm(MPI)p 1154 2365 14
2 v 16 w(PUT)19 b Fu(transfers)g(data)f(from)h(the)g(caller)75
2421 y(memory)e(\(origin\))h(to)f(the)h(target)f(memory;)h
Fm(MPI)p 973 2421 V 16 w(GET)g Fu(transfers)f(data)g(from)g(the)h(target)f
(memory)75 2478 y(to)j(the)g(caller)i(memory;)g(and)f Fm(MPI)p
721 2478 V 16 w(A)o(CCUMULA)l(TE)g Fu(up)q(dates)f(lo)q(cations)i(in)f(the)f
(target)g(memory)l(,)75 2534 y(e.g.)32 b(b)o(y)19 b(adding)i(to)d(these)i(lo)
q(cations)g(v)m(alues)h(sen)o(t)e(from)g(the)g(caller)i(memory)l(.)32
b(These)20 b(op)q(erations)75 2591 y(are)h Fn(nonblo)n(cking)p
Fu(:)30 b(the)21 b(call)h(initiates)h(the)e(transfer,)g(but)h(the)f(transfer)
f(ma)o(y)h(con)o(tin)o(ue)g(after)g(the)75 2647 y(call)i(returns.)41
b(The)23 b(transfer)f(is)g(completed,)j(b)q(oth)d(at)g(the)g(origin)i(and)e
(at)g(the)g(target,)g(when)h(a)75 2704 y(subsequen)o(t)g Fn(synchr)n
(onization)d Fu(call)j(is)g(issued)g(b)o(y)f(the)g(caller,)j(on)d(the)g(in)o
(v)o(olv)o(ed)h(windo)o(w)f(ob)s(ject.)-32 46 y Fp(1)-32 103
y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32 385
y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40 667
y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40
949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119 y(20)-40 1175
y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40
1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909 y(34)-40
1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191
y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40 2417 y(43)-40
2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699
y(48)p eop
%%Page: 6 6
bop 75 -100 a Fu(6)746 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fu(These)d(sync)o(hronization)h(calls)g(are)f
(describ)q(ed)i(in)e(Section)h(5.4,)e(P)o(age)g(13.)19 b(The)13
b(lo)q(cal)h(comm)o(unication)75 106 y(bu\013er)20 b(of)g(an)h(RMA)f(call)i
(should)f(not)f(b)q(e)h(accessed,)h(or)e(used)h(as)f(the)h(source)f(or)g
(target)f(of)h(other)75 162 y(comm)o(unications,)d(after)e(the)i(RMA)f(call,)
h(un)o(til)h(the)e(subsequen)o(t)h(sync)o(hronization)g(call)h(completes,)75
219 y(with)e(one)f(exception:)21 b(The)15 b(origin)h(bu\013ers)f(of)g
(concurren)o(t)g(put)h(or)e(accum)o(ulate)i(calls)g(ma)o(y)f(o)o(v)o(erlap.)
189 325 y Fn(R)n(ationale.)58 b Fu(The)18 b(rule)h(ab)q(o)o(v)o(e)f(is)h
(more)e(lenien)o(t)j(than)e(for)g(message)g(passing,)h(where)f(w)o(e)g(do)189
381 y(not)g(allo)o(w)h(t)o(w)o(o)e(concurren)o(t)i(sends,)g(with)g(o)o(v)o
(erlapping)g(send)h(bu\013ers.)30 b(Here,)19 b(w)o(e)f(allo)o(w)h(t)o(w)o(o)
189 438 y(concurren)o(t)c(puts)g(with)h(o)o(v)o(erlapping)g(send)f
(bu\013ers.)20 b(The)c(reasons)e(for)h(this)g(relaxation)h(are)231
532 y(1.)22 b(Users)14 b(do)g(not)g(lik)o(e)i(that)d(restriction,)i(whic)o(h)
g(is)g(not)f(v)o(ery)g(natural)h(\(it)f(prohibits)h(concur-)289
588 y(ren)o(t)f(reads\).)-117 608 y Fq(>)h Fp(\(Oct\))231 661
y Fu(2.)22 b(W)l(eak)o(ening)13 b(the)g(rule)h(do)q(es)f(not)f(prev)o(en)o(t)
h(e\016cien)o(t)g(implemen)o(tation,)h(as)f(far)f(as)g(w)o(e)h(kno)o(w.)-117
718 y Fq(?)i Fp(\(Oct\))231 791 y Fu(3.)22 b(W)l(eak)o(ening)15
b(the)g(rule)h(is)g(imp)q(ortan)o(t)f(for)f(p)q(erformance)h(of)g(RMA:)g(w)o
(e)g(w)o(an)o(t)f(to)g(asso)q(ciate)289 847 y(one)g(sync)o(hronization)i
(call)f(with)g(as)f(man)o(y)g(RMA)h(op)q(erations)f(is)h(p)q(ossible.)21
b(If)15 b(puts)g(from)289 904 y(o)o(v)o(erlapping)j(bu\013ers)g(cannot)f(b)q
(e)h(concurren)o(t,)g(than)g(w)o(e)f(need)i(to)e(needlessly)j(add)e(syn-)289
960 y(c)o(hronization)e(p)q(oin)o(ts)f(in)h(the)g(co)q(de.)189
1054 y(\()p Fn(End)f(of)i(r)n(ationale.)p Fu(\))166 1207 y
Fg(Discussion:)f Fj(Do)d(w)o(e)h(ha)o(v)o(e)g(a)g(problem)e(with)i(a)g(load)f
(that)h(accesses)i(the)f(origin)e(bu\013er)i(of)e(a)h(put,)f(while)75
1264 y(the)h(put)h(runs?)166 1367 y Fu(The)c(calls)h(use)f(general)h(datat)o
(yp)q(e)e(argumen)o(ts)g(to)g(sp)q(ecify)j(comm)o(unication)e(bu\013ers)g(at)
f(the)h(origin)75 1424 y(and)i(at)e(the)i(target.)18 b(Th)o(us,)12
b(a)g(transfer)g(op)q(eration)h(ma)o(y)e(also)i(gather)f(data)f(at)h(the)h
(source)f(and)h(scatter)75 1480 y(it)19 b(at)f(the)g(destination.)31
b(Ho)o(w)o(ev)o(er,)18 b(all)h(argumen)o(ts)f(sp)q(ecifying)i(b)q(oth)f(comm)
o(unication)g(bu\013ers)f(are)75 1537 y(pro)o(vided)e(b)o(y)f(the)g(caller.)
166 1593 y(F)l(or)h(all)i(three)f(calls,)i(the)e(target)f(pro)q(cess)h(ma)o
(y)f(b)q(e)i(iden)o(tical)h(with)e(the)g(origin)h(pro)q(cess;)g(i.e.,)f(a)75
1650 y(pro)q(cess)e(ma)o(y)g(use)g(a)g(put)h(call)g(to)f(mo)o(v)o(e)f(data)h
(in)h(its)f(memory)l(.)189 1756 y Fn(R)n(ationale.)39 b Fu(The)14
b(c)o(hoice)g(of)g(supp)q(orted)g(\\self-comm)o(unication")h(is)f(the)g(same)
g(as)f(for)g(message)189 1812 y(passing.)22 b(It)16 b(simpli\014es)i(some)e
(co)q(ding,)g(and)g(is)h(v)o(ery)e(useful)i(with)f(accum)o(ulate)h(op)q
(erations,)f(to)189 1869 y(allo)o(w)f(atomic)g(up)q(dates)h(of)f(lo)q(cal)h
(v)m(ariables.)21 b(\()p Fn(End)16 b(of)g(r)n(ationale.)p Fu(\))75
1991 y Fe(5.3.1)49 b(Put)75 2076 y Fu(The)15 b(execution)g(of)f(a)g(put)h(op)
q(eration)g(is)g(similar)g(to)f(the)h(execution)g(of)f(a)g(send)i(b)o(y)e
(the)h(origin)g(pro)q(cess)75 2133 y(and)f(a)g(matc)o(hing)g(receiv)o(e)h(b)o
(y)g(the)f(target)f(pro)q(cess.)19 b(The)c(ob)o(vious)f(di\013erence)i(is)e
(that)g(all)h(parameters)75 2189 y(are)g(pro)o(vided)h(b)o(y)f(one)g(call)i
({)e(the)g(call)h(executed)g(b)o(y)f(the)h(origin)g(pro)q(cess.)1967
46 y Fp(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967
328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 7 7
bop 75 -100 a Fk(5.3.)34 b(COMMUNICA)l(TION)16 b(CALLS)1090
b Fu(7)75 49 y Fm(MPI)p 160 49 14 2 v 16 w(PUT\()11 b(o)o(rigin)p
402 49 V 15 w(addr,)h(o)o(rigin)p 632 49 V 15 w(count,)h(o)o(rigin)p
884 49 V 15 w(datat)o(yp)q(e,)g(ta)o(rget)p 1200 49 V 16 w(rank,)f(ta)o(rget)
p 1436 49 V 16 w(disp,)g(ta)o(rget)p 1663 49 V 17 w(count,)g(ta)o(r-)75
106 y(get)p 137 106 V 17 w(datat)o(yp)q(e,)k(win\))117 183
y Fj(IN)155 b Fm(o)o(rigin)p 427 183 V 16 w(addr)381 b Fj(address)15
b(of)f(origin)e(bu\013er)j(\(c)o(hoice\))117 258 y(IN)155 b
Fm(o)o(rigin)p 427 258 V 16 w(count)360 b Fj(n)o(um)o(b)q(er)13
b(of)h(elemen)o(ts)f(sen)o(t)i(\(in)o(teger\))117 333 y(IN)155
b Fm(o)o(rigin)p 427 333 V 16 w(datat)o(yp)q(e)302 b Fj(datat)o(yp)q(e)14
b(of)g(elemen)o(ts)f(sen)o(t)i(\(handle\))117 408 y(IN)155
b Fm(ta)o(rget)p 433 408 V 17 w(rank)375 b Fj(rank)14 b(of)f(target)i(\(in)o
(teger\))117 483 y(IN)155 b Fm(ta)o(rget)p 433 483 V 17 w(disp)384
b Fj(displacemen)o(t)20 b(from)f(start)i(of)f(windo)o(w)g(to)h(target)g
(bu\013er)905 540 y(\(nonnegativ)o(e)14 b(in)o(teger\))117
615 y(IN)155 b Fm(ta)o(rget)p 433 615 V 17 w(count)353 b Fj(n)o(um)o(b)q(er)
13 b(of)h(elemen)o(ts)f(receiv)o(ed)j(\(in)o(teger\))117 690
y(IN)155 b Fm(ta)o(rget)p 433 690 V 17 w(datat)o(yp)q(e)295
b Fj(datat)o(yp)q(e)14 b(used)h(at)f(the)g(target)h(\(handle\))117
765 y(IN)155 b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i(used)g(for)e(comm)o
(unication)e(\(handle\))75 890 y Fo(int)23 b(MPI)p 245 890
15 2 v 17 w(Put\()h(void)f(*origin)p 669 890 V 16 w(addr,)g(int)h(origin)p
1068 890 V 16 w(count,)f(MPI)p 1323 890 V 17 w(Datatype)393
946 y(origin)p 540 946 V 17 w(datatype,)f(int)i(target)p 1035
946 V 16 w(rank,)f(int)h(target)p 1434 946 V 16 w(disp,)f(int)393
1003 y(target)p 540 1003 V 17 w(count,)g(MPI)p 796 1003 V 16
w(Datatype)g(target)p 1171 1003 V 16 w(datatype,)g(MPI)p 1498
1003 V 17 w(Win)g(win\))75 1089 y(MPI)p 150 1089 V 17 w(PUT\()g(ORIGIN)p
430 1089 V 16 w(ADDR,)h(ORIGIN)p 734 1089 V 16 w(COUNT,)f(ORIGIN)p
1061 1089 V 16 w(DATATYPE,)g(TARGET)p 1460 1089 V 16 w(RANK,)393
1146 y(TARGET)p 540 1146 V 17 w(DISP,)g(TARGET)p 844 1146 V
16 w(COUNT,)g(TARGET)p 1171 1146 V 16 w(DATATYPE,)g(WIN,)g(IERROR\))170
1202 y(<type>)g(ORIGIN)p 484 1202 V 17 w(ADDR\(*\))170 1259
y(INTEGER)g(ORIGIN)p 508 1259 V 17 w(COUNT,)g(ORIGIN)p 836
1259 V 16 w(DATATYPE,)g(TARGET)p 1235 1259 V 16 w(RANK,)g(TARGET)p
1538 1259 V 17 w(DISP,)170 1315 y(TARGET)p 317 1315 V 17 w(COUNT,)g(TARGET)p
645 1315 V 16 w(DATATYPE,)g(WIN,)g(IERROR)1875 1351 y Fq(>)16
b Fp(\(Oct\))75 1401 y Fo(int)23 b(MPI::Win::Put\(void)f(*origin)p
795 1401 V 16 w(addr,)h(int)h(origin)p 1194 1401 V 16 w(count,)f(const)g
(MPI::Datatype&)393 1458 y(origin)p 540 1458 V 17 w(datatype,)f(int)i(target)
p 1035 1458 V 16 w(rank,)f(int)h(target)p 1434 1458 V 16 w(disp,)f(int)393
1514 y(target)p 540 1514 V 17 w(count,)g(const)g(MPI::Datatype&)f(target)p
1369 1514 V 16 w(datatype\))1875 1554 y Fq(?)16 b Fp(\(Oct\))166
1601 y Fu(T)l(ransfers)k Fm(o)o(rigin)p 478 1601 14 2 v 16
w(count)i Fu(successiv)o(e)g(en)o(tries)f(of)g(the)g(t)o(yp)q(e)g(sp)q
(eci\014ed)i(b)o(y)d(the)h Fm(o)o(rigin)p 1685 1601 V 16 w(datat)o(yp)q(e)p
Fu(,)75 1657 y(starting)13 b(at)h(address)g Fm(o)o(rigin)p
568 1657 V 15 w(addr)g Fu(on)g(the)g(origin)h(no)q(de)f(to)g(the)g(target)f
(no)q(de)h(sp)q(eci\014ed)i(b)o(y)e(the)g Fm(comm)m Fu(,)75
1714 y Fm(ta)o(rget)p 190 1714 V 16 w(rank)19 b Fu(pair.)31
b(The)19 b(data)f(are)h(written)g(in)h(the)e(target)g(bu\013er)h(at)f
(address)h Fm(ta)o(rget)p 1624 1714 V 16 w(addr)g(=)g(win-)75
1770 y(do)o(w)p 154 1770 V 16 w(base)c(+)e(ta)o(rget)p 427
1770 V 16 w(disp)p Fq(\002)p Fm(disp)p 626 1770 V 20 w(unit)p
Fu(,)h(where)f Fm(windo)o(w)p 1016 1770 V 17 w(base)h Fu(and)g
Fm(disp)p 1290 1770 V 17 w(unit)h Fu(are)e(the)g(base)g(address)h(and)75
1827 y(windo)o(w)h(displacemen)o(t)i(unit)f(sp)q(eci\014ed)h(at)e(windo)o(w)g
(initialization,)j(b)o(y)d(the)h(target)e(pro)q(cess.)166 1883
y(The)h(target)f(bu\013er)h(is)h(sp)q(eci\014ed)i(b)o(y)d(the)g(argumen)o(ts)
f Fm(ta)o(rget)p 1230 1883 V 17 w(count)i Fu(and)f Fm(ta)o(rget)p
1568 1883 V 17 w(datat)o(yp)q(e)p Fu(.)117 b Fq(>)16 b Fp(\(Oct\))166
1940 y Fu(The)h(data)g(transfer)f(is)i(the)f(same)g(that)g(w)o(ould)g(o)q
(ccur)h(if)g(the)f(origin)h(pro)q(cess)f(executed)h(a)f(send)75
1996 y(op)q(eration)g(with)g(argumen)o(ts)f Fm(o)o(rigin)p
717 1996 V 15 w(addr,)h(o)o(rigin)p 952 1996 V 15 w(count,)h(o)o(rigin)p
1209 1996 V 15 w(datat)o(yp)q(e,)h(ta)o(rget)p 1531 1996 V
16 w(rank,)e(tag,)f(comm)m Fu(,)75 2052 y(and)11 b(the)f(target)g(pro)q(cess)
h(executed)g(a)f(receiv)o(e)i(op)q(eration)f(with)f(argumen)o(ts)g
Fm(ta)o(rget)p 1506 2052 V 16 w(addr,)i(ta)o(rget)p 1743 2052
V 16 w(count,)75 2109 y(ta)o(rget)p 190 2109 V 16 w(datat)o(yp)q(e,)k
(source,)f(tag,)g(comm)m Fu(,)d(where)j Fm(ta)o(rget)p 1020
2109 V 16 w(addr)g Fu(is)g(the)g(target)f(bu\013er)h(address)g(computed)75
2165 y(as)h(explained)j(ab)q(o)o(v)o(e,)d(and)h Fm(comm)11
b Fu(is)17 b(a)g(comm)o(unicator)f(for)g(the)h(group)f(of)g
Fm(win)p Fu(.)25 b(The)17 b(message)f(sen)o(t)75 2222 y(m)o(ust)g(\014t,)g
(without)g(truncation,)h(in)g(the)g(target)e(bu\013er,)h(whic)o(h)h(m)o(ust)f
(\014t)g(in)i(the)e(target)f(windo)o(w.)24 b(A)75 2278 y(high-qualit)o(y)13
b(implemen)o(tation)g(will)h(raise)e(an)f(exception)i(at)e(the)h(origin)g(if)
g(this)g(condition)h(is)g(violated.)1875 2335 y Fq(?)j Fp(\(Oct\))166
2391 y Fu(The)j Fm(ta)o(rget)p 378 2391 V 16 w(datat)o(yp)q(e)i
Fu(argumen)o(t)d(is)h(a)g(handle)h(to)e(a)h(datat)o(yp)q(e)f(ob)s(ject)h
(de\014ned)h(at)e(the)h(origin)75 2448 y(pro)q(cess.)j(Ho)o(w)o(ev)o(er,)15
b(this)h(ob)s(ject)f(is)i(in)o(terpreted)f(at)f(the)h(target)f(pro)q(cess:)21
b(the)16 b(outcome)g(is)g(as)g(if)g(the)75 2504 y(target)j(datat)o(yp)q(e)h
(ob)s(ject)g(w)o(as)f(de\014ned)j(at)e(the)g(target)f(pro)q(cess,)j(b)o(y)e
(the)g(same)g(sequence)i(of)e(calls)75 2561 y(used)f(to)f(de\014ne)i(it)f(at)
f(the)h(origin)g(pro)q(cess.)31 b(The)19 b(target)e(datat)o(yp)q(e)i(should)g
(con)o(tain)g(only)g(relativ)o(e)75 2617 y(displacemen)o(ts,)d(not)f
(absolute)h(addresses.)k(The)15 b(same)g(holds)h(for)f(get)f(and)i(accum)o
(ulate.)-32 46 y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32
272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40
836 y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40
1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345
y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853
y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40
2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40
2643 y(47)-40 2699 y(48)p eop
%%Page: 8 8
bop 75 -100 a Fu(8)746 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)189 49 y Fn(A)n(dvic)n(e)11 b(to)i(users.)37
b Fu(The)12 b Fm(ta)o(rget)p 739 49 14 2 v 16 w(datat)o(yp)q(e)h
Fu(argumen)o(t)d(is)i(a)e(handle)j(to)d(a)h(datat)o(yp)q(e)g(ob)s(ject)f
(that)g(is)189 106 y(de\014ned)j(at)f(the)g(origin)h(pro)q(cess,)g(ev)o(en)f
(though)g(it)h(de\014nes)g(a)f(data)g(la)o(y)o(out)f(in)i(the)g(target)e(pro)
q(cess)189 162 y(memory)l(.)18 b(This)11 b(causes)f(no)h(problems)g(in)g(a)g
(homogeneous)f(en)o(vironmen)o(t,)h(or)f(in)i(a)e(heterogenous)189
219 y(en)o(vironmen)o(t,)k(if)g(only)h(p)q(ortable)f(datat)o(yp)q(es)g(are)f
(used.)20 b(A)14 b(datat)o(yp)q(e)g(is)g Fn(p)n(ortable)p Fu(,)g(if)h(it)f
(is)g(basic)189 275 y(datat)o(yp)q(e,)f(or)g(it)h(is)g(deriv)o(ed)h(using)f
(only)h(the)e(t)o(yp)q(e)h(constructors)f Fm(MPI)p 1426 275
V 16 w(TYPE)p 1559 275 V 17 w(CONTIGUOUS,)189 332 y(MPI)p 274
332 V 15 w(TYPE)p 406 332 V 17 w(VECTOR)f Fu(and)e Fm(MPI)p
779 332 V 16 w(TYPE)p 912 332 V 17 w(INDEXED)p Fu(.)f(Suc)o(h)i(datat)o(yp)q
(e)f(is)h(p)q(ortable,)g(b)q(ecause)g(all)189 388 y(displacemen)o(ts)k(in)h
(suc)o(h)e(datat)o(yp)q(e)g(are)g(in)i(terms)d(of)h(exten)o(ts)g(of)g(basic)h
(datat)o(yp)q(es.)k(Therefore,)189 444 y(if)e(suc)o(h)g(datat)o(yp)q(e)g
(\014ts)g(a)f(data)h(la)o(y)o(out)f(in)i(one)f(memory)l(,)g(it)g(will)i
(\014t)e(the)g(corresp)q(onding)h(data)189 501 y(la)o(y)o(out)12
b(in)i(another)f(memory)l(,)g(if)h(the)f(same)g(declarations)h(w)o(ere)f
(used,)h(ev)o(en)g(if)f(the)h(t)o(w)o(o)d(systems)189 557 y(ha)o(v)o(e)18
b(di\013eren)o(t)i(arc)o(hitectures.)31 b(On)20 b(the)f(other)g(hand,)h(if)f
(a)g(datat)o(yp)q(e)f(w)o(as)h(constructed)g(us-)189 614 y(ing)d
Fm(MPI)p 350 614 V 16 w(TYPE)p 483 614 V 17 w(HINDEXED,)g(MPI)p
838 614 V 16 w(TYPE)p 971 614 V 17 w(HVECTOR)h Fu(or)f Fm(MPI)p
1355 614 V 16 w(TYPE)p 1488 614 V 17 w(STRUCT)p Fu(,)g(then)h(the)189
670 y(datat)o(yp)q(e)12 b(con)o(tains)h(explicit)i(b)o(yte)e(displacemen)o
(ts.)20 b(These)14 b(displacemen)o(ts)g(are)f(unlik)o(ely)i(to)d(b)q(e)189
727 y(c)o(hosen)j(correctly)h(if)g(they)f(\014t)g(data)g(la)o(y)o(out)g(on)g
(one)g(memory)l(,)g(but)g(are)g(used)h(for)f(data)g(la)o(y)o(outs)189
783 y(on)g(another)g(pro)q(cess,)g(running)h(on)f(a)g(pro)q(cessor)g(with)g
(a)g(di\013eren)o(t)h(arc)o(hitecture.)k(In)c(the)f(later)189
840 y(case,)e(one)h(should)h(use)f(the)g(mec)o(hanisms)g(de\014ned)i(in)e
(MPI)g(for)f(transferring)h(datat)o(yp)q(es)f(across)189 896
y(pro)q(cesses.)189 971 y(The)21 b(p)q(erformance)g(of)f(a)h(put)g(transfer)f
(can)h(b)q(e)g(signi\014can)o(tly)i(a\013ected,)e(on)g(some)g(systems,)189
1028 y(from)f(the)i(c)o(hoice)g(of)f(windo)o(w)h(lo)q(cation)g(and)g(the)f
(shap)q(e)h(and)g(lo)q(cation)g(of)f(the)h(origin)g(and)189
1084 y(target)c(bu\013er:)28 b(transfers)19 b(from)g(memory)g(allo)q(cated)h
(b)o(y)f Fm(MPI)p 1315 1084 V 16 w(MEM)p 1438 1084 V 16 w(ALLOC)h
Fu(will)h(b)q(e)f(m)o(uc)o(h)189 1141 y(faster)f(on)g(systems)h(where)g(some)
f(memory)g(is)h(shared;)i(transfers)d(from)g(con)o(tiguous)h(bu\013ers)189
1197 y(will)15 b(b)q(e)f(faster)f(on)g(most,)g(if)h(not)f(all,)h(systems;)f
(the)h(alignmen)o(t)g(of)f(the)h(comm)o(unication)g(bu\013ers)189
1253 y(ma)o(y)g(also)h(impact)h(p)q(erformance.)k(\()p Fn(End)15
b(of)i(advic)n(e)f(to)g(users.)p Fu(\))189 1360 y Fn(A)n(dvic)n(e)d(to)i
(implementors.)38 b Fu(A)13 b(high)h(qualit)o(y)g(implemen)o(tation)g(will)h
(prev)o(en)o(t)e(remote)g(accesses)189 1416 y(to)21 b(memory)g(outside)i(the)
e(windo)o(w)h(that)g(w)o(as)f(exp)q(osed)h(b)o(y)g(the)g(pro)q(cess.)40
b(This,)24 b(b)q(oth)e(for)189 1473 y(debugging)15 b(purp)q(oses,)f(and)g
(for)f(protection)h(with)h(clien)o(t-serv)o(er)g(co)q(des)f(that)g(use)g
(RMA.)g(I.e.,)f(a)189 1529 y(high-qualit)o(y)k(implemen)o(tation)h(will)g(c)o
(hec)o(k)e(windo)o(w)g(b)q(ounds)i(on)e(eac)o(h)g(RMA)g(call,)h(and)g(raise)
189 1586 y(an)d(MPI)h(exception)h(at)e(the)g(origin)i(call,)f(if)g(an)g
(out-of-b)q(ound)g(situation)g(o)q(ccurred.)20 b(Note)15 b(that)189
1642 y(the)g(condition)h(can)g(b)q(e)g(c)o(hec)o(k)o(ed)f(at)g(the)g(origin.)
21 b(\()p Fn(End)15 b(of)i(advic)n(e)f(to)g(implementors.)p
Fu(\))1967 46 y Fp(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967
272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959
554 y(10)1959 611 y(11)1959 667 y(12)1959 724 y(13)1959 780
y(14)1959 836 y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959
1062 y(19)1959 1119 y(20)1959 1175 y(21)1959 1232 y(22)1959
1288 y(23)1959 1345 y(24)1959 1401 y(25)1959 1457 y(26)1959
1514 y(27)1959 1570 y(28)1959 1627 y(29)1959 1683 y(30)1959
1740 y(31)1959 1796 y(32)1959 1853 y(33)1959 1909 y(34)1959
1966 y(35)1959 2022 y(36)1959 2078 y(37)1959 2135 y(38)1959
2191 y(39)1959 2248 y(40)1959 2304 y(41)1959 2361 y(42)1959
2417 y(43)1959 2474 y(44)1959 2530 y(45)1959 2587 y(46)1959
2643 y(47)1959 2699 y(48)p eop
%%Page: 9 9
bop 75 -100 a Fk(5.3.)29 b(COMMUNICA)l(TION)16 b(CALLS)1095
b Fu(9)75 49 y Fe(5.3.2)49 b(Get)75 230 y Fm(MPI)p 160 230
14 2 v 16 w(GET\()11 b(o)o(rigin)p 399 230 V 16 w(addr,)h(o)o(rigin)p
630 230 V 15 w(count,)h(o)o(rigin)p 882 230 V 15 w(datat)o(yp)q(e,)h(ta)o
(rget)p 1199 230 V 16 w(rank,)e(ta)o(rget)p 1435 230 V 16 w(disp,)h(ta)o
(rget)p 1663 230 V 16 w(count,)g(ta)o(r-)75 286 y(get)p 137
286 V 17 w(datat)o(yp)q(e,)j(win\))117 363 y Fj(OUT)108 b Fm(o)o(rigin)p
427 363 V 16 w(addr)381 b Fj(address)15 b(of)f(origin)e(bu\013er)j(\(c)o
(hoice\))117 438 y(IN)155 b Fm(o)o(rigin)p 427 438 V 16 w(count)360
b Fj(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(receiv)o(ed)j(\(in)o(teger\))117
512 y(IN)155 b Fm(o)o(rigin)p 427 512 V 16 w(datat)o(yp)q(e)302
b Fj(datat)o(yp)q(e)14 b(of)g(elemen)o(ts)f(receiv)o(ed)j(\(handle\))117
586 y(IN)155 b Fm(ta)o(rget)p 433 586 V 17 w(rank)375 b Fj(rank)14
b(of)f(target)i(\(in)o(teger\))117 660 y(IN)155 b Fm(ta)o(rget)p
433 660 V 17 w(disp)384 b Fj(displacemen)o(t)11 b(from)f(windo)o(w)h(start)h
(to)f(target)i(bu\013er)f(\(non-)905 717 y(negativ)o(e)i(in)o(teger\))117
791 y(IN)155 b Fm(ta)o(rget)p 433 791 V 17 w(count)353 b Fj(n)o(um)o(b)q(er)
13 b(of)h(elemen)o(ts)f(sen)o(t)i(\(in)o(teger\))117 866 y(IN)155
b Fm(ta)o(rget)p 433 866 V 17 w(datat)o(yp)q(e)295 b Fj(datat)o(yp)q(e)14
b(of)g(elemen)o(ts)f(sen)o(t)i(\(handle\))117 940 y(IN)155
b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i(used)g(for)e(comm)o(unication)e
(\(handle\))75 1064 y Fo(int)23 b(MPI)p 245 1064 15 2 v 17
w(get\()h(void)f(*origin)p 669 1064 V 16 w(addr,)g(int)h(origin)p
1068 1064 V 16 w(count,)f(MPI)p 1323 1064 V 17 w(Datatype)393
1121 y(origin)p 540 1121 V 17 w(datatype,)f(int)i(target,)f(int)g(target)p
1321 1121 V 16 w(disp,)h(int)393 1177 y(target)p 540 1177 V
17 w(count,)f(MPI)p 796 1177 V 16 w(Datatype)g(target)p 1171
1177 V 16 w(datatype,)g(MPI)p 1498 1177 V 17 w(Win)g(win\))75
1264 y(MPI)p 150 1264 V 17 w(GET\()g(ORIGIN)p 430 1264 V 16
w(ADDR,)h(ORIGIN)p 734 1264 V 16 w(COUNT,)f(ORIGIN)p 1061 1264
V 16 w(DATATYPE,)g(TARGET,)g(TARGET)p 1651 1264 V 16 w(DISP,)393
1320 y(TARGET)p 540 1320 V 17 w(COUNT,)g(TARGET)p 868 1320
V 16 w(DATATYPE,)g(WIN,)g(IERROR\))170 1377 y(<type>)g(ORIGIN)p
484 1377 V 17 w(ADDR\(*\))170 1433 y(INTEGER)g(ORIGIN)p 508
1433 V 17 w(COUNT,)g(ORIGIN)p 836 1433 V 16 w(DATATYPE,)g(TARGET,)g(TARGET)p
1426 1433 V 16 w(DISP,)170 1489 y(TARGET)p 317 1489 V 17 w(COUNT,)g(TARGET)p
645 1489 V 16 w(DATATYPE,)g(WIN,)g(IERROR)1875 1526 y Fq(>)16
b Fp(\(Oct\))75 1576 y Fo(int)23 b(MPI::Win::Get\(void)f(*origin)p
795 1576 V 16 w(addr,)h(int)h(origin)p 1194 1576 V 16 w(count,)f(const)g
(MPI::Datatype&)393 1632 y(origin)p 540 1632 V 17 w(datatype,)f(int)i(target)
p 1035 1632 V 16 w(rank,)f(int)h(target)p 1434 1632 V 16 w(disp,)f(int)393
1689 y(target)p 540 1689 V 17 w(count,)g(const)g(MPI::Datatype&)f(target)p
1369 1689 V 16 w(datatype\))1875 1729 y Fq(?)16 b Fp(\(Oct\))166
1775 y Fu(Similar)j(to)e Fm(MPI)p 468 1775 14 2 v 15 w(PUT)p
Fu(,)h(except)f(that)g(the)h(direction)g(of)f(data)g(transfer)g(is)h(rev)o
(ersed.)26 b(Data)16 b(are)75 1832 y(copied)f(from)f(the)g(target)f(memory)h
(to)g(the)g(origin.)20 b(The)15 b(target)e(bu\013er)h(should)h(b)q(e)g(con)o
(tained)g(within)75 1888 y(the)g(target)e(windo)o(w,)h(and)h(the)g(copied)h
(data)d(should)j(\014t,)e(without)h(truncation,)f(in)h(the)g(origin)g
(bu\013er.)75 1945 y(A)f(high)g(qualit)o(y)h(implemen)o(tation)g(will)g
(raise)f(an)f(MPI)h(exception)h(at)e(the)h(origin,)g(if)g(either)h(condition)
75 2001 y(is)h(violated.)75 2122 y Fe(5.3.3)49 b(Examples)75
2208 y Fl(Example)18 b(5.2)k Fu(W)l(e)f(sho)o(w)e(ho)o(w)h(to)g(implemen)o(t)
h(the)g(generic)g(indirect)h(assignmen)o(t)e Fo(A)j(=)h(B\(map\))p
Fu(,)75 2264 y(where)15 b Fo(A,)23 b(B)15 b Fu(and)f Fo(map)g
Fu(ha)o(v)o(e)g(the)h(same)f(distribution,)i(and)e Fo(map)g
Fu(is)h(a)f(p)q(erm)o(utation.)20 b(T)l(o)14 b(simplify)l(,)i(w)o(e)75
2321 y(assume)f(a)g(blo)q(c)o(k)h(distribution)h(with)e(equal)h(size)g(blo)q
(c)o(ks.)75 2421 y Fo(SUBROUTINE)22 b(MAP\()i(A,)f(B,)h(map,)f(m,)h(comm,)f
(p\))75 2478 y(INTEGER)g(m,)g(map\(m\),)g(comm,)h(p)75 2534
y(REAL)f(A\(m\),)g(B\(m\))75 2647 y(INTEGER)g(otypes\(p\),)f(oindex\(m\),)94
b(!)24 b(used)g(to)f(construct)g(origin)g(datatypes)266 2704
y(tytpes\(p\),)f(tindex\(m\),)94 b(!)24 b(used)g(to)f(construct)g(target)g
(datatypes)-32 46 y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40
836 y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40
1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345
y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853
y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40
2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40
2643 y(47)-40 2699 y(48)p eop
%%Page: 10 10
bop 75 -100 a Fu(10)728 b Fk(CHAPTER)15 b(5.)30 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)266 49 y Fo(count\(p\),)23 b(blen\(m\),)f(total\(p\),)266
106 y(sizeofreal,)g(ierr)75 219 y(!)i(This)f(part)g(does)h(the)f(work)g(that)
h(depends)f(on)g(the)h(locations)e(of)i(B.)75 275 y(!)g(Can)f(be)h(reused)f
(while)g(this)g(does)h(not)f(change)75 388 y(CALL)g(MPI_EXTENT\(MPI_REAL,)e
(sizeofreal,)i(ierr\))75 501 y(DO)h(i=1,m)147 557 y(blen\(i\))e(=)i(1)75
614 y(END)f(DO)75 727 y(DO)h(i=1,p)147 783 y(count\(i\))e(=)i(1)75
840 y(END)f(DO)75 953 y(CALL)g(MPI_WIN_INIT\(B,)f(m*sizeofreal,)g
(sizeofreal,)h(info,)g(comm,)g(win,)g(ierr\))75 1065 y(!)h(This)f(part)g
(does)h(the)f(work)g(that)h(depends)f(on)g(the)h(value)f(of)g(map)h(and)75
1122 y(!)g(the)f(locations)g(of)g(the)h(arrays.)75 1178 y(!)g(Can)f(be)h
(reused)f(while)g(these)g(do)h(not)f(change)75 1291 y(!)h(Compute)f(number)g
(of)g(elements)g(to)h(be)f(received)g(from)g(each)h(process)75
1404 y(DO)g(i=1,m)147 1461 y(j)f(=)h(map\(i\)/m)147 1517 y(count\(j\))e(=)i
(count\(j\)+1)75 1574 y(END)f(DO)75 1686 y(total\(1\))g(=)g(0)75
1743 y(DO)h(i=2,p)147 1799 y(total\(i\))e(=)i(total\(i-1\))f(+)g
(count\(i-1\))75 1912 y(DO)h(i=1,p)147 1969 y(count\(i\))e(=)i(0)75
2025 y(END)f(DO)75 2138 y(!)h(compute)f(origin)g(and)g(target)g(indices)g(of)
h(elements)75 2195 y(!)g(received)e(from)i(each)f(process)75
2251 y(DO)h(i=1,m)147 2307 y(j)f(=)h(map\(i\)/m)147 2364 y(k)f(=)h
(MOD\(map\(i\),m\))147 2420 y(count\(j\))e(=)i(count\(j\)+1)147
2477 y(oindex\(total\(j\))d(+)j(count\(j\)\))f(=)g(i)147 2533
y(tindex\(total\(j\))e(+)j(count\(j\)\))f(=)g(k)75 2590 y(END)g(DO)75
2703 y(!)h(create)f(origin)g(and)g(target)g(datatypes)g(for)g(each)h(get)f
(operation)1967 46 y Fp(1)1967 103 y(2)1967 159 y(3)1967 215
y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967
498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949 y(17)1959
1006 y(18)1959 1062 y(19)1959 1119 y(20)1959 1175 y(21)1959
1232 y(22)1959 1288 y(23)1959 1345 y(24)1959 1401 y(25)1959
1457 y(26)1959 1514 y(27)1959 1570 y(28)1959 1627 y(29)1959
1683 y(30)1959 1740 y(31)1959 1796 y(32)1959 1853 y(33)1959
1909 y(34)1959 1966 y(35)1959 2022 y(36)1959 2078 y(37)1959
2135 y(38)1959 2191 y(39)1959 2248 y(40)1959 2304 y(41)1959
2361 y(42)1959 2417 y(43)1959 2474 y(44)1959 2530 y(45)1959
2587 y(46)1959 2643 y(47)1959 2699 y(48)p eop
%%Page: 11 11
bop 75 -100 a Fk(5.3.)34 b(COMMUNICA)l(TION)16 b(CALLS)1068
b Fu(11)75 49 y Fo(DO)24 b(i=1,p)147 106 y(CALL)f
(MPI_TYPE_INDEXED\(count\(i\))o(,)e(blen,)i(oindex\(total\(i\)\),)743
162 y(MPI_REAL,)g(otype\(i\),)f(ierr\))147 219 y(CALL)h
(MPI_TYPE_COMMIT\(otype\(i\),)d(ierr\))147 275 y(CALL)j
(MPI_TYPE_INDEXED\(count\(i\))o(,)e(blen,)i(tindex\(total\(i\)\),)743
332 y(MPI_REAL,)g(ttype\(i\),)f(ierr\))147 388 y(CALL)h
(MPI_TYPE_COMMIT\(ttype\(i\),)d(ierr\))75 444 y(END)j(DO)75
557 y(!)h(this)f(part)g(does)h(the)f(assignment)g(itself)75
614 y(CALL)g(MPI_WIN_BARRIER\(win,)e(ierr\))75 670 y(DO)j(i=1,p)147
727 y(CALL)f(MPI_GET)g(\(A,)g(1,)h(otype\(i\),)e(i,)i(0,)g(1,)f(ttype\(i\),)g
(win,)g(ierr\))75 783 y(END)g(DO)75 840 y(CALL)g(MPI_WIN_BARRIER\(win,)e
(ierr\))75 953 y(CALL)i(MPI_WIN_FREE\(win,)f(ierr\))75 1009
y(DO)i(i=1,p)147 1065 y(CALL)f(MPI_TYPE_FREE\(otype\(i\),)e(ierr\))147
1122 y(CALL)i(MPI_TYPE_FREE\(ttype\(i\),)e(ierr\))75 1178 y(END)i(DO)75
1235 y(RETURN)75 1341 y Fl(Example)18 b(5.3)k Fu(A)16 b(simpler)g(v)o(ersion)
g(can)f(b)q(e)h(written,)g(that)e(do)q(es)i(not)f(require)h(to)f(built)h(a)f
(datat)o(yp)q(e)75 1398 y(for)e(the)g(target)f(bu\013er.)19
b(But,)13 b(then)h(one)f(needs)h(a)f(separate)f(get)h(call)h(for)f(eac)o(h)g
(elemen)o(t,)h(as)f(illustrated)75 1454 y(b)q(elo)o(w.)28 b(This)19
b(co)q(de)f(is)g(m)o(uc)o(h)g(simpler,)h(but)f(m)o(uc)o(h)g(less)g(e\016cien)
o(t,)h(for)e(large)h(arra)o(ys,)f(unless)i(h/w)e(is)75 1510
y(fast)d(enough)i(to)e(transfer)h(e\016cien)o(tly)h(single)h(w)o(ords.)75
1617 y Fo(SUBROUTINE)22 b(MAP\()i(A,)f(B,)h(map,)f(m,)h(comm,)f(p\))75
1673 y(INTEGER)g(m,)g(map\(m\),)g(comm,)h(p)75 1730 y(REAL)f(A\(m\),)g
(B\(m\))75 1786 y(INTEGER)g(sizeofreal,)f(ierr)75 1899 y(CALL)h
(MPI_TYPE_EXTENT\(MPI_REAL,)e(sizeofreal,)h(ierr\))75 1955
y(CALL)h(MPI_WIN_INIT\(B,)f(m*sizeofreal,)g(sizeofreal,)h(info,)g(comm,)g
(win,)g(ierr\))75 2068 y(CALL)g(MPI_RMA_BARRIER\(win,)e(ierr\))75
2125 y(DO)j(i=1,m)147 2181 y(j)f(=)h(map\(i\)/m)147 2238 y(k)f(=)h
(MOD\(map\(i\),m\))147 2294 y(CALL)f(MPI_GET\(A\(i\),)f(1,)i(MPI_REAL,)e(j,)i
(k,)f(1,)h(MPI_REAL,)f(0,)1101 2351 y(getcomm,)g(ierr\))75
2407 y(END)g(DO)75 2464 y(CALL)g(MPI_WIN_BARRIER\(win,)e(ierr\))75
2520 y(CALL)i(MPI_COMM_FREE\(win,)f(ierr\))75 2576 y(RETURN)-32
46 y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32
328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40
611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119
y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627
y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40
2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 12 12
bop 75 -100 a Fu(12)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fe(5.3.4)49 b(Accumulate)14 b(F)o(unctions)75
135 y Fu(It)i(is)g(often)g(useful)g(in)h(a)e(put)h(op)q(eration)g(to)f(com)o
(bine)i(the)f(data)f(mo)o(v)o(ed)g(to)g(the)h(target)f(pro)q(cess)h(with)75
192 y(the)f(data)f(that)g(resides)h(at)f(that)g(pro)q(cess,)h(rather)f(then)h
(replacing)h(the)f(data)f(there.)20 b(This)15 b(will)h(allo)o(w,)75
248 y(for)f(example,)i(to)e(accum)o(ulate)i(a)e(sum,)h(b)o(y)g(ha)o(ving)g
(all)h(in)o(v)o(olv)o(ed)g(pro)q(cesses)g(add)f(their)g(con)o(tribution)75
304 y(to)f(the)g(sum)g(v)m(ariable)i(in)f(the)f(memory)g(of)f(one)i(pro)q
(cess.)75 455 y Fm(MPI)p 160 455 14 2 v 16 w(A)o(CCUMULA)l(TE\(o)o(rigin)p
598 455 V 15 w(addr,)25 b(o)o(rigin)p 841 455 V 15 w(count,)g(o)o(rigin)p
1105 455 V 15 w(datat)o(yp)q(e,)h(ta)o(rget)p 1434 455 V 16
w(rank,)e(ta)o(rget)p 1682 455 V 16 w(disp,)h(ta)o(r-)75 512
y(get)p 137 512 V 17 w(count,)16 b(ta)o(rget)p 400 512 V 16
w(datat)o(yp)q(e,)g(op,)f(win\))117 589 y Fj(IN)155 b Fm(o)o(rigin)p
427 589 V 16 w(addr)381 b Fj(initial)12 b(address)j(of)f(bu\013er)g(\(c)o
(hoice\))117 664 y(IN)155 b Fm(o)o(rigin)p 427 664 V 16 w(count)360
b Fj(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(bu\013er)h(\(non)f(negativ)
o(e)f(in)o(teger\))117 739 y(IN)155 b Fm(o)o(rigin)p 427 739
V 16 w(datat)o(yp)q(e)302 b Fj(data)14 b(t)o(yp)q(e)g(of)f(eac)o(h)i
(bu\013er)g(elemen)o(t)e(\(handle\))117 814 y(IN)155 b Fm(ta)o(rget)p
433 814 V 17 w(rank)375 b Fj(rank)14 b(of)f(destination)h(pro)q(cess)i(in)d
(comm)e(\(in)o(teger\))117 890 y(IN)155 b Fm(ta)o(rget)p 433
890 V 17 w(disp)384 b Fj(displacemen)o(t)20 b(from)f(start)i(of)f(windo)o(w)g
(to)h(target)g(bu\013er)905 946 y(\(nonnegativ)o(e)14 b(in)o(teger\))117
1021 y(IN)155 b Fm(ta)o(rget)p 433 1021 V 17 w(count)353 b
Fj(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(target)g(bu\013er)h(\(in)o
(teger\))117 1096 y(IN)155 b Fm(ta)o(rget)p 433 1096 V 17 w(datat)o(yp)q(e)
295 b Fj(datat)o(yp)q(e)14 b(used)h(at)f(target)g(\(handle\))117
1171 y(IN)155 b Fm(op)541 b Fj(reduce)16 b(op)q(eration)e(\(handle\))117
1247 y(IN)155 b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i(\(handle\))75
1371 y Fo(int)23 b(MPI)p 245 1371 15 2 v 17 w(Accumulate\(void*)f(origin)p
812 1371 V 16 w(addr,)h(int)h(origin)p 1211 1371 V 16 w(count,)393
1427 y(MPI)p 468 1427 V 17 w(Datatype)f(origin)p 844 1427 V
16 w(datatype,)g(int)g(target)p 1338 1427 V 17 w(rank,)g(int)g(target)p
1737 1427 V 17 w(disp,)393 1484 y(int)h(target)p 636 1484 V
16 w(count,)f(MPI)p 891 1484 V 17 w(Datatype)g(target)p 1267
1484 V 16 w(datatype,)g(MPI)p 1594 1484 V 16 w(Op)h(op,)393
1540 y(MPI)p 468 1540 V 17 w(Win)f(win\))75 1627 y(MPI)p 150
1627 V 17 w(ACCUMULATE\(ORIGIN)p 575 1627 V 15 w(ADDR,)g(ORIGIN)p
877 1627 V 16 w(COUNT,)g(ORIGIN)p 1204 1627 V 17 w(DATATYPE,)f(TARGET)p
1603 1627 V 17 w(RANK,)393 1683 y(TARGET)p 540 1683 V 17 w(DISP,)h(TARGET)p
844 1683 V 16 w(COUNT,)g(TARGET)p 1171 1683 V 16 w(DATATYPE,)g(OP,)h(WIN,)f
(IERROR\))170 1740 y(<type>)g(ORIGIN)p 484 1740 V 17 w(ADDR\(*\))170
1796 y(INTEGER)g(ORIGIN)p 508 1796 V 17 w(COUNT,)g(ORIGIN)p
836 1796 V 16 w(DATATYPE,)g(TARGET)p 1235 1796 V 16 w(RANK,)g(TARGET)p
1538 1796 V 17 w(DISP,)170 1853 y(TARGET)p 317 1853 V 17 w(DATATYPE,)f(OP,)i
(WIN,)f(IERROR)-117 1889 y Fq(>)15 b Fp(\(Oct\))75 1939 y Fo(int)23
b(MPI::Win::Accumulate\(void)e(*origin)p 962 1939 V 16 w(addr,)i(int)h
(origin)p 1361 1939 V 16 w(count,)f(const)393 1996 y(MPI::Datatype&)f(origin)
p 898 1996 V 16 w(datatype,)h(int)h(target)p 1393 1996 V 16
w(rank,)f(int)393 2052 y(target)p 540 2052 V 17 w(disp,)g(int)g(target)p
939 2052 V 17 w(count,)g(const)g(MPI::Datatype&)393 2108 y(target)p
540 2108 V 17 w(datatype,)f(const)h(MPI::Op&)g(op\))-117 2149
y Fq(?)15 b Fp(\(Oct\))166 2195 y Fu(Accum)o(ulate)21 b(the)f(con)o(ten)o(ts)
g(of)g(the)h(origin)g(bu\013er)f(\(as)g(de\014ned)h(b)o(y)g
Fm(o)o(rigin)p 1517 2195 14 2 v 15 w(addr)p Fu(,)g Fm(o)o(rigin)p
1756 2195 V 16 w(count)75 2251 y Fu(and)c Fm(o)o(rigin)p 274
2251 V 15 w(datat)o(yp)q(e)p Fu(\))i(to)d(the)h(bu\013er)g(sp)q(eci\014ed)i
(b)o(y)e(argumen)o(ts)f Fm(ta)o(rget)p 1343 2251 V 16 w(count)i
Fu(and)f Fm(ta)o(rget)p 1684 2251 V 17 w(datat)o(yp)q(e)p Fu(,)75
2308 y(at)j(o\013set)g Fm(ta)o(rget)p 377 2308 V 16 w(disp)p
Fu(,)j(in)f(the)f(target)e(windo)o(w)j(sp)q(eci\014ed)g(b)o(y)f
Fm(ta)o(rget)p 1326 2308 V 16 w(rank)g Fu(and)g Fm(comm)m Fu(,)e(using)j(the)
75 2364 y(op)q(eration)g Fm(op)p Fu(.)38 b(This)22 b(is)g(lik)o(e)h
Fm(MPI)p 719 2364 V 15 w(PUT)f Fu(except)g(that)e(data)h(is)h(com)o(bined)h
(in)o(to)e(the)g(target)g(area)75 2421 y(instead)16 b(of)f(o)o(v)o(erwriting)
f(it.)166 2477 y(An)o(y)e(of)h(the)f(prede\014ned)i(op)q(erations)f(for)f
Fm(MPI)p 973 2477 V 16 w(REDUCE)h Fu(can)f(b)q(e)i(used.)19
b(User-de\014ned)14 b(functions)75 2534 y(cannot)h(b)q(e)h(used.)21
b(F)l(or)14 b(example,)i(if)g Fm(op)f Fu(is)h Fm(MPI)p 914
2534 V 16 w(SUM)p Fu(,)f(eac)o(h)g(elemen)o(t)h(of)f(the)g(origin)h(bu\013er)
g(is)f(added)75 2590 y(to)g(the)g(corresp)q(onding)h(elemen)o(t)g(in)g(the)f
(target,)f(replacing)i(the)g(former)e(v)m(alue)j(in)f(the)f(target.)166
2647 y(Both)i(datat)o(yp)q(e)f(argumen)o(ts)g(should)i(b)q(e)f(basic)h(datat)
o(yp)q(es,)e(or)g(a)h(deriv)o(ed)h(datat)o(yp)q(e)e(where)h(all)75
2703 y(basic)j(comp)q(onen)o(ts)f(are)g(of)f(the)h(same)g(basic)h(datat)o(yp)
q(e.)31 b(The)19 b(op)q(eration)g Fm(op)g Fu(applies)i(to)d(elemen)o(ts)1967
46 y Fp(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967
328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 13 13
bop 75 -100 a Fk(5.4.)34 b(SYNCHR)o(ONIZA)l(TION)17 b(CALLS)1031
b Fu(13)75 49 y(of)18 b(that)h(basic)g(t)o(yp)q(e.)31 b(The)19
b Fm(ta)o(rget)p 693 49 14 2 v 17 w(datat)o(yp)q(e)h Fu(should)g(not)e(o)o(v)
o(erlap)h(with)g(itself)h(\(the)f(same)f(elemen)o(t)75 106
y(should)e(not)f(o)q(ccur)h(t)o(wice\).)166 162 y(A)c(new)h(prede\014ned)h
(op)q(eration,)f Fh(MPI)p 811 162 13 2 v 14 w(REPLA)o(CE)p
Fu(,)d(is)j(de\014ned.)20 b(It)13 b(corresp)q(onds)f(to)g(the)h(asso)q
(ciativ)o(e)75 219 y(function)18 b Ff(f)5 b Fu(\()p Ff(a;)j(b)p
Fu(\))15 b(=)h Ff(b)p Fu(;)i(i.e.,)f(the)g(curren)o(t)h(v)m(alue)g(in)g(the)g
(target)e(memory)h(is)h(replaced)g(b)o(y)f(the)h(v)m(alue)75
275 y(supplied)g(b)o(y)d(the)g(origin.)189 381 y Fn(A)n(dvic)n(e)c(to)i
(users.)37 b Fm(MPI)p 619 381 14 2 v 16 w(PUT)11 b Fu(is)h(a)f(sp)q(ecial)h
(case)f(of)g Fm(MPI)p 1178 381 V 16 w(A)o(CCUMULA)l(TE)p Fu(,)g(with)h(the)f
(op)q(eration)189 438 y Fh(MPI)p 266 438 13 2 v 14 w(REPLA)o(CE)19
b Fu(Note,)h(ho)o(w)o(ev)o(er,)g(that)g Fm(MPI)p 987 438 14
2 v 16 w(PUT)g Fu(and)g Fm(MPI)p 1289 438 V 16 w(A)o(CCUMULA)l(TE)h
Fu(ha)o(v)o(e)f(sligh)o(tly)189 494 y(di\013eren)o(t)15 b(atomicit)o(y)g
(seman)o(tics)g({)g(see)h(Section)g(5.5.)j(\()p Fn(End)c(of)i(advic)n(e)f(to)
g(users.)p Fu(\))75 601 y Fl(Example)i(5.4)k Fu(W)l(e)d(w)o(an)o(t)e(to)g
(compute)i Fo(B)p Fu(\()p Fo(j)p Fu(\))e(=)976 568 y Fd(P)1020
612 y Fc(map)p Fb(\()p Fc(i)p Fb(\)=)p Fc(j)1158 601 y Fo(A)p
Fu(\()p Fo(i)p Fu(\).)28 b(The)18 b(arra)o(ys)f Fo(A,)24 b(B)18
b Fu(and)g Fo(map)g Fu(are)75 657 y(distributed)f(in)f(the)f(same)g(manner.)
20 b(W)l(e)15 b(write)g(the)h(simple)g(v)o(ersion.)75 763 y
Fo(SUBROUTINE)22 b(SUM\()i(A,)f(B,)h(map,)f(m,)h(comm,)f(p\))75
820 y(INTEGER)g(m,)g(map\(m\),)g(comm,)h(p)75 876 y(REAL)f(A\(m\),)g(B\(m\))
75 989 y(CALL)g(MPI_RMA_INIT\(B,)f(m,)i(MPI_REAL,)e(info,)i(win,)f(ierr\))75
1102 y(CALL)g(MPI_RMA_BARRIER\(win,)e(ierr\))75 1158 y(DO)j(i=1,m)147
1215 y(j)f(=)h(map\(i\)/m)147 1271 y(k)f(=)h(MOD\(map\(i\),m\))147
1328 y(CALL)f(MPI_ACCUMULATE\(A\(i\),)e(1,)j(MPI_REAL,)e(j,)i(k,)f(1,)h(0,)g
(MPI_SUM,)1149 1384 y(win,)f(ierr\))75 1441 y(END)g(DO)75 1497
y(CALL)g(MPI_RMA_BARRIER\(win,)e(ierr\))75 1610 y(CALL)i(MPI_WIN_FREE\(win,)f
(ierr\))75 1667 y(RETURN)166 1773 y Fu(This)c(co)q(de)h(is)f(iden)o(tical)i
(to)d(the)h(co)q(de)h(in)g(Example)f(5.3,)f(page)h(11,)g(except)g(that)f(a)h
(call)h(to)e(get)75 1829 y(has)f(b)q(een)h(replaced)h(b)o(y)e(a)f(call)j(to)d
(accum)o(ulate.)23 b(\(Note)16 b(that,)f(if)h Fo(map)g Fu(is)h(one-to-one,)f
(then)g(the)g(co)q(de)75 1886 y(computes)d Fo(B)f Fu(=)h Fo(A)p
Fu(\()p Fo(map)473 1869 y Fa(\000)p Fc(1)516 1886 y Fu(\),)g(whic)o(h)g(the)g
(rev)o(erse)g(assignmen)o(t)g(to)f(the)h(one)g(computed)g(in)h(that)e
(previous)75 1942 y(example.\))20 b(In)c(a)f(similar)h(manner,)f(w)o(e)g(can)
g(replace)h(in)g(Example)g(5.2,)d(page)i(9,)g(the)g(call)h(to)f(get)f(b)o(y)h
(a)75 1999 y(call)f(to)d(accum)o(ulate,)i(th)o(us)g(p)q(erforming)f(the)h
(computation)f(with)h(only)g(one)g(comm)o(unication)g(b)q(et)o(w)o(een)75
2055 y(an)o(y)i(t)o(w)o(o)f(pro)q(cesses.)75 2198 y Fr(5.4)59
b(Synchronization)20 b(calls)1875 2255 y Fq(>)c Fp(\(Oct\))75
2300 y Fu(MPI)i(pro)o(vides)h(three)f(sync)o(hronization)h(mec)o(hanisms:)26
b(The)18 b Fm(MPI)p 1269 2300 V 16 w(WIN)p 1373 2300 V 16 w(BARRIER)i
Fu(collectiv)o(e)g(syn-)75 2356 y(c)o(hronization)f(call)h(supp)q(orts)f(a)f
(simple)i(sync)o(hronization)g(pattern)e(that)g(is)h(often)g(used)g(in)g
(parallel)75 2413 y(computations:)f(namely)12 b(a)f(lo)q(osely-sync)o
(hronous)h(mo)q(del,)h(where)e(global)h(computation)f(phases)h(alter-)75
2469 y(nate)h(with)g(global)g(comm)o(unication)g(phases.)20
b(This)13 b(mec)o(hanism)g(is)g(most)f(useful)i(for)e(lo)q(osely)i(sync)o
(hro-)75 2526 y(nous)k(algorithms)g(where)h(the)f(graph)f(of)h(comm)o
(unicating)h(pro)q(cesses)f(c)o(hanges)g(v)o(ery)g(frequen)o(tly)l(,)h(or)75
2582 y(where)14 b(eac)o(h)h(pro)q(cess)f(comm)o(unicates)g(with)h(man)o(y)e
(others.)19 b(The)c(four)f(functions)g Fm(MPI)p 1602 2582 V
16 w(WIN)p 1706 2582 V 16 w(ST)l(ART,)75 2638 y(MPI)p 160 2638
V 16 w(WIN)p 264 2638 V 16 w(COMPLETE,)j(MPI)p 633 2638 V 16
w(WIN)p 737 2638 V 16 w(POST)h Fu(and)f Fm(MPI)p 1061 2638
V 16 w(WIN)p 1165 2638 V 16 w(W)l(AIT)p Fu(,)g(can)g(b)q(e)h(used)g(to)f
(restrict)g(syn-)75 2695 y(c)o(hronization)d(to)e(the)h(minim)o(um:)20
b(only)13 b(pairs)g(of)g(comm)o(unicating)g(pro)q(cesses)h(sync)o(hronize,)g
(and)f(they)-32 46 y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32
272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40
836 y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40
1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345
y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853
y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40
2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40
2643 y(47)-40 2699 y(48)p eop
%%Page: 14 14
bop 75 -100 a Fu(14)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fu(do)e(so)g(only)h(when)f(a)g(sync)o
(hronization)i(is)e(needed)i(to)d(order)h(correctly)h(RMA)f(accesses)h(to)e
(a)h(windo)o(w,)75 106 y(w.r.t.)k(lo)q(cal)k(accesses)f(to)e(that)h(same)g
(windo)o(w.)35 b(This)21 b(mec)o(hanism)g(is)g(more)f(e\016cien)o(t)h(when)g
(eac)o(h)75 162 y(pro)q(cess)16 b(comm)o(unicates)f(with)h(few)f(\(logical\))
h(neigh)o(b)q(ors,)g(and)f(the)h(comm)o(unication)g(graph)f(is)h(\014xed,)75
219 y(or)c(c)o(hanges)g(infrequen)o(tly)l(.)21 b(Finally)14
b(shared)e(and)h(exclusiv)o(e)h(lo)q(c)o(ks)f(are)f(pro)o(vided)h(b)o(y)g
(the)f(t)o(w)o(o)f(function)75 275 y Fm(MPI)p 160 275 14 2
v 16 w(WIN)p 264 275 V 16 w(LOCK)17 b Fu(and)h Fm(MPI)p 589
275 V 16 w(WIN)p 693 275 V 16 w(UNLOCK)p Fu(.)f(Lo)q(c)o(k)h(sync)o
(hronization)g(is)g(useful)h(for)e(MPI)g(applica-)75 332 y(tions)k(that)e(em)
o(ulate)i(a)f(shared)g(memory)g(mo)q(del)h(via)g(MPI)f(calls;)k(e.g.,)c(in)h
(a)g(\\billb)q(oard")g(mo)q(del,)75 388 y(where)15 b(pro)q(cesses)h(can,)f
(at)g(random)f(times,)h(access)h(or)e(up)q(date)i(di\013eren)o(t)g(parts)e
(of)h(the)g(billb)q(oard.)166 444 y(Sync)o(hronization)h(calls)g(accept)f(as)
g(a)f(parameter)g(a)h(windo)o(w)g(ob)s(ject.)k(These)d(calls)g(are)e(used)i
(for)75 501 y(ordering)k(correctly)g(con\015icting)i(accesses)e(to)f(RMA)h
(windo)o(ws,)h(and)f(making)g(sure)g(that)f(they)h(are)75 557
y(not)e(concurren)o(t.)31 b(These)19 b(sync)o(hronization)g(calls)h(ma)o(y)e
(not,)h(in)g(general,)h(b)q(e)f(used)h(to)e(sync)o(hronize)75
614 y(op)q(erations)d(other)g(than)g(con\015icting)i(accesses)e(to)g(an)g
(RMA)g(windo)o(w.)166 670 y(RMA)g(comm)o(unications)h(fall)g(in)g(t)o(w)o(o)e
(categories:)143 764 y Fq(\017)23 b Fu(2-part)o(y)14 b(comm)o(unication,)i
(where)f(data)g(is)g(mo)o(v)o(ed)g(from)g(the)g(memory)g(of)f(one)i(pro)q
(cess)f(to)g(the)189 821 y(memory)c(of)g(another,)h(and)g(b)q(oth)g(are)f(in)
o(v)o(olv)o(ed)i(in)f(the)g(comm)o(unication.)20 b(T)o(ypically)l(,)13
b(the)f(origin)189 877 y(pro)q(cess)g(executes)h(an)f(RMA)h(call,)g(and)g
(the)f(target)f(pro)q(cess)i(executes)f(a)g(lo)q(cal,)i(con\015icting)g(load)
189 933 y(or)g(store.)19 b(The)d(\014rst)f(t)o(w)o(o)f(sync)o(hronization)i
(mec)o(hanisms)f(fall)i(in)f(this)f(category)l(.)143 1027 y
Fq(\017)23 b Fu(3-part)o(y)d(comm)o(unication,)j(where)f(t)o(w)o(o)e(origin)i
(pro)q(cesses)g(comm)o(unicate)f(b)o(y)h(accessing)g(the)189
1084 y(same)15 b(lo)q(cation)h(in)h(a)e(target)f(windo)o(w.)21
b(The)16 b(pro)q(cess)g(that)f(o)o(wns)g(the)g(target)g(windo)o(w)g(ma)o(y)g
(b)q(e)189 1140 y(distinct)h(from)f(the)g(t)o(w)o(o)f(comm)o(unicating)i(pro)
q(cesses,)f(in)i(whic)o(h)f(case)f(it)h(do)q(es)f(not)g(participate)189
1197 y(explicitly)h(in)f(the)f(comm)o(unication.)21 b(This)14
b(comm)o(unication)h(paradigm)f(is)g(closest)h(to)e(a)h(shared)189
1253 y(memory)k(mo)q(del,)i(where)f(shared)g(data)f(can)h(b)q(e)h(accessed)f
(b)o(y)g(all)g(pro)q(cesses,)h(irresp)q(ectiv)o(e)g(of)189
1310 y(data.)f(The)c(last)g(sycnhronization)i(mec)o(hanism)f(falls)g(in)g
(this)f(category)l(.)k(lo)q(cation.)166 1403 y(Figure)d(5.1)e(illustrates)j
(the)f(general)g(sync)o(hronization)g(pattern,)f(for)g(2-part)o(y)g(comm)o
(unication,)75 1460 y(i.e.,)j(for)e(con\015icts)j(b)q(et)o(w)o(een)e(RMA)h
(accesses)g(and)f(lo)q(cal)i(accesses.)27 b(The)17 b(sync)o(hronization)i(b)q
(et)o(w)o(een)75 1516 y Fo(post)10 b Fu(and)g Fo(start)g Fu(ensures)g(that)g
(the)g(put)h(calls)g(of)f(the)g(origin)h(pro)q(cess)g(do)f(not)g(start)f(b)q
(efore)i(the)f(preced-)75 1573 y(ing)16 b(lo)q(cal)g(accesses)f(of)g(the)g
(target)f(pro)q(cess)h(to)g(the)g(windo)o(w)g(ha)o(v)o(e)g(completed;)h(the)f
(sync)o(hronization)75 1629 y(b)q(et)o(w)o(een)e Fo(complete)f
Fu(and)h Fo(wait)f Fu(ensures)i(that)e(the)h(put)g(calls)h(of)e(the)h(origin)
h(pro)q(cess)f(complete)h(b)q(efore)75 1686 y(the)h(follo)o(wing)h(lo)q(cal)h
(accesses)e(of)g(the)g(target)f(pro)q(cess)h(to)g(the)g(windo)o(w)h(start.)
166 1742 y(Figure)j(5.1)g(sho)o(ws)f(op)q(erations)i(o)q(ccurring)g(in)g(the)
f(natural)h(temp)q(oral)f(order)g(implied)j(b)o(y)d(the)75
1799 y(sync)o(hronizations:)32 b(the)21 b(p)q(ost)g(call)h(o)q(ccurs)f(b)q
(efore)g(the)g(matc)o(hing)g(start)e(call,)k(and)e(the)g(complete)75
1855 y(call)g(o)q(ccurs)g(b)q(efore)f(the)g(matc)o(hing)h(w)o(ait)e(call.)36
b(Ho)o(w)o(ev)o(er,)20 b(suc)o(h)g Fl(strong)g Fu(ordering)h(is)f(more)g
(than)75 1911 y(needed)d(for)e(correct)g(ordering)h(of)g(windo)o(w)g
(accesses.)21 b(MPI)16 b(also)g(supp)q(orts)f Fl(w)o(eak)g
Fu(sync)o(hronization,)75 1968 y(as)h(illustrated)h(in)g(Figure)g(5.2.)k(The)
c(put)f(call)h(of)f(the)g(origin)h(pro)q(cess)g(is)f(dela)o(y)o(ed)h(un)o
(til)h(the)e(windo)o(w)75 2024 y(is)f(a)o(v)m(ailable)h(for)e(RMA)h(access,)f
(after)g(the)h(p)q(ost)f(call;)i(ho)o(w)o(ev)o(er,)d(the)i(start)e(call,)i
(and)g(other)f(follo)o(wing)75 2081 y(op)q(erations)k(ma)o(y)g(o)q(ccur)h
(earlier.)30 b(The)18 b(sync)o(hronization)i(calls)f(order)f(correctly)h
(windo)o(w)f(accesses,)75 2137 y(but)c(do)g(not)g(necessarily)h(sync)o
(hronize)h(other)d(op)q(erations.)20 b(This)15 b(w)o(eak)o(er)e(sync)o
(hronization)i(seman)o(tic)75 2194 y(allo)o(ws)g(for)g(more)g(e\016cien)o(t)h
(implemen)o(tations.)166 2250 y(Since)k(b)q(oth)f(comm)o(unicating)g(pro)q
(cesses)g(are)f(explicitly)k(in)o(v)o(olv)o(ed)d(in)h(the)e(comm)o
(unication,)i(a)75 2307 y(p)q(olling)e(implemen)o(tation)f(of)e(2-part)o(y)g
(comm)o(unication)h(is)h(p)q(ossible,)g(to)e(the)h(same)f(exten)o(t)g(that)g
(it)h(is)75 2363 y(p)q(ossible)h(for)e(message-passing.)166
2420 y(Figure)h(5.3)e(illustrates)j(the)f(general)g(sync)o(hronization)g
(pattern,)f(for)g(3-part)o(y)g(comm)o(unication,)75 2476 y(i.e.,)21
b(for)e(con\015icts)h(b)q(et)o(w)o(een)g(RMA)g(accesses.)34
b(The)20 b(\014rst)f(origin)i(pro)q(cess)f(comm)o(unicates)g(data)f(to)75
2532 y(the)d(second)h(origin)g(pro)q(cess,)f(through)f(the)i(memory)e(of)h
(the)g(target)f(pro)q(cess;)h(the)g(target)f(pro)q(cess)h(is)75
2589 y(not)g(explicitly)k(in)o(v)o(olv)o(ed)d(in)h(the)f(comm)o(unication.)25
b(The)17 b Fo(lock)f Fu(and)h Fo(unlock)f Fu(calls)i(ensure)f(that)f(the)75
2645 y(t)o(w)o(o)d(RMA)h(accesses)h(do)f(not)g(o)q(ccur)h(concurren)o(tly)g
(\(ho)o(w)o(ev)o(er,)e(they)h(do)h(not)f(ensure)h(that)e(the)i(put)f(b)o(y)75
2702 y(origin)i(1)e(will)i(precede)g(the)f(get)g(b)o(y)f(origin)i(2\).)j
(Although)c(the)g(target)f(pro)q(cess)h(do)q(es)g(not)f(participate)1967
46 y Fp(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967
328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 15 15
bop 75 -100 a Fk(5.4.)34 b(SYNCHR)o(ONIZA)l(TION)17 b(CALLS)1031
b Fu(15)533 570 y
14208860 22165818 0 0 22760488 35587932 startTexFig
533 570 a
%%BeginDocument: sync11.eps
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {} def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-128.0 567.0 translate
1 -1 scale

/clp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/l {lineto} bind def
/m {moveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 2610 m
gs 1 -1 sc (window) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 2325 m
gs 1 -1 sc (Local) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 2895 m
gs 1 -1 sc (accesses) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 5310 m
gs 1 -1 sc (exposed) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 5595 m
gs 1 -1 sc (to RMA) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 5025 m
gs 1 -1 sc (Window is) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 5880 m
gs 1 -1 sc (accesses) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5475 4425 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5475 4740 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5475 5055 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5475 5370 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5475 5685 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5475 6000 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5475 6315 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5475 6630 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5475 6945 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
4897 600 m
gs 1 -1 sc (TARGET) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
4837 915 m
gs 1 -1 sc (PROCESS) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5257 2580 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5257 3210 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5257 8130 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5257 8760 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5265 1800 m
gs 1 -1 sc (wait) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5265 7500 m
gs 1 -1 sc (wait) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5265 3840 m
gs 1 -1 sc (post) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5265 9390 m
gs 1 -1 sc (post) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 1575 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 1890 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 2205 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 2520 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 2835 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 3150 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 3465 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 3780 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 4095 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 6750 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 7065 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 7380 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 7695 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 8010 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 8325 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 8640 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 8955 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2775 9270 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2602 5130 m
gs 1 -1 sc (put) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2602 5760 m
gs 1 -1 sc (put) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
2272 600 m
gs 1 -1 sc (ORIGIN) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2527 4500 m

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
gs 1 -1 sc (start) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2272 6390 m
gs 1 -1 sc (complete) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
2137 930 m
gs 1 -1 sc (PROCESS) col-1 show gr
15.000 slw
[100.0] 0 setdash
n 4575 3825 m 3525 4200 l gs col-1 s gr [] 0 setdash
n 3771.20 4175.78 m 3525.00 4200.00 l 3730.84 4062.77 l 3751.52 4119.78 l
3771.20 4175.78 l clp gs 0.00 setgray ef gr gs col-1 s gr
[100.0] 0 setdash
n 3525 6600 m 4575 7200 l gs col-1 s gr [] 0 setdash
n 4396.39 7028.83 m 4575.00 7200.00 l 4336.85 7133.02 l 4367.12 7081.43 l
4396.39 7028.83 l clp gs 0.00 setgray ef gr gs col-1 s gr
7.500 slw
n 5925 1950 m 6225 2100 l 6225 2550 l 6525 2700 l 6225 2850 l 6225 3300 l
5925 3450 l gs col-1 s gr
n 5925 4050 m 6225 4200 l 6225 5250 l 6525 5400 l 6225 5550 l 6225 7050 l
5925 7200 l gs col-1 s gr
n 5925 7650 m 6225 7800 l 6225 8250 l 6525 8400 l 6225 8550 l 6225 9000 l
5925 9150 l gs col-1 s gr
30.000 slw
n 3074 5331 m 5024 5631 l gs col-1 s gr
n 4909.96 5583.10 m 5024.00 5631.00 l 4900.83 5642.40 l 4905.90 5613.25 l
4909.96 5583.10 l clp gs 0.00 setgray ef gr gs col-1 s gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6900 8385 m
gs 1 -1 sc (window) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6900 8100 m
gs 1 -1 sc (Local) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6900 8670 m
gs 1 -1 sc (accesses) col-1 show gr
$F2psEnd
restore
%%EndDocument
533 570 a
endTexFig
75 2072 a Fu(Figure)19 b(5.1:)27 b(2-part)o(y)18 b(comm)o(unication.)31
b(Dashed)19 b(arro)o(ws)f(represen)o(t)h(sync)o(hronizations)h(and)f(solid)75
2128 y(arro)o(ws)14 b(represen)o(t)h(data)f(transfer.)-32 46
y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32
328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40
611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119
y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627
y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40
2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 16 16
bop 75 -100 a Fu(16)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)533 621 y
14208860 21455378 0 0 23484088 35587932 startTexFig
533 621 a
%%BeginDocument: sync12.eps
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {} def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-117.0 567.0 translate
1 -1 scale

/clp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/l {lineto} bind def
/m {moveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 2610 m
gs 1 -1 sc (window) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 2325 m
gs 1 -1 sc (Local) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 2895 m
gs 1 -1 sc (accesses) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 5310 m
gs 1 -1 sc (exposed) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 5595 m
gs 1 -1 sc (to RMA) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 5025 m
gs 1 -1 sc (Window is) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6825 5880 m
gs 1 -1 sc (accesses) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5437 4425 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5437 4740 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5437 5055 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5437 5370 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5437 5685 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5437 6000 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5437 6315 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5437 6630 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5437 6945 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
4860 600 m
gs 1 -1 sc (TARGET) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5220 2580 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5220 3210 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5220 8130 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5220 8760 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5227 1800 m
gs 1 -1 sc (wait) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5227 7500 m
gs 1 -1 sc (wait) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5227 9390 m
gs 1 -1 sc (post) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5227 3840 m
gs 1 -1 sc (post) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 6750 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 7065 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 7380 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 7695 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 8010 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 8325 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 8640 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 8955 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 9270 m
gs 1 -1 sc (.) col-1 show gr
15.000 slw
[100.0] 0 setdash
n 3525 6600 m 4575 7200 l gs col-1 s gr [] 0 setdash
n 4396.39 7028.83 m 4575.00 7200.00 l 4336.85 7133.02 l 4367.12 7081.43 l
4396.39 7028.83 l clp gs 0.00 setgray ef gr gs col-1 s gr
7.500 slw
n 5925 1950 m 6225 2100 l 6225 2550 l 6525 2700 l 6225 2850 l 6225 3300 l
5925 3450 l gs col-1 s gr
n 5925 4050 m 6225 4200 l 6225 5250 l 6525 5400 l 6225 5550 l 6225 7050 l
5925 7200 l gs col-1 s gr
n 5925 7650 m 6225 7800 l 6225 8250 l 6525 8400 l 6225 8550 l 6225 9000 l
5925 9150 l gs col-1 s gr
30.000 slw
n 3074 5331 m 5024 5631 l gs col-1 s gr
n 4909.96 5583.10 m 5024.00 5631.00 l 4900.83 5642.40 l 4905.90 5613.25 l
4909.96 5583.10 l clp gs 0.00 setgray ef gr gs col-1 s gr
15.000 slw
[100.0] 0 setdash
n 4596 3859 m 3000 4425 l gs col-1 s gr [] 0 setdash
n 3246.25 4401.33 m 3000.00 4425.00 l 3206.14 4288.23 l 3226.70 4345.28 l
3246.25 4401.33 l clp gs 0.00 setgray ef gr gs col-1 s gr
[100.0] 0 setdash
n 2100 3075 m
2050.44 3202.50 2031.69 3258.75 2025 3300 curveto
1996.78 3473.91 1970.36 3869.53 2025 4050 curveto
2054.55 4147.60 2129.55 4260.10 2325 4500 curveto
gs col-1 s gr
[] 0 setdash
n 2219.93 4276.04 m 2325.00 4500.00 l 2126.89 4351.83 l 2173.91 4314.43 l
2219.93 4276.04 l clp gs 0.00 setgray ef gr gs col-1 s gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6900 8385 m
gs 1 -1 sc (window) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6900 8100 m
gs 1 -1 sc (Local) col-1 show gr
/Times-BoldItalic findfont 270.00 scalefont setfont
6900 8670 m
gs 1 -1 sc (accesses) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
4950 915 m
gs 1 -1 sc (PROCESS) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
1950 930 m
gs 1 -1 sc (PROCESS) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
2085 600 m
gs 1 -1 sc (ORIGIN) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 1575 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 1890 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2587 2205 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2370 3480 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2415 4680 m
gs 1 -1 sc (put) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2415 5310 m
gs 1 -1 sc (put) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2340 2925 m
gs 1 -1 sc (start) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2085 6390 m
gs 1 -1 sc (complete) col-1 show gr
$F2psEnd
restore
%%EndDocument
533 621 a
endTexFig
343 2078 a Fu(Figure)f(5.2:)k(2-part)o(y)c(comm)o(unication,)g(with)h(w)o
(eak)e(sync)o(hronization.)1967 46 y Fp(1)1967 103 y(2)1967
159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967
441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959
724 y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959 1175
y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959 1401
y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959 1627
y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959 1853
y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959 2078
y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959 2304
y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959 2530
y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p eop
%%Page: 17 17
bop 75 -100 a Fk(5.4.)34 b(SYNCHR)o(ONIZA)l(TION)17 b(CALLS)1031
b Fu(17)450 600 y
16577003 21218563 0 0 23878778 30654300 startTexFig
450 600 a
%%BeginDocument: sync21.eps
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {} def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-175.0 582.0 translate
1 -1 scale

/clp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/l {lineto} bind def
/m {moveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
/Times-Bold findfont 300.00 scalefont setfont
5760 2100 m
gs 1 -1 sc (TARGET) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
5700 2415 m
gs 1 -1 sc (PROCESS) col-1 show gr
15.000 slw
[100.0] 0 setdash
n 6105 3450 m 6000 3450 6000 3795 105 arcto 4 {pop} repeat 6000 3900 6645 3900
105 arcto 4 {pop} repeat 6750 3900 6750 3555 105 arcto 4 {pop} repeat 6750
3450 6105 3450 105 arcto 4 {pop} repeat clp gs col-1 s gr [] 0 setdash
/Times-Italic findfont 270.00 scalefont setfont
6150 3750 m
gs 1 -1 sc (lock) col-1 show gr
[100.0] 0 setdash
n 6105 6900 m 6000 6900 6000 7245 105 arcto 4 {pop} repeat 6000 7350 6645 7350
105 arcto 4 {pop} repeat 6750 7350 6750 7005 105 arcto 4 {pop} repeat 6750
6900 6105 6900 105 arcto 4 {pop} repeat clp gs col-1 s gr [] 0 setdash
/Times-Italic findfont 270.00 scalefont setfont
6150 7200 m
gs 1 -1 sc (lock) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3060 2100 m
gs 1 -1 sc (ORIGIN) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
2925 2415 m
gs 1 -1 sc (PROCESS) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3532 2730 m
gs 1 -1 sc (1) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 3900 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 4215 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 6300 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 6615 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 6930 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 7245 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 7560 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 7875 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 8190 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3562 8505 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
3390 4680 m
gs 1 -1 sc (put) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
3390 5310 m
gs 1 -1 sc (put) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
3352 3450 m
gs 1 -1 sc (lock) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
3187 5940 m
gs 1 -1 sc (unlock) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8460 2100 m
gs 1 -1 sc (ORIGIN) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8325 2415 m
gs 1 -1 sc (PROCESS) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8932 2730 m
gs 1 -1 sc (2) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 3300 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 3615 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 3930 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 4245 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 4560 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 4875 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 5190 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 5505 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 5820 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 6135 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 7080 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8962 7395 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
8820 7980 m
gs 1 -1 sc (get) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
8820 8610 m
gs 1 -1 sc (get) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
8752 6675 m
gs 1 -1 sc (lock) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
8587 9240 m
gs 1 -1 sc (unlock) col-1 show gr
n 8628 8185 m 6900 8175 l gs col-1 s gr
n 8388.35 8123.61 m 8628.00 8185.00 l 8387.66 8243.61 l 8388.50 8184.11 l
8388.35 8123.61 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 4047 4940 m 5775 4950 l gs col-1 s gr
n 5535.35 4888.61 m 5775.00 4950.00 l 5534.66 5008.61 l 5535.50 4949.11 l
5535.35 4888.61 l clp gs 0.00 setgray ef gr gs col-1 s gr
[100.0] 0 setdash
n 6105 5925 m 6000 5925 6000 6270 105 arcto 4 {pop} repeat 6000 6375 6795 6375
105 arcto 4 {pop} repeat 6900 6375 6900 6030 105 arcto 4 {pop} repeat 6900
5925 6105 5925 105 arcto 4 {pop} repeat clp gs col-1 s gr [] 0 setdash
[100.0] 0 setdash
n 6180 9225 m 6075 9225 6075 9570 105 arcto 4 {pop} repeat 6075 9675 6870 9675
105 arcto 4 {pop} repeat 6975 9675 6975 9330 105 arcto 4 {pop} repeat 6975
9225 6180 9225 105 arcto 4 {pop} repeat clp gs col-1 s gr [] 0 setdash
[100.0] 0 setdash
n 4575 5850 m 5775 6075 l gs col-1 s gr [] 0 setdash
n 5550.17 5971.80 m 5775.00 6075.00 l 5528.05 6089.74 l 5539.61 6031.27 l
5550.17 5971.80 l clp gs 0.00 setgray ef gr gs col-1 s gr
[100.0] 0 setdash
n 8167 9195 m 7117 9495 l gs col-1 s gr [] 0 setdash
n 7364.25 9486.76 m 7117.00 9495.00 l 7331.28 9371.38 l 7348.27 9429.57 l
7364.25 9486.76 l clp gs 0.00 setgray ef gr gs col-1 s gr
[100.0] 0 setdash
n 5700 3900 m 4050 4500 l gs col-1 s gr [] 0 setdash
n 4296.06 4474.37 m 4050.00 4500.00 l 4255.05 4361.59 l 4276.05 4418.48 l
4296.06 4474.37 l clp gs 0.00 setgray ef gr gs col-1 s gr
[100.0] 0 setdash
n 4425 3375 m 5700 3600 l gs col-1 s gr [] 0 setdash
n 5474.08 3499.20 m 5700.00 3600.00 l 5453.22 3617.38 l 5464.15 3558.79 l
5474.08 3499.20 l clp gs 0.00 setgray ef gr gs col-1 s gr
[100.0] 0 setdash
n 6975 7341 m 8700 7875 l gs col-1 s gr [] 0 setdash
n 8488.48 7746.71 m 8700.00 7875.00 l 8452.99 7861.34 l 8471.23 7804.53 l
8488.48 7746.71 l clp gs 0.00 setgray ef gr gs col-1 s gr
[100.0] 0 setdash
n 8325 6675 m 6975 7036 l gs col-1 s gr [] 0 setdash
n 7222.35 7031.96 m 6975.00 7036.00 l 7191.35 6916.04 l 7207.35 6974.50 l
7222.35 7031.96 l clp gs 0.00 setgray ef gr gs col-1 s gr
/Times-Bold findfont 300.00 scalefont setfont
6375 4200 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 4515 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 4830 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 5145 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 5460 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 5775 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 6720 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 7665 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 7980 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 8295 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6375 8610 m
gs 1 -1 sc (.) col-1 show gr
/Times-Italic findfont 270.00 scalefont setfont
6075 6225 m
gs 1 -1 sc (unlock) col-1 show gr
/Times-Italic findfont 270.00 scalefont setfont
6150 9525 m
gs 1 -1 sc (unlock) col-1 show gr
$F2psEnd
restore
%%EndDocument
450 600 a
endTexFig
75 2042 a Fu(Figure)19 b(5.3:)27 b(3-part)o(y)18 b(comm)o(unication.)31
b(Dashed)19 b(arro)o(ws)f(represen)o(t)h(sync)o(hronizations)h(and)f(solid)75
2098 y(arro)o(ws)14 b(represen)o(t)h(data)f(transfer.)-32 46
y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32
328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40
611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119
y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627
y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40
2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 18 18
bop 75 -100 a Fu(18)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fu(explicitly)j(in)e(the)f(comm)o(unication,)g
(its)g(implicit)j(participation)e(ma)o(y)e(b)q(e)i(required,)g(esp)q(ecially)
h(in)f(a)75 106 y(distributed)h(memory)e(en)o(vironmen)o(t,)g(in)h(order)g
(to)e(access)i(the)f(lo)q(cal)i(memory)e(and)g(gran)o(t)f(lo)q(c)o(ks.)24
b(3-)75 162 y(part)o(y)12 b(comm)o(unication)i(will)h(require,)f(on)g
(distributed)g(memory)f(systems,)g(an)g(async)o(hronous)g(\\RMA)75
219 y(agen)o(t")e(\(signal)i(handler,)g(thread,)f(daemon,)h(etc.\))18
b(at)12 b(the)g(target)e(no)q(de)j(that)f(accepts)g(RMA)g(requests)75
275 y(and)i(p)q(erforms)g(the)g(required)h(read)f(or)g(write)g(accesses)g(in)
h(the)f(memory)g(of)g(the)g(target)f(pro)q(cess.)19 b(This)75
332 y(agen)o(t)c(has)h(to)f(b)q(e)i(sc)o(heduled)h(for)d(execution)i(on)f
(the)g(target)f(no)q(de)h(ev)o(en)g(if)h(the)f(target)e(pro)q(cess)j(do)q(es)
75 388 y(not)e(execute)h(an)o(y)f(MPI)g(call,)h(other)e(than)i
Fm(MPI)p 915 388 14 2 v 15 w(INIT)f Fu(and)g Fm(MPI)p 1204
388 V 16 w(FINALIZE)p Fu(.)-1541 b Fq(?)15 b Fp(\(Oct\))75
509 y Fe(5.4.1)49 b(General)16 b(2-pa)o(rt)o(y)g(synchronization)75
689 y Fm(MPI)p 160 689 V 16 w(WIN)p 264 689 V 16 w(ST)l(ART\(count,)h(ranks,)
e(\015ag,)g(win\))117 766 y Fj(IN)155 b Fm(count)482 b Fj(n)o(um)o(b)q(er)12
b(of)f(target)i(pro)q(cesses)h(and)e(size)h(of)f(arra)o(y)g
Fh(ranks)g Fj(\(in-)905 823 y(teger\))117 897 y(IN)155 b Fm(ranks)487
b Fj(ranks)14 b(of)g(target)g(pro)q(cesses)j(\(arra)o(y)c(of)h(in)o(tegers\))
117 971 y(IN)155 b Fm(\015ag)518 b Fj(information)11 b(\015ag)j(\(in)o
(teger\))117 1045 y(IN)155 b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i
(\(handle\))75 1170 y Fo(int)23 b(MPI)p 245 1170 15 2 v 17
w(WIN)p 334 1170 V 17 w(start\(int)g(count,)g(int)g(ranks[],)g(int)g(flag,)h
(MPI)p 1378 1170 V 16 w(Win)g(win\))75 1256 y(MPI)p 150 1256
V 17 w(WIN)p 239 1256 V 17 w(START\(COUNT,)e(RANKS,)h(FLAG,)g(WIN,)g
(IERROR\))170 1312 y(INTEGER)g(COUNT,)g(RANKS\(*\),)g(FLAG,)g(WIN,)h(IERROR)
-117 1349 y Fq(>)15 b Fp(\(Oct\))75 1399 y Fo(int)23 b(MPI::Win::start\(int)f
(count,)h(const)g(int)g(ranks[],)g(int)h(flag\))-117 1439 y
Fq(?)15 b Fp(\(Oct\))166 1485 y Fu(Starts)g(a)h(sequence)i(of)d(RMA)i(op)q
(erations)f(targeted)g(to)f(the)i(windo)o(ws)f(asso)q(ciated)g(with)h
Fm(win)g Fu(at)75 1542 y(the)11 b Fm(count)h Fu(pro)q(cesses)f(with)g(ranks)f
(listed)i(in)g Fm(ranks)p Fu(.)18 b(RMA)11 b(accesses)g(to)f(eac)o(h)h(of)f
(these)h(windo)o(ws)g(will)h(b)q(e)75 1598 y(dela)o(y)o(ed,)h(if)f(necessary)
l(,)g(un)o(til)h(the)f(target)f(pro)q(cesses)h(executed)h(a)e(matc)o(hing)h
(call)h(to)e Fm(MPI)p 1627 1598 14 2 v 16 w(WIN)p 1731 1598
V 16 w(POST)p Fu(.)166 1655 y(The)k Fm(\015ag)g Fu(argumen)o(t)g(has)g(one)g
(of)g(the)g(follo)o(wing)h(three)f(v)m(alues:)75 1743 y Fl(MPI)p
184 1743 16 2 v 18 w(STR)o(ONG)23 b Fu(The)16 b(call)g Fm(MPI)p
708 1743 14 2 v 16 w(WIN)p 812 1743 V 16 w(ST)l(ART)g Fu(returns)f(only)h
(when)f(a)g(matc)o(hing)h(call)g(to)189 1800 y Fm(MPI)p 274
1800 V 15 w(WIN)p 377 1800 V 17 w(POST)f Fu(o)q(ccurred)h(at)f(eac)o(h)g
(windo)o(w.)75 1892 y Fl(MPI)p 184 1892 16 2 v 18 w(WEAK)23
b Fu(The)16 b(sync)o(hronization)h(call)g Fm(MPI)p 981 1892
14 2 v 16 w(WIN)p 1085 1892 V 16 w(ST)l(ART)g Fu(ma)o(y)e(return)h(earlier,)h
(ev)o(en)g(b)q(efore)189 1948 y(the)22 b(matc)o(hing)g(calls)h(to)e
Fm(MPI)p 734 1948 V 16 w(WIN)p 838 1948 V 16 w(POST)i Fu(o)q(ccurred.)41
b(Ho)o(w)o(ev)o(er,)22 b(the)g(actual)h(access)f(to)f(a)189
2005 y(windo)o(w)15 b(\(using)h(RMA)f(calls)i(with)e(argumen)o(t)g
Fm(win)p Fu(\))g(will)i(not)e(o)q(ccur)h(un)o(til)g(the)g(target)e(pro)q
(cess)189 2061 y(that)e(o)o(wns)h(that)f(windo)o(w)h(executed)h(the)f(matc)o
(hing)h(call)g(to)e Fm(MPI)p 1333 2061 V 16 w(WIN)p 1437 2061
V 16 w(POST)p Fu(.)i(This)f(ma)o(y)g(sa)o(v)o(e)189 2117 y(a)i(comm)o
(unication)h(b)o(y)f(allo)o(wing)h(to)f(com)o(bine)h(the)f(sync)o
(hronization)h(with)g(the)f(data)g(transfer,)189 2174 y(and)g(ma)o(y)g(allo)o
(w)g(more)g(o)o(v)o(erlap)g(b)q(et)o(w)o(een)g(comm)o(unication)h(and)f
(computation.)75 2266 y Fl(MPI)p 184 2266 16 2 v 18 w(NOCHECK)23
b Fu(The)10 b(sync)o(hronization)h(call)g Fm(MPI)p 1066 2266
14 2 v 16 w(WIN)p 1170 2266 V 16 w(ST)l(ART)g Fu(need)g(not)f(c)o(hec)o(k)h
(that)e(a)h(matc)o(h-)189 2322 y(ing)15 b(call)h(to)f Fm(MPI)p
488 2322 V 16 w(WIN)p 592 2322 V 16 w(POST)g Fu(o)q(ccurred:)21
b(the)15 b(user)g(is)h(resp)q(onsible)h(to)d(ensure)i(that)e(that)g(win-)189
2379 y(do)o(w)19 b(is)g(already)h(p)q(osted)g(when)g(the)f(call)i(o)q(ccurs.)
32 b(This)20 b(is)g(similar)h(to)e(the)g(optimization)h(of)189
2435 y(\\ready-receiv)o(e")14 b(that)g(sa)o(v)o(es)f(a)h(hand-shak)o(e)g
(when)h(this)f(hand-shak)o(e)h(is)f(implicit)j(in)e(the)f(co)q(de,)189
2492 y(an)o(yho)o(w.)189 2591 y Fn(A)n(dvic)n(e)22 b(to)i(implementors.)89
b Fu(The)23 b Fm(\015ag)h Fu(argumen)o(t)e(ma)o(y)h(b)q(e)h(ignored)f(b)o(y)h
(implemen)o(tors;)189 2647 y(it)c(is)g(alw)o(a)o(ys)g(correct)f(\(alb)q(eit,)
j(ine\016cien)o(t\))f(to)f(implemen)o(t)h Fm(MPI)p 1362 2647
V 16 w(WIN)p 1466 2647 V 16 w(ST)l(ART)g Fu(as)e(if)i Fm(info)f(=)189
2704 y(MPI)p 274 2704 V 15 w(STRONG)p Fu(.)d(\()p Fn(End)e(of)i(advic)n(e)f
(to)g(implementors.)p Fu(\))1967 46 y Fp(1)1967 103 y(2)1967
159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967
441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959
724 y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959 1175
y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959 1401
y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959 1627
y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959 1853
y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959 2078
y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959 2304
y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959 2530
y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p eop
%%Page: 19 19
bop 75 -100 a Fk(5.4.)34 b(SYNCHR)o(ONIZA)l(TION)17 b(CALLS)1031
b Fu(19)75 49 y Fm(MPI)p 160 49 14 2 v 16 w(WIN)p 264 49 V
16 w(COMPLETE\(win\))117 126 y Fj(IN)155 b Fm(win)522 b Fj(windo)o(w)13
b(ob)r(ject)i(\(handle\))75 251 y Fo(int)23 b(MPI)p 245 251
15 2 v 17 w(Win)p 334 251 V 17 w(complete\(MPI)p 639 251 V
16 w(Win)g(win\))75 337 y(MPI)p 150 337 V 17 w(WIN)p 239 337
V 17 w(COMPLETE\(WIN,)f(IERROR\))170 394 y(INTEGER)h(WIN,)h(IERROR)1875
430 y Fq(>)16 b Fp(\(Oct\))75 480 y Fo(int)23 b(MPI::Win::complete\(void\))
1875 520 y Fq(?)16 b Fp(\(Oct\))166 567 y Fu(Complete)h(\(at)e(the)i
(origin\))g(the)g(sequence)g(of)f(RMA)h(op)q(erations)g(on)f(the)h(windo)o
(ws)g(asso)q(ciated)75 623 y(with)f Fm(win)g Fu(that)f(w)o(ere)g(initiated)j
(after)c(the)i(last)g(preceding)h(call)g(to)e Fm(MPI)p 1350
623 14 2 v 15 w(WIN)p 1453 623 V 17 w(ST)l(ART\(count,)i(ranks,)75
680 y(\015ag,)e(win\))p Fu(.)20 b(All)c(these)g(RMA)f(calls)h(should)g(ha)o
(v)o(e)f(targets)f(that)h(are)f(listed)j(in)f Fm(ranks)p Fu(.)166
736 y(Consider)g(a)f(sequence)h(of)f(calls)h(in)g(the)f(example)h(b)q(elo)o
(w.)75 830 y Fl(Example)i(5.5)75 936 y Fo(MPI_RMA_START\(count,)j(ranks,)i
(flag,)g(win\))75 993 y(...)75 1049 y(MPI_PUT\(...,win\))75
1106 y(...)75 1162 y(MPI_RMA_COMPLETE\(win\))75 1306 y Fu(The)13
b(call)i(to)d Fm(MPI)p 386 1306 V 16 w(WIN)p 490 1306 V 16
w(COMPLETE)h Fu(blo)q(c)o(ks)h(un)o(til)h(the)e(put)g(call)i(has)e(completed)
h(at)e(the)i(origin;)g(and)75 1362 y(the)f(target)e(windo)o(w)i(will)i(b)q(e)
e(accessed)g(b)o(y)g(the)g(put)g(op)q(eration)g(only)g(if)g(the)g(call)h(to)e
Fm(MPI)p 1615 1362 V 16 w(WIN)p 1719 1362 V 16 w(ST)l(ART)75
1419 y Fu(w)o(as)17 b(matc)o(hed)h(b)o(y)f(a)h(call)h(to)e
Fm(MPI)p 686 1419 V 16 w(WIN)p 790 1419 V 16 w(POST)h Fu(b)o(y)g(the)g
(target)e(pro)q(cess.)28 b(If)18 b Fm(info)g(=)g(MPI)p 1681
1419 V 15 w(STRONG)75 1475 y Fu(then)h(the)g(call)h(to)f(start)e(blo)q(c)o
(ks)j(un)o(til)g(the)f(matc)o(hing)g(call)h(to)f(p)q(ost)f(o)q(ccurs.)32
b(On)19 b(the)g(other)g(hand,)75 1531 y(if)j Fm(info)g(=)g(MPI)p
358 1531 V 16 w(WEAK)p Fu(,)f(it)h(is)g(up)g(to)f(the)h(implemen)o(tation)h
(whether)f(the)g(\014rst)f(t)o(w)o(o)g(calls)i(blo)q(c)o(k.)75
1588 y(An)d(implemen)o(tation)g(ma)o(y)f(ha)o(v)o(e)f(the)i(call)g(to)f
Fm(MPI)p 1008 1588 V 16 w(WIN)p 1112 1588 V 16 w(ST)l(ART)h
Fu(blo)q(c)o(k)g(un)o(til)g(the)g(matc)o(hing)f(call)75 1644
y(to)e(p)q(ost)h(o)q(ccurred;)i(or)d(it)i(ma)o(y)e(allo)o(w)h(the)g(call)h
(to)f Fm(MPI)p 1078 1644 V 15 w(WIN)p 1181 1644 V 16 w(ST)l(ART)h

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
Fu(to)f(pro)q(ceed,)h(and)f(blo)q(c)o(k)h(the)75 1701 y(call)g(to)e
Fm(MPI)p 304 1701 V 16 w(PUT)p Fu(,)h(un)o(til)h(the)f(matc)o(hing)f(call)i
(to)f(p)q(ost)f(o)q(ccurred;)j(or,)d(it)h(ma)o(y)g(allo)o(w)g(b)q(oth)g
(calls)h(to)75 1757 y(pro)q(ceed)e(and)f(dela)o(y)h(the)f(access)g(to)g(the)g
(target)f(windo)o(w)h(un)o(til)h(the)f(call)h(to)f Fm(MPI)p
1517 1757 V 16 w(WIN)p 1621 1757 V 16 w(COMPLETE)75 1814 y
Fu(o)q(ccurred)h(and)g(un)o(til)h(the)f(matc)o(hing)f(call)i(to)e(p)q(ost)h
(o)q(ccurred.)24 b(Th)o(us,)17 b(part,)f(or)g(all,)i(of)e(the)h(sequence)75
1870 y(of)k(instructions)g(start,)g(put,)h(complete)g(ma)o(y)e(blo)q(c)o(k)i
(on)f(the)g(matc)o(hing)g(p)q(ost)g(call)h(at)e(the)i(target.)75
1927 y(Ho)o(w)o(ev)o(er,)f(once)g(this)g(call)g(to)f(p)q(ost)h(w)o(as)f
(issued,)i(the)f(sequence)h(will)g(complete,)h(without)d(further)75
1983 y(dep)q(endencies.)166 2040 y Fm(MPI)p 251 2040 V 16 w(WIN)p
355 2040 V 16 w(COMPLETE)f Fu(enforces)h(completion)g(of)f(preceding)i(RMA)e
(calls)h(at)f(the)g(origin.)33 b(A)75 2096 y(put)15 b(or)f(accum)o(ulate)h
(call)g(ma)o(y)f(not)g(ha)o(v)o(e)g(completed)i(at)e(the)g(target)f(when)i
(it)g(has)g(completed)g(at)f(the)75 2152 y(origin.)166 2209
y(Eac)o(h)h(call)h(to)e Fm(MPI)p 502 2209 V 16 w(WIN)p 606
2209 V 16 w(ST)l(ART\(..,)h(win\))g Fu(has)g(to)f(b)q(e)i(matc)o(hed)f(b)o(y)
f(a)h(unique)i(follo)o(wing)e(call)i(to)75 2265 y Fm(MPI)p
160 2265 V 16 w(WIN)p 264 2265 V 16 w(COMPLETE\(win\))p Fu(,)e(and)g(vice)h
(v)o(ersa.)-32 46 y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32
272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40
836 y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40
1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345
y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853
y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40
2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40
2643 y(47)-40 2699 y(48)p eop
%%Page: 20 20
bop 75 -100 a Fu(20)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fm(MPI)p 160 49 14 2 v 16 w(WIN)p
264 49 V 16 w(POST\(count,)g(ranks,)g(\015ag,)e(win\))117 126
y Fj(IN)155 b Fm(count)482 b Fj(n)o(um)o(b)q(er)12 b(of)g(origin)g(pro)q
(cesses)j(and)d(size)i(of)e(arra)o(y)g Fh(ranks)h Fj(\(in-)905
183 y(teger\))117 258 y(IN)155 b Fm(ranks)487 b Fj(ranks)14
b(of)g(origin)e(pro)q(cesses)17 b(\(arra)o(y)d(of)f(in)o(tegers\))117
333 y(IN)155 b Fm(\015ag)518 b Fj(\015ag)14 b(argumen)o(t)e(\(in)o(teger\))
117 408 y(IN)155 b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i(\(handle\))75
533 y Fo(int)23 b(MPI)p 245 533 15 2 v 17 w(Win)p 334 533 V
17 w(post\(int)g(count,)g(int)g(ranks[],)g(MPI)p 1115 533 V
17 w(Win)g(win\))75 619 y(MPI)p 150 619 V 17 w(WIN)p 239 619
V 17 w(POST\(COUNT,)f(RANKS,)h(FLAG,)g(WIN,)g(IERROR\))170
676 y(INTEGER)g(COUNT,)g(RANKS\(*\),)g(FLAG,)g(WIN,)h(IERROR)-117
712 y Fq(>)15 b Fp(\(Oct\))75 762 y Fo(int)23 b(MPI::Win::post\(int)f(count,)
h(const)g(int)h(ranks[],)e(int)i(flag\))-117 802 y Fq(?)15
b Fp(\(Oct\))166 849 y Fu(P)o(ost)9 b(the)h(lo)q(cal)i(windo)o(w)e(asso)q
(ciated)g(with)h Fm(win)p Fu(.)18 b(This)11 b(call)g(will)h(matc)o(h)e(calls)
h(to)e Fm(MPI)p 1628 849 14 2 v 16 w(WIN)p 1732 849 V 16 w(ST)l(ART)75
905 y Fu(b)o(y)14 b(the)h Fm(count)h Fu(origin)f(pro)q(cesses)g(listed)g(in)h
Fm(ranks)p Fu(,)e(th)o(us)g(allo)o(wing)i(RMA)e(calls)i(b)o(y)e(these)h(pro)q
(cesses)g(to)75 962 y(access)f(the)g(lo)q(cal)h(windo)o(w.)k(The)14
b(\015ag)g(v)m(alue)h(at)e(the)h(p)q(ost)f(call)i(should)g(matc)o(h)e(the)h
(\015ag)g(v)m(alue)h(at)e(eac)o(h)-1992 b Fq(>)15 b Fp(\(Oct\))75
1018 y Fu(matc)o(hing)g(start)f(call.)-117 1020 y Fq(?)h Fp(\(Oct\))75
1169 y Fm(MPI)p 160 1169 V 16 w(WIN)p 264 1169 V 16 w(W)l(AIT\(win\))117
1246 y Fj(IN)155 b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i(\(handle\))75
1371 y Fo(int)23 b(MPI)p 245 1371 15 2 v 17 w(Win)p 334 1371
V 17 w(wait\(MPI)p 543 1371 V 16 w(Win)h(win\))75 1457 y(MPI)p
150 1457 V 17 w(WIN)p 239 1457 V 17 w(WAIT\(WIN,)e(IERROR\))170
1513 y(INTEGER)h(WIN,)h(IERROR)-117 1550 y Fq(>)15 b Fp(\(Oct\))75
1600 y Fo(int)23 b(MPI::Win::wait\(void\))-117 1634 y Fq(?)15
b Fp(\(Oct\))166 1686 y Fu(Eac)o(h)g(call)h(to)f Fm(MPI)p 503
1686 14 2 v 16 w(WIN)p 607 1686 V 16 w(POST\(count,)h(rank,)f(\015ag,)g(win)p
Fu(\))g(is)h(follo)o(w)o(ed)f(b)o(y)g(a)g(call)i(to)75 1743
y Fm(MPI)p 160 1743 V 16 w(WIN)p 264 1743 V 16 w(W)l(AIT\(win\))p
Fu(.)45 b(The)24 b(former)f(call)i(matc)o(hes)e(a)h(call)h(to)e
Fm(MPI)p 1369 1743 V 15 w(WIN)p 1472 1743 V 17 w(ST)l(ART\(...,)i(win\))e
Fu(is-)75 1799 y(sued)h(on)f(eac)o(h)h(of)f(the)g(origin)h(pro)q(cesses)g
(listed)h(in)f Fm(ranks)p Fu(.)45 b(The)23 b(later)h(call)g(matc)o(hes)f(a)g
(call)i(to)75 1856 y Fm(MPI)p 160 1856 V 16 w(WIN)p 264 1856
V 16 w(COMPLETE\(win\))15 b Fu(issued)h(b)o(y)e(eac)o(h)h(of)g(these)g
(origin)h(pro)q(cesses,)f(follo)o(wing)g(the)g(matc)o(hed)75
1912 y(calls)k(to)e Fm(MPI)p 322 1912 V 16 w(WIN)p 426 1912
V 16 w(ST)l(ART)p Fu(.)i(The)f(call)h(to)e Fm(MPI)p 938 1912
V 16 w(WIN)p 1042 1912 V 16 w(W)l(AIT)h Fu(will)h(blo)q(c)o(k)g(un)o(til)g
(all)g(these)f(matc)o(hing)75 1969 y(calls)k(to)d Fm(MPI)p
327 1969 V 16 w(WIN)p 431 1969 V 16 w(COMPLETE)i Fu(o)q(ccurred.)36
b(This)21 b(guaran)o(tees)f(that)f(all)j(these)e(origin)i(pro)q(cesses)75
2025 y(ha)o(v)o(e)16 b(completed)h(their)g(RMA)g(accesses)g(to)e(the)i(lo)q
(cal)h(windo)o(w.)23 b(When)17 b(the)g(call)g(returns,)f(all)i(these)75
2082 y(RMA)d(accesses)h(ha)o(v)o(e)f(completed)h(at)e(the)i(target)e(windo)o
(w.)166 2138 y(Eac)o(h)20 b(call)h(to)e Fm(MPI)p 517 2138 V
16 w(WIN)p 621 2138 V 16 w(POST\(count,)j(rank,)f(\015ag,)f(win)p
Fu(\))g(has)g(to)f(b)q(e)h(matc)o(hed)g(b)o(y)g(a)f(unique)75
2194 y(follo)o(wing)d(call)g(to)f Fm(MPI)p 491 2194 V 16 w(WIN)p
595 2194 V 16 w(W)l(AIT\(win\))p Fu(,)f(and)i(vice)g(v)o(ersa.)-1262
b Fq(>)15 b Fp(\(Oct\))166 2251 y Fu(Figure)c(5.4)g(illustrates)h(the)f(use)h
(of)e(these)i(four)e(functions.)20 b(Pro)q(cess)11 b(0)g(puts)g(data)g(in)h
(the)f(windo)o(ws)75 2307 y(of)h(pro)q(cesses)h(1)f(and)h(2)f(and)h(pro)q
(cess)g(3)f(puts)h(data)f(in)h(the)g(windo)o(w)f(of)g(pro)q(cess)h(2.)19
b(Eac)o(h)12 b(start)g(call)h(lists)75 2364 y(the)i(ranks)f(of)h(the)g(pro)q
(cesses)g(where)g(windo)o(ws)g(are)f(accessed;)h(eac)o(h)g(p)q(ost)g(call)h
(lists)f(the)g(ranks)g(of)f(the)75 2420 y(pro)q(cesses)j(that)f(access)h(the)
g(windo)o(ws.)25 b(The)18 b(\014gure)f(illustrates)h(a)e(p)q(ossible)j
(timing)e(for)g(the)g(ev)o(en)o(ts,)75 2477 y(assuming)c(strong)f(sync)o
(hronization;)i(in)g(a)f(w)o(eak)f(sync)o(hronization,)i(the)f(start)e(call)j
(ma)o(y)f(o)q(ccur)g(ahead)75 2533 y(of)i(the)g(matc)o(hing)g(p)q(ost)g
(calls.)-718 b Fq(?)15 b Fp(\(Oct\))189 2639 y Fn(R)n(ationale.)44
b Fu(The)17 b(curren)o(t)e(design)i(for)f(general)g(2-part)o(y)f(sync)o
(hronization)i(requires)g(the)f(user)189 2696 y(to)c(pro)o(vide)h(complete)h
(information)e(on)h(the)g(comm)o(unication)g(pattern,)g(at)f(eac)o(h)h(end)g
(of)g(a)f(com-)1967 46 y Fp(1)1967 103 y(2)1967 159 y(3)1967
215 y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967
498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949 y(17)1959
1006 y(18)1959 1062 y(19)1959 1119 y(20)1959 1175 y(21)1959
1232 y(22)1959 1288 y(23)1959 1345 y(24)1959 1401 y(25)1959
1457 y(26)1959 1514 y(27)1959 1570 y(28)1959 1627 y(29)1959
1683 y(30)1959 1740 y(31)1959 1796 y(32)1959 1853 y(33)1959
1909 y(34)1959 1966 y(35)1959 2022 y(36)1959 2078 y(37)1959
2135 y(38)1959 2191 y(39)1959 2248 y(40)1959 2304 y(41)1959
2361 y(42)1959 2417 y(43)1959 2474 y(44)1959 2530 y(45)1959
2587 y(46)1959 2643 y(47)1959 2699 y(48)p eop
%%Page: 21 21
bop 75 -100 a Fk(5.4.)34 b(SYNCHR)o(ONIZA)l(TION)17 b(CALLS)1031
b Fu(21)308 4 y
21313290 10869777 0 0 35522150 18353111 startTexFig
308 4 a
%%BeginDocument: 2party.eps
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {} def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-72.0 395.0 translate
1 -1 scale

/clp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/l {lineto} bind def
/m {moveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
30.000 slw
[133.3] 0 setdash
n 3825 2625 m 2625 3450 l gs col-1 s gr [] 0 setdash
n 2798.82 3385.11 m 2625.00 3450.00 l 2747.83 3310.94 l 2773.83 3348.52 l
2798.82 3385.11 l clp gs 0.00 setgray ef gr gs col-1 s gr
[133.3] 0 setdash
n 2693 5315 m 3975 6375 l gs col-1 s gr [] 0 setdash
n 3864.95 6225.62 m 3975.00 6375.00 l 3807.60 6294.98 l 3836.78 6260.80 l
3864.95 6225.62 l clp gs 0.00 setgray ef gr gs col-1 s gr
[133.3] 0 setdash
n 7443 2650 m 8925 3300 l gs col-1 s gr [] 0 setdash
n 8778.23 3186.49 m 8925.00 3300.00 l 8742.08 3268.91 l 8760.66 3228.20 l
8778.23 3186.49 l clp gs 0.00 setgray ef gr gs col-1 s gr
[133.3] 0 setdash
n 6208 2599 m 2775 3525 l gs col-1 s gr [] 0 setdash
n 2960.51 3521.57 m 2775.00 3525.00 l 2937.07 3434.68 l 2949.29 3478.62 l
2960.51 3521.57 l clp gs 0.00 setgray ef gr gs col-1 s gr
[133.3] 0 setdash
n 8645 5278 m 7125 6450 l gs col-1 s gr [] 0 setdash
n 7295.02 6375.73 m 7125.00 6450.00 l 7240.07 6304.45 l 7268.05 6340.59 l
7295.02 6375.73 l clp gs 0.00 setgray ef gr gs col-1 s gr
[133.3] 0 setdash
n 2700 5250 m 6300 6450 l gs col-1 s gr [] 0 setdash
n 6143.47 6350.39 m 6300.00 6450.00 l 6115.01 6435.77 l 6129.74 6393.58 l
6143.47 6350.39 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 2400 4050 m 4275 4275 l gs col-1 s gr
n 3928.29 4142.75 m 4275.00 4275.00 l 3906.84 4321.47 l 3918.06 4232.61 l
3928.29 4142.75 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 2400 4650 m 6675 5175 l gs col-1 s gr
n 6328.65 5041.79 m 6675.00 5175.00 l 6306.71 5220.45 l 6318.18 5131.62 l
6328.65 5041.79 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 8853 4298 m 6903 4598 l gs col-1 s gr
n 7272.50 4632.21 m 6903.00 4598.00 l 7245.13 4454.31 l 7259.31 4543.76 l
7272.50 4632.21 l clp gs 0.00 setgray ef gr gs col-1 s gr
/Times-Bold findfont 300.00 scalefont setfont
1207 2100 m
gs 1 -1 sc (PROCESS 0) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
3607 2100 m
gs 1 -1 sc (PROCESS 1) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
6007 2100 m
gs 1 -1 sc (PROCESS 2) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6277 2700 m
gs 1 -1 sc (post\(0,3\)) col-1 show gr
/Times-Bold findfont 300.00 scalefont setfont
8595 2100 m
gs 1 -1 sc (PROCESS 3) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4050 6525 m
gs 1 -1 sc (wait\(\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6375 6525 m
gs 1 -1 sc (wait\(\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 3000 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 3315 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 3630 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 3945 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 4260 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 4575 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 4890 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 5205 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 5520 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 5835 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4350 6150 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 3000 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 3315 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 3630 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 3945 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 4260 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 4575 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 4890 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 5205 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 5520 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 5835 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6750 6150 m
gs 1 -1 sc (.) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
1620 4125 m
gs 1 -1 sc (put\(1\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
1620 4725 m
gs 1 -1 sc (put\(2\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
1357 5325 m
gs 1 -1 sc (complete\(\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
1410 3525 m
gs 1 -1 sc (start\(1,2\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
4027 2700 m
gs 1 -1 sc (post\(0\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
8932 3525 m
gs 1 -1 sc (start\(2\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
8745 5325 m
gs 1 -1 sc (complete\(\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
9007 4350 m
gs 1 -1 sc (put\(2\)) col-1 show gr
$F2psEnd
restore
%%EndDocument
308 4 a
endTexFig
75 790 a Fu(Figure)19 b(5.4:)27 b(2-part)o(y)18 b(comm)o(unication.)31
b(Dashed)19 b(arro)o(ws)f(represen)o(t)h(sync)o(hronizations)h(and)f(solid)75
847 y(arro)o(ws)14 b(represen)o(t)h(data)f(transfer.)189 977
y(m)o(unication)i(link:)22 b(eac)o(h)16 b(origin)g(sp)q(eci\014es)i(a)d(list)
h(of)g(targets,)e(and)h(eac)o(h)h(target)e(sp)q(eci\014es)k(a)d(list)189
1034 y(of)f(origins.)20 b(This)15 b(pro)o(vides)g(maxim)o(um)g(\015exibilit)o
(y)i(\(hence,)e(e\016ciency\))h(for)e(the)h(implemen)o(tor:)189
1090 y(eac)o(h)d(sync)o(hronization)g(can)g(b)q(e)h(initiated)g(b)o(y)f
(either)g(side,)h(since)g(eac)o(h)f(\\kno)o(ws")f(the)h(iden)o(tit)o(y)g(of)
189 1147 y(the)j(other.)k(This)d(also)f(pro)o(vides)h(maxim)o(um)f
(protection)g(from)g(p)q(ossible)i(races.)i(On)d(the)f(other)189
1203 y(hand,)h(the)g(design)h(requires)f(more)g(information)g(than)g(RMA)g
(needs,)g(in)h(general:)22 b(in)17 b(general,)189 1260 y(it)e(is)g
(su\016cien)o(t)h(for)e(the)h(origin)h(to)e(kno)o(w)g(the)h(rank)g(of)f(the)h
(target,)f(but)h(not)f(vice)i(v)o(ersa.)j(Users)189 1316 y(that)e(w)o(an)o(t)
g(more)h(\\anon)o(ymous")f(comm)o(unication)h(will)i(b)q(e)f(required)g(to)f
(use)g(the)g(barrier)g(or)189 1373 y(lo)q(c)o(k)d(mec)o(hanisms.)189
1446 y(The)k(next,)g(less)h(restrictiv)o(e,)g(p)q(ossible)g(design,)h(is)e
(to)f(require)i(that)e(start)g(pro)o(vides)h(a)g(list)g(of)189
1502 y(targets,)e(but)h(allo)o(w)h(p)q(ost)f(to)f(pro)o(vide)i(only)g(a)f
(coun)o(t)g(of)g(origins.)29 b(In)19 b(suc)o(h)g(design,)g(the)g(syn-)189
1559 y(c)o(hronization)e(b)q(et)o(w)o(een)h(start)d(and)i(p)q(ost)g(m)o(ust)f
(\015o)o(w)h(from)f(origin)h(to)g(target;)f(and)h(races)g(ma)o(y)189
1615 y(o)q(ccur)g(if)g(the)g(comm)o(unication)g(pattern)g(c)o(hanges.)24
b(Whenev)o(er)17 b(suc)o(h)h(c)o(hange)e(o)q(ccurs,)i(the)e(old)189
1672 y(set)g(of)f(pro)q(cesses)i(that)e(accesses)i(a)e(windo)o(w)i(is)f(no)o
(w)g(required)h(to)f(sync)o(hronize)h(with)f(the)h(new)189
1728 y(set)f(of)h(pro)q(cesses)h(that)e(access)h(that)g(same)f(windo)o(w.)26
b(This)18 b(sync)o(hronization)g(either)f(in)o(v)o(olv)o(es)189
1785 y(a)e(global)h(barrier,)f(or)g(requires)h(to)f(solv)o(e)h(the)f(same)g
(\\in)o(v)o(erse)h(problem")g(that)f(w)o(e)g(w)o(ere)g(trying)189
1841 y(to)e(a)o(v)o(oid)h(in)i(the)e(\014rst)g(hand:)20 b(iden)o(tifying,)c
(for)d(eac)o(h)i(target,)e(the)h(set)g(of)g(origin)h(pro)q(cesses)g(that)189
1898 y(access)h(that)g(target.)24 b(The)17 b(adv)m(an)o(tages)f(of)g(the)h
(more)f(limited)i(v)o(ersion)f(are)g(limited.)26 b(\()p Fn(End)17
b(of)189 1954 y(r)n(ationale.)p Fu(\))189 2049 y Fn(A)n(dvic)n(e)e(to)i
(implementors.)39 b Fu(W)l(e)16 b(outline)g(t)o(w)o(o)e(p)q(ossible)j
(implemen)o(tations:)189 2122 y(\\Push")c(proto)q(col:)19 b(the)13
b(call)h(to)f Fm(MPI)p 838 2122 14 2 v 16 w(WIN)p 942 2122
V 16 w(POST\(count,)i(ranks,)f(\015ag,)f(win\))g Fu(causes)g(a)g(message)189
2178 y(to)j(b)q(e)i(sen)o(t)e(to)h(eac)o(h)g(origin)g(pro)q(cess)h(listed)g
(in)g Fm(ranks)f Fu(\(unless)h Fm(\015ag)f(=)g(no)q(check)p
Fu(\).)27 b(This)17 b(signal)189 2235 y(allo)o(ws)i(RMA)f(comm)o(unication)i
(to)e(o)q(ccur.)31 b(The)19 b(origin)g(pro)q(cesses)h(signal)f(bac)o(k)g
(completion)189 2291 y(when)k(their)f(call)i(to)e Fm(MPI)p
669 2291 V 16 w(WIN)p 773 2291 V 16 w(COMPLETE)g Fu(o)q(ccur)h(\(the)f(later)
h(message)f(ma)o(y)f(b)q(e)j(piggy-)189 2348 y(bac)o(k)o(ed)15
b(on)g(data\).)189 2421 y(\\Pull")h(proto)q(col:)j(the)d(call)g(to)e
Fm(MPI)p 828 2421 V 16 w(WIN)p 932 2421 V 16 w(POST\(count,)j(ranks,)e
(\015ag,)g(win\))g Fu(causes)g(the)g(target)189 2478 y(windo)o(w)g(to)g(b)q
(e)h(mark)o(ed)f(p)q(osted)h(at)e(the)i(target.)j(The)d(mark)f(could)h(b)q(e)
g(the)g(list)g Fm(ranks)p Fu(,)f(or)g(just)189 2534 y(the)j(in)o(teger)h
Fm(count)g Fu(\(the)g(later)f(pro)o(vide)h(less)g(error-c)o(hec)o(king\).)30
b(The)18 b(RMA)h(calls)g(from)f(eac)o(h)189 2591 y(origin)g(pro)q(cess)h(ha)o
(v)o(e)e(to)g(b)q(e)i(preceded)g(b)o(y)f(a)g(test)f(of)h(the)g(p)q(osted)g
(mark.)27 b(This)19 b(can)f(imply)h(a)189 2647 y(full)f(handshak)o(e,)f
(preceding)i(the)e(RMA)g(data)g(transfer;)g(or,)f(if)i(RMA)f(accesses)g(are)g
(executed)189 2704 y(b)o(y)e(an)g(agen)o(t)g(at)g(the)g(target,)f(and)i
(bu\013ering)g(is)g(acceptable,)g(an)f(eager)g(proto)q(col)h(can)f(b)q(e)h
(used)-32 46 y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32
272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40
836 y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40
1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345
y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853
y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40
2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40
2643 y(47)-40 2699 y(48)p eop
%%Page: 22 22
bop 75 -100 a Fu(22)728 b Fk(CHAPTER)15 b(5.)30 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)189 49 y Fu(whereb)o(y)i(RMA)h(data)f(is)h(sen)o(t)g(and)
f(the)h(test)f(o)q(ccurs)h(at)f(the)h(target)e(\(this)i(is)g(similar)h(to)e
(the)189 106 y(short)d(and)h(long)g(send)h(proto)q(cols\).)k(The)16
b(complete)h(call)g(undo)f(the)g(mark)g(\(deletes)g(the)g(origin)189
162 y(en)o(try)l(,)g(if)g(a)g(list)h(is)g(used;)g(decreases)f(the)h(coun)o
(ter,)e(if)i(a)f(coun)o(ter)g(is)h(used\).)23 b(\()p Fn(End)16
b(of)i(advic)n(e)f(to)189 219 y(implementors.)p Fu(\))75 340
y Fe(5.4.2)49 b(Ba)o(rrier)75 521 y Fm(MPI)p 160 521 14 2 v
16 w(WIN)p 264 521 V 16 w(BARRIER\(\015ag,)16 b(win\))117 598
y Fj(IN)155 b Fm(\015ag)518 b Fj(\015ag)14 b(argumen)o(t)e(\(in)o(teger\))117
673 y(IN)155 b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i(\(handle\))75
797 y Fo(int)23 b(MPI)p 245 797 15 2 v 17 w(Win)p 334 797 V
17 w(barrier\()g(int)g(flag,)g(MPI)p 876 797 V 17 w(Win)h(win\))75
884 y(MPI)p 150 884 V 17 w(WIN)p 239 884 V 17 w(BARRIER\(FLAG,)e(WIN,)h
(IERROR\))170 940 y(INTEGER)g(FLAG,)h(WIN,)f(IERROR)-117 977
y Fq(>)15 b Fp(\(Oct\))75 1027 y Fo(int)23 b(MPI::Win::barrier\(int)e(flag\))
-117 1067 y Fq(?)15 b Fp(\(Oct\))166 1113 y Fu(The)h(MPI)h(call)g
Fm(MPI)p 535 1113 14 2 v 16 w(WIN)p 639 1113 V 16 w(BARRIER\(\015ag,)g(win\))
f Fu(sync)o(hronizes)h(RMA)g(calls)g(on)f Fm(win)p Fu(.)23
b(The)17 b(call)75 1170 y(is)g(collectiv)o(e)g(on)f(the)h(group)e(of)h
Fm(win)p Fu(.)23 b(All)17 b(RMA)f(op)q(erations)h(on)f Fm(win)g
Fu(that)f(w)o(ere)h(started)g(b)q(efore)g(the)75 1226 y(barrier)i(call)i
(will)f(b)q(e)g(completed)g(at)f(their)h(origin)f(b)q(efore)h(the)f(barrier)h
(call)g(returns)f(at)f(the)i(origin.)75 1283 y(They)e(will)h(b)q(e)f
(completed)g(at)f(their)h(target)e(b)q(efore)i(the)f(barrier)h(call)g
(returns)f(at)g(the)h(target.)22 b(RMA)75 1339 y(op)q(erations)13
b(on)h Fm(win)f Fu(started)g(b)o(y)g(a)g(pro)q(cess)g(after)g(the)g(barrier)g
(call)i(returned)e(will)i(access)e(their)h(target)75 1396 y(windo)o(w)h(only)
h(after)f(the)g(barrier)g(call)i(returned)e(on)g(the)h(target.)166
1452 y(The)f Fm(\015ag)g Fu(argumen)o(t)g(has)g(one)g(of)g(three)g(v)m
(alues:)75 1546 y Fl(MPI)p 184 1546 16 2 v 18 w(STR)o(ONG)23
b Fu(The)17 b(call)g(to)f Fm(MPI)p 767 1546 14 2 v 16 w(WIN)p
871 1546 V 16 w(BARRIER)i Fu(b)q(eha)o(v)o(es)e(as)g(a)g(\\true")g(barrier:)
22 b(no)17 b(pro)q(cess)189 1602 y(exits)e(the)g(barrier)h(un)o(til)g(all)g
(pro)q(cesses)g(in)g(the)f(group)g(of)g Fm(win)g Fu(reac)o(hed)h(the)f
(barrier.)75 1696 y Fl(MPI)p 184 1696 16 2 v 18 w(WEAK)23 b
Fu(The)17 b(call)i(sync)o(hronizes)f(RMA)g(calls)h(on)e Fm(win)p
Fu(,)h(as)f(explained)j(ab)q(o)o(v)o(e.)26 b(Ho)o(w)o(ev)o(er,)17
b(it)189 1753 y(need)d(not)f(act)g(as)g(a)g(true)g(barrier)h(with)f(resp)q
(ect)h(to)f(other)g(op)q(erations)h(\(lo)q(cal)g(accesses)f(or)g(other)189
1809 y(MPI)i(calls\).)-526 b Fq(>)15 b Fp(\(Oct\))75 1903 y
Fl(MPI)p 184 1903 V 18 w(NOCHECK)23 b Fu(The)16 b(call)h(enforces)e(correct)h
(termination)g(of)f(previously)j(started)d(MPI)g(calls,)189
1959 y(but)g(do)q(es)g(not)g(dela)o(y)h(RMA)f(calls)i(issued)f(after)e(the)i
(barrier.)-1384 b Fq(?)15 b Fp(\(Oct\))166 2053 y Fu(All)h(pro)q(cesses)g
(pro)o(vide)g(the)f(same)g Fm(\015ag)g Fu(v)m(alue.)-1106 b
Fq(>)15 b Fp(\(Oct\))166 2110 y Fu(Consider)23 b(an)g(RMA)g(comm)o(unication)
h(phase)f(where)g(pro)q(cess)h Fo(i)e Fu(accesses)i(windo)o(ws)f(at)f(the)75
2166 y Fo(tocounts[i])d Fu(pro)q(cesses)i(listed)h(in)f(the)g(arra)o(y)f
Fo(toranks[i])p Fu(,)g(and)h(the)f(windo)o(w)h(at)f(pro)q(cess)h
Fo(i)f Fu(is)75 2222 y(accessed)15 b(b)o(y)f(the)h Fo(fromcount[i])d
Fu(pro)q(cesses)j(listed)h(in)f(the)f(arra)o(y)f Fo(fromranks[i])p
Fu(.)18 b(Then,)d(the)f(co)q(de)75 2279 y(fragmen)o(t)75 2373
y Fo(MPI_Win_barrier\(flag1,win\))o(;)75 2429 y(for\(i=0;)23
b(i<)g(tocount[myrank];)f(i++\))123 2486 y(MPI_Put\(...,dest[i],...,)o
(win\);)75 2542 y(MPI_Win_barrier\(flag2,win\))o(;)75 2636
y Fu(is)16 b(equiv)m(alen)o(t)h(to)d(the)h(follo)o(wing)h(co)q(de)1967
46 y Fp(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967
328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 23 23
bop 75 -100 a Fk(5.4.)34 b(SYNCHR)o(ONIZA)l(TION)17 b(CALLS)1031
b Fu(23)75 49 y Fo(MPI_Win_post\(fromcount[myr)o(ank],)21 b
(fromranks[myrank],)g(flag1,)i(win\);)75 106 y(MPI_Win_start\(tocount[myra)o
(nk],)e(toranks[myrank],)g(flag1,)i(win\);)75 162 y(for\(i=0;)g(i<)g
(tocount[myrank];)f(i++\))123 219 y(MPI_Put\(...,dest[i],...,)o(win\);)75
275 y(MPI_Win_complete\(win\);)75 332 y(MPI_Win_wait\(win\);)1875
375 y Fq(?)16 b Fp(\(Oct\))75 490 y Fe(5.4.3)49 b(Lo)q(ck)75
671 y Fm(MPI)p 160 671 14 2 v 16 w(WIN)p 264 671 V 16 w(LOCK\(lo)q(ck)p
494 671 V 16 w(t)o(yp)q(e,)16 b(rank,)f(\015ag,)f(win\))117
748 y Fj(IN)155 b Fm(lo)q(ck)p 398 748 V 17 w(t)o(yp)q(e)413
b Fj(either)10 b Fh(MPI)p 1095 748 13 2 v 15 w(LOCK)p 1219
748 V 14 w(EX)o(CLUSIVE)d Fj(or)i Fh(MPI)p 1579 748 V 15 w(LOCK)p
1703 748 V 14 w(SHARED)117 823 y Fj(IN)155 b Fm(rank)504 b
Fj(rank)14 b(of)f(lo)q(c)o(k)o(ed)h(windo)o(w)f(\(in)o(teger\))117
898 y(IN)155 b Fm(\015ag)518 b Fj(\015ag)14 b(argumen)o(t)e(\(in)o(t\))117
973 y(IN)155 b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i(\(handle\))75
1097 y Fo(int)23 b(MPI)p 245 1097 15 2 v 17 w(Win)p 334 1097
V 17 w(lock\(int)g(lock)p 662 1097 V 16 w(type,)h(int)f(rank,)g(int)h(flag,)f
(MPI)p 1371 1097 V 17 w(Win)g(win\))75 1184 y(MPI)p 150 1184
V 17 w(WIN)p 239 1184 V 17 w(LOCK\()g(LOCK)p 495 1184 V 16
w(TYPE,)h(RANK,)f(FLAG,)g(WIN,)g(IERROR\))170 1240 y(INTEGER)g(RANK,)h(LOCK)p
604 1240 V 16 w(TYPE,)f(RANK,)h(FLAG,)f(WIN,)g(IERROR)1875
1277 y Fq(>)16 b Fp(\(Oct\))75 1327 y Fo(int)23 b(MPI::Win::lock\(int)f(lock)
p 723 1327 V 16 w(type,)i(int)f(rank,)g(int)h(flag\))1875 1367
y Fq(?)16 b Fp(\(Oct\))166 1413 y Fu(Starts)i(a)h(sequence)h(of)e(RMA)i
(accesses)f(to)f(the)h(windo)o(w)h(asso)q(ciated)f(with)g Fm(\(win,)h(rank\))
p Fu(.)31 b(The)75 1470 y(call)17 b(also)e(ensures)h(that)f(an)o(y)h(RMA)f
(access)h(to)f(the)h(windo)o(w)f(asso)q(ciated)h(with)g Fm(\(win,)g(rank\))f
Fu(that)g(w)o(as)75 1526 y(protected)i(b)o(y)h(a)f(previously)i(released,)f
(con\015icting)h(lo)q(c)o(k)f(will)i(ha)o(v)o(e)d(completed)h(at)f(the)g
(target.)26 b(As)75 1583 y(for,)12 b Fm(MPI)p 240 1583 14 2
v 16 w(ST)l(ART)h(\015ag)f Fu(can)g(ha)o(v)o(e)g(the)g(three)h(v)m(alues)g
Fh(MPI)p 1069 1583 13 2 v 14 w(STRONG,)e(MPI)p 1347 1583 V
14 w(WEAK)h Fu(and)g Fh(MPI)p 1654 1583 V 14 w(NOCHECK)p Fu(.)75
1639 y(If)k Fm(\015ag)f(=)g(MPI)p 340 1639 14 2 v 16 w(STRONG)p
Fu(,)h(then)g(the)f(lo)q(c)o(k)h(call)g(blo)q(c)o(ks)g(un)o(til)h(the)e(lo)q
(c)o(k)h(is)g(actually)g(acquired.)21 b(If)15 b Fm(\015ag)75
1696 y(=)k(MPI)p 214 1696 V 15 w(WEAK)g Fu(then)f(the)h(call)g(to)f
Fm(MPI)p 795 1696 V 16 w(WIN)p 899 1696 V 16 w(LOCK)g Fu(ma)o(y)f(return,)i
(ev)o(en)g(if)f(the)h(target)e(windo)o(w)h(is)75 1752 y(lo)q(c)o(k)o(ed.)24
b(Ho)o(w)o(ev)o(er,)15 b(the)i(actual)f(RMA)h(data)f(transfer)f(will)j(b)q(e)
f(dela)o(y)o(ed)h(un)o(til)f(the)g(lo)q(c)o(k)f(is)h(acquired.)75
1808 y(If)d Fm(\015ag)g(=)g(MPI)p 336 1808 V 16 w(NOCHECK)p
Fu(,)g(then)g(no)g(lo)q(c)o(k)h(need)g(b)q(e)f(acquired.)21
b(It)14 b(is)g(up)g(to)g(the)g(user)g(to)f(ensure)i(that)75
1865 y(no)g(con\015icting)i(lo)q(c)o(k)f(is)f(held)i(or)d(acquired)j
(concurren)o(tly)l(.)189 1971 y Fn(A)n(dvic)n(e)22 b(to)i(implementors.)88
b Fu(The)23 b(\015ag)g(argumen)o(t)f(ma)o(y)h(b)q(e)h(ignored)f(b)o(y)h
(implemen)o(tors;)189 2027 y(it)c(is)h(alw)o(a)o(ys)e(correct)h(\(alb)q(eit,)
i(ine\016cien)o(t\))f(to)f(implemen)o(t)h Fm(MPI)p 1363 2027
V 16 w(WIN)p 1467 2027 V 16 w(ST)l(ART)g Fu(as)f(if)h Fm(\015ag)f(=)189
2084 y(MPI)p 274 2084 V 15 w(STRONG)p Fu(.)d(\()p Fn(End)e(of)i(advic)n(e)f
(to)g(implementors.)p Fu(\))75 2284 y Fm(MPI)p 160 2284 V 16
w(WIN)p 264 2284 V 16 w(UNLOCK\()f(rank,)g(win\))117 2361 y
Fj(IN)155 b Fm(rank)504 b Fj(rank)14 b(of)f(windo)o(w)g(\(in)o(teger\))117
2436 y(IN)155 b Fm(win)522 b Fj(windo)o(w)13 b(ob)r(ject)i(\(handle\))75
2561 y Fo(int)23 b(MPI)p 245 2561 15 2 v 17 w(Win)p 334 2561
V 17 w(unlock\(int)f(rank,)i(MPI)p 829 2561 V 16 w(Win)g(win\))75
2647 y(MPI)p 150 2647 V 17 w(WIN)p 239 2647 V 17 w(UNLOCK\(RANK,)e(WIN,)h
(IERROR\))170 2704 y(INTEGER)g(RANK,)h(WIN,)f(IERROR)-32 46
y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32
328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40
611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119
y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627
y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40
2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 24 24
bop 75 -100 a Fu(24)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)1875 81 y Fq(>)g Fp(\(Oct\))75 131 y Fo(int)23
b(MPI::Win::unlock\(int)f(rank\))-117 165 y Fq(?)15 b Fp(\(Oct\))166
217 y Fu(Completes)k(at)f(the)h(origin)g(a)f(sequence)i(of)e(RMA)h(accesses)g
(to)f(the)h(windo)o(w)g(asso)q(ciated)g(with)75 274 y Fm(\(win,)c(rank\))p
Fu(.)166 330 y(RMA)k(accesses)g(that)f(are)h(protected)f(b)o(y)h(an)g
(exclusiv)o(e)h(lo)q(c)o(k)g(will)g(not)e(b)q(e)i(concurren)o(t)f(at)f(the)75
387 y(target)c(with)h(other)f(RMA)h(accesses)g(to)f(the)h(same)g(windo)o(w.)
20 b(RMA)15 b(accesses)g(that)f(are)g(protected)h(b)o(y)75
443 y(a)h(shared)h(lo)q(c)o(k)g(will)h(not)e(b)q(e)i(concurren)o(t)e(at)g
(the)h(target)e(with)i(accesses)g(protected)f(b)o(y)h(an)f(exclusiv)o(e)75
500 y(lo)q(c)o(k)g(to)e(the)i(same)e(windo)o(w.)166 556 y(Consider)i(the)f
(sequence)h(of)f(calls)h(in)g(the)g(example)g(b)q(elo)o(w.)75
650 y Fl(Example)i(5.6)75 756 y Fo(MPI_LOCK\(rank,)k(MPI_EXCLUSIVE,)g(flag,)h
(win\))75 813 y(MPI_PUT\(...,)f(rank,)h(...,)h(win\))75 869
y(MPI_UNLOCK\(rank,)e(win\))75 1013 y Fu(The)15 b(call)h(to)f
Fm(MPI)p 392 1013 14 2 v 16 w(WIN)p 496 1013 V 16 w(UNLOCK)g

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
Fu(will)h(blo)q(c)o(k)g(un)o(til)g(the)f(put)h(transfer)e(completed)i(at)e
(the)h(origin.)21 b(If)75 1069 y Fm(\015ag)d(=)h(MPI)p 301
1069 V 15 w(STRONG)p Fu(,)h(then)e(the)h(call)g(to)f Fm(MPI)p
944 1069 V 15 w(WIN)p 1047 1069 V 17 w(LOCK)f Fu(will)j(blo)q(c)o(k)f(un)o
(til)h(a)d(lo)q(c)o(k)i(is)g(acquired)75 1126 y(on)j(the)g(target)f(windo)o
(w.)40 b(On)22 b(the)g(other)g(hand,)i(if)e Fm(\015ag)g(=)g(MPI)p
1283 1126 V 16 w(WEAK)p Fu(,)f(then)i(it)f(is)g(up)h(to)e(the)75
1182 y(implemen)o(tation)i(whether)f(the)g(call)h(is)f(blo)q(c)o(king.)41
b(An)22 b(implemen)o(tation)h(ma)o(y)e(ha)o(v)o(e)g(the)h(call)h(to)75
1239 y Fm(MPI)p 160 1239 V 16 w(WIN)p 264 1239 V 16 w(LOCK)14
b Fu(blo)q(c)o(k)g(un)o(til)h(an)f(exclusiv)o(e)i(lo)q(c)o(k)e(on)g(the)g
(windo)o(w)h(is)f(acquired.)20 b(It)14 b(could)h(p)q(ostp)q(one)75
1295 y(lo)q(c)o(k)f(acquisition)i(un)o(til)f(the)f(call)g(to)g
Fm(MPI)p 800 1295 V 15 w(PUT)g Fu(o)q(ccurs;)h(or)e(it)h(could)h(p)q(ostp)q
(one)f(lo)q(c)o(k)g(acquisition)i(and)75 1351 y(the)f(up)q(date)h(to)f(the)g
(windo)o(w)g(un)o(til)i(the)e(call)h(to)f Fm(MPI)p 1015 1351
V 16 w(WIN)p 1119 1351 V 16 w(UNLOCK)g Fu(o)q(ccurs.)166 1408
y(Lo)q(c)o(ks)g(can)h(also)f(b)q(e)h(used)f(to)g(protect)g(lo)q(cal)h
(load/store)f(accesses)g(to)g(a)g(windo)o(w.)-1718 b Fq(>)15
b Fp(\(Oct\))166 1464 y Fu(Implemen)o(tors)d(ma)o(y)g(restrict)f(the)h(use)h
(of)e(RMA)h(comm)o(unication)h(that)e(is)h(sync)o(hronized)i(b)o(y)d(lo)q(c)o
(k)75 1521 y(calls)16 b(to)f(windo)o(ws)g(in)h(memory)f(allo)q(cated)h(b)o(y)
f Fm(MPI)p 985 1521 V 16 w(MEM)p 1108 1521 V 16 w(ALLOC)p Fu(.)189
1627 y Fn(R)n(ationale.)40 b Fu(The)15 b(implemen)o(tation)h(of)f(3-part)o(y)
f(comm)o(unication)h(requires)h(an)f(async)o(hronous)189 1684
y(agen)o(t.)30 b(Suc)o(h)20 b(agen)o(t)e(can)h(b)q(e)g(implemen)o(ted)i(more)
e(easily)l(,)h(and)f(can)g(ac)o(hiev)o(e)h(b)q(etter)f(p)q(erfor-)189
1740 y(mance,)c(if)g(restricted)h(to)e(sp)q(ecially)k(allo)q(cated)e(memory)l
(.)189 1815 y(The)f(do)o(wnside)g(of)g(this)g(decision)i(is)e(that)f(3-part)o
(y)g(comm)o(unication)h(cannot)g(b)q(e)h(used)f(without)189
1872 y(taking)h(adv)m(an)o(tage)h(of)f(nonstandard)h(F)l(ortran)e(features:)
23 b(namely)l(,)18 b(the)f(a)o(v)m(ailabilit)o(y)h(of)f(C-lik)o(e)189
1928 y(p)q(oin)o(ters;)k(3-part)o(y)e(comm)o(unication)h(cannot)f(b)q(e)h
(targetted)e(to)h Fh(COMMON)g Fu(blo)q(c)o(ks,)h(or)f(other)189
1985 y(statically)d(declared)g(F)l(ortran)e(arra)o(ys.)19 b(\()p
Fn(End)c(of)i(r)n(ationale.)p Fu(\))166 2131 y Fg(Alternativ)o(es)o(:)134
2206 y Fj(1.)22 b(Remo)o(v)o(e)12 b(the)i(escap)q(e)i(clause)e(and)g(mandate)
f(supp)q(ort)h(for)g(3-part)o(y)f(comm)o(unication.)134 2281
y(2.)22 b(Allo)o(w)12 b(the)j(escap)q(e)g(clause)g(only)e(on)g(F)m(ortran)h
(systems)g(with)g(\\true")g(p)q(oin)o(ters.)134 2356 y(3.)22
b(Add)15 b(supp)q(ort)h(to)f(\\true")h(p)q(oin)o(ters)g(as)f(one)h(of)e(the)i
(requiremen)o(ts)g(w)o(e)f(ha)o(v)o(e)g(on)g(F)m(ortran.)22
b(W)m(e)15 b(already)189 2405 y(ha)o(v)o(e)d(a)h(list)f(of)g(nonstandard)i
(requiremen)o(ts)f(on)f(F)m(ortran:)18 b(e.g.,)11 b(supp)q(ort)j(for)f(long)f
(names,)f(names)h(with)189 2455 y(underscores,)k(c)o(heating)e(on)f(t)o(yp)q
(e)i(matc)o(hing,)c(address)k(sized)g(in)o(tegers,)g(etc.)k(This)13
b(will)g(b)q(e)h(one)h(more)e(of)189 2505 y(those.)-117 2577
y Fq(?)i Fp(\(Oct\))1967 46 y(1)1967 103 y(2)1967 159 y(3)1967
215 y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967
498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949 y(17)1959
1006 y(18)1959 1062 y(19)1959 1119 y(20)1959 1175 y(21)1959
1232 y(22)1959 1288 y(23)1959 1345 y(24)1959 1401 y(25)1959
1457 y(26)1959 1514 y(27)1959 1570 y(28)1959 1627 y(29)1959
1683 y(30)1959 1740 y(31)1959 1796 y(32)1959 1853 y(33)1959
1909 y(34)1959 1966 y(35)1959 2022 y(36)1959 2078 y(37)1959
2135 y(38)1959 2191 y(39)1959 2248 y(40)1959 2304 y(41)1959
2361 y(42)1959 2417 y(43)1959 2474 y(44)1959 2530 y(45)1959
2587 y(46)1959 2643 y(47)1959 2699 y(48)p eop
%%Page: 25 25
bop 75 -100 a Fk(5.5.)34 b(SEMANTICS)16 b(AND)f(CORRECTNESS)896
b Fu(25)75 49 y Fr(5.5)59 b(Semantics)18 b(and)i(Co)n(rrectness)75
151 y Fu(An)f(access)f(b)o(y)h(pro)q(cess)f(A)h(to)f(a)g(windo)o(w)g
Fm(\(win,)h(rank\))f Fn(pr)n(e)n(c)n(e)n(des)f Fu(an)i(access)f(b)o(y)h(pro)q
(cess)f(B)h(to)f(that)75 207 y(same)d(windo)o(w)g(if)h(one)f(of)g(the)g
(follo)o(wing)h(conditions)h(hold:)131 301 y(1.)22 b(A)e(executed)i(a)e(call)
i(to)d Fm(MPI)p 714 301 14 2 v 16 w(WIN)p 818 301 V 16 w(BARRIER\(...,win\))h
Fu(after)g(its)h(access)g(completed,)h(and)f(B)189 357 y(completed)16
b(a)f(matc)o(hing)g(barrier)g(call)i(b)q(efore)e(its)g(access)h(started.)131
451 y(2.)22 b(A)e(released)i(its)f(lo)q(c)o(k)g(on)g(the)f(windo)o(w,)i
(calling)h Fm(MPI)p 1162 451 V 15 w(WIN)p 1265 451 V 17 w(UNLOCK\(win,)e
(rank\))p Fu(,)h(after)e(its)189 508 y(access,)c(B)h(acquired)h(that)d(lo)q
(c)o(k,)i(completing)h(a)e(call)i(to)e Fm(MPI)p 1279 508 V
16 w(WIN)p 1383 508 V 16 w(LOCK\(win,)g(...,)f(rank,)i(...\))p
Fu(,)189 564 y(after)f(A)g(released)i(it,)f(and)g(b)q(efore)g(its)g(o)o(wn)f
(access,)h(and)g(at)f(least)h(one)g(of)g(the)f(pro)q(cesses)i(held)189
621 y(the)d(lo)q(c)o(k)h(exclusiv)o(ely)l(.)131 714 y(3.)22
b(The)e(access)f(b)o(y)h(A)g(is)g(a)f(load)h(or)g(store,)f(the)h(access)g(b)o
(y)g(B)f(is)i(an)e(RMA)h(op)q(eration,)h(A)e(exe-)189 771 y(cuted)e(a)f(call)
i(to)e Fm(MPI)p 580 771 V 15 w(WIN)p 683 771 V 17 w(POST)h
Fu(after)f(its)g(access,)h(and)g(B)f(completed)i(a)e(matc)o(hing)h(call)h(to)
189 827 y Fm(MPI)p 274 827 V 15 w(WIN)p 377 827 V 17 w(ST)l(ART)e
Fu(after)e(A)h(p)q(osted)h(the)f(windo)o(w)h(and)f(b)q(efore)g(its)h(o)o(wn)e
(access.)131 921 y(4.)22 b(The)c(access)h(b)o(y)f(A)h(is)f(an)h(RMA)f
(access,)h(the)g(access)f(b)o(y)h(B)f(is)h(a)f(load)h(or)f(store,)g(A)g
(executed)189 978 y(a)e(call)i(to)e Fm(MPI)p 455 978 V 16 w(WIN)p
559 978 V 16 w(COMPLETE)h Fu(after)f(its)h(access,)g(and)g(B)g(completed)g(a)
g(matc)o(hing)g(call)h(to)189 1034 y Fm(MPI)p 274 1034 V 15
w(WIN)p 377 1034 V 17 w(W)l(AIT)d Fu(b)q(efore)g(its)h(access.)166
1128 y(W)l(e)f(sa)o(y)f(that)h(u)g Fn(fol)r(lows)g Fu(v)g(if)g(v)g(precedes)h
(u;)f(u)g(and)g(v)g(are)g Fn(c)n(oncurr)n(ent)f Fu(if)i(neither)g(u)f
(precedes)h(v)75 1184 y(nor)f(v)g(precedes)h(u.)166 1241 y(A)f(correct)g(MPI)
g(program)f(m)o(ust)h(ob)q(ey)g(the)h(follo)o(wing)g(constrain)o(ts.)131
1335 y(1.)22 b(An)d(RMA)g(up)q(date)g(\(put)g(or)f(accum)o(ulate\))h(to)f(a)g
(target)g(windo)o(w)h(is)g(not)f(concurren)o(t)h(with)g(a)189
1391 y(store)e(up)q(date)i(to)f(that)f(same)h(windo)o(w.)30
b(Ev)o(en)18 b(up)q(dates)h(to)f(distinct)h(lo)q(cations)g(of)f(the)g(same)
189 1448 y(windo)o(w)d(are)g(prohibited.)131 1541 y(2.)22 b(An)e(RMA)g
(access)g(to)f(a)g(target)g(windo)o(w)h(is)g(not)f(concurren)o(t)h(with)g
(another)g(access)g(to)f(that)189 1598 y(same)f(windo)o(w,)h(if)g(the)f(same)
g(lo)q(cation)h(is)g(accessed)g(b)o(y)g(b)q(oth)f(op)q(erations,)h(and)g(up)q
(dated)g(b)o(y)189 1654 y(at)g(least)h(one)g(of)f(the)h(t)o(w)o(o)e
(accesses.)34 b(The)20 b(only)g(exception)h(to)e(this)h(rule)h(is)f(that)f
(the)h(same)189 1711 y(v)m(ariable)h(can)f(b)q(e)g(up)q(dated)h(b)o(y)f(t)o
(w)o(o)e(concurren)o(t)i Fm(MPI)p 1175 1711 V 16 w(A)o(CCUMULA)l(TE)g
Fu(calls,)i(that)d(use)h(the)189 1767 y(same)15 b(accum)o(ulate)g(op)q
(eration,)g(with)h(the)f(same)g(basic)h(datat)o(yp)q(e.)166
1861 y(In)23 b(addition,)i(the)e(origin)h(bu\013er)e(of)g(an)h(RMA)g(op)q
(eration)g(cannot)f(b)q(e)i(accessed)f(un)o(til)h(that)75 1917
y(op)q(eration)18 b(is)f(kno)o(wn)h(to)e(b)q(e)i(complete)h(at)d(the)i
(origin,)g(at)f(the)g(ensuing)i(sync)o(hronization)f(with)g(the)75
1974 y(exception)h(that)e(t)o(w)o(o)f(concurren)o(t)h(put)h(or)f(accum)o
(ulate)h(op)q(erations)g(ma)o(y)f(ha)o(v)o(e)g(o)o(v)o(erlapping)h(origin)75
2030 y(bu\013ers.)166 2087 y(If)i(a)g(program)e(ob)q(eys)j(these)f
(restrictions,)h(then)f(RMA)g(op)q(erations)g(will)i(ha)o(v)o(e)d(the)h
(follo)o(wing)75 2143 y(b)q(eha)o(vior:)166 2200 y(A)c(read)g(r)g(\(get)g(or)
g(load\))g(from)f(a)h(lo)q(cation)h(in)g(the)f(windo)o(w)h(will)h(return)e
(the)g(v)m(alue)i(written)e(b)o(y)75 2256 y(a)f(write)g(w)g(\(put,)g(accum)o
(ulate)g(or)g(store\))f(to)h(that)f(lo)q(cation)i(if)75 2313
y(The)f(write)h(w)f(precedes)h(the)f(read)g(r,)g(and)75 2369
y(an)o(y)g(other)g(write)g(w')g(to)f(that)h(lo)q(cation)h(either)g(precedes)g
(the)f(write)g(w)g(or)g(follo)o(ws)g(the)g(read)h(r.)166 2426
y(A)f(program)f(is)i(erroneous)f(if)h(it)f(con)o(tains)g(a)g(write)h(that)e
(do)q(es)i(not)e(satisfy)h(these)h(conditions.)189 2532 y Fn(R)n(ationale.)57
b Fu(The)18 b(correctness)g(criteria)h(deal)g(only)f(with)h(con\015icts)g
(that)e(in)o(v)o(olv)o(e)i(RMA)f(op-)189 2588 y(erations.)33
b(Con\015icts)21 b(b)q(et)o(w)o(een)f(b)q(et)o(w)o(een)g(load/store)f
(accesses)i(to)e(a)g(windo)o(w)h(will)i(b)q(e)f(dealt)189 2645
y(according)16 b(to)g(the)g(shared)g(memory)g(seman)o(tics)g(of)g(the)g
(underlying)i(arc)o(hitecture,)e(whic)o(h)h(are)189 2701 y(outside)e(the)h
(scop)q(e)f(of)g(MPI.)-32 46 y Fp(1)-32 103 y(2)-32 159 y(3)-32
215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32
498 y(9)-40 554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40
780 y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40
1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288
y(23)-40 1345 y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40
1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796
y(32)-40 1853 y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40
2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304
y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40
2587 y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 26 26
bop 75 -100 a Fu(26)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)525 4 y
14208860 10514554 0 0 20260782 15064023 startTexFig
525 4 a
%%BeginDocument: symmetric.eps
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {} def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-90.0 255.0 translate
1 -1 scale

/clp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/l {lineto} bind def
/m {moveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
30.000 slw
[133.3] 0 setdash
n 2779 2908 m 5400 3525 l gs col7 0.00 shd ef gr gs col-1 s gr [] 0 setdash
n 5235.10 3439.95 m 5400.00 3525.00 l 5214.48 3527.56 l 5225.29 3484.25 l
5235.10 3439.95 l clp gs 0.00 setgray ef gr gs col-1 s gr
[133.3] 0 setdash
n 5242 2883 m 2621 3500 l gs col7 0.00 shd ef gr gs col-1 s gr [] 0 setdash
n 2806.52 3502.56 m 2621.00 3500.00 l 2785.90 3414.95 l 2796.71 3459.25 l
2806.52 3502.56 l clp gs 0.00 setgray ef gr gs col-1 s gr
[133.3] 0 setdash
n 5321 1099 m 2700 1716 l gs col7 0.00 shd ef gr gs col-1 s gr [] 0 setdash
n 2885.52 1718.56 m 2700.00 1716.00 l 2864.90 1630.95 l 2875.71 1675.25 l
2885.52 1718.56 l clp gs 0.00 setgray ef gr gs col-1 s gr
/Times-Bold findfont 270.00 scalefont setfont
1507 600 m
gs 1 -1 sc (PROCESS 0) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
1845 1200 m
gs 1 -1 sc (post\(1\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
1807 1800 m
gs 1 -1 sc (start\(1\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
1882 2400 m
gs 1 -1 sc (put\(1\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
1710 3000 m
gs 1 -1 sc (complete) col-1 show gr
[133.3] 0 setdash
n 2700 1125 m 5250 1725 l gs col7 0.00 shd ef gr gs col-1 s gr [] 0 setdash
n 5085.09 1639.97 m 5250.00 1725.00 l 5064.48 1727.58 l 5075.28 1684.27 l
5085.09 1639.97 l clp gs 0.00 setgray ef gr gs col-1 s gr
/Times-Bold findfont 270.00 scalefont setfont
2002 3600 m
gs 1 -1 sc (wait) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5595 4200 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
1995 4200 m
gs 1 -1 sc (load) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5107 600 m
gs 1 -1 sc (PROCESS 1) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5445 1200 m
gs 1 -1 sc (post\(0\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5407 1800 m
gs 1 -1 sc (start\(0\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5482 2400 m
gs 1 -1 sc (put\(0\)) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5310 3000 m
gs 1 -1 sc (complete) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
5602 3600 m
gs 1 -1 sc (wait) col-1 show gr
$F2psEnd
restore
%%EndDocument
525 4 a
endTexFig
593 768 a Fu(Figure)f(5.5:)k(Symmetric)d(comm)o(unication)189
905 y(The)11 b(\014rst)g(constrain)o(t)g(on)g(correct)g(RMA)g(accesses)g(ma)o
(y)g(seem)g(unduly)i(restrictiv)o(e,)f(as)f(it)h(forbids)189
962 y(concurren)o(t)20 b(accesses)h(to)g(nono)o(v)o(erlapping)g(lo)q(cations)
h(in)f(a)f(windo)o(w.)37 b(The)21 b(reason)f(for)h(this)189
1018 y(constrain)o(t)14 b(is)h(that,)f(on)g(some)h(arc)o(hitectures,)f
(explicit)j(coherence)f(restoring)e(op)q(erations)h(ma)o(y)189
1074 y(b)q(e)c(needed)h(at)e(sync)o(hronization)h(p)q(oin)o(ts.)19
b(A)11 b(di\013eren)o(t)f(op)q(eration)h(ma)o(y)f(b)q(e)h(needed)h(for)e(lo)q
(cations)189 1131 y(that)g(where)i(lo)q(cally)h(up)q(dated)f(b)o(y)f(stores)f
(and)i(for)f(lo)q(cations)h(that)e(where)i(remotely)f(up)q(dated)h(b)o(y)189
1187 y(put)k(or)f(accum)o(ulate)h(op)q(erations.)23 b(Without)15
b(this)i(constrain)o(t,)e(the)h(MPI)g(library)h(will)g(ha)o(v)o(e)f(to)189
1244 y(trac)o(k)9 b(precisely)k(whic)o(h)f(lo)q(cations)f(in)h(a)e(windo)o(w)
h(where)g(up)q(dated)h(b)o(y)e(a)h(put)g(or)f(accum)o(ulate)h(call.)189
1300 y(The)20 b(additional)h(o)o(v)o(erhead)e(of)g(main)o(taining)i(suc)o(h)f
(information)f(is)i(considered)g(prohibitiv)o(e.)189 1357 y(\()p
Fn(End)15 b(of)i(r)n(ationale.)p Fu(\))75 1478 y Fe(5.5.1)49
b(A)o(tomicit)o(y)75 1564 y Fu(The)14 b(outcome)g(of)f(concurren)o(t)h(accum)
o(ulates)h(to)e(the)h(same)g(lo)q(cation,)h(with)f(the)g(same)g(op)q(eration)
g(and)75 1621 y(basic)f(datat)o(yp)q(e,)f(is)g(as)g(if)h(the)f(accum)o
(ulates)h(where)f(done)h(at)e(that)h(lo)q(cation)h(in)g(some)f(serial)h
(order.)18 b(On)75 1677 y(the)12 b(other)g(hand,)h(if)g(t)o(w)o(o)e(lo)q
(cations)i(are)f(b)q(oth)h(up)q(dated)g(b)o(y)f(t)o(w)o(o)f(accum)o(ulate)i
(calls,)g(then)g(the)f(up)q(dates)75 1734 y(ma)o(y)h(o)q(ccur)h(in)g(rev)o
(erse)g(order)f(at)g(the)h(t)o(w)o(o)e(lo)q(cations.)20 b(Th)o(us,)14
b(there)f(is)h(no)g(guaran)o(tee)f(that)g(the)g(en)o(tire)75
1790 y(call)20 b(to)d Fm(MPI)p 305 1790 14 2 v 16 w(A)o(CCUMULA)l(TE)i
Fu(is)g(executed)h(atomically)l(.)30 b(The)19 b(e\013ect)f(of)g(this)h(lac)o
(k)g(of)f(atomicit)o(y)g(is)75 1847 y(limited:)31 b(The)20
b(previous)g(correctness)g(conditions)h(imply)g(that)e(a)g(lo)q(cation)i(up)q
(dated)g(b)o(y)e(a)h(call)h(to)75 1903 y Fm(MPI)p 160 1903
V 16 w(A)o(CCUMULA)l(TE)p Fu(,)d(cannot)g(b)q(e)h(accessed)g(b)o(y)f(load)g
(or)g(an)g(RMA)h(call)g(other)f(than)g(accum)o(ulate,)75 1959
y(un)o(til)k(the)e Fm(MPI)p 356 1959 V 16 w(A)o(CCUMULA)l(TE)h
Fu(call)g(has)g(completed)g(\(at)e(the)i(target\).)34 b(Di\013eren)o(t)20
b(in)o(terlea)o(vings)75 2016 y(can)h(lead)g(to)f(di\013eren)o(t)h(results)g
(only)g(to)f(the)h(exten)o(t)f(that)g(computer)h(arithmetics)g(are)f(not)h
(truly)75 2072 y(asso)q(ciativ)o(e)16 b(or)e(comm)o(utativ)o(e.)75
2194 y Fe(5.5.2)49 b(Progress)75 2280 y Fu(RMA)16 b(calls)g(should)h(not)e
(blo)q(c)o(k,)h(except)h(when)f(required)g(for)f(sync)o(hronization.)22
b(Consider)17 b(the)e(co)q(de)75 2336 y(fragmen)o(t)g(in)h(Example)h(5.5,)d
(on)i(page)g(19.)21 b(Some)16 b(of)f(the)h(calls)h(ma)o(y)e(blo)q(c)o(k)i(if)
f(the)g(target)e(windo)o(w)i(is)75 2393 y(not)11 b(p)q(osted.)19
b(Ho)o(w)o(ev)o(er,)12 b(if)g(the)g(target)e(windo)o(w)i(is)h(p)q(osted,)f
(then)g(the)g(co)q(de)h(fragmen)o(t)d(m)o(ust)i(complete.)166
2449 y(Consider)k(the)h(co)q(de)f(fragmen)o(t)f(in)i(Example)f(5.6,)f(on)h
(page)g(24.)21 b(Some)16 b(of)g(the)g(calls)h(ma)o(y)e(blo)q(c)o(k)75
2506 y(if)h(another)f(pro)q(cess)h(holds)g(a)f(con\015icting)i(lo)q(c)o(k.)22
b(Ho)o(w)o(ev)o(er,)14 b(if)i(no)f(con\015icting)i(lo)q(c)o(k)f(is)g(held,)h
(then)f(the)75 2562 y(co)q(de)g(fragmen)o(t)e(m)o(ust)g(complete.)166
2619 y(Consider)d(the)g(co)q(de)g(fragmen)o(t)e(in)i(Figure)g(5.5.)17
b(Eac)o(h)11 b(pro)q(cess)f(up)q(dates)h(the)g(windo)o(w)g(of)f(the)g(other)
75 2675 y(pro)q(cess)i(using)g(a)f(put)g(op)q(eration,)h(next)f(accesses)h
(its)f(o)o(wn)g(windo)o(w.)19 b(The)12 b(p)q(ost)f(calls)h(are)f(non)o(blo)q
(c)o(king,)1967 46 y Fp(1)1967 103 y(2)1967 159 y(3)1967 215
y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967 441 y(8)1967
498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959 724
y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949 y(17)1959
1006 y(18)1959 1062 y(19)1959 1119 y(20)1959 1175 y(21)1959
1232 y(22)1959 1288 y(23)1959 1345 y(24)1959 1401 y(25)1959
1457 y(26)1959 1514 y(27)1959 1570 y(28)1959 1627 y(29)1959
1683 y(30)1959 1740 y(31)1959 1796 y(32)1959 1853 y(33)1959
1909 y(34)1959 1966 y(35)1959 2022 y(36)1959 2078 y(37)1959
2135 y(38)1959 2191 y(39)1959 2248 y(40)1959 2304 y(41)1959
2361 y(42)1959 2417 y(43)1959 2474 y(44)1959 2530 y(45)1959
2587 y(46)1959 2643 y(47)1959 2699 y(48)p eop
%%Page: 27 27
bop 75 -100 a Fk(5.5.)34 b(SEMANTICS)16 b(AND)f(CORRECTNESS)896
b Fu(27)75 49 y(and)14 b(should)g(complete.)20 b(Once)15 b(the)e(p)q(ost)h
(calls)g(o)q(ccurred,)g(RMA)g(access)g(to)f(the)g(windo)o(ws)h(is)g(enabled,)
75 106 y(so)i(that)f(eac)o(h)h(pro)q(cess)g(should)h(complete)f(the)g
(sequence)h(of)f(calls)h(start-put-complete.)22 b(Once)17 b(these)75
162 y(are)e(complete,)i(the)f(w)o(ait)f(calls)i(should)g(complete)f(at)f(b)q
(oth)h(pro)q(cesses.)22 b(Th)o(us,)16 b(this)g(comm)o(unication)75
219 y(should)21 b(not)e(deadlo)q(c)o(k,)i(irresp)q(ectiv)o(e)g(of)e(the)g
(amoun)o(t)g(of)g(data)g(transfered.)33 b(Assume,)20 b(in)g(the)g(last)p
Fq(>)c Fp(\(Oct\))75 275 y Fu(example,)h(that)f(the)g(order)g(of)g(the)g(p)q
(ost)h(and)f(start)f(calls)i(is)g(rev)o(ersed,)g(at)e(eac)o(h)i(pro)q(cess.)
23 b(Then,)17 b(the)75 332 y(co)q(de)12 b(ma)o(y)g(deadlo)q(c)o(k,)h(as)e
(eac)o(h)h(pro)q(cess)g(blo)q(c)o(ks)h(on)f(the)g(start)e(call,)k(w)o(aiting)
e(for)f(the)h(matc)o(hing)g(p)q(ost)g(to)75 388 y(o)q(ccur.)19
b(The)13 b(co)q(de)h(will)g(certainly)g(deadlo)q(c)o(k)g(if)f(strong)f(sync)o
(hronization)h(is)h(used,)f(and)g(ma)o(y)f(deadlo)q(c)o(k)75
444 y(ev)o(en)17 b(if)h(w)o(eak)e(sync)o(hronization)i(is)g(used.)26
b(The)17 b(co)q(de)h(will)g(not)f(deadlo)q(c)o(k)h(if)g(the)f(no)q(c)o(hec)o
(k)g(option)g(is)75 501 y(used,)e(but)h(then)f(the)h(put)f(access)g(of)g(one)
h(pro)q(cess)f(ma)o(y)g(o)q(ccur)g(b)q(efore)h(the)f(other)g(pro)q(cess)g(p)q
(osted)h(its)75 557 y(windo)o(w.)1637 b Fq(?)16 b Fp(\(Oct\))75
679 y Fe(5.5.3)49 b(Implem)o(e)o(ntation)14 b(mo)q(del)189
765 y Fn(A)n(dvic)n(e)f(to)h(implementors.)39 b Fu(All)14 b(the)f(material)g
(in)h(this)f(section)g(is)h(an)e(advise)i(to)e(implemen)o(tors)189
821 y(\()p Fn(End)j(of)i(advic)n(e)f(to)g(implementors.)p Fu(\))75
941 y Fm(Distributed)h(Memo)o(r)o(y)75 1027 y Fu(The)h(data)f(transfer)g
(e\013ected)h(b)o(y)g(a)f(put)h(can)g(b)q(e)g(implemen)o(ted)i(in)e(a)g
(distributed)h(memory)e(system)75 1084 y(b)o(y)h(a)f(matc)o(hing)h(pair)h(of)
e(send)i(and)f(receiv)o(e.)29 b(The)18 b(origin)g(pro)q(cess)g(sends)h(the)f
(put)g(request,)g(whic)o(h)75 1140 y(includes)d(the)d(target)f(displacemen)o
(t,)j(coun)o(t)e(and)h(datat)o(yp)q(e)f(argumen)o(ts,)f(to)h(the)g(target)g
(pro)q(cess.)19 b(The)75 1197 y(origin)e(next)f(sends)h(the)g(data)e(using)i
(a)f(call)i(to)e Fm(MPI)p 1001 1197 14 2 v 15 w(ISEND)p Fu(,)g(with)h(the)f
(origin)h(address,)g(coun)o(t,)f(and)75 1253 y(datat)o(yp)q(e)f(argumen)o
(ts.)20 b(The)c(non)o(blo)q(c)o(king)h(send)f(is)g(completed)g(b)o(y)g(a)f(w)
o(ait)g(p)q(osted)h(when)g(the)g(RMA)75 1309 y(completion)j(call)g
Fm(MPI)p 481 1309 V 15 w(WIN)p 584 1309 V 17 w(COMPLETE,)e(MPI)p
954 1309 V 16 w(WIN)p 1058 1309 V 16 w(BARRIER)i Fu(or)e Fm(MPI)p
1420 1309 V 16 w(WIN)p 1524 1309 V 16 w(UNLOCK)h Fu(o)q(ccurs.)75
1366 y(The)h(target)f(pro)q(cess)h(receiv)o(es)g(the)g(put)g(request)g(and)g
(p)q(osts)f(a)g(corresp)q(onding)i(receiv)o(e,)g(using)g(the)75
1422 y(target)14 b(displacemen)o(t,)j(coun)o(t)e(and)h(datat)o(yp)q(e)f
(argumen)o(ts.)20 b(A)15 b(similar)i(sc)o(heme)f(w)o(orks)e(for)h(the)g
(other)75 1479 y(RMA)g(transfers.)166 1535 y(The)k(only)g(non)o(trivial)h
(part)e(of)h(this)g(sc)o(heme)g(is)g(to)f(ensure)i(that)e(the)h(target)e(pro)
q(cess)i(receiv)o(es)75 1592 y(the)c(put)g(request)h(and)f(acts)f(on)h(it,)g
(p)q(osting)h(a)f(receiv)o(e)h(for)e(the)h(data,)f(within)j(a)e(b)q(ounded)h
(amoun)o(t)e(of)75 1648 y(time.)166 1705 y(A)19 b(pure)g(p)q(olling)h
(implemen)o(tation)g(can)f(b)q(e)g(used)g(for)f(2-part)o(y)g(comm)o
(unication,)i(to)e(the)g(same)75 1761 y(extend)i(that)g(a)f(pure)i(p)q
(olling)g(implemen)o(tation)h(can)e(b)q(e)g(used)h(for)e(send-receiv)o(e)j
(comm)o(unication.)75 1818 y(Suc)o(h)17 b(pure)g(p)q(olling)h(implemen)o
(tation)f(requires)g(that)f(the)g(target)f(pro)q(cess)i(p)q(olls)g(for)f(p)q
(ending)i(RMA)75 1874 y(requests)e(when)g(it)g(executes)g(an)o(y)f(MPI)h
(call,)g(and)g(that)f(it)h(p)q(olls)h(for)e(p)q(ending)i(RMA)f(requests)f
(while)75 1930 y(blo)q(c)o(k)o(ed)20 b(on)g(an)o(y)f(MPI)g(call.)34
b(This)20 b(sc)o(heme)g(guaran)o(tees)f(that)f(a)i(put)f(request)h(will)h(b)q
(e)f(ev)o(en)o(tually)75 1987 y(pro)q(cessed,)c(and)f(that)f(deadlo)q(c)o(ks)
i(are)f(not)g(in)o(tro)q(duced)i(b)o(y)e(the)g(implemen)o(tation.)166
2043 y(As)k(for)g(send-receiv)o(e,)i(suc)o(h)f(pure)g(p)q(olling)h(implemen)o
(tation)g(has)e(the)g(defect)h(that,)f(ev)o(en)h(if)f(a)75
2100 y(comm)o(unication)f(is)h(enabled,)g(the)f(comm)o(unication)h(ma)o(y)e
(not)g(complete)h(un)o(til)h(the)f(target)f(pro)q(cess)75 2156
y(executes)f(some)g(MPI)f(call.)23 b(Suc)o(h)16 b(a)g(call)g(is)h(b)q(ound)f
(to)f(o)q(ccur,)h(unless)h(the)f(target)e(pro)q(cess)i(is)g(caugh)o(t)75
2213 y(in)j(an)e(in\014nite)j(lo)q(op,)f(and)f(is)g(lik)o(ely)h(to)f(o)q
(ccur)g(so)q(on,)g(since)h(the)f(target)e(pro)q(cess)i(is)h(in)o(v)o(olv)o
(ed)f(in)h(the)75 2269 y(comm)o(unication,)f(and)f(cannot)g(access)h(the)f
(target)f(windo)o(w)h(b)q(efore)h(it)f(executes)h(an)f(MPI)g(sync)o(hro-)75
2326 y(nization)k(call.)35 b(Ho)o(w)o(ev)o(er,)19 b(the)h(dela)o(y)h(un)o
(til)g(this)f(call)h(o)q(ccurs)f(can)g(b)q(e)h(arbitrarily)f(large.)34
b(This)20 b(is)75 2382 y(similar)g(to)e(the)h(case)g(of)g(a)f(pro)q(cess)h
(that)g(p)q(osts)f(a)h(non)o(blo)q(c)o(king)h(receiv)o(e,)g(but)f(dela)o(ys)h
(the)f(ensuing)75 2439 y(w)o(ait)f(or)h(test,)f(and)h(an)o(y)g(other)f(MPI)h
(call,)i(for)d(an)g(arbitrarily)i(long)f(time.)31 b(The)19
b(situation)g(here)g(is)q Fq(>)d Fp(\(Oct\))75 2495 y Fu(sligh)o(tly)g(w)o
(orse:)j(one)14 b(will)j(ha)o(v)o(e)d(the)h(coun)o(terin)o(tuitiv)o(e)h
(e\013ect)e(that)g(the)h(completion)h(of)e(a)g(get)g(can)h(b)q(e)75
2551 y(dela)o(y)o(ed)h(un)o(til)g(the)f(o)o(wner)g(of)g(the)g(windo)o(w)h
(that)e(is)i(read)f(reuses)g(this)h(windo)o(w.)166 2608 y(Implemen)o(tations)
11 b(can)g(ensure)g(that)e(an)i(enabled)h(comm)o(unication)f(will)h(complete)
f(within)h(a)e(time)75 2664 y(b)q(ound)20 b(that)e(is)i(indep)q(enden)o(t)h
(of)e(the)g(state)f(of)g(other)h(pro)q(cesses)g(b)o(y)g(replacing)i(or)d
(supplemen)o(ting)-32 46 y Fp(1)-32 103 y(2)-32 159 y(3)-32
215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32
498 y(9)-40 554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40
780 y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40
1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288
y(23)-40 1345 y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40
1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796
y(32)-40 1853 y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40
2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304
y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40
2587 y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 28 28
bop 75 -100 a Fu(28)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fu(p)q(olling)h(b)o(y)d(async)o(hronous)g(agen)o
(ts,)g(e.g.,)f(b)o(y)i(using)g(in)o(terrupt)g(receiv)o(es,)g(or)f(b)o(y)g
(using)h(a)f(timer)h(signal)75 106 y(to)g(enforce)g(an)g(upp)q(er)h(b)q(ound)
g(on)g(the)f(w)o(aiting)g(time)h(for)e(p)q(olling.)-1357 b
Fq(?)15 b Fp(\(Oct\))166 162 y Fu(A)j(pure)h(p)q(olling)h(strategy)d(is)i
(clearly)g(unacceptable)h(for)d(3-part)o(y)g(comm)o(unication,)j(since)f(the)
75 219 y(target)10 b(pro)q(cess)h(ma)o(y)g(nev)o(er)g(execute)g(MPI)h(calls)g
(\()p Fm(MPI)p 1030 219 14 2 v 15 w(FINALIZE)e Fu(excepted\).)19
b(This)12 b(case)f(requires)h(an)75 275 y(async)o(hronous)17
b(agen)o(t)g(\(signal)h(handler,)h(p)q(olling)g(thread,)f(etc.\))26
b(that)17 b(pro)q(cesses)h(p)q(ending)h(requests)75 332 y(within)h(a)f(b)q
(ounded)i(amoun)o(t)d(of)h(time.)32 b(A)20 b(go)q(o)q(d)f(qualit)o(y)g
(implemen)o(tation)i(will)g(guaran)o(tee)d(a)h(lo)o(w)75 388
y(b)q(ound.)75 508 y Fm(Sha)o(red)d(Memo)n(ry)75 594 y Fu(Put)23
b(can)h(b)q(e)g(implemen)o(ted)h(in)f(a)g(homogeneous)f(shared)g(memory)g(en)
o(vironmen)o(t)h(b)o(y)f(co)q(de)h(exe-)75 650 y(cuted)d(b)o(y)f(the)g
(calling)i(pro)q(cess.)35 b(Supp)q(ose)21 b(one)f(has,)h(in)g(this)f(en)o
(vironmen)o(t,)i(an)e(implemen)o(tation)75 707 y(of)f(send/receiv)o(e,)i
(using)f(memory-to-memory)e(cop)o(y)l(.)32 b(The)20 b(put)f(op)q(eration)h
(can)f(b)q(e)h(implemen)o(ted)75 763 y(as)g(a)g(\\send")h(from)e(origin)i
(memory)f(to)g(an)g(in)o(termediate)h(bu\013er,)h(implemen)o(ted)g(as)e
(memory-to-)75 820 y(memory)c(cop)o(y)l(,)h(follo)o(w)o(ed)g(b)o(y)g(a)f
(\\receiv)o(e")i(from)e(the)h(in)o(termediate)g(bu\013er)g(to)f(the)h(target)
f(memory)l(,)75 876 y(implemen)o(ted)h(again)f(using)g(memory-to-memory)f
(cop)o(y)l(.)21 b(The)16 b(in)o(termediate)g(cop)o(y)g(can)f(b)q(e)i(a)o(v)o
(oided)75 933 y(\(or)c(pip)q(elined\))j(for)d(simple)i(\(con)o(tiguous\))e
(bu\013ers)g(or)g(with)h(a)f(more)g(elab)q(orate)h(implemen)o(tation.)20
b(On)75 989 y(the)c(other)g(hand,)h(additional)h(cop)o(ying)f(ma)o(y)e(b)q(e)
i(required)h(to)d(a)o(v)o(oid)i(alignmen)o(t)g(problems.)23
b(Similar)75 1045 y(tec)o(hniques)17 b(can)f(b)q(e)h(used)f(for)f(other)h
(systems)f(that)g(supp)q(ort)h(some)g(form)f(of)g(cop)o(ying)i(from)e(lo)q
(cal)i(to)75 1102 y(remote)f(memory)h(\(no)q(de-to-no)q(de)g(DMA,)f
(re\015ectiv)o(e)i(memory)l(,)e(etc.\).)25 b(Progress)16 b(is)h(not)g(an)f
(issue)i(in)75 1158 y(suc)o(h)e(implemen)o(tations.)166 1215
y(An)10 b(additional)i(memory-to-memory)d(cop)o(y)h(b)o(y)g(the)g(target)f
(pro)q(cess)h(is)h(required)g(if)g(b)q(oth)f(pro)q(cesses)75
1271 y(ha)o(v)o(e)i(access)g(to)g(shared)g(memory)l(,)g(but)g(the)h(origin)f
(pro)q(cess)h(cannot)f(access)g(the)g(target)f(windo)o(w.)19
b(This)75 1328 y(cop)o(ying)c(need)g(b)q(e)g(e\013ected)f(in)h(a)f(timely)h
(fashion,)g(using)g(similar)g(mec)o(hanisms)g(as)f(discussed)h(for)f(dis-)75
1384 y(tributed)i(memory)f(implemen)o(tations.)166 1441 y(V)l(arious)g(w)o
(eak)g(memory)g(mo)q(dels)h(in)o(tro)q(duce)g(the)f(follo)o(wing)h
(complexities:)75 1534 y Fl(Ordering)23 b Fu(If)15 b(memory)g(is)h(not)f
(serially)i(consisten)o(t,)e(explicit)i(calls)g(are)e(needed)i(to)d(ensure)i
(that)f(ac-)189 1591 y(cesses)e(b)o(y)h(di\013eren)o(t)f(pro)q(cessors)g(are)
g(ordered)h(correctly)l(,)g(at)e(p)q(oin)o(ts)i(that)f(indicate)i(completion)
189 1647 y(of)f(RMA)i(op)q(erations.)75 1741 y Fl(Coherence)22
b Fu(In)g(man)o(y)e(of)g(the)h(target)e(systems)h(lo)q(cal)i(load/store)e
(accesses)h(are)f(not)h(necessarily)189 1798 y(coheren)o(t)13
b(with)h(remote)f(put/get)g(accesses.)19 b(It)14 b(ma)o(y)e(b)q(e)j(the)e
(case)h(that)e(put/get)h(access)h(shared)189 1854 y(memory)l(,)j(and)h(that)f
(lo)q(cal)h(cac)o(hes)g(are)f(not)g(main)o(tained)i(coheren)o(t)e(with)h
(memory)l(.)27 b(Or,)18 b(that)189 1911 y(a)g(windo)o(w)h(is)h(in)f(priv)m
(ate)h(memory)l(,)f(and)g(a)f(\(noncoheren)o(t\))h(mirror)f(cop)o(y)h(is)g(k)
o(ept)g(in)h(shared)189 1967 y(memory)l(,)14 b(where)i(it)f(can)g(b)q(e)h
(accessed)g(b)o(y)f(other)g(pro)q(cesses.)75 2061 y Fl(A)o(tomicit)o(y)23
b Fu(The)15 b(implemen)o(tation)h(m)o(ust)f(guaran)o(tee)g(that)f(accum)o
(ulates)i(are)f(atomic.)75 2155 y Fl(Gran)o(ularit)o(y)23 b
Fu(Man)o(y)11 b(target)g(systems)g(do)h(not)g(supp)q(ort)g(atomic)g(stores)f
(of)g(arbitrarily)i(sized)g(en)o(tries.)189 2211 y(Load)j(and)h(stores)e(ma)o
(y)h(b)q(e)h(restricted)f(to)g(w)o(ords;)g(and)g(DMA)g(engines)h(ma)o(y)f(b)q
(e)h(restricted)g(to)189 2268 y(cac)o(he)e(line)i(or)e(page)g(transfers.)166
2361 y(The)c(seman)o(tics)f(of)g(RMA)h(op)q(erations)g(allo)o(w)f(us)h(to)f
(asso)q(ciate)g(coherence)i(restoring)e(and)h(memory)75 2418
y(sync)o(hronization)20 b(op)q(erations)e(with)h(RMA)g(sync)o(hronization)g
(calls.)31 b(Th)o(us,)19 b(RMA)g(op)q(erations)g(can)75 2474
y(b)q(e)d(implemen)o(ted)h(e\016cien)o(tly)f(on)f(shared)h(memory)e(systems)h
(with)h(w)o(eak)e(memory)h(seman)o(tics.)166 2531 y(W)l(e)j(\014rst)g
(describ)q(e)i(a)e(generic)h(implemen)o(tation)h(mo)q(del,)f(and)g(then)f
(map)g(this)h(generic)g(imple-)75 2587 y(men)o(tation)c(on)o(to)f(concrete)i
(examples.)166 2644 y(W)l(e)d(assume)h(that)e(the)i(system)f(main)o(tains)h
(t)o(w)o(o)e(copies)i(of)f(eac)o(h)g(RMA)h(windo)o(w:)19 b(a)13
b Fn(private)h Fu(cop)o(y)75 2700 y(and)h(an)g Fn(RMA)g Fu(cop)o(y)l(.)k(A)c
(load)h(accesses)f(the)g(priv)m(ate)h(cop)o(y;)e(a)h(store)f(up)q(dates)h

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
(the)g(priv)m(ate)h(cop)o(y)l(,)f(and)1967 46 y Fp(1)1967 103
y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967
385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959
667 y(12)1959 724 y(13)1959 780 y(14)1959 836 y(15)1959 893
y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959 1119
y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345
y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570
y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796
y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022
y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248
y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474
y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699
y(48)p eop
%%Page: 29 29
bop 75 -100 a Fk(5.5.)34 b(SEMANTICS)16 b(AND)f(CORRECTNESS)896
b Fu(29)75 4 y
28417720 14208860 0 0 42692362 21707980 startTexFig
75 4 a
%%BeginDocument: newindow.eps
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {} def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-90.0 425.0 translate
1 -1 scale

/clp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/l {lineto} bind def
/m {moveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
7.500 slw
n 6000 5100 m 7200 5100 l 7200 5400 l 6000 5400 l clp gs col-1 s gr
/Times-Roman findfont 180.00 scalefont setfont
6150 5325 m
gs 1 -1 sc (? ? ? ? ?) col-1 show gr
[1 50.0] 50.000000 setdash
n 8700 4500 m 8700 4200 l 5700 4200 l 5700 4500 l clp gs col-1 s gr []
0 setdash
30.000 slw
n 6300 3000 m 6600 3900 l gs col-1 s gr
n 6573.91 3513.41 m 6600.00 3900.00 l 6388.92 3575.08 l gs col-1 s gr
7.500 slw
n 6000 4200 m 7200 4200 l 7200 4500 l 6000 4500 l clp gs col7 0.50 shd ef
gr gs col-1 s gr
[1 50.0] 50.000000 setdash
n 8700 5400 m 8700 5100 l 5700 5100 l 5700 5400 l clp gs col-1 s gr []
0 setdash
15.000 slw
[50.0] 0 setdash
n 6600 4575 m 6600 5025 l gs col-1 s gr [] 0 setdash
7.500 slw
n 6630.00 4905.00 m 6600.00 5025.00 l 6570.00 4905.00 l gs col-1 s gr
/Times-Bold findfont 240.00 scalefont setfont
6075 2775 m
gs 1 -1 sc (PUT) col-1 show gr
n 9600 4200 m 10800 4200 l 10800 4500 l 9600 4500 l clp gs col-1 s gr
/Times-Roman findfont 180.00 scalefont setfont
9750 4425 m
gs 1 -1 sc (? ? ? ? ?) col-1 show gr
n 9600 5100 m 10800 5100 l 10800 5400 l 9600 5400 l clp gs col7 0.50 shd ef
gr gs col-1 s gr
[1 50.0] 50.000000 setdash
n 12300 5400 m 12300 5100 l 9300 5100 l 9300 5400 l clp gs col-1 s gr []
0 setdash
[1 50.0] 50.000000 setdash
n 12300 4500 m 12300 4200 l 9300 4200 l 9300 4500 l clp gs col-1 s gr []
0 setdash
30.000 slw
n 9900 6600 m 10200 5700 l gs col-1 s gr
n 9988.92 6024.92 m 10200.00 5700.00 l 10173.91 6086.59 l gs col-1 s gr
15.000 slw
[50.0] 0 setdash
n 10200 5025 m 10200 4575 l gs col-1 s gr [] 0 setdash
7.500 slw
n 10170.00 4695.00 m 10200.00 4575.00 l 10230.00 4695.00 l gs col-1 s gr
/Times-Bold findfont 240.00 scalefont setfont
9525 6975 m
gs 1 -1 sc (STORE) col-1 show gr
30.000 slw
n 1800 3000 m 2100 3900 l gs col-1 s gr
n 2073.91 3513.41 m 2100.00 3900.00 l 1888.92 3575.08 l gs col-1 s gr
n 4200 3900 m 4500 3000 l gs col-1 s gr
n 4288.92 3324.92 m 4500.00 3000.00 l 4473.91 3386.59 l gs col-1 s gr
n 1800 6600 m 2100 5700 l gs col-1 s gr
n 1888.92 6024.92 m 2100.00 5700.00 l 2073.91 6086.59 l gs col-1 s gr
n 4200 5700 m 4500 6600 l gs col-1 s gr
n 4473.91 6213.41 m 4500.00 6600.00 l 4288.92 6275.08 l gs col-1 s gr
7.500 slw
[1 50.0] 50.000000 setdash
n 4800 4500 m 4800 4200 l 1800 4200 l 1800 4500 l clp gs col-1 s gr []
0 setdash
[1 50.0] 50.000000 setdash
n 4800 5400 m 4800 5100 l 1800 5100 l 1800 5400 l clp gs col-1 s gr []
0 setdash
/Times-Bold findfont 240.00 scalefont setfont
1500 2775 m
gs 1 -1 sc (PUT) col-1 show gr
/Times-Bold findfont 240.00 scalefont setfont
4275 2775 m
gs 1 -1 sc (GET) col-1 show gr
/Times-Bold findfont 240.00 scalefont setfont
1500 7050 m
gs 1 -1 sc (STORE) col-1 show gr
/Times-Bold findfont 240.00 scalefont setfont
4200 7050 m
gs 1 -1 sc (LOAD) col-1 show gr
/Times-Bold findfont 240.00 scalefont setfont
2625 5325 m
gs 1 -1 sc (private copy) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
2700 1800 m
gs 1 -1 sc (Window) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
6225 1800 m
gs 1 -1 sc (RMA Update) col-1 show gr
/Times-Bold findfont 270.00 scalefont setfont
9900 1800 m
gs 1 -1 sc (Local Update) col-1 show gr
/Times-Bold findfont 240.00 scalefont setfont
2550 4425 m
gs 1 -1 sc (public copy) col-1 show gr
$F2psEnd
restore
%%EndDocument
75 4 a
endTexFig
533 1002 a Fu(Figure)15 b(5.6:)k(Sc)o(hematic)d(description)g(of)f(windo)o(w)
75 1139 y(p)q(ossibly)j(the)e(RMA)g(cop)o(y;)g(a)f(get)h(accesses)g(the)g
(RMA)g(cop)o(y;)g(a)g(put)g(up)q(dates)h(the)f(RMA)g(cop)o(y)l(,)g(and)75
1196 y(p)q(ossibly)j(the)f(priv)m(ate)g(cop)o(y)l(.)27 b(This)18
b(includes)i(puts)e(and)g(gets)f(issued)h(b)o(y)g(the)f(windo)o(w)h(o)o
(wner.)27 b(The)75 1252 y(mo)q(del)16 b(is)g(illustrated)g(in)g(Figure)g
(5.6.)75 1372 y Fm(Ordering:)45 b Fu(The)23 b(implemen)o(tation)g(m)o(ust)f
(ensure)h(that)f(RMA)g(accesses)h(ha)o(v)o(e)e(completed)j(in)f(the)75
1429 y(RMA)16 b(windo)o(w)g(cop)o(y)g(at)f(those)g(p)q(oin)o(ts)i(in)f(the)g
(execution)h(where)f(RMA)g(op)q(erations)g(are)g(said)g(to)f(b)q(e)75
1485 y(complete)h(at)e(the)i(target.)75 1605 y Fm(Coherence:)46
b Fu(The)21 b(rules)g(on)f(correct)g(use)h(of)f(RMA)h(calls)g(imply)h(that)e
(accesses)g(to)g(windo)o(ws)h(can)75 1661 y(b)q(e)c(divided)h(in)o(to)f
Fn(private)g(ep)n(o)n(chs)p Fu(,)f(where)h(the)f(windo)o(w)h(is)f(accessed)h
(b)o(y)f(loads)h(or)f(stores)f(and)i Fn(glob)n(al)75 1718 y(ep)n(o)n(chs)p
Fu(,)11 b(where)g(the)g(windo)o(w)g(is)g(accessed)h(b)o(y)e(RMA)h(calls.)20
b(A)11 b(priv)m(ate)g(ep)q(o)q(c)o(h)h(starts)d(with)j(a)e(call)i(b)o(y)f
(the)p Fq(>)16 b Fp(\(Oct\))75 1774 y Fu(windo)o(w)g(o)o(wner)f(to)g
Fm(MPI)p 515 1774 14 2 v 16 w(WIN)p 619 1774 V 16 w(BARRIER,)i(MPI)p
934 1774 V 16 w(WIN)p 1038 1774 V 16 w(W)l(AIT)p Fu(,)e(or)h
Fm(MPI)p 1334 1774 V 16 w(WIN)p 1438 1774 V 16 w(LOCK)p Fu(;)f(it)h(ends)g
(with)g(a)75 1831 y(call)g(to)d Fm(MPI)p 297 1831 V 16 w(WIN)p
401 1831 V 16 w(BARRIER,)j(MPI)p 715 1831 V 16 w(WIN)p 819
1831 V 16 w(POST)p Fu(,)f(or)f Fm(MPI)p 1118 1831 V 15 w(WIN)p
1221 1831 V 17 w(UNLOCK)p Fu(,)g(resp)q(ectiv)o(ely)l(.)21
b(A)15 b(public)75 1887 y(ep)q(o)q(c)o(h)i(starts)f(with)h(a)f(call)h(b)o(y)g
(the)g(windo)o(w)f(o)o(wner)g(to)g Fm(MPI)p 1150 1887 V 16
w(WIN)p 1254 1887 V 16 w(BARRIER,)i(MPI)p 1570 1887 V 16 w(WIN)p
1674 1887 V 16 w(POST)p Fu(,)e(or)75 1944 y Fm(MPI)p 160 1944
V 16 w(WIN)p 264 1944 V 16 w(UNLOCK)p Fu(;)f(it)g(ends)h(with)g(a)e(call)j
(to)d Fm(MPI)p 1001 1944 V 16 w(WIN)p 1105 1944 V 16 w(BARRIER,)j(MPI)p
1420 1944 V 15 w(WIN)p 1523 1944 V 16 w(W)l(AIT)p Fu(,)e(or)75
2000 y Fm(MPI)p 160 2000 V 16 w(WIN)p 264 2000 V 16 w(UNLOCK)p
Fu(,)g(resp)q(ectiv)o(ely)l(.)1148 b Fq(?)16 b Fp(\(Oct\))166
2057 y Fu(Coherence)g(is)f(ac)o(hiev)o(ed)h(b)o(y)f(cop)o(ying)h(the)f(RMA)g
(cop)o(y)g(in)o(to)g(the)g(priv)m(ate)h(cop)o(y)f(when)g(a)g(priv)m(ate)75
2113 y(ep)q(o)q(c)o(h)21 b(starts;)g(and)f(cop)o(ying)h(the)f(priv)m(ate)h
(cop)o(y)f(in)o(to)h(the)f(RMA)g(cop)o(y)g(when)h(the)f(priv)m(ate)h(ep)q(o)q
(c)o(h)75 2170 y(ends.)e(There)11 b(is)g(one)g(di\016cult)o(y:)18
b(a)11 b(call)g(to)f Fm(MPI)p 894 2170 V 16 w(WIN)p 998 2170
V 16 w(BARRIER)i Fu(or)e Fm(MPI)p 1346 2170 V 16 w(WIN)p 1450
2170 V 16 w(LOCK)h Fu(b)o(y)f(the)h(windo)o(w)75 2226 y(o)o(wner)g(can)h
(signify)g(the)g(b)q(eginning)i(of)d(either)h(a)f(priv)m(ate)i(or)e(an)g(RMA)
h(ep)q(o)q(c)o(h.)19 b(In)13 b(order)e(to)g(distinguish)75
2282 y(b)q(et)o(w)o(een)j(the)g(t)o(w)o(o,)e(one)i(ma)o(y)f(main)o(tain)i(a)e
Fn(dirty)j(bit)d Fu(that)g(is)i(set)e(when)i(the)f(windo)o(w)g(is)g(up)q
(dated)h(b)o(y)e(a)75 2339 y(put)h(or)g(accum)o(ulate)h(call,)g(and)g(reset)f
(when)h Fm(MPI)p 944 2339 V 16 w(WIN)p 1048 2339 V 16 w(BARRIER)g
Fu(or)f Fm(MPI)p 1403 2339 V 16 w(WIN)p 1507 2339 V 16 w(UNLOCK)h
Fu(is)f(called)75 2395 y(b)o(y)h(the)g(windo)o(w)g(o)o(wner.)k(A)c(call)h(to)
e Fm(MPI)p 803 2395 V 16 w(WIN)p 907 2395 V 16 w(BARRIER)j
Fu(or)d Fm(MPI)p 1264 2395 V 16 w(RWIN)p 1397 2395 V 16 w(UNLOCK)h
Fu(is)h(assumed)f(to)75 2452 y(complete)i(a)e(public)j(ep)q(o)q(c)o(h)f(if)f
(the)g(bit)g(is)h(set,)e(a)h(priv)m(ate)g(ep)q(o)q(c)o(h,)h(otherwise.)22
b(It)16 b(is)g(not)g(necessary)g(to)75 2508 y(cop)o(y)11 b(the)g(en)o(tire)h
(windo)o(w:)18 b(only)12 b(lo)q(cations)g(that)e(ha)o(v)o(e)h(b)q(een)i(up)q
(dated)f(need)g(b)q(e)g(copied.)19 b(Unnecessary)75 2565 y(cop)o(ying)d(can)f
(b)q(e)h(a)o(v)o(oided,)f(in)h(some)f(cases,)g(b)o(y)g(k)o(eeping)h(trac)o(k)
e(of)h(up)q(dated)h(lo)q(cations.)-32 46 y Fp(1)-32 103 y(2)-32
159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32
441 y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40 667 y(12)-40
724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40
1006 y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457 y(26)-40
1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740
y(31)-40 1796 y(32)-40 1853 y(33)-40 1909 y(34)-40 1966 y(35)-40
2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248
y(40)-40 2304 y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40
2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 30 30
bop 75 -100 a Fu(30)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fm(A)o(tomicit)o(y)75 135 y Fu(The)f(atomicit)o
(y)f(of)h(accum)o(ulate)g(up)q(dates)g(can)g(b)q(e)g(guaran)o(teed)g(b)o(y)f
(using)i(an)e(in)o(ternal)i(windo)o(w)f(lo)q(c)o(k.)75 192
y(Since)k(puts)f(and)g(gets)f(cannot)h(con\015ict)h(with)f(accum)o(ulates,)g
(there)g(is)h(no)e(need)i(to)e(c)o(hec)o(k)h(this)g(lo)q(c)o(k)75
248 y(for)g(regular)h(put)g(and)g(get)g(accesses.)31 b(Finer)19
b(lo)q(c)o(king)h(is)g(p)q(ossible,)h(with)e(a)g(more)f(complex)i(lo)q(c)o
(king)75 304 y(proto)q(col.)75 424 y Fm(Granula)o(rit)o(y)-117
463 y Fq(>)15 b Fp(\(Oct\))75 510 y Fu(Supp)q(ose)g(that)e(RMA)h(accesses)g
(are)f(restricted)i(to)e(aligned)i(w)o(ords,)e(and)h(up)q(dates)g(of)g
(smaller)g(en)o(tities)75 567 y(require)20 b(a)f(load-mo)q(dify-store)h
(cycle.)33 b(Then,)21 b(correct)d(b)q(eha)o(vior)i(can)g(b)q(e)g(ac)o(hiev)o
(ed)g(b)o(y)f(protecting)75 623 y(partial)12 b(w)o(ord)e(up)q(dates)i(with)g
(an)f(in)o(ternal)h(windo)o(w)g(lo)q(c)o(k)g(\(can)f(b)q(e)h(the)f(same)g(as)
g(for)g(accum)o(ulate\).)19 b(F)l(ull)75 680 y(w)o(ord)c(up)q(dates)h(need)g
(not)f(b)q(e)h(lo)q(c)o(k)g(protected.)k(Finer)c(lo)q(c)o(k)g(gran)o(ularit)o
(y)f(\(and)g(higher)h(concurrency\))75 736 y(is)g(p)q(ossible)h(b)o(y)e
(using)h(di\013eren)o(t)f(lo)q(c)o(ks)h(for)e(di\013eren)o(t)i(parts)e(of)h
(the)g(windo)o(w.)166 793 y(Indeed,)i(con\015icts)g(ma)o(y)e(only)h(b)q(e)h
(caused)f(b)o(y)g(concurren)o(t)g(RMA)g(op)q(erations)g(that)f(up)q(date)h
(dis-)75 849 y(join)o(t)h(parts)g(of)h(the)f(same)g(w)o(ord.)27
b(This,)18 b(b)q(ecause)h(RMA)f(up)q(dates)g(cannot)f(b)q(e)h(concurren)o(t)g
(to)f(lo)q(cal)75 905 y(up)q(dates)c(to)e(the)h(same)g(windo)o(w,)g(and)g
(true)g(con\015icts)h(b)q(et)o(w)o(en)f(RMA)g(op)q(erations)g(are)g(also)g
(disallo)o(w)o(ed.)75 962 y(Th)o(us,)j(t)o(w)o(o)f(con\015icting)i(accesses)g
(m)o(ust)f(b)q(e)h(partial)f(w)o(ord)g(accesses,)g(and)g(these)h(are)f(lo)q
(c)o(k)g(protected.)75 1018 y(P)o(artial)h(w)o(ord)g(accum)o(ulates)h(are)g
(also)f(protected)h(b)o(y)g(that)f(same)g(lo)q(c)o(k)h(\(this)g(is)g(the)g
(case)g(an)o(yho)o(w)e(if)75 1075 y(the)g(same)g(lo)q(c)o(k)h(is)g(used)f
(for)g(all)h(accum)o(ulates)g(and)f(for)g(partial)g(w)o(ord)g(up)q(dates.\))
166 1131 y(An)20 b(additional)i(problem)f(o)q(ccurs)f(if)h(the)f(windo)o(w)g
(b)q(oundaries)i(are)e(not)f(w)o(ord)h(aligned.)36 b(If)20
b(a)75 1188 y(w)o(ord)f(o)o(v)o(erlaps)g(the)g(windo)o(w)h(b)q(oundary)l(,)g
(then)g(a)f(lo)q(cal)h(access)g(to)f(the)g(part)g(of)g(the)g(w)o(ord)g(that)f
(is)75 1244 y(outside)f(the)g(windo)o(w)g(can)g(b)q(e)g(concurren)o(t)g(with)
g(an)g(RMA)g(access)f(to)g(the)h(part)f(of)h(that)f(w)o(ord)g(that)75
1301 y(is)f(inside)h(the)f(windo)o(w.)20 b(This)15 b(con\015ict)g(is)g(a)o(v)
o(oided)g(if)g(t)o(w)o(o)e(copies)j(\(priv)m(ate)f(and)f(RMA\))h(of)f(this)h
(w)o(ord)75 1357 y(are)g(main)o(tained)h({)f(using)h(the)f(windo)o(w)h(cop)o
(y)f(proto)q(col)g(describ)q(ed)i(ab)q(o)o(v)o(e.)166 1414
y(An)j(implemen)o(tation)h(that)d(c)o(hec)o(ks)i(for)f(out)g(of)g(windo)o(w)h
(b)q(oundary)g(accesses)g(will)h(not)e(su\013er)75 1470 y(additional)e(o)o(v)
o(erheads,)d(as)h(long)g(as)g(the)g(o)o(v)o(erlapping)h(w)o(ord)f(is)g(not)g
(up)q(dated.)166 1526 y(W)l(e)20 b(sp)q(ecialize)i(no)o(w)d(this)h(generic)g
(algorithm)g(to)f(sp)q(eci\014c)i(arc)o(hitectures,)g(with)f(noncoheren)o(t)
75 1583 y(cac)o(hes.)g(There)c(are)e(three)i(cases)f(to)f(consider.)131
1677 y(1.)22 b(RMA)16 b(is)g(implemen)o(ted)h(using)g(non-coheren)o(t)f
(shared)g(memory)l(,)f(with)h(write-through)g(nonco-)189 1733
y(heren)o(t)i(cac)o(hes.)29 b(Both)18 b(lo)q(cal)h(and)f(remote)g(writes)g
(go)f(directly)j(to)d(memory)l(,)h(but)h(b)q(oth)f(lo)q(cal)189
1790 y(and)d(remote)g(reads)g(ma)o(y)f(go)h(to)f(cac)o(he)i(\(Cra)o(y)e(T90,)
g(Cra)o(y)g(T3D?\).)131 1883 y(2.)22 b(RMA)11 b(is)g(implemen)o(ted)h(using)g
(non-coheren)o(t)f(shared)g(memory)l(,)g(with)g(write-bac)o(k)g(noncoheren)o
(t)189 1940 y(cac)o(hes.)18 b(Both)10 b(lo)q(cal)i(and)f(remote)f(accesses)g
(ma)o(y)g(go)g(to)g(cac)o(he,)h(rather)f(than)g(memory)g(\(Mercury)189
1996 y(RA)o(CE)15 b(i860?\).)131 2090 y(3.)22 b(RMA)13 b(is)i(implemen)o(ted)
g(using)f(a)f(non-coheren)o(t)h(DMA)f(engine.)21 b(Remote)14
b(accesses)g(go)f(directly)189 2147 y(to)19 b(memory)l(,)g(whereas)h(lo)q
(cal)h(accesses)e(\(b)q(oth)h(reads)f(and)h(writes\))f(ma)o(y)g(go)g(to)g
(cac)o(he)g(\(NEC)189 2203 y(Cenju-3,)c(Cra)o(y)f(T3D?\).)166
2297 y(In)j(all)h(cases,)f(the)g(RMA)h(cop)o(y)e(of)h(the)g(windo)o(w)g(is)h
(in)f(memory)l(,)g(whereas)g(the)g(priv)m(ate)h(cop)o(y)e(of)75
2353 y(the)f(windo)o(w)f(consists)h(of)f(the)h(v)m(alues)g(in)h(the)e(lo)q
(cal)i(pro)q(cessor)e(cac)o(he,)h(or)f(the)h(v)m(alues)g(in)h(memory)l(,)e
(for)75 2410 y(lo)q(cations)i(that)e(are)h(not)g(cac)o(hed.)166
2466 y(Completing)g(an)g(RMA)f(up)q(date)h(is)g(ac)o(hiev)o(ed)h(b)o(y)e
(\015ushing)i(the)f(cac)o(he)g(of)f(the)g(calling)j(pro)q(cessor,)75
2523 y(so)g(that)f(the)h(up)q(date)h(b)q(ecomes)g(visible)h(in)f(the)f(RMA)g
(windo)o(w.)26 b(Suc)o(h)18 b(\015ush)f(call)i(will)f(b)q(e)g(executed)75
2579 y(as)13 b(part)g(of)f(calls)j(to)d Fm(MPI)p 513 2579 14
2 v 16 w(WIN)p 617 2579 V 16 w(BARRIER,)j(MPI)p 930 2579 V
15 w(WIN)p 1033 2579 V 16 w(COMPLETE)f Fu(and)f Fm(MPI)p 1472
2579 V 16 w(WIN)p 1576 2579 V 16 w(UNLOCK)p Fu(.)g(It)g(is)75
2636 y(su\016cien)o(t)j(to)e(\015ush)i(dirt)o(y)g(cac)o(he)f(lines)i(that)d
(o)o(v)o(erlap)h(the)h(windo)o(w.)1967 46 y Fp(1)1967 103 y(2)1967
159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967 385 y(7)1967
441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959 667 y(12)1959
724 y(13)1959 780 y(14)1959 836 y(15)1959 893 y(16)1959 949
y(17)1959 1006 y(18)1959 1062 y(19)1959 1119 y(20)1959 1175
y(21)1959 1232 y(22)1959 1288 y(23)1959 1345 y(24)1959 1401
y(25)1959 1457 y(26)1959 1514 y(27)1959 1570 y(28)1959 1627
y(29)1959 1683 y(30)1959 1740 y(31)1959 1796 y(32)1959 1853
y(33)1959 1909 y(34)1959 1966 y(35)1959 2022 y(36)1959 2078
y(37)1959 2135 y(38)1959 2191 y(39)1959 2248 y(40)1959 2304
y(41)1959 2361 y(42)1959 2417 y(43)1959 2474 y(44)1959 2530
y(45)1959 2587 y(46)1959 2643 y(47)1959 2699 y(48)p eop
%%Page: 31 31
bop 75 -100 a Fk(5.5.)34 b(SEMANTICS)16 b(AND)f(CORRECTNESS)896
b Fu(31)166 49 y(Cop)o(ying)15 b(of)g(the)g(priv)m(ate)h(cop)o(y)f(to)g(the)g
(RMA)g(cop)o(y)g(is)h(ac)o(hiev)o(ed)g(b)o(y)f(\015ushing)h(the)g(cac)o(he)f
(of)g(the)75 106 y(lo)q(cal)h(pro)q(cessor.)k(It)15 b(is)h(su\016cien)o(t)g
(to)e(\015ush)i(dirt)o(y)f(cac)o(he)h(lines)h(that)d(o)o(v)o(erlap)h(with)h
(the)f(windo)o(w.)166 162 y(Cop)o(ying)e(of)f(the)h(RMA)g(cop)o(y)f(in)o(to)h
(the)g(priv)m(ate)g(cop)o(y)g(is)g(ac)o(hiev)o(ed)h(b)o(y)f(in)o(v)m
(alidating)i(the)d(cac)o(he)h(of)75 219 y(the)h(lo)q(cal)g(pro)q(cessor.)20
b(It)13 b(is)h(su\016cien)o(t)h(to)e(in)o(v)m(alidate)i(the)f(lines)h(that)e
(o)o(v)o(erlap)g(with)h(the)g(windo)o(w,)g(and)75 275 y(are)j(dirt)o(y)g(in)h
(the)f(RMA)h(cop)o(y)l(.)25 b(On)18 b(some)f(systems,)g(\015ush)g(ma)o(y)g(b)
q(e)h(faster)e(than)h(in)o(v)m(alidate.)27 b(Since)75 332 y(the)16
b(lo)q(cal)h(cop)o(y)f(is)h(clean,)g(all)g(the)f(windo)o(w)g(cac)o(he)g
(lines)i(are)e(clean,)h(and)f(a)g(\015ush)g(call)i(ma)o(y)d(b)q(e)i(used,)75
388 y(instead)h(of)f(an)h(in)o(v)m(alidate)i(\(assuming)d(that)g(the)h(cac)o
(he)g(con)o(troller)g(is)g(smart)f(enough)h(not)f(to)g(write)75
444 y(bac)o(k)e(clean)h(cac)o(he)g(lines.\))166 501 y(Tw)o(o)g(windo)o(w)h
(copies)g(ma)o(y)f(also)h(b)q(e)g(used)h(in)f(a)f(shared)h(memory)f(implemen)
o(tation)i(where)f(not)75 557 y(all)f(pro)q(cesses)g(can)g(access)g(all)g
(memory)l(.)21 b(E.g.,)14 b(in)i(the)g(case)f(where)h(a)f(windo)o(w)h(is)g
(in)g(pro)q(cess)g(priv)m(ate)75 614 y(memory)l(,)22 b(one)f(ma)o(y)f(use)h
(an)g(RMA)h(cop)o(y)e(that)h(is)g(in)h(shared)f(memory)g(and)g(is)g
(accessible)i(b)o(y)e(all)75 670 y(pro)q(cesses)16 b(in)h(the)f(comm)o
(unication)g(group.)22 b(Or,)15 b(the)h(RMA)g(cop)o(y)g(could)g(b)q(e)h(in)g
(nonpaged)f(memory)l(,)75 727 y(that)j(is)i(accessible)h(to)d(DMA,)g(whereas)
h(the)g(priv)m(ate)h(cop)o(y)f(is)g(in)h(pageable)g(memory)l(.)34
b(Then,)21 b(the)75 783 y(cop)o(ying)13 b(of)g(one)g(cop)o(y)g(to)f(another)h
(actually)h(requires)f(memory)g(to)f(memory)g(cop)o(y)l(,)i(that)e(can)h(b)q
(e)h(done)75 840 y(b)o(y)j(the)g(windo)o(w)g(o)o(wning)g(pro)q(cess.)25
b(F)l(ull)18 b(windo)o(w)f(cop)o(ying)g(can)g(b)q(e)h(a)o(v)o(oided)f(b)o(y)g
(main)o(taining)g(\014ner)75 896 y(dirt)o(y)e(bits.)20 b(\(Dirt)o(y)13
b(bits)i(for)f(the)h(RMA)g(cop)o(y)f(are)g(main)o(tained)i(b)o(y)e(trac)o
(king)g(the)h(lo)q(cations)g(accessed)75 953 y(b)o(y)g(put)h(or)f(accum)o
(ulate)h(calls)g({)g(this)f(can)h(b)q(e)g(part)f(of)g(the)h(co)q(de)g(for)f
(these)g(calls.)22 b(Dirt)o(y)15 b(bits)h(for)f(the)75 1009
y(lo)q(cal)k(cop)o(y)f(are)g(harder)g(to)g(main)o(tain.)29
b(One)19 b(needs)g(to)f(use)g(tec)o(hniques)h(similar)h(to)d(those)h(used)h
(b)o(y)75 1065 y(soft)o(w)o(are)12 b(implemen)o(tations)i(of)f(distributed)i
(shared)f(memory:)19 b(e.g.,)12 b(use)i(page)f(protection)h(to)f(detect)75
1122 y(lo)q(cal)j(up)q(dates)g(at)f(page)g(gran)o(ularit)o(y)l(.\))75
1244 y Fe(5.5.4)49 b(Registers)15 b(and)i(Compiler)e(Optimizations)75
1329 y Fu(Another)e(coherence)g(problem)h(exists)f(b)q(et)o(w)o(een)g(v)m
(ariables)h(k)o(ept)e(in)i(registers)e(and)h(the)g(memory)f(v)m(alue)75
1386 y(of)19 b(these)g(v)m(ariables.)32 b(An)20 b(RMA)f(call)h(ma)o(y)e
(access)h(a)g(v)m(ariable)h(in)g(memory)f(\(or)f(cac)o(he\),)h(while)i(the)75
1442 y(up-to-date)12 b(v)m(alue)h(of)f(this)h(v)m(ariable)g(is)g(in)g
(register.)18 b(A)12 b(get)g(will)i(not)e(return)g(the)g(latest)g(v)m
(ariable)h(v)m(alue,)75 1499 y(and)i(a)g(put)h(ma)o(y)e(b)q(e)i(o)o(v)o
(erwritten)e(when)i(the)f(register)g(is)h(stored)f(bac)o(k)g(in)h(memory)l(.)
166 1555 y(The)f(problem)h(is)g(illustrated)g(b)o(y)g(the)f(follo)o(wing)h
(co)q(de:)110 1662 y(Source)g(of)f(Pro)q(cess)g(1)240 b(Source)16
b(of)f(Pro)q(cess)g(2)240 b(Executed)16 b(in)g(Pro)q(cess)f(2)110
1726 y(bbbb)i(=)e(777)390 b(bu\013)16 b(=)f(999)414 b(reg)p
1426 1726 14 2 v 16 w(A:=999)110 1783 y(call)17 b(MPI)p 286
1783 V 16 w(PUT\(bbbb)847 b(stop)15 b(appl.)8 b(thread)110
1839 y(in)o(to)16 b(bu\013)f(of)g(pro)q(cess)g(2\))816 b(bu\013:=777)15
b(in)h(PUT)f(handler)1362 1896 y(con)o(tin)o(ue)h(appl.)8 b(thread)110
1952 y(call)17 b(MPI)p 286 1952 V 16 w(WIN)p 399 1952 V 17
w(BARRIER)111 b(call)17 b(MPI)p 912 1952 V 16 w(WIN)p 1025
1952 V 17 w(BARRIER)736 2009 y(ccc)f(=)g(bu\013)422 b(ccc:=reg)p
1534 2009 V 17 w(A)166 2115 y(In)18 b(this)f(example,)h(v)m(ariable)g(bu\013)
f(is)h(allo)q(cated)g(in)g(the)f(register)g(reg)p 1380 2115
V 16 w(A)g(and)g(therefore)g(ccc)g(will)75 2171 y(ha)o(v)o(e)e(the)g(old)h(v)
m(alue)g(of)f(bu\013)g(and)h(not)e(the)i(new)f(v)m(alue)i(777.)166
2228 y(This)11 b(problem,)h(whic)o(h)f(also)g(a\017icts)f(in)i(some)e(cases)h
(send/receiv)o(e)g(comm)o(unication,)h(is)f(discussed)75 2284
y(more)k(at)f(length)i(in)g(Section)g Fl(??)p Fu(.)166 2341
y(MPI)k(implemen)o(tations)i(will)f(a)o(v)o(oid)f(this)h(problem)g(for)e
(standard)h(conforming)h(C)f(programs.)75 2397 y(Some)15 b(F)l(ortran)f
(compilers)i(ma)o(y)f(pro)o(vide)h(mec)o(hanisms)f(to)g(a)o(v)o(oid)g(this)g
(problem,)h(without)f(disabling)75 2454 y(compiler)d(optimizations.)19
b(Ho)o(w)o(ev)o(er,)10 b(In)h(order)f(to)g(a)o(v)o(oid)g(register)h
(coherence)g(problems)g(in)g(a)f(p)q(ortable)75 2510 y(manner,)18
b(users)h(should)g(restrict)e(their)i(use)f(of)g(RMA)g(windo)o(ws)g(to)g(v)m
(ariables)h(stored)e(in)i Fh(COMMON)75 2566 y Fu(blo)q(c)o(ks,)25
b(or)d(to)g(v)m(ariables)h(that)f(w)o(ere)h(declared)g Fh(V)o(OLA)m(TILE)f
Fu(\(while)h Fh(V)o(OLA)m(TILE)f Fu(is)h(no)f(a)g(standard)75
2623 y(F)l(ortran)12 b(declaration,)i(it)f(is)g(supp)q(orted)h(b)o(y)f(man)o
(y)f(F)l(ortran)g(compilers\).)20 b(Details,)13 b(and)h(an)f(additional)75
2679 y(solution)j(are)f(discussed)i(in)f(Section)g Fl(??)j
Fu(on)c(page)g Fl(??)p Fu(.)-32 46 y Fp(1)-32 103 y(2)-32 159
y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32 441
y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40 667 y(12)-40
724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40
1006 y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457 y(26)-40
1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740
y(31)-40 1796 y(32)-40 1853 y(33)-40 1909 y(34)-40 1966 y(35)-40
2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248
y(40)-40 2304 y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40
2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 32 32
bop 75 -100 a Fu(32)728 b Fk(CHAPTER)15 b(5.)30 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)75 49 y Fr(5.6)59 b(Examples)75 151 y Fl(Example)18
b(5.7)k Fu(The)17 b(follo)o(wing)f(example)h(sho)o(ws)e(a)h(generic)h(lo)q
(osely)g(sync)o(hronous,)f(iterativ)o(e)g(co)q(de,)75 207 y(using)h(barrier)f
(sync)o(hronization.)22 b(The)16 b(windo)o(w)g(at)g(eac)o(h)g(pro)q(cess)g
(consists)g(of)f(arra)o(y)g Fo(A)p Fu(,)g(whic)o(h)i(con-)75
264 y(tains)e(the)h(origin)g(and)f(target)f(bu\013ers)h(of)g(the)g(put)g
(calls.)75 357 y Fo(...)75 414 y(while\(!converged\(A\)\){)147
470 y(update\(A\);)147 527 y(MPI_Barrier\(win\);)147 583 y(for\(i=0;)22
b(i)i(<)g(toneighbors;)e(i++\))218 640 y(MPI_Put\(frombuf\(i\),)f(1,)j
(fromtype\(i\),)e(toneighbor\(i\),)672 696 y(todisp\(i\),)g(1,)i
(totype\(i\),)e(win\);)147 753 y(MPI_Barrier\(win\);)147 809
y(})75 903 y Fu(Same)11 b(co)q(de)h(could)h(b)q(e)f(written)f(with)h(get,)f
(rather)g(than)h(put.)18 b(Note)11 b(that,)g(during)i(the)e(comm)o(unication)
75 959 y(phase,)19 b(eac)o(h)f(windo)o(w)g(is)h(concurren)o(tly)f(read)g
(\(as)g(origin)g(bu\013er)g(of)g(puts\))g(and)g(written)g(\(as)f(target)75
1016 y(bu\013er)e(of)g(puts\).)20 b(This)15 b(is)h(OK,)g(pro)o(vided)g(that)e
(there)h(is)h(no)f(o)o(v)o(erlap)g(b)q(et)o(w)o(een)h(bu\013ers.)75
1122 y Fl(Example)i(5.8)k Fu(Same)13 b(generic)g(example,)h(with)e(more)g
(computation/comm)o(unication)h(o)o(v)o(erlap.)19 b(W)l(e)75
1179 y(assume)14 b(that)f(the)g(up)q(date)i(phase)f(is)g(brok)o(en)g(in)g(t)o
(w)o(o)f(subphases:)20 b(the)13 b(\014rst,)h(where)g(the)f(\\b)q(oundary",)75
1235 y(whic)o(h)18 b(is)f(in)o(v)o(olv)o(ed)h(in)f(comm)o(unication,)h(is)f
(up)q(dated,)h(and)f(the)g(second,)g(where)g(the)g(\\core",)f(whic)o(h)75
1291 y(neither)g(use)g(nor)f(pro)o(vide)g(comm)o(unicated)h(data,)e(is)i(up)q
(dated.)75 1385 y Fo(...)75 1442 y(while\(!converged\(A\)\){)147
1498 y(update_boundary\(A\);)147 1555 y(MPI_Win_barrier\(win\);)147
1611 y(for\(i=0;)22 b(i)i(<)g(fromneighbors;)e(i++\))218 1668
y(MPI_Get\(tobuf\(i\),)g(1,)h(totype\(i\),)g(fromneighbor\(i\),)576
1724 y(fromdisp\(i\),)f(1,)i(fromtype\(i\),)e(win\);)147 1780
y(update_core\(A\);)147 1837 y(MPI_Win_barrier\(win\);)147
1893 y(})75 1987 y Fu(The)12 b(get)f(comm)o(unication)h(can)f(b)q(e)h
(concurren)o(t)g(with)g(the)f(core)g(up)q(date,)i(since)f(they)g(do)f(not)g
(access)h(the)75 2044 y(same)j(lo)q(cations,)i(and)f(the)g(lo)q(cal)h(up)q
(date)f(of)f(the)h(origin)h(bu\013er)f(b)o(y)f(the)h(get)g(call)g(can)g(b)q
(e)h(concurren)o(t)75 2100 y(with)g(the)f(lo)q(cal)h(up)q(date)g(of)f(the)g
(core)h(b)o(y)f(the)g Fo(update)p 1041 2100 15 2 v 16 w(core)g
Fu(call.)24 b(In)17 b(order)f(to)g(get)g(similar)h(o)o(v)o(erlap)75
2157 y(with)g(put)h(comm)o(unication)f(w)o(e)g(w)o(ould)h(need)g(to)e(use)i
(separate)e(windo)o(ws)h(for)g(the)g(core)g(and)g(for)g(the)75
2213 y(b)q(oundary)l(.)75 2319 y Fl(Example)h(5.9)k Fu(Same)14
b(co)q(de)g(as)g(in)g(Example)g(5.7,)f(rewritten)h(using)g(w)o(ait-p)q
(ost-start-complete.)19 b(W)l(e)75 2376 y(assume)c(that)g(eac)o(h)g(pro)q
(cess)g(has)g(a)g(list)h(of)f(pro)q(cesses)h(that)e(access)h(its)h(windo)o
(w..)75 2470 y Fo(...)75 2526 y(while\(!converged\(A\)\){)147
2582 y(update\(A\);)147 2639 y(MPI_Win_post\(fromneighb)o(ors,)21
b(fromneighbor,)h(MPI_WEAK,)g(win\);)147 2695 y(MPI_Win_start\(toneighbo)o
(rs,)f(toneighbor,)h(MPI_WEAK,)h(win\);)1967 46 y Fp(1)1967
103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967
385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959
667 y(12)1959 724 y(13)1959 780 y(14)1959 836 y(15)1959 893
y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959 1119
y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345
y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570
y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796
y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022
y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248
y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474
y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699
y(48)p eop
%%Page: 33 33
bop 75 -100 a Fk(5.6.)29 b(EXAMPLES)1398 b Fu(33)147 49 y Fo(for\(i=0;)22
b(i)i(<)g(toneighbors;)e(i++\))290 106 y(MPI_Put\(frombuf\(i\),)f(1,)j
(fromtype\(i\),)e(toneighbor\(i\),)672 162 y(todisp\(i\),)g(1,)i
(totype\(i\),)e(win\);)147 219 y(MPI_Win_complete\(win\);)147
275 y(MPI_Win_wait\(win\);)147 332 y(})75 437 y Fl(Example)c(5.10)23
b Fu(Same)15 b(example,)g(with)h(split)g(phases,)f(as)g(in)h(Example)g(5.8.)
75 530 y Fo(...)75 586 y(while\(!converged\(A\)\){)147 643
y(update_boundary\(A\);)147 699 y(MPI_Win_post\(toneighbor)o(s,)21
b(toneighbor,)h(MPI_WEAK,)h(win\);)147 755 y(MPI_Win_start\(fromneigh)o
(bors,)e(fromneighbor,)h(MPI_WEAK,)g(win\);)147 812 y(for\(i=0;)g(i)i(<)g
(fromneighbors;)e(i++\))290 868 y(MPI_Get\(tobuf\(i\),)f(1,)j(totype\(i\),)e
(fromneighbor\(i\),)576 925 y(fromdisp\(i\),)g(1,)i(fromtype\(i\),)e(win\);)
147 981 y(update_core\(A\);)147 1038 y(MPI_Win_complete\(win\);)147
1094 y(MPI_Win_wait\(win\);)147 1151 y(})75 1256 y Fl(Example)c(5.11)23
b Fu(A)12 b(c)o(hec)o(k)o(erb)q(oard,)h(or)f(double)h(bu\013er)g(comm)o
(unication)g(pattern,)f(that)g(allo)o(ws)g(more)75 1312 y(computation/comm)o
(unication)19 b(o)o(v)o(erlap.)30 b(Arra)o(y)17 b Fo(A0)h Fu(is)h(up)q(dated)
h(using)f(v)m(alues)h(of)e(arra)o(y)f Fo(A1)p Fu(,)i(and)75
1369 y(vice)j(v)o(ersa.)38 b(W)l(e)22 b(assume)f(that)g(comm)o(unication)h
(is)g(symmetric:)32 b(if)22 b(pro)q(cess)g(A)f(gets)g(data)g(from)75
1425 y(pro)q(cess)15 b(B,)g(then)h(pro)q(cess)f(B)h(gets)e(data)h(from)f(pro)
q(cess)i(A.)f(Windo)o(w)g Fo(wini)g Fu(consists)g(of)g(arra)o(y)f
Fo(Ai)p Fu(.)75 1518 y Fo(...)75 1574 y(MPI_Win_post\(neighbors,)21
b(neighbor,)h(MPI_NOCHECK,)h(win0\);)75 1631 y(MPI_Barrier\(comm0\);)75
1687 y(while\(!converged\(A0,)e(A1\)\){)147 1744 y(/*)i(communication)f(on)i
(A0)f(and)h(computation)e(on)i(A1)f(*/)147 1800 y(update\(A1,)f(A0\))i(/*)f
(local)g(update)g(of)h(A1)g(that)f(depends)g(on)g(A0)h(\(and)f(A1\))h(*/)170
1857 y(MPI_Win_start\(neighbors,)d(neighbor,)i(MPI_NOCHECK,)f(win1\);)147
1913 y(for\(i=0;)g(i)i(<)g(neighbors;)e(i++\))337 1970 y
(MPI_Get\(tobuf0\(i\),)g(1,)h(totype0\(i\),)g(neighbor\(i\),)528
2026 y(fromdisp0\(i\),)f(1,)i(fromtype0\(i\),)e(win0\);)147
2083 y(update\(A1\);)g(/*)i(local)f(update)g(of)g(A1)h(that)505
2139 y(concurrent)e(with)h(communication)f(that)i(updates)f(A0)g(*/)147
2195 y(MPI_Win_post\(neighbors,)d(neighbor,)j(MPI_NOCHECK,)f(win1\);)147
2252 y(MPI_Win_complete\(win0\);)147 2308 y(MPI_Win_wait\(win0\);)147
2421 y(/*)h(communication)f(on)i(A1)f(and)h(computation)e(on)i(A0)f(*/)147
2478 y(update\(A0,)f(A1\))i(/*)f(local)g(update)g(of)h(A0)g(that)f(depends)g
(on)g(A1)h(\(and)f(A0\)*/)147 2534 y(MPI_Rma_start\(neighbors)o(,)e
(neighbor,)i(MPI_NOCHECKcomm1\);)147 2591 y(for\(i=0;)f(i)i(<)g(neighbors;)e
(i++\))290 2647 y(MPI_Get\(tobuf1\(i\),)f(1,)j(totype1\(i\),)e
(neighbor\(i\),)528 2704 y(fromdisp1\(i\),)g(1,)i(fromtype1\(i\),)e(win1\);)
-32 46 y Fp(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32
328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40
611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119
y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627
y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40
2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 34 34
bop 75 -100 a Fu(34)723 b Fk(CHAPTER)15 b(5.)35 b(ONE-SIDED)16
b(COMMUNICA)l(TIONS)147 49 y Fo(update\(A0\);)22 b(/*)i(local)f(update)g(of)g
(A0)h(that)f(depends)g(on)h(A0)f(only,)505 106 y(concurrent)f(with)h
(communication)f(that)i(updates)f(A1)g(*/)147 162 y(MPI_Win_post\(neighbors,)
d(neighbor,)j(MPI_NOCHECK,)f(win0\);)147 219 y(MPI_Win_complete\(comm1\))o(;)
147 275 y(MPI_Win_wait\(comm1\);)147 332 y(})75 425 y Fu(A)17
b(pro)q(cess)g(p)q(osts)f(the)h(lo)q(cal)h(windo)o(w)f(asso)q(ciated)f(with)h
Fo(wini)g Fu(b)q(efore)g(it)f(completes)i(RMA)f(accesses)75
482 y(to)c(the)i(remote)e(windo)o(ws)h(asso)q(ciated)h(with)f
Fo(win\(1-i\))p Fu(.)k(When)d(the)f Fo(wait\(wini)p Fu(\))f(call)i(returns,)f
(then)75 538 y(all)21 b(neigh)o(b)q(ors)h(of)e(the)g(calling)j(pro)q(cess)e
(ha)o(v)o(e)f(p)q(osted)h(the)f(windo)o(ws)h(asso)q(ciated)g(with)f
Fo(win\(1-i\))p Fu(.)75 595 y(Therefore,)15 b(no)g(c)o(hec)o(k)g(is)h(needed)
h(on)e(the)g(follo)o(wing)h Fm(MPI)p 1095 595 14 2 v 16 w(WIN)p
1199 595 V 16 w(ST)l(ART)g Fu(call.)1967 46 y Fp(1)1967 103
y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967
385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959
667 y(12)1959 724 y(13)1959 780 y(14)1959 836 y(15)1959 893
y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959 1119
y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345
y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570
y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796
y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022
y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248
y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474
y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699
y(48)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF

--0__=TucTGjCOn4ZqsHRcAl3Bw9NrWN7qGrf7XCYhPPuZgY9CRBXT6iq1IGCP--