Subject: current pt2pt draft -- pack/unpack functions added at the end

From: [email-masked] (Marc Snir)
Date: Thu, 03 Feb 94 12:30:20 -0500

-:) -:) -:) -:) -:)

%!PS-Adobe-2.0
%%Creator: dvips 5.47 (RS/6000 1.0) Copyright 1986-91 Radical Eye Software
%%Title: pt2pt942.dvi
%%Pages: 72 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
TeXDict begin 1000 300 300 @start /Fa 1 1 df<FFFEFFFE0F027D8516>0
D E /Fb 5 118 df<3C7EE2C0C0C0E27E3C07097F880A>99 D<F8FCCCCCCCCCCCCCCC06097E88
0B>110 D<3C7EE7C3C3C3E77E3C08097F880B>I<303030FCFC30303030323E1C070C808B08>
116 D<CCCCCCCCCCCCCCFC7C06097E880B>I E /Fc 2 50 df<1E007F806180C0C0C0C0C0C0C0
C0C0C0C0C0C0C061807F801E000A0D7E8C0E>48 D<18F8F81818181818181818FFFF080D7D8C0E
>I E /Fd 1 106 df<04040000000038FCD8181832333E3C080F7E8E0B>105
D E /Fe 5 118 df<0F803FE078607000E000E000E000E000E000702078603FE00F800B0D7F8C
0E>99 D<E780FFC0F0E0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E00B0D7E8C10>110
D<0F003FC070E070E0E070E070E070E070E07070E079E03FC00F000C0D7F8C0F>I<38383838FF
FF3838383838383838393F1E08117F900B>116 D<E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
E0E0E1E0FFE03EE00B0D7E8C10>I E /Ff 2 81 df<00001C00003C0000F80001E00003C00007
3C00001C167C7B8121>40 D<FFFFFFFFE0FFFFFFFFF07800001FF07C000003F03E000000F81F00
0000380F0000001C0F8000000C07C000000C03C000000603E000000001F000000000F800000000
78000000007C000000003E000000001E000000001F000000000F8000000007C000000003C00000
0003C000000001800000000380000000030000000006000000000C000000001800000000380000
000030000000006000000000C0000006018000000C038000000C030000001C06000000380C0000
00F818000001F83800001FF03FFFFFFFF07FFFFFFFF0FFFFFFFFE0272A7E7F2C>80
D E /Fg 4 111 df<60F0F07030303060E040040A7E830A>59 D<030003800300000000000000
00001C003E006600C600CC000C000C0018001980318033003F001C00091480930C>105
D<0060007000600000000000000000038007C00CE018C018C000C000C001800180018001800300
0300030003006600EE00FC0078000C1A81930E>I<387C007CFE006F8600CF0600CE06000E0600
0C06001C0C00180CC01818C0181980301F80300E00120D808C15>110 D
E /Fh 2 4 df<FFFFC0FFFFC012027D871A>0 D<040006000600C660F7E03F801F003F80F7E0C6
600600060004000B0D7E8D11>3 D E /Fi 27 123 df<007E01FE07800E001E003C003C007800
7FF87FF8F000F000F00070007000700038001C180FF807E00F147E9312>15
D<70F8F8F87005057C840D>58 D<70F8FCFC7C0C0C0C181838306040060E7C840D>I<E0000000
780000001E0000000780000001E0000000780000001C0000000F00000003C0000000F00000003C
0000000F00000003C0000003C000000F0000003C000000F0000003C000000F0000001C00000078
000001E00000078000001E00000078000000E00000001A1A7C9723>62 D<0001FC000007FF0000
1F07C0003C03E000F001E001E000F003C000F007C00078078000780F0000781F0000781E000078
3E0000783E0000787C0000F87C0000F87C0000F87C0000F8F80001F0F80001F0F80001E0F80003
E0F80003C0F80007C07800078078000F007C001F003C003E003E007C001E00F0000F83E00007FF
800001FC00001D217E9F23>79 D<0FFFFFFC1FFFFFF81E03C0781803C0383803C0183007801830
0780186007801860078030C00F0030C00F0030000F0000000F0000001E0000001E0000001E0000
001E0000003C0000003C0000003C0000003C00000078000000780000007800000078000000F000
0000F0000000F0000001F000007FFFC0007FFFC0001E1F7F9E1B>84 D<00F18003FDC0078F800E
07801C07803C07803C0700780700780700780700F00E00F00E00F00E00F00E18F01C30F03C3070
7C3078FC603FCFC00F078015147E9318>97 D<07803F803F000700070007000E000E000E000E00
1C001C001CF01FFC3F1E3E0E3C0F380F700F700F700F700FE01EE01EE01EE03CE03CE038607071
E03FC01F0010207E9F14>I<0000780003F80003F00000700000700000700000E00000E00000E0
0000E00001C00001C000F1C003FDC0078F800E07801C07803C07803C0700780700780700780700
F00E00F00E00F00E00F00E18F01C30F03C30707C3078FC603FCFC00F078015207E9F18>100
D<007C01FE07870E031E033C033C06781C7FF87FC0F000F000F000F000700070027007381E1FF8
07E010147E9315>I<00007C0000FE00019E00039E00030C000700000700000700000700000E00
000E00000E0000FFF001FFF0000E00001C00001C00001C00001C00001C00003800003800003800
00380000380000700000700000700000700000700000E00000E00000E00000E00000C00001C000
31C000798000F300007E00003C000017297E9F16>I<001E30007FB800F1F001C0F00380F00780
F00780E00F00E00F00E00F00E01E01C01E01C01E01C01E01C01E03801E07800E0F800F1F8007FF
0001E700000700000700000E00000E00300E00781C00F078007FF0003FC000151D809316>I<00
7000F000F00060000000000000000000000000000007001F8039C031C061C061C0C38003800380
070007000E000E000E181C301C301C601CE00FC007000D1F7F9E10>105
D<0000C00001E00001E00001C0000000000000000000000000000000000000000000003E00007F
0000C380018380030380030380060700000700000700000700000E00000E00000E00000E00001C
00001C00001C00001C0000380000380000380000380000700000700030700078E000F3C0007F80
003E00001328819E13>I<01E0000FE0000FC00001C00001C00001C00003800003800003800003
80000700000700000701C00707E00E0C300E18700E30F00E60F01CC0E01F80001F80001FE00038
F000383800383800381C307038607038607038407018C0E01F80600F0014207E9F18>I<03C01F
C01F8003800380038007000700070007000E000E000E000E001C001C001C001C00380038003800
38007000700070007180E300E300E300E6007E003C000A207E9F0E>I<0F03E03E001F8FF0FF00
31DC39C38061F03B038061E01E01C061C01C01C0C3C03C03800380380380038038038003803803
800700700700070070070007007007000700700E0C0E00E00E180E00E01C180E00E01C300E00E0
0C701C01C00FE00C00C0078026147F9328>I<0F07C0001F8FE00031D8700061F0380061E03800
61C03800C3C070000380700003807000038070000700E0000700E0000700E0000701C1800E01C3
000E0383000E0386000E018E001C01FC000C00F00019147F931B>I<007C0001FF000383800F01
C01E01C01C01E03C01E07801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00701E
003838001FF00007C00013147E9316>I<03C1E007E7F80C7E3C187C1C18781E18701E30E01E00
E01E00E01E00E01E01C03C01C03C01C03C01C07803C07803C07003C0E003E3C0077F80071E0007
00000700000E00000E00000E00000E00001C0000FFC000FFC000171D819317>I<0F0F001F9F80
31F1C061E1C061E3C061C3C0C3C3800380000380000380000700000700000700000700000E0000
0E00000E00000E00001C00000C000012147F9315>114 D<007C01FE0387070F070F070E0F0007
8007F803FC01FE001E000F700FF00EF00EE01C70383FF01FC010147E9315>I<00C000E001C001
C001C001C003800380FFF8FFF807000700070007000E000E000E000E001C001C001C001C183830
3830386038E01FC00F000D1C7F9B10>I<0780301FC03838C07030E07060E07061C070C1C0E003
80E00380E00380E00701C00701C00701C00701C3070386070386070786070F8C03F9F801F0F018
147F931A>I<07C3C00FE7E0187C703038706038F06038F0C070E000700000700000700000E000
00E00000E00070E030F1C060F1C060E1C0C0E3E1807E7F003C3E0014147E931A>120
D<0780301FC03838C07030E07060E07061C070C1C0E00380E00380E00380E00701C00701C00701
C00701C0070380070380070780070F8003FF0001F700000700000700000E003C0C003C1C003838
0030F0001FE0000F8000151D7F9316>I<01E06003F0C007FFC00E1F800C0300000600000C0000
180000300000600000C0000180000300000600C00C01801803803F87007FFE0061FC00C0700013
147E9315>I E /Fj 4 62 df<0FC01FE0387070386018E01CE01CE01CE01CE01CE01CE01CE01C
E01C6018703838701FE00FC00E137F9211>48 D<06001E00FE00EE000E000E000E000E000E000E
000E000E000E000E000E000E000E00FFE0FFE00B137D9211>I<1F003FC061E0C0E0E070E07000
70007000E000C001C0030006000C30183030707FE0FFE0FFE00C137E9211>I<7FFFE0FFFFF000
0000000000000000000000000000000000FFFFF07FFFE0140A7E8B19>61
D E /Fk 2 42 df<0000200000000000700000000000F00000000001E00000000001C000000000
03C0000000000780000000000FFFFFFFF0001FFFFFFFF8007FFFFFFFF800F80000000003E00000
00001FC000000000FF0000000000FE00000000001F800000000007E00000000001F00000000000
7800000000003FFFFFFFF8001FFFFFFFF8000FFFFFFFF00007800000000003C00000000001C000
00000001E00000000000F00000000000700000000000200000002D1D7D9934>40
D<0000002000000000007000000000007800000000003C00000000001C00000000001E00000000
000F00007FFFFFFF8000FFFFFFFFC000FFFFFFFFF00000000000F800000000003E00000000001F
C00000000007F80000000003F8000000000FC0000000003F00000000007C0000000000F000FFFF
FFFFE000FFFFFFFFC0007FFFFFFF80000000000F00000000001E00000000001C00000000003C00
000000007800000000007000000000002000002D1D7D9934>I E /Fl 8
104 df<FFFFFFC0FFFFFFC01A027C8B23>0 D<70F8F8F87005057C8D0D>I<018001C001800180
C183E187F99F7DBE1FF807E007E01FF87DBEF99FE187C1830180018001C0018010147D9417>3
D<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF807E01012
7D9317>15 D<000000C0000003C000000F0000003C000000F0000003C000000F0000001C000000
78000001E00000078000001E00000078000000E0000000780000001E0000000780000001E00000
00780000001C0000000F00000003C0000000F00000003C0000000F00000003C0000000C0000000
00000000000000000000000000000000000000000000000000FFFFFFC0FFFFFFC01A247C9C23>
20 D<C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006
C00006C00006C00006C00006C00006C00006C00006C00006C00006E0000E60000C70001C380038
1F01F007FFC000FE00171C7D9A1E>91 D<001F003F00F800E001C001C001C001C001C001C001C0
01C001C001C001C001C001C001C001C003800700FE00F800FE000700038001C001C001C001C001
C001C001C001C001C001C001C001C001C001C001C000E000F8003F001F102D7DA117>102
D<F800FE000F00038001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0
00E00070003F000F003F007000E001C001C001C001C001C001C001C001C001C001C001C001C001
C001C001C003800F00FE00F800102D7DA117>I E /Fm 1 16 df<07E01FF83FFC7FFE7FFEFFFF
FFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF807E010107E9115>15 D E /Fn
2 42 df<0001C0000000000380000000000380000000000700000000000E00000000000E000000
00001FFFFFFF80007FFFFFFF8000FFFFFFFF8001E0000000000780000000003F0000000000FC00
000000003F000000000007800000000001E00000000000FFFFFFFF80007FFFFFFF80001FFFFFFF
80000E00000000000E000000000007000000000003800000000003800000000001C00000002919
7D9630>40 D<000001C00000000000E00000000000E00000000000700000000000380000000000
380000FFFFFFFC0000FFFFFFFF0000FFFFFFFF800000000003C00000000000F000000000007E00
000000001F80000000007E0000000000F00000000003C000FFFFFFFF8000FFFFFFFF0000FFFFFF
FC0000000000380000000000380000000000700000000000E00000000000E00000000001C00000
29197D9630>I E /Fo 56 122 df<01F1C003F1C007F1C00701C00E01C00E01C00E01C00E01C0
0E01C00E01C00E01C0FFF1C0FFF1C0FFF1C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0121D809C16>13
D<00F0000001F8000003FC0000039C0000070E0000070E0000070E0000070E0000070E0000071E
0000071C0000073C00000778000003F0040003E0070007C00F000FC00E001FC00E003DE01E0078
E01C0070F03C00E0703800E0387800E03CF000E01FE000E00FC00070078000781FE0C03FFFFFC0
1FF8FFC007E03F001A1F7E9D1F>38 D<00E001C0038007000E000E001C001C0038003800380070
00700070007000E000E000E000E000E000E000E000E000E000E000E000E0007000700070007000
3800380038001C001C000E000E000700038001C000E00B2A7E9E10>40 D<E000700038001C000E
000E000700070003800380038001C001C001C001C000E000E000E000E000E000E000E000E000E0
00E000E000E001C001C001C001C0038003800380070007000E000E001C0038007000E0000B2A7E
9E10>I<0006000000060000000600000006000000060000000600000006000000060000000600
0000060000000600000006000000060000FFFFFFE0FFFFFFE00006000000060000000600000006
00000006000000060000000600000006000000060000000600000006000000060000000600001B
1C7E9720>43 D<7878787838307060E005097D830C>I<FFE0FFE0FFE00B03808A0E>I<F0F0F0F0
00000000000000000000F0F0F0F004127C910C>58 D<7FFFFFC0FFFFFFE0000000000000000000
0000000000000000000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61
D<001C0000003E0000003E0000002E0000006700000067000000E7800000C7800000C3800001C3
C0000183C0000181C0000381E0000381E0000700F0000700F0000600F0000E0078000FFFF8000F
FFF8001FFFFC001C003C0018003C0038001E0038001E0070001F0070000F0070000F00E0000780
191D7F9C1C>65 D<FFF800FFFF00FFFF80F00FC0F003E0F000F0F000F0F000F0F000F0F000F0F0
01E0F007C0FFFF80FFFE00FFFF80F01FC0F003E0F000F0F00078F00078F00078F00078F00078F0
00F0F001F0F007E0FFFFC0FFFF80FFFC00151D7C9C1C>I<003FC000FFF003FFF007C0700F8000
1E00003E00003C0000780000780000780000F00000F00000F00000F00000F00000F00000F00000
F00000F000007800007800007800003C00003E00001E00000F800807C07803FFF800FFF0003F80
151F7D9D1B>I<FFFC00FFFF00FFFF80F00FE0F003F0F000F0F00078F00078F0003CF0003CF000
1CF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0003CF0003CF0007CF00078F000
F0F001F0F007E0FFFFC0FFFF00FFFC00171D7C9C1E>I<FFFFC0FFFFC0FFFFC0F00000F00000F0
0000F00000F00000F00000F00000F00000F00000FFFF80FFFF80FFFF80F00000F00000F00000F0
0000F00000F00000F00000F00000F00000F00000F00000FFFFC0FFFFC0FFFFC0121D7C9C19>I<
FFFF80FFFF80FFFF80F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
FFFF00FFFF00FFFF00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
F00000F00000F00000111D7C9C18>I<003F8001FFF003FFF807C0F80F00181E00003E00003C00
00780000780000780000F00000F00000F00000F00000F00000F00000F007F8F007F8F007F87800
387800387800383C00383E00381E00380F003807C07803FFF801FFF0003F80151F7D9D1C>I<F0
00F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0FFFFF0FF
FFF0FFFFF0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F0
00F0F000F0F000F0141D7C9C1D>I<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
F0F0F0F0F0041D7C9C0C>I<F0003CF00078F000F0F001E0F003C0F00780F00F00F01E00F03C00
F07800F0F000F0E000F1F000F3F000F77800FE7C00FC3C00FC1E00F81F00F00F00F00F80F00780
F003C0F003E0F001E0F000F0F000F0F00078F0007C161D7C9C1D>75 D<F000F000F000F000F000
F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F0
00F000FFFEFFFEFFFE0F1D7C9C16>I<FC0007E0FC0007E0FC0007E0EE000DE0EE000DE0EE000D
E0E70019E0E70019E0E70019E0E78039E0E38031E0E3C071E0E3C071E0E1C061E0E1C061E0E1E0
E1E0E1E0E1E0E0E0C1E0E0F1C1E0E07181E0E07181E0E07181E0E03B01E0E03B01E0E03B01E0E0
1E01E0E01E01E0E01E01E0E00001E01B1D7C9C24>I<FC0070FC0070FE0070EE0070EF0070E700
70E70070E78070E38070E3C070E3C070E1E070E1E070E0E070E0F070E07070E07870E07870E03C
70E03C70E01C70E01E70E00E70E00E70E00F70E00770E007F0E003F0E003F0141D7C9C1D>I<00
3F000001FFE00003FFF00007C0F8000F807C001E001E003E001F003C000F007800078078000780
78000780F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F80007
C078000780780007807C000F803C000F003E001F001F003E000F807C0007C0F80003FFF00001FF
E000003F00001A1F7E9D1F>I<FFFC00FFFF00FFFF80F007C0F003E0F001E0F000F0F000F0F000
F0F000F0F000F0F001E0F003E0F007C0FFFF80FFFF00FFFC00F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000141D7C9C1B>I<FFF800FFFF00FFFF80F0
07C0F001E0F000E0F000F0F000F0F000F0F000F0F000E0F001E0F007C0FFFF80FFFF00FFF800F0
3C00F01C00F01E00F00F00F00F00F00780F00780F003C0F003C0F001E0F000F0F000F0F0007815
1D7C9C1B>82 D<03F8000FFE001FFF003E0F00780300780000F00000F00000F00000F00000F800
007C00007F00003FE0001FFC0007FE0001FF00001F800007800007C00003C00003C00003C00003
C00003C0C00780E00780FC1F007FFE001FFC0007F000121F7E9D17>I<FFFFFF80FFFFFF80FFFF
FF80001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E000000
1E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000
001E0000001E0000001E0000001E0000001E0000001E0000001E0000191D7F9C1C>I<F00070F0
0070F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070F0
0070F00070F00070F00070F00070F00070F00070F00070F000F07800E07801E03C03C01F07800F
FF8007FE0001F800141E7C9C1D>I<F0000380F00003807800070078000700780007003C000E00
3C000E003E000E001E001C001E001C000F0038000F0038000F003800078070000780700003C060
0003C0E00003C0E00001E0C00001E1C00001E1C00000F1800000F380000073000000730000007B
0000003E0000003E0000001C0000191D7F9C1C>I<F000F00070F000F80070F000F800707800B8
006078019C00E078019C00E078019C00E03C039C01C03C031E01C03C030E01C01E030E01801E07
0F03801E070F03801E060F03800F060703000F0E0787000F0C078700070C038600070C03860007
9C038E00079803CE00039801CC00039801CC00039801CC0001D001C80001D000D80001F000F800
01E000F80000E0007000241D7F9C27>I<F80001E07C0001C03E0003801E0007801F0007000F80
0E0007801E0007C01C0003E03C0001E0380001F0700000F0F0000078E000007DC000003FC00000
1F8000001F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
000F0000000F0000000F0000000F00001B1D809C1C>89 D<7FFFF07FFFF07FFFF00001E00003C0
0007C0000780000F80001F00001E00003E00003C0000780000F80000F00001F00001E00003C000
07C0000780000F80001F00001E00003E00003C0000780000FFFFF0FFFFF0FFFFF0141D7E9C19>
I<FFFFFFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
FFFFFF08297D9E0C>I<FFFFFF0707070707070707070707070707070707070707070707070707
070707070707070707FFFFFF0829809E0C>93 D<0FC03FF07FF87038401C001C001C00FC0FFC3F
FC781CE01CE01CE01CF07C7FFC7FDC3F1C0E127E9114>97 D<E000E000E000E000E000E000E000
E000E000E000E000E3E0EFF0FFF8F87CF01CE01EE00EE00EE00EE00EE00EE00EE01CF01CF87CFF
F8EFF0E3C00F1D7D9C15>I<07E00FF81FFC3C1C70047000E000E000E000E000E000E000700070
043C1C1FFC0FF807E00E127E9112>I<000E000E000E000E000E000E000E000E000E000E000E0F
8E1FEE3FFE7C3E700E700EE00EE00EE00EE00EE00EE00EF00E701E7C3E3FFE1FEE0F8E0F1D7E9C
15>I<07C01FE03FF078787018601CFFFCFFFCFFFCE000E000E000700070043C1C3FFC1FF807E0
0E127E9112>I<00FC01FC03FC07000E000E000E000E000E000E000E00FFE0FFE0FFE00E000E00
0E000E000E000E000E000E000E000E000E000E000E000E000E000E1D809C0D>I<03C3C00FFFC0
1FFFC01C3800381C00381C00381C00381C00381C001C38001FF8001FF0003BC000380000380000
1FFC001FFF003FFF80700780E001C0E001C0E001C0F003C07C0F803FFF001FFE0007F800121B7F
9115>I<E000E000E000E000E000E000E000E000E000E000E000E3E0EFF0FFF8F83CF01CE01CE0
1CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C0E1D7D9C15>I<F0F0F0F00000000000
0000707070707070707070707070707070707070041D7E9C0A>I<E000E000E000E000E000E000
E000E000E000E000E000E03CE078E0F0E1E0E3C0E780EF00FF00FF80FB80F9C0F1E0E0E0E0F0E0
78E038E03CE01E0F1D7D9C14>107 D<E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
E0E0E0E0E0E0031D7D9C0A>I<E3F03F00EFF8FF80FFFDFFC0F81F81E0F00F00E0E00E00E0E00E
00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E0
0E00E0E00E00E01B127D9124>I<E3E0EFF0FFF8F83CF01CE01CE01CE01CE01CE01CE01CE01CE0
1CE01CE01CE01CE01CE01C0E127D9115>I<03F0000FFC001FFE003C0F00780780700380E001C0
E001C0E001C0E001C0E001C0F003C07003807807803C0F001FFE000FFC0003F00012127F9115>
I<E3E0EFF0FFF8F87CF01CE01EE00EE00EE00EE00EE00EE00EE01CF03CF87CFFF8EFF0E3C0E000
E000E000E000E000E000E000E0000F1A7D9115>I<E380E780EF80FC00F800F000F000E000E000
E000E000E000E000E000E000E000E000E00009127D910E>114 D<1FC03FF07FF0F030E000E000
F0007F003FC01FE000F0003800388038F078FFF07FE01FC00D127F9110>I<1C001C001C001C00
1C001C00FFE0FFE0FFE01C001C001C001C001C001C001C001C001C001C001C001C201FF00FF007
C00C187F970F>I<E01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE07CFF
FC7FDC3F1C0E127D9115>I<E007E0077006700E700E381C381C381C1C381C381C380E700E7006
60076007E003C003C010127F9113>I<7003807807003C0E001C1C000E1C0007380003F00001E0
0001C00001E00003F0000738000E18000E1C001C0E00380700700380F003C01212809113>120
D<E007E007700E700E780E381C381C1C181C380C380E300E7006700760036003C001C001C00180
0180030003000700FE00FC00F800101A7F9113>I E /Fp 3 86 df<70F8F8F87005057D840C>
58 D<01FFFF0003FFFFC0003C01E0003C00F0003C00F0003C007000780070007800F0007800F0
007801E000F003C000F0078000FFFF0000FFFE0001E01F0001E0078001E003C001E003C003C003
C003C003C003C003C003C003C00780078007800F0007801E0007807C00FFFFF800FFFFE0001C1C
7E9B1F>66 D<7FF87FE0FFF8FFE00F000E000F000C000F000C000F000C001E0018001E0018001E
0018001E0018003C0030003C0030003C0030003C00300078006000780060007800600078006000
F000C000F000C000F000C000F0018000F0018000F003000070060000700C0000383800001FF000
0007C000001B1D7D9B1C>85 D E /Fq 28 122 df<001FE00000FFF00003F0380007C07C000780
FC000F80FC000F80FC000F8078000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F
807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C00
0F807C000F807C000F807C007FE1FF807FE1FF80191D809C1B>12 D<0030006001C00380030007
000E001E001C003C003C003800780078007800F800F000F000F000F000F000F000F000F000F000
F80078007800780038003C003C001C001E000E0007000300038001C0006000300C297D9E13>40
D<C000600038001C000C000E0007000780038003C003C001C001E001E001E001F000F000F000F0
00F000F000F000F000F000F001F001E001E001E001C003C003C00380078007000E000C001C0038
006000C0000C297D9E13>I<387CFEFEFE7C3807077D860D>46 D<387CFEFEFE7C380000000038
7CFEFEFE7C3807127D910D>58 D<0FF03FFC703EF03FF83FF83FF83F203E007C00F800F001C001
C0018001800180018001800000000000000000038007C00FE00FE00FE007C00380101D7D9C17>
63 D<FFFFF800FFFFFF000FC01FC00FC007E00FC003F00FC001F80FC001F80FC000FC0FC000FC
0FC000FC0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000
FC0FC000FC0FC000FC0FC001F80FC001F80FC003F00FC007E00FC01FC0FFFFFF00FFFFF8001F1C
7E9B25>68 D<FFFFFFFF07E007E007E007E007E007E007E007E007E007E007E007E007E007E007
E007E007E007E007E007E007E007E007E007E0FFFFFFFF101C7F9B12>73
D<FFE003FFFFE003FF0FF000300FF800300DFC00300CFE00300C7E00300C3F00300C1F80300C1F
C0300C0FE0300C07F0300C03F0300C01F8300C01FC300C00FE300C007F300C003F300C001FB00C
001FF00C000FF00C0007F00C0003F00C0001F00C0000F00C0000F0FFC00070FFC00030201C7E9B
25>78 D<0FF8001FFE003E1F803E07803E07C01C07C00007C003FFC01FFFC03F87C07E07C0FC07
C0FC07C0FC07C0FC0FC07E1FC03FFBF80FE1F815127F9117>97 D<03FC000FFE001F1F003E1F00
7C1F007C0E00FC0000FC0000FC0000FC0000FC0000FC00007C00007E01803E03801F07000FFE00
03F80011127E9115>99 D<000FF0000FF00001F00001F00001F00001F00001F00001F00001F000
01F00001F003F1F00FFFF01F07F03E01F07C01F07C01F0FC01F0FC01F0FC01F0FC01F0FC01F0FC
01F07C01F07C01F03E03F01F0FF00FFDFE03F1FE171D7E9C1B>I<01FC000FFF001F0F803E07C0
7C03C07C03E0FC03E0FFFFE0FFFFE0FC0000FC0000FC00007C00007E00603E00C01F81C00FFF00
01FC0013127F9116>I<003F0001FF8003E7C007C7C00F87C00F83800F80000F80000F80000F80
000F8000FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80
000F80000F80000F80000F80007FF8007FF800121D809C0F>I<03F0F00FFFF83E1F383C0F307C
0F807C0F807C0F807C0F803C0F003E1F001FFC0033F0003000007000003800003FFF003FFFC01F
FFE03FFFF07801F8F00078F00078F000787800F03E03E01FFFC003FE00151B7F9118>I<FF0000
FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F1FC01F7FE01FE1F0
1F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
FFE7FFFFE7FF181D7F9C1B>I<1E003F003F007F003F003F001E0000000000000000000000FF00
FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F9D0E
>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C0E>108 D<FF1FC0FE00FF7FE3FF
001FE1F70F801F80FC07C01F80FC07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F8
07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C0FFE7FF3FF8FFE7
FF3FF825127F9128>I<FF1FC0FF7FE01FE1F01F80F81F80F81F00F81F00F81F00F81F00F81F00
F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF18127F911B>I<01FC000FFF801F
07C03E03E07C01F07C01F0FC01F8FC01F8FC01F8FC01F8FC01F8FC01F87C01F07C01F03E03E01F
07C00FFF8001FC0015127F9118>I<FF1FC0FFFFE01FC1F81F00F81F00FC1F007C1F007E1F007E
1F007E1F007E1F007E1F007E1F007C1F00FC1F80F81FC1F01F7FE01F1F801F00001F00001F0000
1F00001F00001F0000FFE000FFE000171A7F911B>I<03E0600FF8E01F0DE03E07E07E03E07C03
E0FC03E0FC03E0FC03E0FC03E0FC03E0FC03E07C03E07E03E03E07E03F0FE00FFBE007E3E00003
E00003E00003E00003E00003E00003E0001FFC001FFC161A7E9119>I<FE3E00FE7F001ECF801F
8F801F8F801F07001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FF
F000FFF00011127F9114>I<1FD83FF87038E018E018F000FF807FE07FF01FF807FC007CC01CC0
1CE01CF038FFF0CFC00E127E9113>I<030003000300070007000F000F003F00FFFCFFFC1F001F
001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F9807F003E00E1A7F9913>I<FF07F8
FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
1F01F80F03F80FFEFF03F8FF18127F911B>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C1
8007C18003E30003E30001F60001F60001FE0000FC0000FC000078000078000030000030000060
00706000F8E000C0C000E380007F00003E0000161A7F9119>121 D E /Fr
26 122 df<7FF0FFE0FFE00C037D8A10>45 D<70F8F8F0E005057B840E>I<0000070000000700
00000F0000000F0000001F0000003F0000003F0000006F0000006F000000CF000000CF0000018F
0000038F0000030F0000060F0000060F00000C0F80000C07800018078000180780003FFF80007F
FF800060078000C0078000C00780018007800180078003000780070007800F0007807FC07FF8FF
C07FF81D207E9F22>65 D<01FFFFFE01FFFFFC001E003C001E001C001E001C003C000C003C000C
003C000C003C001800780C1800780C1800780C0000781C0000F0380000FFF80000FFF80000F038
0001E0300001E0300001E0303001E0306003C0006003C0006003C000C003C001C0078001800780
03800780070007801F00FFFFFF00FFFFFE001F1F7D9E1F>69 D<01FFFF0001FFFFC0001E01E000
1E00F0001E0078003C0078003C0078003C0078003C0078007800F0007800F0007801E0007803C0
00F00F0000FFFE0000FFF80000F03C0001E01E0001E00E0001E00F0001E00F0003C01E0003C01E
0003C01E0003C01E0007803C0007803C1807803C1807803C30FFF81E30FFF00FE0000007C01D20
7D9E21>82 D<00F18003FDC0078F800E07801C07803C07803C0700780700780700780700F00E00
F00E00F00E00F00E30F01C60F03C60707C6078FCC03FCFC00F078014147C9317>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<006000F000F000E00000000000
0000000000000000000F001F80318031C063806380C3800700070007000E000E000E001C301C60
1C6038C018C01F800F000C1F7D9E0E>105 D<01E0000FE0000FC00001C00001C00001C0000380
000380000380000380000700000700000703C00707E00E0C600E10E00E21E00E61E01CC1C01F80
001F00001FC00039E0003870003870003838607070C07070C07070C0703180E03F00601E001320
7D9F15>107 D<03C01FC01F8003800380038007000700070007000E000E000E000E001C001C00
1C001C0038003800380038007000700070007180E300E300E300E6007E003C000A207C9F0C>I<
1E07C0F8003F1FE1FC0033B8730E0063E076070063C03C07006380380700C780780E000700700E
000700700E000700700E000E00E01C000E00E01C000E00E01C000E00E038601C01C038C01C01C0
38C01C01C071801C01C031803803803F001801801E0023147D9325>I<1E07C03F1FE033B87063
E07063C038638038C780700700700700700700700E00E00E00E00E00E00E01C31C01C61C01C61C
038C1C018C3801F81800F018147D931A>I<007C0001FF000383800F01C01E01C01C01E03C01E0
7801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00701E003838001FF00007C000
13147C9317>I<03C1E007E7F8067E3C0C7C1C0C781E0C701E18E01E00E01E00E01E00E01E01C0
3C01C03C01C03C01C07803C07803C07003C0E003E3C0077F80071E000700000700000E00000E00
000E00000E00001C0000FFC000FFC000171D809317>I<1E0F003F3F8033F1C063C1C063C3C063
83C0C783800700000700000700000E00000E00000E00000E00001C00001C00001C00001C000038
000018000012147D9313>114 D<00FC03FE07070E0F0E0F0E0E1E000F800FF007F803FC003E00
1E701EF01CF01CE03860703FE01F8010147D9313>I<018001C0038003800380038007000700FF
F0FFF00E000E000E000E001C001C001C001C0038003800380038307060706070C071803F001E00
0C1C7C9B0F>I<0F00601F80703180E031C0E06380E06380E0C381C00701C00701C00701C00E03
800E03800E03800E038C0E07180E07180E0F180E1F3007F3F003E1E016147D9318>I<0F01C01F
83C03183E031C1E06380E06380E0C380C00700C00700C00700C00E01800E01800E01800E03000E
03000E06000E06000F0C0007F80001E00013147D9315>I<0787800FCFC018F8E03070E06071E0
6071E0C0E1C000E00000E00000E00001C00001C00001C00071C060F380C0F380C0E38180C7C300
7CFE00387C0013147D9315>120 D<0F00601F80703180E031C0E06380E06380E0C381C00701C0
0701C00701C00E03800E03800E03800E03800E07000E07000E0F000E1F0007FE0003EE00000E00
000E00001C00781C0078380070700060E0003FC0001F0000141D7D9316>I
E /Fs 45 122 df<FFE0FFE0FFE00B037F8C10>45 D<F0F0F0F004047B830E>I<00C001C007C0
FFC0FFC0FBC003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003
C003C003C003C003C003C003C003C003C0FFFFFFFFFFFF10227CA118>49
D<03F0000FFC001FFE003C1F003807807007C07003C0F003E0E001E06001E02001E00001E00001
E00001E00003C00003C0000780000780000F00001E00003C0000780000F00001E00001C0000380
000700000E00001C0000380000700000FFFFE0FFFFE0FFFFE013227EA118>I<01F00007FC001F
FF003E0F003807807003C02003C02003C00003C00003C00003C0000780000780000F00001E0003
FC0003F80003FE00000F000007800003C00003C00001E00001E00001E00001E00001E08001E0C0
03C0E003C07007803C0F801FFF000FFC0003F00013237EA118>I<001F00001F00002F00002F00
006F0000EF0000CF0001CF0001CF00038F00038F00078F00070F000F0F000E0F001E0F003C0F00
3C0F00780F00780F00F00F00FFFFF8FFFFF8FFFFF8000F00000F00000F00000F00000F00000F00
000F00000F00000F0015217FA018>I<3FFF803FFF803FFF803C00003C00003C00003C00003C00
003C00003C00003C00003C00003CF8003FFE003FFF003F0F803E07803C03C03803C00001E00001
E00001E00001E00001E00001E00001E04003C04003C0E003C07007807C1F003FFE000FFC0003F0
0013227EA018>I<007E0001FF0003FF0007C1000F00001E00001E00003C00003C000078000078
000078F800F3FE00F7FF00FF0F80FC0780F803C0F803C0F801C0F001E0F001E0F001E0F001E0F0
01E07001E07001E07801E07803C03803C03C03801C07801F0F000FFE0007FC0001F00013237EA1
18>I<FFFFE0FFFFE0FFFFE00001E00003C0000380000780000F00000E00001E00001C00003C00
00380000780000780000F00000F00000E00001E00001E00001E00003C00003C00003C00003C000
03C00007800007800007800007800007800007800007800013217EA018>I<01F00007FC000FFE
001E0F003C07803C07807803C07803C07803C07803C07803C03803803C07801E0F000F1E0007FC
0003F8000FFE001E0F003C07807803C07803C0F001E0F001E0F001E0F001E0F001E0F001E07803
C07803C03C07803E0F801FFF0007FC0001F00013237EA118>I<001F0000001F0000003F800000
3F8000003B8000007BC0000073C0000071C00000F1E00000F1E00000E0E00001E0F00001E0F000
01C0F00003C0780003C078000380780007803C0007803C0007003C000F001E000F001E000FFFFE
001FFFFF001FFFFF001C000F003C0007803C00078038000780780003C0780003C0700003C0F000
01E0F00001E0E00001E01B237EA220>65 D<000FF000007FFC0000FFFF0001F01F0003C0070007
8002000F0000001E0000003E0000003C0000003C000000780000007800000078000000F0000000
F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000078000000780000
00780000003C0000003C0000003E0000001E0000000F0000800780018003C0038001F00F8000FF
FF00007FFC00000FF00019257DA31F>67 D<FFFE0000FFFFC000FFFFE000F003F000F000F800F0
007C00F0003E00F0001E00F0000F00F0000F00F0000780F0000780F0000780F00003C0F00003C0
F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F0000380F0000780F00007
80F0000780F0000F00F0001F00F0001E00F0003C00F000FC00F003F800FFFFE000FFFFC000FFFE
00001A237BA223>I<FFFFF0FFFFF0FFFFF0F00000F00000F00000F00000F00000F00000F00000
F00000F00000F00000F00000F00000FFFFE0FFFFE0FFFFE0F00000F00000F00000F00000F00000
F00000F00000F00000F00000F00000F00000F00000F00000F00000FFFFF8FFFFF8FFFFF815237B
A21D>I<F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000FFFFC0FFFFC0FFFFC012237BA21A>76
D<FC00007EFE0000FEFE0000FEFE0000FEF70001DEF70001DEF70001DEF78003DEF380039EF380
039EF3C0079EF3C0079EF1C0071EF1C0071EF1E00F1EF0E00E1EF0E00E1EF0F01E1EF0F01E1EF0
701C1EF0783C1EF0783C1EF038381EF03C781EF03C781EF01C701EF01C701EF01EF01EF00EE01E
F00EE01EF00FE01EF007C01EF007C01EF007C01EF000001E1F237BA22A>I<FC001EFE001EFE00
1EFE001EF7001EF7001EF3801EF3801EF3C01EF1C01EF1C01EF1E01EF0E01EF0F01EF0F01EF078
1EF0781EF0381EF03C1EF03C1EF01E1EF01E1EF00E1EF00F1EF0071EF0071EF0079EF0039EF003
9EF001DEF001DEF000FEF000FEF000FEF0007E17237BA222>I<001FC000007FF00001FFFC0003
F07E0007C01F000F800F801F0007C01E0003C03C0001E03C0001E0780000F0780000F0780000F0
70000070F0000078F0000078F0000078F0000078F0000078F0000078F0000078F0000078F00000
78780000F0780000F0780000F07C0001F03C0001E03E0003E01E0003C01F0007C00F800F8007C0
1F0003F07E0001FFFC00007FF000001FC0001D257DA324>I<FFFC00FFFF80FFFFC0F003E0F000
F0F00078F00038F0003CF0003CF0003CF0003CF0003CF00038F00078F000F0F003E0FFFFC0FFFF
80FFFE00F01E00F00F00F00700F00780F00380F003C0F001E0F001E0F000F0F000F0F00078F000
38F0003CF0001EF0001EF0000F18237BA21F>82 D<00FF0003FFC007FFF00F83F01E00F03C0020
3C00007800007800007800007800007800007C00003C00003F00001FC0000FFC0007FF0001FF80
003FC00007E00001F00000F00000F8000078000078000078000078000078400078E000F0F000F0
F801E07F07C03FFF800FFF0001FC0015257EA31B>I<FFFFFFF0FFFFFFF0FFFFFFF0000F000000
0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00
00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
0000000F00001C237EA221>I<F0003CF0003CF0003CF0003CF0003CF0003CF0003CF0003CF000
3CF0003CF0003CF0003CF0003CF0003CF0003CF0003CF0003CF0003CF0003CF0003CF0003CF000
3CF0003CF0003CF0003CF0003CF0003C7800787800787800783C00F01E01E01F87E00FFFC003FF
0000FC0016247BA221>I<07E01FF83FFC3C1E301E200F000F000F000F01FF0FFF3FFF7F0F780F
F00FF00FF00FF80F7C3F7FFF3FFF1F8F10167E9517>97 D<F00000F00000F00000F00000F00000
F00000F00000F00000F00000F00000F00000F00000F00000F1F000F7FC00FFFE00FC1F00F80F00
F00780F00780F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F00780F00780F80F00
FC3E00FFFE00F7F800F3F00012237CA219>I<01FC0007FF000FFF801F07803C01807800007800
00700000F00000F00000F00000F00000F00000F000007800007800007800403C00C01F07C00FFF
C007FF8001FC0012167E9516>I<0003C00003C00003C00003C00003C00003C00003C00003C000
03C00003C00003C00003C00003C003F3C00FFFC01FFFC03F0FC03C07C07803C07803C0F003C0F0
03C0F003C0F003C0F003C0F003C0F003C0F003C07803C07803C03C07C03E0FC01FFFC00FFBC003
E3C012237EA219>I<03F00007FC001FFE003E0F003C0780780380780380F001C0FFFFC0FFFFC0
FFFFC0F00000F00000F000007000007800007800003C00801F07800FFF8007FF0001F80012167E
9516>I<003F00FF01FF03C1038007800780078007800780078007800780FFF8FFF8FFF8078007
8007800780078007800780078007800780078007800780078007800780078007800780102380A2
0F>I<01F0F807FFF80FFFF81F1F801E0F003C07803C07803C07803C07803C07801E0F001F1F00
1FFE001FFC0039F0003800003800003C00003FFE001FFFC01FFFE03FFFF07801F0F800F8F00078
F00078F00078F000787800F03E03E01FFFC00FFF8001FC0015217F9518>I<F0F0F0F000000000
0000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237DA20B>105
D<00F000F000F000F000000000000000000000000000000000000000F000F000F000F000F000F0
00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
F000F080F0E3E0FFE07FC01F000C2D83A20D>I<F00000F00000F00000F00000F00000F00000F0
0000F00000F00000F00000F00000F00000F00000F01F80F03F00F03E00F07C00F0F800F1F000F3
E000F7C000FFC000FFC000FFE000FFE000FDF000F8F800F07800F07C00F03E00F01E00F01F00F0
0F00F00F80F007C012237CA218>I<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F004237DA20B>I<F0F807C0F3FE1FF0FFFF7FF8FE0FF078FC0FE07CF8
07C03CF807C03CF007803CF007803CF007803CF007803CF007803CF007803CF007803CF007803C
F007803CF007803CF007803CF007803CF007803CF007803CF007803C1E167C9529>I<F1F8F7FC
FFFEFE1EF80FF80FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0
0F10167C9519>I<01FC0007FF000FFF801F07C03C01E07800F07800F0700070F00078F00078F0
0078F00078F00078F000787800F07800F07C01F03E03E01F07C00FFF8007FF0001FC0015167F95
18>I<F1F000F7FC00FFFE00FC3F00F80F00F00780F00780F007C0F003C0F003C0F003C0F003C0
F003C0F003C0F007C0F00780F00F80F80F00FC3E00FFFE00F7F800F3F000F00000F00000F00000
F00000F00000F00000F00000F00000F00000F0000012207C9519>I<F0E0F3E0F7E0FFE0FF00FC
00F800F800F000F000F000F000F000F000F000F000F000F000F000F000F000F0000B167C9511>
114 D<07F01FFE3FFF3C0F7803780078007C003F003FF01FF80FFC01FE001F000F000F400FE00F
F81EFFFE3FFC0FF010167F9513>I<0F000F000F000F000F000F00FFF8FFF8FFF80F000F000F00
0F000F000F000F000F000F000F000F000F000F000F000F080F1C07FC07F803E00E1C7F9B12>I<
F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF01FF83F7F
FF7FEF1F8F10167C9519>I<F001E0F001E07803C07803C07803C03C07803C07803C07801E0700
1E0F001E0F000F0E000F1E000F1E00071C00079C0007BC0003B80003B80003F80001F00001F000
13167F9516>I<F007803CF00FC03CF00FC03C780DC078781DC078781DE078781CE0783C18E0F0
3C38E0F03C38F0F01C38F0E01E3871E01E3071E01E7079E00E7079C00E7039C00F603BC007603B
8007601B8007C01F8007C01F8003C01F001E167F9521>I<7801F07C01E03E03C01E07C00F0780
078F0007DE0003FC0001FC0000F80000700000F80001FC0003DC00039E00078F000F07801E0780
1E03C03C01E07800F0F800F81516809516>I<F001E0F001E07803C07803C07C03C03C07803C07
801E07801E07001E0F000F0F000F0E00071E00079E00039C00039C00039C0001980001D80000F8
0000F00000F00000F00000E00000E00001E00001C00001C0004380007F80007F00007E00001320
7F9516>I E /Ft 80 126 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000000070F8F8
F870051C779B18>33 D<03C00007E0000FF0001E78001C38001C38001C38001C38001C7BF01CF3
F01EE3F00FE7800FC7000F87000F0F001F0E003F8E007B9E0073DC00F1DC00E1FC00E0F800E078
70F0F87071FE707FFFF03FCFE01F03C0141C7F9B18>38 D<007000F001F003C007800F001E001C
003C003800780070007000F000E000E000E000E000E000E000E000E000F0007000700078003800
3C001C001E000F00078003C001F000F000700C24799F18>40 D<6000F00078003C001E000F0007
80038003C001C001E000E000E000F00070007000700070007000700070007000F000E000E001E0
01C003C0038007800F001E003C007800F00060000C247C9F18>I<01C00001C00001C00001C000
C1C180F1C780F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C780C1C18001C000
01C00001C00001C00011147D9718>I<00600000F00000F00000F00000F00000F00000F00000F0
007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F00000F00000F0000060001314
7E9718>I<3C7E7F7F7F3F0F0E1E7CF870080C788518>I<7FFF00FFFF80FFFF807FFF0011047D8F
18>I<78FCFCFCFC780606778518>I<000300000780000F80000F80000F00001F00001F00003E00
003E00003C00007C00007C0000F80000F80000F00001F00001F00003E00003E00007C00007C000
0780000F80000F80001F00001F00001E00003E00003E00007C00007C0000780000F80000F80000
F0000060000011247D9F18>I<01F00007FC000FFE001F1F001C07003803807803C07001C07001
C0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803
C03803801C07001F1F000FFE0007FC0001F000131C7E9B18>I<01800380078007800F803F80FF
80FB80638003800380038003800380038003800380038003800380038003800380038003807FFC
FFFE7FFC0F1C7B9B18>I<07F8001FFE003FFF007C0F807003C0F001E0F000E0F000E0F000E000
00E00000E00001E00001C00003C0000780000F00001E00003C0000780000F00003E00007C0000F
80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<07F8001FFE003FFF007C0F807803C0
7801C03001C00001C00003C0000780000F8003FF0003FE0003FF00000F800003C00001C00001E0
0000E00000E0F000E0F001E0F001C0F003C07C0F803FFF001FFE0007F800131C7E9B18>I<001F
00003F00007F0000770000F70001E70001C70003C7000787000707000E07001E07003C07003807
00780700F00700FFFFF8FFFFF8FFFFF8000700000700000700000700000700000700007FF000FF
F8007FF0151C7F9B18>I<1FFF803FFF803FFF8038000038000038000038000038000038000038
00003800003BFC003FFE003FFF003E07801803C00001E00000E00000E06000E0F000E0F001E0E0
01C0F003C07C0F803FFF001FFE0007F800131C7E9B18>I<007E0001FF0007FF800FC3C01F03C0
3C03C0380180780000700000700000F3F800EFFE00FFFF00FE0F80F803C0F001C0F001E0F000E0
F000E0F000E07000E07001E07801C03C03C01E0F800FFF0007FE0003F800131C7E9B18>I<E000
00FFFFE0FFFFE0FFFFE0E003C0E00780000F00000E00001E00001C00003C000078000070000070
0000F00000E00000E00001E00001C00001C00001C00003C0000380000380000380000380000380
00038000038000131D7E9C18>I<03F8000FFC001FFE003E0F00780780F003C0E001C0E001C0E0
01E0E001E0E001E0F001E07803E03E0FE01FFFE00FFEE003F8E00001E00001C00001C00003C030
0380780780780F00783E003FFC001FF8000FE000131C7E9B18>57 D<78FCFCFCFC780000000000
00000078FCFCFCFC780614779318>I<3C7E7E7E7E3C0000000000000000387C7E7E7E3E0E1E3C
78F060071A789318>I<000300000F80001F80003F0000FE0001FC0003F00007E0001FC0003F80
007E0000FC0000FC00007E00003F80001FC00007E00003F00001FC0000FE00003F00001F80000F
8000030011187D9918>I<7FFFC0FFFFE0FFFFE0FFFFE0000000000000000000000000FFFFE0FF
FFE0FFFFE07FFFC0130C7E9318>I<600000F80000FC00007E00003F80001FC00007E00003F000
01FC0000FE00003F00001F80001F80003F0000FE0001FC0003F00007E0001FC0003F80007E0000
FC0000F8000060000011187D9918>I<00700000F80000F80000D80000D80001DC0001DC0001DC
00018C00038E00038E00038E00038E000306000707000707000707000707000FFF800FFF800FFF
800E03800E03801C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>65 D<FFFC00FFFF00FFFF80
1C03C01C01C01C00E01C00E01C00E01C00E01C01E01C01C01C07C01FFF801FFF001FFFC01C03C0
1C00E01C00F01C00701C00701C00701C00701C00F01C00E01C03E0FFFFC0FFFF80FFFE00141C7F
9B18>I<01FCE003FEE007FFE00F07E01E03E03C01E07800E07000E07000E0F00000E00000E000
00E00000E00000E00000E00000E00000E00000F000007000E07000E07800E03C01E01E01C00F07
C007FF8003FF0001FC00131C7E9B18>I<7FF800FFFE007FFF001C0F801C03C01C03C01C01E01C
00E01C00E01C00F01C00701C00701C00701C00701C00701C00701C00701C00701C00F01C00E01C
00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F9B18>I<FFFFF0FFFFF0FFFFF0
1C00701C00701C00701C00701C00001C00001C0E001C0E001C0E001FFE001FFE001FFE001C0E00
1C0E001C0E001C00001C00001C00381C00381C00381C00381C0038FFFFF8FFFFF8FFFFF8151C7F
9B18>I<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C00E01C00001C00001C1C001C1C001C1C
001FFC001FFC001FFC001C1C001C1C001C1C001C00001C00001C00001C00001C00001C00001C00
00FFC000FFC000FFC000131C7E9B18>I<01F9C007FFC00FFFC01F0FC01C03C03C03C07801C070
01C07001C0F00000E00000E00000E00000E00000E00000E00FF0E01FF0E00FF0F001C07001C070
03C07803C03C03C01C07C01F0FC00FFFC007FDC001F9C0141C7E9B18>I<7F07F0FF8FF87F07F0
1C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C0
1C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0151C7F
9B18>I<7FFF00FFFF807FFF0001C00001C00001C00001C00001C00001C00001C00001C00001C0
0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
007FFF00FFFF807FFF00111C7D9B18>I<7F07F0FF87F87F07F01C03C01C07801C07001C0F001C
1E001C3C001C38001C78001CF0001DF0001DF8001FF8001FBC001F1C001E1E001E0E001C0F001C
07001C07801C03801C03C01C01C07F03F0FF87F87F03F0151C7F9B18>75
D<7FE000FFE0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
000E00000E00000E00000E00000E00000E00000E00000E00700E00700E00700E00700E00707FFF
F0FFFFF07FFFF0141C7F9B18>I<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B8EE03B
8EE0398CE0398CE039DCE039DCE039DCE038D8E038D8E038F8E03870E03870E03800E03800E038
00E03800E03800E03800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07F01D81C0
1D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C01C39C0
1C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C7F9B18>
I<0FF8003FFE007FFF00780F00700700F00780E00380E00380E00380E00380E00380E00380E003
80E00380E00380E00380E00380E00380E00380E00380E00380E00380F00780700700780F007FFF
003FFE000FF800111C7D9B18>I<FFFE00FFFF80FFFFC01C03C01C01E01C00E01C00701C00701C
00701C00701C00701C00E01C01E01C03C01FFFC01FFF801FFE001C00001C00001C00001C00001C
00001C00001C00001C0000FF8000FF8000FF8000141C7F9B18>I<0FF8003FFE007FFF00780F00
700700F00780E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380
E00380E00380E00380E1E380E1E380F0E78070F700787F007FFF003FFE000FFC00001C00001E00
000E00000F0000070000070011227D9B18>I<7FF800FFFE007FFF001C0F801C03801C03C01C01
C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FFE001C0F001C07801C03801C03801C03
801C03801C03801C039C1C039C1C039C7F03FCFF81F87F00F0161C7F9B18>I<07F3801FFF803F
FF807C1F80700780F00380E00380E00380E00000F000007800003F00001FF0000FFE0001FF0000
1F800003C00001E00000E00000E06000E0E000E0E001E0F001C0FC07C0FFFF80FFFF00E7FC0013
1C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038E07038007000007000007000007000
007000007000007000007000007000007000007000007000007000007000007000007000007000
00700007FF0007FF0007FF00151C7F9B18>I<FF83FEFF83FEFF83FE1C00701C00701C00701C00
701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00
701C00701E00F00E00E00F01E007C7C003FF8001FF00007C00171C809B18>I<FF07F8FF07F8FF
07F81C01C01C01C01C01C01C01C00E03800E03800E03800E03800F078007070007070007070007
0700038E00038E00038E00038E00018C0001DC0001DC0001DC0000D80000F80000F80000700015
1C7F9B18>I<FE03F8FE03F8FE03F87000707000707000703800E03800E03800E03800E03800E0
38F8E038F8E039DCE039DCE019DCC019DCC019DCC0198CC01D8DC01D8DC01D8DC01D8DC00D8D80
0D05800F07800F07800E0380151C7F9B18>I<7F8FE07F9FE07F8FE00E07000F0700070E00078E
00039C0003DC0001F80001F80000F00000F00000700000F00000F80001F80001DC00039E00038E
00070F000707000E07800E03801E03C07F07F0FF8FF87F07F0151C7F9B18>I<FF07F8FF07F8FF
07F81C01C01E03C00E03800F0780070700070700038E00038E0001DC0001DC0001FC0000F80000
F80000700000700000700000700000700000700000700000700000700001FC0003FE0001FC0015
1C7F9B18>I<3FFFE07FFFE07FFFE07001C07003C0700780700700000F00001E00001C00003C00
00780000700000F00001E00001C00003C0000780000700000F00001E00E01C00E03C00E07800E0
7000E0FFFFE0FFFFE0FFFFE0131C7E9B18>I<FFF8FFF8FFF8E000E000E000E000E000E000E000
E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000FFF8FFF8FFF80D24779F18>I<FFF8FFF8FFF800380038003800380038003800
380038003800380038003800380038003800380038003800380038003800380038003800380038
0038003800380038FFF8FFF8FFF80D247F9F18>93 D<7FFF00FFFF80FFFF807FFF0011047D7F18
>95 D<1FE0003FF8007FFC00783E00300F0000070000070001FF000FFF003FFF007F0700780700
F00700E00700E00700F00F00783F007FFFF03FFBF00FE1F014147D9318>97
D<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC00FE3E00F80
F00F00700F00780E00380E00380E00380E00380E00380F00380F00780F00700F80F00FC3E00FFF
C00EFF80067E00151C809B18>I<01FE0007FF001FFF803F07803C0300780000700000F00000E0
0000E00000E00000E00000F000007000007801C03C01C03F07C01FFF8007FF0001FC0012147D93
18>I<001F80003F80001F8000038000038000038000038000038003F3800FFB801FFF803E1F80
780F80700780F00780E00380E00380E00380E00380E00380E00780F00780700780780F803E3F80
1FFFF00FFBF803E3F0151C7E9B18>I<03F0000FFC001FFE003E1F00780780700380F003C0E001
C0E001C0FFFFC0FFFFC0FFFFC0F000007000007801C03C01C03F07C01FFF8007FF0001FC001214
7D9318>I<001FC0007FE000FFE001F1E001C0C001C00001C00001C0007FFFC0FFFFC0FFFFC001
C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C0007FFF007FFF007FFF00131C7F9B18>I<03F1F007FFF80FFFF81E1F303C0F00380700380700
3807003807003807003C0F001E1E001FFC003FF8003BF0003800003C00001FFF001FFFC03FFFE0
7801F0F00078E00038E00038E00038F000787800F07E03F03FFFE00FFF8003FE00151F7F9318>
I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3F000EFF800FFFC00FE1E00F80
E00F00E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC3
FCFFE7FE7FC3FC171C809B18>I<03800007C00007C00007C00003800000000000000000000000
00007FC000FFC0007FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C00001C00001C00001C000FFFF00FFFF80FFFF00111D7C9C18>I<0038007C007C007C00
3800000000000000000FFC1FFC0FFC001C001C001C001C001C001C001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C003C6038F078FFF07FE03FC00E277E9C18>I<FE00
00FE0000FE00000E00000E00000E00000E00000E00000E3FF00E7FF00E3FF00E07800E0F000E1E
000E3C000E78000EF0000FF8000FFC000F9C000F1E000E0F000E07800E03800E03C0FFC7F8FFC7
F8FFC7F8151C7F9B18>I<7FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000
E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
E00000E00000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7DF1F000FFFBF8007FFFFC001F1F1C
001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C
1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F001914819318>I<7E3F00FEFF80
7FFFC00FE1E00F80E00F00E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
0E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE001FFF003E0F803803807001
C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F801FFF000FFE
0001F00013147E9318>I<7E3E00FEFF807FFFC00FE3E00F80F00F00700F00780E00380E00380E
00380E00380E00380F00380F00780F00700F80F00FC3E00FFFC00EFF800E7E000E00000E00000E
00000E00000E00000E00000E00007FC000FFE0007FC000151E809318>I<03F3800FFB801FFF80
3E1F80780F80700780F00780E00380E00380E00380E00380E00380E00380F00780700780780F80
3E1F801FFF800FFB8003F380000380000380000380000380000380000380000380003FF8003FF8
003FF8151E7E9318>I<7F87E0FF9FF87FBFF803FC7803F03003E00003C00003C00003C0000380
000380000380000380000380000380000380000380007FFE00FFFF007FFE0015147F9318>I<0F
F7003FFF007FFF00F81F00E00700E00700F007007C00007FF0001FFC0007FE00001F00600780E0
0380F00380F00780FC0F00FFFF00FFFE00E7F80011147D9318>I<018000038000038000038000
0380007FFFC0FFFFC0FFFFC0038000038000038000038000038000038000038000038000038000
0380400380E00380E00381E003C3C001FFC000FF80007E0013197F9818>I<7E07E0FE0FE07E07
E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E01
E00F07E007FFFC03FFFE01FCFC1714809318>I<7F8FF0FF8FF87F8FF01E03C00E03800E03800E
0380070700070700070700038E00038E00038E00038E0001DC0001DC0001DC0000F80000F80000
700015147F9318>I<FF8FF8FF8FF8FF8FF83800E03800E03800E01C01C01C01C01C71C01CF9C0
1CF9C01CD9C01CD9C00DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318>I<7F8F
F07F9FF07F8FF0070700078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E
00038E000707000F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E01C00E
03800E0380070380070700070700038700038600038E0001CE0001CE0000CC0000CC0000DC0000
780000780000780000700000700000700000F00000E00079E0007BC0007F80003F00001E000015
1E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00001E00007C0000F80001F000
03E0000780000F00701E00703C0070780070FFFFF0FFFFF0FFFFF014147F9318>I<0007E0003F
E0007FE000FC0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
0001E0007FC000FF8000FF80007FC00001E00000E00000E00000E00000E00000E00000E00000E0
0000E00000E00000E00000E00000FC00007FE0003FE00007E013247E9F18>I<7C0000FF8000FF
C00007E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
F000007FC0003FE0003FE0007FC000F00000E00000E00000E00000E00000E00000E00000E00000
E00000E00000E00000E00007E000FFC000FF80007C000013247E9F18>125
D E /Fu 73 124 df<003F0F0000FFBF8003C3F3C00703E3C00703C1800E01C0000E01C0000E01
C0000E01C0000E01C0000E01C000FFFFFC00FFFFFC000E01C0000E01C0000E01C0000E01C0000E
01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
7F87FC007F87FC001A1D809C18>11 D<003F0000FF8003C1C00703C00703C00E01800E00000E00
000E00000E00000E0000FFFFC0FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
C00E01C00E01C00E01C00E01C00E01C00E01C07F87F87F87F8151D809C17>I<003FC000FFC003
C3C00703C00701C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC0FFFFC00E01C00E01C00E
01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF87F
CFF8151D809C17>I<003F03F00000FFCFF80003C0FC1C000701F03C000701F03C000E00E01800
0E00E000000E00E000000E00E000000E00E000000E00E00000FFFFFFFC00FFFFFFFC000E00E01C
000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E0
1C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF807FC7FCFF80211D
809C23>I<7070F8F8FCFCFCFC7C7C0C0C0C0C0C0C181818183030606040400E0D7F9C15>34
D<70F8FCFC7C0C0C0C1818306040060D7D9C0C>39 D<00C00180030006000E000C001C00180038
00300030007000700060006000E000E000E000E000E000E000E000E000E000E000E000E0006000
60007000700030003000380018001C000C000E0006000300018000C00A2A7D9E10>I<C0006000
300018001C000C000E000600070003000300038003800180018001C001C001C001C001C001C001
C001C001C001C001C001C0018001800380038003000300070006000E000C001C00180030006000
C0000A2A7E9E10>I<018001C0018001806186F99F7DBE1FF807E007E01FF87DBEF99F61860180
018001C0018010127E9E15>I<0006000000060000000600000006000000060000000600000006
0000000600000006000000060000000600000006000000060000FFFFFFE0FFFFFFE00006000000
060000000600000006000000060000000600000006000000060000000600000006000000060000
00060000000600001B1C7E9720>I<70F0F8F8781818183030706040050D7D840C>I<FFE0FFE0FF
E00B0380890E>I<70F8F8F87005057D840C>I<00030003000700060006000E000C001C00180018
00380030003000700060006000E000C000C001C001800380030003000700060006000E000C000C
001C001800180038003000700060006000E000C000C00010297E9E15>I<03C00FF01C38381C38
1C700E700E700EF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F700E700E700E
381C381C1C380FF007E0101D7E9B15>I<030007003F00FF00C700070007000700070007000700
070007000700070007000700070007000700070007000700070007000700FFF8FFF80D1C7C9B15
>I<07C01FF03878603C601EF01EF80FF80FF80F700F000F000E001E001C003C0078007000E001
C0038007000E030C03180330067FFEFFFEFFFE101C7E9B15>I<6000007FFF807FFF807FFF0060
0300C00600C00C00C00C0000180000300000300000600000600000C00000C00001C00001C00003
8000038000038000038000078000078000078000078000078000078000078000030000111D7E9B
15>55 D<03C00FF01C38381C781C700EF00EF00EF00FF00FF00FF00FF00F700F701F781F383F1F
EF0FCF000E000E000E301C781C7838703030F03FC00F80101D7E9B15>57
D<70F8F8F870000000000000000070F8F8F87005127D910C>I<70F8F8F8700000000000000000
70F0F8F8781818183030706040051A7D910C>I<7FFFFFC0FFFFFFE00000000000000000000000
000000000000000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61
D<0FE03FF8703C601CF01EF01EF01E001E003C007800E001C00180038003000300030003000300
0200000000000000000007000F800F800F8007000F1D7E9C14>63 D<00060000000F0000000F00
00000F0000001F8000001F8000001F8000001F80000033C0000033C0000033C0000061E0000061
E0000061E00000C0F00000C0F00000C0F000018078000180780001FFF80003FFFC0003003C0003
003C0006001E0006001E0006001E001F001F00FFC0FFF0FFC0FFF01C1D7F9C1F>65
D<FFFFC0FFFFF00F00F80F003C0F001C0F001E0F001E0F001E0F001E0F001C0F003C0F00780FFF
F00FFFE00F00F80F003C0F001E0F001E0F000F0F000F0F000F0F000F0F000F0F001E0F003E0F00
7CFFFFF8FFFFC0181C7E9B1D>I<001F808000FFE18003F0338007801B800F000F801E0007801C
0003803C000380780003807800018070000180F0000180F0000000F0000000F0000000F0000000
F0000000F0000000F00000007000018078000180780001803C0001801C0003001E0003000F0006
0007800C0003F0380000FFF000001F8000191E7E9C1E>I<FFFFC000FFFFF0000F007C000F001E
000F000F000F0007000F0003800F0003C00F0003C00F0001C00F0001E00F0001E00F0001E00F00
01E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007800F
000F000F001E000F007C00FFFFF000FFFFC0001B1C7E9B20>I<FFFFFCFFFFFC0F007C0F001C0F
000C0F000E0F00060F03060F03060F03060F03000F07000FFF000FFF000F07000F03000F03000F
03030F03030F00030F00060F00060F00060F000E0F001E0F007CFFFFFCFFFFFC181C7E9B1C>I<
FFFFF8FFFFF80F00780F00380F00180F001C0F000C0F000C0F030C0F030C0F03000F03000F0700
0FFF000FFF000F07000F03000F03000F03000F03000F00000F00000F00000F00000F00000F0000
FFF800FFF800161C7E9B1B>I<001F808000FFE18003F0338007801B800F000F801E0007801C00
03803C000380780003807800018070000180F0000180F0000000F0000000F0000000F0000000F0
000000F000FFF0F000FFF07000078078000780780007803C0007801C0007801E0007800F000780
07800F8003F0398000FFF080001FC0001C1E7E9C21>I<FFF3FFC0FFF3FFC00F003C000F003C00
0F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000FFFFC000FFFFC
000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F00
3C000F003C000F003C00FFF3FFC0FFF3FFC01A1C7E9B1F>I<FFF0FFF00F000F000F000F000F00
0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00FF
F0FFF00C1C7F9B0F>I<FFF800FFF8000F00000F00000F00000F00000F00000F00000F00000F00
000F00000F00000F00000F00000F00000F00000F00000F00180F00180F00180F00180F00380F00
300F00700F00F00F01F0FFFFF0FFFFF0151C7E9B1A>76 D<FF8000FF80FFC001FF800FC001F800
0FC001F8000DE00378000DE00378000DE00378000CF00678000CF00678000CF00678000C780C78
000C780C78000C780C78000C3C1878000C3C1878000C3C1878000C1E3078000C1E3078000C1E30
78000C0F6078000C0F6078000C0F6078000C07C078000C07C078000C07C078001E03807800FFC3
87FF80FFC387FF80211C7E9B26>I<FF00FFC0FF80FFC00F801E000FC00C000FC00C000DE00C00
0CF00C000CF00C000C780C000C780C000C3C0C000C1E0C000C1E0C000C0F0C000C0F0C000C078C
000C07CC000C03CC000C01EC000C01EC000C00FC000C00FC000C007C000C003C000C003C001E00
1C00FFC01C00FFC00C001A1C7E9B1F>I<003F800000FFE00003E0F80007803C000E000E001E00
0F003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F0
0001E0F00001E0F00001E0F00001E0780003C0780003C0780003C03C0007803C0007801E000F00
0F001E0007803C0003E0F80000FFE000003F80001B1E7E9C20>I<FFFF80FFFFE00F00F00F0038
0F003C0F001E0F001E0F001E0F001E0F001E0F001E0F003C0F00380F00F00FFFE00FFF800F0000
0F00000F00000F00000F00000F00000F00000F00000F00000F0000FFF000FFF000171C7E9B1C>
I<FFFF0000FFFFE0000F00F0000F0038000F003C000F001E000F001E000F001E000F001E000F00
1E000F003C000F0038000F00F0000FFFE0000FFFC0000F01E0000F00F0000F0078000F0078000F
0078000F0078000F0078000F0078000F0078000F0078300F003830FFF03C60FFF01FE0000007C0
1C1D7E9B1F>82 D<07E0801FF9803C1F80700780700380E00380E00180E00180E00180F00000F0
00007C00007FC0003FF8001FFE0007FF0000FF80000F800003C00003C00001C0C001C0C001C0C0
01C0E00180E00380F00300FC0E00CFFC0083F800121E7E9C17>I<7FFFFFC07FFFFFC0780F03C0
700F01C0600F00C0E00F00E0C00F0060C00F0060C00F0060C00F0060000F0000000F0000000F00
00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
0000000F0000000F0000000F000003FFFC0003FFFC001B1C7F9B1E>I<FFF0FFC0FFF0FFC00F00
1E000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F
000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C00
07001800078018000380300001C0300000E0E000007FC000001F00001A1D7E9B1F>I<FFE0FFE1
FFFFE0FFE1FF1F001E007C0F001E00300F003F00300F003F00300F803F00700780678060078067
8060078067806003C0E780C003C0C3C0C003C0C3C0C001E0C3C18001E181E18001E181E18001E1
81E18000F381F30000F300F30000F300F300007B00F600007E007E00007E007E00007E007E0000
3C003C00003C003C00003C003C00001C0038000018001800281D7F9B2B>87
D<7FF0FFC07FF0FFC007C03E0003C0380003E0300001E0700001F0600000F0C0000079C000007D
8000003F0000001F0000001F0000000F0000000F8000001F8000003BC0000033E0000071E00000
61F00000C0F80001C0780001807C0003003C0007001E000F801F00FFE0FFF0FFE0FFF01C1C7F9B
1F>I<FFF00FFCFFF00FFC078003C007C0038003C0030003E0060001F0060000F00C0000F81C00
00781800007C3800003C3000001E6000001F6000000FC000000FC0000007800000078000000780
0000078000000780000007800000078000000780000007800000078000007FF800007FF8001E1C
809B1F>I<7FFFF07FFFF07E01E07803E07003C0700780600780600F00601F00601E00003C0000
7C0000780000F00000F00001E00003E03003C0300780300F80300F00701E00701E00603C00E07C
01E07807E0FFFFE0FFFFE0141C7E9B19>I<08081818303060606060C0C0C0C0C0C0F8F8FCFCFC
FC7C7C38380E0D7B9C15>92 D<0FE0001FF8003C3C003C1E00180E00000E00001E0007FE001FFE
003E0E00780E00F00E00F00E60F00E60F01E60783E603FFFC01F878013127F9115>97
D<FC0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7E001DFF
001F87801E01C01C01E01C00E01C00F01C00F01C00F01C00F01C00F01C00F01C00E01C01E01E01
C01F078019FF00187C00141D7F9C17>I<03F00FF81E3C383C78187000F000F000F000F000F000
F000780078063C061E0C0FF803E00F127F9112>I<001F80001F80000380000380000380000380
00038000038000038000038000038003E3800FFB801E0F80380780780380700380F00380F00380
F00380F00380F00380F003807003807803803807801E1F800FFBF007E3F0141D7F9C17>I<03E0
0FF01C38381C781E700EFFFEFFFEF000F000F000F000700078063C061E0C0FF803E00F127F9112
>I<007801FC039E071E0E0C0E000E000E000E000E000E00FFE0FFE00E000E000E000E000E000E
000E000E000E000E000E000E000E000E007FE07FE00F1D809C0D>I<00038007E7C00FFDC03C3D
C0381C00781E00781E00781E00781E00381C003C3C003FF00037E0007000007000003000003FFC
001FFF003FFF80700780E001C0E001C0E001C0E001C07003803C0F001FFE0007F800121C7F9215
>I<FC0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001D
FF001F07001E03801E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
03801C0380FF9FF0FF9FF0141D7F9C17>I<18003C007C003C0018000000000000000000000000
00FC00FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80FF80091D
7F9C0C>I<01C003E003E003E001C00000000000000000000000000FE00FE000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F1C0F1C07F803E
000B25839C0D>I<FC0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001C
00001C7FC01C7FC01C3E001C18001C30001C60001CC0001DE0001FE0001E70001C78001C38001C
3C001C1C001C0E001C0F00FF9FE0FF9FE0131D7F9C16>I<FC00FC001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
FF80FF80091D7F9C0C>I<FC7E07E000FDFF9FF8001F83B838001E01E01C001E01E01C001C01C0
1C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01
C01C001C01C01C001C01C01C00FF8FF8FF80FF8FF8FF8021127F9124>I<FC7C00FDFF001F0700
1E03801E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
FF9FF0FF9FF014127F9117>I<03F0000FFC001E1E00380700780780700380F003C0F003C0F003
C0F003C0F003C0F003C07003807807803807001E1E000FFC0003F00012127F9115>I<FC7E00FD
FF001F87801E03C01C01E01C01E01C00F01C00F01C00F01C00F01C00F01C00F01C01E01C01E01E
03C01F07801DFF001C7C001C00001C00001C00001C00001C00001C0000FF8000FF8000141A7F91
17>I<03E1800FF9801E1F803C0780780780780380F00380F00380F00380F00380F00380F00380
7803807807803C07801E1F800FFB8007E380000380000380000380000380000380000380001FF0
001FF0141A7F9116>I<FDE0FFF01F781E781E301C001C001C001C001C001C001C001C001C001C
001C00FFC0FFC00D127F9110>I<1F903FF07070E030E030E030F8007F803FE00FF000F8C038C0
38E038E038F070DFE08FC00D127F9110>I<0C000C000C000C000C001C001C003C00FFE0FFE01C
001C001C001C001C001C001C001C001C301C301C301C301C301E600FC007800C1A7F9910>I<FC
1F80FC1F801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
03801C07800C0F800FFBF003E3F014127F9117>I<FF0FE0FF0FE01C07801C03000E06000E0600
0E0600070C00070C00071C0003980003980003F80001F00001F00000E00000E00000E00013127F
9116>I<FF3FCFE0FF3FCFE01C0F07801C0F03001C1F03000E1B06000E1B86000E1B86000E318E
000731CC000731CC000760CC0003E0F80003E0F80003E0F80001C0700001C0700001C070001B12
7F911E>I<7F8FF07F8FF00F0780070600038E0001DC0001D80000F00000700000780000F80001
DC00038E00030E000607000F0380FF8FF8FF8FF81512809116>I<FF0FE0FF0FE01C07801C0300
0E06000E06000E0600070C00070C00071C0003980003980003F80001F00001F00000E00000E000
00E00000C00000C00000C000F18000F18000C700007E00003C0000131A7F9116>I<7FFC7FFC78
38707060F060E061C063C00380070C0F0C0E0C1C1C3C1838187078FFF8FFF80E127F9112>I<FF
FFF0FFFFF01402808B15>I E /Fv 74 123 df<0000F000F8F001F8F003F8F00780000700000F
00000F00000F00000F00000F00000F00000F0000FFF8F0FFF8F0FFF8F00F00F00F00F00F00F00F
00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F
00F0142180A018>12 D<00F8F001F8F003F8F00780F00700F00F00F00F00F00F00F00F00F00F00
F00F00F00F00F0FFF8F0FFF8F0FFF8F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00
F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F01420809F18>I<007000E0
01C00380078007000E001E001E003C003C003C0078007800780078007000F000F000F000F000F0
00F000F000F000F000F000F000F000700078007800780078003C003C003C001E001E000E000700
0780038001C000E000700C2E7EA112>40 D<E000700038001C001E000E0007000780078003C003
C003C001E001E001E001E000E000F000F000F000F000F000F000F000F000F000F000F000F000E0
01E001E001E001E003C003C003C00780078007000E001E001C0038007000E0000C2E7DA112>I<
018001C001800180C183E187F99F7DBE1FF807E007E01FF87DBEF99FE187C1830180018001C001
8010147DA117>I<00060000000600000006000000060000000600000006000000060000000600
0000060000000600000006000000060000000600000006000000060000FFFFFFF0FFFFFFF00006
000000060000000600000006000000060000000600000006000000060000000600000006000000
060000000600000006000000060000000600001C207D9A23>I<787878781830306060E0050A7D
830D>I<FFC0FFC0FFC00A037F8B0F>I<F0F0F0F004047C830D>I<00030003000700060006000E
000C000C001C0018001800380030003000700060006000E000C000C001C0018001800180038003
0003000700060006000E000C000C001C0018001800380030003000700060006000E000C000C000
102D7DA117>I<03F00007F8001FFE001E1E003C0F00380700780780780780700380F003C0F003
C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C07807
807807807807803807003C0F001E1E001FFE000FFC0003F00012207E9E17>I<00C001C00FC0FF
C0FFC0F3C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C0
03C003C003C003C003C0FFFEFFFEFFFE0F1F7C9E17>I<07F0000FFC001FFE00383F00700F0060
0780E00780E003C04003C04003C00003C00003C00003C0000780000780000F00000E00001C0000
3C0000780000E00001C0000380000700000E00001C0000380000700000FFFFC0FFFFC0FFFFC012
1F7E9E17>I<03F0000FFC001FFE003C1F00780F00300780200780000780000780000780000F00
000F00003E0003FC0003F80003FC00001E00000F000007800003800003C00003C00003C00003C0
8003C0C003C0C00780700F807C1F003FFE000FFC0003F00012207E9E17>I<003E00003E00005E
00005E0000DE0001DE00019E00039E00039E00079E00071E000F1E000E1E001E1E003C1E003C1E
00781E00781E00F01E00FFFFF0FFFFF0FFFFF0001E00001E00001E00001E00001E00001E00001E
00001E00141E7F9D17>I<7FFF007FFF007FFF0078000078000078000078000078000078000078
000079F0007FFC007FFE007F1F007C07007C07807807800003C00003C00003C00003C00003C000
03C00003C0400780600780F00F007C1E003FFC001FF80007E000121F7E9D17>I<007C0001FE00
03FE000782000F00001E00003C00003C000078000078000078F800F3FC00F7FE00FE1F00FC0F80
F80780F80780F003C0F003C0F003C0F003C0F003C07003C07803C07803C07807803807803C0F00
1E1E000FFE0007F80001F00012207E9E17>I<03F0000FFC001FFE003E1F003C0F007807807807
807807807807807807807807803C0F001E1E000FFC0007F8000FFC001F3E003C0F007807807807
80F003C0F003C0F003C0F003C0F003C0F003C07807807C0F803E1F001FFE000FFC0003F0001220
7E9E17>56 D<03F00007F8000FFC001E1E003C0F00780700780780F00780F00380F003C0F003C0
F003C0F003C0F003C0F003C07807C07807C07C0FC03E1FC01FFBC00FF3C007C780000780000780
000700000F00001E00201E00307C007FF8003FF0000FC00012207E9E17>I<F0F0F0F000000000
0000000000000000F0F0F0F004147C930D>I<FFFFFFF0FFFFFFF0000000000000000000000000
0000000000000000000000000000000000000000FFFFFFF0FFFFFFF01C0C7D9023>61
D<001F0000001F0000003F8000003B8000003B8000007BC0000073C0000071C00000F1E00000E1
E00000E0E00001E0F00001E0F00001C0F00003C0780003C078000380780007803C0007803C0007
003C000FFFFE000FFFFE000FFFFE001E000F001E000F003C000F803C0007803C000780780007C0
780003C0780003C0F00003E01B207F9F1E>65 D<FFF800FFFF00FFFF80F00FC0F003E0F001E0F0
00F0F000F0F000F0F000F0F000F0F001E0F003C0F01F80FFFF00FFFF00FFFF80F007E0F001E0F0
00F0F00078F00078F00078F00078F00078F00078F000F0F001F0F007E0FFFFC0FFFF80FFFC0015
207B9F1E>I<001FC000FFF801FFFC03E03C07800C0F00001E00003E00003C00007C0000780000
780000780000F00000F00000F00000F00000F00000F00000F00000F00000780000780000780000
7C00003C00003E00001E00000F000207800E03E03E01FFFC00FFF0001FC017227DA01D>I<FFFC
00FFFF80FFFFC0F007E0F001F0F000F8F00078F0003CF0003CF0001EF0001EF0000EF0000FF000
0FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0001EF0001EF0001EF0003CF0007CF000
F8F001F0F007E0FFFFC0FFFF80FFFC0018207B9F21>I<FFFFC0FFFFC0FFFFC0F00000F00000F0
0000F00000F00000F00000F00000F00000F00000F00000F00000FFFF80FFFF80FFFF80F00000F0
0000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000FFFFE0FFFFE0FF
FFE013207B9F1B>I<FFFFC0FFFFC0FFFFC0F00000F00000F00000F00000F00000F00000F00000
F00000F00000F00000F00000FFFF00FFFF00FFFF00F00000F00000F00000F00000F00000F00000
F00000F00000F00000F00000F00000F00000F00000F00000F0000012207B9F1A>I<001FE000FF
F801FFFE03E03E07800E0F00001E00003E00003C00007C0000780000780000780000F00000F000
00F00000F00000F00000F00000F003FEF003FE7803FE78001E78001E7C001E3C001E3E001E1E00
1E0F001E07801E03E03E01FFFE00FFF8001FC017227DA01E>I<F00078F00078F00078F00078F0
0078F00078F00078F00078F00078F00078F00078F00078F00078F00078FFFFF8FFFFF8FFFFF8F0
0078F00078F00078F00078F00078F00078F00078F00078F00078F00078F00078F00078F00078F0
0078F0007815207B9F20>I<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
F0F0F0F0F004207C9F0D>I<F0003EF0007CF000F8F001F0F003E0F007C0F00780F00F00F01F00
F03E00F07C00F0F800F1F000F3F800F3F800F7FC00FFBC00FF1E00FE1F00FC0F00F80780F00780
F003C0F003E0F001E0F000F0F000F8F00078F0003CF0003CF0001EF0001F18207B9F20>75
D<F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000FFFF80FFFF80FFFF8011207B9F19>I<F80001F8FC0003F8FC0003F8F4
000378F6000778F6000778F6000778F7000F78F3000E78F3000E78F3801E78F3801E78F1801C78
F1C03C78F1C03C78F1C03C78F0C03878F0E07878F0E07878F0607078F070F078F070F078F030E0
78F039E078F039E078F019C078F019C078F019C078F00F8078F00F8078F00F8078F00000781D20
7B9F28>I<FC0078FE0078FE0078F60078F70078F70078F38078F38078F38078F3C078F1C078F1
E078F1E078F0E078F0F078F07078F07078F07878F03878F03C78F03C78F01C78F01E78F00E78F0
0E78F00E78F00778F00778F00378F003F8F003F8F001F815207B9F20>I<003F000000FFC00003
FFF00007E1F8000F807C001F003E001E001E003C000F003C000F00780007807800078078000780
F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F80007
C07800078078000780780007803C000F003C000F001E001E001F003E000F807C0007E1F80003FF
F00000FFC000003F00001A227DA021>I<FFF800FFFF00FFFF80F00FC0F003E0F001E0F000F0F0
00F0F000F0F000F0F000F0F000F0F000F0F001E0F003E0F00FC0FFFF80FFFF00FFF800F00000F0
0000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000014207B9F
1D>I<003F000000FFC00003FFF00007E1F8000F807C001F003E001E001E003C000F003C000F00
780007807800078078000780F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003
C0F00003C0F00003C0F00003C07800078078000780781E07803C0F0F003C0F8F001E079E001F03
FE000F83FC0007E1F80003FFF00000FFF800003F780000007C0000003E0000001E0000001F0000
000F801A277DA021>I<FFF800FFFF00FFFF80F007C0F003E0F001E0F000F0F000F0F000F0F000
F0F000F0F001E0F003E0F007C0FFFF80FFFF00FFF800F03C00F01E00F01E00F00F00F00F00F007
80F00780F003C0F001C0F001E0F000F0F000F0F00078F00078F0003C16207B9F1D>I<01FC0007
FF800FFFC01F03C03C00C03C00007800007800007800007800007800007C00003C00003F00001F
E0000FFC0007FE0001FF00003F800007C00003C00003E00001E00001E00001E00001E00001E000
01C0C003C0F007C0FC0F807FFF001FFE0003F80013227EA019>I<FFFFFFC0FFFFFFC0FFFFFFC0
001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E00
00001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E
0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E00001A
207E9F1F>I<F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0
F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0
F000F07801E07801E03C03C03C03C01F0F800FFF0007FE0001F80014217B9F1F>I<F00001E0F0
0001E0780003C0780003C0780003C03C0007803C0007803C0007801E000F001E000F001F000F00
0F001E000F001E0007801C0007803C0007803C0003C0380003C0780003C0780001E0700001E0F0
0001E0F00000F0E00000F1E00000F1E0000071C000007BC000003B8000003B8000003F8000001F
0000001F00001B207F9F1E>I<F0007C000FF0007E000FF0007E000F78006E000E7800EE001E78
00E7001E7800E7001E3C00E7003C3C01E7803C3C01C7803C3C01C3803C1E01C380781E03C3C078
1E0383C0780E0381C0700F0381C0F00F0781E0F00F0701E0F0070700E0E0078700E1E0078F00F1
E0078E00F1E0038E0071C0038E0071C003CE0073C001DC007B8001DC003B8001DC003B8001DC00
3B8000F8003F0000F8001F0000F8001F0028207F9F2B>I<780007807C000F003E001F001E001E
000F003C000F807C000780780003C0F00003E1F00001F1E00000F3C000007FC000007F8000003F
0000001F0000001E0000003F0000007F8000007FC00000F3C00001F1E00001E0F00003C0F80007
C0780007803C000F003E001F001E001E000F003C000F807C0007C0780003C0F00003E01B207F9F
1E>I<F80000F87C0001F03C0001E03E0003E01F0003C00F0007800F800F8007C00F0003C01F00
03E01E0001F03C0000F07C00007878000078F000003CF000001DE000001FE000000FC000000780
000007800000078000000780000007800000078000000780000007800000078000000780000007
80000007800000078000000780001D20809F1E>I<FFFFF8FFFFF8FFFFF80000F00001F00001E0
0003C00007C0000780000F80000F00001E00003E00003C00007C0000780000F00001F00001E000
03E00003C0000780000F80000F00001F00001E00003C00007C0000780000FFFFFCFFFFFCFFFFFC
16207D9F1C>I<FFFFFFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F0F0FFFFFF082D7DA10D>I<FFFFFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F
0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFF082D7FA10D>93
D<07E03FF87FFC701E401F000F000F000F003F07FF1FFF7E0FF80FF00FF00FF00FF83F7FFF3FEF
1F8F10147E9316>97 D<F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F1F000F7FC00FFFE00FC3E00F80F00F00F00F00780F00780F00780F00780F007
80F00780F00780F00F00F00F00F81F00FC3E00FFFC00F7F800F1E00011207D9F17>I<03F00FFC
1FFE3E0E3C0278007800F000F000F000F000F000F000780078003C013E0F1FFF0FFE03F010147E
9314>I<0007800007800007800007800007800007800007800007800007800007800007800007
8007C7800FF7801FFF803E1F807C0780780780F80780F00780F00780F00780F00780F00780F007
80F00780780780780F803E1F801FFF800FF78007C78011207E9F17>I<03F0000FFC001FFE003E
1F003C0700780700700380FFFF80FFFF80FFFF80F00000F00000F000007000007800003C01003E
07001FFF0007FE0001F80011147F9314>I<007E01FE03FE078007000F000F000F000F000F000F
000F00FFF0FFF0FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
0F000F000F20809F0E>I<03E0F00FFFF01FFFF03E3E003C1E00780F00780F00780F00780F0078
0F003C1E003E3E001FFC003FF80033E0003000003800003FFE003FFF801FFFC03FFFE07803F0F0
00F0F000F0F000F0F801F07E07E03FFFC00FFF0003FC00141E7F9317>I<F000F000F000F000F0
00F000F000F000F000F000F000F000F1F8F3FCF7FEFC1FF80FF80FF00FF00FF00FF00FF00FF00F
F00FF00FF00FF00FF00FF00FF00FF00F10207D9F17>I<F0F0F0F00000000000000000F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004207D9F0B>I<01E001E001E001E00000000000000000
000000000000000001E001E001E001E001E001E001E001E001E001E001E001E001E001E001E001
E001E001E001E001E001E001E001E001E001E0C3C0FFC0FF803F000B29839F0C>I<F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F01F00F01E00F03C
00F07800F0F000F1E000F3C000F78000FFC000FFC000FFE000F9F000F8F000F0F800F07C00F07C
00F03E00F01E00F01F00F00F8011207D9F16>I<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F0F0F004207D9F0B>I<F0FC07E0F3FE1FF0F7FF3FF8FE0FF07CF807C0
3CF807C03CF007803CF007803CF007803CF007803CF007803CF007803CF007803CF007803CF007
803CF007803CF007803CF007803CF007803CF007803C1E147D9327>I<F1F8F3FCF7FEFC1FF80F
F80FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F10147D9317>I<01F8
0007FE001FFF803F0FC03C03C07801E07801E0F000F0F000F0F000F0F000F0F000F0F000F07801
E07801E03C03C03F0FC01FFF8007FE0001F80014147F9317>I<F1F000F7FC00FFFE00FC3E00F8
1F00F00F00F00F80F00780F00780F00780F00780F00780F00780F00F00F00F00F81F00FC3E00FF
FC00F7F800F1E000F00000F00000F00000F00000F00000F00000F00000F00000F00000111D7D93
17>I<03C7800FF7801FFF803E1F807C0F80780780780780F00780F00780F00780F00780F00780
F00780F807807807807C0F803E1F801FFF800FF78007C780000780000780000780000780000780
000780000780000780000780111D7E9317>I<F0E0F3E0F7E0FF00FC00FC00F800F800F000F000
F000F000F000F000F000F000F000F000F000F0000B147D9310>I<07F01FFC3FFC780C78007800
78007C003FC01FF00FF803F8007C003C003CC03CF07CFFF87FF00FC00E147F9311>I<1E001E00
1E001E001E001E00FFF0FFF0FFF01E001E001E001E001E001E001E001E001E001E001E001E001E
001E201FF00FF007C00C1A7F9910>I<F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0
0FF00FF00FF00FF01FF03FFFFF7FEF3F0F10147D9317>I<F003C0F003C0780380780780780780
3C0F003C0F003C0F001E0E001E1E001E1E000F1C000F3C000F3C0007380007380007B80003F000
03F00001E00012147F9315>I<F01F00F0F01F80F0F01F80F0781B81E0783B81E0783BC1E07839
C1E03C31C3C03C71C3C03C71E3C01C70E3801E60E7801E60E7801EE0E7800EE077000EC077000E
C0770007C07E0007C03E0007803E001C147F931F>I<7801E07C03C03E07801E0F000F0F00079E
0003FC0003F80001F80000F00001F00001F80003FC00079E000F0F000E0F001E07803C03C07801
E0F801F01414809315>I<F003C0F003C07807807807807C07803C0F003C0F001E0F001E1E000E
1E000F1C000F1C00073C0007380003B80003B80003B00001F00001F00000E00000E00001C00001
C00003C0000380000780007F00007E00007C0000121D7F9315>I<7FFF7FFF7FFF003E003C0078
00F800F001E003E007C007800F001F001E003C007C00FFFFFFFFFFFF10147F9314>I
E /Fw 35 90 df<7FE07FE0FFC00B037E8A0F>45 D<3078F8787005057C840D>I<007E0001FF00
03C3800701C00E01C00E01E01C00E01C01E03C01E03C01E07801E07801E07801E07801E07801E0
F003C0F003C0F003C0F003C0F003C0F00380F00780E00780E00700E00F00E00E00701E00701C00
3878003FF0000FC000131F7C9D17>48 D<000C001C00FC0FF80F38003800380038003800700070
007000700070007000E000E000E000E000E000E001C001C001C001C001C001C003C07FFEFFFE0F
1E7C9D17>I<003F0000FFC001C1E00300F00600780600780F007C0F807C0F807C0F0078060078
0000F80000F00001F00001E00003C0000780000F00001C0000380000700000C000018000030060
0600601C00C03800C07FFFC0FFFF80FFFF80161E7E9D17>I<007F0001FFC00383E00701E00700
F00F00F00F01F00F01F00001E00001E00003C0000780000F0000FE0000F800000E000007000007
800003C00003C00003C03007C07807C0F807C0F807C0F00F80C00F00601E00383C001FF80007E0
00141F7D9D17>I<0001C00003C00003C0000780000F80001B80003B8000738000638000C70001
87000307000707000E07000C0700180E00300E00600E00E00E00FFFFF0FFFFF0001C00001C0000
1C00001C00001C00001C00003C0003FFC003FFC0141E7D9D17>I<03007003FFF003FFE003FF80
03FE000600000600000600000600000600000600000C7C000DFF000F87800E03800C01C00C01C0
0001E00001E00001E00001E07003C0F003C0F003C0F00380C00780E00700600E00383C001FF000
0FC000141F7D9D17>I<000F80007FC000F0E001C0E00381E00701E00E00C01E00001C00003C00
0038000079FC007BFE007E07007C0380F80380F803C0F003C0F003C0F003C0F003C0F00780E007
80E00780E00700E00F00700E00701C003838001FF00007C000131F7C9D17>I<3000003FFFE07F
FFE07FFFC0600180E00300C00600C00C0000180000180000300000600000C00001C00001800003
80000300000700000600000E00000E00001E00001C00001C00003C00003C00003C000078000078
0000780000300000131F799D17>I<003F0000FF8001C1E00380E00700700E00700E00700E0070
0E00E00F00E00F81C00FC38007F70003FC0001FC0003FF000F3F801C0F803807C03803C07001C0
7001C0E001C0E001C0E001C0E003807003007007003C1C001FF80007E000141F7D9D17>I<007E
0001FF000383800701C00E01C01E01C01C01E03C01E03C01E07801E07801E07801E07801E07803
E07803E03807C03807C01C0FC01FFBC00FE380000780000780000700000E00600E00F01C00F038
00E07000E0E0007FC0003F0000131F7C9D17>I<0000180000003800000038000000780000007C
000000FC000000FC000001BC000001BC0000033C0000033E0000061E0000061E00000C1E00000C
1E0000181E0000181F0000300F0000300F0000600F00007FFF0000FFFF0000C00F000180078001
800780030007800300078006000780060007801F0007C0FFC07FFCFFC07FFC1E207E9F22>65
D<07FFFF0007FFFFC0003C01E0003C01F0007800F8007800F8007800F8007800F8007800F80078
00F000F001F000F003E000F007C000F00F8000FFFE0000FFFF8001E007C001E003E001E003E001
E001E001E001E001E001F003C001E003C003E003C003E003C007C003C007C003C00F8007C03F00
7FFFFE00FFFFF0001D1F7E9E20>I<0003F808000FFE18003F0738007801F801F000F803C000F0
07C00070078000700F0000701F0000701E0000703E0000603C0000607C0000007C0000007C0000
007C000000F8000000F8000000F8000000F8000000F80000C0780000C0780001807C0001803C00
03003C0003001E0006001E000C000F80180007E0700001FFC000007F00001D217B9F21>I<07FF
FF0007FFFFE0003C01F0003C00F80078007C0078003C0078001E0078001E0078001E0078001F00
F0001F00F0001F00F0001F00F0001F00F0001F00F0001F01E0001E01E0003E01E0003E01E0003E
01E0003C01E0007C03C0007803C000F003C000F003C001E003C003C003C00F8007C03F007FFFFC
00FFFFE000201F7E9E23>I<07FFFFF807FFFFF8003C00F8003C00780078003800780038007800
38007800380078003800780C3000F0183000F0180000F0180000F0380000FFF80000FFF80001E0
700001E0300001E0300001E0301801E0303001E0003003C0003003C0006003C0006003C000E003
C001C003C003C007C00FC07FFFFF80FFFFFF801D1F7E9E1F>I<07FFFFF807FFFFF8003C00F800
3C0078007800380078003800780038007800380078003800780C3000F0183000F0180000F01800
00F0380000FFF80000FFF80001E0700001E0300001E0300001E0300001E0300001E0000003C000
0003C0000003C0000003C0000003C0000003C0000007C000007FFE0000FFFE00001D1F7E9E1E>
I<0001FC04000FFF0C003F039C007800FC00F000FC03E0007803C00078078000380F0000381F00
00381E0000383E0000303E0000307C0000007C0000007C0000007C000000F8000000F8000000F8
007FFCF8007FFCF80001E0780001E0780003C07C0003C03C0003C03C0003C01E0003C00F0007C0
07800F8003E0398001FFF080003F80001E217B9F24>I<07FFC7FFC007FFC7FFC0003C00780000
3C007800007800F000007800F000007800F000007800F000007800F000007800F00000F001E000
00F001E00000F001E00000F001E00000FFFFE00000FFFFE00001E003C00001E003C00001E003C0
0001E003C00001E003C00001E003C00003C007800003C007800003C007800003C007800003C007
800003C007800007C00F80007FFCFFF800FFF8FFF800221F7E9E22>I<07FFE007FFE0003C0000
3C0000780000780000780000780000780000780000F00000F00000F00000F00000F00000F00001
E00001E00001E00001E00001E00001E00003C00003C00003C00003C00003C00003C00007C000FF
FC00FFFC00131F7F9E10>I<07FFE0FFE007FFE0FFE0003C003E00003C00380000780070000078
00E00000780180000078030000007806000000780C000000F018000000F030000000F060000000
F1F0000000F3F0000000F778000001EC78000001F878000001F03C000001E03C000001E01E0000
01E01E000003C00F000003C00F000003C00F000003C007800003C007800003C003C00007C007E0
007FFC1FFC00FFFC3FFC00231F7E9E23>75 D<07FFF00007FFF000003C0000003C000000780000
007800000078000000780000007800000078000000F0000000F0000000F0000000F0000000F000
0000F0000001E0000001E0000001E0000001E0018001E0018001E0030003C0030003C0030003C0
070003C0060003C00E0003C01E0007C07E007FFFFC00FFFFFC00191F7E9E1C>I<07FC0000FFC0
07FC0001FFC0003E0001F800003E00037800006E0003F000006E0006F000006E0006F000006E00
0CF0000067000CF00000670018F00000C70019E00000C70031E00000C70031E00000C70061E000
00C38061E00000C380C1E000018380C3C00001838183C00001838183C0000181C303C0000181C3
03C0000181C603C0000301C60780000301CC0780000301CC0780000300F80780000300F8078000
0700F00780000F80F00F80007FF0E0FFF800FFF0E1FFF8002A1F7E9E2A>I<07FC03FFC007FC03
FFC0003E007C00003E003800006F003000006F003000006F003000006780300000678030000063
C0300000C3C0600000C3C0600000C1E0600000C1E0600000C0F0600000C0F060000180F0C00001
8078C000018078C00001803CC00001803CC00001803CC00003001F800003001F800003000F8000
03000F800003000F800007000780000F800700007FF0030000FFF0030000221F7E9E22>I<0003
F800001FFE00003C1F0000F0078001E003C003C001E0078001E00F8000F00F0000F01F0000F01E
0000F83E0000F83C0000F87C0000F87C0000F87C0000F87C0000F8F80001F0F80001F0F80001F0
F80001F0F80003E0780003E0780007C07C0007C07C000F803C000F003E001E001E003C000F0078
0007C1F00003FFC00000FE00001D217B9F23>I<07FFFF0007FFFFC0003C03E0003C01F0007800
F0007800F8007800F8007800F8007800F8007800F800F001F000F001F000F001E000F003C000F0
0F8000FFFE0001FFF80001E0000001E0000001E0000001E0000001E0000003C0000003C0000003
C0000003C0000003C0000003C0000007C000007FFC0000FFFC00001D1F7E9E1F>I<0003F80000
1FFE00003C1F0000F0078001E003C003C001E0078001E00F8001F00F0000F01F0000F01E0000F8
3E0000F83C0000F87C0000F87C0000F87C0000F87C0000F8F80001F0F80001F0F80001F0F80001
F0F80003E0780003E0780003C0780007C07C1E07803C3F0F003C619E001E61BC000FC0F80007E1
F00003FFC04000FEC0400000E0400000E0800000E1800000FF800000FF000000FF0000007E0000
003C001D297B9F23>I<07FFFC0007FFFF00003C07C0003C03E0007801E0007801F0007801F000
7801F0007801F0007801E000F003E000F003C000F0078000F01F0000FFFC0000FFF00001E03800
01E03C0001E01C0001E01C0001E01E0001E01E0003C03E0003C03E0003C03E0003C03E0003C03E
0603C03E0607C03E0C7FFC1F18FFFC0FF8000003E01F207E9E21>I<003F04007FCC01E0FC0380
7C03003C0700380600180E00180E00180E00180E00000F00000F00000FE00007FE0003FF8001FF
C0007FE00007E00001E00000E00000F00000F06000E06000E06000E06000E07001C0700180F803
80FE0F00C7FC0081F80016217D9F19>I<1FFFFFF81FFFFFF81E03C0F83803C038380780383007
803870078018600780186007803860078030C00F0030000F0000000F0000000F0000000F000000
0F0000001E0000001E0000001E0000001E0000001E0000001E0000003C0000003C0000003C0000
003C0000003C0000003C0000007C00001FFFF0003FFFF0001D1F7B9E21>I<FFFC7FF8FFFC7FF8
07800F80078007000F0006000F0006000F0006000F0006000F0006000F0006001E000C001E000C
001E000C001E000C001E000C001E000C003C0018003C0018003C0018003C0018003C0018003C00
1800380030003800300038003000380060003C00C0001C00C0001E0180000F07000007FC000001
F800001D20799E22>I<FFF007FEFFF007FE0F0001F00F0000C00F0000C00F0001800780018007
800300078007000780060007800E0007C00C0003C01C0003C0180003C0300003C0300003C06000
01E0600001E0C00001E0C00001E1800001E1800000F3000000F3000000F6000000F6000000FC00
0000FC0000007800000078000000700000007000001F207A9E22>I<FFF07FF83FF0FFF07FF83F
F01F000F800F800F000F8007000F000F8006000F000F8006000F001F800C000F001F800C000F00
378018000F00378018000F0063C03000078063C030000780C3C060000780C3C06000078183C0E0
00078183C0C000078383C0C000078303E1800007C701E1800003C601E3000003C601E3000003CC
01E6000003CC01E6000003D801EC000003D801EC000003F001F8000001F000F8000001E000F800
0001E000F0000001C000F0000001C000E0000001C000E000002C207A9E2F>I<7FF803FF80FFF8
03FF0007C000F80007C000E00003C000C00003E001C00001E003800001F003000000F006000000
F80E000000F80C00000078180000007C300000003C700000003E600000001EC00000001F800000
000F800000000F000000000F000000000F000000000E000000001E000000001E000000001E0000
00001E000000001E000000001C000000003C00000003FFE0000007FFE00000211F7B9E22>89
D E /Fx 25 122 df<60F0F0703030306060C040040B7D830B>44 D<03000700FF00FF00070007
0007000700070007000700070007000700070007000700070007000700070007000700FFF0FFF0
0C197D9813>49 D<0070007000F000F001F003F00370067006700C701C701870307030706070E0
70FFFFFFFF0070007000700070007007FF07FF10197F9813>52 D<07801FE0387030306038E018
E018E01CE01CE01CE01CE01C603C703C307C3FDC1F9C00180018003830307870786071C03F801F
000E1A7E9813>57 D<FFFFF8FFFFF80F00780F00380F00180F001C0F000C0F030C0F030C0F0300
0F07000FFF000FFF000F07000F03000F03000F03060F00060F000C0F000C0F000C0F001C0F001C
0F0078FFFFF8FFFFF8171A7F991A>69 D<0FFF0FFF007800780078007800780078007800780078
007800780078007800780078007800787078F878F878F878F0F070E03FC00F80101B7F9914>74
D<FFFF80FFFFE00F00F00F00780F00380F003C0F003C0F003C0F003C0F003C0F00380F00780F00
F00FFFE00FFF800F00000F00000F00000F00000F00000F00000F00000F00000F0000FFF000FFF0
00161A7F991A>80 D<07C21FF6383E701E600EE00EE006E006E006F00078007F803FF01FF80FFC
01FE001E000F0007C007C007C007E007E006F00EFC1CCFF883E0101C7E9A15>83
D<FFC03FC0FFC03FC01E000E000F000C000F000C000F000C00078018000780180007C0380003C0
300003C0300003E0700001E0600001E0600000F0C00000F0C00000F0C000007980000079800000
798000003F0000003F0000003F0000001E0000001E0000001E0000000C00001A1B7F991D>86
D<3F80FFC0F0E0F070607000700FF03FF07870E070E070E073E07370F37FFE3E3C10107E8F13>
97 D<FC0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001CF8001FFE00
1F0F001C03801C03801C01C01C01C01C01C01C01C01C01C01C01C01C03801C03801F0F001BFE00
18F800121A7F9915>I<007E00007E00000E00000E00000E00000E00000E00000E00000E00000E
0007CE001FFE003C1E00700E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00701E
003C3E001FFFC007CFC0121A7F9915>100 D<07C01FF038387018701CFFFCFFFCE000E000E000
E0007000300C3C180FF007E00E107F8F11>I<00F801FC03BC073C0E180E000E000E000E000E00
FFC0FFC00E000E000E000E000E000E000E000E000E000E000E000E007FE07FE00E1A80990C>I<
FC0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001CF8001FFC001F1E00
1E0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00FF9FC0FF9FC0
121A7F9915>104 D<18003C003C001800000000000000000000000000FC00FC001C001C001C00
1C001C001C001C001C001C001C001C001C00FF80FF80091A80990A>I<FC00FC001C001C001C00
1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF
80FF80091A80990A>108 D<FCFC3F00FDFE7F801F0FC3C01E0781C01C0701C01C0701C01C0701
C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F8FF9FE7F81D10
7F8F20>I<FCF800FFFC001F1E001E0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C
0E001C0E001C0E00FF9FC0FF9FC012107F8F15>I<07E01FF8381C700E6006E007E007E007E007
E007E007700E700E3C3C1FF807E010107F8F13>I<FCF800FFFE001F0F001C07801C03801C01C0
1C01C01C01C01C01C01C01C01C01C01C03801C07801F0F001FFE001CF8001C00001C00001C0000
1C00001C0000FF8000FF800012177F8F15>I<FDE0FFF01F701E201C001C001C001C001C001C00
1C001C001C001C00FFC0FFC00C107F8F0F>114 D<1F207FE070E0E060E060F0007F003FC01FE0
01F0C070C070E070F0E0FFC08F800C107F8F0F>I<0C000C000C000C001C001C003C00FFC0FFC0
1C001C001C001C001C001C001C001C601C601C601C601C600FC007800B177F960F>I<FF3F80FF
3F801C0E001C0C001C0C000E18000E18000E380007300007300007F00003E00003E00001C00001
C00001C000018000018000618000F30000C70000FE000078000011177F8F14>121
D E /Fy 10 58 df<1F003F8060C04040C060C060C060C060C060C060C060C06060C060C03F80
1F000B107F8F0F>48 D<18007800F80098001800180018001800180018001800180018001800FF
80FF8009107E8F0F>I<3F007F80F1C0F0E06060006000E000C00180030006001C0038606060FF
C0FFC00B107F8F0F>I<1F003F8071C071C031C001800F800F0001C000E060E0F0E0F0E0F1C07F
801F000B107F8F0F>I<070007000F001F001B003B0033006300E300FFE0FFE00300030003001F
E01FE00B107F8F0F>I<60807F807F007C00600060006F007F8070C060E000E060E0E0E0E1C07F
803F000B107F8F0F>I<07801FC039C061C06000C000DF80FFC0E060C060C060C060606060C03F
801F000B107F8F0F>I<60007FE07FE0C0C0C1800180030006000E000C000C001C001C001C001C
001C0008000B117E900F>I<1F003F8061C060C060C079C03F801F803FC063E0C0E0C060C06060
C03F801F000B107F8F0F>I<1F003F8060C0C0C0C060C060C060C0E07FE03F60006000C070C071
807F003E000B107F8F0F>I E /Fz 32 122 df<000FE0FE00007FF3FF0000F87F8F8001E0FF1F
8003E0FE1F8007C0FE1F8007C07E0F0007C03E000007C03E000007C03E000007C03E000007C03E
0000FFFFFFF000FFFFFFF00007C03E000007C03E000007C03E000007C03E000007C03E000007C0
3E000007C03E000007C03E000007C03E000007C03E000007C03E000007C03E000007C03E000007
C03E000007C03E000007C03E00003FF9FFE0003FF9FFE0002120809F1E>11
D<FFF0FFF0FFF0FFF00C047F8B11>45 D<07F8001FFE00381F80780F80FC0FC0FC0FC0FC0FC078
0FC0301F80001F00003E00007C0000700000E00000E00000C00000C00000C00000C00000C00000
C00000000000000000000000000001C00007F00007F00007F00007F00007F00001C00012207D9F
19>63 D<0000E000000000E000000001F000000001F000000001F000000003F800000003F80000
0007FC00000007FC0000000FFE0000000CFE0000000CFE000000187F000000187F000000307F80
0000303F800000703FC00000601FC00000601FC00000C01FE00000C00FE00001FFFFF00001FFFF
F000018007F000030003F800030003F800060003FC00060001FC000E0001FE00FFE01FFFE0FFE0
1FFFE0231F7E9E28>65 D<0007FC02003FFF0E00FE03DE03F000FE07E0003E0FC0001E1F80001E
3F00000E3F00000E7F0000067E0000067E000006FE000000FE000000FE000000FE000000FE0000
00FE000000FE0000007E0000007E0000067F0000063F0000063F00000C1F80000C0FC0001807E0
003803F0007000FE01C0003FFF800007FC001F1F7D9E26>67 D<FFFFFFE0FFFFFFE007F007E007
F001E007F000E007F0006007F0007007F0003007F0003007F0603007F0603007F0600007F06000
07F1E00007FFE00007FFE00007F1E00007F0600007F0600007F0600007F0600007F0000007F000
0007F0000007F0000007F0000007F0000007F0000007F00000FFFFC000FFFFC0001C1F7E9E21>
70 D<03FC080FFF381E03F83C00F8780078780038F80038F80018FC0018FC0000FF0000FFF800
7FFF007FFFC03FFFE01FFFF00FFFF803FFF8001FFC0001FC0000FC0000FCC0007CC0007CC0007C
E00078E00078F800F0FE01E0E7FFC081FF00161F7D9E1D>83 D<7FFFFFFC7FFFFFFC7C0FE07C70
0FE01C600FE00C600FE00CE00FE00EC00FE006C00FE006C00FE006C00FE006000FE000000FE000
000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0
00000FE000000FE000000FE000000FE000000FE00007FFFFC007FFFFC01F1E7E9D24>I<07FC00
1FFF003F0F803F07C03F03E03F03E00C03E00003E001FFE00FFFE03F83E07E03E07C03E0F803E0
F803E0F803E0FC07E07E0DE03FF9FE07E07E17147F9319>97 D<FF0000FF00001F00001F00001F
00001F00001F00001F00001F00001F00001F00001F00001F1FC01F7FF01FE0F81F807C1F007E1F
003E1F003E1F003F1F003F1F003F1F003F1F003F1F003F1F003E1F003E1F007C1F807C1EC1F81C
7FE0181F8018207E9F1D>I<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000
FC0000FC0000FC0000FC00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>
I<0007F80007F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F801F8
F80FFEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00
F87C00F87E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF801F83E03F01F07E
00F07E00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007E00003E00183F00380F
807007FFE000FF8015147F9318>I<001F8000FFC001F3E003E7E003C7E007C7E007C3C007C000
07C00007C00007C00007C000FFFC00FFFC0007C00007C00007C00007C00007C00007C00007C000
07C00007C00007C00007C00007C00007C00007C00007C00007C0003FFC003FFC0013207F9F10>
I<01FC3C07FFFE0F07DE1E03DE3E03E03E03E03E03E03E03E03E03E01E03C00F07800FFF0019FC
001800001800001C00001FFF801FFFF00FFFF83FFFFC7C007C70003EF0001EF0001EF0001E7800
3C78003C3F01F80FFFE001FF00171E7F931A>I<FF0000FF00001F00001F00001F00001F00001F
00001F00001F00001F00001F00001F00001F0FC01F3FE01F61F01FC0F81F80F81F00F81F00F81F
00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18
207D9F1D>I<1C003F007F007F007F003F001C00000000000000000000000000FF00FF001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B217EA00E>
I<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F01
FE1F01FE1F00F01F01C01F03801F07001F1E001F38001F7C001FFE001FFF001F1F001E0F801E07
C01E07E01E03F01E01F01E00F8FFC3FFFFC3FF18207E9F1C>107 D<FF00FF001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F00FFE0FFE00B207E9F0E>I<FE0FE03F80FE3FF0FFC01E70F9C3E01EC07F
01F01F807E01F01F807E01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F00
7C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F0FFE3FF8FFEFF
E3FF8FFE27147D932C>I<FE0FC0FE3FE01E61F01EC0F81F80F81F00F81F00F81F00F81F00F81F
00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18147D931D>I<
01FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E
7C007C7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>I<FF1FC0FF7FF01FE1F81F80
FC1F007E1F007E1F003E1F003F1F003F1F003F1F003F1F003F1F003F1F003E1F007E1F007C1F80
FC1FC1F81F7FE01F1F801F00001F00001F00001F00001F00001F00001F0000FFE000FFE000181D
7E931D>I<01F81807FE381F87783F01F83E01F87E00F87C00F8FC00F8FC00F8FC00F8FC00F8FC
00F8FC00F87C00F87E00F87E00F83F01F81F87F80FFEF803F8F80000F80000F80000F80000F800
00F80000F80000F80007FF0007FF181D7E931C>I<FE3E00FE7F801ECFC01F8FC01F8FC01F8FC0
1F03001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFF000
FFF00012147E9316>I<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007C0
07E007F006F81EFFFCC7F010147E9315>I<01800180018003800380038007800F803F80FFFCFF
FC0F800F800F800F800F800F800F800F800F800F800F860F860F860F860F8607CC03F801F00F1D
7F9C14>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
00F81F00F81F00F81F00F81F01F81F01F80F07F807FEFF03F8FF18147D931D>I<FFE07F80FFE0
7F801F001C000F8018000F80180007C0300007C0300003E0600003E0600001F0C00001F0C00001
F9C00000F9800000FF8000007F0000007F0000003E0000003E0000001C0000001C000019147F93
1C>I<FFE7FE1FE0FFE7FE1FE01F00F007001F00F803000F80F806000F80F8060007C1BC0C0007
C1BC0C0007C1BE0C0003E31E180003E31E180001F60F300001F60F300001F60FB00000FC07E000
00FC07E000007803C000007803C000007803C000003001800023147F9326>I<FFE1FF00FFE1FF
000F80700007C0E00007E0C00003E1800001F3800000FF0000007E0000003E0000003F0000007F
8000006F800000C7C0000183E0000381F0000701F8000E00FC00FF81FF80FF81FF8019147F931C
>I<FFE07F80FFE07F801F001C000F8018000F80180007C0300007C0300003E0600003E0600001
F0C00001F0C00001F9C00000F9800000FF8000007F0000007F0000003E0000003E0000001C0000
001C0000001800000018000078300000FC300000FC600000C0E00000E1C000007F8000001E0000
00191D7F931C>I E /FA 79 124 df<000FC3E0007FEFF000E07C7801C0F8780380F830070070
00070070000700700007007000070070000700700007007000FFFFFF80FFFFFF80070070000700
700007007000070070000700700007007000070070000700700007007000070070000700700007
007000070070000700700007007000070070007FE3FF007FE3FF001D20809F1B>11
D<001F80007FC001E0E00381E00381E00701E0070000070000070000070000070000070000FFFF
E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700
E00700E00700E00700E00700E07FC3FE7FC3FE1720809F19>I<001FE0007FE001E1E00381E003
80E00700E00700E00700E00700E00700E00700E00700E0FFFFE0FFFFE00700E00700E00700E007
00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E07F
E7FE7FE7FE1720809F19>I<000F80F800007FE7FE0000E06E060001C0FC0F000380F80F000700
F00F00070070000007007000000700700000070070000007007000000700700000FFFFFFFF00FF
FFFFFF000700700700070070070007007007000700700700070070070007007007000700700700
070070070007007007000700700700070070070007007007000700700700070070070007007007
0007007007007FE3FE3FF07FE3FE3FF02420809F26>I<7038F87CFC7EFC7E7C3E0C060C060C06
180C180C381C3018603040200F0E7E9F17>34 D<0078000000FC00000186000003860000030300
00070300000703000007030000070300000706000007060000070C00000718000003B81FFC03F0
1FFC03E003E003C0018003C0030007C003000EE006001CE0060038700C0078780C0070381800F0
1C3000F01E3000F00E6000F007C000F003C0187801C0187807E0303E1E78701FF83FE007E00F80
1E227EA023>38 D<70F8FCFC7C0C0C0C181838306040060E7C9F0D>I<006000C0018003000700
06000C001C00180038003800300070007000700060006000E000E000E000E000E000E000E000E0
00E000E000E000E0006000600070007000700030003800380018001C000C000600070003000180
00C000600B2E7DA112>I<C0006000300018001C000C0006000700030003800380018001C001C0
01C000C000C000E000E000E000E000E000E000E000E000E000E000E000E000C000C001C001C001
C00180038003800300070006000C001C00180030006000C0000B2E7DA112>I<018001C0018001
80C183E187F99F7DBE1FF807E007E01FF87DBEF99FE187C1830180018001C0018010147DA117>
I<0006000000060000000600000006000000060000000600000006000000060000000600000006
00000006000000060000000600000006000000060000FFFFFFF0FFFFFFF0000600000006000000
060000000600000006000000060000000600000006000000060000000600000006000000060000
0006000000060000000600001C207D9A23>I<70F8FCFC7C0C0C0C181838306040060E7C840D>I<
FFC0FFC0FFC00A037F8A0F>I<70F8F8F87005057C840D>I<00030003000700060006000E000C00
0C001C0018001800380030003000700060006000E000C000C001C0018001800180038003000300
0700060006000E000C000C001C0018001800380030003000700060006000E000C000C000102D7D
A117>I<03F0000FFC001E1E001C0E00380700780780700380700380700380F003C0F003C0F003
C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C07003807003807003
807807803807001C0E001E1E000FFC0003F000121F7E9D17>I<018003801F80FF80E380038003
800380038003800380038003800380038003800380038003800380038003800380038003800380
03800380FFFEFFFE0F1E7C9D17>I<03F0000FFC00183E00300F00600F80C00780F007C0F807C0
F803C0F803C02003C00007C0000780000780000F00000E00001C0000380000700000E00001C000
0380000300000600C00C00C01800C03001807FFF80FFFF80FFFF80121E7E9D17>I<03F0000FFC
001C1E00300F00780F80780F80780780380F80000F80000F00000F00001E00003C0003F80003F0
00001C00000E00000F000007800007800007C02007C0F807C0F807C0F807C0F00780600F80700F
003C1E001FFC0003F000121F7E9D17>I<000E00000E00001E00003E00003E00006E0000EE0000
CE00018E00038E00030E00060E000E0E000C0E00180E00380E00300E00600E00E00E00FFFFF0FF
FFF0000E00000E00000E00000E00000E00000E00000E0000FFE000FFE0141E7F9D17>I<380300
3FFF003FFE003FF8003FE00030000030000030000030000030000030000031F00037FC003E0E00
3C07003807803003800003800003C00003C00003C06003C0F003C0F003C0F00380C00780600700
700E003C1E000FF80007E000121F7E9D17>I<007C0001FE000783000E03800C07801C07803803
00380000780000700000700000F3F800F7FE00FC0E00F80700F80380F80380F003C0F003C0F003
C0F003C0F003C07003C07003C07003803803803807001C07000E1E0007FC0001F000121F7E9D17
>I<6000007FFFC07FFFC07FFF80600180C00300C00600C00600000C0000180000180000300000
600000600000E00000C00001C00001C00001C00003800003800003800003800007800007800007
8000078000078000078000078000030000121F7D9D17>I<03F0000FFC001E1E00380700300700
7003807003807003807003807807003E07003F0E001FDC000FF80003F80007FC001E7E00383F00
700F80700780E003C0E001C0E001C0E001C0E001C0F001807003803807001E0E000FFC0003F000
121F7E9D17>I<03F00007F8001E1C00380E00380700700700700380F00380F00380F003C0F003
C0F003C0F003C0F003C07007C07007C0380FC01C0FC01FFBC007F3C00003800003800007800007
00300700780E00780E00701C003078001FF0000FC000121F7E9D17>I<70F8F8F8700000000000
000000000070F8F8F87005147C930D>I<70F8F8F8700000000000000000000070F8F8F8781818
18183030606040051D7C930D>I<7FFFFFE0FFFFFFF00000000000000000000000000000000000
000000000000000000000000000000FFFFFFF07FFFFFE01C0C7D9023>61
D<0003800000038000000380000007C0000007C0000007C000000DE000000DE000000DE0000018
F0000018F0000018F00000307800003078000030780000603C0000603C0000603C0000E01E0000
C01E0000FFFE0001FFFF0001800F0001800F0003800F800300078003000780070007C0070003C0
0F8003C0FFE03FFEFFE03FFE1F207F9F22>65 D<FFFFE000FFFFF80007803E0007801F0007800F
0007800F8007800F8007800F8007800F8007800F8007800F0007801F0007803E0007807C0007FF
F80007FFFC0007801E0007800F0007800F8007800780078007C0078007C0078007C0078007C007
8007C00780078007800F8007801F0007803E00FFFFFC00FFFFF0001A1F7E9E20>I<001FC04000
7FF0C001F839C003C00DC0078007C00F0003C01E0003C03E0001C03C0001C07C0001C07C0000C0
780000C0F80000C0F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000
00780000C07C0000C07C0000C03C0000C03E0001801E0001800F0003000780030003C00E0001F8
1C00007FF000001FC0001A217D9F21>I<FFFFE000FFFFFC0007803E0007800F00078007800780
03C0078003E0078001E0078001F0078000F0078000F0078000F8078000F8078000F8078000F807
8000F8078000F8078000F8078000F8078000F8078000F0078000F0078001F0078001E0078001E0
078003C00780078007800F0007803E00FFFFFC00FFFFE0001D1F7E9E23>I<FFFFFF00FFFFFF00
07801F000780070007800300078003000780038007800180078001800780C1800780C1800780C0
000780C0000781C00007FFC00007FFC0000781C0000780C0000780C0000780C0600780C0600780
0060078000C0078000C0078000C0078001C0078001C0078003C007800F80FFFFFF80FFFFFF801B
1F7E9E1F>I<FFFFFF00FFFFFF0007801F00078007000780030007800300078003800780018007
8001800780C1800780C1800780C0000780C0000781C00007FFC00007FFC0000781C0000780C000
0780C0000780C0000780C000078000000780000007800000078000000780000007800000078000
0007800000FFFE0000FFFE0000191F7E9E1E>I<000FC020007FF86001F81CE003E006E0078003
E00F0001E01E0001E01E0000E03C0000E07C0000E07C00006078000060F8000060F8000000F800
0000F8000000F8000000F8000000F8000000F8007FFCF8007FFC780001E07C0001E07C0001E03C
0001E01E0001E01E0001E00F0001E0078003E003E003E001F80E60007FFC20000FE0001E217D9F
24>I<FFF8FFF8FFF8FFF807800F0007800F0007800F0007800F0007800F0007800F0007800F00
07800F0007800F0007800F0007800F0007800F0007FFFF0007FFFF0007800F0007800F0007800F
0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F000780
0F00FFF8FFF8FFF8FFF81D1F7E9E22>I<FFFCFFFC078007800780078007800780078007800780
078007800780078007800780078007800780078007800780078007800780078007800780FFFCFF
FC0E1F7F9E10>I<FFFE00FFFE0007800007800007800007800007800007800007800007800007
800007800007800007800007800007800007800007800007800007800607800607800607800607
800E07800E07800C07801C07803C0780FCFFFFFCFFFFFC171F7E9E1C>76
D<FF80001FF8FFC0003FF807C0003F0007C0003F0006E0006F0006E0006F0006E0006F00067000
CF00067000CF00067000CF000638018F000638018F000638018F00061C030F00061C030F00061C
030F00060E060F00060E060F00060E060F0006070C0F0006070C0F0006070C0F000603980F0006
03980F000603980F000601F00F000601F00F000601F00F000F00E00F00FFF0E1FFF8FFF0E1FFF8
251F7E9E2A>I<FF807FF8FFC07FF807C0078007E0030007E0030006F0030006F0030006780300
063C0300063C0300061E0300061E0300060F0300060F0300060783000607C3000603C3000601E3
000601E3000600F3000600F30006007B0006007B0006003F0006001F0006001F0006000F000600
0F000F000700FFF00700FFF003001D1F7E9E22>I<001F800000FFF00001E0780007C03E000F80
1F000F000F001E0007803C0003C03C0003C07C0003E07C0003E0780001E0F80001F0F80001F0F8
0001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E07C0003E0
3C0003C03E0007C01E0007800F000F000F801F0007C03E0001F0F80000FFF000001F80001C217D
9F23>I<FFFFE000FFFFF80007807C0007801E0007801F0007800F0007800F8007800F8007800F
8007800F8007800F8007800F0007801F0007801E0007807C0007FFF80007FFE000078000000780
000007800000078000000780000007800000078000000780000007800000078000000780000007
800000FFFC0000FFFC0000191F7E9E1F>I<FFFF8000FFFFF0000780F80007803C0007803E0007
801E0007801F0007801F0007801F0007801F0007801E0007803E0007803C000780F80007FFF000
07FF80000781C0000780E000078070000780700007807800078078000780780007807C0007807C
0007807C0007807C0C07807E0C07803E0CFFFC1F18FFFC0FF0000003E01E207E9E21>82
D<07E0800FF9801C1F80300F80700780600380E00380E00180E00180E00180F00000F000007800
007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C0C001C0C001C0C001
C0C001C0E00180F00380F80700FE0E00CFFC0081F80012217D9F19>I<7FFFFFE07FFFFFE0780F
01E0700F00E0600F0060600F0060E00F0070C00F0030C00F0030C00F0030C00F0030000F000000
0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
000F0000000F0000000F0000000F0000000F0000000F0000000F000007FFFE0007FFFE001C1F7E
9E21>I<FFFC7FF8FFFC7FF8078007800780030007800300078003000780030007800300078003
000780030007800300078003000780030007800300078003000780030007800300078003000780
030007800300078003000780030007800300078003000380020003C0060003C0060001C00C0000
E0180000783000003FE000000FC0001D207E9E22>I<FFF007FEFFF007FE0F8001F00F0000E007
8000C0078000C007C001C003C0018003C0018003E0038001E0030001E0030000F0060000F00600
00F0060000780C0000780C0000780C00003C1800003C1800003C1800001E3000001E3000001F70
00000F6000000F6000000FE0000007C0000007C0000003800000038000000380001F207F9E22>
I<FFF07FF83FF0FFF07FF83FF00F0007800F800F00078003000F000780030007800FC006000780
0FC0060007800FC00600078019E00E0003C019E00C0003C019E00C0003C039E00C0001E030F018
0001E030F0180001E030F0180000F06078300000F06078300000F06078300000F0E07C30000078
C03C60000078C03C60000078C03C6000003D801EC000003D801EC000003D801EC000003F000FC0
00001F000F8000001F000F8000001F000F8000000E00070000000E00070000000E000700002C20
7F9E2F>I<7FF83FF87FF83FF807C00F8003C0060001E00E0001F00C0000F0180000783800007C
3000003C7000003E6000001EC000000FC000000F8000000780000007C0000007E000000DE00000
1DF0000018F8000038780000307C0000603C0000E01E0000C01F0001800F0003800780030007C0
0F8007C0FFE01FFEFFE01FFE1F1F7F9E22>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE072D7CA10D>91
D<0804180C3018703860306030C060C060C060F87CFC7EFC7E7C3E381C0F0E7B9F17>I<FEFE06
060606060606060606060606060606060606060606060606060606060606060606060606060606
06FEFE072D7FA10D>I<1FE0003FF000783800781C00300E00000E00000E00000E0003FE001FFE
003E0E00780E00F80E00F00E30F00E30F00E30F01E30783F703FEFE00F878014147E9317>97
D<0E0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E3F
000EFF800FC3C00F00E00E00F00E00700E00780E00780E00780E00780E00780E00780E00780E00
700E00F00F00F00F01E00FC3C00CFF800C3E0015207F9F19>I<03F80FFC1E1E3C1E380C780070
00F000F000F000F000F000F0007000780038033C031F0E0FFC03F010147E9314>I<000380003F
80003F8000038000038000038000038000038000038000038000038000038003E3800FFB801E0F
803C0780780380780380700380F00380F00380F00380F00380F00380F003807003807003807807
803807801E1F800FFBF803E3F815207E9F19>I<03F0000FFC001E1E003C0F0038070078070070
0380F00380FFFF80FFFF80F00000F00000F000007000007800003801801C03800F070007FE0001
F80011147F9314>I<003C00FE01CF038F03060700070007000700070007000700FFF0FFF00700
0700070007000700070007000700070007000700070007000700070007007FF07FF01020809F0E
>I<0001E003E3F00FFF701C1C703C1E00380E00780F00780F00780F00780F00380E003C1E001C
1C003FF80033E0003000003000003800003FFE001FFF803FFFC07003E07000F0E00070E00070E0
0070F000F07801E03E07C00FFF0003FC00141F7F9417>I<0E0000FE0000FE00000E00000E0000
0E00000E00000E00000E00000E00000E00000E00000E3E000EFF000FC3800F01C00F01C00E01C0
0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC
FFE7FC16207F9F19>I<1C001E003E001E001C000000000000000000000000000E007E007E000E
000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFC0FFC00A1F809E0C>
I<00E001F001F001F000E0000000000000000000000000007007F007F000F00070007000700070
00700070007000700070007000700070007000700070007000700070007000706070F0E0F1C07F
803E000C28829E0E>I<0E0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00
000E00000E00000E1FF00E1FF00E0F800E0E000E0C000E18000E30000E70000EF0000FF8000F38
000E1C000E1E000E0E000E07000E07800E03800E03C0FFCFF8FFCFF815207F9F18>I<0E00FE00
FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
000E000E000E000E000E000E000E000E00FFE0FFE00B20809F0C>I<0E3F03F000FEFF8FF800FF
C1DC1C000F80F80E000F00F00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00
0E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E
00FFE7FE7FE0FFE7FE7FE023147F9326>I<0E3E00FEFF00FFC3800F01C00F01C00E01C00E01C0
0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FCFFE7FC
16147F9319>I<01F80007FE001E07803C03C03801C07000E07000E0F000F0F000F0F000F0F000
F0F000F0F000F07000E07801E03801C03C03C01E078007FE0001F80014147F9317>I<0E3F00FE
FF80FFC3C00F01E00E00F00E00F00E00780E00780E00780E00780E00780E00780E00780E00700E
00F00F00F00F01E00FC3C00EFF800E3E000E00000E00000E00000E00000E00000E00000E0000FF
E000FFE000151D7F9319>I<03E1800FF9801E1F803C0780780780780380700380F00380F00380
F00380F00380F00380F003807003807803807807803C0F801E1F800FF38003E380000380000380
000380000380000380000380000380003FF8003FF8151D7E9318>I<0E78FEFCFF9E0F1E0F0C0F
000E000E000E000E000E000E000E000E000E000E000E000E00FFE0FFE00F147F9312>I<1F903F
F07070E030E030E030F00078007F803FE00FF000F0C078C038C038E038E038F070DFE08F800D14
7E9312>I<06000600060006000E000E001E003E00FFF8FFF80E000E000E000E000E000E000E00
0E000E000E000E180E180E180E180E18073007E003C00D1C7F9B12>I<0E01C0FE1FC0FE1FC00E
01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03C00E
03C0070FC007FDFC01F1FC16147F9319>I<FF87F8FF87F81E01E00E01C00E01800E0180070300
070300070300038600038600038E0001CC0001CC0001FC0000F80000F800007000007000007000
15147F9318>I<FF9FF3FCFF9FF3FC1C0780F01C0780601C07C0E00E0FC0C00E0CC0C00E0CE0C0
070CE18007186180071871800398730003B0330003B0330003B03F0001F03E0001E01E0001E01E
0000E01C0000C00C001E147F9321>I<7FC7FC7FC7FC0703E007038003830001C70000EE0000EC
00007800003800003C00007C0000EE0001C7000187000303800701C00F01E0FF87FEFF87FE1714
809318>I<FF87F8FF87F81E01E00E01C00E01800E018007030007030007030003860003860003
8E0001CC0001CC0001FC0000F80000F80000700000700000700000600000600000600000C000F0
C000F18000F380007F00003C0000151D7F9318>I<3FFF3FFF380E301C703C6038607060F001E0
01C0038007830F030E031C073C063806701EFFFEFFFE10147F9314>I<FFFFFCFFFFFC1602808C
17>I E /FB 44 122 df<FFFEFFFEFFFEFFFE0F047F8F14>45 D<F8F8F8F8F805057B8410>I<00
7E0001FF8007FFE00FFFF01FC3F81F00F83E007C3E007C3C003C7C003E7C003E78001E78001EF8
001FF8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001FF8
001FF8001F78001E7C003E7C003E7C003E7C003E3E007C3F00FC1F00F81FC3F80FFFF007FFE001
FF80007E0018297EA71D>48 D<00180000380000F80007F800FFF800FFF800FFF800F8F80000F8
0000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8
0000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8
0000F8007FFFF07FFFF07FFFF07FFFF014287CA71D>I<00FE0003FF800FFFC01FFFE01F07F03C
01F87800FC78007C70007CF0003EF0003E60003E20003E00003E00003E00003E00007C00007C00
00780000F80001F00001E00003E00007C0000F80001F00003E00007C0000F80001F00003E00003
C0000780000F00001E00003C00007FFFFE7FFFFE7FFFFE7FFFFE17287EA71D>I<007E0003FF80
07FFE00FFFF01F81F83E00F87C007C78007C30007C10007C00007C00007C0000780000F80000F8
0001F00007E000FFC000FF8000FFC000FFF00001F80000FC00007C00003E00003E00001F00001F
00001F00001F00001F80001FC0003EE0003EF0007E7C00FC3F01F81FFFF00FFFE003FFC000FE00
18297EA71D>I<0007E0000FE0000BE0001BE0001BE0003BE0003BE00073E00073E000F3E000F3
E001E3E001E3E003E3E003C3E007C3E00F83E00F83E01F03E01F03E03E03E03E03E07C03E07C03
E0F803E0FFFFFFFFFFFFFFFFFFFFFFFF0003E00003E00003E00003E00003E00003E00003E00003
E00003E00003E018277EA61D>I<3FFFF83FFFF83FFFF83FFFF83E00003E00003E00003E00003E
00003E00003E00003E00003E00003E00003E3E003EFF803FFFE03FFFF03FC1F03F80F83F007C3E
007C00007C00003E00003E00003E00003E00003E00003E00003E20003E60007C70007CF800F87C
01F87F07F03FFFE00FFFC007FF0001FC0017287EA61D>I<000FE0003FF800FFF801FFF803F818
07E0000F80000F80001F00003E00003E00003C00007C00007C02007C3FC0F8FFE0F9FFF0FBFFF8
FF80FCFE007CFE003EFC003EFC003FFC001FF8001FF8001FF8001FF8001F78001F7C001F7C001F
7C001E3C003E3E003E1E007C1F00FC0FC1F807FFF003FFE001FF80007E0018297EA71D>I<FFFF
FFFFFFFFFFFFFFFFFFFF00000F00001E00003C0000780000780000F00001F00001E00003E00003
C00007C0000F80000F80000F00001F00001E00003E00003E00003C00007C00007C00007C0000F8
0000F80000F80000F80000F80000F00001F00001F00001F00001F00001F00001F00001F0001827
7EA61D>I<007E0003FFC007FFE00FFFF01F81F83F00FC3E007C7E007E7C003E7C003E7C003E7C
003E7C003E3E007C3E007C1F00F80FC3F007FFE003FFC003FFC00FFFF01F81F83F00FC3E007C7C
003E7C003EF8001FF8001FF8001FF8001FF8001FF8001F7C003E7C003E7E007E3F00FC1F81F80F
FFF007FFE003FFC0007E0018297EA71D>I<007E0001FF8007FFC00FFFE01F83F01F00F83E0078
7C007C7C003C78003EF8003EF8003EF8001EF8001FF8001FF8001FF8001FF8003FFC003F7C003F
7C007F3E007F3F01FF1FFFDF0FFF9F07FF1F03FC1E00403E00003E00003E00007C00007C0000F8
0000F80001F01803E01E0FC03FFF801FFF000FFE0003F80018297EA71D>I<FFFFC000FFFFF800
FFFFFE00FFFFFF00F800FF80F8001FC0F80007E0F80003E0F80001F0F80001F0F80000F0F80000
F0F80001F0F80001E0F80003E0F80007C0F8001FC0F8007F80FFFFFE00FFFFF800FFFFFC00FFFF
FF00F8007FC0F8000FE0F80003F0F80001F8F80000F8F800007CF800007CF800007CF800007CF8
00007CF800007CF80000F8F80000F8F80003F0F80007F0F8003FE0FFFFFFC0FFFFFF00FFFFFE00
FFFFF0001E2A7BA927>66 D<0003FE00000FFFC0003FFFF000FFFFF001FE03F003F8006007E000
2007C000000F8000001F8000001F0000003E0000003E0000007C0000007C0000007C0000007C00
0000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
0000007C0000007C0000007C0000007C0000003E0000003E0000001F0000001F8000000F800000
07C0000007E0000803F8003801FE01F800FFFFF8003FFFF0000FFFC00003FE001D2C7CAA25>I<
FFFFE00000FFFFFC0000FFFFFF0000FFFFFF8000F8003FC000F8000FE000F80003F000F80001F8
00F80000F800F800007C00F800007E00F800003E00F800003E00F800001F00F800001F00F80000
1F00F800000F80F800000F80F800000F80F800000F80F800000F80F800000F80F800000F80F800
000F80F800000F80F800000F80F800000F00F800001F00F800001F00F800001F00F800003E00F8
00007E00F800007C00F80000FC00F80001F800F80003F000F8000FE000F8003FC000FFFFFF8000
FFFFFF0000FFFFFC0000FFFFE00000212A7BA92A>I<F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7BA910>73
D<FE000000FFFE000000FFFE000000FFFF000001FFFB000001DFFB800003DFFB800003DFFB8000
03DFF9C000079FF9C000079FF9C000079FF9E0000F9FF8E0000F1FF8E0000F1FF8F0001F1FF870
001E1FF870001E1FF878003E1FF838003C1FF83C007C1FF83C007C1FF81C00781FF81E00F81FF8
1E00F81FF80E00F01FF80F01F01FF80F01F01FF80701E01FF80783E01FF80783E01FF80383C01F
F803C7C01FF803C7C01FF801C7801FF801EF801FF801EF801FF800EF001FF800FF001FF8007E00
1FF8007E001FF8007E001FF80000001F282A7BA933>77 D<FF00007CFF00007CFF80007CFF8000
7CFBC0007CFBC0007CFBE0007CF9E0007CF9F0007CF8F0007CF8F0007CF8F8007CF878007CF87C
007CF83C007CF83E007CF81E007CF81F007CF80F007CF80F807CF80F807CF807C07CF807C07CF8
03C07CF803E07CF801E07CF801F07CF800F07CF800F87CF800787CF8007C7CF8003C7CF8003C7C
F8003E7CF8001E7CF8001F7CF8000F7CF8000F7CF80007FCF80007FCF80003FCF80003FC1E2A7B
A929>I<FFFFC000FFFFF800FFFFFE00FFFFFF00F8007F80F8001FC0F80007C0F80003E0F80003
E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80003E0F80003E0F800
07C0F8001FC0F8007F80FFFFFF00FFFFFE00FFFFF800FFFFC000F8000000F8000000F8000000F8
000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000
F8000000F8000000F8000000F80000001C2A7BA925>80 D<007FC00001FFF80007FFFE000FFFFF
001FC07F003F000F007E0006007C0000007C000000F8000000F8000000F8000000F8000000F800
0000FC0000007E0000007F0000003F8000001FF800000FFF000007FFE00003FFF80000FFFC0000
0FFE000000FF0000003F0000001F8000000F8000000FC0000007C0000007C0000007C0000007C0
000007C0000007C000000F8060000F80F0001F00FC003F00FF80FE007FFFFC001FFFF80007FFE0
0000FF80001A2C7DAA21>83 D<FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE00001F0000000
01F000000001F000000001F000000001F000000001F000000001F000000001F000000001F00000
0001F000000001F000000001F000000001F000000001F000000001F000000001F000000001F000
000001F000000001F000000001F000000001F000000001F000000001F000000001F000000001F0
00000001F000000001F000000001F000000001F000000001F000000001F000000001F000000001
F000000001F000000001F000000001F000000001F000000001F00000232A7EA928>I<01FC000F
FF003FFF803FFFC03C07E03003E00001F00001F00001F00001F00001F00003F001FFF007FFF01F
FFF03FC1F07E01F0FC01F0F801F0F801F0F801F0FC03F07E0FF07FFFF03FFFF01FF9F00FE1F014
1B7E9A1C>97 D<F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
00F80000F80000F80000F80000F87E00F9FF80FFFFC0FFFFE0FF07E0FC03F0F801F8F800F8F800
F8F8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF800FCF800F8F800F8F801F0FC03
F0FE0FE0FFFFC0FFFF80FBFF00F8FC00162A7BA91E>I<007F8001FFE007FFF80FFFF81FC0783F
00103E00007C00007C00007C0000F80000F80000F80000F80000F80000F80000F800007C00007C
00007C00003E00003F00181FC0780FFFF807FFF801FFE0007F80151B7E9A1A>I<00007C00007C
00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C
00FC7C03FF7C07FFFC0FFFFC1FC1FC3F00FC3E007C7C007C7C007CFC007CF8007CF8007CF8007C
F8007CF8007CF8007CF8007CF8007C7C007C7C007C7E00FC3F00FC1F83FC1FFFFC0FFF7C03FE7C
01F87C162A7EA91E>I<00FC0003FF0007FF800FFFC01F87E03F01E03E00F07C00F07C0070F800
78FFFFF8FFFFF8FFFFF8FFFFF8F80000F80000F800007800007C00007C00003E00003F00181FC0
F80FFFF807FFF801FFE0007F00151B7E9A1A>I<001FC0007FC000FFC001FFC003F00003E00007
C00007C00007C00007C00007C00007C00007C00007C00007C000FFFE00FFFE00FFFE00FFFE0007
C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007
C00007C00007C00007C00007C00007C00007C00007C00007C00007C000122A7FA912>I<00F80F
0003FE7F800FFFFF801FFFFF801F07C0003E03E0003E03E0007C01F0007C01F0007C01F0007C01
F0007C01F0003E03E0003E03E0001F07C0001FFFC0003FFF80003BFE000038F800007800000078
0000007C0000003FFF80003FFFF0001FFFF8001FFFFC003FFFFE007C00FE007C003F00F8001F00
F8001F00F8001F00F8001F00FC003F007E007E003F81FC001FFFF8000FFFF00007FFE00000FF00
0019287E9A1D>I<F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8
0000F80000F80000F80000F80000F87E00F9FF00FBFF80FFFFC0FF0FC0FE07E0FC03E0FC03E0F8
03E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8
03E0F803E0F803E0F803E0F803E0F803E0132A7BA91E>I<F8F8F8F8F800000000000000000000
F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7CA90E>I<F80000F800
00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
00F803F0F807E0F807C0F80F80F81F00F83E00F87E00F8FC00F8F800F9F000FBE000FFF000FFF8
00FFF800FFFC00FE7C00FC7E00F83F00F83F00F81F80F81F80F80FC0F807C0F807E0F803F0F803
F0F801F8152A7BA91C>107 D<F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7CA90E>I<F83F007E00F9FF83FF00FBFFC7FF80FF
FFEFFFC0FF07FE0FC0FE03FC07E0FC01F803E0FC01F803E0F801F003E0F801F003E0F801F003E0
F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003
E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F0
03E0231B7B9A30>I<F87E00F9FF00FBFF80FFFFC0FF0FC0FE07E0FC03E0FC03E0F803E0F803E0
F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0
F803E0F803E0F803E0F803E0131B7B9A1E>I<007E0001FF8007FFE00FFFF01F81F83F00FC3E00
7C7C003E7C003E78001EF8001FF8001FF8001FF8001FF8001FF8001FF8001F7C003E7C003E7C00
3E3E007C3F00FC1FC3F80FFFF007FFE003FFC0007E00181B7E9A1D>I<F87E00F9FF80FFFFC0FF
FFE0FF0FE0FC03F0F801F8F800F8F800F8F800FCF8007CF8007CF8007CF8007CF8007CF8007CF8
007CF800FCF800F8F801F8F801F0FC03F0FE0FE0FFFFC0FFFF80FBFF00F8FC00F80000F80000F8
0000F80000F80000F80000F80000F80000F80000F80000F80000F8000016277B9A1E>I<00FC7C
03FF7C07FFFC0FFFFC1FC1FC3F00FC3E00FC7E007C7C007CFC007CF8007CF8007CF8007CF8007C
F8007CF8007CF8007CFC007C7C007C7C007C7E007C3F00FC1FC3FC1FFFFC0FFF7C03FE7C01F87C
00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C16277E
9A1E>I<F838F8F8F9F8FBF8FFC0FF00FE00FE00FC00FC00F800F800F800F800F800F800F800F8
00F800F800F800F800F800F800F800F800F8000D1B7B9A14>I<07F8001FFF003FFF807FFF807C
0780F80100F80000F80000F80000FC00007F00007FF0003FFC001FFE0007FF0000FF80001FC000
0FC00007C00007C04007C0E007C0FC1F80FFFF807FFF001FFE0007F800121B7E9A16>I<07C000
07C00007C00007C00007C00007C00007C000FFFF80FFFF80FFFF80FFFF8007C00007C00007C000
07C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C000
07C00007C08007E38003FFC003FFC001FF0000FC0012227FA115>I<F803E0F803E0F803E0F803
E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803
E0F803E0F803E0F803E0F807E0F807E0FC1FE0FFFFE07FFBE03FF3E01F83E0131B7B9A1E>I<F8
001FF8001F7C003E7C003E7C003E3E007C3E007C3E007C1F00F81F00F81F00F80F81F00F81F00F
81F007C3E007C3E007C3E003C3C003E7C001E78001E78001E78000E70000F70000FF00007E0000
7E00181B7F9A1B>I<F800F800F8F801F800F87C01FC00F07C01DC01F07C01DC01F07C03DC01F0
3E039E03E03E039E03E03E079E03E03E079E03E01F078F07C01F070F07C01F070F07C00F0F0F07
800F8F078F800F8F078F800F8E078F80079E078F00079E03CF0007DE03DF0003DC03DE0003DC03
DE0003DC01DE0003D801DE0001F801FC0001F801FC0001F800FC00251B7F9A28>I<F8001FFC00
1F7C003E7C003E3E003E3E007C3F007C1F007C1F00F80F80F80F80F00F81F007C1F007C1E003C1
E003E3E003E3C001E3C001E3C000F78000F78000F780007700007700003F00003E00003E00003E
00003C00003C0000780000780000780000F00001F0007FE0007FE0007FC0007F000018277F9A1B
>121 D E /FC 10 118 df<000000007FFC00000E0000000FFFFFC0001E0000007FFFFFF8003E
007FFE00000047497AC754>67 D<FFFFFFFFFFFF000000FFFFFFFFFFFFF00000FFFFFFFFFFFFFE
0000FFFFFFFFF000000000FFFFFFFFF000000000FFFFFFFFF00000000044477CC64F>80
D<0003FFF0000000003FFFFF00000000FFFFFFE0000001FFFFFFF8000003FF003FFC000007FF80
0FFE000007FF8007FF000007FF8003FF800007FF8003FFC00007FF8001FFC00007FF8001FFC000
03FF0000FFE00001FE0000FFE00000FC0000FFE00000000000FFE00000000000FFE00000000000
FFE00000000000FFE00000000000FFE000000000FFFFE00000007FFFFFE0000007FFFFFFE00000
3FFFFCFFE00000FFFE00FFE00003FFF000FFE00007FFC000FFE0000FFF0000FFE0001FFE0000FF
E0003FFC0000FFE0007FFC0000FFE0007FF80000FFE000FFF80000FFE000FFF00000FFE000FFF0
0000FFE000FFF00000FFE000FFF00001FFE000FFF00001FFE000FFF80003FFE0007FFC0007FFE0
007FFC000FFFE0003FFE001F7FF8001FFF80FE7FFFF007FFFFFC3FFFF003FFFFF01FFFF0007FFF
C00FFFF00007FE0003FFF0342E7DAD38>97 D<00001FFF80000001FFFFF8000007FFFFFE00001F
FFFFFF00007FF801FF8000FFE003FFC003FFC003FFC007FF8003FFC007FF0003FFC00FFE0003FF
C01FFE0003FFC01FFC0001FF803FFC0000FF003FFC00007E007FFC000000007FF8000000007FF8
00000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF8000000
00FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF8000000007FFC
000000007FFC000000007FFC000000003FFC000000003FFE000000001FFE000001F01FFF000001
F00FFF000003F007FF800007E007FFC00007C003FFE0000FC000FFF8003F80007FFF00FF00001F
FFFFFC000007FFFFF0000001FFFFC00000001FFC00002C2E7CAD34>99 D<00FC0001FF0003FF80
07FF800FFFC00FFFC00FFFE00FFFE00FFFE00FFFC00FFFC007FF8003FF8001FF0000FC00000000
000000000000000000000000000000000000000000000000000000000000000000007FC0FFFFC0
FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18497CC820>105 D<00FF8003FF000003FF000000FFFF80
FF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80592E7BAD62>109
D<00FF8007FE0000FFFF803FFFC000FFFF80FFFFF000FFFF81FFFFFC00FFFF87F01FFC00FFFF8F
C00FFE0003FF9F0007FF0001FF9E0007FF0001FFBC0007FF0001FFF80003FF8001FFF80003FF80
01FFF00003FF8001FFE00003FF8001FFE00003FF8001FFE00003FF8001FFC00003FF8001FFC000
03FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001
FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003
FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FF
C00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF
8001FFC00003FF8001FFC00003FF80FFFFFF81FFFFFFFFFFFF81FFFFFFFFFFFF81FFFFFFFFFFFF
81FFFFFFFFFFFF81FFFFFF382E7BAD41>I<00000FFE0000000001FFFFF000000007FFFFFC0000
001FFFFFFF0000007FF803FFC00000FFE000FFE00001FF80003FF00003FF00001FF80007FE0000
0FFC000FFE00000FFE000FFC000007FE001FFC000007FF003FFC000007FF803FF8000003FF803F
F8000003FF807FF8000003FFC07FF8000003FFC07FF8000003FFC0FFF8000003FFE0FFF8000003
FFE0FFF8000003FFE0FFF8000003FFE0FFF8000003FFE0FFF8000003FFE0FFF8000003FFE0FFF8
000003FFE0FFF8000003FFE0FFF8000003FFE07FF8000003FFC07FF8000003FFC07FF8000003FF
C07FF8000003FFC03FFC000007FF803FFC000007FF801FFC000007FF001FFC000007FF000FFE00
000FFE0007FF00001FFC0003FF00001FF80001FFC0007FF00000FFE000FFE000007FFC07FFC000
001FFFFFFF00000007FFFFFC00000001FFFFF0000000001FFF000000332E7DAD3A>I<0001F000
03FFFE000000FFFC0000001FE00024427EC12D>116 D<007FC00000FF80FFFFC001FFFF80FFFF
C001FFFF80FFFFC001FFFF80FFFFC001FFFF80FFFFC001FFFF8003FFC00007FF8001FFC00003FF
8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC0
0003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF80
01FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC000
03FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00003FF8001
FFC00003FF8001FFC00003FF8001FFC00003FF8001FFC00007FF8001FFC00007FF8001FFC00007
FF8001FFC0000FFF8001FFC0001FFF8000FFC0003FFF8000FFE0007FFF80007FE000FBFFC0007F
F803F3FFFF003FFFFFE3FFFF000FFFFF83FFFF0003FFFE03FFFF00007FF003FFFF382E7BAD41>
I E /FD 8 117 df<00001E000000003E00000000FE00000003FE0000003FFE0000FFFFFE0000
FFFFFE0000FFFFFE0000FFCFFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00
00000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE
0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000F
FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000000
0FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000
000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00007FFFFFFF
807FFFFFFF807FFFFFFF807FFFFFFF80213879B730>49 D<0000001FFE0000E0000003FFFFE001
1FFE0000003B3D7BBB46>67 D<003FFF00000001FFFFE0000007FFFFFC00000FF007FE00001FF8
01FF80001FF800FFC0001FF8007FE0001FF8007FE0001FF8007FF0000FF0003FF00007E0003FF0
0003C0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000FFFFF000000F
FFFFF000007FF83FF00003FF803FF00007FE003FF0001FFC003FF0003FF8003FF0007FF0003FF0
007FE0003FF000FFE0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FFC0007FF000FFC0
007FF000FFE000FFF0007FE001DFF0003FF003DFFC001FFC0F9FFFE00FFFFE0FFFE001FFF807FF
E0003FE001FFE02B267DA52F>97 D<0003FF8000001FFFF000007FFFFC0000FF83FF0003FE00FF
8007FC003F800FF8003FC01FF8001FE01FF0001FE03FF0001FF03FF0000FF07FE0000FF07FE000
0FF87FE0000FF8FFE0000FF8FFE0000FF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFE0000000FFE0
000000FFE0000000FFE0000000FFE00000007FE00000007FE00000007FF00000003FF00000783F
F00000781FF80000F80FF80000F007FC0001F003FE0003E001FF000FC000FFC07F80003FFFFE00
000FFFFC000001FFC00025267DA52C>101 D<00FF0000000000FFFF0000000000FFFF00000000
FFFF80FFFFFC1FFFFF80313C7DBB36>104 D<00FF00FF8000FFFF0FFFF800FFFF3FFFFE00FFFF
7EA536>112 D<00FE01F800FFFE07FF00FFFE1FFF80FFFE3E3FC0FFFE787FE007FE707FE003FE
E07FE003FEE07FE003FFC07FE003FFC03FC003FF801F8003FF800F0003FF80000003FF80000003
FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000
03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000
0003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE
000023267EA528>114 D<000F0000000F0000000F0000000F0000000F0000001F0000001F0000
001F0000001F0000003F0000003F0000007F0000007F000000FF000001FF000003FF000007FF00
001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF003FF000003FF000003FF000003FF000003FF000003FF
000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003
FF000003FF000003FF000003FF000003FF003C03FF003C03FF003C03FF003C03FF003C03FF003C
03FF003C03FF003C01FF807801FF807800FFC0F000FFE1F0003FFFE0000FFF800001FE001E377E
B626>116 D E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300
TeXDict begin
%%EndSetup
%%Page: 1 1
bop 75 386 a FD(Chapter)31 b(1)75 620 y FC(P)m(oin)m(t)39 b(to)g(P)m(oin)m(t)
g(Comm)m(u)o(nication)75 886 y FB(1.1)59 b(Intro)r(duction)75
1038 y FA(Sending)13 b(and)f(receiving)h(of)e(messages)f(b)o(y)i(pro)q
(cesses)g(is)g(the)f(basic)h(MPI)g(comm)o(unication)g(mec)o(hanism.)75
1095 y(All)20 b(other)f(comm)o(unication)h(functions)g(can)f(b)q(e)h
(de\014ned)h(and)e(implemen)o(ted)i(on)e(top)g(of)g(this)g(basic)75
1151 y(comm)o(unication)e(la)o(y)o(er,)f(using)h(few)f(auxiliary)i(data)e
(managemen)o(t)f(routines,)i(and)g(using)g(the)f(group)75 1207
y(and)f(comm)o(unicator)g(manipulation)i(functions.)166 1290
y(The)i(basic)g(p)q(oin)o(t)g(to)f(p)q(oin)o(t)h(comm)o(unication)g(op)q
(erations)g(are)f Fz(send)g FA(and)h Fz(receiv)o(e)p FA(.)29
b(A)18 b Fz(send)75 1346 y FA(op)q(eration)13 b(creates)f(and)h(sends)g(a)g
(message.)18 b(The)13 b(op)q(eration)g(sp)q(eci\014es)i(a)d
Fz(send)i(bu\013er)f FA(in)h(the)e(sender)75 1403 y(memory)f(from)g(whic)o(h)
h(the)g(message)f(data)g(is)h(tak)o(en.)18 b(In)12 b(addition,)h(the)f(send)g
(op)q(eration)g(asso)q(ciates)f(an)75 1459 y Fz(en)o(v)o(elop)q(e)16
b FA(with)g(the)g(message.)22 b(This)16 b(en)o(v)o(elop)q(e)h(sp)q(eci\014es)
h(the)e(message)g(destination)h(and)f(con)o(tains)75 1516 y(distinguishing)h
(information)d(that)f(can)i(b)q(e)g(used)f(b)o(y)g(the)g Fz(receiv)o(e)g
FA(op)q(eration)g(to)g(select)h(a)e(particular)75 1572 y(message.)166
1654 y(A)22 b Fz(receiv)o(e)f FA(op)q(eration)h(consumes)g(a)f(message.)39
b(The)22 b(message)f(to)g(b)q(e)i(receiv)o(ed)f(is)h(selected)75
1711 y(according)13 b(to)f(the)g(v)m(alue)i(on)e(its)g(en)o(v)o(elop)q(e,)i
(and)f(the)f(message)g(data)g(is)h(put)f(in)o(to)g(the)h Fz(receiv)o(e)g
(bu\013er)p FA(.)166 1793 y(The)f(next)g(sections)h(describ)q(e)g(the)g
(basic)f(\(blo)q(c)o(king\))h(send)g(and)f(receiv)o(e)h(op)q(erations.)19
b(W)l(e)12 b(discuss)75 1850 y(send,)21 b(receiv)o(e,)g(basic)f(comm)o
(unication)g(seman)o(tics,)h(t)o(yp)q(e)e(matc)o(hing)h(requiremen)o(ts,)h(t)
o(yp)q(e)e(con)o(v)o(er-)75 1906 y(sion)14 b(in)h(heterogeneous)f(en)o
(vironmen)o(ts,)f(and)h(more)g(general)g(comm)o(unication)g(mo)q(des.)20
b(Non)o(blo)q(c)o(king)75 1962 y(comm)o(unication)c(is)h(addressed)f(next,)f
(follo)o(w)o(ed)h(b)o(y)g(c)o(hannel-lik)o(e)i(constructs)e(and)f
(send-receiv)o(e)j(op-)75 2019 y(erations.)i(W)l(e)15 b(then)g(consider)h
(general)f(datat)o(yp)q(es)f(that)g(allo)o(w)h(one)g(to)g(transfer)f
(heterogeneous)h(and)75 2075 y(noncon)o(tiguous)g(data.)75
2366 y FB(1.2)59 b(Basic)20 b(send)g(op)r(eration)75 2518 y
FA(The)15 b(syn)o(tax)g(of)g(the)g(simplest)h(send)g(op)q(eration)f(is)h(giv)
o(en)g(b)q(elo)o(w.)p 75 2661 720 2 v 127 2688 a Fy(1)144 2704
y Fx(V)m(ersion)e(of)f(Jan)g(4,)f(1994)-32 46 y Fy(1)-32 103
y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32 385
y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40 667
y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40
949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119 y(20)-40 1175
y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40
1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909 y(34)-40
1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191
y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40 2417 y(43)-40
2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699
y(48)p eop
%%Page: 2 2
bop 75 -100 a FA(2)631 b Fw(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)75 49 y Fv(MPI)p 160 49 14 2 v 16 w(SEND\(buf,)g(count,)g
(datat)o(yp)q(e,)g(dest,)g(tag,)f(comm)m(\))117 130 y Fu(IN)155
b Fv(buf)527 b Fu(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o
(hoice\))117 213 y(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)15
b(of)g(elemen)o(ts)g(in)g(send)h(bu\013er)h(\(nonnegativ)o(e)e(in)o(te-)905
269 y(ger\))117 352 y(IN)155 b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14
b(of)g(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)e(\(handle\))117
434 y(IN)155 b Fv(dest)511 b Fu(rank)14 b(of)f(destination)h(\(in)o(teger\))
117 517 y(IN)155 b Fv(tag)526 b Fu(message)14 b(tag)f(\(in)o(teger\))117
599 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))75
727 y Ft(int)23 b(MPI)p 245 727 15 2 v 17 w(Send\(void*)g(buf,)g(int)g
(count,)h(MPI)p 979 727 V 16 w(Datatype)f(datatype,)g(int)g(dest,)393
784 y(int)h(tag,)f(MPI)p 683 784 V 17 w(Comm)g(comm\))75 874
y(MPI)p 150 874 V 17 w(SEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(TAG,)h
(COMM,)f(IERROR\))170 930 y(<type>)g(BUF\(*\))170 987 y(INTEGER)g(COUNT,)g
(DATATYPE,)g(DEST,)g(TAG,)h(COMM,)f(IERROR)75 1160 y Fs(1.2.1)49
b(Message)16 b(data)75 1253 y FA(The)e(send)g(bu\013er)g(sp)q(eci\014ed)i(b)o
(y)e(the)f Fv(MPI)p 803 1253 14 2 v 16 w(SEND)h FA(op)q(eration)g(consists)g
(of)f Fv(count)i FA(successiv)o(e)g(en)o(tries)f(of)75 1309
y(the)f(t)o(yp)q(e)h(indicated)h(b)o(y)e Fv(datat)o(yp)q(e)p
FA(,)i(starting)e(with)h(the)f(en)o(try)g(at)g(address)h Fv(buf)p
FA(.)20 b(Note)13 b(that)g(w)o(e)g(sp)q(ecify)75 1366 y(the)19
b(message)f(length)i(in)g(terms)e(of)g(n)o(um)o(b)q(er)h(of)g
Fr(elements)p FA(,)f(not)g(n)o(um)o(b)q(er)i(of)e Fr(bytes)p
FA(.)30 b(The)19 b(former)f(is)75 1422 y(mac)o(hine)e(indep)q(enden)o(t)i
(and)d(closer)h(to)e(the)h(application)i(lev)o(el.)166 1482
y(The)g(data)f(part)g(of)g(the)g(message)h(consists)f(of)h(a)f(sequence)i(of)
e Fv(count)i FA(v)m(alues,)f(eac)o(h)g(of)f(the)h(t)o(yp)q(e)75
1539 y(indicated)j(b)o(y)e Fv(datat)o(yp)q(e)p FA(.)31 b Fv(count)20
b FA(ma)o(y)d(b)q(e)i(zero,)g(in)g(whic)o(h)g(case)g(the)f(data)g(part)f(of)h
(the)h(message)e(is)75 1595 y(empt)o(y)l(.)i(The)13 b(basic)h(datat)o(yp)q
(es)e(that)h(can)g(b)q(e)h(sp)q(eci\014ed)h(for)d(message)h(data)f(v)m(alues)
i(corresp)q(ond)g(to)e(the)75 1652 y(basic)j(datat)o(yp)q(es)f(of)g(the)h
(host)f(language.)19 b(The)c(p)q(ossible)h(v)m(alues)g(of)e(this)h(argumen)o
(t)f(for)f(F)l(ortran)h(and)75 1708 y(the)h(corresp)q(onding)h(F)l(ortran)e
(t)o(yp)q(es)i(are)f(listed)h(b)q(elo)o(w)p 472 1892 1006 2
v 471 1949 2 57 v 497 1932 a(MPI)f(datat)o(yp)q(e)p 1046 1949
V 294 w(F)l(ortran)f(datat)o(yp)q(e)p 1477 1949 V 472 1951
1006 2 v 471 2007 2 57 v 497 1990 a Fv(MPI)p 582 1990 14 2
v 16 w(INTEGER)p 1046 2007 2 57 v 287 w Ft(INTEGER)p 1477 2007
V 471 2064 V 497 2047 a Fv(MPI)p 582 2047 14 2 v 16 w(REAL)p
1046 2064 2 57 v 365 w Ft(REAL)p 1477 2064 V 471 2120 V 497
2103 a Fv(MPI)p 582 2103 14 2 v 16 w(DOUBLE)p 777 2103 V 17
w(PRECISION)p 1046 2120 2 57 v 50 w Ft(DOUBLE)23 b(PRECISION)p
1477 2120 V 471 2176 V 497 2159 a Fv(MPI)p 582 2159 14 2 v
16 w(COMPLEX)p 1046 2176 2 57 v 263 w Ft(COMPLEX)p 1477 2176
V 471 2233 V 497 2216 a Fv(MPI)p 582 2216 14 2 v 16 w(LOGICAL)p
1046 2233 2 57 v 291 w Ft(LOGICAL)p 1477 2233 V 471 2289 V
497 2272 a Fv(MPI)p 582 2272 14 2 v 16 w(CHARA)o(CTER)p 1046
2289 2 57 v 211 w Ft(CHARACTER\(1\))p 1477 2289 V 471 2346
V 497 2329 a Fv(MPI)p 582 2329 14 2 v 16 w(BYTE)p 1046 2346
2 57 v 1477 2346 V 472 2347 1006 2 v 75 2549 a FA(The)13 b(p)q(ossible)i(v)m
(alues)g(for)d(this)i(argumen)o(t)f(for)f(C)h(and)h(the)f(corresp)q(onding)h
(C)f(t)o(yp)q(es)g(are)g(listed)i(b)q(elo)o(w.)1967 46 y Fy(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 Fw(1.2.)34 b(BASIC)16 b(SEND)f(OPERA)l(TION)1097
b FA(3)p 466 5 1019 2 v 465 62 2 57 v 491 45 a(MPI)15 b(datat)o(yp)q(e)p
1004 62 V 259 w(C)g(datat)o(yp)q(e)p 1483 62 V 466 63 1019
2 v 465 120 2 57 v 491 103 a Fv(MPI)p 576 103 14 2 v 16 w(CHAR)p
1004 120 2 57 v 321 w Ft(signed)23 b(char)p 1483 120 V 465
176 V 491 159 a Fv(MPI)p 576 159 14 2 v 16 w(SHORT)p 1004 176
2 57 v 291 w Ft(signed)g(short)p 1483 176 V 465 233 V 491 216
a Fv(MPI)p 576 216 14 2 v 16 w(INT)p 1004 233 2 57 v 365 w
Ft(signed)g(int)p 1483 233 V 465 289 V 491 272 a Fv(MPI)p 576
272 14 2 v 16 w(LONG)p 1004 289 2 57 v 321 w Ft(signed)g(long)g(int)p
1483 289 V 465 346 V 491 329 a Fv(MPI)p 576 329 14 2 v 16 w(UNSIGNED)p
815 329 V 17 w(CHAR)p 1004 346 2 57 v 81 w Ft(unsigned)f(char)p
1483 346 V 465 402 V 491 385 a Fv(MPI)p 576 385 14 2 v 16 w(UNSIGNED)p
815 385 V 17 w(SHORT)p 1004 402 2 57 v 51 w Ft(unsigned)g(short)i(int)p
1483 402 V 465 459 V 491 442 a Fv(MPI)p 576 442 14 2 v 16 w(UNSIGNED)p
1004 459 2 57 v 218 w Ft(unsigned)e(int)p 1483 459 V 465 515
V 491 498 a Fv(MPI)p 576 498 14 2 v 16 w(UNSIGNED)p 815 498
V 17 w(LONG)p 1004 515 2 57 v 81 w Ft(unsigned)g(long)i(int)p
1483 515 V 465 571 V 491 555 a Fv(MPI)p 576 555 14 2 v 16 w(FLO)o(A)l(T)p
1004 571 2 57 v 301 w Ft(float)p 1483 571 V 465 628 V 491 611
a Fv(MPI)p 576 611 14 2 v 16 w(DOUBLE)p 1004 628 2 57 v 262
w Ft(double)p 1483 628 V 465 684 V 491 667 a Fv(MPI)p 576 667
14 2 v 16 w(LONG)p 712 667 V 16 w(DOUBLE)p 1004 684 2 57 v
126 w Ft(long)f(double)p 1483 684 V 465 741 V 491 724 a Fv(MPI)p
576 724 14 2 v 16 w(BYTE)p 1004 741 2 57 v 1483 741 V 466 742
1019 2 v 166 912 a FA(The)16 b(datat)o(yp)q(e)f Fv(MPI)p 536
912 14 2 v 15 w(BYTE)i FA(do)q(es)e(not)g(corresp)q(ond)h(to)f(a)g(F)l
(ortran)g(or)g(C)g(datat)o(yp)q(e.)20 b(A)c(v)m(alue)g(of)75
968 y(t)o(yp)q(e)d Fv(MPI)p 260 968 V 16 w(BYTE)h FA(consists)f(of)g(a)g(b)o
(yte)g(\(8)g(binary)h(digits\).)19 b(A)13 b(b)o(yte)h(is)f(unin)o(terpreted)i
(and)e(is)h(di\013eren)o(t)75 1025 y(from)i(a)g(c)o(haracter.)23
b(Di\013eren)o(t)16 b(mac)o(hines)h(ma)o(y)f(ha)o(v)o(e)g(di\013eren)o(t)h
(represen)o(tations)f(for)g(c)o(haracters,)f(or)75 1081 y(ma)o(y)i(use)i
(more)e(than)h(one)g(b)o(yte)g(to)f(represen)o(t)h(c)o(haracters.)28
b(On)18 b(the)g(other)g(hand,)h(a)e(b)o(yte)h(has)g(the)75
1138 y(same)d(binary)h(v)m(alue)g(on)f(all)h(mac)o(hines.)166
1194 y(MPI)11 b(supp)q(orts)g(the)f(basic)i(datat)o(yp)q(es)e(of)g(F)l
(ortran)g(77)g(and)h(ANSI)h(C.)e(Additional)j(MPI)e(datat)o(yp)q(es)75
1251 y(should)32 b(b)q(e)g(pro)o(vided)f(if)h(the)f(host)f(language)h(has)g
(additional)i(data)d(t)o(yp)q(es:)51 b(F)l(or)30 b(example,)75
1307 y Fv(MPI)p 160 1307 V 16 w(LONG)p 296 1307 V 17 w(LONG)p
433 1307 V 17 w(INT)p FA(,)13 b(for)h(64)g(bit)h(in)o(tegers)g(in)g(C;)f
Fv(MPI)p 1113 1307 V 16 w(DOUBLE)p 1308 1307 V 16 w(COMPLEX)h
FA(for)f(double)i(preci-)75 1364 y(sion)h(complex)g(in)g(F)l(ortran;)e
Fv(MPI)p 667 1364 V 16 w(REAL2)p FA(,)h Fv(MPI)p 928 1364 V
16 w(REAL4)g FA(and)h Fv(MPI)p 1266 1364 V 15 w(REAL8)g FA(for)e(2,4)g(or)h
(8)g(b)o(yte)g(reals,)75 1420 y(in)g(F)l(ortran;)e Fv(MPI)p
391 1420 V 15 w(INTEGER1)i(MPI)p 716 1420 V 16 w(INTEGER2)f
FA(and)g Fv(MPI)p 1129 1420 V 16 w(INTEGER4)h FA(for)e(1,)h(2)g(or)f(4)h(b)o
(yte)g(in)o(tegers)75 1476 y(in)h(F)l(ortran;)e(etc.)189 1581
y Fr(R)n(ationale.)77 b FA(One)23 b(goal)e(of)g(the)h(design)g(is)g(to)f
(allo)o(w)h(for)e(MPI)i(to)f(b)q(e)h(implemen)o(ted)h(as)e(a)189
1637 y(library)l(,)d(with)f(no)g(need)h(for)e(additional)j(prepro)q(cessing)f
(or)e(compilation.)27 b(Th)o(us,)17 b(one)g(cannot)189 1693
y(assume)c(that)g(a)g(comm)o(unication)h(call)g(has)g(information)f(on)h(the)
f(datat)o(yp)q(e)g(of)g(v)m(ariables)i(in)f(the)189 1750 y(comm)o(unication)
20 b(bu\013er;)i(this)f(information)f(m)o(ust)f(b)q(e)i(supplied)h(b)o(y)e
(an)g(explicit)i(argumen)o(t.)189 1806 y(The)e(need)h(for)f(suc)o(h)g(datat)o
(yp)q(e)g(information)g(will)i(b)q(ecome)f(clear)f(in)h(section)g(1.6.)34
b(\()p Fr(End)20 b(of)189 1863 y(r)n(ationale.)p FA(\))75 1984
y Fs(1.2.2)49 b(Message)16 b(envelop)q(e)75 2070 y FA(In)g(addition)g(to)e
(the)h(data)g(part,)f(messages)g(con)o(tain)h(information)h(that)e(can)h(b)q
(e)h(used)f(to)g(distinguish)75 2127 y(messages)h(and)g(selectiv)o(ely)i
(receiv)o(e)f(them.)23 b(This)17 b(information)f(is)h(con)o(tained)g(in)g(a)f
(\014xed)h(n)o(um)o(b)q(er)f(of)75 2183 y(\014xed-format)f(\014elds,)h(whic)o
(h)g(w)o(e)f(collectiv)o(ely)i(call)g(the)e Fz(message)i(en)o(v)o(elop)q(e)p
FA(.)i(These)d(\014elds)g(are)75 2275 y Fz(source)75 2368 y(destination)75
2462 y(tag)75 2555 y(con)o(text)166 2647 y FA(The)c(message)g(source)g(is)h
(implicitly)i(determined)f(b)o(y)e(the)g(iden)o(tit)o(y)h(of)f(the)g(message)
g(sender.)20 b(The)75 2704 y(other)15 b(\014elds)h(are)f(sp)q(eci\014ed)i(b)o
(y)f(argumen)o(ts)e(in)i(the)f(send)h(op)q(eration.)-32 46
y Fy(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 FA(4)631 b Fw(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)166 49 y FA(The)h(in)o(teger-v)m(alued)h(message)e(tag)f
(is)i(sp)q(eci\014ed)i(b)o(y)d(the)g Fv(tag)h FA(argumen)o(t.)22
b(This)17 b(in)o(teger)g(can)f(b)q(e)75 106 y(used)c(b)o(y)g(the)f(program)g
(to)g(distinguish)i(di\013eren)o(t)f(t)o(yp)q(es)g(of)f(messages.)18
b(The)12 b(range)f(of)g(v)m(alid)i(tag)e(v)m(alues)75 162 y(is)18
b(implemen)o(tation)h(dep)q(enden)o(t)g(and)f(can)f(b)q(e)h(queried)h(using)f
(the)g Fv(MPI)p 1362 162 14 2 v 16 w(GET)p 1466 162 V 17 w(V)l(ALID)p
1610 162 V 16 w(T)l(A)o(G)p 1712 162 V 17 w(RANGE)75 219 y
FA(en)o(vironmen)o(tal)e(inquiry)h(function,)e(as)g(describ)q(ed)i(in)f
(Chapter)f Fz(??)p FA(.)166 386 y Fq(Discussion:)34 b Fu(Alternativ)o(e)14
b(design)g(\(on)g(the)g(\\Europ)q(ean)h(wish)e(list"\):)166
478 y(The)22 b(range)g(of)g(v)n(alid)e(tag)h(v)n(alues)h(is)g(0)p
Fp(:::U)5 b(B)r Fu(,)22 b(where)h(the)f(v)n(alue)f(of)h Fp(U)5
b(B)24 b Fu(can)e(b)q(e)g(found)g(using)f(the)75 534 y Fo(MPI)p
152 534 13 2 v 14 w(GET)p 247 534 V 15 w(V)m(ALID)p 379 534
V 14 w(T)m(A)o(G)p 473 534 V 14 w(RANGE)13 b Fu(en)o(vironmen)o(tal)g
(inquiry)h(function,)f(as)i(describ)q(ed)h(in)e(Chapter)h Fq(??)p
Fu(.)k Fq(\(Need)75 591 y(to)14 b(c)o(hange)f(the)g(de\014nition)d(of)k(this)
e(inquiry)g(function.\))j Fu(The)e(v)n(alue)f(of)g Fp(U)5 b(B)15
b Fu(shall)c(b)q(e)i(no)g(less)g(than)f(127.)75 647 y(W)m(e)h(exp)q(ect)j(go)
q(o)q(d)d(qualit)o(y)g(MPI)h(implemen)o(tations)d(to)j(pro)o(vide)f(a)h(m)o
(uc)o(h)f(larger)g(tagt)h(range.)166 821 y FA(The)c(con)o(text)g(of)g(the)h
(message)e(sen)o(t)h(is)h(sp)q(eci\014ed)i(b)o(y)d(the)g Fv(comm)5
b FA(argumen)o(t.)17 b(The)11 b(message)f(carries)75 878 y(the)21
b(con)o(text)g(asso)q(ciated)g(with)h(this)f(comm)o(unicator)g(\(see)g
(Chapter)g Fz(??)p FA(\).)37 b(Eac)o(h)21 b(comm)o(unication)75
934 y(con)o(text)11 b(pro)o(vides)i(a)e(separate)h(\\comm)o(unication)g(univ)
o(erse":)19 b(messages)12 b(are)f(alw)o(a)o(ys)h(receiv)o(ed)h(within)75
991 y(the)k(con)o(text)f(they)h(w)o(ere)g(sen)o(t,)g(and)g(messages)f(sen)o
(t)h(in)g(di\013eren)o(t)g(con)o(texts)g(do)g(not)f(in)o(terfere.)25
b(This)75 1047 y(pro)o(vides)16 b(a)f(p)q(o)o(w)o(erful)g(encapsulation)i
(mec)o(hanism)e(for)g(libraries)i(and)e(mo)q(dules.)166 1139
y(The)f(message)f(destination)h(is)h(sp)q(eci\014ed)g(b)o(y)f(the)f
Fv(dest)j FA(argumen)o(t)c(as)i(a)f(rank)g(within)i(the)f(pro)q(cess)75
1195 y(group)i(asso)q(ciated)h(with)g(that)f(same)h(comm)o(unicator)f
(\(remote)g(pro)q(cess)h(group,)f(for)g(in)o(tercomm)o(uni-)75
1252 y(cators\).)32 b(The)19 b(range)h(of)f(v)m(alid)i(v)m(alues)g(is)f
Fv(0,)g(...)32 b(,)20 b(n-1)p FA(,)h(where)e Fv(n)h FA(is)h(the)e(n)o(um)o(b)
q(er)h(of)f(pro)q(cesses)h(in)75 1308 y(this)e(group.)25 b(Th)o(us,)17
b(p)q(oin)o(t-to-p)q(oin)o(t)h(comm)o(unications)g(do)f(not)g(use)g(absolute)
h(addresses,)f(but)g(only)75 1365 y(relativ)o(e)f(ranks)f(within)h(a)f
(group.)k(This)d(pro)o(vides)g(imp)q(ortan)o(t)f(mo)q(dularit)o(y)l(.)166
1456 y(The)j(message)f(en)o(v)o(elop)q(e)i(w)o(ould)f(normally)g(b)q(e)h
(enco)q(ded)g(b)o(y)e(a)g(\014xed-length)j(message)d(header.)75
1513 y(Ho)o(w)o(ev)o(er,)c(the)i(actual)f(mec)o(hanism)h(used)g(to)f(asso)q
(ciate)g(an)g(en)o(v)o(elop)q(e)i(with)e(a)g(message)g(is)h(implemen-)75
1569 y(tation)d(dep)q(enden)o(t:)20 b(some)12 b(of)g(the)g(information)g
(\(e.g.,)g(source)g(or)g(destination\))g(ma)o(y)g(b)q(e)h(implicit,)i(and)75
1626 y(need)f(not)g(b)q(e)g(explicitly)i(carried)e(b)o(y)g(messages;)f(pro)q
(cesses)h(ma)o(y)f(b)q(e)h(iden)o(ti\014ed)i(b)o(y)d(relativ)o(e)h(ranks,)f
(or)75 1682 y(absolute)j(ids;)f(etc.)189 1964 y Fr(A)n(dvic)n(e)j(to)i
(users.)60 b FA(Users)18 b(that)g(are)g(comfortable)g(with)h(the)g(notion)g
(of)f(a)g(\015at)g(name)h(space)189 2020 y(for)14 b(pro)q(cesses,)h(and)h(a)f
(unique)h(comm)o(unication)g(con)o(text,)f(as)f(o\013ered)h(b)o(y)g(most)g
(existing)h(com-)189 2077 y(m)o(unication)f(libraries,)h(need)f(only)h(use)e
(the)h(prede\014ned)h(v)m(ariable)g Fo(MPI)p 1437 2077 V 15
w(COMM)p 1582 2077 V 14 w(W)o(ORLD)f FA(as)f(the)189 2133 y
Fv(comm)d FA(argumen)o(t.)25 b(This)17 b(will)i(allo)o(w)f(to)e(comm)o
(unicate)i(with)f(all)h(the)f(pro)q(cesses)h(a)o(v)m(ailable)h(at)189
2190 y(initialization)f(time.)i(\()p Fr(End)c(of)g(advic)n(e)g(to)h(users.)p
FA(\))75 2534 y FB(1.3)59 b(Basic)20 b(receive)f(op)r(eration)75
2704 y FA(The)c(syn)o(tax)g(of)g(the)g(simplest)h(receiv)o(e)g(op)q(eration)g
(is)f(giv)o(en)h(b)q(elo)o(w.)1967 46 y Fy(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 Fw(1.3.)34 b(BASIC)16 b(RECEIVE)g(OPERA)l(TION)1012
b FA(5)75 49 y Fv(MPI)p 160 49 14 2 v 16 w(RECV)16 b(\(buf,)f(count,)h(datat)
o(yp)q(e,)h(source,)e(tag,)g(comm)m(,)d(status\))117 126 y
Fu(OUT)108 b Fv(buf)527 b Fu(initial)12 b(address)j(of)f(receiv)o(e)h
(bu\013er)g(\(c)o(hoice\))117 201 y(IN)155 b Fv(count)482 b
Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(receiv)o(e)h(bu\013er)g(\(in)
o(teger\))117 275 y(IN)155 b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14
b(of)g(eac)o(h)g(receiv)o(e)h(bu\013er)g(elemen)o(t)e(\(handle\))117
349 y(IN)155 b Fv(source)468 b Fu(rank)14 b(of)f(source)j(\(in)o(teger\))117
423 y(IN)155 b Fv(tag)526 b Fu(message)14 b(tag)f(\(in)o(teger\))117
497 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117
571 y(OUT)108 b Fv(status)476 b Fu(status)15 b(ob)r(ject)g(\(Status\))75
696 y Ft(int)23 b(MPI)p 245 696 15 2 v 17 w(Recv\(void*)g(buf,)g(int)g
(count,)h(MPI)p 979 696 V 16 w(Datatype)f(datatype,)g(int)g(source,)393
752 y(int)h(tag,)f(MPI)p 683 752 V 17 w(Comm)g(comm,)g(MPI)p
1034 752 V 17 w(Status)g(*status\))75 838 y(MPI)p 150 838 V
17 w(RECV\(BUF,)f(COUNT,)h(DATATYPE,)g(SOURCE,)g(TAG,)g(COMM,)g(STATUS,)g
(IERROR\))170 895 y(<type>)g(BUF\(*\))170 951 y(INTEGER)g(COUNT,)g(DATATYPE,)
g(SOURCE,)g(TAG,)g(COMM,)g(STATUS\(MPI)p 1463 951 V 16 w(STATUS)p
1623 951 V 17 w(SIZE\),)170 1008 y(IERROR)166 1094 y FA(The)15
b(receiv)o(e)h(bu\013er)f(consists)h(of)e(the)h(storage)f(con)o(taining)i
Fv(count)g FA(consecutiv)o(e)g(elemen)o(ts)g(of)f(the)75 1151
y(t)o(yp)q(e)e(sp)q(eci\014ed)i(b)o(y)e Fv(datat)o(yp)q(e)p
FA(,)h(starting)e(at)h(address)f Fv(buf)p FA(.)20 b(The)13
b(length)h(of)e(the)h(receiv)o(ed)h(message)f(m)o(ust)75 1207
y(b)q(e)i(less)g(than)f(or)g(equal)h(to)e(the)i(length)g(of)e(the)i(receiv)o
(e)g(bu\013er.)20 b(I.e.,)13 b(an)i(error)e(o)q(ccurs)i(if)g(all)g(incoming)
75 1264 y(data)j(do)q(es)h(not)g(\014t,)g(without)g(truncation,)g(in)o(to)g
(the)g(receiv)o(e)h(bu\013er.)30 b(The)19 b Fv(MPI)p 1531 1264
14 2 v 16 w(PROBE)h FA(function)75 1320 y(describ)q(ed)d(in)f(section)g(1.9)e
(can)i(b)q(e)f(used)h(to)f(receiv)o(e)h(messages)f(of)f(unkno)o(wn)i(length.)
166 1453 y Fq(Discussion:)48 b Fu(It)11 b(w)o(as)g(suggested)h(that)f(MPI)g
(should)g(sp)q(ecify)g(the)h(b)q(eha)o(vior)e(of)h(receiv)o(e)h(when)f
(incoming)66 b Fn(\()75 1502 y Fu(message)16 b(is)g(to)q(o)g(long.)24
b(\(An)17 b(error)g(indication)e(is)h(returned)i(b)o(y)e(the)h(receiv)o(e)g
(call,)f(and)g(the)h(error)g(handler)f(is)75 1552 y(called;)g(one)f(migh)o(t)
f(still)h(w)o(an)o(t)g(the)h(con)o(ten)o(t)g(of)f(the)h(receiv)o(e)h
(bu\013er)g(and)e(of)g(the)h(status)h(v)n(ariable)d(to)i(b)q(e)g(w)o(ell-)75
1602 y(de\014ned.\))166 1652 y(The)e(w)o(eak)o(est)h(requiremen)o(ts)f(are)g
(that:)145 1735 y Fm(\017)23 b Fu(No)13 b(area)h(outside)h(the)f(receiv)o(e)h
(bu\013er)g(is)f(o)o(v)o(erwritten.)145 1808 y Fm(\017)23 b
Fo(MPI)p 266 1808 13 2 v 14 w(GET)p 361 1808 V 15 w(TYPE)13
b Fu(and)g Fo(MPI)p 652 1808 V 15 w(GET)p 748 1808 V 14 w(SOURCE)f
Fu(return)k(the)e(righ)o(t)f(answ)o(er.)145 1880 y Fm(\017)23
b Fu(The)12 b(v)n(alues)h(returned)h(b)o(y)e Fo(MPI)p 695 1880
V 14 w(GET)p 790 1880 V 15 w(COUNT)g Fu(and)g Fo(MPI)p 1115
1880 V 14 w(GET)p 1210 1880 V 15 w(ELEMENT)h Fu(indicate)f(ho)o(w)g(man)o(y)f
(items)189 1930 y(\(resp.)19 b(elemen)o(ts\))14 b(w)o(ere)h(actually)e
(receiv)o(ed)i(in)e(the)i(receiv)o(e)g(bu\013er.)166 2013 y(A)j(stronger)i
(requiremen)o(t)e(is)h(that)f(the)h(receiv)o(e)h(op)q(eration)e(\014ts)h(as)g
(m)o(uc)o(h)e(data)h(as)h(can)g(b)q(e)g(\014t)f(in)g(the)75
2063 y(receiv)o(e)d(bu\013er.)k(\(One)c(can)f(statisfy)f(the)i(previous)f
(requiremen)o(ts)g(b)o(y)f(receiving)h(no)g(data)f(and)h(returning)g(zero)75
2113 y(coun)o(ts,)g(in)f(case)i(of)f(o)o(v)o(er\015o)o(w.\))166
2169 y(Do)20 b(w)o(e)h(w)o(an)o(t)f(to)h(sp)q(ecify)g(suc)o(h)g(b)q(eha)o
(vior?)38 b(\(So)21 b(far,)g(w)o(e)g(ha)o(v)o(e)g(a)o(v)o(oided)e(de\014ning)
i(the)g(b)q(eha)o(vior)g(of)75 2226 y(erroneous)15 b(programs.\))166
2365 y FA(The)k(selection)h(of)f(a)f(message)h(b)o(y)f(a)h(receiv)o(e)h(op)q
(eration)f(is)g(done)g(uniquely)i(according)f(to)e(the)75 2421
y(v)m(alue)i(of)f(the)g(message)g(en)o(v)o(elop)q(e.)32 b(The)19
b(receiv)o(e)h(op)q(eration)g(sp)q(eci\014es)h(an)d Fz(en)o(v)o(elop)q(e)k
(pattern)p FA(;)f(a)75 2478 y(message)13 b(can)g(b)q(e)g(receiv)o(ed)h(b)o(y)
f(that)g(receiv)o(e)h(op)q(eration)f(only)g(if)h(its)f(en)o(v)o(elop)q(e)h
(matc)o(hes)f(that)f(pattern.)75 2534 y(A)19 b(pattern)g(sp)q(eci\014es)i(v)m
(alues)g(for)e(the)g Fv(source)p FA(,)i Fv(tag)e FA(and)h Fv(context)g
FA(\014elds)h(of)e(the)g(message)g(en)o(v)o(elop)q(e.)75 2591
y(The)d(receiv)o(er)h(ma)o(y)e(sp)q(ecify)j(a)e(wildcard)h
Fo(MPI)p 889 2591 V 14 w(ANY)p 988 2591 V 15 w(SOURCE)d FA(v)m(alue)k(for)d
Fv(source)p FA(,)h(and/or)g(a)g(wildcard)75 2647 y Fo(MPI)p
152 2647 V 14 w(ANY)p 251 2647 V 15 w(T)m(A)o(G)c FA(v)m(alue)j(for)d
Fv(tag)p FA(,)i(indicating)h(that)d(an)o(y)h(source)h(and/or)e(tag)h(are)g
(acceptable.)20 b(It)13 b(cannot)75 2704 y(sp)q(ecify)h(a)f(wildcard)h(v)m
(alue)g(for)f Fv(context)p FA(.)20 b(Th)o(us,)13 b(a)g(message)f(can)i(b)q(e)
f(receiv)o(ed)h(b)o(y)f(a)g(receiv)o(e)h(op)q(eration)-32 46
y Fy(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 FA(6)631 b Fw(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)75 49 y FA(only)23 b(if)g(it)g(is)g(addressed)h(to)e(the)g
(receiving)j(pro)q(cess,)f(has)f(a)f(matc)o(hing)h(con)o(text,)g(has)g(matc)o
(hing)75 106 y(source)14 b(unless)g(source=)p Fo(MPI)p 581
106 13 2 v 15 w(ANY)p 681 106 V 15 w(SOURCE)d FA(in)k(the)e(pattern,)g(and)h
(has)g(a)f(matc)o(hing)g(tag)g(unless)i(tag=)75 162 y Fo(MPI)p
152 162 V 14 w(ANY)p 251 162 V 15 w(T)m(A)o(G)f FA(in)i(the)f(pattern.)166
235 y(The)d(message)g(tag)f(is)i(sp)q(eci\014ed)h(b)o(y)e(the)g
Fv(tag)h FA(argumen)o(t)e(of)h(the)g(receiv)o(e)h(op)q(eration.)19
b(The)12 b(message)75 292 y Fv(context)20 b FA(is)f(the)f(con)o(text)g(attac)
o(hed)g(with)h(the)f(comm)o(unicator)g(sp)q(eci\014ed)j(b)o(y)d(the)h
(argumen)o(t)e Fv(comm)m FA(.)75 348 y(The)g(message)g(source,)h(if)f
(di\013eren)o(t)h(from)32 b Fo(MPI)p 929 348 V 14 w(ANY)p 1028
348 V 15 w(SOURCE)p FA(,)15 b(is)j(sp)q(eci\014ed)h(as)e(a)g(rank)f(within)j
(the)75 405 y(pro)q(cess)g(group)f(asso)q(ciated)h(with)g(that)e(same)h(comm)
o(unicator)h(\(remote)e(pro)q(cess)i(group,)g(for)f(in)o(ter-)75
461 y(comm)o(unicators\).)27 b(Th)o(us,)18 b(the)g(range)g(of)f(v)m(alid)j(v)
m(alues)f(for)e(the)h Fv(source)g FA(argumen)o(t)g(is)g Fl(f)g
Fv(0,)f(...)28 b(,)18 b(n-1)75 518 y Fl(g[f)d Fv(MPI)p 251
518 14 2 v 16 w(ANY)p 359 518 V 17 w(SOURCE)i Fl(g)p FA(,)d(where)h
Fv(n)h FA(is)g(the)f(n)o(um)o(b)q(er)h(of)e(pro)q(cesses)i(in)g(this)g
(group.)166 591 y(Note)i(the)i(asymmetry)d(b)q(et)o(w)o(een)j(send)f(and)g
(receiv)o(e)h(op)q(erations:)28 b(A)19 b(receiv)o(e)h(op)q(eration)f(ma)o(y)
75 647 y(accept)13 b(messages)f(from)g(an)h(arbitrary)f(sender;)i(on)f(the)g
(other)f(hand,)i(a)e(send)h(op)q(eration)g(m)o(ust)g(sp)q(ecify)75
704 y(a)i(unique)j(receiv)o(er.)k(This)16 b(matc)o(hes)f(a)h(\\push")f(comm)o
(unication)i(mec)o(hanism,)f(where)g(data)f(transfer)75 760
y(is)i(e\013ected)h(b)o(y)f(the)g(sender)g(\(rather)f(than)h(a)g(\\pull")h
(mec)o(hanism,)g(where)f(data)f(transfer)g(is)i(e\013ected)75
817 y(b)o(y)d(the)g(receiv)o(er\).)166 890 y(Source)f(=)h(destination)f(is)h
(allo)o(w)o(ed:)k(a)14 b(pro)q(cess)g(can)g(send)h(a)f(message)f(to)g
(itself.)21 b(\(Ho)o(w)o(ev)o(er,)12 b(it)i(is)75 946 y(unsafe)h(to)g(do)g
(so)g(with)h(the)f(basic)h(send)g(and)f(receiv)o(e)h(op)q(erations)g(describ)
q(ed)h(ab)q(o)o(v)o(e,)e(since)h(this)g(ma)o(y)75 1003 y(lead)g(to)f(deadlo)q
(c)o(k;)g(see)h(Section)g(1.4\))75 1220 y Fs(1.3.1)49 b(Return)16
b(status)75 1339 y FA(The)e(source)g(or)f(the)h(tag)f(of)g(a)h(receiv)o(ed)h
(message)e(ma)o(y)g(not)h(b)q(e)g(kno)o(wn)g(if)g(wildcard)h(v)m(alues)g(w)o
(ere)e(used)75 1395 y(in)h(the)f(receiv)o(e)h(op)q(eration.)19
b(Also,)13 b(the)g(actual)g(length)h(of)f(the)g(message)f(receiv)o(ed)i(ma)o
(y)e(not)h(b)q(e)h(kno)o(wn.)75 1452 y(Th)o(us,)j(this)h(information)f(needs)
h(to)e(b)q(e)i(returned)g(b)o(y)f(the)g(receiv)o(e)h(op)q(eration.)26
b(The)17 b(information)g(is)75 1508 y(returned)12 b(b)o(y)g(the)f
Fv(status)j FA(argumen)o(t)d(of)g(the)h Fv(MPI)p 923 1508 V
16 w(RECV)g FA(function.)20 b(This)12 b(is)g(an)g(argumen)o(t)f(of)g(a)g(sp)q
(ecial)75 1564 y(MPI-de\014ned)19 b(t)o(yp)q(e.)27 b(Status)17
b(v)m(ariables)i(need)f(to)f(b)q(e)h(explicitly)i(allo)q(cated)f(b)o(y)e(the)
h(user)g({)f(they)g(are)75 1621 y(not)e(system)g(ob)s(jects.)166
1694 y(The)f(status)f(v)m(ariable)i(can)f(b)q(e)g(\\deco)q(ded")h(to)e
(retriev)o(e)h(the)g Fv(count)p FA(,)g Fv(source)h FA(and)f
Fv(tag)f FA(\014elds,)i(using)75 1751 y(the)g(query)g(functions)h(listed)g(b)
q(elo)o(w.)k(The)15 b(information)g(returned)h(b)o(y)f(these)g(query)g
(functions)g(is)h(the)75 1807 y(information)k(stored)e(in)j(the)e
Fv(status)j FA(v)m(ariable)e(b)o(y)g(the)f(last)g(receiv)o(e)i(\(or)d(prob)q
(e)i({)f(see)h(Section)g(1.9\))75 1864 y(call)c(that)f(w)o(as)f(passed)h
Fv(status)i FA(as)e(argumen)o(t.)k(It)c(is)h(erroneous)f(to)f(call)j(these)e
(query)g(functions)h(if)g(the)75 1920 y Fv(status)h FA(v)m(ariable)g(w)o(as)d
(nev)o(er)h(set)g(b)o(y)h(a)e(receiv)o(e)j(\(or)d(prob)q(e\).)75
2040 y Fv(MPI)p 160 2040 V 16 w(GET)p 264 2040 V 17 w(SOURCE\(status,)k
(source\))117 2134 y Fu(IN)155 b Fv(status)476 b Fu(return)15
b(status)g(of)e(receiv)o(e)i(op)q(eration)f(\(Status\))117
2243 y(OUT)108 b Fv(source)468 b Fu(source)15 b(rank)f(\(in)o(teger\))75
2384 y Ft(int)23 b(MPI)p 245 2384 15 2 v 17 w(Get)p 334 2384
V 17 w(source\(MPI)p 591 2384 V 16 w(Status)g(status,)g(int)g(*source\))75
2487 y(MPI)p 150 2487 V 17 w(GET)p 239 2487 V 17 w(SOURCE\(STATUS,)e(SOURCE,)
i(IERROR\))170 2544 y(INTEGER)g(STATUS\(MPI)p 604 2544 V 16
w(STATUS)p 764 2544 V 17 w(SIZE\),)g(SOURCE,)f(IERROR)166 2647
y FA(Returns)13 b(the)g(rank)g(of)f(the)h(message)f(source)h(in)h(the)f
(group)f(asso)q(ciated)h(with)g(the)g(comm)o(unicator)75 2704
y(that)h(w)o(as)h(used)h(to)e(receiv)o(e)i(\(remote)f(group,)f(for)h(in)o
(tercomm)o(unicators\).)1967 46 y Fy(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 Fw(1.3.)34 b(BASIC)16 b(RECEIVE)g(OPERA)l(TION)1012
b FA(7)75 49 y Fv(MPI)p 160 49 14 2 v 16 w(GET)p 264 49 V 17
w(T)l(A)o(G\(status,)17 b(tag\))117 130 y Fu(IN)155 b Fv(status)476
b Fu(return)15 b(status)g(of)e(receiv)o(e)i(or)f(prob)q(e)h(op)q(eration)f
(\(Status\))117 213 y(OUT)108 b Fv(tag)526 b Fu(message)14
b(tag)f(\(in)o(teger\))75 341 y Ft(int)23 b(MPI)p 245 341 15
2 v 17 w(Get)p 334 341 V 17 w(tag\(MPI)p 519 341 V 16 w(Status)g(status,)g
(int)h(*tag\))75 431 y(MPI)p 150 431 V 17 w(GET)p 239 431 V
17 w(TAG\(STATUS,)e(TAG,)h(IERROR\))170 487 y(INTEGER)g(STATUS\(MPI)p
604 487 V 16 w(STATUS)p 764 487 V 17 w(SIZE\),)g(TAG,)g(IERROR)166
578 y FA(Returns)16 b(the)f(tag)f(of)h(receiv)o(ed)h(message.)75
685 y Fv(MPI)p 160 685 14 2 v 16 w(GET)p 264 685 V 17 w(COUNT\(status,)h
(datat)o(yp)q(e,)f(count\))117 766 y Fu(IN)155 b Fv(status)476
b Fu(return)15 b(status)g(of)e(receiv)o(e)i(op)q(eration)f(\(Status\))117
848 y(IN)155 b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14
b(of)g(eac)o(h)g(receiv)o(e)h(bu\013er)g(elemen)o(t)e(\(handle\))117
931 y(OUT)108 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(receiv)o(ed)h
(elemen)o(ts)f(\(in)o(teger\))75 1059 y Ft(int)23 b(MPI)p 245
1059 15 2 v 17 w(Get)p 334 1059 V 17 w(count\(MPI)p 567 1059
V 16 w(Status)g(status,)g(MPI)p 1013 1059 V 17 w(Datatype)f(datatype,)h(int)h
(*count\))75 1149 y(MPI)p 150 1149 V 17 w(GET)p 239 1149 V
17 w(COUNT\(STATUS,)e(DATATYPE,)g(COUNT,)h(IERROR\))170 1206
y(INTEGER)g(STATUS\(MPI)p 604 1206 V 16 w(STATUS)p 764 1206
V 17 w(SIZE\),)g(DATATYPE,)f(COUNT,)h(IERROR)166 1296 y FA(Returns)15
b(the)f(n)o(um)o(b)q(er)h(of)f(elemen)o(ts)h(receiv)o(ed.)21
b(\(Here,)14 b(again,)h(w)o(e)f(coun)o(t)g Fr(elements)p FA(,)f(not)h
Fr(bytes)p FA(.\))75 1352 y(The)f Fv(datat)o(yp)q(e)h FA(argumen)o(t)e
(should)i(matc)o(h)e(the)h(argumen)o(t)f(pro)o(vided)i(b)o(y)f(the)g(receiv)o
(e)g(call)h(that)e(set)h(the)75 1409 y Fv(status)19 b FA(v)m(ariable.)26
b(\(W)l(e)17 b(shall)h(later)f(see,)g(in)h(Section)g(1.13.5,)d(that)h
Fv(MPI)p 1347 1409 14 2 v 16 w(GET)p 1451 1409 V 16 w(COUNT)i
FA(ma)o(y)e(return,)75 1465 y(in)g(certain)g(situations,)f(the)g(v)m(alue)i
Fo(MPI)p 773 1465 13 2 v 14 w(UNDEFINED)p FA(.\))166 1525 y(Note)e(that)g(it)
h(is)g(not)f(mandatory)g(to)g(query)g(the)h(return)g(status)e(after)h(a)g
(receiv)o(e.)22 b(The)16 b(receiv)o(er)75 1582 y(will)h(use)e(these)h(calls,)
g(or)e(some)h(of)g(them,)g(only)h(when)f(the)h(information)f(they)g(return)g
(is)h(needed.)189 1706 y Fr(R)n(ationale.)43 b FA(The)16 b(use)g(of)f(a)h
(separate)f(status)g(argumen)o(t)g(prev)o(en)o(ts)h(errors)e(that)i(are)f
(often)g(at-)189 1763 y(tac)o(hed)f(with)h Fu(INOUT)g FA(argumen)o(t)f
(\(e.g.,)f(passing)i(the)28 b Fo(MPI)p 1233 1763 V 14 w(ANY)p
1332 1763 V 15 w(T)m(A)o(G)13 b FA(constan)o(t)h(as)g(the)h(actual)189
1819 y(argumen)o(t)k(for)g Fv(tag)p FA(\).)32 b(The)20 b(use)g(of)g(an)f
(explicit)j(user)e(ob)s(ject)f(b)q(ecomes)h(imp)q(ortan)o(t)g(for)f(non-)189
1876 y(blo)q(c)o(king)d(comm)o(unication)g(as)f(it)g(allo)o(ws)g(the)h
(receiv)o(e)g(op)q(eration)f(to)g(b)q(e)g(stateless)g(and,)g(hence,)189
1932 y(reen)o(tran)o(t.)j(This)d(prev)o(en)o(ts)f(confusions)h(in)g(the)f
(case)g(where)h(m)o(ultiple)h(receiv)o(es)f(can)f(b)q(e)h(p)q(osted)189
1989 y(b)o(y)g(a)g(pro)q(cess.)189 2071 y(The)j Fv(datat)o(yp)q(e)i
FA(argumen)o(t)d(is)i(passed)g(to)e(the)i Fv(MPI)p 1096 2071
14 2 v 16 w(GET)p 1200 2071 V 16 w(COUNT)g FA(so)f(as)g(to)g(impro)o(v)o(e)g
(p)q(erfor-)189 2128 y(mance)k(\(a)f(message)h(migh)o(t)g(b)q(e)g(receiv)o
(ed)i(without)e(coun)o(ting)g(the)g(n)o(um)o(b)q(er)g(of)g(elemen)o(ts)h(it)
189 2184 y(con)o(tains\),)14 b(and)i(to)e(allo)o(w)i(its)f(use)h(after)e(a)h
(call)h(to)f Fv(MPI)p 1170 2184 V 16 w(PROBE)p FA(.)h(\()p
Fr(End)f(of)i(r)n(ationale.)p FA(\))166 2391 y Fq(Implemen)o(tati)o(on)d
(note:)44 b Fu(One)16 b(exp)q(ects)i(deco)q(de)f(functions)f(to)g(b)q(e)g
(in-lined)f(in)g(man)o(y)f(implemen)o(ta-)75 2448 y(tions.)166
2591 y FA(All)19 b(send)g(and)g(receiv)o(e)g(op)q(erations)f(use)h(the)f
Fv(buf)p FA(,)h Fv(count)p FA(,)h Fv(datat)o(yp)q(e)p FA(,)g
Fv(source)p FA(,)f Fv(dest)p FA(,)h Fv(tag)p FA(,)f Fv(comm)75
2647 y FA(and)e Fv(status)i FA(argumen)o(ts)d(in)i(the)f(same)g(w)o(a)o(y)f
(as)g(the)h(basic)h Fv(MPI)p 1201 2647 V 16 w(SEND)f FA(and)g
Fv(MPI)p 1523 2647 V 16 w(RECV)h FA(op)q(erations)75 2704 y(describ)q(ed)f
(in)f(this)g(section.)-32 46 y Fy(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 FA(8)631 b Fw(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)75 49 y Fv(Alternative)g(Prop)q(osal)75 143
y FA(The)26 b(source)13 b(or)g(the)g(tag)f(of)h(a)f(receiv)o(ed)j(message)d
(ma)o(y)h(not)f(b)q(e)i(kno)o(wn)f(if)g(wildcard)h(v)m(alues)h(w)o(ere)d
(used)-1902 b Fk(\))75 200 y FA(in)14 b(the)f(receiv)o(e)h(op)q(eration.)19
b(Also,)13 b(the)g(actual)g(length)h(of)f(the)g(message)f(receiv)o(ed)i(ma)o
(y)e(not)h(b)q(e)h(kno)o(wn.)75 256 y(Th)o(us,)j(this)h(information)f(needs)h
(to)e(b)q(e)i(returned)g(b)o(y)f(the)g(receiv)o(e)h(op)q(eration.)26
b(The)17 b(information)g(is)75 313 y(returned)12 b(b)o(y)g(the)f
Fv(status)j FA(argumen)o(t)d(of)g(the)h Fv(MPI)p 923 313 14
2 v 16 w(RECV)g FA(function.)20 b(This)12 b(is)g(an)g(argumen)o(t)f(of)g(a)g
(sp)q(ecial)75 369 y(MPI-de\014ned)19 b(t)o(yp)q(e.)27 b(Status)17
b(v)m(ariables)i(need)f(to)f(b)q(e)h(explicitly)i(allo)q(cated)f(b)o(y)e(the)
h(user)g({)f(they)g(are)75 425 y(not)e(system)g(ob)s(jects.)166
486 y(The)f(status)f(v)m(ariable)i(can)f(b)q(e)g(\\deco)q(ded")h(to)e
(retriev)o(e)h(the)g Fv(count)p FA(,)g Fv(source)h FA(and)f
Fv(tag)f FA(\014elds,)i(using)75 543 y(the)g(query)g(functions)h(listed)g(b)q
(elo)o(w.)k(The)15 b(information)g(returned)h(b)o(y)f(these)g(query)g
(functions)g(is)h(the)75 599 y(information)k(stored)e(in)j(the)e
Fv(status)j FA(v)m(ariable)e(b)o(y)g(the)f(last)g(receiv)o(e)i(\(or)d(prob)q
(e)i({)f(see)h(Section)g(1.9\))75 655 y(call)c(that)f(w)o(as)f(passed)h
Fv(status)i FA(as)e(argumen)o(t.)k(It)c(is)h(erroneous)f(to)f(call)j(these)e
(query)g(functions)h(if)g(the)75 712 y Fv(status)h FA(v)m(ariable)g(w)o(as)d
(nev)o(er)h(set)g(b)o(y)h(a)e(receiv)o(e)j(\(or)d(prob)q(e\).)166
773 y(The)i Fv(status)h FA(argumen)o(t)e(in)h(the)f Fv(MPI)p
808 773 V 16 w(RECV)h FA(function)h(is)f(a)f(structure)g(\(of)f(prede\014ned)
j(datat)o(yp)q(e)75 829 y Fo(MPI)p 152 829 13 2 v 14 w(Status)p
FA(\))d(in)h(C,)f(an)g(arra)o(y)f(of)g(in)o(tegers)i(in)g(F)l(ortran.)j(In)d
(C,)e(the)h Fv(source)h FA(and)f Fv(tag)g FA(\014eld)i(are)d(accessed)75
886 y(as)h(comp)q(onen)o(ts)h(of)f(this)h(structure:)k Fv(status.source)e
FA(and)e Fv(status.tag)p FA(,)h(resp)q(ectiv)o(ely)l(.)21 b(In)16
b(F)l(ortran,)d(they)75 942 y(are)j(accessed)h(as)g(en)o(tries)g(in)g(an)f
(arra)o(y:)22 b Fv(ST)l(A)l(TUS\(MPI)p 1064 942 14 2 v 17 w(SOURCE\))17
b FA(AND)g Fv(ST)l(A)l(TUS\(MPI)p 1675 942 V 17 w(T)l(A)o(G\))p
FA(,)f(re-)75 998 y(sp)q(ectiv)o(ely;)f Fo(MPI)p 373 998 13
2 v 15 w(SOURCE)c FA(and)j Fo(MPI)p 723 998 V 14 w(ST)m(A)m(TUS)e
FA(are)h(prede\014ned)i(constan)o(ts)e(set)g(to)g(the)g(correct)g(indices)75
1055 y(withing)19 b Fv(ST)l(A)l(TUS)p FA(.)g(The)g Fv(status)h
FA(v)m(ariable)g(ma)o(y)d(con)o(tain)i(additional)h(\014elds)f(with)g
(additional)h(infor-)75 1111 y(mation)15 b(that)g(is)g(not)g(directly)i
(accessible)g(to)d(the)h(user.)166 1172 y(Information)i(on)g(the)f(length)i
(of)e(the)h(incoming)i(message)d(is)h(not)g(directly)h(a)o(v)m(ailable)h(as)d
(a)h(\014led)75 1228 y(of)d Fv(status)p FA(.)22 b(Rather,)15
b(an)g(inquiry)h(function)g(need)f(to)g(b)q(e)g(applied)i(to)d
Fv(status)p FA(,)j(in)f(order)e(to)g(retriev)o(e)i(this)75
1285 y(information.)75 1393 y Fv(MPI)p 160 1393 14 2 v 16 w(GET)p
264 1393 V 17 w(COUNT\(status,)h(datat)o(yp)q(e,)f(count\))117
1474 y Fu(IN)155 b Fv(status)476 b Fu(return)15 b(status)g(of)e(receiv)o(e)i
(op)q(eration)f(\(Status\))117 1558 y(IN)155 b Fv(datat)o(yp)q(e)424
b Fu(datat)o(yp)q(e)14 b(of)g(eac)o(h)g(receiv)o(e)h(bu\013er)g(elemen)o(t)e
(\(handle\))117 1641 y(OUT)108 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13
b(of)h(receiv)o(ed)h(elemen)o(ts)f(\(in)o(teger\))75 1770 y
Ft(int)23 b(MPI)p 245 1770 15 2 v 17 w(Get)p 334 1770 V 17
w(count\(MPI)p 567 1770 V 16 w(Status)g(status,)g(MPI)p 1013
1770 V 17 w(Datatype)f(datatype,)h(int)h(*count\))75 1861 y(MPI)p
150 1861 V 17 w(GET)p 239 1861 V 17 w(COUNT\(STATUS,)e(DATATYPE,)g(COUNT,)h
(IERROR\))170 1917 y(INTEGER)g(STATUS\(MPI)p 604 1917 V 16
w(STATUS)p 764 1917 V 17 w(SIZE\),)g(DATATYPE,)f(COUNT,)h(IERROR)166
2008 y FA(Returns)15 b(the)f(n)o(um)o(b)q(er)h(of)f(elemen)o(ts)h(receiv)o
(ed.)21 b(\(Here,)14 b(again,)h(w)o(e)f(coun)o(t)g Fr(elements)p
FA(,)f(not)h Fr(bytes)p FA(.\))75 2064 y(The)f Fv(datat)o(yp)q(e)h
FA(argumen)o(t)e(should)i(matc)o(h)e(the)h(argumen)o(t)f(pro)o(vided)i(b)o(y)
f(the)g(receiv)o(e)g(call)h(that)e(set)h(the)75 2121 y Fv(status)19
b FA(v)m(ariable.)26 b(\(W)l(e)17 b(shall)h(later)f(see,)g(in)h(Section)g
(1.13.5,)d(that)h Fv(MPI)p 1347 2121 14 2 v 16 w(GET)p 1451
2121 V 16 w(COUNT)i FA(ma)o(y)e(return,)75 2177 y(in)g(certain)g(situations,)
f(the)g(v)m(alue)i Fo(MPI)p 773 2177 13 2 v 14 w(UNDEFINED)p
FA(.\))166 2238 y(Note)e(that)g(it)h(is)g(not)f(mandatory)g(to)g(query)g(the)
h(return)g(status)e(after)h(a)g(receiv)o(e.)22 b(The)16 b(receiv)o(er)75
2294 y(will)h(use)e(these)h(calls,)g(or)e(some)h(of)g(them,)g(only)h(when)f
(the)h(information)f(they)g(return)g(is)h(needed.)189 2421
y Fr(R)n(ationale.)43 b FA(The)16 b(use)g(of)f(a)h(separate)f(status)g
(argumen)o(t)g(prev)o(en)o(ts)h(errors)e(that)i(are)f(often)g(at-)189
2478 y(tac)o(hed)f(with)h Fu(INOUT)g FA(argumen)o(t)f(\(e.g.,)f(passing)i
(the)28 b Fo(MPI)p 1233 2478 V 14 w(ANY)p 1332 2478 V 15 w(T)m(A)o(G)13
b FA(constan)o(t)h(as)g(the)h(actual)189 2534 y(argumen)o(t)k(for)g
Fv(tag)p FA(\).)32 b(The)20 b(use)g(of)g(an)f(explicit)j(user)e(ob)s(ject)f
(b)q(ecomes)h(imp)q(ortan)o(t)g(for)f(non-)189 2591 y(blo)q(c)o(king)d(comm)o
(unication)g(as)f(it)g(allo)o(ws)g(the)h(receiv)o(e)g(op)q(eration)f(to)g(b)q
(e)g(stateless)g(and,)g(hence,)189 2647 y(reen)o(tran)o(t.)j(This)d(prev)o
(en)o(ts)f(confusions)h(in)g(the)f(case)g(where)h(m)o(ultiple)h(receiv)o(es)f
(can)f(b)q(e)h(p)q(osted)189 2704 y(b)o(y)g(a)g(pro)q(cess.)1967
46 y Fy(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 Fw(1.4.)34 b(SEMANTICS)16 b(OF)f(POINT-TO-POINT)i(COMMUNICA)l
(TION)472 b FA(9)189 49 y(The)14 b Fv(count)i FA(v)m(alue)g(is)f(retriev)o
(ed)g(b)o(y)g(a)f(function)h(call)h(with)f(a)f Fv(datat)o(yp)q(e)j
FA(argumen)o(t,)c(rather)h(than)189 106 y(b)o(y)e(a)h(direct)h(access)f(to)f
(a)h Fv(status)i FA(\014eld,)f(so)e(as)h(to)f(a)o(v)o(oid)h(the)g(need)h(for)
e(computing)h Fv(count)i FA(at)d(eac)o(h)189 162 y(receiv)o(e,)j(and)h(to)e
(allo)o(w)i(its)f(use)h(after)e(a)h(call)h(to)f Fv(MPI)p 1123
162 14 2 v 16 w(PROBE)p FA(.)h(\()p Fr(End)f(of)i(r)n(ationale.)p
FA(\))166 276 y(All)i(send)g(and)g(receiv)o(e)g(op)q(erations)f(use)h(the)f
Fv(buf)p FA(,)h Fv(count)p FA(,)h Fv(datat)o(yp)q(e)p FA(,)g
Fv(source)p FA(,)f Fv(dest)p FA(,)h Fv(tag)p FA(,)f Fv(comm)75
332 y FA(and)e Fv(status)i FA(argumen)o(ts)d(in)i(the)f(same)g(w)o(a)o(y)f
(as)g(the)h(basic)h Fv(MPI)p 1201 332 V 16 w(SEND)f FA(and)g
Fv(MPI)p 1523 332 V 16 w(RECV)h FA(op)q(erations)75 388 y(describ)q(ed)f(in)f
(this)g(section.)166 446 y Fr(A)n(dditional)g(pr)n(op)n(osal)166
504 y FA(The)k Fv(status)i FA(v)m(ariable)g(also)e(con)o(tain)h(a)e
Fv(size)i FA(\014eld)g(\()p Fv(status.size)h FA(in)f(C,)f Fv(ST)l(A)l
(TUS\(MPI)p 1693 504 V 16 w(SIZE\))g FA(in)75 561 y(F)l(ortran\))12
b(that)i(enco)q(des)g(the)g(n)o(um)o(b)q(er)g(of)g(b)o(ytes)g(of)f(data)g(in)
i(the)f(incoming)h(message.)k(Note)13 b(that)h(this)75 617
y(n)o(um)o(b)q(er)g(of)g(b)o(ytes)f(ma)o(y)g(b)q(e)i(di\013eren)o(t)f(than)g
(the)g(n)o(um)o(b)q(er)g(of)f(b)o(ytes)h(actually)h(stored)e(in)i(the)f
(receiv)o(er's)75 674 y(memory)l(.)166 808 y Fq(Discussion:)166
865 y Fu(The)h(alternativ)o(e)g(design)g(ma)o(y)e(a)o(v)o(oid)g(the)j(need)g
(for)e(a)h(function)f(call)g(to)h(get)g Fo(tag)g Fu(and)f Fo(source)i
Fu(\(standard)75 922 y(F)m(ortran)j(do)q(es)i(not)e(ha)o(v)o(e)g(macro)g
(expansion\).)35 b(The)20 b(coun)o(terargumen)o(t)f(is)h(that)f(man)o(y)f
(\(most?\))34 b(F)m(ortran)75 978 y(compilers)12 b(do)h(supp)q(ort)g
(inlining,)e(although,)h(p)q(erhaps)i(di\013eren)o(tly)f(on)g(eac)o(h)h
(system,)e(and)h(that)g(it)g(is)f(inelegan)o(t)75 1035 y(to)i(ha)o(v)o(e)f(a)
h(di\013eren)o(t)h(access)h(metho)q(d)d(for)g(di\013eren)o(t)i(status)g
(\014elds.)75 1269 y FB(1.4)59 b(Semantics)18 b(of)i(p)r(oint-to-p)r(oint)e
(communication)75 1373 y FA(A)g(v)m(alid)h(MPI)e(implemen)o(tation)i(guaran)o
(tees)e(certain)h(general)g(prop)q(erties)g(of)f(p)q(oin)o(t-to-p)q(oin)o(t)h
(com-)75 1430 y(m)o(unication,)e(whic)o(h)g(are)f(describ)q(ed)i(in)f(this)f
(section.)75 1558 y Fv(Order)46 b FA(Messages)14 b(are)h Fr(non-overtaking)p
FA(,)g(within)h(eac)o(h)f(con)o(text:)20 b(if)c(t)o(w)o(o)d(messages)i(are)g
(successiv)o(ely)75 1614 y(sen)o(t)10 b(from)g(the)g(same)g(source,)h(to)e
(the)i(same)f(destination,)h(with)g(the)f(same)g(con)o(text,)h(then)f(the)g
(messages)75 1671 y(are)17 b(receiv)o(ed)i(in)f(the)f(order)g(they)h(w)o(ere)
f(sen)o(t.)26 b(I.e.,)17 b(if)h(the)f(receiv)o(er)i(p)q(osts)e(t)o(w)o(o)f
(successiv)o(e)i(receiv)o(es)75 1727 y(that)g(b)q(oth)g(matc)o(h)g(either)i
(message,)e(then)h(the)f(\014rst)h(receiv)o(e)g(will)h(receiv)o(e)g(the)e
(\014rst)g(message,)h(and)75 1784 y(the)e(second)h(receiv)o(e)h(will)g
(receiv)o(e)f(the)f(second)h(message.)26 b(This)18 b(requiremen)o(t)g
(facilitates)g(matc)o(hing)75 1840 y(of)e(sends)h(to)f(receiv)o(es.)25
b(It)16 b(guaran)o(tees)g(that)g(message-passing)g(co)q(de)h(is)g
(deterministic,)i(if)e(pro)q(cesses)75 1896 y(are)h(single-threaded)j(and)e
(wildcard)h Fo(MPI)p 831 1896 13 2 v 14 w(ANY)p 930 1896 V
15 w(SOURCE)d FA(is)i(not)f(used)h(in)h(receiv)o(es.)31 b(\(Some)19
b(of)f(the)75 1953 y(calls)k(describ)q(ed)h(later,)g(suc)o(h)e(as)g
Fv(MPI)p 771 1953 14 2 v 16 w(CANCEL)g FA(or)g Fv(MPI)p 1124
1953 V 16 w(W)l(AIT)l(ANY)p FA(,)h(are)f(additional)h(sources)f(of)75
2009 y(nondeterminism.\),)166 2067 y(If)c(a)g(pro)q(cess)h(has)f(a)g(single)h
(thread)f(of)g(execution,)i(then)e(an)o(y)g(t)o(w)o(o)f(comm)o(unications)i
(executed)75 2124 y(b)o(y)e(this)h(pro)q(cess)g(are)f(ordered.)23
b(On)17 b(the)f(other)g(hand,)h(if)g(the)f(pro)q(cess)h(is)g(m)o
(ulti-threaded,)g(then)g(the)75 2180 y(seman)o(tics)e(of)f(thread)h
(execution)h(ma)o(y)e(not)g(de\014ne)i(a)e(relativ)o(e)i(order)e(b)q(et)o(w)o
(een)h(t)o(w)o(o)e(send)j(op)q(erations)75 2237 y(executed)g(b)o(y)f(t)o(w)o
(o)f(distinct)j(threads:)i(the)d(op)q(erations)f(are)g(logically)i(concurren)
o(t,)e(ev)o(en)h(though)f(one)75 2293 y(ph)o(ysically)22 b(precedes)e(the)g
(other.)33 b(In)20 b(suc)o(h)g(a)f(case,)i(the)e(t)o(w)o(o)g(messages)g(sen)o
(t)g(can)h(b)q(e)g(receiv)o(ed)h(in)75 2350 y(an)o(y)f(order.)37
b(Similarly)l(,)24 b(if)d(t)o(w)o(o)e(receiv)o(e)j(op)q(erations)f(that)f
(are)g(logically)j(concurren)o(t)e(receiv)o(e)g(t)o(w)o(o)75
2406 y(successiv)o(ely)i(sen)o(t)d(messages,)h(then)g(the)g(t)o(w)o(o)f
(messages)g(can)h(matc)o(h)f(the)h(t)o(w)o(o)e(receiv)o(es)j(in)f(either)75
2462 y(order.)31 b(Note)19 b(that)f(the)h(receiv)o(er)h(is)g(not)e(required)i
(to)f(receiv)o(e)h(messages)e(in)i(the)f(order)g(they)g(w)o(ere)75
2519 y(sen)o(t,)c(if)g(they)h(ha)o(v)o(e)e(distinct)j(en)o(v)o(elop)q(es.)75
2647 y Fv(Progress)45 b FA(If)13 b(a)g(pair)g(of)f(matc)o(hing)h(send)h(and)f
(receiv)o(es)g(ha)o(v)o(e)g(b)q(een)h(initiated)g(on)f(t)o(w)o(o)e(pro)q
(cesses,)j(then)75 2704 y(at)k(least)h(one)h(of)e(these)h(t)o(w)o(o)f(op)q
(erations)h(will)i(complete,)f(indep)q(enden)o(tly)i(of)c(other)h(actions)g
(in)h(the)-32 46 y Fy(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32
272 y(5)-32 328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40
554 y(10)-40 611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40
836 y(15)-40 893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40
1119 y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345
y(24)-40 1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40
1627 y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853
y(33)-40 1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40
2135 y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361
y(42)-40 2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40
2643 y(47)-40 2699 y(48)p eop
%%Page: 10 10
bop 75 -100 a FA(10)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y FA(system:)i(the)13
b(send)h(op)q(eration)f(will)h(complete,)g(unless)g(the)f(receiv)o(e)h(is)f
(satis\014ed)h(b)o(y)e(another)h(message,)75 106 y(and)h(completes;)g(the)g
(receiv)o(e)h(op)q(eration)f(will)h(complete,)g(unless)g(the)f(message)f(sen)
o(t)g(is)i(consumed)f(b)o(y)75 162 y(another)h(matc)o(hing)g(receiv)o(e)h
(that)f(w)o(as)f(p)q(osted)h(at)g(the)g(same)g(destination)h(pro)q(cess.)75
281 y Fv(F)o(airness)46 b FA(MPI)15 b(mak)o(es)g(no)g(guaran)o(tee)g(of)g
Fr(fairness)f FA(in)i(the)g(handling)h(of)e(comm)o(unication.)21
b(Supp)q(ose)75 337 y(that)c(a)f(send)i(w)o(as)f(p)q(osted.)26
b(Then)18 b(it)f(is)h(p)q(ossible)h(that)e(the)g(destination)h(pro)q(cess)g
(rep)q(eatedly)g(p)q(osts)75 394 y(a)d(receiv)o(e)h(that)f(matc)o(hes)f(this)
i(send,)g(y)o(et)e(the)i(message)f(is)g(nev)o(er)h(receiv)o(ed,)g(b)q(ecause)
g(it)g(is)f(eac)o(h)h(time)75 450 y(o)o(v)o(ertak)o(en)e(b)o(y)i(another)f
(message,)g(sen)o(t)h(from)f(another)g(source.)21 b(Similarly)l(,)d(supp)q
(ose)f(that)e(a)g(receiv)o(e)75 507 y(w)o(as)f(p)q(osted)i(b)o(y)f(a)g(m)o
(ulti-threaded)h(pro)q(cess.)k(Then)c(it)f(is)h(p)q(ossible)h(that)d
(messages)h(that)f(matc)o(h)h(this)75 563 y(receiv)o(e)20 b(are)g(rep)q
(eatedly)g(receiv)o(ed,)i(y)o(et)d(the)g(receiv)o(e)i(is)f(nev)o(er)f
(satis\014ed,)i(b)q(ecause)f(it)g(is)g(o)o(v)o(ertak)o(en)75
620 y(b)o(y)15 b(other)h(receiv)o(es)g(p)q(osted)g(at)e(this)i(no)q(de)h(\(b)
o(y)e(other)g(executing)h(threads\).)21 b(It)15 b(is)h(the)g(programmer's)75
676 y(resp)q(onsibilit)o(y)i(to)c(prev)o(en)o(t)h(starv)m(ation)g(in)h(suc)o
(h)g(situations.)75 795 y Fv(Resource)f(limitations)43 b FA(The)29
b(receiv)o(e)15 b(op)q(eration)f Fv(MPI)p 1043 795 14 2 v 16
w(RECV)g FA(clearly)i(is)e(non-lo)q(cal:)21 b(it)14 b(cannot)g(com-)-1903
b Fk(\))75 851 y FA(plete)16 b(unless)h(a)e(matc)o(hing)g(send)h(is)g(p)q
(osted)f(b)o(y)g(another)g(pro)q(cess.)21 b(The)15 b(send)h(op)q(eration)g
Fv(MPI)p 1745 851 V 16 w(SEND)75 908 y FA(also)c(is)h(non-lo)q(cal:)20
b(The)13 b(send)f(op)q(eration)h(ma)o(y)f(not)f(b)q(e)i(able)g(to)f(complete)
h(b)q(efore)g(a)f(matc)o(hing)g(receiv)o(e)75 964 y(is)17 b(p)q(osted.)23
b(Messages)15 b(sen)o(t)h(b)o(y)h(an)f Fv(MPI)p 795 964 V 15
w(SEND)h FA(op)q(eration)g(can)f(b)q(e)h(bu\013ered)f(b)o(y)h(the)f(system,)g
(so)f(as)75 1021 y(to)g(allo)o(w)h(the)g(blo)q(c)o(king)h(send)f(op)q
(eration)g(to)f(complete)h(ahead)g(of)f(the)h(matc)o(hing)f(receiv)o(e.)22
b(Ho)o(w)o(ev)o(er,)75 1077 y(if)15 b(no)g(suc)o(h)g(bu\013er)f(space)h(is)g
(a)o(v)m(ailable,)h(then)f(the)g(send)g(op)q(eration)g(blo)q(c)o(ks)g(un)o
(til)h(a)e(matc)o(hing)h(receiv)o(e)75 1133 y(is)h(executed,)f(or)g
(su\016cien)o(t)h(bu\013er)f(space)h(b)q(ecomes)g(a)o(v)m(ailable.)166
1190 y(In)g(some)g(situations,)g(lac)o(k)g(of)g(bu\013er)g(space)g(ma)o(y)f
(lead)i(to)e(deadlo)q(c)o(k)i(situations.)23 b(This)16 b(is)h(illus-)75
1246 y(trated)d(b)o(y)i(the)f(examples)h(b)q(elo)o(w)g(\(in)o(v)o(olving)g(t)
o(w)o(o)e(pro)q(cesses)h(with)h(ranks)f(0)f(and)i(1\))166 1303
y(The)21 b(follo)o(wing)i(program)d(is)i(safe,)g(and)f(can)h(succeed)g(ev)o
(en)g(if)g(no)f(bu\013er)g(space)h(for)f(data)f(is)75 1359
y(a)o(v)m(ailable.)75 1455 y Ft(CALL)j(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))
75 1512 y(IF)h(\(rank.EQ.0\))123 1568 y(THEN)170 1625 y(CALL)g
(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g(1,)h(tag,)f(comm,)g(ierr\))170
1681 y(CALL)h(MPI_RECV\(recvbuf,)d(count,)i(MPI_REAL,)g(1,)h(tag,)f(comm,)g
(status,)g(ierr\))123 1738 y(ELSE)95 b(!)23 b(rank.EQ.1)170
1794 y(CALL)h(MPI_RECV\(recvbuf,)d(count,)i(MPI_REAL,)g(0,)h(tag,)f(comm,)g
(status,)g(ierr\))170 1851 y(CALL)h(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g
(0,)h(tag,)f(comm,)g(ierr\))75 1907 y(END)g(IF)166 2003 y FA(The)15
b(follo)o(wing)h(program)e(is)i(erroneous,)f(and)g(will)i(alw)o(a)o(ys)d
(fail.)75 2099 y Ft(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75
2156 y(IF)h(\(rank.EQ.0\))123 2212 y(THEN)170 2269 y(CALL)g
(MPI_RECV\(recvbuf,)d(count,)i(MPI_REAL,)g(1,)h(tag,)f(comm,)g(status,)g
(ierr\))170 2325 y(CALL)h(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g(1,)h
(tag,)f(comm,)g(ierr\))123 2382 y(ELSE)95 b(!)23 b(rank.EQ.1)170
2438 y(CALL)h(MPI_RECV\(recvbuf,)d(count,)i(MPI_REAL,)g(0,)h(tag,)f(comm,)g
(status,)g(ierr\))170 2495 y(CALL)h(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g
(0,)h(tag,)f(comm,)g(ierr\))75 2551 y(END)g(IF)166 2647 y FA(The)15
b(receiv)o(e)g(op)q(eration)g(of)f(the)h(\014rst)f(pro)q(cess)h(m)o(ust)f
(complete)i(b)q(efore)f(its)f(send,)h(and)g(can)g(com-)75 2704
y(plete)j(only)g(if)g(the)f(matc)o(hing)g(send)h(of)f(the)g(second)h(pro)q
(cessor)f(is)h(executed;)g(the)g(receiv)o(e)g(op)q(eration)1967
46 y Fy(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 Fw(1.4.)34 b(SEMANTICS)16 b(OF)f(POINT-TO-POINT)i(COMMUNICA)l
(TION)450 b FA(11)75 49 y(of)14 b(the)h(second)g(pro)q(cess)g(m)o(ust)f
(complete)h(b)q(efore)g(its)f(send)i(and)e(can)h(complete)g(only)g(if)g(the)g
(matc)o(hing)75 106 y(send)h(of)f(the)g(\014rst)g(pro)q(cess)g(is)h
(executed.)21 b(This)15 b(program)f(will)j(deadlo)q(c)o(k.)166
162 y(The)c(follo)o(wing)h(program)f(is)g(unsafe,)h(and)f(will)i(deadlo)q(c)o
(k)g(if)e(there)h(is)g(no)f(su\016cien)o(t)h(bu\013er)f(space.)75
251 y Ft(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75
308 y(IF)h(\(rank.EQ.0\))123 364 y(THEN)170 421 y(CALL)g(MPI_SEND\(sendbuf,)d
(count,)i(MPI_REAL,)g(1,)h(tag,)f(comm,)g(ierr\))170 477 y(CALL)h
(MPI_RECV\(recvbuf,)d(count,)i(MPI_REAL,)g(1,)h(tag,)f(comm,)g(status,)g
(ierr\))123 533 y(ELSE)95 b(!)23 b(rank.EQ.1)170 590 y(CALL)h
(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g(0,)h(tag,)f(comm,)g(ierr\))170
646 y(CALL)h(MPI_RECV\(recvbuf,)d(count,)i(MPI_REAL,)g(0,)h(tag,)f(comm,)g
(status,)g(ierr\))75 703 y(END)g(IF)166 792 y FA(The)f(message)g(sen)o(t)f(b)
o(y)h(eac)o(h)g(pro)q(cess)g(has)g(to)g(b)q(e)g(copied)h(out)f(b)q(efore)g
(the)g(send)h(op)q(eration)75 848 y(returns)15 b(and)h(the)f(receiv)o(e)h(op)
q(eration)g(starts.)i(F)l(or)d(the)g(program)g(to)f(complete,)i(it)f(is)h
(necessary)g(that)75 905 y(at)h(least)g(one)h(of)f(the)g(t)o(w)o(o)f
(messages)h(sen)o(t)g(is)h(bu\013ered.)27 b(Th)o(us,)17 b(this)h(program)e
(can)i(succeed)h(only)e(if)75 961 y(the)f(comm)o(unication)h(system)f(can)g
(bu\013er)g(at)g(least)g Fv(count)i FA(w)o(ords)d(of)h(data.)22
b(Otherwise,)17 b(a)f(deadlo)q(c)o(k)75 1018 y(o)q(ccurs.)166
1074 y(It)24 b(is)h(exp)q(ected)g(that)e(MPI)h(implemen)o(tations)h(will)h
(follo)o(w)e(the)h(practice)f(of)g(most)f(curren)o(t)75 1131
y(message-passing)18 b(systems)f(b)o(y)g(bu\013ering)h(outgoing)g(messages)f
(whenev)o(er)h(feasible.)28 b(Ho)o(w)o(ev)o(er,)17 b(the)75
1187 y(amoun)o(t)12 b(of)h(bu\013er)h(space)f(a)o(v)m(ailable)i(and)e(the)h
(bu\013er)f(allo)q(cation)h(p)q(olicy)h(ma)o(y)e(di\013er)g(from)g(implemen-)
75 1243 y(tation)19 b(to)f(implemen)o(tation.)33 b(In)20 b(general,)g(the)g
(programmer)d(can)j(mak)o(e)e(no)h(assumptions)h(on)f(the)75
1300 y(amoun)o(t)g(of)g(a)o(v)m(ailable)i(bu\013er)e(space,)i(and)e(ho)o(w)g
(this)h(space)g(is)g(allo)q(cated.)33 b(The)20 b(only)g(totally)f(safe)75
1356 y(assumption)d(is)h(that)e(an)h(arbitrary)g(subset)g(of)g(the)g(send)g
(op)q(erations)h(are)e(going)h(to)g(return)g(b)q(efore)g(a)75
1413 y(matc)o(hing)f(receiv)o(e)h(is)g(p)q(osted,)f(and)h(the)f(rest)g(will)h
(blo)q(c)o(k)g(un)o(til)h(a)e(matc)o(hing)g(receiv)o(e)h(is)g(p)q(osted.)166
1469 y(Noblo)q(c)o(king)21 b(message)e(passing)i(op)q(erations,)g(as)e
(describ)q(ed)j(in)f(Section)g(1.8,)e(can)h(b)q(e)h(used)g(to)75
1526 y(a)o(v)o(oid)f(the)g(need)h(for)f(bu\013ering)h(outgoing)f(messages.)34
b(This)21 b(prev)o(en)o(ts)f(deadlo)q(c)o(ks)h(due)g(to)f(lac)o(k)g(of)75
1582 y(bu\013er)14 b(space,)f(and)h(impro)o(v)o(es)g(p)q(erformance,)f(b)o(y)
h(allo)o(wing)g(o)o(v)o(erlap)g(of)f(computation)g(and)h(comm)o(uni-)75
1639 y(cation,)h(and)h(a)o(v)o(oiding)f(the)h(o)o(v)o(erheads)f(of)f(allo)q
(cating)j(bu\013ers)e(and)h(cop)o(ying)f(messages)g(in)o(to)g(bu\013ers.)75
1695 y(F)l(urthermore,)c(an)g(MPI)g(implemen)o(tation)i(will)g(pro)o(vide)f
(information)f(and)g(con)o(trol)g(on)h(the)f(amoun)o(t)f(of)75
1752 y(a)o(v)m(ailable)k(bu\013er)f(space)g(and)g(on)f(the)h(bu\013ering)g(p)
q(olicy)h(via)f(the)g(calls)g Fv(MPI)p 1378 1752 14 2 v 16
w(GET)p 1482 1752 V 17 w(BUFFER)p 1668 1752 V 17 w(P)l(ARAMS)p
FA(,)75 1808 y Fv(MPI)p 160 1808 V 16 w(GET)p 264 1808 V 17
w(BUFFER)p 450 1808 V 17 w(P)l(ARAMS)i FA(and)f Fv(MPI)p 830
1808 V 16 w(USER)p 958 1808 V 17 w(SPECIFIES)p 1189 1808 V
16 w(BUFFER)h FA(describ)q(ed)h(in)e(Chapter)g Fz(??)p FA(.)189
1897 y Fr(R)n(ationale.)189 1970 y FA(MPI)e(could)i(mandate)f(bu\013ering)g
(of)g(outgoing)f(messages)h(b)o(y)g(sp)q(ecifying)h(that)f(a)f(blo)q(c)o
(king)i(send)189 2026 y(op)q(eration)20 b(is)g(lo)q(cal:)30
b(its)20 b(completion)g(dep)q(ends)i(only)e(on)f(the)h(state)f(of)g(the)h(lo)
q(cal)h(executing)189 2083 y(pro)q(cess)16 b(and,)f(in)i(particular,)f(do)q
(es)g(not)g(dep)q(end)h(on)f(the)g(o)q(ccurrence)h(of)e(a)h(matc)o(hing)f
(receiv)o(e.)189 2139 y(The)h(implication)j(of)c(suc)o(h)i(de\014nition)h(is)
f(that)e(a)h(blo)q(c)o(king)i(send)f(op)q(eration)f(will)i(fail)f(if)g
(insuf-)189 2195 y(\014cien)o(t)j(bu\013er)g(space)f(is)h(a)o(v)m(ailable)i
(when)e(the)f(send)h(executes)g(and)g(no)f(matc)o(hing)h(receiv)o(e)g(is)189
2252 y(p)q(osted.)30 b(This)19 b(is)g(the)f(implicit)j(seman)o(tics)e(of)f
(blo)q(c)o(king)i(send)f(op)q(erations)f(on)h(systems)f(suc)o(h)189
2308 y(as)h(PVM)h([)p Fz(?)p FA(])34 b(and)20 b(P)l(ARMA)o(CS)g([)p
Fz(?)p FA(])34 b(where,)21 b(in)g(fact,)f(the)g(\014rst)g(condition)h(is)g
(su\016cien)o(t)g(to)189 2365 y(cause)16 b(failure.)22 b(W)l(e)16
b(ha)o(v)o(e)g(decided)h(on)f(a)g(more)f(lenien)o(t)i(de\014nition:)23
b(lac)o(k)16 b(of)f(bu\013er)h(space)g(will)189 2421 y(not)d(cause)i(a)f
(send)g(to)g(fail;)h(instead)f(the)g(send)h(op)q(eration)g(blo)q(c)o(ks)f(un)
o(til)i(a)d(matc)o(hing)h(receiv)o(e)h(or)189 2478 y(su\016cien)o(t)e
(bu\013er)f(space)h(b)q(ecame)g(a)o(v)m(ailable.)20 b Fz(This)15
b(allo)o(ws)f(more)g(programs)f(to)h(complete)189 2534 y(successfully)p
FA(.)26 b(On)18 b(the)f(do)o(wn)g(side,)i(erroneous)e(programs)f(will)j(fail)
f(in)h(a)e(harder)g(to)g(detect)189 2591 y(deadlo)q(c)o(k)e(mo)q(de,)f
(rather)g(than)g(b)o(y)g(a)g(simple)h(failure)h(of)d(a)h(send)h(op)q
(eration.)20 b(Our)14 b(design)h(p)q(oin)o(t)189 2647 y(matc)o(hes)f(the)i
(implicit)h(practice)f(of)f(comm)o(unication)g(libraries)i(suc)o(h)f(as)e
(Express)i([)p Fz(?)p FA(],)d(NX)i([)p Fz(?)p FA(],)189 2704
y(CMMD)f([)p Fz(?)p FA(])19 b(and)c(EUI)h([)p Fz(?)p FA(].)-32
46 y Fy(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 FA(12)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)189 49 y FA(Man)o(y)g(users)i(w)o(ould)f(lik)
o(e)i(to)e(ha)o(v)o(e)g(a)g(b)q(etter)g(guaran)o(tee)g(on)g(the)g
(bu\013ering)h(of)f(messages)g(sen)o(t)189 106 y(b)o(y)f(blo)q(c)o(king)j(op)
q(erations;)e(i.e.,)g(a)f(guaran)o(tee)g(that)g(some)h(programs)e(will)k
(succeed)f(on)f(all)g(im-)189 162 y(plemen)o(tations)g(of)f(MPI)g(ev)o(en)h
(if)g(they)g(are)f(written)g(so)h(as)f(require)h(message)f(bu\013ering.)24
b(This)189 219 y(issue)16 b(arises)f(whether)g(w)o(e)g(mandate)g(bu\013ering)
h(of)f(outgoing)g(messages)f(or)h(not.)189 292 y(The)e(function)g
Fv(MPI)p 540 292 14 2 v 16 w(GET)p 644 292 V 17 w(BUFFER)p
830 292 V 17 w(P)l(ARAMS)h FA(describ)q(ed)h(in)e(Chapter)g
Fz(??)19 b FA(partially)13 b(pro)o(vides)189 348 y(a)d(measure)h(of)f(a)o(v)m
(ailalb)q(e)j(bu\013er)e(space;)h(ho)o(w)o(ev)o(er,)f(some)f(of)h(the)g
(bu\013ering)g(parameters)f(ma)o(y)g(not)189 405 y(b)q(e)g(signi\014can)o(t)i
(on)e(some)f(MPI)i(implemen)o(tations.)19 b(The)10 b(function)h
Fv(MPI)p 1427 405 V 16 w(SUGGEST)p 1642 405 V 18 w(BUFFER)p
1829 405 V 17 w(P)l(ARAMS)189 461 y FA(pro)o(vides)k(user)h(con)o(trol)f(of)g
(bu\013ering.)20 b(Ho)o(w)o(ev)o(er,)14 b(MPI)i(implemen)o(tations)g(are)f
(not)g(mandated)189 517 y(to)f(act)h(on)g(the)g(user)h(suggestion.)189
591 y(W)l(e)i(ha)o(v)o(e)h(not)f(found)h(a)f(w)o(a)o(y)g(of)g(pro)o(viding)i
(b)q(etter)f(measure)f(or)g(more)h(con)o(trol)f(of)g(bu\013ering)189
647 y(without)i(o)o(v)o(ersp)q(ecifying)i(MPI)e(implemen)o(tation.)37
b(In)21 b(general,)g(bu\013er)g(space)g(for)e(outgoing)189
703 y(messages)f(ma)o(y)h(b)q(e)h(allo)q(cated)g(at)f(the)g(sender)h(side,)h
(the)e(receiv)o(er)h(side,)h(or)e(b)q(oth.)32 b(A)19 b(bu\013er)189
760 y(ma)o(y)13 b(b)q(e)i(dedicated)g(to)f(a)g(pair)g(of)g(comm)o(unicating)h
(pro)q(cesses,)f(or)g(shared)g(b)o(y)g(all)h(outgoing)f(\(or)189
816 y(all)g(incoming\))h(comm)o(unication)g(to)e(a)h(pro)q(cess,)g(or)f
(shared)h(b)o(y)g(all)h(outgoing)e(\(or)g(all)i(incoming\))189
873 y(comm)o(unication)f(to)g(a)g(pro)q(cessor.)19 b(Bu\013ers)14
b(ma)o(y)f(b)q(e)i(allo)q(cated)g(in)g(sp)q(ecial)g(device)h(memory)l(,)d(or)
189 929 y(in)k(real)h(memory)e(\(user)h(or)f(k)o(ernel\),)i(or)e(in)i
(virtual)f(memory)g(\(user)f(or)h(k)o(ernel\).)25 b(A)17 b(de\014nition)189
986 y(that)10 b(precludes)i(some)f(of)f(these)i(c)o(hoices)f(\(as)f(w)o(ell)i
(as)f(more)f(designs)i(w)o(e)f(ha)o(v)o(e)f(not)h(y)o(et)f(imagined\))189
1042 y(will)16 b(signi\014can)o(tly)h(hamp)q(er)f(p)q(erformance)f(on)g(some)
g(systems.)20 b(\()p Fr(End)15 b(of)i(r)n(ationale.)p FA(\))75
1183 y FB(1.5)59 b(Data)20 b(T)-5 b(yp)r(e)19 b(Matching)75
1285 y FA(One)d(can)f(think)h(of)f(message)g(transmission)g(as)g(consisting)h
(of)f(three)g(phases:)131 1368 y(1.)22 b(Data)14 b(is)h(pulled)j(out)d(of)f
(the)i(send)f(bu\013er)h(and)f(a)g(message)g(is)g(assem)o(bled)131
1458 y(2.)22 b(A)15 b(message)g(is)g(transferred)g(from)f(sender)i(to)f
(receiv)o(er)131 1548 y(3.)22 b(Data)14 b(is)h(pulled)j(from)c(the)h
(incoming)i(message)e(and)g(disassem)o(bled)i(in)o(to)e(the)g(receiv)o(e)h
(bu\013er)166 1631 y(T)o(yp)q(e)k(matc)o(hing)f(has)h(to)e(b)q(e)j(observ)o
(ed)e(at)g(eac)o(h)g(of)h(these)f(three)h(phases:)29 b(The)19
b(t)o(yp)q(e)h(of)f(eac)o(h)75 1687 y(v)m(ariable)i(in)f(the)g(sender)g
(bu\013er)g(has)g(to)f(matc)o(h)g(the)g(t)o(yp)q(e)h(sp)q(eci\014ed)i(for)d
(that)g(en)o(try)g(b)o(y)h(the)f(send)75 1744 y(op)q(eration;)d(the)f(t)o(yp)
q(e)h(sp)q(eci\014ed)i(b)o(y)e(the)f(send)i(op)q(eration)e(has)h(to)f(matc)o
(h)g(the)h(t)o(yp)q(e)f(sp)q(eci\014ed)j(b)o(y)e(the)75 1800
y(receiv)o(e)g(op)q(eration;)e(and)h(the)g(t)o(yp)q(e)f(of)h(eac)o(h)f(v)m
(ariable)i(in)g(the)e(receiv)o(e)i(bu\013er)f(has)f(to)g(matc)o(h)g(the)h(t)o
(yp)q(e)75 1857 y(sp)q(eci\014ed)f(for)e(that)g(en)o(try)g(b)o(y)g(the)g
(receiv)o(e)h(op)q(eration.)20 b(A)12 b(program)f(that)h(fails)h(to)e(observ)
o(e)h(these)h(three)75 1913 y(rules)j(is)g(erroneous.)166 1970
y(T)l(o)f(de\014ne)i(t)o(yp)q(e)f(matc)o(hing)g(more)f(precisely)l(,)j(w)o(e)
d(need)i(to)e(deal)h(with)g(t)o(w)o(o)f(issues:)22 b(matc)o(hing)15
b(of)75 2026 y(t)o(yp)q(es)e(of)g(the)h(host)f(language)g(with)h(t)o(yp)q(es)
g(sp)q(eci\014ed)h(in)f(comm)o(unication)h(op)q(erations;)e(and)h(matc)o
(hing)75 2083 y(of)h(t)o(yp)q(es)g(at)g(sender)g(and)h(receiv)o(er.)166
2139 y(A)h(t)o(yp)q(e)f(sp)q(eci\014ed)j(for)d(an)h(en)o(try)f(b)o(y)h(a)f
(send)h(op)q(eration)g(matc)o(hes)f(the)h(t)o(yp)q(e)g(sp)q(eci\014ed)i(for)d
(that)75 2195 y(en)o(try)11 b(b)o(y)h(a)f(receiv)o(e)h(op)q(eration)g(if)g(b)
q(oth)f(op)q(erations)h(use)g(iden)o(tical)h(names:)36 b Fv(MPI)p
1500 2195 V 16 w(INTEGER)12 b FA(matc)o(hes)75 2252 y Fv(MPI)p
160 2252 V 16 w(INTEGER)p FA(,)j Fv(MPI)p 475 2252 V 16 w(REAL)h
FA(matc)o(hes)30 b Fv(MPI)p 891 2252 V 15 w(REAL)p FA(,)16
b(and)f(so)g(on.)166 2308 y(The)k(t)o(yp)q(e)g(of)f(a)g(v)m(ariable)i(in)g(a)
e(host)h(program)e(matc)o(hes)h(the)h(t)o(yp)q(e)g(sp)q(eci\014ed)i(in)e(the)
g(comm)o(u-)75 2365 y(nication)g(op)q(eration)g(if)f(the)h(datat)o(yp)q(e)f
(name)g(used)h(b)o(y)f(that)f(op)q(eration)i(corresp)q(onds)f(to)g(the)g
(basic)75 2421 y(t)o(yp)q(e)i(of)g(the)g(host)g(program)f(v)m(ariable:)31
b(an)20 b(en)o(try)f(with)i(t)o(yp)q(e)f(name)40 b Fv(MPI)p
1449 2421 V 16 w(INTEGER)21 b FA(matc)o(hes)e(a)75 2478 y(F)l(ortran)c(v)m
(ariable)j(of)f(t)o(yp)q(e)f Ft(INTEGER)p FA(,)g(an)g(en)o(try)g(with)h(t)o
(yp)q(e)g(name)g Fv(MPI)p 1368 2478 V 16 w(REAL)g FA(matc)o(hes)f(a)g(F)l
(ortran)75 2534 y(v)m(ariable)j(of)e(t)o(yp)q(e)g Ft(REAL)p
FA(,)f(and)i(so)f(on.)26 b(There)18 b(is)f(one)h(exception)g(to)f(this)h
(last)f(rule:)25 b(An)18 b(en)o(try)f(with)75 2591 y(t)o(yp)q(e)h(name)37
b Fv(MPI)p 408 2591 V 15 w(BYTE)19 b FA(can)f(b)q(e)h(used)g(to)e(matc)o(h)h
(an)o(y)g(b)o(yte)g(of)g(storage)e(\(on)i(a)g(b)o(yte-addressable)75
2647 y(mac)o(hine\),)d(irresp)q(ectiv)o(e)i(of)d(the)h(datat)o(yp)q(e)g(of)f
(the)h(v)m(ariable)i(that)d(con)o(tains)h(this)g(b)o(yte.)20
b(The)15 b(v)m(alue)h(of)75 2704 y(the)f(message)g(en)o(try)g(will)i(b)q(e)f
(the)f(binary)h(v)m(alue)g(of)f(the)g(corresp)q(onding)h(b)o(yte)f(in)h
(memory)l(.)1967 46 y Fy(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 Fw(1.5.)34 b(D)o(A)l(T)l(A)15 b(TYPE)g(MA)l(TCHING)1105
b FA(13)166 49 y(W)l(e)15 b(th)o(us)g(ha)o(v)o(e)g(t)o(w)o(o)f(cases:)143
144 y Fl(\017)23 b FA(Comm)o(unication)11 b(of)f(t)o(yp)q(ed)i(v)m(alues)g
(\(e.g.,)e(with)h(datat)o(yp)q(e)g(di\013eren)o(t)g(from)21
b Fv(MPI)p 1586 144 14 2 v 16 w(BYTE)p FA(\),)11 b(where)189
200 y(the)k(datat)o(yp)q(es)f(of)g(the)h(corresp)q(onding)h(en)o(tries)f(in)h
(the)f(sender)g(program,)e(in)j(the)f(send)g(call,)h(in)189
257 y(the)f(receiv)o(e)h(call)g(and)g(in)g(the)f(receiv)o(er)h(program)e
(should)i(all)g(matc)o(h.)143 352 y Fl(\017)23 b FA(Comm)o(unication)16
b(of)g(un)o(t)o(yp)q(ed)h(v)m(alues)g(\(e.g.,)e(of)g(datat)o(yp)q(e)h
Fv(MPI)p 1330 352 V 16 w(BYTE)p FA(\),)g(where)g(b)q(oth)g(sender)189
408 y(and)g(receiv)o(er)h(use)f(the)g(datat)o(yp)q(e)g Fv(MPI)p
881 408 V 15 w(BYTE)p FA(.)h(In)f(this)h(case,)f(there)g(are)g(no)f
(requiremen)o(ts)i(on)189 464 y(the)d(t)o(yp)q(es)h(of)f(the)g(corresp)q
(onding)h(en)o(tries)g(in)h(the)e(sender)h(and)g(the)f(receiv)o(er)h
(programs,)e(nor)h(is)189 521 y(it)h(required)h(that)f(they)g(b)q(e)h(the)f
(same.)166 616 y(The)g(follo)o(wing)h(examples)g(illustrate)h(these)e(t)o(w)o
(o)f(cases.)166 672 y(First)h(program:)75 767 y Ft(CALL)23
b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 824 y(IF\(rank.EQ.0\))123
880 y(THEN)170 936 y(CALL)h(MPI_SEND\(a\(1\),)e(10,)h(MPI_REAL,)g(1,)g(tag,)h
(comm,)f(ierr\))123 993 y(ELSE)170 1049 y(CALL)h(MPI_RECV\(a\(1\),)e(15,)h
(MPI_REAL,)g(0,)g(tag,)h(comm,)f(status,)g(ierr\))75 1106 y(END)g(IF)166
1201 y FA(This)c(co)q(de)f(is)h(correct)e(if)i(b)q(oth)f(sender)h(and)f
(receiv)o(er)h(programs)d(ha)o(v)o(e)i(allo)q(cated)h(consecutiv)o(e)75
1257 y(storage)14 b(for)h(ten)g(real)g(n)o(um)o(b)q(ers,)g(starting)g(from)f
Fv(a\(1\))p FA(.)166 1314 y(Second)i(program:)75 1409 y Ft(CALL)23
b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 1465 y(IF\(rank.EQ.0\))123
1521 y(THEN)170 1578 y(CALL)h(MPI_SEND\(a\(1\),)e(10,)h(MPI_REAL,)g(1,)g
(tag,)h(comm,)f(ierr\))123 1634 y(ELSE)170 1691 y(CALL)h(MPI_RECV\(a\(1\),)e
(40,)h(MPI_BYTE,)g(0,)g(tag,)h(comm,)f(status,)g(ierr\))75
1747 y(END)g(IF)166 1842 y FA(This)d(co)q(de)g(is)f(erroneous,)h(since)g
(sender)g(and)g(receiv)o(er)g(do)f(not)f(pro)o(vide)i(matc)o(hing)f(datat)o
(yp)q(e)75 1898 y(argumen)o(ts.)166 1955 y(Third)d(program:)75
2050 y Ft(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75
2106 y(IF\(rank.EQ.0\))123 2163 y(THEN)170 2219 y(CALL)h(MPI_SEND\(a\(1\),)e
(40,)h(MPI_BYTE,)g(1,)g(tag,)h(comm,)f(ierr\))123 2276 y(ELSE)170
2332 y(CALL)h(MPI_RECV\(a\(1\),)e(60,)h(MPI_BYTE,)g(0,)g(tag,)h(comm,)f
(status,)g(ierr\))75 2389 y(END)g(IF)166 2483 y FA(This)16
b(co)q(de)f(is)h(correct,)f(irresp)q(ectiv)o(e)h(of)f(the)g(t)o(yp)q(e)h(of)e
Fv(a\(1\))g FA(and)i(follo)o(wing)g(v)m(ariables)g(in)g(store.)189
2591 y Fr(A)n(dvic)n(e)11 b(to)h(users.)56 b FA(If)11 b(a)g(bu\013er)f(of)h
(t)o(yp)q(e)f Fo(MPI)p 974 2591 13 2 v 15 w(BYTE)g FA(is)h(passed)g(as)f(an)h
(argumen)o(t)f(to)g Fv(MPI)p 1732 2591 14 2 v 16 w(SEND)p FA(,)69
b Fk(\()189 2647 y FA(then)14 b(MPI)g(will)h(send)g(the)f(data)f(stored)g(at)
g(con)o(tiguous)h(lo)q(cations,)h(starting)e(from)g(the)h(address)189
2704 y(indicated)22 b(b)o(y)e(the)h Fv(buf)g FA(argumen)o(t.)35
b(This)21 b(ma)o(y)f(ha)o(v)o(e)g(unexp)q(ected)i(results)f(when)g(the)g
(data)-32 46 y Fy(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 FA(14)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)189 49 y FA(la)o(y)o(out)c(is)i(not)e(as)h(a)
f(casual)i(user)f(w)o(ould)g(exp)q(ect)h(it)f(to)g(b)q(e:)19
b(F)l(or)12 b(example,)i(some)f(compilers)h(pass)189 106 y(a)e(F)l(ortran)f
Fo(CHARA)o(CTER)g FA(argumen)o(t)h(as)g(a)g(structure)g(that)g(con)o(tains)g
(the)h(c)o(haracter)f(length)h(and)189 162 y(a)k(p)q(oin)o(ter)i(to)e(the)h
(actual)g(string.)29 b(In)18 b(suc)o(h)h(en)o(vironmen)o(t,)f(sending)h(or)f
(receiving)h(a)f(F)l(ortran)189 219 y Fo(CHARA)o(CTER)f FA(v)m(ariable)j
(using)g(the)f Fo(MPI)p 907 219 13 2 v 15 w(BYTE)f FA(will)j(not)e(ha)o(v)o
(e)f(the)i(an)o(ticipated)g(result.)32 b(F)l(or)189 275 y(this)15
b(reason,)f(the)h(user)g(is)g(advised)h(to)e(use)h(t)o(yp)q(ed)g(comm)o
(unication)h(whenev)o(er)f(p)q(ossible.)22 b(\()p Fr(End)189
332 y(of)16 b(advic)n(e)g(to)h(users.)p FA(\))75 454 y Fs(1.5.1)49
b(T)l(yp)q(e)17 b Fo(MPI)p 417 454 V 14 w(CHARA)o(CTER)75 541
y FA(The)23 b(t)o(yp)q(e)11 b Fo(MPI)p 351 541 V 14 w(CHARA)o(CTER)f
FA(matc)o(hes)h(one)g(c)o(haracter)g(of)f(a)h(F)l(ortran)f(v)m(ariable)j(of)e
(t)o(yp)q(e)g Fo(CHARA)o(CTER)p FA(.)-1905 b Fk(\))75 597 y
FA(F)l(ortran)12 b(v)m(ariables)j(of)e(t)o(yp)q(e)h Fo(CHARA)o(CTER)e
FA(or)h(substrings)h(are)f(transferred)g(as)g(if)h(they)g(w)o(ere)f(arra)o
(ys)f(of)75 654 y(c)o(haracters.)18 b(The)c Fv(buf)f FA(argumen)o(t)g(should)
h(b)q(e)f(a)g(reference)h(to)e(a)h(string)g(or)f(substring)i(that)e(starts)g
(with)75 710 y(the)j(\014rst)g(c)o(haracter)g(of)f(the)i(comm)o(unication)g
(bu\013er.)j(This)d(is)g(illustrated)g(in)g(the)g(example)g(b)q(elo)o(w.)75
817 y Ft(CHARACTER*10)22 b(a)75 874 y(CHARACTER*10)g(b)75 987
y(CALL)h(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 1043 y(IF\(rank.EQ.0\))123
1100 y(THEN)170 1156 y(CALL)h(MPI_SEND\(a,)e(5,)i(MPI_CHARACTER,)e(1,)h(tag,)
h(comm,)f(ierr\))123 1213 y(ELSE)170 1269 y(CALL)h(MPI_RECV\(b\(6:10\),)d(5,)
j(MPI_CHARACTER,)e(0,)h(tag,)h(comm,)f(status,)g(ierr\))75
1326 y(END)g(IF)166 1433 y FA(The)14 b(last)h(\014v)o(e)f(c)o(haracters)g(of)
f(string)i Fo(b)f FA(at)g(pro)q(cess)g(1)g(are)g(replaced)i(b)o(y)e(the)g
(\014rst)g(\014v)o(e)h(c)o(haracters)75 1489 y(of)g(string)g
Fo(a)g FA(at)g(pro)q(cess)g(0.)166 1629 y Fq(Implemen)o(tati)o(on)10
b(note:)33 b Fu(Some)10 b(compilers)h(pass)h(F)m(ortran)f Fo(CHARA)o(CTER)f
Fu(argumen)o(ts)h(as)h(a)f(structure)75 1685 y(with)16 b(a)f(\014eld)h
(length)g(and)g(a)g(p)q(oin)o(ter)g(to)g(the)g(actual)g(string.)24
b(In)16 b(suc)o(h)h(en)o(vironmen)o(t,)e(the)i(MPI)f(call)f(need)i(to)75
1741 y(dereference)g(the)d(p)q(oin)o(ter)g(in)g(order)g(to)g(reac)o(h)h(the)f
(string.)75 1945 y Fv(Alternative)i(De\014nition)75 2032 y
FA(The)h(t)o(yp)q(e)g Fo(MPI)p 351 2032 V 14 w(CHARA)o(CTER)e
FA(matc)o(hes)h(a)h(F)l(ortran)f(v)m(ariable)i(of)e(t)o(yp)q(e)h
Fo(CHARA)o(CTER)e FA(or)h(a)h(substring)75 2088 y(of)e(arbitrary)f(length.)75
2195 y Ft(CHARACTER*10)22 b(a)75 2252 y(CHARACTER*10)g(b)75
2365 y(CALL)h(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 2421
y(IF\(rank.EQ.0\))123 2478 y(THEN)170 2534 y(CALL)h(MPI_SEND\(a\(1:5\),)d(1,)
j(MPI_CHARACTER,)e(1,)i(tag,)f(comm,)g(ierr\))123 2591 y(ELSE)170
2647 y(CALL)h(MPI_RECV\(b\(6:10\),)d(1,)j(MPI_CHARACTER,)e(0,)h(tag,)h(comm,)
f(status,)g(ierr\))75 2704 y(END)g(IF)1967 46 y Fy(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 Fw(1.6.)34 b(D)o(A)l(T)l(A)15 b(CONVERSION)1197
b FA(15)166 49 y(The)14 b(last)h(\014v)o(e)f(c)o(haracters)g(of)f(string)i
Fo(b)f FA(at)g(pro)q(cess)g(1)g(are)g(replaced)i(b)o(y)e(the)g(\014rst)g
(\014v)o(e)h(c)o(haracters)75 106 y(of)g(string)g Fo(a)g FA(at)g(pro)q(cess)g
(0.)166 163 y(Mismatc)o(hes)f(b)q(et)o(w)o(een)g(the)g(length)g(of)f(an)h
(incoming)h(c)o(haracter)e(and)h(the)g(length)h(of)e(a)h(c)o(haracter)75
219 y(in)23 b(the)g(receiv)o(e)g(bu\013er)f(are)g(handled)i(as)e(in)h(F)l
(ortran)f(c)o(haracter)f(assignmen)o(ts:)34 b(if)23 b(the)g(incoming)75
275 y(c)o(haracter)16 b(is)h(longer)f(than)h(the)f(target)f(c)o(haracter)h
(then)h(it)f(is)h(truncated;)g(if)g(it)f(is)h(shorter)f(then)h(it)f(is)75
332 y(padded)g(with)g(blanks.)166 465 y Fq(Discussion:)33 b
Fu(The)14 b(later)g(de\014nition)f(is)g(more)g(elegan)o(t)g(than)h(the)g
(former)e(one.)19 b(Unfortunately)m(,)12 b(it)h(do)q(es)75
515 y(not)h(sit)g(w)o(ell)f(with)g(the)i(use)g(of)e(deriv)o(ed)h(datat)o(yp)q
(es.)166 565 y(Consider)c(a)f(system)g(where)i(the)f(length)g(of)f(a)g(c)o
(haracter)i(argumen)o(t)d(is)h(passed)i(as)f(an)f(additional)f(argumen)o(t.)
75 615 y(Assume)16 b(that)h(the)g(program)e(pic)o(ks)h(the)h(address)h(of)e
(a)g(string)g(with)g(a)g(call)g(to)g Fo(MPI)p 1448 615 13 2
v 14 w(ADRRESS)p Fu(,)f(next)i(builds)75 664 y(the)c(deriv)o(ed)g(datat)o(yp)
q(e)g(for)f(a)g(bu\013er)h(that)g(includes)g(the)g(string)f(with)g(a)h(call)e
(to)i Fo(MPI)p 1435 664 V 14 w(STRUCT)p Fu(.)e(The)i(length)g(of)75
714 y(the)i(string)g(w)o(as)g(passed)h(as)f(an)g(extra)g(argumen)o(t)f(to)g
(the)i(function)e Fo(MPI)p 1250 714 V 15 w(ADDRESS)p Fu(,)f(whic)o(h)i
(ignored)g(it.)21 b(The)75 764 y(information)8 b(that)j(a)g(particular)g(v)n
(ariable)f(is)h(of)g(c)o(haracter)h(t)o(yp)q(e)g(is)f(passed)h(as)f(an)g
(argumen)o(t)f(to)h Fo(MPI)p 1690 764 V 14 w(STRUCT)p Fu(,)75
814 y(whic)o(h)g(has)g(no)g(w)o(a)o(y)f(to)g(reco)o(v)o(er)j(the)e
(information)d(on)j(the)g(c)o(haracter)i(length)d(\(unless)i(one)f(w)o(an)o
(ts)g Fo(MPI)p 1701 814 V 15 w(STRUCT)75 864 y Fu(to)k(access)i(a)e(sym)o(b)q
(ol)f(table\).)22 b(Th)o(us,)15 b(w)o(e)h(w)o(ould)e(need)i
Fo(MPI)p 1049 864 V 15 w(ADDRESS)e Fu(to)h(alw)o(a)o(ys)g(c)o(hec)o(k)h
(whether)g(an)f(extra)75 914 y(argumen)o(t)e(\(c)o(haracter)i(length\))f(w)o
(as)g(passed)h(and,)e(if)g(so,)h(sa)o(v)o(e)g(the)g(v)n(alue)f(of)h(this)g
(extra)g(argumen)o(t.)166 964 y Fo(MPI)p 243 964 V 14 w(SEND)g
Fu(also)f(needs)i(sp)q(ecial)f(co)q(de)g(to)g(handle)f(the)i(case)f(where)h
Fo(t)o(yp)q(e)g(=)f(MPI)p 1476 964 V 14 w(CHARA)o(CTER)p Fu(.)d(In)j(this)75
1014 y(case,)e(the)f(v)n(alue)f(of)g(the)h(extra)g(length)f(argumen)o(t)f
(needs)j(b)q(e)f(used)h(to)e(\014nd)h(the)g(length)f(of)g(the)h(outgoing)f
(message.)166 1070 y(The)18 b(basic)g(problem)e(is)i(that)f(w)o(e)h(assumed)f
(that)h(a)g(deriv)o(ed)g(datat)o(yp)q(e)g(is)f(a)g(static)h(pattern)h(\(a)e
(list)h(of)75 1127 y(displacemen)o(ts)11 b(and)h(lengths\))g(that,)g
(together)g(with)g(a)f(base)h(address,)h(iden)o(ti\014es)f(the)h(set)f(of)f
(memory)e(lo)q(cations)75 1183 y(that)i(form)f(the)i(comm)o(unicati)o(on)d
(bu\013er.)18 b(With)10 b(the)i(second)h(de\014nition)d(for)h
Fo(MPI)p 1372 1183 V 15 w(CHARA)o(CTER)p Fu(,)e(w)o(e)i(no)o(w)g(ha)o(v)o(e)
75 1240 y(a)17 b(dynamic)f(deriv)o(ed)i(datat)o(yp)q(e)g(that)f(assumes)g(v)n
(alue)g(\(length\))h(only)e(when)i(b)q(ound)g(to)f(a)g(sp)q(eci\014c)i(lo)q
(cation.)75 1296 y(Mo)o(ving)14 b(to)o(w)o(ard)h(suc)o(h)g(dynamic,)f
(parameterized)h(datat)o(yp)q(es)h(is)f(tempting:)k(the)c(need)h(for)f(them)f
(is)h(lik)o(ely)f(to)75 1353 y(arise)h(in)f(other)i(places)f(in)g(F)m(ortran)
f(90)g(or)h(C++,)g(whenev)o(er)h(language)e(t)o(yping)g(is)h(dynamic,)e(and)i
(ob)r(jects)h(are)75 1409 y(self-t)o(yp)q(ed.)28 b(\(An)17
b(example:)23 b(an)17 b(arra)o(y)g(section)h(in)e(F)m(ortran)h(90,)g(with)g
(a)f(compiler)g(that)h(uses)h(dop)q(e)g(v)o(ectors)75 1466
y(to)d(main)o(tain)d(the)k(dynamic)d(information)f(on)j(data)g(la)o(y)o(out.)
20 b(The)15 b(righ)o(t)g(buzzw)o(ord)h(is)e(\\p)q(olymorphic".\))20
b(The)75 1522 y(question)15 b(is)f(whether)i(w)o(e)e(w)o(an)o(t)g(to)h
(handle)f(this)h(at)f(the)h(curren)o(t)h(MPI)f(la)o(y)o(er,)e(or)i(as)f(a)g
(metastructure)i(on)e(top)75 1578 y(of)f(curren)o(t)j(MPI.)75
1807 y FB(1.6)59 b(Data)20 b(conversion)75 1909 y FA(One)c(of)f(the)g(goals)g
(of)g(MPI)g(is)h(to)e(supp)q(ort)i(parallel)g(computations)f(across)g
(heterogeneous)g(en)o(viron-)75 1965 y(men)o(ts.)20 b(Comm)o(unication)15
b(in)h(a)f(heterogeneous)g(en)o(vironmen)o(t)h(ma)o(y)e(require)i(data)f(con)
o(v)o(ersions.)166 2022 y(W)l(e)g(use)h(the)f(follo)o(wing)h(terminology:)75
2118 y Fz(t)o(yp)q(e)h(con)o(v)o(ersion)22 b FA(c)o(hanges)16
b(the)h(datat)o(yp)q(e)f(of)g(a)g(v)m(alue,)h(e.g.)23 b(b)o(y)17
b(rounding)g(a)f Fv(REAL)h FA(to)f(an)g Fv(INTE-)189 2174 y(GER)p
FA(.)75 2269 y Fz(represen)o(tation)h(con)o(v)o(ersion)22 b
FA(c)o(hanges)16 b(the)h(binary)g(represen)o(tation)f(of)g(a)g(v)m(alue,)h
(e.g.)23 b(from)16 b(Hex)189 2326 y(\015oating)f(p)q(oin)o(t)g(to)g(IEEE)g
(\015oating)h(p)q(oin)o(t.)166 2421 y(The)d(t)o(yp)q(e)g(matc)o(hing)g(rules)
g(imply)h(that)e(MPI)h(comm)o(unication)h(nev)o(er)f(en)o(tails)g(t)o(yp)q(e)
g(con)o(v)o(ersion.)75 2478 y(On)20 b(the)f(other)f(hand,)i(MPI)f(requires)h
(that)e(a)h(represen)o(tation)g(con)o(v)o(ersion)g(b)q(e)h(p)q(erformed)f
(when)g(a)75 2534 y(t)o(yp)q(ed)i(v)m(alue)h(is)f(transferred)f(across)g(en)o
(vironmen)o(ts)h(that)f(use)h(di\013eren)o(t)f(represen)o(tations)h(for)f
(the)75 2591 y(datat)o(yp)q(e)g(of)g(this)h(v)m(alue.)38 b(MPI)20
b(do)q(es)h(not)f(sp)q(ecify)i(rules)g(for)d(represen)o(tation)i(con)o(v)o
(ersion.)36 b(Suc)o(h)75 2647 y(con)o(v)o(ersion)21 b(is)g(exp)q(ected)i(to)d
(preserv)o(e)h(in)o(teger,)h(logical)g(or)e(c)o(haracter)h(v)m(alues,)i(and)e
(to)f(con)o(v)o(ert)g(a)75 2704 y(\015oating)15 b(p)q(oin)o(t)h(v)m(alue)g
(to)f(the)g(nearest)g(v)m(alue)h(that)f(can)g(represen)o(ted)h(on)f(the)g
(target)f(system.)-32 46 y Fy(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 FA(16)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y FA(Ov)o(er\015o)o(w)10
b(and)h(under\015o)o(w)g(exceptions)h(ma)o(y)e(o)q(ccur)i(during)f
(\015oating)g(p)q(oin)o(t)g(con)o(v)o(ersions;)h(con)o(v)o(er-)75
106 y(sion)i(of)e(in)o(tegers)i(or)e(c)o(haracters)h(ma)o(y)f(also)h(lead)h
(to)f(exceptions)h(when)g(a)e(v)m(alue)j(that)d(can)h(represen)o(ted)75
162 y(in)18 b(one)g(system)f(cannot)g(b)q(e)h(represen)o(ted)g(in)h(the)e
(other)g(system.)26 b(An)18 b(exception)h(o)q(ccurring)f(during)75
219 y(represen)o(tation)f(con)o(v)o(ersion)f(results)h(in)h(a)e(failure)i(of)
e(the)g(comm)o(unication;)i(an)e(error)g(o)q(ccurs)h(either)75
275 y(in)f(the)f(send)h(op)q(eration,)f(or)g(the)g(receiv)o(e)h(op)q
(eration,)f(or)g(b)q(oth.)166 337 y(If)22 b(a)f(v)m(alue)i(sen)o(t)e(in)h(a)f
(message)g(is)h(un)o(t)o(yp)q(ed)h(\(i.e.,)f(of)f(t)o(yp)q(e)h
Fv(MPI)p 1370 337 14 2 v 15 w(BYTE)p FA(\),)g(then)g(the)f(binary)75
393 y(represen)o(tation)15 b(of)f(the)h(b)o(yte)g(stored)f(at)g(the)h(receiv)
o(er)h(is)f(iden)o(tical)i(to)d(the)h(binary)h(represen)o(tation)e(of)75
450 y(the)f(b)o(yte)g(loaded)h(at)e(the)h(sender.)20 b(This)14
b(holds)f(true,)g(whether)g(sender)h(and)f(receiv)o(er)h(run)f(in)h(the)f
(same)75 506 y(or)i(in)h(distinct)g(en)o(vironmen)o(ts;)f(no)g(represen)o
(tation)h(con)o(v)o(ersion)f(is)h(required.)166 568 y(Note)d(that)g(no)g(con)
o(v)o(ersion)h(ev)o(er)f(o)q(ccurs)h(when)g(an)f(MPI)g(program)g(executes)h
(in)g(a)f(homogeneous)75 624 y(system,)i(where)h(all)g(pro)q(cesses)g(run)g
(in)g(the)g(same)f(en)o(vironmen)o(t.)22 b(Also)16 b(note)f(the)h(di\013eren)
o(t)f(b)q(eha)o(vior)75 681 y(of)e Fv(MPI)p 210 681 V 15 w(BYTE)h
FA(and)f(of)g Fv(MPI)p 575 681 V 15 w(CHAR)p FA(.)h(A)f(bu\013er)g
(descriptor)g(en)o(try)g(with)g(datat)o(yp)q(e)g(of)f Fv(MPI)p
1660 681 V 16 w(CHAR)i FA(can)75 737 y(only)f(matc)o(h)f(a)g(C)g(v)m(ariable)
i(of)e(t)o(yp)q(e)h Ft(CHAR)p FA(;)e(and)i(represen)o(tation)g(con)o(v)o
(ersion)f(ma)o(y)g(o)q(ccur)h(when)g(v)m(alues)75 793 y(of)g(t)o(yp)q(e)h
Fv(MPI)p 311 793 V 15 w(CHAR)h FA(are)e(transferred.,)g(e.g.,)f(from)h(an)g
(EBCDIC)h(enco)q(ding)h(to)e(an)g(ASCI)q(I)i(enco)q(ding.)166
855 y(Consider)h(the)f(previous)h(three)f(examples)h(on)f(page)g(13.)166
917 y(The)c(\014rst)f(program)f(is)i(correct,)g(assuming)g(b)q(oth)f(sender)i
(and)e(receiv)o(er)i(declared)f(ten)g(consecutiv)o(e)75 973
y(real)20 b(v)m(ariables)h(in)g(storage)e(starting)g(at)g Fv(a\(1\))p
FA(.)33 b(If)20 b(the)g(sender)g(and)g(receiv)o(er)h(execute)f(in)h
(di\013eren)o(t)75 1030 y(en)o(vironmen)o(ts,)12 b(then)f(the)g(ten)f(real)i
(v)m(alues)f(that)g(are)f(fetc)o(hed)h(from)f(the)h(send)h(bu\013er)e(will)j
(b)q(e)e(con)o(v)o(erted)75 1086 y(to)g(the)h(represen)o(tation)f(for)g
(reals)h(on)f(the)h(receiv)o(er)g(site)g(b)q(efore)g(they)g(are)f(stored)g
(in)h(the)g(receiv)o(e)g(bu\013er.)75 1142 y(While)19 b(the)e(n)o(um)o(b)q
(er)h(of)f(real)g(elemen)o(ts)h(fetc)o(hed)g(from)f(the)g(send)h(bu\013er)f
(equal)i(the)e(n)o(um)o(b)q(er)h(of)f(real)75 1199 y(elemen)o(ts)d(stored)e
(in)i(the)f(receiv)o(e)h(bu\013er,)f(the)g(n)o(um)o(b)q(er)g(of)g(b)o(ytes)g
(stored)f(need)i(not)f(equal)h(the)f(n)o(um)o(b)q(er)75 1255
y(of)f(b)o(ytes)g(loaded:)19 b(e.g.)g(the)12 b(sender)h(ma)o(y)e(use)i(a)f
(four)g(b)o(yte)g(represen)o(tation)h(and)f(the)g(receiv)o(er)i(an)e(eigh)o
(t)75 1312 y(b)o(yte)17 b(represen)o(tation)h(for)f(reals.)27
b(If)18 b(the)g(send)g(or)f(receiv)o(e)h(bu\013er)g(do)f(not)h(con)o(tain)f
(ten)h(consecutiv)o(e)75 1368 y(real)e(v)m(ariables,)g(then)f(the)g(program)g
(is)g(erroneous,)g(and)g(its)h(b)q(eha)o(vior)f(is)h(unde\014ned.)166
1430 y(The)f(second)h(program)e(is)i(erroneous,)f(and)g(its)g(b)q(eha)o(vior)
h(is)g(unde\014ned.)166 1492 y(The)e(third)g(program)e(is)i(correct.)19
b(The)13 b(exact)g(same)g(sequence)i(of)e(fort)o(y)f(b)o(ytes)h(that)g(w)o
(ere)g(loaded)75 1548 y(from)18 b(the)h(send)h(bu\013er)f(will)i(b)q(e)e
(stored)g(in)h(the)f(receiv)o(e)h(bu\013er,)f(ev)o(en)h(if)f(sender)h(and)f
(receiv)o(er)h(run)75 1604 y(in)e(a)g(di\013eren)o(t)f(en)o(vironmen)o(t.)28
b(The)18 b(message)f(sen)o(t)g(has)h(exactly)f(the)h(same)f(length)i(\(in)f
(b)o(ytes\))f(and)75 1661 y(the)f(same)f(binary)h(represen)o(tation)f(as)g
(the)h(message)f(receiv)o(ed.)22 b(If)16 b(the)f(v)m(ariables)i(in)f(the)g
(send)g(bu\013er)75 1717 y(are)f(of)h(di\013eren)o(t)g(t)o(yp)q(es)g(from)f
(the)h(v)m(ariables)h(in)f(the)g(receiv)o(e)h(bu\013er,)e(or)h(they)g(are)f
(of)h(the)f(same)h(t)o(yp)q(e)75 1774 y(but)h(di\013eren)o(t)g(data)g
(represen)o(tations)f(are)h(used,)h(then)f(the)g(bits)h(stored)e(in)i(the)f
(receiv)o(e)h(bu\013er)f(ma)o(y)75 1830 y(enco)q(de)f(v)m(alues)h(that)d(are)
h(di\013eren)o(t)g(from)g(the)g(v)m(alues)h(they)g(enco)q(ded)g(in)g(the)g
(send)f(bu\013er.)166 1892 y(Data)f(represen)o(tation)i(con)o(v)o(ersion)f
(also)h(applies)h(to)e(the)g(en)o(v)o(elop)q(e)i(of)e(a)g(message:)20
b(source,)15 b(des-)75 1948 y(tination)h(and)f(tag)f(are)h(all)h(in)o(tegers)
g(that)e(ma)o(y)h(need)h(to)e(b)q(e)i(con)o(v)o(erted.)166
2086 y Fq(Implemen)o(tati)o(on)11 b(note:)36 b Fu(The)13 b(curren)o(t)i
(de\014nition)e(do)q(es)h(not)f(require)h(messages)g(to)f(carry)h(data)e(t)o
(yp)q(e)75 2136 y(information.)j(A)e(message)g(can)g(b)q(e)g(comp)q(osed)g
(and)g(sen)o(t)g(using)g(only)f(the)i(information)c(pro)o(vided)j(b)o(y)f
(the)i(send)75 2186 y(call,)k(and)g(can)h(b)q(e)g(receiv)o(ed)h(and)e(stored)
h(using)f(only)g(the)h(information)d(pro)o(vided)i(b)o(y)g(the)h(receiv)o(e)h
(call.)30 b(If)75 2235 y(messages)16 b(are)f(sen)o(t)i(b)q(et)o(w)o(een)g
(di\013eren)o(t)f(mac)o(hines)f(then)h(one)f(can)h(either)g(use)h(a)e(\\univ)
o(ersal")g(data)g(enco)q(ding)75 2285 y(for)g(messages,)f(use)i(kno)o(wledge)
f(of)f(the)i(receiv)o(er)g(en)o(vironmen)o(t)e(in)h(order)g(to)g(con)o(v)o
(ert)h(data)e(at)h(the)h(sender,)g(or)75 2335 y(use)e(kno)o(wledge)f(of)f
(the)i(sender)g(en)o(vironmen)o(t)e(in)h(order)g(to)g(con)o(v)o(ert)h(data)f
(at)g(the)g(receiv)o(er.)19 b(In)13 b(either)h(case)g(the)75
2385 y(datat)o(yp)q(e)g(argumen)o(t)f(in)g(the)i(lo)q(cal)e(call)g(can)h(b)q
(e)h(used)f(to)g(deriv)o(e)g(the)h(t)o(yp)q(es)g(of)e(the)h(v)n(alues)g
(transferred.)166 2446 y(Additional)e(t)o(yp)q(e)j(information)c(can)j(b)q(e)
g(carried)h(in)e(messages)h(in)f(order)i(to)f(pro)o(vide)f(b)q(etter)j(error)
f(detec-)75 2503 y(tion.)166 2647 y FA(MPI)35 b(do)q(es)18
b(not)f(require)h(supp)q(ort)g(for)f(in)o(ter-language)h(comm)o(unication:)25
b(The)18 b(b)q(eha)o(vior)g(of)f(a)-1903 b Fk(\))75 2704 y
FA(program)12 b(is)i(unde\014ned)h(if)e(messages)g(are)g(sen)o(t)g(b)o(y)g(a)
g(C)g(pro)q(cess)g(and)h(receiv)o(ed)g(b)o(y)f(a)g(F)l(ortran)f(pro)q(cess,)
1967 46 y Fy(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 Fw(1.7.)34 b(COMMUNICA)l(TION)16 b(MODES)1048
b FA(17)75 49 y(or)15 b(vice-v)o(ersa.)166 106 y(MPI)f(implemen)o(tors)g(ma)o
(y)f(pro)o(vide)h(supp)q(ort)g(for)f(in)o(ter-language)h(comm)o(unication)h
(in)f(a)g(v)m(ariet)o(y)75 162 y(of)h(w)o(a)o(ys:)143 253 y
Fl(\017)23 b FA(One)16 b(ma)o(y)f(in)o(v)o(ok)o(e)g(C)g(comm)o(unication)h
(routines)g(from)f(a)g(F)l(ortran)f(program)h(or)g(F)l(ortran)f(com-)189
309 y(m)o(unication)g(routines)g(from)f(a)h(C)f(program,)g(on)g(systems)h
(that)e(supp)q(ort)i(in)o(v)o(ok)m(ation)h(of)e(foreign)189
366 y(language)i(routines.)143 458 y Fl(\017)23 b FA(One)e(ma)o(y)e(allo)o(w)
i(the)f(use)h(of)f(\\C)g(MPI)g(t)o(yp)q(es",)h(suc)o(h)f(as)g
Fo(MPI)p 1332 458 13 2 v 15 w(INT,)e(MPI)p 1521 458 V 14 w(CHAR)p
FA(,)h(etc.)36 b(from)189 515 y(F)l(ortran)14 b(programs,)f(and)j(vice-v)o
(ersa.)143 607 y Fl(\017)23 b FA(One)16 b(ma)o(y)e(\014x)h(the)h(corresp)q
(ondance)g(b)q(et)o(w)o(een)f(C)g(datat)o(yp)q(es)g(and)g(F)l(ortran)f(datat)
o(yp)q(es.)189 709 y Fr(R)n(ationale.)46 b FA(MPI)17 b(do)q(es)f(not)g
(handle)i(in)o(ter-language)f(comm)o(unication)g(b)q(ecause)g(there)g(seem)
189 766 y(to)d(b)q(e)i(no)f(agreed)g(standards)g(for)g(in)o(ter-language)g(t)
o(yp)q(e)h(con)o(v)o(ersions.)k(\()p Fr(End)15 b(of)i(r)n(ationale.)p
FA(\))75 908 y FB(1.7)59 b(Communication)17 b(Mo)r(des)75 1010
y FA(The)c(basic)h(send)f(op)q(eration)g(describ)q(ed)i(in)f(section)f(1.2)f
(used)h(the)g Fz(standard)g FA(comm)o(unication)h(mo)q(de.)75
1066 y(In)g(suc)o(h)g(a)f(comm)o(unication)h(mo)q(de,)g(a)f(send)h(op)q
(eration)g(can)f(b)q(e)h(started)f(whether)h(or)f(not)g(a)g(matc)o(hing)75
1123 y(receiv)o(e)18 b(w)o(as)e(p)q(osted.)24 b(The)17 b(completion)h(of)e
(the)h(send)h(op)q(eration)e(indicates)j(that)d(the)g(message)h(and)75
1179 y(its)f(en)o(v)o(elop)q(e)h(ha)o(v)o(e)e(b)q(een)i(safely)f(stored)f(a)o
(w)o(a)o(y)f(and)i(that)f(the)h(sender)g(is)g(free)g(to)f(access)h(and)f(mo)q
(dify)75 1236 y(the)j(sender)h(bu\013er.)30 b(Th)o(us,)18 b(the)h(op)q
(eration)f(is)h Fz(lo)q(cally-blo)r(c)o(king)p FA(:)29 b(it)19
b(do)q(es)f(not)g(return)g(un)o(til)i(the)75 1292 y(send)c(op)q(eration)f
(has)g(completed)h Fz(lo)q(cally)p FA(,)i(on)d(the)g(sender)h(side.)166
1349 y(The)f(completion)i(of)e(a)g(send)h(op)q(eration)f(giv)o(es)h(no)f
(indication)i(that)e(the)g(message)g(w)o(as)g(receiv)o(ed)75
1405 y(on)i(the)g(receiv)o(er)h(side.)26 b(A)17 b(blo)q(c)o(king)i(send)e(ma)
o(y)g(b)q(e)g(implemen)o(ted)i(so)e(that)f(it)h(returns)g(only)h(after)e(a)75
1462 y(matc)o(hing)j(receiv)o(e)h(has)f(b)q(een)h(executed)g(on)f(the)h
(receiv)o(er)f(side.)33 b(This)20 b(a)o(v)o(oids)e(the)i(need)g(to)e
(bu\013er)75 1518 y(message)e(data)f(out)h(of)f(sender)i(or)e(receiv)o(er)i
(memory)l(.)22 b(In)17 b(this)f(case)g(the)g(send)h(op)q(eration)f(completes)
75 1574 y(only)e(after)e(the)i(matc)o(hing)f(receiv)o(e)h(has)g(started)e
(executing.)21 b(On)13 b(the)h(other)f(hand,)g(it)h(is)g(also)f(p)q(ossible)
75 1631 y(for)j(MPI)g(to)f(bu\013er)h(messages,)g(so)g(as)g(to)f(allo)o(w)i
(the)f(sender)h(to)e(pro)q(ceed)i(ahead)g(of)e(the)i(receiv)o(er.)23
b(In)75 1687 y(suc)o(h)15 b(a)g(case)g(the)g(send)g(op)q(eration)g(ma)o(y)f
(complete)i(successfully)h(b)q(efore)e(the)g(message)f(w)o(as)g(receiv)o(ed.)
166 1744 y(There)h(are)g(t)o(w)o(o)f(additional)j(comm)o(unication)f(mo)q
(des:)166 1800 y(A)e(send)h(that)e(uses)h(the)g Fz(ready)g
FA(comm)o(unication)g(mo)q(de)h(ma)o(y)e(b)q(e)i(started)e(only)h(if)h(the)f
(matc)o(hing)75 1857 y(receiv)o(e)g(is)f(already)g(p)q(osted;)g(otherwise)g
(the)g(op)q(eration)g(is)g(erroneous)f(and)h(its)g(outcome)f(is)h
(unde\014ned.)75 1913 y(In)19 b(some)f(systems,)h(this)f(allo)o(ws)h(the)f
(remo)o(v)m(al)h(of)f(a)g(hand-shak)o(e)h(op)q(eration)g(that)e(is)i
(otherwise)g(re-)75 1970 y(quired,)g(and)f(results)g(in)g(impro)o(v)o(ed)g(p)
q(erformance.)27 b(The)18 b(completion)h(of)e(the)h(send)g(op)q(eration)g(do)
q(es)75 2026 y(not)e(dep)q(end)i(on)e(the)g(status)f(of)h(a)g(matc)o(hing)g
(receiv)o(e,)h(and)f(merely)h(indicates)h(that)d(the)h(send)h(bu\013er)75
2083 y(can)i(b)q(e)g(reused.)30 b(A)19 b(send)g(op)q(eration)g(that)f(uses)g
(the)h(ready)f(mo)q(de)h(has)g(the)f(same)g(seman)o(tics)h(as)f(a)75
2139 y(standard)h(send)h(op)q(eration;)h(it)f(is)g(merely)g(that)f(it)g(can)h
(b)q(e)g(used)g(only)g(in)g(some)f(of)g(the)h(situations)75
2195 y(where)15 b(a)g(regular)h(send)f(can)h(b)q(e)g(used.)166
2252 y(A)i(send)g(that)f(uses)g(the)h Fz(sync)o(hronous)e FA(mo)q(de)i(can)g
(b)q(e)g(started)f(whether)g(or)g(not)h(a)f(matc)o(hing)75
2308 y(receiv)o(e)12 b(w)o(as)e(p)q(osted.)19 b(Ho)o(w)o(ev)o(er,)10
b(the)h(send)h(will)g(complete)g(successfully)h(only)f(if)f(a)g(matc)o(hing)g
(receiv)o(e)g(is)75 2365 y(p)q(osted,)h(and)g(the)g(receiv)o(e)g(op)q
(eration)g(has)f(started)g(to)g(receiv)o(e)i(the)e(message)g(sen)o(t)h(b)o(y)
f(the)h(sync)o(hronous)75 2421 y(send.)29 b(\(I.e.,)19 b(the)f(receiv)o(e)h
(has)f(b)q(een)h(p)q(osted,)g(and)g(the)f(incoming)h(message)f(has)g(b)q(een)
i(matc)o(hed)e(to)75 2478 y(this)g(p)q(osted)g(receiv)o(e.\))28
b(Th)o(us,)18 b(the)g(completion)g(of)g(a)f(sync)o(hronous)h(send)g(not)f
(only)i(indicates)g(that)75 2534 y(the)g(send)h(bu\013er)f(can)g(b)q(e)h
(reused,)g(but)f(also)g(indicates)i(that)d(the)i(receiv)o(er)f(has)g(reac)o
(hed)h(a)f(certain)75 2591 y(p)q(oin)o(t)e(in)h(its)f(execution,)h(namely)g
(that)e(it)h(has)g(started)f(executing)i(the)f(matc)o(hing)g(receiv)o(e.)26
b(If)17 b(b)q(oth)75 2647 y(sends)f(and)h(receiv)o(es)f(are)g(blo)q(c)o(king)
h(op)q(erations)f(then)h(the)f(use)g(of)f(the)h(sync)o(hronous)g(mo)q(de)g
(pro)o(vides)75 2704 y(sync)o(hronous)h(comm)o(unication)g(seman)o(tics:)23
b(a)16 b(comm)o(unication)h(do)q(es)g(not)g(complete)g(at)f(either)h(end)-32
46 y Fy(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 FA(18)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y FA(b)q(efore)c(b)q(oth)g(pro)q
(cesses)g(\\attend")f(to)g(the)h(comm)o(unication;)h(the)f(completion)h(of)e
(a)h(sync)o(hronous)f(send)75 106 y(is)16 b(a)f Fz(global)i
FA(ev)o(en)o(t,)d(and)h(the)h(op)q(eration)f(is)h Fz(globally-blo)q(cking)p
FA(.)166 162 y(Tw)o(o)22 b(additional)j(send)e(functions)h(are)f(pro)o(vided)
h(for)f(the)g(t)o(w)o(o)f(additional)i(comm)o(unication)75
219 y(mo)q(des.)38 b(The)22 b(comm)o(unication)g(mo)q(de)f(is)h(indicated)h
(b)o(y)e(a)g(one)h(letter)f(pre\014x:)32 b Fv(R)22 b FA(for)f(ready)g(and)75
275 y Fv(S)15 b FA(for)g(sync)o(hronous.)166 332 y(Send)h(in)g(ready)f(mo)q
(de)75 435 y Fv(MPI)p 160 435 14 2 v 16 w(RSEND)h(\(buf,)f(count,)h(datat)o
(yp)q(e,)h(dest,)f(tag,)f(comm)m(\))117 512 y Fu(IN)155 b Fv(buf)527
b Fu(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))117
586 y(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h
(send)h(bu\013er)f(\(in)o(teger\))117 660 y(IN)155 b Fv(datat)o(yp)q(e)424
b Fu(datat)o(yp)q(e)14 b(of)g(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)e
(\(handle\))117 734 y(IN)155 b Fv(dest)511 b Fu(rank)14 b(of)f(destination)h
(\(in)o(teger\))117 808 y(IN)155 b Fv(tag)526 b Fu(message)14
b(tag)f(\(in)o(teger\))117 881 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11
b(\(handle\))75 1006 y Ft(int)23 b(MPI)p 245 1006 15 2 v 17
w(Rsend\(void*)g(buf,)g(int)g(count,)g(MPI)p 1002 1006 V 17
w(Datatype)g(datatype,)g(int)g(dest,)393 1062 y(int)h(tag,)f(MPI)p
683 1062 V 17 w(Comm)g(comm\))75 1149 y(MPI)p 150 1149 V 17
w(RSEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(TAG,)g(COMM,)h(IERROR\))170
1205 y(<type>)f(BUF\(*\))170 1262 y(INTEGER)g(COUNT,)g(DATATYPE,)g(DEST,)g
(TAG,)h(COMM,)f(IERROR)166 1348 y FA(Send)16 b(in)g(sync)o(hronous)f(mo)q(de)
75 1452 y Fv(MPI)p 160 1452 14 2 v 16 w(SSEND)h(\(buf,)f(count,)h(datat)o(yp)
q(e,)g(dest,)h(tag,)e(comm)m(\))117 1529 y Fu(IN)155 b Fv(buf)527
b Fu(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))117
1603 y(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)
h(send)h(bu\013er)f(\(in)o(teger\))117 1677 y(IN)155 b Fv(datat)o(yp)q(e)424
b Fu(datat)o(yp)q(e)14 b(of)g(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)e
(\(handle\))117 1751 y(IN)155 b Fv(dest)511 b Fu(rank)14 b(of)f(destination)h
(\(in)o(teger\))117 1824 y(IN)155 b Fv(tag)526 b Fu(message)14
b(tag)f(\(in)o(teger\))117 1898 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)
11 b(\(handle\))75 2023 y Ft(int)23 b(MPI)p 245 2023 15 2 v
17 w(Ssend\(void*)g(buf,)g(int)g(count,)g(MPI)p 1002 2023 V
17 w(Datatype)g(datatype,)g(int)g(dest,)393 2079 y(int)h(tag,)f(MPI)p
683 2079 V 17 w(Comm)g(comm\))75 2165 y(MPI)p 150 2165 V 17
w(SSEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(TAG,)g(COMM,)h(IERROR\))170
2222 y(<type>)f(BUF\(*\))170 2278 y(INTEGER)g(COUNT,)g(DATATYPE,)g(DEST,)g
(TAG,)h(COMM,)f(IERROR)166 2365 y FA(There)16 b(is)g(only)g(one)g(receiv)o(e)
h(mo)q(de,)e(whic)o(h)i(can)f(matc)o(h)f(an)o(y)g(of)h(the)f(send)i(mo)q
(des.)k(The)16 b(receiv)o(e)75 2421 y(op)q(eration)g(describ)q(ed)h(in)g(the)
e(last)h(section)g(is)g Fz(blo)q(c)o(king)p FA(:)22 b(it)16
b(returns)f(only)h(after)f(the)h(receiv)o(e)g(bu\013er)75 2478
y(con)o(tains)h(the)h(newly)g(receiv)o(ed)g(message.)26 b(It)17
b(is)h Fz(async)o(hronous)p FA(:)23 b(the)17 b(completion)i(of)d(a)h(receiv)o
(e)h(is)75 2534 y(a)e(lo)q(cal)i(op)q(eration,)f(and)f(a)g(receiv)o(e)i(can)f
(complete)g(b)q(efore)g(the)f(matc)o(hing)h(send)g(has)f(completed)i(\(of)75
2591 y(course,)d(it)g(can)h(complete)g(only)f(after)g(the)g(matc)o(hing)g
(send)h(has)f(started\).)166 2647 y(Comm)o(unication)e(imp)q(oses)g(an)f
(order)h(on)f(the)h(ev)o(en)o(ts)f(o)q(ccurring)h(at)f(the)h(comm)o
(unicating)g(no)q(des.)75 2704 y(It)i(is)g(alw)o(a)o(ys)e(the)i(case)g(that)e
(the)i(completion)h(of)e(a)g(receiv)o(e)i(o)q(ccurs)e(after)g(the)h(start)e
(of)h(the)h(matc)o(hing)1967 46 y Fy(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 Fw(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b FA(19)75 49 y(send.)29 b(If)19 b(the)f(sync)o(hronous)g(send)h(mo)q(de)f
(is)h(used,)g(then)g(it)f(is)h(also)f(the)g(case)g(that)g(the)g(completion)75
106 y(of)i(a)h(send)g(o)q(ccurs)g(after)f(the)g(start)g(of)g(the)h(matc)o
(hing)f(receiv)o(e.)38 b(Of)20 b(course,)i(on)f(eac)o(h)f(pro)q(cess,)i(a)75
162 y(comm)o(unication)14 b(completes)h(after)d(it)i(is)g(started.)19
b(No)13 b(other)h(order)f(is)h(imp)q(osed)h(b)o(y)e(MPI.)g(E.g.,)g(if)h(the)
75 219 y(standard)h(send)g(mo)q(de)h(is)f(used,)h(the)f(send)h(op)q(eration)f
(ma)o(y)f(complete)i(b)q(efore)g(the)f(matc)o(hing)g(receiv)o(e)75
275 y(w)o(as)f(started.)166 333 y(In)h(a)f(m)o(ulti-threaded)i(implemen)o
(tation)g(of)e(MPI,)h(the)f(system)g(ma)o(y)g(desc)o(hedule)j(a)d(thread)h
(that)75 389 y(is)21 b(blo)q(c)o(k)o(ed)g(on)g(a)f(send)h(or)e(receiv)o(e)j
(op)q(eration,)f(and)g(sc)o(hedule)h(another)e(thread)g(for)g(execution)h(in)
75 446 y(the)d(same)g(address)g(space.)28 b(In)19 b(suc)o(h)f(a)f(case)h(it)h
(the)f(user)g(resp)q(onsibilit)o(y)i(not)e(to)f(access)h(or)f(mo)q(dify)75
502 y(a)f(comm)o(unication)h(bu\013er)f(un)o(til)i(the)e(comm)o(unication)h
(completes;)g(otherwise)g(the)f(outcome)g(of)g(the)75 559 y(computation)f(is)
h(unde\014ned.)189 671 y Fr(R)n(ationale.)61 b FA(W)l(e)19
b(prohibit)h(read)f(accesses)g(to)f(a)g(send)i(bu\013er)e(while)j(it)e(is)g
(b)q(een)h(used,)g(ev)o(en)189 727 y(though)e(the)g(send)g(op)q(eration)h(is)
f(not)g(supp)q(osed)h(to)e(alter)h(the)g(con)o(ten)o(t)g(of)f(this)i
(bu\013er.)28 b(This)189 784 y(ma)o(y)17 b(seem)h(more)f(stringen)o(t)g(than)
h(necessary)l(,)g(but)g(the)g(additional)h(restriction)g(causes)f(little)189
840 y(loss)g(of)g(functionalit)o(y)i(and)e(allo)o(ws)h(b)q(etter)f(p)q
(erformance)h(on)f(some)g(systems)g({)h(consider)g(the)189
897 y(case)d(where)g(data)g(transfer)f(is)i(done)f(b)o(y)h(a)e(DMA)h(engine)h
(whic)o(h)g(is)g(not)f(cac)o(he-coheren)o(t)h(with)189 953
y(the)e(main)h(pro)q(cessor.)j(\()p Fr(End)d(of)g(r)n(ationale.)p
FA(\))166 1141 y Fq(Implemen)o(tati)o(on)10 b(note:)34 b Fu(A)13
b(ready)f(send)h(can)f(b)q(e)h(implemen)o(ted)d(as)i(a)g(standard)h(send;)g
(in)e(suc)o(h)i(a)f(case)75 1191 y(there)j(will)e(b)q(e)h(no)g(p)q
(erformance)g(adv)n(an)o(tage)f(\(or)h(disadv)n(an)o(tage\))f(for)g(the)i
(use)f(of)g(ready)g(send.)166 1242 y(A)f(standard)h(send)h(can)e(b)q(e)h
(implemen)o(ted)e(as)h(a)g(sync)o(hronous)i(send.)j(In)c(suc)o(h)g(a)f(case,)
h(no)f(data)h(bu\013ering)75 1292 y(is)g(needed.)166 1343 y(A)g(p)q(ossible)g
(comm)o(unication)c(proto)q(col)k(for)g(the)g(v)n(arious)f(comm)o(unication)e
(mo)q(des)i(is)h(outlined)f(b)q(elo)o(w:)166 1394 y Fo(ready)i(send)p
Fu(:)k(The)14 b(message)g(is)g(sen)o(t)h(as)e(so)q(on)h(as)g(p)q(ossible.)166
1445 y Fo(synchronous)f(send:)18 b Fu(The)12 b(sender)h(sends)f(a)f
(request-to-send)i(message.)k(The)12 b(receiv)o(er)h(stores)f(this)g
(request.)75 1495 y(When)j(a)f(matc)o(hing)f(receiv)o(e)j(is)f(p)q(osted,)g
(the)h(receiv)o(er)g(sends)g(bac)o(k)f(a)f(p)q(ermission-to-send)h(message,)f
(and)g(the)75 1545 y(sender)h(no)o(w)f(sends)h(the)g(message.)166
1596 y Fo(standa)o(rd)k(send:)27 b Fu(First)18 b(proto)q(col)g(ma)o(y)e(b)q
(e)i(used)h(for)e(short)i(messages,)f(and)g(second)h(proto)q(col)e(for)h
(long)75 1645 y(messages.)166 1696 y(Additional)d(con)o(trol)h(messages)h
(migh)o(t)e(b)q(e)i(needed)h(for)e(\015o)o(w)g(con)o(trol)h(and)f(error)i
(reco)o(v)o(ery)m(.)27 b(Of)16 b(course,)75 1746 y(there)f(are)f(man)o(y)f
(other)h(p)q(ossible)g(proto)q(cols.)75 1979 y FB(1.8)59 b(Nonblo)r(cking)20
b(communication)75 2083 y FA(One)e(can)g(impro)o(v)o(e)f(p)q(erformance)g(on)
h(man)o(y)e(systems)h(b)o(y)h(o)o(v)o(erlapping)f(comm)o(unication)i(and)e
(com-)75 2139 y(putation.)35 b(This)21 b(is)g(esp)q(ecially)i(true)d(on)g
(systems)g(where)g(comm)o(unication)h(can)g(b)q(e)g(executed)g(au-)75
2195 y(tonomously)12 b(b)o(y)h(an)g(in)o(telligen)o(t)h(comm)o(unication)g
(con)o(troller.)19 b(Ligh)o(t-w)o(eigh)o(t)13 b(threads)f(are)h(one)g(mec)o
(h-)75 2252 y(anism)21 b(for)g(ac)o(hieving)h(suc)o(h)g(o)o(v)o(erlap.)37
b(An)21 b(alternativ)o(e)h(mec)o(hanism)g(that)e(often)h(leads)g(to)g(b)q
(etter)75 2308 y(p)q(erformance)e(is)g(to)f(use)h Fz(non)o(blo)q(c)o(king)j
(comm)o(unication)p FA(.)32 b(A)19 b(non)o(blo)q(c)o(king)h(send)f(call)h
(initiates)75 2365 y(the)15 b(send)h(op)q(eration,)f(but)h(do)q(es)f(not)g
(complete)h(it.)k(The)15 b(send)h(call)h(will)f(return)g(b)q(efore)f(the)g
(message)75 2421 y(w)o(as)d(copied)h(out)f(of)g(the)g(send)h(bu\013er.)19
b(A)13 b(separate)e(call)j(is)f(needed)g(to)f(complete)h(the)g(comm)o
(unication,)75 2478 y(i.e.)20 b(to)13 b(v)o(erify)i(that)e(the)h(data)g(has)g
(b)q(een)h(copied)g(out)f(of)g(the)g(send)h(bu\013er.)k(With)c(suitable)g
(hardw)o(are,)75 2534 y(the)k(transfer)f(of)h(data)f(out)h(of)g(the)g(sender)
g(memory)g(ma)o(y)f(pro)q(ceed)i(concurren)o(tly)g(with)f(computa-)75
2591 y(tions)g(done)g(at)f(the)g(sender)h(after)f(the)h(send)g(w)o(as)f
(initiated)i(and)e(b)q(efore)h(it)g(completed.)31 b(Similarly)l(,)75
2647 y(a)19 b(non)o(blo)q(c)o(king)h(receiv)o(e)g(initiates)h(the)e(receiv)o
(e)h(op)q(eration,)g(but)f(do)q(es)g(not)g(complete)h(it.)32
b(The)19 b(call)75 2704 y(will)f(return)f(b)q(efore)g(a)f(message)g(is)i
(stored)e(in)o(to)g(the)h(receiv)o(e)h(bu\013er.)24 b(A)17
b(separate)f(call)h(is)h(needed)g(to)-32 46 y Fy(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 FA(20)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y FA(complete)h(the)f(receiv)o(e)i(op)q
(eration)e(and)g(v)o(erify)h(that)e(the)i(data)e(has)i(b)q(een)g(receiv)o(ed)
g(in)o(to)g(the)f(receiv)o(e)75 106 y(bu\013er.)k(With)14 b(suitable)h(hardw)
o(are,)f(the)g(transfer)f(of)h(data)g(in)o(to)g(the)g(receiv)o(er)h(memory)f
(ma)o(y)f(pro)q(ceed)75 162 y(concurren)o(tly)f(with)g(computations)f(done)g
(after)g(the)g(receiv)o(e)h(w)o(as)f(initiated)i(and)e(b)q(efore)h(it)f
(completed.)75 219 y(The)17 b(use)h(of)f(non)o(blo)q(c)o(king)h(receiv)o(es)g
(ma)o(y)f(also)g(a)o(v)o(oid)g(system)f(bu\013ering)i(and)f(memory)g(to)g
(memory)75 275 y(cop)o(ying,)e(as)g(information)g(is)h(pro)o(vided)g(early)g
(on)f(the)g(lo)q(cation)h(of)f(the)g(receiv)o(e)h(bu\013er.)166
366 y(Non)o(blo)q(c)o(king)d(sends)f(can)g(use)h(the)f(same)f(three)h(mo)q
(des)g(as)g(blo)q(c)o(king)h(sends:)19 b Fv(standa)o(rd)p FA(,)13
b Fv(ready)f FA(and)75 422 y Fv(synchronous)p FA(.)26 b(These)16
b(carry)g(the)h(same)f(meaning.)24 b(The)17 b(initiation)h(and)f(completion)g
(of)f(a)g(standard)75 479 y(send)k(do)f(not)g(dep)q(end)i(on)e(the)h(status)e
(of)h(a)g(matc)o(hing)g(receiv)o(e.)33 b(A)20 b(ready)f(send)h(can)f(b)q(e)h
(initiated)75 535 y(only)f(if)h(a)e(matc)o(hing)h(receiv)o(e)h(has)f(already)
g(b)q(een)h(initiated,)h(otherwise)e(the)g(call)h(is)g(erroneous;)g(its)75
591 y(completion)d(do)q(es)g(not)f(dep)q(end)i(on)e(the)g(status)g(of)f(a)h
(matc)o(hing)h(receiv)o(e.)23 b(A)17 b(sync)o(hronous)f(send)h(can)75
648 y(b)q(e)j(initiated)h(b)q(efore)f(a)f(matc)o(hing)h(receiv)o(e)g(has)f(b)
q(een)i(initiated,)h(but)d(will)i(complete)g(only)f(after)e(a)75
704 y(matc)o(hing)13 b(receiv)o(e)g(has)g(b)q(een)h(initiated,)g(and)f(has)g
(started)f(receiving)i(the)f(message)f(generated)h(b)o(y)g(the)75
761 y(send)j(op)q(eration.)166 851 y(In)f(all)h(cases)e(the)h(op)q(eration)g
(that)f(initiates)i(the)f(comm)o(unication)g(\(send)g(or)f(receiv)o(e\))i(is)
f(a)f(lo)q(cal,)75 908 y(non)o(blo)q(c)o(king)22 b(call.)39
b(If)21 b(the)g(call)h(causes)g(some)e(system)h(resource)g(to)f(b)q(e)i
(exhausted,)h(then)e(it)g(will)75 964 y(fail)f(and)f(return)f(an)h(error)f
(co)q(de.)31 b(Go)q(o)q(d)19 b(qualit)o(y)g(implemen)o(tations)h(of)f(MPI)g
(should)g(ensure)h(that)75 1021 y(this)d(happ)q(ens)h(only)f(in)h
(\\pathological")f(cases.)25 b(I.e.,)16 b(an)h(MPI)g(implemen)o(tation)h
(should)g(b)q(e)f(able)h(to)75 1077 y(supp)q(ort)d(a)g(large)g(n)o(um)o(b)q
(er)h(of)f(p)q(ending)i(non)o(blo)q(c)o(king)f(op)q(erations.)166
1168 y(Non)o(blo)q(c)o(king)g(sends)g(can)f(b)q(e)h(matc)o(hed)f(with)h(blo)q
(c)o(king)g(receiv)o(es,)g(and)f(vice-v)o(ersa.)75 1484 y Fs(1.8.1)49
b(Comm)o(unication)14 b(Objects)75 1636 y FA(Non)o(blo)q(c)o(king)k(comm)o
(unications)g(use)f(opaque)g(request)g(ob)s(jects)f(to)h(iden)o(tify)h(comm)o
(unication)g(op)q(er-)75 1693 y(ations)f(and)g(matc)o(h)f(the)i(op)q(eration)
f(that)f(initiates)i(the)f(comm)o(unication)h(with)f(the)g(op)q(eration)h
(that)75 1749 y(terminates)f(it.)27 b(These)17 b(are)g(system)g(ob)s(jects)g
(that)f(are)h(accessed)h(via)g(a)f(handle.)27 b(A)17 b(request)h(ob)s(ject)75
1806 y(iden)o(ti\014es)j(v)m(arious)f(prop)q(erties)g(of)f(a)g(comm)o
(unication)h(op)q(eration,)h(suc)o(h)e(as)g(the)h(\(send)f(or)g(receiv)o(e\))
75 1862 y(bu\013er)c(that)g(is)h(asso)q(ciated)f(with)h(it,)f(its)h(con)o
(text,)e(the)i(tag)e(and)i(destination)g(argumen)o(ts)f(to)f(b)q(e)i(used)75
1919 y(for)k(a)f(send,)j(or)e(the)g(tag)f(and)i(source)f(argumen)o(ts)f(to)h
(b)q(e)h(used)f(for)g(a)g(receiv)o(e.)36 b(In)20 b(addition,)j(this)75
1975 y(ob)s(ject)14 b(stores)g(information)g(ab)q(out)h(the)f(status)g(of)g
(the)g(p)q(ending)j(comm)o(unication)e(op)q(eration)g(that)e(is)75
2032 y(p)q(erformed)i(with)h(this)g(ob)s(ject.)75 2348 y Fs(1.8.2)49
b(Comm)o(unication)14 b(initiation)75 2500 y FA(W)l(e)21 b(use)g(the)f(same)h
(naming)g(con)o(v)o(en)o(tions)f(as)h(for)f(blo)q(c)o(king)h(comm)o
(unication:)32 b(a)20 b(pre\014x)h(of)f Fv(R)h FA(\()p Fv(S)p
FA(\))75 2557 y(is)f(used)f(for)f Fv(READ)o(Y)i FA(\()p Fv(SYNCHRONOUS)p
FA(\))h(mo)q(de.)32 b(In)20 b(addition)g(a)e(pre\014x)i(of)e
Fv(I)h FA(\(for)f Fv(IMMEDIA)l(TE)p FA(\))75 2613 y(indicates)f(that)d(the)h
(call)i(is)e(non)o(blo)q(c)o(king.)166 2704 y(Initiate)h(a)f(standard)g(mo)q
(de)g(non)o(blo)q(c)o(king)i(send.)1967 46 y Fy(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 Fw(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b FA(21)75 49 y Fv(MPI)p 160 49 14 2 v 16 w(ISEND\(buf,)15
b(count,)h(datat)o(yp)q(e,)h(dest,)f(tag,)f(comm)m(,)d(request\))117
143 y Fu(IN)155 b Fv(buf)527 b Fu(initial)12 b(address)j(of)f(send)g
(bu\013er)h(\(c)o(hoice\))117 253 y(IN)155 b Fv(count)482 b
Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(send)h(bu\013er)f(\(in)o
(teger\))117 362 y(IN)155 b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14
b(of)g(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)e(\(handle\))117
471 y(IN)155 b Fv(dest)511 b Fu(rank)14 b(of)f(destination)h(\(in)o(teger\))
117 580 y(IN)155 b Fv(tag)526 b Fu(message)14 b(tag)f(\(in)o(teger\))117
689 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117
798 y(OUT)108 b Fv(request)452 b Fu(comm)o(unication)11 b(request)k
(\(handle\))75 940 y Ft(int)23 b(MPI)p 245 940 15 2 v 17 w(Isend\(void*)g
(buf,)g(int)g(count,)g(MPI)p 1002 940 V 17 w(Datatype)g(datatype,)g(int)g
(dest,)393 996 y(int)h(tag,)f(MPI)p 683 996 V 17 w(Comm)g(comm,)g(MPI)p
1034 996 V 17 w(Comm)p 1147 996 V 17 w(request)g(*request\))75
1100 y(MPI)p 150 1100 V 17 w(ISEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(TAG,)
g(COMM,)h(REQUEST,)e(IERROR\))170 1156 y(<type>)h(BUF\(*\))170
1213 y(INTEGER)g(COUNT,)g(DATATYPE,)g(DEST,)g(TAG,)h(COMM,)f(REQUEST,)f
(IERROR)166 1316 y FA(Initiate)16 b(a)f(ready)g(mo)q(de)h(non)o(blo)q(c)o
(king)g(send.)75 1437 y Fv(MPI)p 160 1437 14 2 v 16 w(IRSEND\(buf,)g(count,)g
(datat)o(yp)q(e,)g(dest,)g(tag,)f(comm)m(,)d(request\))117
1531 y Fu(IN)155 b Fv(buf)527 b Fu(initial)12 b(address)j(of)f(send)g
(bu\013er)h(\(c)o(hoice\))117 1640 y(IN)155 b Fv(count)482
b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(send)h(bu\013er)f(\(in)o
(teger\))117 1749 y(IN)155 b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14
b(of)g(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)e(\(handle\))117
1858 y(IN)155 b Fv(dest)511 b Fu(rank)14 b(of)f(destination)h(\(in)o(teger\))
117 1968 y(IN)155 b Fv(tag)526 b Fu(message)14 b(tag)f(\(in)o(teger\))117
2077 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117
2186 y(OUT)108 b Fv(request)452 b Fu(comm)o(unication)11 b(request)k
(\(handle\))75 2327 y Ft(int)23 b(MPI)p 245 2327 15 2 v 17
w(Irsend\(void*)f(buf,)i(int)f(count,)g(MPI)p 1026 2327 V 17
w(Datatype)g(datatype,)f(int)i(dest,)393 2384 y(int)g(tag,)f(MPI)p
683 2384 V 17 w(Comm)g(comm,)g(MPI)p 1034 2384 V 17 w(Comm)p
1147 2384 V 17 w(request)g(*request\))75 2487 y(MPI)p 150 2487
V 17 w(IRSEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(TAG,)g(COMM,)g(REQUEST,)g
(IERROR\))170 2544 y(<type>)g(BUF\(*\))170 2600 y(INTEGER)g(COUNT,)g
(DATATYPE,)g(DEST,)g(TAG,)h(COMM,)f(REQUEST,)f(IERROR)166 2704
y FA(Initiate)16 b(a)f(sync)o(hronous)g(mo)q(de)h(non)o(blo)q(c)o(king)g
(send.)-32 46 y Fy(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 FA(22)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fv(MPI)p 160 49 14
2 v 16 w(ISSEND\(buf,)f(count,)i(datat)o(yp)q(e,)f(dest,)g(tag,)f(comm)m(,)d
(request\))117 131 y Fu(IN)155 b Fv(buf)527 b Fu(initial)12
b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))117 216 y(IN)155
b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(send)h
(bu\013er)f(\(in)o(teger\))117 300 y(IN)155 b Fv(datat)o(yp)q(e)424
b Fu(datat)o(yp)q(e)14 b(of)g(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)e
(\(handle\))117 385 y(IN)155 b Fv(dest)511 b Fu(rank)14 b(of)f(destination)h
(\(in)o(teger\))117 470 y(IN)155 b Fv(tag)526 b Fu(message)14
b(tag)f(\(in)o(teger\))117 554 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11
b(\(handle\))117 639 y(OUT)108 b Fv(request)452 b Fu(comm)o(unication)11
b(request)k(\(handle\))75 768 y Ft(int)23 b(MPI)p 245 768 15
2 v 17 w(Issend\(void*)f(buf,)i(int)f(count,)g(MPI)p 1026 768
V 17 w(Datatype)g(datatype,)f(int)i(dest,)393 825 y(int)g(tag,)f(MPI)p
683 825 V 17 w(Comm)g(comm,)g(MPI)p 1034 825 V 17 w(Comm)p
1147 825 V 17 w(request)g(*request\))75 916 y(MPI)p 150 916
V 17 w(ISSEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(TAG,)g(COMM,)g(REQUEST,)g
(IERROR\))170 972 y(<type>)g(BUF\(*\))170 1029 y(INTEGER)g(COUNT,)g
(DATATYPE,)g(DEST,)g(TAG,)h(COMM,)f(REQUEST,)f(IERROR)166 1120
y FA(Initiate)16 b(a)f(non)o(blo)q(c)o(king)i(receiv)o(e.)75
1228 y Fv(MPI)p 160 1228 14 2 v 16 w(IRECV)e(\(buf,)h(count,)g(datat)o(yp)q
(e,)g(source,)g(tag,)e(comm)n(,)d(request\))117 1310 y Fu(OUT)108
b Fv(buf)527 b Fu(initial)12 b(address)j(of)f(receiv)o(e)h(bu\013er)g(\(c)o
(hoice\))117 1395 y(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13
b(of)h(elemen)o(ts)f(in)h(receiv)o(e)h(bu\013er)g(\(in)o(teger\))117
1479 y(IN)155 b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14
b(of)g(eac)o(h)g(receiv)o(e)h(bu\013er)g(elemen)o(t)e(\(handle\))117
1564 y(IN)155 b Fv(source)468 b Fu(rank)14 b(of)f(source)j(\(in)o(teger\))117
1649 y(IN)155 b Fv(tag)526 b Fu(message)14 b(tag)f(\(in)o(teger\))117
1733 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117
1818 y(OUT)108 b Fv(request)452 b Fu(comm)o(unication)11 b(request)k
(\(handle\))75 1947 y Ft(int)23 b(MPI)p 245 1947 15 2 v 17
w(Irecv\(void*)g(buf,)g(int)g(count,)g(MPI)p 1002 1947 V 17
w(Datatype)g(datatype,)g(int)g(source,)393 2004 y(int)h(tag,)f(MPI)p
683 2004 V 17 w(Comm)g(comm,)g(MPI)p 1034 2004 V 17 w(Comm)p
1147 2004 V 17 w(request)g(*request\))75 2095 y(MPI)p 150 2095
V 17 w(IRECV\(BUF,)f(COUNT,)h(DATATYPE,)g(SOURCE,)g(TAG,)g(COMM,)g(REQUEST,)g
(IERROR\))170 2151 y(<type>)g(BUF\(*\))170 2208 y(INTEGER)g(COUNT,)g
(DATATYPE,)g(SOURCE,)g(TAG,)g(COMM,)g(REQUEST,)g(IERROR)166
2299 y FA(These)c(calls)g(allo)q(cate)h(a)e(comm)o(unication)h(request)f(and)
h(asso)q(ciate)g(it)f(with)h(the)g(handle.)31 b(The)75 2355
y(request)11 b(can)f(b)q(e)i(used)f(later)g(to)f(query)g(the)h(status)f(of)g
(the)h(comm)o(unication)g(or)f(w)o(ait)g(for)g(its)h(completion.)166
2417 y(A)17 b(non)o(blo)q(c)o(king)i(send)f(call)g(indicates)h(that)e(the)g
(system)g(ma)o(y)g(start)f(cop)o(ying)h(data)g(out)g(of)g(the)75
2473 y(send)g(bu\013er.)24 b(The)17 b(sender)g(should)g(not)g(access)f(an)o
(y)g(part)g(of)g(the)h(send)g(bu\013er)g(after)e(a)i(non)o(blo)q(c)o(king)75
2529 y(send)f(op)q(eration)f(is)h(called,)g(un)o(til)h(the)e(send)h
(completes.)166 2591 y(A)d(non)o(blo)q(c)o(king)h(receiv)o(e)g(call)g
(indicates)g(that)e(the)h(system)f(ma)o(y)g(start)g(writing)h(data)f(in)o(to)
h(the)g(re-)75 2647 y(ceiv)o(e)f(bu\013er.)19 b(The)11 b(receiv)o(er)h
(should)h(not)e(access)g(an)o(y)g(part)g(of)g(the)g(receiv)o(e)i(bu\013er)e
(after)g(a)g(non)o(blo)q(c)o(king)75 2704 y(receiv)o(e)16 b(op)q(eration)g
(is)f(called,)i(un)o(til)f(the)f(receiv)o(e)h(completes.)1967
46 y Fy(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 Fw(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b FA(23)75 49 y Fs(1.8.3)49 b(Comm)o(unication)14 b(Completion)75
161 y FA(The)j(functions)g Fv(MPI)p 452 161 14 2 v 16 w(W)l(AIT)f
FA(and)g Fv(MPI)p 768 161 V 16 w(TEST)h FA(are)f(used)h(to)f(complete)h(a)f
(non)o(blo)q(c)o(king)h(comm)o(unica-)75 217 y(tion.)i(The)13
b(completion)h(of)e(a)g(send)h(op)q(eration)g(indicates)h(that)e(the)g
(sender)h(is)g(no)o(w)f(free)h(to)f(up)q(date)h(the)75 274
y(lo)q(cations)k(in)f(the)h(send)f(bu\013er)g(\(the)g(send)g(op)q(eration)g
(itself)h(lea)o(v)o(es)f(the)g(con)o(ten)o(t)g(of)f(the)h(send)h(bu\013er)75
330 y(unc)o(hanged\).)25 b(It)16 b(do)q(es)h(not)g(indicate)h(that)e(the)h
(message)f(has)g(b)q(een)i(receiv)o(ed;)g(rather,)e(it)h(ma)o(y)f(ha)o(v)o(e)
75 386 y(b)q(een)g(bu\013ered)g(b)o(y)f(the)h(comm)o(unication)g(subsystem.)k
(Ho)o(w)o(ev)o(er,)14 b(if)i(a)f Fv(synchronous)i FA(mo)q(de)f(send)g(w)o(as)
75 443 y(used,)f(the)g(completion)h(of)f(the)f(send)i(op)q(eration)f
(indicates)h(that)e(a)h(matc)o(hing)g(receiv)o(e)h(w)o(as)e(initiated,)75
499 y(and)h(that)g(the)g(message)g(will)i(ev)o(en)o(tually)f(b)q(e)g(receiv)o
(ed)g(b)o(y)f(this)h(matc)o(hing)f(receiv)o(e.)166 569 y(The)20
b(completion)h(of)e(a)g(receiv)o(e)i(op)q(eration)f(indicates)h(that)e(the)h
(receiv)o(e)g(bu\013er)g(con)o(tains)g(the)75 625 y(receiv)o(ed)f(message,)f
(and)g(that)f(the)h(status)f(ob)s(ject)h(is)g(set;)h(the)f(receiv)o(er)h(is)f
(no)o(w)f(free)h(to)g(access)g(the)75 682 y(receiv)o(e)g(bu\013er.)27
b(It)17 b(do)q(es)h(not)f(indicate)i(that)d(the)i(matc)o(hing)f(send)h(op)q
(eration)g(has)f(completed)h(\(but)75 738 y(indicates,)e(of)f(course,)g(that)
f(the)i(send)f(w)o(as)g(initiated\).)75 855 y Fv(MPI)p 160
855 V 16 w(W)l(AIT\(request,)h(status\))117 946 y Fu(INOUT)62
b Fv(request)452 b Fu(comm)o(unication)11 b(request)k(\(handle\))117
1047 y(OUT)108 b Fv(status)476 b Fu(status)15 b(ob)r(ject)g(\(Status\))75
1185 y Ft(int)23 b(MPI)p 245 1185 15 2 v 17 w(Wait\(MPI)p 454
1185 V 16 w(Comm)p 566 1185 V 17 w(request)g(*request,)f(MPI)p
1084 1185 V 17 w(Status)h(*status\))75 1284 y(MPI)p 150 1284
V 17 w(WAIT\(REQUEST,)f(STATUS,)h(IERROR\))170 1341 y(INTEGER)g(REQUEST,)g
(STATUS\(MPI)p 819 1341 V 16 w(STATUS)p 979 1341 V 16 w(SIZE\),)g(IERROR)166
1440 y FA(A)14 b(call)h(to)f Fv(MPI)p 436 1440 14 2 v 15 w(W)l(AIT)h
FA(returns)e(when)i(the)f(send)h(op)q(eration)f(iden)o(ti\014ed)i(b)o(y)e
Fv(request)i FA(is)f(complete.)75 1497 y(If)21 b(the)g(comm)o(unication)h(ob)
s(ject)f(asso)q(ciated)g(with)g(this)h(request)f(w)o(as)f(created)h(b)o(y)g
(a)g(non)o(blo)q(c)o(king)75 1553 y(send)13 b(or)g(receiv)o(e)h(call,)g(then)
f(the)g(ob)s(ject)f(is)h(deallo)q(cated)i(b)o(y)d(the)h(call)h(to)25
b Fv(MPI)p 1431 1553 V 16 w(W)l(AIT)13 b FA(and)g(the)g(request)75
1610 y(b)q(ecomes)j(n)o(ull.)189 1782 y Fr(R)n(ationale.)39
b FA(MPI)15 b(alw)o(a)o(ys)f(n)o(ulli\014es)j(handles)f(to)f(ob)s(jects)f
(that)g(ha)o(v)o(e)g(b)q(een)i(deallo)q(cated,)g(so)e(as)189
1838 y(to)g(a)o(v)o(oid)h(dangling)h(references.)21 b(\()p
Fr(End)16 b(of)g(r)n(ationale.)p FA(\))166 2010 y(The)h(call)g(returns)g(in)g
Fv(status)h FA(information)f(on)f(the)h(completed)g(op)q(eration.)24
b(The)17 b(status)f(ob)s(ject)75 2067 y(for)f(a)h(receiv)o(e)g(op)q(eration)g
(can)g(b)q(e)g(queried)i(using)e(the)g(functions)g(describ)q(ed)i(in)f
(section)f(1.3.1.)42 b(The)69 b Fk(\()75 2123 y FA(status)15
b(ob)s(ject)f(for)h(a)g(send)i(op)q(eration)e(ma)o(y)g(b)q(e)h(queried)h(as)e
(w)o(ell)h(b)o(y)g(a)f(call)h(to)f Fv(MPI)p 1559 2123 V 16
w(TEST)p 1689 2123 V 17 w(CANCEL)75 2180 y FA(\(Section)c(1.9,)f(b)q(elo)o
(w\).)19 b(Th)o(us,)11 b(one)g(alw)o(a)o(ys)f(need)i(to)e(pro)o(vide)h(a)f(v)
m(alid)i(status)e(argumen)o(t)g(to)g Fv(MPI)p 1749 2180 V 16
w(W)l(AIT)75 2236 y FA(and)15 b(the)h(other)e(related)i(functions.)166
2306 y(It)21 b(is)11 b(allo)o(w)o(ed)g(to)f(call)i Fv(MPI)p
634 2306 V 16 w(W)l(AIT)e FA(with)h(a)g(n)o(ull)h Fv(request)g
FA(argumen)o(t,)e(in)i(whic)o(h)f(case)g(the)g(op)q(eration)69
b Fk(\()75 2362 y FA(returns)17 b(immediately;)k(the)c Fv(status)j
FA(argumen)o(t)d(is)h(set)f(to)g(return)g Fv(tag)h(=)g(MPI)p
1464 2362 V 16 w(ANY)p 1572 2362 V 17 w(T)l(A)o(G)p FA(,)g
Fv(source)g(=)75 2419 y(MPI)p 160 2419 V 16 w(ANY)p 268 2419
V 17 w(SOURCE)p FA(,)e(and)g Fv(count)g(=)g(0)p FA(.)189 2591
y Fr(R)n(ationale.)52 b FA(This)18 b(mak)o(es)e Fv(MPI)p 772
2591 V 16 w(W)l(AIT)h FA(functionally)i(equiv)m(alen)o(t)g(to)e
Fv(MPI)p 1528 2591 V 16 w(W)l(AIT)l(ALL)g FA(with)g(a)189 2647
y(list)e(of)f(length)h(one)f(and)h(adds)f(some)g(elegance.)21
b(Status)14 b(is)h(set)f(so)g(as)g(to)g(prev)o(en)o(t)g(errors)g(due)h(to)189
2704 y(access)g(to)g(stale)g Fv(status)i FA(information.)j(\()p
Fr(End)c(of)g(r)n(ationale.)p FA(\))-32 46 y Fy(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 FA(24)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fv(MPI)p 160 49 14
2 v 16 w(TEST\(request,)g(\015ag,)f(status\))117 130 y Fu(INOUT)62
b Fv(request)452 b Fu(comm)o(unication)11 b(request)k(\(handle\))117
212 y(OUT)108 b Fv(\015ag)518 b Fu(\(logical\))117 295 y(OUT)108
b Fv(status)476 b Fu(status)15 b(ob)r(ject)g(\(Status\))75
423 y Ft(int)23 b(MPI)p 245 423 15 2 v 17 w(Test\(MPI)p 454
423 V 16 w(Comm)p 566 423 V 17 w(request)g(*request,)f(int)i(flag,)f(MPI)p
1323 423 V 17 w(Status)g(*status\))75 513 y(MPI)p 150 513 V
17 w(TEST\(REQUEST,)f(FLAG,)h(STATUS,)g(IERROR\))170 569 y(LOGICAL)g(FLAG)170
626 y(INTEGER)g(REQUEST,)g(STATUS\(MPI)p 819 626 V 16 w(STATUS)p
979 626 V 16 w(SIZE\),)g(IERROR)166 716 y FA(A)17 b(call)i(to)e
Fv(MPI)p 446 716 14 2 v 15 w(TEST)h FA(returns)f Fv(\015ag)h(=)f(true)h
FA(if)g(the)g(op)q(eration)f(iden)o(ti\014ed)j(b)o(y)d Fv(request)i
FA(is)f(com-)75 772 y(plete.)37 b(In)21 b(suc)o(h)g(a)f(case,)i(the)e(status)
g(ob)s(ject)g(is)h(set)f(to)g(con)o(tain)h(information)g(on)f(the)h
(completed)75 829 y(op)q(eration;)15 b(if)h(the)f(comm)o(unication)h(ob)s
(ject)e(w)o(as)h(created)g(b)o(y)g(a)g(non)o(blo)q(c)o(king)h(send)g(or)f
(receiv)o(e,)h(then)75 885 y(it)i(is)g(deallo)q(cated)i(and)e(the)g(request)f
(b)q(ecomes)i(n)o(ull.)29 b(The)18 b(call)h(returns)f Fv(\015ag=false)p
FA(,)g(otherwise.)28 b(In)75 942 y(suc)o(h)16 b(a)e(case,)h(the)h(v)m(alue)g
(of)f(the)g(status)f(ob)s(ject)h(is)h(unde\014ned.)166 1002
y Fv(MPI)p 251 1002 V 16 w(TEST)f FA(is)h(a)f(lo)q(cal,)h(non)o(blo)q(c)o
(king)g(op)q(eration.)166 1062 y(The)11 b(return)g(status)f(ob)s(ject)h(for)f
(a)h(receiv)o(e)h(op)q(eration)f(carries)g(information)g(that)g(can)g(b)q(e)g
(accessed)75 1118 y(using)21 b(the)f(functions)h(describ)q(ed)h(in)f(section)
g(1.3.1.)68 b(The)21 b(status)e(ob)s(ject)h(for)f(a)h(send)h(op)q(eration)
-1903 b Fk(\))75 1174 y FA(carries)22 b(information)h(that)e(can)h(b)q(e)h
(accessed)f(b)o(y)g(a)g(call)h(to)f Fv(MPI)p 1283 1174 V 16
w(TEST)p 1413 1174 V 16 w(CANCEL)h FA(\(Section)f(1.9,)75 1231
y(b)q(elo)o(w\).)27 b(Th)o(us,)17 b(one)h(alw)o(a)o(ys)f(need)h(to)f(pro)o
(vide)h(a)f(v)m(alid)i(status)d(argumen)o(t)h(to)g Fv(MPI)p
1577 1231 V 16 w(TEST)g FA(and)h(the)75 1287 y(other)d(related)g(functions.)
166 1347 y(It)21 b(is)11 b(allo)o(w)o(ed)g(to)f(call)i Fv(MPI)p
634 1347 V 15 w(TEST)f FA(with)g(a)f(n)o(ull)i Fv(request)g
FA(argumen)o(t,)f(in)g(whic)o(h)h(case)e(the)h(op)q(eration)-1903
b Fk(\))75 1404 y FA(returns)17 b Fo(\015ag=true)p FA(,)h(and)f(the)g
Fv(status)i FA(argumen)o(t)d(is)h(set)g(to)f(return)h Fv(tag)f(=)h(MPI)p
1465 1404 V 16 w(ANY)p 1573 1404 V 17 w(T)l(A)o(G)p FA(,)g
Fv(source)h(=)75 1460 y(MPI)p 160 1460 V 16 w(ANY)p 268 1460
V 17 w(SOURCE)p FA(,)e(and)g Fv(count)g(=)g(0)p FA(.)166 1520
y(In)f(a)f(m)o(ulti-threaded)i(en)o(vironmen)o(t,)e(the)g(use)h(of)f(a)g(blo)
q(c)o(king)i(receiv)o(e)f(op)q(eration)g(\()f Fv(MPI)p 1732
1520 V 15 w(W)l(AIT)p FA(\))75 1577 y(ma)o(y)k(allo)o(w)i(the)f(op)q(erating)
g(system)g(to)g(de-sc)o(hedule)i(the)e(blo)q(c)o(k)o(ed)h(thread)f(and)h(sc)o
(hedule)g(another)75 1633 y(thread)j(for)g(execution,)j(if)e(suc)o(h)g(is)f
(a)o(v)m(ailable.)47 b(The)23 b(use)h(of)f(a)g(non)o(blo)q(c)o(king)h(receiv)
o(e)h(op)q(eration)75 1690 y(\()p Fv(MPI)p 178 1690 V 15 w(TEST)p
FA(\))e(allo)o(ws)f(the)g(user)g(to)g(sc)o(hedule)i(alternativ)o(e)e
(activities)i(within)f(a)f(single)h(thread)f(of)75 1746 y(execution.)166
1806 y(Example:)75 1918 y Ft(CALL)h(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75
1974 y(IF\(rank.EQ.0\))123 2031 y(THEN)170 2087 y(CALL)h(MPI_ISEND\(a\(1\),)e
(10,)h(MPI_REAL,)g(1,)g(tag,)h(comm,)f(request,)g(ierr\))170
2144 y(****)h(do)f(some)h(computation)e(to)i(mask)f(latency)g(****)170
2200 y(CALL)h(MPI_WAIT\(request,)d(status,)i(ierr\))123 2257
y(ELSE)170 2313 y(CALL)h(MPI_IRECV\(a\(1\),)e(15,)h(MPI_REAL,)g(0,)g(tag,)h
(comm,)f(request,)g(ierr\))170 2370 y(****)h(do)f(some)h(computation)e(to)i
(mask)f(latency)g(****)170 2426 y(CALL)h(MPI_WAIT\(request,)d(status,)i
(ierr\))75 2483 y(END)g(IF)166 2591 y FA(The)f(functions)h
Fv(MPI)p 554 2591 V 15 w(W)l(AIT)f FA(and)g Fv(MPI)p 881 2591
V 16 w(TEST)g FA(can)g(b)q(e)g(used)h(to)e(complete)h(b)q(oth)g(sends)h(and)
75 2647 y(receiv)o(es;)14 b(they)f(are)f(also)h(used)g(to)f(complete)h(an)o
(y)g(other)f(non)o(blo)q(c)o(king)i(comm)o(unication)f(call)h(pro)o(vided)75
2704 y(b)o(y)h(MPI.)1967 46 y Fy(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 Fw(1.8.)29 b(NONBLOCKING)17 b(COMMUNICA)l(TION)868
b FA(25)75 49 y Fs(1.8.4)49 b(Semantics)13 b(of)k(Nonblo)q(cking)h(Comm)o
(unications)75 135 y FA(The)11 b(seman)o(tics)f(of)h(non)o(blo)q(c)o(king)g
(comm)o(unication)h(is)f(de\014ned)h(b)o(y)e(suitably)i(extending)g(the)e
(de\014nitions)75 192 y(in)16 b(section)g(1.4)e(for)h(order)g(and)g
(progress.)166 248 y(Non)o(blo)q(c)o(king)k(comm)o(unication)f(op)q(erations)
g(are)g(ordered)g(according)g(to)f(the)h(execution)h(order)75
304 y(of)h(the)g(calls)h(that)e(initiate)j(the)e(comm)o(unication;)i(this)f
(de\014nes)g(the)f(meaning)h(of)e(non-o)o(v)o(ertaking)75 361
y(comm)o(unication.)166 417 y(Example:)75 523 y Ft(CALL)k
(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 580 y(IF)h(\(RANK.EQ.0\))147
636 y(THEN)218 693 y(CALL)f(MPI_ISEND\(a,)g(1,)g(MPI_REAL,)g(1,)h(0,)f(comm,)
g(h1,)h(ierr\))218 749 y(CALL)f(MPI_ISEND\(b,)g(1,)g(MPI_REAL,)g(1,)h(0,)f
(comm,)g(h2,)h(ierr\))147 805 y(ELSE)94 b(!)24 b(rank.EQ.1)218
862 y(CALL)f(MPI_IRECV\(a,)g(1,)g(MPI_REAL,)g(0,)h(MPI_ANY_TAG,)e(comm,)h
(h1,)g(ierr\))218 918 y(CALL)g(MPI_IRECV\(b,)g(1,)g(MPI_REAL,)g(0,)h(0,)f
(comm,)g(h2,)h(ierr\))75 975 y(END)f(IF)75 1031 y(CALL)g
(MPI_WAIT\(h1,status\))75 1088 y(CALL)g(MPI_WAIT\(h2,status\))166
1194 y FA(The)17 b(\014rst)f(send)h(of)f(pro)q(cess)h(zero)g(will)h(matc)o(h)
e(the)h(\014rst)f(receiv)o(e)i(of)e(pro)q(cess)h(one,)g(ev)o(en)g(if)g(b)q
(oth)75 1250 y(messages)e(are)h(sen)o(t)f(b)q(efore)h(pro)q(cess)g(one)g
(executes)h(either)f(receiv)o(e.)22 b(This)17 b(precludes)g(an)f(implemen-)75
1306 y(tation)f(where)g(di\013eren)o(t)h(queues)g(are)f(used)g(to)g(p)q(ost)g
(the)g(t)o(w)o(o)f(receiv)o(es.)166 1363 y(A)22 b(call)g(to)f
Fv(MPI)p 458 1363 14 2 v 16 w(W)l(AIT)h FA(that)f(completes)h(a)f(receiv)o(e)
i(will)g(ev)o(en)o(tually)g(terminate)e(and)h(return)75 1419
y(if)f(a)f(matc)o(hing)g(send)h(has)f(b)q(een)h(started,)g(unless)g(the)g
(send)g(is)f(satis\014ed)h(b)o(y)f(another)g(receiv)o(e.)36
b(In)75 1476 y(particular,)20 b(if)f(the)g(matc)o(hing)g(send)g(is)g(non)o
(blo)q(c)o(king,)i(then)e(the)g(receiv)o(e)g(should)h(complete)f(ev)o(en)g
(if)75 1532 y(no)c(call)i(is)e(executed)i(b)o(y)e(the)g(sender)h(to)f
(complete)h(the)f(send.)20 b(Similarly)l(,)e(a)d(call)h(to)f
Fv(MPI)p 1651 1532 V 15 w(W)l(AIT)h FA(that)75 1589 y(completes)i(a)e(send)i
(will)h(ev)o(en)o(tually)f(return)f(if)g(a)g(matc)o(hing)g(receiv)o(e)h(has)f
(b)q(een)h(started,)f(unless)h(the)75 1645 y(receiv)o(e)e(is)g(satis\014ed)f
(b)o(y)g(another)g(send,)g(and)g(ev)o(en)h(if)f(no)g(call)h(is)g(executed)g
(to)e(complete)i(the)f(receiv)o(e.)166 1702 y(Example:)75 1807
y Ft(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 1864
y(IF)h(\(RANK.EQ.0\))147 1920 y(THEN)218 1977 y(CALL)f(MPI_ISEND\(a,)g(1,)g
(MPI_REAL,)g(1,)h(0,)f(comm,)g(h,)h(ierr\))218 2033 y(CALL)f(MPI_RECV\(b,)g
(1,)g(MPI_REAL,)g(1,)h(0,)f(comm,)g(ierr\))218 2090 y(CALL)g(MPI_WAIT\(h,)g
(status,)g(ierr\))147 2146 y(ELSE)94 b(!)24 b(rank.EQ.1)218
2203 y(CALL)f(MPI_RECV\(a,)g(1,)g(MPI_REAL,)g(0,)h(0,)f(comm,)g(ierr\))218
2259 y(CALL)g(MPI_SEND\(b,)g(1,)g(MPI_REAL,)g(0,)h(0,)f(comm,)g(ierr\))75
2316 y(END)g(IF)166 2421 y FA(This)16 b(co)q(de)f(should)i(not)d(deadlo)q(c)o
(k)j(in)f(a)f(correct)f(MPI)h(implemen)o(tation.)166 2478 y(If)j
Fv(MPI)p 299 2478 V 16 w(TEST)g FA(that)e(completes)j(a)e(receiv)o(e)i(is)f
(rep)q(eatedly)h(called)g(with)f(the)g(same)f(argumen)o(ts,)75
2534 y(and)d(a)g(matc)o(hing)g(send)g(has)g(b)q(een)h(started,)e(then)h(the)g
(call)h(will)g(ev)o(en)o(tually)g(return)f Fv(\015ag=true)p
FA(,)h(unless)75 2591 y(the)i(send)g(is)g(satis\014ed)h(b)o(y)f(another)f
(receiv)o(e.)25 b(If)17 b Fv(MPI)p 1020 2591 V 16 w(TEST)g
FA(that)f(completes)i(a)e(send)i(is)f(rep)q(eatedly)75 2647
y(called)e(with)f(the)g(same)f(argumen)o(ts,)g(and)h(a)f(matc)o(hing)g
(receiv)o(e)i(has)e(b)q(een)i(started,)e(then)h(the)g(call)g(will)75
2704 y(ev)o(en)o(tually)i(return)f Fv(\015ag=true)p FA(,)h(unless)g(the)g
(receiv)o(e)g(is)f(satis\014ed)h(b)o(y)f(another)g(send.)-32
46 y Fy(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 FA(26)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y FA(Non)o(blo)q(c)o(king)f(comm)o
(unications)g(cannot)f(b)q(e)g(replaced)i(b)o(y)e(blo)q(c)o(king)h(comm)o
(unications,)g(ev)o(en)f(in)75 106 y(the)h Fv(synchronous)i
FA(comm)o(unication)f(mo)q(de.)k(Consider)c(the)f(follo)o(wing)h(example:)75
205 y Ft(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75
262 y(IF\(rank.EQ.0\))123 318 y(THEN)170 375 y(CALL)h(MPI_ISEND\(a\(1\),)e
(count,)h(MPI_REAL,)f(1,)i(tag1,)f(comm,)g(request1,)g(ierr\))170
431 y(CALL)h(MPI_ISEND\(a\(2\),)e(count,)h(MPI_REAL,)f(1,)i(tag2,)f(comm,)g
(request2,)g(ierr\))170 487 y(CALL)h(MPI_WAIT\(request1,)d(status,)i(ierr\))
170 544 y(CALL)h(MPI_WAIT\(request2,)d(status,)i(ierr\))123
600 y(ELSE)170 657 y(CALL)h(MPI_IRECV\(a\(2\),)e(count,)h(MPI_REAL,)f(0,)i
(tag2,)f(comm,)g(request2,)g(ierr\))170 713 y(CALL)h(MPI_IRECV\(a\(1\),)e
(count,)h(MPI_REAL,)f(0,)i(tag1,)f(comm,)g(request1,)g(ierr\))170
770 y(CALL)h(MPI_WAIT\(request2,)d(status,)i(ierr\))170 826
y(CALL)h(MPI_WAIT\(request1,)d(status,)i(ierr\))75 883 y(END)g(IF)166
981 y FA(The)e(only)g(resource)g(requiremen)o(t)h(for)e(this)h(co)q(de)h(to)e
(complete)h(is)h(the)f(abilit)o(y)h(to)e(ha)o(v)o(e)g(t)o(w)o(o)75
1037 y(p)q(ending)14 b(comm)o(unications.)19 b(If)13 b(one)f(replaces)h(the)f
(non)o(blo)q(c)o(king)i(sends)f(\(receiv)o(es\))f(b)o(y)g(blo)q(c)o(king)h
(sends)75 1094 y(\(receiv)o(es\),)18 b(and)f(deletes)h(the)g(calls)g(to)f
Fv(MPI)p 861 1094 14 2 v 16 w(W)l(AIT)p FA(,)g(then)g(the)h(program)e(can)h
(complete)h(only)g(if)g(the)75 1150 y(system)d(bu\013ers)h(at)e(least)i
Fv(count)h FA(real)f(n)o(um)o(b)q(ers.)21 b(The)15 b(same)h(happ)q(ens)g(if)g
(one)g(deletes)g(the)g(calls)h(that)75 1207 y(initiate)k(comm)o(unication)f
(and)g(replaces)g(eac)o(h)g(call)g(to)f Fv(MPI)p 1165 1207
V 16 w(W)l(AIT)g FA(b)o(y)h(the)f(appropriate)h(blo)q(c)o(king)75
1263 y(send)c(or)e(receiv)o(e.)75 1391 y Fs(1.8.5)49 b(Multiple)17
b(Completions)75 1479 y FA(It)23 b(is)h(con)o(v)o(enien)o(t)g(to)f(b)q(e)h
(able)g(to)e(w)o(ait)h(for)g(the)g(completion)i(of)d(an)o(y)h(or)g(all)h(the)
g(op)q(erations)f(in)75 1536 y(a)g(set,)h(rather)e(than)h(ha)o(ving)g(to)f(w)
o(ait)h(for)f(a)g(sp)q(eci\014c)j(message.)43 b(A)23 b(call)h(to)e
Fv(MPI)p 1597 1536 V 16 w(W)l(AIT)l(ANY)h FA(or)75 1592 y Fv(MPI)p
160 1592 V 16 w(TEST)l(ANY)e FA(can)f(b)q(e)g(used)g(to)f(w)o(ait)h(for)f
(the)h(completion)g(of)g(one)g(out)f(of)g(sev)o(eral)h(op)q(erations;)75
1649 y(a)14 b(call)h(to)27 b Fv(MPI)p 347 1649 V 15 w(W)l(AIT)l(ALL)14
b FA(or)f Fv(MPI)p 701 1649 V 16 w(TEST)l(ALL)h FA(can)g(b)q(e)g(used)h(to)e
(w)o(ait)g(for)h(all)g(p)q(ending)i(op)q(erations)e(in)75 1705
y(a)h(list.)75 1810 y Fv(MPI)p 160 1810 V 16 w(W)l(AIT)l(ANY)h(\(count,)g(a)o
(rra)o(y)p 640 1810 V 14 w(of)p 691 1810 V 16 w(requests,)h(index,)f
(status\))117 1888 y Fu(IN)155 b Fv(count)482 b Fu(list)14
b(length)f(\(in)o(teger\))117 1966 y(INOUT)62 b Fv(a)o(rra)o(y)p
416 1966 V 15 w(of)p 468 1966 V 16 w(requests)272 b Fu(arra)o(y)14
b(of)f(requests)j(\(arra)o(y)e(of)f(handles\))117 2043 y(OUT)108
b Fv(index)489 b Fu(index)12 b(of)f(handle)g(for)g(op)q(eration)h(that)f
(completed)g(\(in)o(teger\))117 2121 y(OUT)108 b Fv(status)476
b Fu(status)15 b(ob)r(ject)g(\(Status\))75 2246 y Ft(int)23
b(MPI)p 245 2246 15 2 v 17 w(Waitany\(int)g(count,)g(MPI)p
788 2246 V 16 w(Comm)p 900 2246 V 17 w(request)g(*array)p 1252
2246 V 16 w(of)p 1316 2246 V 17 w(requests,)g(int)g(*index,)393
2303 y(MPI)p 468 2303 V 17 w(Status)g(*status\))75 2390 y(MPI)p
150 2390 V 17 w(WAITANY\(COUNT,)f(ARRAY)p 645 2390 V 16 w(OF)p
709 2390 V 17 w(REQUESTS,)h(INDEX,)g(STATUS,)g(IERROR\))170
2447 y(INTEGER)g(COUNT,)g(ARRAY)p 651 2447 V 17 w(OF)p 716
2447 V 17 w(REQUESTS\(*\),)f(INDEX,)h(STATUS\(MPI)p 1450 2447
V 16 w(STATUS)p 1610 2447 V 16 w(SIZE\),)170 2503 y(IERROR)166
2591 y FA(Blo)q(c)o(ks)17 b(un)o(til)h(one)e(of)g(the)h(op)q(erations)f(asso)
q(ciated)h(with)g(the)f(comm)o(unication)h(requests)g(in)g(the)75
2647 y(arra)o(y)c(has)h(completed.)20 b(Returns)15 b(in)g Fv(index)g
FA(the)f(index)h(of)f(that)f(request)h(in)h(the)f(arra)o(y)f(and)h(returns)g
(in)75 2704 y Fv(status)i FA(the)f(status)e(of)h(the)h(completing)g(comm)o
(unication.)41 b(\(The)14 b(arra)o(y)f(is)i(indexed)h(from)e(zero,)g(b)q(oth)
-1903 b Fk(\))1967 46 y Fy(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 Fw(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b FA(27)75 49 y(in)16 b(C)f(and)g(F)l(ortran.\))166 122 y(The)k(execution)h
(of)e Fv(MPI)p 610 122 14 2 v 16 w(W)l(AIT)l(ANY\(count,)j(a)o(rra)o(y)p
1079 122 V 14 w(of)p 1130 122 V 16 w(requests,)h(index,)e(status\))g
FA(has)f(the)f(same)75 179 y(e\013ect)10 b(as)g(the)g(execution)i(of)20
b Fv(MPI)p 655 179 V 16 w(W)l(AIT\(a)o(rra)o(y)p 897 179 V
14 w(of)p 948 179 V 16 w(requests[i],)13 b(status\))p FA(,)g(where)e
Fv(i)f FA(is)h(the)f(v)m(alue)i(returned)75 235 y(b)o(y)h Fv(index)p
FA(.)21 b(In)14 b(particular,)g(the)g(asso)q(ciated)f(comm)o(unication)i(ob)s
(ject)d(is)i(deallo)q(cated,)h(and)f(the)g(handle)75 291 y(to)21
b(it)h(in)g Fv(a)o(rra)o(y)p 346 291 V 15 w(of)p 398 291 V
16 w(requests)i FA(is)e(set)f(to)g(n)o(ull.)41 b(If)22 b(more)f(then)h(one)g
(op)q(eration)g(is)g(enabled)h(and)f(can)75 348 y(terminate,)d(one)g(is)g
(arbitrarily)g(c)o(hosen.)30 b(There)19 b(is)g(no)g(requiremen)o(t)g(that)f
(the)g(c)o(hoice)i(satisfy)e(an)o(y)75 404 y(fairness)e(criterion.)166
477 y Fv(MPI)p 251 477 V 16 w(W)l(AIT)30 b FA(is)16 b(equiv)m(alen)o(t)h(to)d
Fv(MPI)p 809 477 V 16 w(W)l(AIT)l(ANY)i FA(with)g(an)f(arra)o(y)f(of)h
(length)g(one.)348 b Fk(\()75 597 y Fv(MPI)p 160 597 V 16 w(TEST)l
(ANY\(count,)17 b(a)o(rra)o(y)p 626 597 V 14 w(of)p 677 597
V 16 w(requests,)g(index,)f(\015ag,)f(status\))117 691 y Fu(IN)155
b Fv(count)482 b Fu(list)14 b(length)f(\(in)o(teger\))117 799
y(INOUT)62 b Fv(a)o(rra)o(y)p 416 799 V 15 w(of)p 468 799 V
16 w(requests)272 b Fu(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e(of)f
(handles\))117 907 y(OUT)108 b Fv(index)489 b Fu(index)9 b(of)g(op)q(eration)
g(that)h(completed,)f(or)g Fo(MPI)p 1651 907 13 2 v 14 w(UNDEFINED)905
963 y Fu(if)k(none)h(completed)g(\(in)o(teger\))117 1071 y(OUT)108
b Fv(\015ag)518 b Fo(TRUE)13 b Fu(if)g(one)i(of)e(the)h(op)q(erations)h(is)e
(complete)h(\(logical\))117 1179 y(OUT)108 b Fv(status)476
b Fu(status)15 b(ob)r(ject)g(\(Status\))75 1320 y Ft(int)23
b(MPI)p 245 1320 15 2 v 17 w(Testany\(int)g(count,)g(MPI)p
788 1320 V 16 w(Comm)p 900 1320 V 17 w(request)g(*array)p 1252
1320 V 16 w(of)p 1316 1320 V 17 w(requests,)g(int)g(*index,)393
1376 y(int)h(*flag,)f(MPI)p 731 1376 V 16 w(Status)g(*status\))75
1479 y(MPI)p 150 1479 V 17 w(TESTANY\(COUNT,)f(ARRAY)p 645
1479 V 16 w(OF)p 709 1479 V 17 w(REQUESTS,)h(INDEX,)g(FLAG,)g(STATUS,)g
(IERROR\))170 1536 y(LOGICAL)g(FLAG)170 1592 y(INTEGER)g(COUNT,)g(ARRAY)p
651 1592 V 17 w(OF)p 716 1592 V 17 w(REQUESTS\(*\),)f(INDEX,)h(STATUS\(MPI)p
1450 1592 V 16 w(STATUS)p 1610 1592 V 16 w(SIZE\),)170 1649
y(IERROR)166 1751 y FA(Causes)11 b(either)h(one)f(or)g(none)h(of)f(the)g(op)q
(erations)h(asso)q(ciated)f(with)h(the)f(comm)o(unication)h(requests)75
1808 y(to)21 b(return.)41 b(In)22 b(the)g(former)g(case,)h(it)f(returns)g
Fv(\015ag)g(=)g(true)p FA(,)i(returns)e(in)h Fv(index)g FA(the)f(index)h(of)f
(its)75 1864 y(request)12 b(in)h(the)f(arra)o(y)l(,)f(returns)g(in)i
Fv(status)h FA(the)e(status)f(of)g(that)g(op)q(eration,)i(deallo)q(cates)g
(the)f(asso)q(ciated)75 1921 y(comm)o(unication)f(ob)s(ject,)f(and)h(sets)f
(the)g(request)h(to)f(n)o(ull.)38 b(\(The)10 b(arra)o(y)f(is)i(indexed)h
(from)e(zero,)h(b)q(oth)f(in)70 b Fk(\()75 1977 y FA(C)12 b(and)h(F)l
(ortran.\))18 b(In)13 b(the)f(latter)h(case,)f(it)h(returns)g
Fv(\015ag)f(=)h(false)p FA(,)g(returns)f(a)h(v)m(alue)g(of)g
Fo(MPI)p 1631 1977 13 2 v 14 w(UNDEFINED)75 2034 y FA(in)j
Fv(index)g FA(and)g Fv(status)h FA(is)e(unde\014ned.)166 2107
y(The)k(execution)g(of)f Fv(MPI)p 609 2107 14 2 v 16 w(TEST)l(ANY\(count,)j
(a)o(rra)o(y)p 1079 2107 V 15 w(of)p 1131 2107 V 16 w(requests,)g(index,)f
(status\))g FA(has)f(the)f(same)75 2163 y(e\013ect)c(as)f(the)h(execution)h
(of)e Fv(MPI)p 662 2163 V 16 w(TEST\(a)o(rra)o(y)p 905 2163
V 15 w(of)p 957 2163 V 16 w(requests[i],)j(\015ag,)d(status\))p
FA(,)j(for)d Fv(i=0,)g(1)h(,...,)e(count-1)p FA(,)75 2220 y(in)i(some)e
(arbitrary)h(order,)g(un)o(til)h(one)f(call)h(returns)f Fv(\015ag=true)p
FA(,)h(or)e(all)i(fail.)20 b(In)14 b(the)f(former)f(case,)h
Fv(index)75 2276 y FA(is)19 b(set)f(to)g(the)g(last)h(v)m(alue)g(of)f
Fv(i)p FA(;)i(in)f(the)f(later)h(case,)g(it)f(is)h(set)f(to)g
Fo(MPI)p 1314 2276 13 2 v 14 w(UNDEFINED)p FA(.)36 b(In)19
b(particular,)69 b Fk(\()75 2332 y Fv(MPI)p 160 2332 14 2 v
16 w(TEST)15 b FA(is)h(equiv)m(alen)o(t)h(to)d Fv(MPI)p 704
2332 V 16 w(TEST)l(ANY)j FA(with)e(an)g(arra)o(y)f(of)h(length)h(one.)166
2481 y Fq(Discussion:)48 b Fo(MPI)p 525 2481 13 2 v 15 w(TEST)p
644 2481 V 15 w(ANY)11 b Fu(pro)o(vides)h(t)o(w)o(o)e(indicators)i(of)e
(success/failure:)19 b(the)12 b(v)n(alue)e(of)h Fo(\015ag)g
Fu(and)68 b Fn(\()75 2531 y Fu(the)12 b(v)n(alue)g(of)f Fo(index)i
Fu(\(i.e.,)e(whether)i Fo(index)g Fu(=)f Fo(MPI)p 870 2531
V 14 w(UNDEFINED)p Fu(\).)f(One)h(could)g(do)f(with)h(one)g(only;)f(e.g.,)g
(get)h(rid)75 2581 y(of)i Fo(\015ag)p Fu(,)g(or)h(allo)o(w)e
Fo(index)j Fu(to)e(b)q(e)i(unde\014ned)f(if)f(no)h(test)g(succeeded.)23
b(This)15 b(ma)o(y)e(buy)h(some)g(e\016ciency)h(and)g(ma)o(y)75
2631 y(sa)o(v)o(e)c(a)f(parameter,)g(at)g(the)h(exp)q(ense)i(of)c(increasing)
i(the)g(di\013erence)h(b)q(et)o(w)o(een)g Fo(MPI)p 1384 2631
V 15 w(TEST)e Fu(and)h Fo(MPI)p 1666 2631 V 14 w(TEST)m(ANY)p
Fu(.)166 2704 y(Opinions?)-32 46 y Fy(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 FA(28)613 b Fw(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fv(MPI)p 160 49 14
2 v 16 w(W)l(AIT)l(ALL\()e(count,)i(a)o(rra)o(y)p 626 49 V
15 w(of)p 678 49 V 16 w(requests,)h(a)o(rra)o(y)p 971 49 V
15 w(of)p 1023 49 V 15 w(statuses\))117 128 y Fu(IN)155 b Fv(count)482
b Fu(lists)14 b(length)g(\(in)o(teger\))117 205 y(INOUT)62
b Fv(a)o(rra)o(y)p 416 205 V 15 w(of)p 468 205 V 16 w(requests)272
b Fu(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e(of)f(handles\))117
283 y(OUT)108 b Fv(a)o(rra)o(y)p 416 283 V 15 w(of)p 468 283
V 16 w(statuses)276 b Fu(arra)o(y)14 b(of)f(status)i(ob)r(jects)g(\(arra)o(y)
f(of)f(Status\))75 409 y Ft(int)23 b(MPI)p 245 409 15 2 v 17
w(Waitall\(int)g(count,)g(MPI)p 788 409 V 16 w(Comm)p 900 409
V 17 w(request)g(*array)p 1252 409 V 16 w(of)p 1316 409 V 17
w(requests,)393 465 y(MPI)p 468 465 V 17 w(Status)g(*array)p
796 465 V 16 w(of)p 860 465 V 17 w(statuses\))75 553 y(MPI)p
150 553 V 17 w(WAITALL\(COUNT,)f(ARRAY)p 645 553 V 16 w(OF)p
709 553 V 17 w(REQUESTS,)h(ARRAY)p 1085 553 V 16 w(OF)p 1149
553 V 17 w(STATUSES,)g(IERROR\))170 610 y(INTEGER)g(COUNT,)g(ARRAY)p
651 610 V 17 w(OF)p 716 610 V 17 w(REQUESTS\(*\),)170 666 y(ARRAY)p
293 666 V 17 w(OF)p 358 666 V 17 w(STATUSES\(MPI)p 663 666
V 15 w(STATUS)p 822 666 V 17 w(SIZE,*\),)g(IERROR)166 754 y
FA(Blo)q(c)o(ks)12 b(un)o(til)h(all)g(comm)o(unication)g(op)q(erations)f
(asso)q(ciated)g(with)g(requests)f(in)i(the)f(list)h(complete,)75
810 y(and)k(return)g(the)g(status)f(of)h(all)h(these)f(op)q(erations.)26
b(Both)16 b(arra)o(ys)g(ha)o(v)o(e)h(the)g(same)f(n)o(um)o(b)q(er)i(of)e(v)m
(alid)75 867 y(en)o(tries.)24 b(The)16 b Fv(i)p FA(-th)h(en)o(try)f(in)h
Fv(a)o(rra)o(y)p 694 867 14 2 v 14 w(of)p 745 867 V 16 w(statuses)i
FA(is)e(set)f(to)g(the)h(return)f(status)f(of)h(the)h Fv(i)p
FA(-th)f(op)q(eration.)75 923 y(All)g(comm)o(unication)g(ob)s(jects)f(are)g
(deallo)q(cated)h(and)g(all)g(requests)f(are)g(set)g(to)g(n)o(ull.)166
981 y(The)f(execution)h(of)f Fv(MPI)p 596 981 V 16 w(W)l(AIT)l(ALL\(count,)g
(a)o(rra)o(y)p 1046 981 V 15 w(of)p 1098 981 V 16 w(requests,)i(a)o(rra)o(y)p
1390 981 V 15 w(of)p 1442 981 V 16 w(statuses)g FA(has)e(the)g(same)75
1037 y(e\013ect)24 b(as)g(the)g(execution)h(of)f Fv(MPI)p 714
1037 V 16 w(W)l(AIT\(a)o(rra)o(y)p 956 1037 V 14 w(of)p 1007
1037 V 16 w(request[i],)k(a)o(rra)o(y)p 1331 1037 V 15 w(of)p
1383 1037 V 16 w(statuses[i]\))p FA(,)g(for)c Fv(i=0)g(,...,)75
1094 y(count-1)p FA(,)16 b(in)g(some)f(arbitrary)f(order.)75
1199 y Fv(MPI)p 160 1199 V 16 w(TEST)l(ALL\(count,)i(a)o(rra)o(y)p
613 1199 V 14 w(of)p 664 1199 V 16 w(requests,)h(\015ag,)e(a)o(rra)o(y)p
1054 1199 V 14 w(of)p 1105 1199 V 16 w(statuses\))117 1277
y Fu(IN)155 b Fv(count)482 b Fu(lists)14 b(length)g(\(in)o(teger\))117
1355 y(INOUT)62 b Fv(a)o(rra)o(y)p 416 1355 V 15 w(of)p 468
1355 V 16 w(requests)272 b Fu(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e(of)f
(handle\))117 1433 y(OUT)108 b Fv(\015ag)518 b Fu(\(logical\))117
1510 y(OUT)108 b Fv(a)o(rra)o(y)p 416 1510 V 15 w(of)p 468
1510 V 16 w(statuses)276 b Fu(arra)o(y)14 b(of)f(status)i(ob)r(jects)g
(\(arra)o(y)f(of)f(Status\))75 1636 y Ft(int)23 b(MPI)p 245
1636 15 2 v 17 w(Testall\(int)g(count,)g(MPI)p 788 1636 V 16
w(Comm)p 900 1636 V 17 w(request)g(*array)p 1252 1636 V 16
w(of)p 1316 1636 V 17 w(requests,)g(int)g(*flag,)393 1693 y(MPI)p
468 1693 V 17 w(Status)g(*array)p 796 1693 V 16 w(of)p 860
1693 V 17 w(statuses\))75 1780 y(MPI)p 150 1780 V 17 w(TESTALL\(COUNT,)f
(ARRAY)p 645 1780 V 16 w(OF)p 709 1780 V 17 w(REQUESTS,)h(FLAG,)g(ARRAY)p
1228 1780 V 16 w(OF)p 1292 1780 V 17 w(STATUSES,)g(IERROR\))170
1837 y(LOGICAL)g(FLAG)170 1893 y(INTEGER)g(COUNT,)g(ARRAY)p
651 1893 V 17 w(OF)p 716 1893 V 17 w(REQUESTS\(*\),)170 1950
y(ARRAY)p 293 1950 V 17 w(OF)p 358 1950 V 17 w(STATUSES\(MPI)p
663 1950 V 15 w(STATUS)p 822 1950 V 17 w(SIZE,*\),)g(IERROR)166
2037 y FA(Returns)18 b Fv(\015ag)g(=)g(true)h FA(if)f(all)h(comm)o
(unications)g(asso)q(ciated)f(with)g(requests)g(in)h(the)f(arra)o(y)e(ha)o(v)
o(e)75 2094 y(completed.)30 b(In)19 b(this)f(case,)h(eac)o(h)f(status)g(en)o
(try)g(is)g(set)g(to)g(the)g(status)g(of)g(the)g(corresp)q(onding)h(com-)75
2150 y(m)o(unication.)32 b(All)21 b(comm)o(unication)e(ob)s(jects)g(are)g
(deallo)q(cated,)i(and)e(all)h(requests)f(are)g(set)f(to)h(n)o(ull.)75
2207 y(Otherwise,)k Fv(\015ag)e(=)g(false)h FA(is)f(returned,)i(no)e(request)
g(is)h(mo)q(di\014ed)g(and)f(the)h(v)m(alues)g(of)f(the)g(status)75
2263 y(en)o(tries)16 b(are)e(unde\014ned.)22 b(This)16 b(is)g(a)f(non)o(blo)q
(c)o(king)h(op)q(eration)g(that)e(returns)h(immediately)l(.)166
2321 y(Example:)75 2478 y Ft(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))
75 2534 y(IF\(rank)g(<)h(2\))123 2591 y(THEN)214 b(!)24 b(rank=0)f(or)g
(rank=1)170 2647 y(CALL)h(MPI_ISEND\(a,)e(n,)i(MPI_REAL,)e(2,)i(tag,)f(comm,)
g(request,)g(ierr\))170 2704 y(****)h(do)f(some)h(computation)e(to)i(mask)f
(latency)g(****)1967 46 y Fy(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 Fw(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b FA(29)170 49 y Ft(CALL)24 b(MPI_WAIT\(request,)d(status,)i(ierr\))123
106 y(ELSE)214 b(!)24 b(rank=2)170 162 y(CALL)g(MPI_IRECV\(a,)e(n,)i
(MPI_REAL,)e(0,)i(tag,)f(comm,)g(request_list\(0\),)f(ierr\))170
219 y(CALL)i(MPI_IRECV\(b,)e(n,)i(MPI_REAL,)e(1,)i(tag,)f(comm,)g
(request_list\(1\),)f(ierr\))170 275 y(****)i(do)f(some)h(computation)e(to)i
(mask)f(latency)g(****)170 332 y(CALL)h(MPI_WAITANY\(2,)e(request_list,)g
(index,)h(status,)g(ierr\))170 388 y(IF\(index.EQ.0\))218 444
y(THEN)266 501 y(****)g(handle)g(message)g(from)g(process)g(0)h(****)266
557 y(CALL)f(MPI_WAIT\(request_list\(1\),)e(status,)i(ierr\))266
614 y(****)g(handle)g(message)g(from)g(process)g(1)h(****)218
670 y(ELSE)266 727 y(****)f(handle)g(message)g(from)g(process)g(1)h(****)266
783 y(CALL)f(MPI_WAIT\(request_list\(0\),)e(status,)i(ierr\))266
840 y(****)g(handle)g(message)g(from)g(process)g(0)h(****)170
896 y(END)g(IF)75 953 y(END)f(IF)166 1055 y FA(The)13 b(calls)h(in)o(tro)q
(duced)f(in)h(this)f(subsection)h(can)f(b)q(e)g(used)g(to)f(w)o(ait)g(or)h
(test)f(for)g(the)h(completion)g(of)75 1111 y(an)h(arbitrary)f(mix)h(of)f
(non)o(blo)q(c)o(king)i(comm)o(unication)f(calls,)h(including)h(a)e(mix)g(of)
f(sends)h(and)g(receiv)o(es)75 1168 y(and)h(of)g(an)o(y)g(additional)i(non)o
(blo)q(c)o(king)f(comm)o(unication)g(calls)g(pro)o(vided)g(b)o(y)f(MPI.)166
1226 y(An)21 b Fv(a)o(rra)o(y)p 344 1226 14 2 v 14 w(of)p 395
1226 V 16 w(requests)h FA(argumen)o(t)e(that)g(is)g(passed)h(to)f(an)o(y)g
(of)g(these)g(functions)h(ma)o(y)f(con)o(tain)75 1283 y(n)o(ull)e(en)o
(tries.)24 b(These)17 b(en)o(tries)g(are)g(ignored)g(and)f(the)h(call)h
(executes)f(as)f(if)h(it)g(w)o(as)f(supplied)j(an)d(arra)o(y)75
1339 y(of)h(requests)f(con)o(taining)i(only)g(the)f(non-n)o(ull)i(requests)e
(for)f(activ)o(e)h(comm)o(unications)h(\(ho)o(w)o(ev)o(er,)e(see)75
1395 y(paragraph)f(b)q(elo)o(w)i(on)f Fv(a)o(rra)o(y)p 585
1395 V 15 w(of)p 637 1395 V 16 w(statuses)p FA(\).)24 b(As)16
b(a)g(request)g(in)h Fv(a)o(rra)o(y)p 1271 1395 V 15 w(of)p
1323 1395 V 16 w(requests)h FA(is)f(set)e(to)h(n)o(ull)h(when)75
1452 y(the)f(corresp)q(onding)h(op)q(eration)f(completes,)h(this)f(allo)o(ws)
g(to)g(reuse)g(the)g(same)g(arra)o(y)e(for)i(completing)75
1508 y(in)g(successiv)o(e)f(calls)h(the)f(op)q(erations)g(asso)q(ciated)g
(with)g(this)g(arra)o(y)l(.)k(Th)o(us,)14 b(the)h(last)g(example)g(can)g(b)q
(e)75 1565 y(rewritten)g(as)g(follo)o(ws:)75 1740 y Ft(CALL)23
b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 1797 y(IF\(rank)g(<)h(2\))123
1853 y(THEN)214 b(!)24 b(rank=0)f(or)g(rank=1)170 1909 y(CALL)h
(MPI_ISEND\(a,)e(n,)i(MPI_REAL,)e(2,)i(tag,)f(comm,)g(request,)g(ierr\))170
1966 y(CALL)h(MPI_WAIT\(request,)d(status,)i(ierr\))123 2022
y(ELSE)214 b(!)24 b(rank=2)170 2079 y(CALL)g(MPI_IRECV\(a,)e(n,)i(MPI_REAL,)e
(0,)i(tag,)f(comm,)g(request_list\(0\),)f(ierr\))170 2135 y(CALL)i
(MPI_IRECV\(b,)e(n,)i(MPI_REAL,)e(1,)i(tag,)f(comm,)g(request_list\(1\),)f
(ierr\))170 2192 y(CALL)i(MPI_WAITANY\(2,)e(request_list,)g(index,)h(status,)
g(ierr\))266 2248 y(****)g(handle)g(first)g(arriving)g(message)47
b(****)170 2305 y(CALL)24 b(MPI_WAITANY\(2,)e(request_list,)g(index,)h
(status,)g(ierr\))266 2361 y(****)g(handle)g(second)g(arriving)g(message)47
b(****)166 2478 y FA(A)23 b(call)13 b(to)d Fv(MPI)p 439 2478
V 16 w(W)l(AIT)l(ALL)h FA(and)h(a)f(successful)i(call)g(to)e
Fv(MPI)p 1191 2478 V 16 w(TEST)l(ALL)g FA(will)i(set)e(all)i(status)e(en)o
(tries)69 b Fk(\()75 2534 y FA(in)14 b Fv(a)o(rra)o(y)p 224
2534 V 14 w(of)p 275 2534 V 16 w(statuses)p FA(,)i(including)g(those)d(that)f
(corresp)q(ond)i(to)e(n)o(ull)j(requests)e(in)h Fv(a)o(rra)o(y)p
1567 2534 V 14 w(of)p 1618 2534 V 16 w(requests)p FA(;)i(the)75
2591 y(en)o(tries)11 b(are)f(set)h(to)f(the)g(parameters)g(of)g(the)h
(completing)h(request,)f(if)g(the)f(request)h(is)g(non-n)o(ull,)i(or)d(set)h
(to)75 2647 y(the)g(parameters)g(of)g(a)g(\\n)o(ull)h(comm)o(unication")g(\()
p Fv(tag)f FA(=)h Fo(MPI)p 1121 2647 13 2 v 14 w(ANY)p 1220
2647 V 15 w(T)m(A)o(G)p FA(,)e Fv(source)h FA(=)h Fo(MPI)p
1590 2647 V 14 w(ANY)p 1689 2647 V 15 w(SOURCE)p FA(,)75 2704
y Fv(count)k(=)g(0)p FA(\))f(if)g(the)g(request)h(is)f(n)o(ull.)-32
46 y Fy(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 FA(30)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y FA(If)21 b Fv(MPI)p
302 49 14 2 v 16 w(W)l(AIT)l(ANY)h FA(is)f(called)h(with)f(an)g(empt)o(y)g
Fv(a)o(rra)o(y)p 1144 49 V 14 w(of)p 1195 49 V 16 w(requests)i
FA(argumen)o(t)d(\(i.e.,)h(an)g(arra)o(y)75 106 y(of)h(length)h(zero,)h(or)e
(an)h(arra)o(y)e(with)i(all)g(en)o(tries)g(n)o(ull\))h(then)f(it)f(returns)h
(immediately)h(with)f(the)75 162 y(v)m(alue)d Fo(MPI)p 273
162 13 2 v 14 w(UNDEFINED)e FA(in)i Fv(index)p FA(;)i(no)c(status)h(is)g(up)q
(dated.)32 b Fv(MPI)p 1272 162 14 2 v 16 w(TEST)l(ANY)20 b
FA(with)f(an)g(empt)o(y)g Fv(a)o(r-)75 219 y(ra)o(y)p 136 219
V 15 w(of)p 188 219 V 16 w(requests)25 b FA(returns)d Fo(MPI)p
619 219 13 2 v 14 w(UNDEFINED)g FA(in)h Fv(index)g FA(and)g
Fv(\015ag)f(=)h(false)p FA(;)j(no)c(status)g(is)g(up)q(dated.)75
275 y Fv(MPI)p 160 275 14 2 v 16 w(W)l(AIT)l(ALL)15 b FA(with)h(an)f(empt)o
(y)g Fv(a)o(rra)o(y)p 781 275 V 14 w(of)p 832 275 V 16 w(requests)j
FA(argumen)o(t)c(returns)i(immediately)h(with)e(all)i(sta-)75
332 y(tuses)j(up)q(dated)g(to)f(the)h(status)e(of)i(a)f(n)o(ull)i(comm)o
(unication.)34 b Fv(MPI)p 1283 332 V 15 w(TEST)l(ALL)20 b FA(with)g(an)f
(empt)o(y)h Fv(a)o(r-)75 388 y(ra)o(y)p 136 388 V 15 w(of)p
188 388 V 16 w(requests)f FA(argumen)o(t)d(returns)h Fv(\015ag=true)h
FA(and)f(up)q(dates)g(all)h(statuses)e(to)h(the)g(status)f(of)g(a)h(n)o(ull)
75 444 y(comm)o(unication.)75 561 y Fv(Prop)q(osal)e(fo)o(r)f(additional)i
(function)-28 599 y Fk(\))75 694 y Fv(MPI)p 160 694 V 16 w
(TESTSOME\(incount,)h(a)o(rra)o(y)p 697 694 V 14 w(of)p 748
694 V 16 w(requests,)g(outcount,)f(a)o(rra)o(y)p 1237 694 V
15 w(of)p 1289 694 V 16 w(indices,)g(a)o(rra)o(y)p 1554 694
V 14 w(of)p 1605 694 V 16 w(statuses\))117 771 y Fu(IN)155
b Fv(incount)448 b Fu(length)14 b(of)f(arra)o(y)p 1176 771
13 2 v 15 w(of)p 1225 771 V 14 w(requests)j(\(in)o(teger\))117
842 y(INOUT)62 b Fv(a)o(rra)o(y)p 416 842 14 2 v 15 w(of)p
468 842 V 16 w(requests)272 b Fu(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e
(of)f(handle\))117 913 y(OUT)108 b Fv(outcount)420 b Fu(n)o(um)o(b)q(er)13
b(of)h(completed)f(requests)j(\(in)o(teger\))117 984 y(OUT)108
b Fv(a)o(rra)o(y)p 416 984 V 15 w(of)p 468 984 V 16 w(indices)299
b Fu(arra)o(y)12 b(of)f(indices)h(of)f(op)q(erations)g(that)h(completed)f
(\(arra)o(y)h(of)905 1041 y(in)o(teger\))117 1112 y(OUT)108
b Fv(a)o(rra)o(y)p 416 1112 V 15 w(of)p 468 1112 V 16 w(statuses)276
b Fu(arra)o(y)15 b(of)g(status)h(ob)r(jects)g(for)f(op)q(erations)g(that)h
(completed)905 1168 y(\(arra)o(y)e(of)f(Status\))75 1293 y
Ft(int)23 b(MPI)p 245 1293 15 2 v 17 w(Testsome\(int)f(incount,)h(MPI)p
859 1293 V 17 w(Comm)p 972 1293 V 17 w(request)g(*array)p 1324
1293 V 16 w(of)p 1388 1293 V 17 w(requests,)393 1349 y(int)h(*outcount,)e
(int)i(*array)p 994 1349 V 16 w(of)p 1058 1349 V 17 w(indices,)393
1406 y(MPI)p 468 1406 V 17 w(Status)f(*array)p 796 1406 V 16
w(of)p 860 1406 V 17 w(statuses\))75 1492 y(MPI)p 150 1492
V 17 w(TESTSOME\(INCOUNT,)e(ARRAY)p 716 1492 V 17 w(OF)p 781
1492 V 17 w(REQUESTS,)h(OUTCOUNT,)h(ARRAY)p 1395 1492 V 16
w(OF)p 1459 1492 V 17 w(INDICES,)393 1549 y(ARRAY)p 516 1549
V 17 w(OF)p 581 1549 V 17 w(STATUSES,)f(IERROR\))170 1605 y(INTEGER)h
(INCOUNT,)g(ARRAY)p 699 1605 V 17 w(OF)p 764 1605 V 17 w(REQUESTS\(*\),)f
(OUTCOUNT,)g(ARRAY)p 1449 1605 V 17 w(OF)p 1514 1605 V 17 w(INDICES\(*\),)170
1661 y(ARRAY)p 293 1661 V 17 w(OF)p 358 1661 V 17 w(STATUSES\(MPI)p
663 1661 V 15 w(STATUS)p 822 1661 V 17 w(SIZE,*\),)h(IERROR)166
1748 y FA(Returns)c(in)h Fv(outcount)h FA(the)e(n)o(um)o(b)q(er)h(of)e
(requests)h(from)f(the)i(list)f Fv(a)o(rra)o(y)p 1445 1748
14 2 v 15 w(of)p 1497 1748 V 16 w(requests)i FA(that)d(ha)o(v)o(e)75
1804 y(completed.)i(Returns)14 b(in)g(the)f(\014rst)g Fv(outcount)i
FA(lo)q(cations)f(of)f(the)g(arra)o(y)f Fv(a)o(rra)o(y)p 1411
1804 V 14 w(of)p 1462 1804 V 16 w(indices)j FA(the)e(indices)i(of)75
1861 y(these)j(op)q(erations)f(\(index)h(within)h(the)e(arra)o(y)g
Fv(a)o(rra)o(y)p 1003 1861 V 14 w(of)p 1054 1861 V 16 w(requests)p
FA(;)j(the)e(arra)o(y)e(is)i(indexed)h(from)d(zero,)75 1917
y(b)q(oth)f(in)h(C)e(and)h(F)l(ortran\).)k(Returns)c(on)g(the)g(\014rst)f
Fv(outcount)j FA(lo)q(cations)f(of)e(the)h(arra)o(y)e Fv(a)o(rra)o(y)p
1697 1917 V 15 w(of)p 1749 1917 V 16 w(status)75 1974 y FA(the)i(status)g
(for)f(these)i(completed)g(op)q(erations.)166 2113 y Fq(Discussion:)32
b Fu(Alternativ)o(e)13 b(c)o(hoice:)18 b(Returns)13 b(in)f
Fo(a)o(rra)o(y)p 1078 2113 13 2 v 15 w(of)p 1127 2113 V 14
w(status[i])g Fu(the)h(status)h(of)d(the)i Fo(i)p Fu(-th)g(request,)g(for)75
2169 y(eac)o(h)h(request)i(that)e(completed.)166 2308 y FA(This)i(is)f(a)g
(non)o(blo)q(c)o(king)i(op)q(eration)e(that)g(returns)g(immediately)l(.)166
2365 y(The)f(execution)h(of)f Fv(MPI)p 596 2365 14 2 v 16 w
(TESTSOME\(incount,)i(a)o(rra)o(y)p 1132 2365 V 14 w(of)p 1183
2365 V 16 w(requests,)h(outcount,)e(a)o(rra)o(y)p 1671 2365
V 15 w(of)p 1723 2365 V 16 w(indices,)75 2421 y(status\))k
FA(has)d(the)i(same)e(e\013ect)h(as)g(the)g(execution)h(of)e
Fv(MPI)p 1104 2421 V 16 w(TEST\(a)o(rra)o(y)p 1347 2421 V 14
w(of)p 1398 2421 V 16 w(requests[i],)k(\015ag,)d(status\))p
FA(,)75 2478 y(for)h Fv(i=0,)g(1)h(,...,)e(count-1)p FA(,)j(in)f(some)f
(arbitrary)g(order.)29 b(Whenev)o(er)19 b(a)f(call)h(succeeds,)h(the)f(v)m
(alue)g(of)f Fv(i)75 2534 y FA(is)h(app)q(ended)g(to)f Fv(a)o(rra)o(y)p
489 2534 V 14 w(of)p 540 2534 V 16 w(indices)i FA(and)e(the)g(status)f(of)h
(the)g(succeeding)i(op)q(eration)e(is)h(app)q(ended)h(to)75
2591 y Fv(a)o(rra)o(y)p 173 2591 V 15 w(of)p 225 2591 V 16
w(statuses)p FA(.)166 2647 y(If)c Fv(MPI)p 297 2647 V 16 w(TESTSOME)g
FA(is)g(called)h(with)f(an)g(empt)o(y)f Fv(a)o(rra)o(y)p 1145
2647 V 15 w(of)p 1197 2647 V 16 w(requests)i FA(argumen)o(t)e(then)h(it)g
(returns)75 2704 y(immediatelly)h(with)f Fv(outcount)h(=)f(0)p
FA(.)1967 46 y Fy(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 Fw(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b FA(31)189 49 y Fr(R)n(ationale.)70 b FA(The)21 b(use)f(of)g
Fv(MPI)p 785 49 14 2 v 16 w(TESTSOME)h FA(a)o(v)o(oids)f(the)h(o)o(v)o
(erhead)f(of)f(rep)q(eated)i(calls)h(to)189 106 y Fv(MPI)p
274 106 V 15 w(TEST)l(ANY)14 b FA(that)f(w)o(ould)g(b)q(e)g(otherwise)g
(required.)20 b(Also,)14 b(it)f(allo)o(ws)g(to)f(ac)o(hiev)o(e)h(some)g
(fair-)189 162 y(ness)g(in)h(the)f(servicing)i(of)e(p)q(ending)i(comm)o
(unications.)k(A)14 b(serv)o(er)e(that)h(uses)g Fv(MPI)p 1622
162 V 16 w(TESTSOME)189 219 y FA(to)k(w)o(ait)g(on)g(service)h(requests)g
(from)f(all)h(its)g(clien)o(t)h(will)g(not)e(starv)o(e)f(an)o(y)i(clien)o(t.)
28 b(The)17 b(formal)189 275 y(requiremen)o(t)c(is)g(that)e(is)i(a)f(comm)o
(unication)h(is)g(enabled,)h(and)f Fv(MPI)p 1360 275 V 16 w(TESTSOME)g
FA(is)g(rep)q(eatedly)189 332 y(called,)j(then)g(the)f(enabled)i(op)q
(eration)e(will)i(ev)o(en)o(tually)f(complete.)21 b(\()p Fr(End)15
b(of)i(r)n(ationale.)p FA(\))75 509 y Fv(Alternative)f(p)o(rop)q(osal)189
615 y Fr(R)n(ationale.)457 598 y Fj(1)498 615 y FA(Some)g(applications)i(ma)o
(y)d(p)q(ost)g(a)h(large)g(n)o(um)o(b)q(er)g(of)g(receiv)o(es)g(\(10's)f({)h
(100's\))67 b Fk(\()189 671 y FA(and)18 b(w)o(ait)f(for)g(the)h(completion)h
(of)e(an)o(y)l(.)27 b(This,)19 b(in)g(order)e(to)g(tak)o(e)g(adv)m(an)o(tage)
g(of)h(ready)f(send)189 728 y(proto)q(col)k(and)g(amortize)g(for)f(load)h(im)
o(balances.)39 b(The)21 b(use)g(of)g(a)f(sequen)o(tial)j(structure)d(\(an)189
784 y(arra)o(y)12 b(of)h(requests\))g(is)h(ine\016cien)o(t)i(as)d(it)h(has)f
(to)g(b)q(e)h(searc)o(hed)g(sequen)o(tially)h(for)e(eac)o(h)h(call.)20
b(This)189 840 y(results)d(in)h(a)f(linear)h(o)o(v)o(erhead)f(p)q(er)g(in)o
(v)o(o)q(cation)h(and)f(a)g(total)f(of)h Fi(O)q FA(\()p Fi(n)1429
824 y Fj(2)1447 840 y FA(\))g(time)h(for)e(handling)j Fi(n)189
897 y FA(comm)o(unications.)k(Instead,)17 b(if)f(the)h(list)g(of)f(requests)g
(is)h(an)f(opaque)g(MPI)g(ob)s(ject,)g(then)g(more)189 953
y(e\016cien)o(t)k(data)f(structures)g(can)h(b)q(e)g(used,)h(reducing)g(the)f
(o)o(v)o(erhead)f(p)q(er)h(comm)o(unication)h(to)189 1010 y
Fi(O)q FA(\(log)8 b(log)g Fi(n)p FA(\),)20 b(where)g Fi(n)h
FA(is)f(the)g(total)f(size)i(of)e(the)h(lists)h(\(constan)o(t)e(time)h(is)g
(p)q(ossible,)j(if)d(the)189 1066 y(lists)14 b(are)g(disjoin)o(t\).)20
b(Also,)14 b(if)h(the)f(list)h(of)e(requests)h(is)h(an)f(opaque)g(ob)s(ject,)
f(one)i(ma)o(y)e(reconsider)189 1123 y(the)20 b(decision)j(to)d(ha)o(v)o(e)g
(functions)h(that)f(complete)h(comm)o(unications)h(n)o(ullify)g(nonp)q
(ersisten)o(t)189 1179 y(requests:)d(this)d(b)q(eha)o(vior)g(is)g(essen)o
(tial)g(only)f(for)g(arra)o(y)f(of)h(requests.)189 1275 y(An)d(in)o(terface)h
(whic)o(h)g(allo)o(ws)g(incremen)o(tal)g(mo)q(di\014cations)h(to)e(these)g
(lists)h(of)f(requests)h(is)g(prefer-)189 1331 y(able)j(to)e(rep)q(eated)i
(uses)g(of)e(a)h(commit-lik)o(e)i(function)f(on)f(a)g(static)g(arra)o(y)f
(since)j(these)e(lists)h(will)189 1387 y(c)o(hange)11 b(gradually)g(in)h(man)
o(y)e(applications)j(\(e.g.)k(n-b)q(o)q(dy)12 b(tree)f(algorithm\))g(\()p
Fr(End)g(of)i(r)n(ationale.)p FA(\))166 1544 y(A)23 b(new)f(opaque)h(ob)s
(ject,)h(a)e Fo(collection)i FA(is)f(added)g(to)f(MPI.)g(The)h(functions)h
Fv(MPI)p 1648 1544 V 15 w(W)l(AIT)l(ANY)p FA(,)75 1601 y Fv(MPI)p
160 1601 V 16 w(W)l(AIT)l(ALL)p FA(,)17 b Fv(MPI)p 477 1601
V 16 w(TEST)l(ANY)j FA(and)e Fv(MPI)p 888 1601 V 16 w(TEST)l(ALL)g
FA(accept)h(a)f Fv(collection)g FA(argumen)o(t,)g(whic)o(h)h(is)75
1657 y(a)i(handle)i(to)e(a)g(set)g(of)g(requests,)i(instead)f(of)f(the)g
Fv(a)o(rra)o(y)p 1113 1657 V 15 w(of)p 1165 1657 V 16 w(requests)j
FA(argumen)o(t)c(they)i(ha)o(v)o(e)f(no)o(w.)75 1713 y(Whenev)o(er)13
b(a)f(nonp)q(ersisten)o(t)h(request)f(is)h(satis\014ed)f(b)o(y)h(a)e(call)j
(to)e Fv(MPI)p 1282 1713 V 15 w(W)l(AIT)l(ANY)i FA(or)d Fv(MPI)p
1646 1713 V 16 w(TEST)l(ANY)p FA(,)75 1770 y(it)16 b(is)g(dropp)q(ed)h(from)e
(the)g(collection.)23 b(The)16 b(user)g(sp)q(eci\014es)h(an)f(index)h(for)e
(eac)o(h)h(item)g(in)g(a)g(collection.)75 1826 y(When)f(a)f(call)h(to)f
Fv(MPI)p 466 1826 V 16 w(W)l(AIT)p 595 1826 V 16 w(ANY)h FA(or)f(other)g
(similar)i(function)f(satis\014es)f(a)g(request,)h(then)f(the)h(index)75
1883 y(asso)q(ciated)d(with)g(this)h(request)e(is)i(returned)f(b)o(y)g(the)g
(call.)20 b(This)12 b(index)h(can)f(b)q(e)h(an)f(address)g(\(a)f(p)q(oin)o
(ter\))75 1939 y(in)16 b(C,)f(and)g(can)g(b)q(e)h(used)g(directly)h(to)d
(access)h(the)h(data)e(that)h(w)o(as)f(receiv)o(ed.)75 2053
y Fv(MPI)p 160 2053 V 16 w(COLLECTION)p 453 2053 V 16 w(CREA)l
(TE\(collection\))117 2140 y Fu(OUT)108 b Fv(collection)409
b Fu(collection)14 b(\(handle\))75 2275 y Ft(int)23 b(int)h(MPI)p
341 2275 15 2 v 17 w(Collection)p 598 2275 V 15 w(create\(MPI)p
853 2275 V 16 w(Comm)p 965 2275 V 17 w(collection)e(*collection\))75
2371 y(MPI)p 150 2371 V 17 w(COLLECTION)p 407 2371 V 16 w
(CREATE\(COLLECTION,)f(IERROR\))170 2428 y(INTEGER)i(COLLECTION,)g(IERROR)166
2524 y FA(The)14 b(function)h Fv(MPI)p 520 2524 14 2 v 16 w(COLLECTION)p
813 2524 V 16 w(CREA)l(TE)g FA(creates)f(a)f(collection)j(ob)s(ject)d(for)g
(m)o(ultiple)j(com-)75 2581 y(pletion)h(tests.)p 75 2661 720
2 v 127 2688 a Fy(1)144 2704 y Fx(Prop)q(osal)e(and)f(rationale)h(b)o(y)e
(Salmon)h(and)g(Edelsohn)-32 46 y Fy(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 FA(32)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fv(MPI)p 160 49 14
2 v 16 w(ADD)p 272 49 V 16 w(TO)p 352 49 V 17 w(COLLECTION\(request,)g
(collection,)g(k)o(ey\))117 142 y Fu(IN)155 b Fv(request)452
b Fu(comm)o(unication)11 b(request)k(\(handle\))117 249 y(INOUT)62
b Fv(collection)409 b Fu(collection)14 b(\(handle\))117 357
y(IN)155 b Fv(k)o(ey)525 b Fu(user-sp)q(eci\014ed)17 b(k)o(ey)d(for)f
(request)j(\(address\))75 497 y Ft(int)23 b(int)h(MPI)p 341
497 15 2 v 17 w(Add)p 430 497 V 16 w(to)p 494 497 V 17 w(collection\(MPI)p
847 497 V 16 w(Comm)p 959 497 V 16 w(request)f(request,)g(MPI)p
1453 497 V 17 w(Comm)p 1566 497 V 16 w(collection)393 553 y(collection,)g
(MPI)p 755 553 V 16 w(Aint)h(key\))75 656 y(MPI)p 150 656 V
17 w(ADD)p 239 656 V 17 w(TO)p 304 656 V 16 w(COLLECTION\(REQUEST,)e
(COLLECTION,)g(KEY,)h(IERROR\))170 712 y(INTEGER)g(REQUEST,)g(COLLECTION,)f
(KEY,)i(IERROR)166 815 y FA(The)15 b(function)g Fv(MPI)p 521
815 14 2 v 16 w(ADD)p 633 815 V 16 w(TO)p 713 815 V 17 w(COLLECTION)f
FA(inserts)h Fv(request)h FA(in)o(to)f(the)f(set)g(of)g(requests)h(asso-)75
871 y(ciated)h(with)f Fv(collection)h FA(and)f(asso)q(ciates)h(the)f(user-sp)
q(eci\014ed)i Fv(k)o(ey)f FA(with)f(it.)75 991 y Fv(MPI)p 160
991 V 16 w(DELETE)p 346 991 V 16 w(FROM)p 490 991 V 17 w
(COLLECTION\(request,)h(collection\))117 1084 y Fu(IN)155 b
Fv(request)452 b Fu(comm)o(unication)11 b(request)k(\(handle\))117
1191 y(INOUT)62 b Fv(collection)409 b Fu(collection)14 b(\(handle\))75
1331 y Ft(int)23 b(int)h(MPI)p 341 1331 15 2 v 17 w(Delete)p
502 1331 V 16 w(from)p 614 1331 V 17 w(collection\(MPI)p 967
1331 V 15 w(Comm)p 1078 1331 V 17 w(request)e(request,)393
1388 y(MPI)p 468 1388 V 17 w(Comm)p 581 1388 V 17 w(collection)g
(collection\))75 1490 y(MPI)p 150 1490 V 17 w(DELETE)p 311
1490 V 16 w(FROM)p 423 1490 V 17 w(COLLECTION\(REQUEST,)f(COLLECTION,)h
(IERROR\))170 1547 y(INTEGER)h(REQUEST,)g(COLLECTION,)f(IERROR)166
1649 y FA(The)d(function)g Fv(MPI)p 529 1649 14 2 v 16 w(DELETE)p
715 1649 V 16 w(FROM)p 859 1649 V 17 w(COLLECTION)f FA(remo)o(v)o(es)g
Fv(request)i FA(from)e(the)h(set)f(of)g(re-)75 1706 y(quests)d(asso)q(ciated)
h(with)f Fv(collection)p FA(.)75 1825 y Fv(MPI)p 160 1825 V
16 w(W)l(AIT)l(ANY\(collection,)h(value,)f(status\))117 1918
y Fu(INOUT)62 b Fv(collection)409 b Fu(collection)14 b(\(handle\))117
2025 y(OUT)108 b Fv(k)o(ey)525 b Fu(user-sp)q(eci\014ed)17
b(k)o(ey)d(\(address\))117 2133 y(OUT)108 b Fv(status)476 b
Fu(status)15 b(ob)r(ject)g(\(Status\))75 2273 y Ft(int)23 b(int)h(MPI)p
341 2273 15 2 v 17 w(Waitany\(MPI)p 622 2273 V 15 w(Comm)p
733 2273 V 17 w(collection)e(collection,)h(MPI)p 1371 2273
V 17 w(Aint)g(*key,)393 2329 y(MPI)p 468 2329 V 17 w(Status)g(*status\))75
2432 y(MPI)p 150 2432 V 17 w(WAITANY\(COLLECTION,)e(KEY,)i(STATUS,)g
(IERROR\))170 2488 y(INTEGER)g(COLLECTION,)g(KEY,)g(STATUS\(MPI)p
1010 2488 V 16 w(STATUS)p 1170 2488 V 16 w(SIZE\),)g(IERROR)166
2591 y FA(The)11 b(function)g Fv(MPI)p 513 2591 14 2 v 16 w(W)l(AIT)l(ANY)h
FA(w)o(aits)e(for)g(the)h(completion)h(of)e(one)h(request)g(from)f(the)h
(collection.)75 2647 y(If)k(this)g(request)g(is)h(nonp)q(ersisten)o(t,)f
(then)g(its)g(is)g(dropp)q(ed)h(from)e(the)h(collection.)22
b(The)15 b(k)o(ey)g(asso)q(ciated)75 2704 y(with)h(the)f(request)g(is)h
(returned)f(in)h Fv(k)o(ey)p FA(.)1967 46 y Fy(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 Fw(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b FA(33)75 49 y Fv(MPI)p 160 49 14 2 v 16 w(TEST)l(ANY\(collection,)16
b(\015ag,)f(k)o(ey)l(,)g(status\))117 129 y Fu(INOUT)62 b Fv(collection)409
b Fu(collection)14 b(\(handle\))117 209 y(OUT)108 b Fv(\015ag)518
b Fo(true)11 b Fu(if)d(one)i(of)f(the)h(op)q(erations)g(is)f(complete)g
Fo(false)p Fu(,)h(otherwise)905 266 y(\(logical\))117 346 y(OUT)108
b Fv(k)o(ey)525 b Fu(user-sp)q(eci\014ed)17 b(k)o(ey)d(\(address\))117
426 y(OUT)108 b Fv(status)476 b Fu(status)15 b(ob)r(ject)g(\(Status\))75
553 y Ft(int)23 b(int)h(MPI)p 341 553 15 2 v 17 w(Testany\(MPI)p
622 553 V 15 w(Comm)p 733 553 V 17 w(collection)e(collection,)h(int)g(*flag,)
g(MPI)p 1633 553 V 17 w(Aint)393 610 y(*key,)g(MPI)p 611 610
V 17 w(Status)g(*status\))75 699 y(MPI)p 150 699 V 17 w(TESTANY\(COLLECTION,)
e(FLAG,)i(KEY,)h(STATUS,)e(IERROR\))170 755 y(INTEGER)h(COLLECTION,)g(FLAG,)g
(KEY,)g(STATUS\(MPI)p 1153 755 V 16 w(STATUS)p 1313 755 V 16
w(SIZE\),)g(IERROR)166 844 y Fv(MPI)p 251 844 14 2 v 16 w(TEST)l(ANY)c
FA(returns)f Fv(\015ag)g(=)g(true)g FA(if)h(an)o(y)e(of)h(the)g(op)q
(erations)g(asso)q(ciated)g(with)g Fv(collection)75 901 y FA(has)f
(completed.)28 b(In)19 b(this)f(case,)f(it)h(returns)g(in)g
Fv(k)o(ey)g FA(the)f(user-sp)q(eci\014ed)j(v)m(alue)f(asso)q(ciated)f(with)g
(the)75 957 y(request)d(handle)g(whic)o(h)h(completed,)f(in)h
Fv(status)g FA(the)f(status)f(of)g(that)g(op)q(eration,)g(and)h(deallo)q
(cates)h(the)75 1014 y(asso)q(ciated)f(comm)o(unications)h(ob)s(ject)f(if)h
(ephemeral.)21 b(It)15 b(returns)g Fv(\015ag)g(=)g(false)p
FA(,)g(otherwise.)75 1120 y Fv(MPI)p 160 1120 V 16 w(W)l(AIT)l
(ALL\(collection,)g(a)o(rra)o(y)p 684 1120 V 14 w(of)p 735
1120 V 16 w(k)o(eys,)g(a)o(rra)o(y)p 953 1120 V 15 w(of)p 1005
1120 V 16 w(statuses\))117 1200 y Fu(INOUT)62 b Fv(collection)409
b Fu(collection)14 b(\(handle\))117 1280 y(OUT)108 b Fv(a)o(rra)o(y)p
416 1280 V 15 w(of)p 468 1280 V 16 w(k)o(eys)345 b Fu(arra)o(y)14
b(of)f(user-sp)q(eci\014ed)k(k)o(eys)d(\(arra)o(y)g(of)f(addresses\))117
1360 y(OUT)108 b Fv(a)o(rra)o(y)p 416 1360 V 15 w(of)p 468
1360 V 16 w(statuses)276 b Fu(arra)o(y)14 b(of)f(status)i(ob)r(jects)g
(\(arra)o(y)f(of)f(Status\))75 1487 y Ft(int)23 b(int)h(MPI)p
341 1487 15 2 v 17 w(Waitall\(MPI)p 622 1487 V 15 w(Comm)p
733 1487 V 17 w(collection)e(collection,)h(MPI)p 1371 1487
V 17 w(Aint)g(*array)p 1651 1487 V 16 w(of)p 1715 1487 V 17
w(keys,)393 1544 y(MPI)p 468 1544 V 41 w(Status)g(*array)p
820 1544 V 16 w(of)p 884 1544 V 17 w(statuses\))75 1633 y(MPI)p
150 1633 V 17 w(WAITALL\(COLLECTION,)e(ARRAY)p 764 1633 V 17
w(OF)p 829 1633 V 16 w(KEYS,)j(ARRAY)p 1109 1633 V 16 w(OF)p
1173 1633 V 17 w(STATUSES,)f(IERROR\))170 1689 y(INTEGER)g(COLLECTION,)g
(ARRAY)p 771 1689 V 16 w(OF)p 835 1689 V 17 w(KEYS,)g(ARRAY)p
1115 1689 V 17 w(OF)p 1180 1689 V 17 w(STATUSES\(MPI)p 1485
1689 V 15 w(STATUS)p 1644 1689 V 17 w(SIZE,*\),)170 1746 y(IERROR)166
1835 y FA(The)14 b(function)g Fv(MPI)p 519 1835 14 2 v 16 w(W)l(AIT)l(ALL)f
FA(blo)q(c)o(ks)h(un)o(til)h(all)f(comm)o(unication)g(op)q(erations)g(asso)q
(ciated)g(with)75 1891 y(the)g(requests)g(in)h Fv(collection)g
FA(complete.)20 b Fv(MPI)p 866 1891 V 16 w(W)l(AIT)l(ALL)13
b FA(returns)h(the)g(user-sp)q(eci\014ed)j(k)o(ey)d(asso)q(ciated)75
1948 y(with)21 b(eac)o(h)g(request)g(handle)h(in)f Fv(a)o(rra)o(y)p
764 1948 V 15 w(of)p 816 1948 V 16 w(k)o(eys)g FA(and)g(the)g(resp)q(ectiv)o
(e)g(status)f(of)g(eac)o(h)h(op)q(eration)g(in)75 2004 y Fv(a)o(rra)o(y)p
173 2004 V 15 w(of)p 225 2004 V 16 w(statuses)p FA(.)h(All)16
b(ephemeral)h(comm)o(unication)f(ob)s(jects)e(are)h(deallo)q(cated.)75
2110 y Fv(MPI)p 160 2110 V 16 w(TEST)l(ALL\(collection,)g(\015ag,)g(a)o(rra)o
(y)p 782 2110 V 14 w(of)p 833 2110 V 16 w(k)o(eys,)g(a)o(rra)o(y)p
1051 2110 V 15 w(of)p 1103 2110 V 16 w(statuses\))117 2190
y Fu(INOUT)62 b Fv(collection)409 b Fu(collection)14 b(\(handle\))117
2271 y(OUT)108 b Fv(\015ag)518 b Fo(true)15 b Fu(if)e(all)g(of)g(the)i(op)q
(erations)f(are)g(complete)f(\(logical\))117 2351 y(OUT)108
b Fv(a)o(rra)o(y)p 416 2351 V 15 w(of)p 468 2351 V 16 w(k)o(eys)345
b Fu(arra)o(y)14 b(of)f(user-sp)q(eci\014ed)k(k)o(eys)d(\(arra)o(y)g(of)f
(addresses\))117 2431 y(OUT)108 b Fv(a)o(rra)o(y)p 416 2431
V 15 w(of)p 468 2431 V 16 w(statuses)276 b Fu(arra)o(y)14 b(of)f(status)i(ob)
r(jects)g(\(arra)o(y)f(of)f(Status\))75 2558 y Ft(int)23 b(int)h(MPI)p
341 2558 15 2 v 17 w(Testall\(MPI)p 622 2558 V 15 w(Comm)p
733 2558 V 17 w(collection)e(collection,)h(int)g(*flag,)g(MPI)p
1633 2558 V 17 w(Aint)393 2615 y(*array)p 540 2615 V 17 w(of)p
605 2615 V 16 w(keys,)h(MPI)p 837 2615 V 16 w(Status)f(*array)p
1164 2615 V 17 w(of)p 1229 2615 V 17 w(statuses\))75 2704 y(MPI)p
150 2704 V 17 w(TESTALL\(COLLECTION,)e(FLAG,)i(ARRAY)p 907
2704 V 17 w(OF)p 972 2704 V 17 w(KEYS,)g(ARRAY)p 1252 2704
V 16 w(OF)p 1316 2704 V 17 w(STATUSES,)g(IERROR\))-32 46 y
Fy(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32 328
y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40 611
y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119
y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627
y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40
2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 34 34
bop 75 -100 a FA(34)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)170 49 y Ft(INTEGER)23 b(COLLECTION,)g(FLAG,)
g(ARRAY)p 914 49 15 2 v 16 w(OF)p 978 49 V 17 w(KEYS,)170 106
y(ARRAY)p 293 106 V 17 w(OF)p 358 106 V 17 w(STATUSES\(MPI)p
663 106 V 15 w(STATUS)p 822 106 V 17 w(SIZE,*\),)g(IERROR)166
192 y Fv(MPI)p 251 192 14 2 v 16 w(TEST)l(ALL)12 b FA(returns)g
Fv(\015ag)h(=)g(true)g FA(if)f(all)i(of)e(the)g(op)q(erations)h(asso)q
(ciated)g(with)f Fv(collection)h FA(ha)o(v)o(e)75 249 y(completed.)31
b(In)19 b(this)g(case,)g(it)f(returns)h(in)g(the)g(user-sp)q(eci\014ed)i(k)o
(ey)d(asso)q(ciated)h(with)f(eac)o(h)h(request)75 305 y(handle)f(in)f
Fv(a)o(rra)o(y)p 375 305 V 14 w(of)p 426 305 V 16 w(k)o(eys)g
FA(and)f(the)h(resp)q(ectiv)o(e)g(status)f(of)f(eac)o(h)i(op)q(eration)f(in)h
Fv(a)o(rra)o(y)p 1564 305 V 15 w(of)p 1616 305 V 16 w(statuses)p
FA(.)26 b(All)75 362 y(ephemeral)17 b(comm)o(unication)g(ob)s(jects)f(are)g
(deallo)q(cated.)25 b(It)16 b(returns)g Fv(\015ag)g(=)h(false)p
FA(,)f(otherwise.)23 b(This)75 418 y(is)16 b(a)f(non)o(blo)q(c)o(king)h(op)q
(erations)f(that)g(returns)g(immediately)l(.)75 522 y Fv(MPI)p
160 522 V 16 w(COLLECTION)p 453 522 V 16 w(SIZE\(collection,)g(count\))117
599 y Fu(IN)155 b Fv(collection)409 b Fu(collection)14 b(\(handle\))117
673 y(OUT)108 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(requests)i(in)d
(collection)g(\(in)o(teger\))75 797 y Ft(int)23 b(int)h(MPI)p
341 797 15 2 v 17 w(Collection)p 598 797 V 15 w(size\(MPI)p
805 797 V 17 w(Comm)p 918 797 V 16 w(collection)f(collection,int)f(*count\))
75 883 y(MPI)p 150 883 V 17 w(COLLECTION)p 407 883 V 16 w(SIZE\(COLLECTION,)f
(COUNT,)i(IERROR\))p Fv(I)p Ft(NTEGER)f(COLLECTION,)g(COUNT,)393
940 y(IERROR)166 1026 y Fv(MPI)p 251 1026 14 2 v 16 w(COLLECTION)p
544 1026 V 16 w(SIZE)f FA(returns)h(the)f(n)o(um)o(b)q(er)h(of)f(requests)h
(in)g(the)g(collection)h(for)e(whic)o(h)75 1083 y(there)16
b(is)h(an)f(incomplete)i(comm)o(unication.)24 b(The)16 b(coun)o(t)g(ma)o(y)g
(b)q(e)g(used)h(as)f(the)g(size)i(of)d(the)i(arra)o(y)e(to)75
1139 y(pass)g(to)g Fv(MPI)p 315 1139 V 15 w(TEST)l(ALL)h FA(and)f
Fv(MPI)p 706 1139 V 16 w(W)l(AIT)l(ALL)p FA(.)75 1243 y Fv(MPI)p
160 1243 V 16 w(COLLECTION)p 453 1243 V 16 w(FREE\(collection\))117
1320 y Fu(IN)155 b Fv(collection)409 b Fu(collection)14 b(\(handle\))75
1445 y Ft(int)23 b(int)h(MPI)p 341 1445 15 2 v 17 w(Collection)p
598 1445 V 15 w(free\(MPI)p 805 1445 V 17 w(Comm)p 918 1445
V 16 w(collection)f(collection\))75 1531 y(MPI)p 150 1531 V
17 w(COLLECTION)p 407 1531 V 16 w(FREE\(COLLECTION,)e(IERROR\))170
1588 y(INTEGER)i(COLLECTION,)g(IERROR)166 1674 y FA(The)12
b(function)g Fv(MPI)p 515 1674 14 2 v 16 w(COLLECTION)p 808
1674 V 16 w(FREE)h FA(deallo)q(cates)f(the)g(collection)h(ob)s(ject.)18
b(It)12 b(is)g(erroneous)75 1730 y(to)j(initiate)h(a)f(m)o(ultiple)i
(completion)f(test)f(with)h(a)e(collection)j(that)e(has)g(b)q(een)h(freed.)
166 1870 y Fq(Discussion:)34 b Fu(Some)13 b(\(less)h(p)q(o)o(w)o(erful\))g
(alternativ)o(es:)75 1926 y(Drop)f(the)g(k)o(ey:)18 b(the)13
b(user)h(will)e(need)h(to)g(use)h(message)e(tags,)h(in)f(order)i(to)f(iden)o
(tify)f(requests)j(\(to)e(the)g(least,)g(this)75 1982 y(requires)i
Fo(MPI)p 308 1982 13 2 v 14 w(GET)p 403 1982 V 15 w(T)m(A)o(G)e
Fu(to)h(w)o(ork)f(after)h(a)g(send,)g(to)q(o\).)75 2039 y(Drop)g(the)p
255 2039 V 29 w(ADD)f(and)p 459 2039 V 29 w(DELETE.)h(Basically)m(,)e(this)i
(amoun)o(ts)e(to)i(ha)o(ving)f(a)g(\\commit)p 1482 2039 V 12
w(arra)o(y")h(function.)75 2263 y FB(1.9)59 b(Prob)r(e)20 b(and)f(Cancel)75
2365 y FA(The)d Fv(MPI)p 254 2365 14 2 v 16 w(PROBE)g FA(and)g
Fv(MPI)p 605 2365 V 16 w(IPROBE)g FA(op)q(erations)g(allo)o(w)g(incoming)h
(messages)e(to)g(b)q(e)h(c)o(hec)o(k)o(ed)g(for,)75 2421 y(without)g
(actually)h(receiving)h(them.)k(The)17 b(user)f(can)g(then)h(decide)g(ho)o(w)
f(to)g(receiv)o(e)h(them,)f(based)g(on)75 2478 y(the)i(information)f
(returned)h(b)o(y)f(the)h(prob)q(e)g(\(basically)l(,)h(the)e(information)h
(returned)g(b)o(y)f Fv(status)p FA(\).)28 b(In)75 2534 y(particular,)16
b(the)g(user)g(ma)o(y)f(allo)q(cate)h(memory)f(for)g(the)h(receiv)o(e)h
(bu\013er,)e(according)h(to)f(the)h(length)g(of)75 2591 y(the)f(prob)q(ed)h
(message.)166 2647 y(The)i Fv(MPI)p 347 2647 V 16 w(CANCEL)g
FA(op)q(eration)g(allo)o(ws)g(p)q(ending)i(comm)o(unications)e(to)g(b)q(e)g
(canceled.)30 b(This)18 b(is)75 2704 y(required)i(for)f(clean)o(up.)33
b(P)o(osting)19 b(a)g(send)h(or)f(a)g(receiv)o(e)h(ties)f(up)h(user)f
(resources)h(\(send)f(or)g(receiv)o(e)1967 46 y Fy(1)1967 103
y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967
385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959
667 y(12)1959 724 y(13)1959 780 y(14)1959 836 y(15)1959 893
y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959 1119
y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345
y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570
y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796
y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022
y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248
y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474
y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699
y(48)p eop
%%Page: 35 35
bop 75 -100 a Fw(1.9.)34 b(PR)o(OBE)16 b(AND)f(CANCEL)1161
b FA(35)75 49 y(bu\013ers\),)14 b(and)i(a)f(cancel)h(ma)o(y)f(b)q(e)g(needed)
i(to)d(free)i(these)f(resources)g(gracefully)l(.)75 165 y Fv(MPI)p
160 165 14 2 v 16 w(IPROBE\(source,)h(tag,)f(comm)m(,)c(\015ag,)k(status\))
117 255 y Fu(IN)155 b Fv(source)468 b Fu(source)15 b(rank,)f(or)27
b Fo(MPI)p 1281 255 13 2 v 15 w(ANY)p 1381 255 V 14 w(SOURCE)13
b Fu(\(in)o(teger\))117 355 y(IN)155 b Fv(tag)526 b Fu(tag)14
b(v)n(alue)f(or)28 b Fo(MPI)p 1226 355 V 14 w(ANY)p 1325 355
V 15 w(T)m(A)o(G)12 b Fu(\(in)o(teger\))117 455 y(IN)155 b
Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117 555 y(OUT)108
b Fv(\015ag)518 b Fu(\(logical\))117 655 y(OUT)108 b Fv(status)476
b Fu(status)15 b(ob)r(ject)g(\(Status\))75 792 y Ft(int)23
b(MPI)p 245 792 15 2 v 17 w(Iprobe\(int)g(source,)g(int)g(tag,)g(MPI)p
1002 792 V 17 w(Comm)g(comm,)h(int)f(*flag,)393 849 y(MPI)p
468 849 V 17 w(Status)g(*status\))75 948 y(MPI)p 150 948 V
17 w(IPROBE\(SOURCE,)f(TAG,)h(COMM,)g(FLAG,)g(STATUS,)g(IERROR\))170
1004 y(LOGICAL)g(FLAG)170 1061 y(INTEGER)g(SOURCE,)g(TAG,)h(COMM,)f
(STATUS\(MPI)p 1058 1061 V 16 w(STATUS)p 1218 1061 V 16 w(SIZE\),)g(IERROR)
166 1160 y Fv(MPI)p 251 1160 14 2 v 16 w(IPROBE)c FA(returns)f
Fv(\015ag)g(=)h(true)f FA(if)h(there)g(is)f(a)g(message)g(that)g(can)g(b)q(e)
h(receiv)o(ed)g(and)g(that)75 1216 y(matc)o(hes)i(the)g(pattern)f(sp)q
(eci\014ed)j(b)o(y)e(the)h(argumen)o(ts)e Fv(source)p FA(,)i
Fv(tag)p FA(,)g(and)g Fv(comm)m FA(.)34 b(It)21 b(returns)g
Fv(\015ag)75 1273 y(=)i(false)p FA(,)h(otherwise.)41 b(If)23
b Fv(MPI)p 633 1273 V 16 w(IPROBE)g FA(returns)f Fv(\015ag)g(=)h(true)p
FA(,)h(then)f(the)f(status)g(ob)s(ject)g(can)g(b)q(e)75 1329
y(subsequen)o(tly)c(queried)g(using)g(the)f(functions)h(describ)q(ed)g(in)g
(section)g(1.3.1)d(to)h(\014nd)i(the)f(source,)g(tag)75 1385
y(and)f(length)h(of)f(the)g(message.)23 b(The)16 b(v)m(alues)i(returned)e(b)o
(y)h(these)f(queries)h(are)f(the)g(same)g(v)m(alues)i(that)75
1442 y(w)o(ould)12 b(ha)o(v)o(e)e(b)q(een)j(returned)e(b)o(y)h(a)f(call)h(to)
e Fv(MPI)p 897 1442 V 16 w(RECV)i FA(executed)g(at)f(the)g(same)g(p)q(oin)o
(t)h(in)g(the)f(program.)75 1498 y(The)k(return)h(status)e(ob)s(ject)h(is)g
(unde\014ned)i(if)f Fv(\015ag)f(=)h(false)p FA(.)166 1567 y(A)d(subsequen)o
(t)i(receiv)o(e)f(executed)g(with)g(the)g(same)f(con)o(text,)g(and)g(the)h
(source)f(and)h(tag)f(returned)75 1624 y(b)o(y)g(querying)h(the)f(status)f
(returned)i(b)o(y)f Fv(MPI)p 858 1624 V 16 w(IPROBE)h FA(will)h(receiv)o(e)f
(the)f(message)f(that)h(w)o(as)f(matc)o(hed)75 1680 y(b)o(y)21
b(the)g(prob)q(e,)h(if)g(no)f(other)f(in)o(terv)o(ening)i(receiv)o(e)g(o)q
(ccurred)f(after)g(the)g(prob)q(e.)37 b(If)21 b(the)g(receiving)75
1737 y(pro)q(cess)e(is)h(m)o(ulti-threaded,)h(it)f(is)f(the)h(user's)f(resp)q
(onsibilit)o(y)i(to)e(ensure)h(that)e(the)i(last)f(condition)75
1793 y(holds.)166 1862 y(The)d Fv(source)h FA(argumen)o(t)e(of)h
Fv(MPI)p 738 1862 V 16 w(PROBE)h FA(can)f(b)q(e)h Fo(MPI)p
1140 1862 13 2 v 14 w(ANY)p 1239 1862 V 15 w(SOURCE)p FA(,)d(and)i(the)h
Fv(tag)f FA(argumen)o(t)75 1919 y(can)g(b)q(e)g Fo(MPI)p 298
1919 V 15 w(ANY)p 398 1919 V 14 w(T)m(A)o(G)p FA(,)f(so)g(that)g(one)h(can)g
(prob)q(e)g(for)f(messages)h(from)f(an)h(arbitrary)f(source)h(and/or)75
1975 y(with)g(an)g(arbitrary)f(tag.)20 b(Ho)o(w)o(ev)o(er,)15
b(a)g(sp)q(eci\014c)j(comm)o(unication)e(con)o(text)f(m)o(ust)g(pro)o(vided)i
(with)f(the)75 2031 y Fv(comm)9 b FA(argumen)o(t.)166 2100
y(A)32 b(call)17 b(to)e Fv(MPI)p 457 2100 14 2 v 16 w(PROBE)i
FA(will)g(not)f(matc)o(h)f(a)g(message)h(that)f(has)h(already)g(b)q(een)h
(matc)o(hed)e(b)o(y)h(a)69 b Fk(\()75 2157 y FA(previous)17
b(receiv)o(e)g(op)q(eration.)23 b(It)16 b(ma)o(y)f(matc)o(h)h(a)f(message)h
(that)f(has)h(b)q(een)h(matc)o(hed)f(b)o(y)g(a)g(previous)75
2213 y(prob)q(e)f(op)q(eration)g(or)f(b)o(y)h(a)f(concurren)o(t)h(receiv)o(e)
g(\(e.g.,)e(a)h(receiv)o(e)i(executed)g(b)o(y)e(a)g(concurren)o(t)h(thread)75
2270 y(in)h(a)f(m)o(ultithreaded)h(en)o(vironmen)o(t.)166 2421
y Fq(Implemen)o(tati)o(on)g(note:)47 b Fu(MPI)17 b(guaran)o(tees)h(that)f
(successiv)o(e)i(messages)d(sen)o(t)i(from)d(a)i(source)h(to)e(a)75
2478 y(destination)10 b(within)f(the)i(same)f(con)o(text)h(are)f(receiv)o(ed)
i(in)d(the)i(order)g(they)g(are)g(sen)o(t.)17 b(Th)o(us,)11
b(MPI)f(m)o(ust)g(supp)q(ort,)75 2534 y(either)k(explicitly)e(or)h
(implicitly)l(,)d(a)j(FIF)o(O)g(structure)i(to)e(manage)f(messages)h(b)q(et)o
(w)o(een)h(eac)o(h)g(pair)e(of)h(pro)q(cesses,)75 2591 y(for)k(eac)o(h)g(con)
o(text.)56 b Fo(MPI)p 516 2591 13 2 v 14 w(PROBE)16 b Fu(returns)i
(information)c(on)j(the)h(\014rst)g(matc)o(hing)d(message)i(in)f(this)h(FIF)o
(O;)75 2647 y(this)d(will)e(also)i(b)q(e)g(the)h(message)e(receiv)o(ed)i(b)o
(y)f(the)g(\014rst)h(subsequen)o(t)h(receiv)o(e)f(with)e(the)i(same)e
(source,)i(tag)e(and)75 2704 y(con)o(text)i(as)f(the)g(message)g(matc)o(hed)f
(b)o(y)g Fo(MPI)p 806 2704 V 15 w(PROBE)p Fu(.)-32 46 y Fy(1)-32
103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32
385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40
667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40
949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119 y(20)-40 1175
y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40
1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683
y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40 1909 y(34)-40
1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191
y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40 2417 y(43)-40
2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699
y(48)p eop
%%Page: 36 36
bop 75 -100 a FA(36)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fv(MPI)p 160 49 14
2 v 16 w(PROBE\(source,)g(tag,)f(comm)m(,)d(status\))117 126
y Fu(IN)155 b Fv(source)468 b Fu(source)15 b(rank,)f(or)27
b Fo(MPI)p 1281 126 13 2 v 15 w(ANY)p 1381 126 V 14 w(SOURCE)13
b Fu(\(in)o(teger\))117 200 y(IN)155 b Fv(tag)526 b Fu(tag)14
b(v)n(alue,)e(or)28 b Fo(MPI)p 1237 200 V 14 w(ANY)p 1336 200
V 15 w(T)m(A)o(G)13 b Fu(\(in)o(teger\))117 274 y(IN)155 b
Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117 347 y(OUT)108
b Fv(status)476 b Fu(status)15 b(ob)r(ject)g(\(Status\))75
472 y Ft(int)23 b(MPI)p 245 472 15 2 v 17 w(Probe\(int)g(source,)g(int)g
(tag,)h(MPI)p 979 472 V 16 w(Comm)g(comm,)f(MPI)p 1330 472
V 17 w(Status)g(*status\))75 558 y(MPI)p 150 558 V 17 w(PROBE\(SOURCE,)f
(TAG,)h(COMM,)g(STATUS,)g(IERROR\))170 615 y(INTEGER)g(SOURCE,)g(TAG,)h
(COMM,)f(STATUS\(MPI)p 1058 615 V 16 w(STATUS)p 1218 615 V
16 w(SIZE\),)g(IERROR)166 701 y Fv(MPI)p 251 701 14 2 v 16
w(PROBE)17 b FA(b)q(eha)o(v)o(es)g(lik)o(e)g Fv(MPI)p 769 701
V 16 w(IPROBE)g FA(except)g(that)f(it)g(is)h(a)f(blo)q(c)o(king)i(call)f
(whic)o(h)g(returns)75 757 y(only)f(after)e(a)h(matc)o(hing)g(message)g(has)g
(b)q(een)h(found.)166 814 y(The)10 b(MPI)g(implemen)o(tation)i(of)e
Fv(MPI)p 805 814 V 15 w(PROBE)i FA(and)e Fv(MPI)p 1145 814
V 16 w(IPROBE)h FA(needs)g(to)e(guaran)o(tee)h(progress:)75
870 y(if)17 b(a)g(call)h(to)e Fv(MPI)p 385 870 V 16 w(PROBE)i
FA(has)f(b)q(een)h(issued)g(b)o(y)f(a)f(pro)q(cess,)i(and)f(a)f(send)i(that)e
(matc)o(hes)h(the)f(prob)q(e)75 927 y(has)j(b)q(een)i(initiated)g(b)o(y)f
(some)f(pro)q(cess,)i(then)f(the)f(call)i(to)e Fv(MPI)p 1244
927 V 16 w(PROBE)i FA(will)g(return,)f(unless)h(the)75 983
y(message)c(is)i(receiv)o(ed)g(b)o(y)f(another)f(concurren)o(t)h(receiv)o(e)h
(op)q(eration)f(\(that)e(is)j(executed)g(b)o(y)e(another)75
1040 y(thread)e(at)g(the)h(probing)g(pro)q(cess\).)21 b(Similarly)l(,)d(if)e
(a)f(pro)q(cess)h(busy)g(w)o(aits)f(with)h Fv(MPI)p 1573 1040
V 16 w(IPROBE)g FA(and)g(a)75 1096 y(matc)o(hing)e(message)g(has)g(b)q(een)h
(issued,)g(then)f(the)g(call)h(to)f Fv(MPI)p 1179 1096 V 16
w(IPROBE)g FA(will)i(ev)o(en)o(tually)f(return)f Fv(\015ag)75
1153 y(=)i(true)f FA(unless)i(the)e(message)g(is)g(receiv)o(ed)i(b)o(y)e
(another)g(concurren)o(t)g(receiv)o(e)h(op)q(eration.)75 1256
y Fv(MPI)p 160 1256 V 16 w(CANCEL\(request\))117 1334 y Fu(IN)155
b Fv(request)452 b Fu(comm)o(unication)11 b(request)k(\(handle\))75
1458 y Ft(int)23 b(MPI)p 245 1458 15 2 v 17 w(Cancel\(MPI)p
502 1458 V 16 w(Comm)p 614 1458 V 17 w(request)g(*request\))75
1544 y(MPI)p 150 1544 V 17 w(CANCEL\(REQUEST,)f(IERROR\))170
1601 y(INTEGER)h(REQUEST,)g(IERROR)166 1687 y FA(A)17 b(call)h(to)e
Fv(MPI)p 444 1687 14 2 v 15 w(CANCEL)i FA(marks)e(for)g(cancellation)i(a)f(p)
q(ending)h(non)o(blo)q(c)o(king)g(comm)o(unication)75 1744
y(op)q(eration)f(\(send)g(or)g(receiv)o(e\).)25 b(The)18 b(cancel)g(call)g
(is)f(non)o(blo)q(c)o(king,)h(and)f(lo)q(cal.)27 b(It)17 b(returns)f(immedi-)
75 1800 y(ately)l(,)f(p)q(ossibly)i(b)q(efore)e(the)h(comm)o(unication)g(is)f
(actually)h(canceled.)166 1857 y(It)c(is)g(still)h(necessary)f(to)g(complete)
g(a)g(comm)o(unication)g(that)f(has)h(b)q(een)h(mark)o(ed)e(for)h
(cancellation,)75 1913 y(using)i(a)g(call)h(to)e Fv(MPI)p 450
1913 V 15 w(W)l(AIT)h FA(or)f Fv(MPI)p 728 1913 V 16 w(TEST)h
FA(\(or)f(an)o(y)g(of)g(the)h(deriv)o(ed)h(op)q(erations\).)k(If)14
b(the)g(op)q(eration)75 1970 y(has)e(b)q(een)h(canceled,)h(then)f
(information)f(to)g(that)f(e\013ect)h(will)i(b)q(e)f(returned)f(in)h(the)g
(status)e(argumen)o(t)g(of)75 2026 y(the)j(op)q(eration)g(that)f(completes)h
(the)g(comm)o(unication.)20 b(If)14 b(a)g(comm)o(unication)g(is)g(mark)o(ed)g
(for)f(cancel-)75 2083 y(lation,)j(then)h(a)e Fv(MPI)p 445
2083 V 16 w(W)l(AIT)h FA(call)h(for)f(that)f(comm)o(unication)h(is)h(guaran)o
(teed)e(to)h(return,)f(irresp)q(ectiv)o(e)75 2139 y(of)i(the)g(activities)i
(of)e(other)g(pro)q(cesses)h(\(i.e.,)f Fv(MPI)p 970 2139 V
16 w(W)l(AIT)g FA(b)q(eha)o(v)o(es)h(as)f(a)g(lo)q(cal)i(function\);)f
(similarly)75 2195 y(if)g Fv(MPI)p 204 2195 V 16 w(TEST)f FA(is)h(rep)q
(eatedly)g(called)h(in)f(a)f(busy)h(w)o(ait)e(lo)q(op)i(for)f(a)g(canceled)i
(comm)o(unication,)f(then)75 2252 y Fv(MPI)p 160 2252 V 16
w(TEST)d FA(will)i(ev)o(en)o(tually)f(b)q(e)g(successful.)166
2308 y(Either)j(the)f(cancellation)i(succeeds,)f(or)f(the)g(comm)o(unication)
h(succeeds,)h(but)e(not)g(b)q(oth.)29 b(If)18 b(a)75 2365 y(send)h(is)h(mark)
o(ed)e(for)g(cancellation,)j(then)e(it)g(m)o(ust)f(b)q(e)i(the)f(case)g(that)
f(either)h(the)g(send)g(completes)75 2421 y(normally)l(,)f(in)h(whic)o(h)f
(case)f(the)h(message)f(sen)o(t)g(w)o(as)g(receiv)o(ed)h(at)f(the)h
(destination)g(pro)q(cess,)g(or)f(that)75 2478 y(the)f(send)g(is)g
(successfully)i(canceled,)f(in)g(whic)o(h)f(case)g(no)g(part)f(of)g(the)h
(message)f(w)o(as)g(receiv)o(ed)i(at)e(the)75 2534 y(destination.)21
b(Then,)15 b(an)o(y)f(matc)o(hing)h(receiv)o(e)h(has)e(to)h(b)q(e)g
(satis\014ed)h(b)o(y)e(another)h(send.)20 b(If)15 b(a)g(receiv)o(e)g(is)75
2591 y(mark)o(ed)d(for)f(cancellation,)k(then)d(it)h(m)o(ust)e(b)q(e)i(the)g
(case)f(that)f(either)i(the)g(receiv)o(e)g(completes)g(normally)l(,)75
2647 y(or)18 b(that)g(the)g(receiv)o(e)i(is)f(successfully)h(canceled,)h(in)e
(whic)o(h)h(case)e(no)h(part)f(of)g(the)g(receiv)o(e)i(bu\013er)e(is)75
2704 y(altered.)i(Then,)c(an)o(y)e(matc)o(hing)i(send)g(has)f(to)f(b)q(e)i
(satis\014ed)g(b)o(y)f(another)g(receiv)o(e.)1967 46 y Fy(1)1967
103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967
385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959
667 y(12)1959 724 y(13)1959 780 y(14)1959 836 y(15)1959 893
y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959 1119
y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345
y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570
y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796
y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022
y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248
y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474
y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699
y(48)p eop
%%Page: 37 37
bop 75 -100 a Fw(1.10.)34 b(PERSISTENT)16 b(COMMUNICA)l(TION)g(REQUESTS)638
b FA(37)75 49 y Fv(MPI)p 160 49 14 2 v 16 w(TEST)p 290 49 V
16 w(CANCELLED\(status,)17 b(\015ag\))117 143 y Fu(IN)155 b
Fv(status)476 b Fu(status)15 b(ob)r(ject)g(\(Status\))117 250
y(OUT)108 b Fv(\015ag)518 b Fu(\(logical\))75 391 y Ft(int)23
b(MPI)p 245 391 15 2 v 17 w(Test)p 358 391 V 17 w(cancelled\(MPI)p
687 391 V 15 w(Status)g(status,)g(int)h(*flag\))75 494 y(MPI)p
150 494 V 17 w(TEST)p 263 494 V 16 w(CANCELLED\(STATUS,)e(FLAG,)h(IERROR\))
170 550 y(LOGICAL)g(FLAG)170 607 y(INTEGER)g(STATUS\(MPI)p
604 607 V 16 w(STATUS)p 764 607 V 17 w(SIZE\),)g(IERROR)166
709 y FA(Returns)12 b Fv(\015ag)f(=)h(true)g FA(if)f(the)h(comm)o(unication)g
(asso)q(ciated)f(with)h(the)g(status)e(ob)s(ject)h(w)o(as)f(canceled)75
766 y(successfully)l(.)27 b(In)18 b(suc)o(h)f(a)g(case,)g(all)g(other)g
(\014elds)h(of)e Fv(status)j FA(\(suc)o(h)e(as)g Fv(count)h
FA(or)e Fv(tag)p FA(\))h(are)f(unde\014ned.)75 822 y(Returns)i
Fv(\015ag)f(=)h(false)p FA(,)f(otherwise.)27 b(If)18 b(a)f(receiv)o(e)h(op)q
(eration)g(migh)o(t)f(b)q(e)h(canceled)h(then)e(one)h(should)75
879 y(call)41 b Fv(MPI)p 268 879 14 2 v 16 w(TEST)p 398 879
V 17 w(CANCELLED)20 b FA(\014rst,)h(to)e(c)o(hec)o(k)i(whether)f(the)g(op)q
(eration)h(w)o(as)e(canceled,)k(b)q(efore)75 935 y(c)o(hec)o(king)16
b(on)f(the)g(other)g(\014elds)i(of)d(the)i(return)f(status.)166
1090 y Fq(Implemen)o(tati)o(on)h(note:)51 b Fu(If)18 b(a)f(send)h(op)q
(eration)g(uses)h(an)e(\\eager")h(proto)q(col)f(\(data)h(is)f(transferred)75
1147 y(to)e(the)h(receiv)o(er)h(b)q(efore)f(a)g(matc)o(hing)d(receiv)o(e)k
(is)e(p)q(osted\),)i(then)f(the)g(cancelation)f(of)g(this)g(send)i(ma)o(y)c
(require)75 1203 y(comm)o(unication)j(with)j(the)h(in)o(tended)g(receiv)o
(er,)h(in)e(order)h(to)f(free)h(allo)q(cated)f(bu\013ers.)36
b(On)19 b(some)g(systems)75 1260 y(this)14 b(ma)o(y)e(require)j(an)f(in)o
(terrupt)h(to)e(the)i(in)o(tended)g(receiv)o(er.)20 b(Therefore,)15
b(it)e(is)h(exp)q(ected)i(that)e Fo(MPI)p 1705 1260 13 2 v
15 w(CANCEL)75 1316 y Fu(will)h(b)q(e)i(an)f(exp)q(ensiv)o(e)i(op)q(eration)e
(on)g(man)o(y)f(systems,)i(to)f(b)q(e)h(used)g(only)f(exceptionally)m(.)25
b(Note)17 b(that,)f(while)75 1373 y(comm)o(unication)f(ma)o(y)h(b)q(e)i
(needed)i(to)e(implemen)o(t)d Fo(MPI)p 1006 1373 V 14 w(CANCEL)p
Fu(,)i(this)h(is)g(still)f(a)h(lo)q(cal)f(op)q(eration,)i(in)e(the)75
1429 y(sense)h(that)e(its)g(completion)e(do)q(es)j(not)f(dep)q(end)h(on)f
(the)g(co)q(de)h(executed)h(b)o(y)e(other)g(pro)q(cesses.)27
b(If)16 b(pro)q(cessing)75 1486 y(is)d(required)i(on)e(another)h(pro)q(cess,)
h(this)e(should)g(b)q(e)i(transparen)o(t)f(to)f(the)i(application)d(\(hence)j
(the)f(need)g(for)f(an)75 1542 y(in)o(terrupt)i(and)e(an)h(in)o(terrupt)h
(handler\).)75 1861 y FB(1.10)60 b(P)n(ersistent)21 b(comm)o(unication)c
(requests)75 1994 y FA(Often)22 b(a)g(comm)o(unication)h(with)f(the)g(same)g
(argumen)o(t)f(list)i(is)g(rep)q(eatedly)g(executed)g(within)g(the)75
2050 y(inner)c(lo)q(op)g(of)e(a)h(parallel)i(computation.)28
b(In)18 b(suc)o(h)h(a)f(situation,)g(it)h(ma)o(y)e(b)q(e)i(p)q(ossible)g(to)f
(optimize)75 2107 y(the)h(comm)o(unication)g(b)o(y)g(binding)h(the)f(list)g
(of)g(comm)o(unication)g(argumen)o(ts)f(to)g(a)g(comm)o(unication)75
2163 y(request)11 b(once)g(and,)g(then,)h(rep)q(eatedly)g(using)g(the)f(comm)
o(unication)g(request)g(to)f(initiate)i(and)f(complete)75 2219
y(messages.)19 b(The)d(comm)o(unication)f(request)h(th)o(us)f(created)g(can)g
(b)q(e)h(though)o(t)e(of)h(as)f(a)h(comm)o(unication)75 2276
y(p)q(ort)c(or)f(a)h(\\half-c)o(hannel")h(.)18 b(It)12 b(do)q(es)f(not)f(pro)
o(vide)i(the)f(full)h(functionalit)o(y)h(of)d(a)h(con)o(v)o(en)o(tional)g(c)o
(hannel,)75 2332 y(since)i(there)g(is)g(no)f(binding)i(of)e(the)g(send)h(p)q
(ort)f(to)f(the)i(receiv)o(e)g(p)q(ort:)18 b(this)13 b(construct)f(allo)o(ws)
g(reduction)75 2389 y(of)18 b(the)g(o)o(v)o(erhead)f(for)h(comm)o(unication)g
(b)q(et)o(w)o(een)h(pro)q(cessor)e(and)h(comm)o(unication)h(con)o(troller,)g
(but)75 2445 y(not)13 b(of)g(the)g(o)o(v)o(erhead)g(for)g(comm)o(unication)h
(b)q(et)o(w)o(een)g(one)f(comm)o(unication)h(con)o(troller)g(and)g(another.)
166 2518 y(A)j(comm)o(unication)g(request)g(is)g(created)g(using)h(one)f(of)f
(the)h(four)f(follo)o(wing)i(calls.)26 b(These)17 b(calls)75
2574 y(in)o(v)o(olv)o(e)f(no)f(comm)o(unication.)166 2647 y(The)10
b(function)i Fv(MPI)p 513 2647 14 2 v 15 w(CREA)l(TE)p 697
2647 V 18 w(SEND)f FA(creates)f(a)g(comm)o(unication)h(request)f(for)g(a)g
(standard)g(mo)q(de)75 2704 y(send)16 b(op)q(eration,)f(and)g(binds)i(to)d
(it)i(all)g(the)f(argumen)o(ts)f(of)h(a)g(send)h(op)q(eration.)-32
46 y Fy(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32
328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40
611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119
y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627
y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40
2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 38 38
bop 75 -100 a FA(38)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fv(MPI)p 160 49 14
2 v 16 w(CREA)l(TE)p 345 49 V 17 w(SEND\(buf,)g(count,)g(datat)o(yp)q(e,)h
(dest,)f(tag,)f(comm)m(,)d(request\))117 140 y Fu(IN)155 b
Fv(buf)527 b Fu(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))
117 242 y(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f
(sen)o(t)i(\(in)o(teger\))117 345 y(IN)155 b Fv(datat)o(yp)q(e)424
b Fu(t)o(yp)q(e)15 b(of)e(eac)o(h)h(elemen)o(t)g(\(handle\))117
447 y(IN)155 b Fv(dest)511 b Fu(rank)14 b(of)f(destination)h(\(in)o(teger\))
117 549 y(IN)155 b Fv(tag)526 b Fu(message)14 b(tag)f(\(in)o(teger\))117
652 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117
754 y(OUT)108 b Fv(request)452 b Fu(comm)o(unication)11 b(request)k
(\(handle\))75 892 y Ft(int)23 b(MPI)p 245 892 15 2 v 17 w(Create)p
406 892 V 17 w(send\(void*)f(buf,)h(int)h(count,)f(MPI)p 1139
892 V 17 w(Datatype)f(datatype,)h(int)h(dest,)393 948 y(int)g(tag,)f(MPI)p
683 948 V 17 w(Comm)g(comm,)g(MPI)p 1034 948 V 17 w(Comm)p
1147 948 V 17 w(request)g(*request\))75 1048 y(MPI)p 150 1048
V 17 w(CREATE)p 311 1048 V 16 w(SEND\(BUF,)g(COUNT,)g(DATATYPE,)f(DEST,)i
(TAG,)f(COMM,)g(REQUEST,)g(IERROR\))170 1105 y(<type>)g(BUF\(*\))170
1161 y(INTEGER)g(REQUEST,)g(COUNT,)g(DATATYPE,)g(DEST,)g(TAG,)g(COMM,)g
(REQUEST,)g(IERROR)166 1261 y FA(The)16 b(function)h Fv(MPI)p
524 1261 14 2 v 16 w(CREA)l(TE)p 709 1261 V 17 w(RSEND)g FA(creates)e(a)h
(comm)o(unication)h(ob)s(ject)e(for)g(a)h(ready)g(mo)q(de)75
1318 y(send)g(op)q(eration.)75 1435 y Fv(MPI)p 160 1435 V 16
w(CREA)l(TE)p 345 1435 V 17 w(RSEND\(buf,)g(count,)g(datat)o(yp)q(e,)h(dest,)
f(tag,)f(comm)m(,)d(request\))117 1526 y Fu(IN)155 b Fv(buf)527
b Fu(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))117
1628 y(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f
(sen)o(t)i(\(in)o(teger\))117 1730 y(IN)155 b Fv(datat)o(yp)q(e)424
b Fu(t)o(yp)q(e)15 b(of)e(eac)o(h)h(elemen)o(t)g(\(handle\))117
1833 y(IN)155 b Fv(dest)511 b Fu(rank)14 b(of)f(destination)h(\(in)o(teger\))
117 1935 y(IN)155 b Fv(tag)526 b Fu(message)14 b(tag)f(\(in)o(teger\))117
2037 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117
2140 y(OUT)108 b Fv(request)452 b Fu(comm)o(unication)11 b(request)k
(\(handle\))75 2278 y Ft(int)23 b(MPI)p 245 2278 15 2 v 17
w(Create)p 406 2278 V 17 w(rsend\(void*)f(buf,)h(int)h(count,)f(MPI)p
1163 2278 V 17 w(Datatype)f(datatype,)h(int)g(dest,)393 2334
y(int)h(tag,)f(MPI)p 683 2334 V 17 w(Comm)g(comm,)g(MPI)p 1034
2334 V 17 w(Comm)p 1147 2334 V 17 w(request)g(*request\))75
2434 y(MPI)p 150 2434 V 17 w(CREATE)p 311 2434 V 16 w(RSEND\(BUF,)g(COUNT,)g
(DATATYPE,)f(DEST,)h(TAG,)h(COMM,)f(REQUEST,)g(IERROR\))170
2491 y(<type>)g(BUF\(*\))170 2547 y(INTEGER)g(COUNT,)g(DATATYPE,)g(DEST,)g
(TAG,)h(COMM,)f(REQUEST,)f(IERROR)166 2647 y FA(The)15 b(function)i
Fv(MPI)p 523 2647 14 2 v 15 w(CREA)l(TE)p 707 2647 V 18 w(SSEND)f
FA(creates)f(a)g(comm)o(unication)h(ob)s(ject)e(for)h(a)g(sync)o(hronous)75
2704 y(mo)q(de)g(send)h(op)q(eration.)1967 46 y Fy(1)1967 103
y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967 328 y(6)1967
385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959 611 y(11)1959
667 y(12)1959 724 y(13)1959 780 y(14)1959 836 y(15)1959 893
y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959 1119
y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959 1345
y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959 1570
y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959 1796
y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959 2022
y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959 2248
y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959 2474
y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959 2699
y(48)p eop
%%Page: 39 39
bop 75 -100 a Fw(1.10.)34 b(PERSISTENT)16 b(COMMUNICA)l(TION)g(REQUESTS)638
b FA(39)75 49 y Fv(MPI)p 160 49 14 2 v 16 w(CREA)l(TE)p 345
49 V 17 w(SSEND\(buf,)16 b(count,)g(datat)o(yp)q(e,)h(dest,)f(tag,)f(comm)m
(,)d(request\))117 126 y Fu(IN)155 b Fv(buf)527 b Fu(initial)12
b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))117 202 y(IN)155
b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(sen)o(t)i(\(in)o
(teger\))117 277 y(IN)155 b Fv(datat)o(yp)q(e)424 b Fu(t)o(yp)q(e)15
b(of)e(eac)o(h)h(elemen)o(t)g(\(handle\))117 352 y(IN)155 b
Fv(dest)511 b Fu(rank)14 b(of)f(destination)h(\(in)o(teger\))117
427 y(IN)155 b Fv(tag)526 b Fu(message)14 b(tag)f(\(in)o(teger\))117
502 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117
577 y(OUT)108 b Fv(request)452 b Fu(comm)o(unication)11 b(request)k
(\(handle\))75 702 y Ft(int)23 b(MPI)p 245 702 15 2 v 17 w(Create)p
406 702 V 17 w(ssend\(void*)f(buf,)h(int)h(count,)f(MPI)p 1163
702 V 17 w(Datatype)f(datatype,)h(int)g(dest,)393 758 y(int)h(tag,)f(MPI)p
683 758 V 17 w(Comm)g(comm,)g(MPI)p 1034 758 V 17 w(Comm)p
1147 758 V 17 w(request)g(*request\))75 845 y(MPI)p 150 845
V 17 w(CREATE)p 311 845 V 16 w(SSEND\(BUF,)g(COUNT,)g(DATATYPE,)f(DEST,)h
(TAG,)h(COMM,)f(REQUEST,)g(IERROR\))170 901 y(<type>)g(BUF\(*\))170
958 y(INTEGER)g(COUNT,)g(DATATYPE,)g(DEST,)g(TAG,)h(COMM,)f(REQUEST,)f
(IERROR)166 1044 y FA(The)15 b(function)h Fv(MPI)p 522 1044
14 2 v 15 w(CREA)l(TE)p 706 1044 V 18 w(RECV)g FA(creates)e(a)h(comm)o
(unication)g(ob)s(ject)f(for)h(a)f(receiv)o(e)i(op)q(era-)75
1100 y(tion.)75 1204 y Fv(MPI)p 160 1204 V 16 w(CREA)l(TE)p
345 1204 V 17 w(RECV\(buf,)g(count,)h(datat)o(yp)q(e,)f(source,)f(tag,)g
(comm)m(,)d(request\))117 1281 y Fu(OUT)108 b Fv(buf)527 b
Fu(initial)12 b(address)j(of)f(receiv)o(e)h(bu\013er)g(\(c)o(hoice\))117
1356 y(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f
(receiv)o(ed)j(\(in)o(teger\))117 1432 y(IN)155 b Fv(datat)o(yp)q(e)424
b Fu(t)o(yp)q(e)15 b(of)e(eac)o(h)h(elemen)o(t)g(\(handle\))117
1507 y(IN)155 b Fv(dest)511 b Fu(rank)14 b(of)f(source)j(or)d(MPI)p
1309 1507 13 2 v 16 w(ANY)p 1418 1507 V 15 w(SOUR)o(CE)h(\(in)o(teger\))117
1582 y(IN)155 b Fv(tag)526 b Fu(message)14 b(tag)f(or)h(MPI)p
1270 1582 V 15 w(ANY)p 1378 1582 V 16 w(T)m(A)o(G)f(\(in)o(teger\))117
1657 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(\(handle\))117
1732 y(OUT)108 b Fv(request)452 b Fu(comm)o(unication)11 b(request)k
(\(handle\))75 1857 y Ft(int)23 b(MPI)p 245 1857 15 2 v 17
w(Create)p 406 1857 V 17 w(recv\(void*)f(buf,)h(int)h(count,)f(MPI)p
1139 1857 V 17 w(Datatype)f(datatype,)h(int)h(source,)393 1913
y(int)g(tag,)f(MPI)p 683 1913 V 17 w(Comm)g(comm,)g(MPI)p 1034
1913 V 17 w(Comm)p 1147 1913 V 17 w(request)g(*request\))75
1999 y(MPI)p 150 1999 V 17 w(CREATE)p 311 1999 V 16 w(RECV\(BUF,)g(COUNT,)g
(DATATYPE,)f(SOURCE,)h(TAG,)h(COMM,)f(REQUEST,)g(IERROR\))170
2056 y(<type>)g(BUF\(*\))170 2112 y(INTEGER)g(COUNT,)g(DATATYPE,)g(SOURCE,)g
(TAG,)g(COMM,)g(REQUEST,)g(IERROR)166 2199 y FA(A)18 b(comm)o(unication)g
(\(send)g(or)g(receiv)o(e\))g(that)f(uses)h(a)g(prede\014ned)h(request)f(is)h
(initiated)g(b)o(y)f(the)75 2255 y(function)e Fv(MPI)p 338
2255 14 2 v 16 w(ST)l(ART)p FA(.)75 2359 y Fv(MPI)p 160 2359
V 16 w(ST)l(ART\(request\))117 2436 y Fu(INOUT)62 b Fv(request)452
b Fu(comm)o(unication)11 b(request)k(\(handle\))75 2561 y Ft(int)23
b(MPI)p 245 2561 15 2 v 17 w(Start\(MPI)p 478 2561 V 16 w(Comm)p
590 2561 V 17 w(request)g(*request\))75 2647 y(MPI)p 150 2647
V 17 w(START\(REQUEST,)f(IERROR\))170 2704 y(INTEGER)h(REQUEST,)g(IERROR)-32
46 y Fy(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32
328 y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40
611 y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119
y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627
y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40
2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 40 40
bop 75 -100 a FA(40)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y FA(The)11 b(comm)o(unication)h(ob)s
(ject)f(asso)q(ciated)g(with)h Fv(request)h FA(should)f(b)q(e)g(an)f(ob)s
(ject)g(that)g(w)o(as)f(created)75 106 y(b)o(y)k(one)g(of)g(the)g(previous)h
(four)e(functions,)i(so)f(that)f(all)i(the)f(comm)o(unication)h(argumen)o(ts)
e(are)h(already)75 162 y(de\014ned.)23 b(A)16 b(send)g(can)g(b)q(e)h(started)
e(pro)o(vided)h(that)f(the)h(previous)h(send)f(using)h(the)e(same)h(ob)s
(ject)f(has)75 219 y(completed,)d(or)f(as)f(so)q(on)h(as)f(the)h(ob)s(ject)f
(is)i(created,)f(if)g(it)g(has)g(not)g(y)o(et)f(b)q(een)i(used)f(in)h(a)f
(comm)o(unication.)75 275 y(In)k(addition,)h(if)f(the)f(comm)o(unication)i
(mo)q(de)e(is)h Fv(ready)g FA(then)g(a)f(matc)o(hing)h(receiv)o(e)g(should)h
(b)q(e)f(p)q(osted.)75 332 y(The)j(send)h(bu\013er)f(should)g(not)g(b)q(e)h
(accessed)f(after)f(the)h(send)h(is)f(started,)g(and)g(un)o(til)h(the)f(op)q
(eration)75 388 y(completes.)166 446 y(A)c(receiv)o(e)g(can)g(b)q(e)g
(started)f(pro)o(vided)i(that)e(the)h(preceding)h(receiv)o(e)f(using)h(the)f
(same)f(ob)s(ject)g(has)75 502 y(completed,)f(or)f(as)f(so)q(on)h(as)f(the)h
(ob)s(ject)f(is)i(created,)f(if)g(it)g(has)g(not)g(y)o(et)f(b)q(een)i(used)f
(in)h(a)f(comm)o(unication.)75 559 y(The)18 b(receiv)o(e)h(bu\013er)f(should)
h(not)e(b)q(e)i(accessed)g(after)e(the)h(receiv)o(e)h(is)f(started,)g(un)o
(til)h(the)f(op)q(eration)75 615 y(completes.)166 673 y(The)23
b(call)g(is)g(non)o(blo)q(c)o(king,)i(with)e(similar)h(seman)o(tics)e(to)g
(the)g(non)o(blo)q(c)o(king)i(comm)o(unication)75 729 y(op)q(erations)e
(describ)q(ed)i(in)e(section)g(1.8.)39 b(I.e.,)23 b(a)e(call)i(to)e
Fv(MPI)p 1218 729 14 2 v 16 w(ST)l(ART)h FA(starts)f(a)g(comm)o(unication)75
786 y(in)g(the)e(same)h(manner)g(as)f(a)g(call)i(to)e Fv(MPI)p
838 786 V 16 w(ISEND)p FA(,)h Fv(MPI)p 1099 786 V 15 w(IRSEND)p
FA(,)g Fv(MPI)p 1388 786 V 16 w(ISSEND)g FA(or)f Fv(MPI)p 1721
786 V 16 w(IRECV)p FA(,)75 842 y(resp)q(ectiv)o(ely)l(.)166
982 y Fq(Discussion:)34 b Fu(It)14 b(has)g(b)q(een)h(suggested)g(that)f
Fo(MPI)p 1005 982 13 2 v 14 w(IST)m(ART)f Fu(w)o(ould)g(mak)o(e)g(this)h(p)q
(oin)o(t)f(b)q(etter)75 1170 y Fv(MPI)p 160 1170 14 2 v 16
w(ST)l(ART)l(ALL\(count,)j(a)o(rra)o(y)p 641 1170 V 15 w(of)p
693 1170 V 16 w(requests\))117 1249 y Fu(IN)155 b Fv(count)482
b Fu(list)14 b(length)f(\(in)o(teger\))117 1326 y(INOUT)62
b Fv(a)o(rra)o(y)p 416 1326 V 15 w(of)p 468 1326 V 16 w(requests)272
b Fu(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e(of)f(handle\))75
1452 y Ft(int)23 b(MPI)p 245 1452 15 2 v 17 w(Startall\(int)f(count,)h(MPI)p
811 1452 V 17 w(Comm)p 924 1452 V 17 w(request)g(*array)p 1276
1452 V 16 w(of)p 1340 1452 V 17 w(requests\))75 1540 y(MPI)p
150 1540 V 17 w(STARTALL\(COUNT,)f(ARRAY)p 669 1540 V 16 w(OF)p
733 1540 V 17 w(REQUESTS,)h(IERROR\))170 1596 y(INTEGER)g(COUNT,)g(ARRAY)p
651 1596 V 17 w(OF)p 716 1596 V 17 w(REQUESTS\(*\),)f(IERROR)166
1684 y FA(Start)i(all)j(comm)o(unications)f(asso)q(ciated)g(with)f(requests)h
(in)g Fv(a)o(rra)o(y)p 1399 1684 14 2 v 15 w(of)p 1451 1684
V 16 w(requests)p FA(.)52 b(A)26 b(call)h(to)75 1740 y Fv(MPI)p
160 1740 V 16 w(ST)l(ART)l(ALL\(count,)76 b(a)o(rra)o(y)p 701
1740 V 14 w(of)p 752 1740 V 16 w(requests\))65 b FA(has)d(the)h(same)f
(e\013ect)h(as)f(calls)i(to)75 1797 y Fv(MPI)p 160 1797 V 16
w(ST)l(ART\(a)o(rra)o(y)p 431 1797 V 15 w(of)p 483 1797 V 16
w(requests[i]\))p FA(,)17 b(executed)f(for)e Fv(i=0)i(,...,)d(count-1)p
FA(,)j(in)g(some)f(arbitrary)f(order.)166 1854 y(A)j(comm)o(unication)g
(started)f(with)h(a)g(call)h(to)e Fv(MPI)p 1063 1854 V 16 w(ST)l(ART)h
FA(or)f Fv(MPI)p 1377 1854 V 16 w(ST)l(ART)l(ALL)i FA(is)f(completed)75
1911 y(b)o(y)11 b(a)h(call)g(to)f Fv(MPI)p 385 1911 V 16 w(W)l(AIT)p
FA(,)g Fv(MPI)p 620 1911 V 16 w(TEST)p FA(,)h(or)f(one)g(of)g(the)h(deriv)o
(ed)h(functions)f(describ)q(ed)h(in)g(section)f(1.8.5.)75 1967
y(These)k(comm)o(unication)h(completion)g(functions)g(do)f(not)f(deallo)q
(cate)j(the)e(request,)g(and)g(this)g(can)g(b)q(e)75 2024 y(reused)g(anew)g
(b)o(y)f(a)h Fv(MPI)p 521 2024 V 15 w(ST)l(ART)h FA(call.)22
b(The)16 b(ob)s(ject)f(needs)h(to)f(b)q(e)i(explicitly)h(deallo)q(cated)f(b)o
(y)f(a)f(call)75 2080 y(to)j(the)g(function)i Fv(MPI)p 482
2080 V 16 w(REQUEST)p 701 2080 V 17 w(FREE)p FA(,)f(b)q(elo)o(w.)30
b(W)l(e)19 b(th)o(us)f(ha)o(v)o(e)g(t)o(w)o(o)g(t)o(yp)q(es)g(of)g(comm)o
(unication)75 2137 y(requests:)34 b Fz(p)q(ersisten)o(t)23
b FA(requests,)h(whic)o(h)f(are)f(allo)q(cated)i(b)o(y)e(a)g(call)i(to)e
Fv(MPI)p 1503 2137 V 15 w(CREA)l(TE)p 1687 2137 V 18 w(xxx)p
FA(,)i(and)75 2193 y(are)18 b(explicitly)j(deallo)q(cated)e(b)o(y)f
Fv(MPI)p 746 2193 V 16 w(REQUEST)p 965 2193 V 18 w(FREE)p FA(,)g(and)g
Fz(ephemeral)g FA(requests)g(that)f(p)q(ersist)75 2249 y(for)f(one)i(comm)o
(unication)g(only:)24 b(they)17 b(are)g(created)g(b)o(y)g(a)g(non)o(blo)q(c)o
(king)h(comm)o(unication)g(initiation)75 2306 y(function,)e(and)f(are)g
(freed)g(b)o(y)h(the)f(comm)o(unication)h(completion)g(call.)166
2364 y(If)40 b(a)20 b(call)h(to)e Fv(MPI)p 512 2364 V 16 w(W)l(AIT)p
FA(,)g Fv(MPI)p 755 2364 V 16 w(TEST)p FA(,)h(or)f(an)o(y)h(of)f(the)h(deriv)
o(ed)h(functions,)h(is)e(executed)h(on)-1903 b Fk(\))75 2420
y FA(a)22 b(p)q(ersisten)o(t)h(comm)o(unication)g(request)f(for)g(whic)o(h)h
(there)g(is)g(no)f(p)q(ending)i(comm)o(unication)f(\(e.g.)75
2477 y(immediately)13 b(after)e(it)h(w)o(as)f(created)h(or)f(immediately)i
(after)e(a)h(call)g(to)f Fv(MPI)p 1378 2477 V 16 w(W)l(AIT)p
FA(\))h(then)g(the)f(outcome)75 2533 y(is)18 b(similar)h(to)e(that)g(whic)o
(h)i(obtains)f(when)g(a)f(n)o(ull)i(request)f(w)o(as)f(passed)h(as)f(argumen)
o(t:)24 b Fv(MPI)p 1749 2533 V 16 w(W)l(AIT)75 2589 y FA(returns)13
b(immediately)l(,)i Fv(MPI)p 581 2589 V 16 w(TEST)e FA(returns)g(with)g
Fo(\015ag)f(=)g(true)p FA(,)i(etc.)19 b(As)13 b(for)g(calls)h(with)f(n)o(ull)
h(requests,)75 2646 y(the)h(status)g(is)g(up)q(dated)h(to)f(the)g(status)g
(of)f(a)h(n)o(ull)i(comm)o(unication.)166 2704 y(In)g(particular,)g(one)f
(can)g(pass)g(to)g Fv(MPI)p 858 2704 V 16 w(W)l(AIT)l(ANY)h
FA(and)f(the)h(other)f(functions)h(in)g(section)g(1.8.5)1967
46 y Fy(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967
328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 41 41
bop 75 -100 a Fw(1.11.)34 b(SEND-RECEIVE)1277 b FA(41)75 49
y(an)23 b Fv(a)o(rra)o(y)p 244 49 14 2 v 14 w(of)p 295 49 V
16 w(request)i FA(argumen)o(t)c(where)i(some)g(of)f(the)h(requests)g(are)f(p)
q(ersisten)o(t)h(ones,)h(and)f(ha)o(v)o(e)75 106 y(the)c(desired)h(outcome:)
28 b(the)19 b(call)h(will)h(ignore)e(those)g(requests)g(in)h(the)f(arra)o(y)f
(for)g(whic)o(h)i(there)f(are)75 162 y(no)e(p)q(ending)i(comm)o(unications)e
(\(in)h(the)f(same)g(manner)g(that)f(these)h(functions)h(ignore)f(n)o(ull)i
(request)75 219 y(en)o(tries\).)h(Th)o(us,)15 b(the)g(last)g(example)h(on)f
(page)g(29)g(w)o(orks)f(correctly)h(with)h(p)q(ersisten)o(t)g(requests,)e(to)
q(o.)75 335 y Fv(MPI)p 160 335 V 16 w(REQUEST)p 379 335 V 18
w(FREE\(request\))117 425 y Fu(INOUT)62 b Fv(request)452 b
Fu(comm)o(unication)11 b(request)k(\(handle\))75 562 y Ft(int)23
b(MPI)p 245 562 15 2 v 17 w(Request)p 430 562 V 16 w(free\(MPI)p
638 562 V 17 w(Comm)p 751 562 V 16 w(request)g(*request\))75
661 y(MPI)p 150 661 V 17 w(REQUEST)p 335 661 V 16 w(FREE\(REQUEST,)f
(IERROR\))170 718 y(INTEGER)h(REQUEST,)g(IERROR)166 817 y FA(Mark)c
Fv(request)i FA(for)e(deallo)q(cation.)35 b(The)20 b(request)f(ob)s(ject)h
(is)g(deallo)q(cated)h(when)f(there)g(are)f(no)75 874 y(p)q(ending)e(comm)o
(unications)f(in)o(v)o(olving)g(this)g(ob)s(ject,)e(at)h(whic)o(h)h(p)q(oin)o
(t)f(the)h(request)f(b)q(ecomes)h(n)o(ull.)166 943 y(The)j(call)g(is)g(non)o
(blo)q(c)o(king.)31 b(It)18 b(is)h(p)q(ermissible)i(to)d(call)h
Fv(MPI)p 1249 943 14 2 v 16 w(REQUEST)p 1468 943 V 18 w(FREE\(request\))h
FA(after)75 999 y(a)f(comm)o(unication)g(that)f(uses)h Fv(request)i
FA(has)e(b)q(een)h(initiated,)h(but)e(b)q(efore)g(it)g(has)g(completed.)32
b(The)75 1056 y(ob)s(ject)15 b(will)j(b)q(e)f(deallo)q(cated)g(after)e(the)h
(comm)o(unication)h(completes.)22 b(It)16 b(is)h(erroneous)f(to)f(initiate)i
(a)75 1112 y(comm)o(unication)f(with)f(a)g(request)h(that)e(has)h(b)q(een)h
(freed.)166 1181 y(A)f(correct)f(in)o(v)o(o)q(cation)i(of)e(the)h(functions)h
(describ)q(ed)g(in)g(this)f(section)h(will)g(o)q(ccur)g(in)f(a)g(sequence)75
1238 y(of)g(the)g(form)166 1307 y Fz(Create)i FA(\()p Fz(Start)h(Complete)p
FA(\))725 1290 y Fh(\003)761 1307 y Fz(F)l(ree)f Fi(;)166 1376
y FA(where)f Fl(\003)g FA(indicates)i(zero)e(or)f(more)h(rep)q(etitions.)24
b(If)16 b(the)g(same)g(comm)o(unication)h(ob)s(ject)f(is)g(used)75
1433 y(in)k(sev)o(eral)f(concurren)o(t)g(threads,)g(it)g(is)h(the)f(user)g
(resp)q(onsibilit)o(y)i(to)e(co)q(ordinate)g(calls)h(so)f(that)f(the)75
1489 y(correct)d(sequence)h(is)g(ob)q(ey)o(ed.)166 1558 y(A)c(send)g(op)q
(eration)f(initiated)j(with)d Fv(MPI)p 874 1558 V 16 w(ST)l(ART)i
FA(can)e(b)q(e)i(matc)o(hed)e(with)h(an)o(y)f(receiv)o(e)i(op)q(eration)75
1615 y(and,)g(lik)o(ewise,)h(a)e(receiv)o(e)i(op)q(eration)e(initiated)i
(with)f Fv(MPI)p 1098 1615 V 16 w(ST)l(ART)g FA(can)g(receiv)o(e)g(messages)f
(generated)75 1671 y(b)o(y)j(an)o(y)g(send)h(op)q(eration.)75
1887 y FB(1.11)60 b(Send-receive)75 2013 y FA(The)18 b Fz(send-receiv)o(e)g
FA(op)q(erations)g(com)o(bine)h(in)g(one)f(call)h(the)f(sending)i(of)d(a)h
(message)g(to)f(one)h(desti-)75 2070 y(nation)e(and)g(the)g(receiving)i(of)d
(another)h(message,)f(from)g(another)h(destination,)g(p)q(ossibly)i(the)e
(same.)75 2126 y(A)k(send-receiv)o(e)j(op)q(eration)d(is)h(v)o(ery)f(useful)i
(for)d(executing)j(a)e(shift)h(op)q(eration)f(across)g(a)g(c)o(hain)h(of)75
2183 y(pro)q(cesses.)37 b(If)20 b(blo)q(c)o(king)i(sends)g(and)e(receiv)o(es)
i(are)e(used)h(for)f(suc)o(h)h(shift,)h(then)f(one)g(needs)g(to)f(or-)75
2239 y(der)c(the)h(sends)f(and)g(receiv)o(es)h(correctly)g(\(e.g.,)d(ev)o(en)
j(pro)q(cesses)f(send,)h(next)f(receiv)o(e,)h(o)q(dd)g(pro)q(cesses)75
2296 y(receiv)o(e)j(\014rst,)g(next)f(send\))g(so)g(as)g(to)g(prev)o(en)o(t)g
(cyclic)i(dep)q(endencies)h(that)c(ma)o(y)h(lead)h(to)e(deadlo)q(c)o(k.)75
2352 y(When)g(a)g(send-receiv)o(e)h(op)q(eration)f(is)g(used,)h(the)f(comm)o
(unication)g(subsystem)g(tak)o(es)f(care)g(of)h(these)75 2409
y(issues.)j(The)14 b(send-receiv)o(e)j(op)q(eration)e(can)f(b)q(e)i(used)f
(in)g(conjunction)h(with)f(the)g(functions)g(describ)q(ed)75
2465 y(in)h(Chapter)f Fz(??)k FA(in)d(order)f(to)f(p)q(erform)h(shifts)g(on)g
(v)m(arious)h(logical)g(top)q(ologies.)k(Also,)c(a)e(send-receiv)o(e)75
2521 y(op)q(eration)h(is)h(useful)g(for)f(implemen)o(ting)i(remote)e(pro)q
(cedure)h(calls.)166 2591 y(A)29 b(message)14 b(sen)o(t)h(b)o(y)f(a)h
(send-receiv)o(e)h(op)q(eration)f(can)f(b)q(e)i(receiv)o(ed)g(b)o(y)e(a)g
(regular)h(receiv)o(e)h(op)q(er-)69 b Fk(\()75 2647 y FA(ation)16
b(or)f(prob)q(ed)i(b)o(y)f(a)g(prob)q(e)g(op)q(eration;)g(a)g(send-receiv)o
(e)i(op)q(eration)e(can)g(receiv)o(e)h(a)f(message)f(sen)o(t)75
2704 y(b)o(y)g(a)g(regular)g(send)h(op)q(eration.)-32 46 y
Fy(1)-32 103 y(2)-32 159 y(3)-32 215 y(4)-32 272 y(5)-32 328
y(6)-32 385 y(7)-32 441 y(8)-32 498 y(9)-40 554 y(10)-40 611
y(11)-40 667 y(12)-40 724 y(13)-40 780 y(14)-40 836 y(15)-40
893 y(16)-40 949 y(17)-40 1006 y(18)-40 1062 y(19)-40 1119
y(20)-40 1175 y(21)-40 1232 y(22)-40 1288 y(23)-40 1345 y(24)-40
1401 y(25)-40 1457 y(26)-40 1514 y(27)-40 1570 y(28)-40 1627
y(29)-40 1683 y(30)-40 1740 y(31)-40 1796 y(32)-40 1853 y(33)-40
1909 y(34)-40 1966 y(35)-40 2022 y(36)-40 2078 y(37)-40 2135
y(38)-40 2191 y(39)-40 2248 y(40)-40 2304 y(41)-40 2361 y(42)-40
2417 y(43)-40 2474 y(44)-40 2530 y(45)-40 2587 y(46)-40 2643
y(47)-40 2699 y(48)p eop
%%Page: 42 42
bop 75 -100 a FA(42)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fv(MPI)p 160 49 14
2 v 16 w(SENDRECV\(sendbuf,)24 b(sendcount,)f(sendt)o(yp)q(e,)g(dest,)f
(sendtag,)g(recvbuf,)g(recvcount,)f(recvt)o(yp)q(e,)75 106
y(source,)15 b(recvtag,)g(comm)m(,)d(status\))117 183 y Fu(IN)155
b Fv(sendbuf)444 b Fu(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o
(hoice\))117 254 y(IN)155 b Fv(sendcount)399 b Fu(n)o(um)o(b)q(er)13
b(of)h(elemen)o(ts)f(in)h(send)h(bu\013er)f(\(in)o(teger\))117
325 y(IN)155 b Fv(sendt)o(yp)q(e)424 b Fu(t)o(yp)q(e)15 b(of)e(elemen)o(ts)h
(in)f(send)i(bu\013er)g(\(handle\))117 397 y(IN)155 b Fv(dest)511
b Fu(rank)14 b(of)f(destination)h(\(in)o(teger\))117 468 y(IN)155
b Fv(sendtag)443 b Fu(send)15 b(tag)e(\(in)o(teger\))117 539
y(OUT)108 b Fv(recvbuf)450 b Fu(initial)12 b(address)j(of)f(receiv)o(e)h
(bu\013er)g(\(c)o(hoice\))117 610 y(IN)155 b Fv(recvcount)405
b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(receiv)o(e)h(bu\013er)g
(\(in)o(teger\))117 682 y(IN)155 b Fv(recvt)o(yp)q(e)430 b
Fu(t)o(yp)q(e)15 b(of)e(elemen)o(ts)h(in)f(receiv)o(e)i(bu\013er)g
(\(handle\))117 753 y(IN)155 b Fv(source)468 b Fu(rank)14 b(of)f(source)j
(\(in)o(teger\))117 824 y(IN)155 b Fv(recvtag)449 b Fu(receiv)o(e)15
b(tag)f(\(in)o(teger\))117 895 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11
b(\(handle\))117 966 y(OUT)108 b Fv(status)476 b Fu(status)15
b(ob)r(ject)g(\(Status\))75 1091 y Ft(int)23 b(MPI)p 245 1091
15 2 v 17 w(Sendrecv\(void)f(*sendbuf,)h(int)g(sendcount,)g(MPI)p
1265 1091 V 17 w(Datatype)f(sendtype,)393 1147 y(int)i(dest,)f(int)g
(sendtag,)g(void)g(*recvbuf,)g(int)g(recvcount,)393 1204 y(MPI)p
468 1204 V 17 w(Datatype)g(recvtype,)f(int)i(source,)f(MPI)p
1297 1204 V 16 w(Datatype)g(recvtag,)393 1260 y(MPI)p 468 1260
V 17 w(Comm)g(comm,)g(MPI)p 819 1260 V 17 w(Status)g(*status\))75
1347 y(MPI)p 150 1347 V 17 w(SENDRECV\(SENDBUF,)e(SENDCOUNT,)i(SENDTYPE,)f
(DEST,)i(SENDTAG,)e(RECVBUF,)393 1403 y(RECVCOUNT,)h(RECVTYPE,)f(SOURCE,)h
(RECVTAG,)g(COMM,)g(STATUS,)g(IERROR\))170 1460 y(<type>)g(SENDBUF\(*\),)g
(RECVBUF\(*\))170 1516 y(INTEGER)g(SENDCOUNT,)g(SENDTYPE,)f(DEST,)i(SENDTAG,)
e(RECVCOUNT,)h(RECVTYPE,)170 1573 y(SOURCE,)g(RECV)h(TAG,)f(COMM,)g
(STATUS\(MPI)p 986 1573 V 16 w(STATUS)p 1146 1573 V 16 w(SIZE\),)g(IERROR)166
1659 y FA(Execute)c(a)e(blo)q(c)o(king)j(send)f(and)f(receiv)o(e)h(op)q
(eration.)29 b(Both)18 b(send)h(and)f(receiv)o(e)h(use)g(the)f(same)75
1715 y(comm)o(unicator,)c(but)g(p)q(ossibly)i(di\013eren)o(t)f(tags.)j(The)d
(send)g(bu\013er)f(and)h(receiv)o(e)g(bu\013ers)g(are)f(disjoin)o(t,)75
1772 y(and)h(ma)o(y)g(ha)o(v)o(e)g(di\013eren)o(t)g(lengths)h(and)f(datat)o
(yp)q(es.)75 1876 y Fv(MPI)p 160 1876 14 2 v 16 w(SENDRECV)p
408 1876 V 17 w(REPLA)o(CE\(buf,)k(count,)f(datat)o(yp)q(e,)h(dest,)f
(sendtag,)h(source,)f(recvtag,)f(comm)m(,)d(sta-)75 1932 y(tus\))117
2009 y Fu(INOUT)62 b Fv(buf)527 b Fu(initial)12 b(address)j(of)f(send)g(and)g
(receiv)o(e)h(bu\013er)g(\(c)o(hoice\))117 2081 y(IN)155 b
Fv(count)482 b Fu(n)o(um)o(b)q(er)9 b(of)g(elemen)o(ts)h(in)f(send)i(and)e
(receiv)o(e)i(bu\013er)g(\(in)o(teger\))117 2152 y(IN)155 b
Fv(datat)o(yp)q(e)424 b Fu(t)o(yp)q(e)15 b(of)e(elemen)o(ts)h(in)f(send)i
(and)f(receiv)o(e)h(bu\013er)g(\(handle\))117 2223 y(IN)155
b Fv(dest)511 b Fu(rank)14 b(of)f(destination)h(\(in)o(teger\))117
2294 y(IN)155 b Fv(sendtag)443 b Fu(send)15 b(message)f(tag)f(\(in)o(teger\))
117 2365 y(IN)155 b Fv(source)468 b Fu(rank)14 b(of)f(source)j(\(in)o
(teger\))117 2437 y(IN)155 b Fv(recvtag)449 b Fu(receiv)o(e)15
b(message)f(tag)f(\(in)o(teger\))117 2508 y(IN)155 b Fv(comm)466
b Fu(comm)o(unicator)11 b(\(handle\))117 2579 y(OUT)108 b Fv(status)476
b Fu(status)15 b(ob)r(ject)g(\(Status\))75 2704 y Ft(int)23
b(MPI)p 245 2704 15 2 v 17 w(Sendrecv)p 454 2704 V 16 w(replace\(void*)f
(buf,)i(int)f(count,)g(MPI)p 1258 2704 V 17 w(Datatype)g(datatype,)1967
46 y Fy(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967
328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 43 43
bop 75 -100 a Fw(1.12.)34 b(NULL)16 b(PR)o(OCESSES)1218 b FA(43)393
49 y Ft(int)24 b(dest,)f(int)g(sendtag,)g(int)g(source,)g(int)h(recvtag,)f
(MPI)p 1614 49 15 2 v 16 w(Comm)h(comm,)393 106 y(MPI)p 468
106 V 17 w(Status)f(*status\))75 192 y(MPI)p 150 192 V 17 w(SENDRECV)p
359 192 V 16 w(REPLACE\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(SENDTAG,)g
(SOURCE,)g(RECVTAG,)393 249 y(COMM,)g(STATUS,)g(IERROR\))170
305 y(<type>)g(BUF\(*\))170 362 y(INTEGER)g(COUNT,)g(DATATYPE,)g(DEST,)g
(SENDTAG,)g(SOURCE,)g(RECVTAG,)g(COMM,)170 418 y(STATUS\(MPI)p
413 418 V 16 w(STATUS)p 573 418 V 17 w(SIZE\),)g(IERROR)166
504 y FA(Execute)15 b(a)f(blo)q(c)o(king)i(send)f(and)g(receiv)o(e;)g(the)g
(same)f(bu\013er)g(is)h(used)h(b)q(oth)e(for)g(the)h(send)g(and)g(for)75
561 y(the)g(receiv)o(e,)h(so)f(that)f(the)i(message)e(sen)o(t)h(is)h
(replaced)g(b)o(y)g(the)f(message)g(receiv)o(ed.)166 617 y(The)f(seman)o
(tics)g(of)f(a)h(send-receiv)o(e)h(op)q(eration)f(is)g(what)g(w)o(ould)g
(obtain)g(if)g(the)g(caller)h(fork)o(ed)e(t)o(w)o(o)75 674
y(concurren)o(t)19 b(threads,)f(one)h(to)f(execute)h(the)g(send,)g(and)g(one)
g(to)e(execute)j(the)e(receiv)o(e,)i(follo)o(w)o(ed)f(b)o(y)75
730 y(a)e(join)g(of)g(these)g(t)o(w)o(o)f(threads.)25 b(Additional)19
b(in)o(termediate)f(bu\013ering)g(is)f(needed)i(for)d(the)i(\\replace")75
787 y(v)m(arian)o(t.)166 843 y(A)11 b(send-receiv)o(e)i(cannot)f(b)q(e)g
(implemen)o(ted)h(b)o(y)e(a)g(blo)q(c)o(king)i(send)f(follo)o(w)o(ed)g(b)o(y)
f(a)g(blo)q(c)o(king)i(receiv)o(e)75 900 y(or)i(a)g(blo)q(c)o(king)i(receiv)o
(e,)f(follo)o(w)o(ed)g(b)o(y)g(a)f(blo)q(c)o(king)i(send.)22
b(Consider)16 b(the)f(follo)o(wing)i(co)q(de,)e(where)h(t)o(w)o(o)75
956 y(pro)q(cesses)g(exc)o(hange)f(messages:)75 1050 y Ft(CALL)23
b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 1107 y(IF)h(\(rank.EQ.0\))123
1163 y(THEN)170 1220 y(CALL)g(MPI_SENDRECV\(send_buff,)c(send_count,)j
(MPI_REAL,)f(1,)i(send_tag,)242 1276 y(recv_buff,)f(recv_count,)f(MPI_REAL,)h
(1,)g(recv_tag,)g(comm,)g(status,)g(ierr\))123 1333 y(ELSE)170
1389 y(CALL)h(MPI_SENDRECV\(send_buff,)c(send_count,)j(MPI_REAL,)f(0,)i
(send_tag,)242 1446 y(recv_buff,)f(recv_count,)f(MPI_REAL,)h(0,)g(tag,)g
(comm,)h(status,)f(ierr\))75 1502 y(END)g(IF)166 1596 y FA(If)16
b(the)f(send)h(receiv)o(es)h(are)e(replaced)i(either)f(b)o(y)f(blo)q(c)o
(king)i(send,)f(follo)o(w)o(ed)g(b)o(y)g(blo)q(c)o(king)g(receiv)o(e,)75
1653 y(or)g(blo)q(c)o(king)h(receiv)o(e,)g(follo)o(w)o(ed)g(b)o(y)f(blo)q(c)o
(king)i(send,)f(then)f(the)h(co)q(de)g(ma)o(y)e(deadlo)q(c)o(k.)24
b(On)17 b(the)f(other)75 1709 y(hand,)f(send-receiv)o(e)i(can)f(b)q(e)f
(implemen)o(ted)i(using)f(non)o(blo)q(c)o(king)h(sends)e(and)h(receiv)o(es.)
75 1851 y FB(1.12)60 b(Null)19 b(p)n(ro)r(cesses)75 1952 y
FA(In)c(man)o(y)e(instances,)i(it)f(is)h(con)o(v)o(enien)o(t)g(to)e(sp)q
(ecify)j(a)d(\\dumm)o(y")h(source)g(or)g(destination)h(for)e(comm)o(u-)75
2009 y(nication.)29 b(This)18 b(simpli\014es)i(the)e(co)q(de)g(that)f(is)h
(needed)i(for)d(dealing)i(with)f(b)q(oundaries,)h(e.g.,)e(in)i(the)75
2065 y(case)c(of)g(a)g(non-circular)i(shift)e(done)h(with)f(calls)i(to)d
(send-receiv)o(e.)166 2122 y(The)f(sp)q(ecial)j(v)m(alue)26
b Fo(MPI)p 608 2122 13 2 v 15 w(PROCNULL)12 b FA(can)i(b)q(e)g(used)g
(instead)g(of)f(a)g(rank)g(wherev)o(er)g(a)g(source)g(or)g(a)75
2178 y(destination)j(argumen)o(t)f(is)g(required)i(in)f(a)f(call.)21
b(A)15 b(comm)o(unication)h(with)g(pro)q(cess)29 b Fo(MPI)p
1649 2178 V 15 w(PROCNULL)75 2235 y FA(has)13 b(no)h(e\013ect:)k(a)13
b(send)h(to)25 b Fo(MPI)p 633 2235 V 14 w(PROCNULL)13 b FA(succeeds)i(and)e
(returns)g(as)g(so)q(on)h(as)f(p)q(ossible.)21 b(A)13 b(receiv)o(e)75
2291 y(from)26 b Fo(MPI)p 271 2291 V 14 w(PROCNULL)13 b FA(succeeds)i(and)f
(returns)g(as)f(so)q(on)h(as)f(p)q(ossible)j(with)e(no)g(mo)q(di\014cations)h
(to)e(the)75 2348 y(receiv)o(e)18 b(bu\013er.)25 b(When)17
b(a)g(receiv)o(e)h(with)f Fv(source)h FA(=)32 b Fo(MPI)p 1090
2348 V 15 w(PROCNULL)16 b FA(is)i(executed)f(then)h(the)f(status)75
2404 y(ob)s(ject)e(returns)30 b Fv(source)16 b FA(=)29 b Fo(MPI)p
661 2404 V 14 w(PROCNULL)p FA(,)14 b Fv(tag)h FA(=)30 b Fo(MPI)p
1132 2404 V 14 w(ANY)p 1231 2404 V 15 w(T)m(A)o(G)14 b FA(and)h
Fv(count=0)p FA(.)75 2546 y FB(1.13)60 b(Derived)19 b(datat)n(yp)r(es)75
2647 y FA(Up)c(to)f(no)o(w,)g(all)i(p)q(oin)o(t)f(to)f(p)q(oin)o(t)h(comm)o
(unication)h(in)o(v)o(olv)o(ed)f(only)g(con)o(tiguous)g(bu\013ers)g(con)o
(taining)g(a)75 2704 y(sequence)g(of)e(elemen)o(ts)h(of)f(the)g(same)g(t)o
(yp)q(e.)19 b(This)14 b(is)g(to)q(o)f(constraining)h(on)f(t)o(w)o(o)f(accoun)
o(ts:)19 b(One)14 b(often)-32 46 y Fy(1)-32 103 y(2)-32 159
y(3)-32 215 y(4)-32 272 y(5)-32 328 y(6)-32 385 y(7)-32 441
y(8)-32 498 y(9)-40 554 y(10)-40 611 y(11)-40 667 y(12)-40
724 y(13)-40 780 y(14)-40 836 y(15)-40 893 y(16)-40 949 y(17)-40
1006 y(18)-40 1062 y(19)-40 1119 y(20)-40 1175 y(21)-40 1232
y(22)-40 1288 y(23)-40 1345 y(24)-40 1401 y(25)-40 1457 y(26)-40
1514 y(27)-40 1570 y(28)-40 1627 y(29)-40 1683 y(30)-40 1740
y(31)-40 1796 y(32)-40 1853 y(33)-40 1909 y(34)-40 1966 y(35)-40
2022 y(36)-40 2078 y(37)-40 2135 y(38)-40 2191 y(39)-40 2248
y(40)-40 2304 y(41)-40 2361 y(42)-40 2417 y(43)-40 2474 y(44)-40
2530 y(45)-40 2587 y(46)-40 2643 y(47)-40 2699 y(48)p eop
%%Page: 44 44
bop 75 -100 a FA(44)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y FA(w)o(an)o(ts)d(to)h(pass)g
(messages)g(that)f(con)o(tain)i(v)m(alues)g(with)g(di\013eren)o(t)f(datat)o
(yp)q(es)g(\(e.g.,)f(an)h(in)o(teger)h(coun)o(t,)75 106 y(follo)o(w)o(ed)i(b)
o(y)f(a)g(sequence)i(of)e(real)h(n)o(um)o(b)q(ers\);)f(and)h(one)g(often)f(w)
o(an)o(ts)f(to)h(send)h(noncon)o(tiguous)g(data)75 162 y(\(e.g.)h(a)12
b(sub-blo)q(c)o(k)i(of)e(a)g(matrix\).)18 b(One)13 b(solution)g(is)g(to)f
(pro)o(vide)h(functions)g(that)e(pac)o(k)i(noncon)o(tiguous)75
219 y(data)f(in)o(to)h(a)g(con)o(tiguous)g(bu\013er)g(at)f(the)h(sender)h
(site)f(and)g(unpac)o(k)h(it)f(bac)o(k)g(at)f(the)h(receiv)o(er)h(site.)19
b(This)75 275 y(has)f(the)g(disadv)m(an)o(tage)g(of)g(requiring)h(additional)
h(memory-to-memory)c(cop)o(y)i(op)q(erations)g(at)g(b)q(oth)75
332 y(sites,)12 b(ev)o(en)f(when)g(the)g(comm)o(unication)g(subsystem)g(has)f
(scatter-gather)g(capabilities.)20 b(Instead,)12 b(MPI)75 388
y(pro)o(vides)22 b(mec)o(hanisms)f(to)g(sp)q(ecify)h(more)f(general,)i(mixed)
f(and)f(noncon)o(tiguous)g(comm)o(unication)75 444 y(bu\013ers.)29
b(It)19 b(is)g(up)g(to)f(the)g(implemen)o(tation)i(to)e(decide)i(whether)e
(data)g(should)h(b)q(e)h(\014rst)e(pac)o(k)o(ed)g(in)75 501
y(a)e(con)o(tiguous)h(bu\013er)g(b)q(efore)g(b)q(eing)h(transmitted,)f(or)f
(whether)h(it)g(can)g(b)q(e)g(collected)i(directly)f(from)75
557 y(where)d(it)h(resides.)166 614 y(The)e(general)h(mec)o(hanisms)g(pro)o
(vided)g(here)f(allo)o(w)h(one)f(to)g(transfer)f(directly)l(,)j(without)e
(cop)o(ying,)75 670 y(ob)s(jects)j(of)g(v)m(arious)h(shap)q(e)h(and)f(size.)
28 b(It)17 b(is)i(not)e(assumed)h(that)f(the)g(MPI)h(library)g(is)h(cognizan)
o(t)e(of)75 727 y(the)f(ob)s(jects)g(declared)h(in)g(the)f(host)g(language;)g
(th)o(us,)g(if)g(one)g(w)o(an)o(ts)f(to)h(transfer)f(a)h(structure,)f(or)h
(an)75 783 y(arra)o(y)d(section,)i(it)f(will)i(b)q(e)f(necessary)f(to)g(pro)o
(vide)h(in)g(MPI)f(a)g(de\014nition)i(of)e(a)g(comm)o(unication)h(bu\013er)75
840 y(that)e(mimics)j(the)e(de\014nition)i(of)e(the)g(structure)g(or)f(arra)o
(y)g(section)i(in)g(question.)20 b(These)15 b(facilities)h(can)75
896 y(b)q(e)j(used)g(b)o(y)f(library)h(designers)h(to)d(de\014ne)j(comm)o
(unication)f(functions)g(that)f(can)g(transfer)g(ob)s(jects)75
953 y(de\014ned)g(in)f(the)f(host)g(language)g({)g(b)o(y)h(deco)q(ding)g
(their)g(de\014nitions)h(as)e(a)o(v)m(ailable)i(in)f(a)f(sym)o(b)q(ol)h
(table)75 1009 y(or)e(a)g(dop)q(e)g(v)o(ector.)20 b(Suc)o(h)15
b(higher-lev)o(el)j(comm)o(unication)e(functions)g(are)f(not)g(part)f(of)h
(MPI.)166 1065 y(More)d(general)g(comm)o(unication)i(bu\013ers)e(are)g(sp)q
(eci\014ed)i(b)o(y)f(replacing)g(the)g(basic)g(datat)o(yp)q(es)f(that)75
1122 y(ha)o(v)o(e)e(b)q(een)i(used)f(so)f(far)g(with)h(deriv)o(ed)g(datat)o
(yp)q(es)f(that)g(are)g(constructed)g(from)g(basic)h(datat)o(yp)q(es)f(using)
75 1178 y(the)j(constructors)e(describ)q(ed)j(in)g(this)f(section.)19
b(These)13 b(metho)q(ds)f(of)g(constructing)h(deriv)o(ed)h(datat)o(yp)q(es)75
1235 y(can)h(b)q(e)h(applied)h(recursiv)o(ely)l(.)166 1291
y(A)e Fz(general)j(datat)o(yp)q(e)e FA(is)g(an)f(opaque)h(ob)s(ject)e(that)h
(sp)q(eci\014es)i(t)o(w)o(o)d(things:)143 1384 y Fl(\017)23
b FA(A)15 b(sequence)h(of)f(basic)h(datat)o(yp)q(es)143 1478
y Fl(\017)23 b FA(A)15 b(sequence)h(of)f(in)o(teger)g(\(b)o(yte\))g
(displacemen)o(ts)166 1571 y(The)22 b(displacemen)o(ts)g(are)g(not)f
(required)h(to)f(b)q(e)h(p)q(ositiv)o(e,)i(distinct,)g(or)d(in)h(increasing)h
(order;)75 1628 y(therefore)17 b(the)g(order)g(of)f(items)i(need)g(not)f
(coincide)i(with)e(their)h(order)f(in)g(store,)g(and)g(an)g(item)h(ma)o(y)75
1684 y(app)q(ear)c(more)g(than)g(once.)20 b(W)l(e)14 b(call)h(suc)o(h)g(pair)
f(of)g(sequences)h(\(or)e(sequence)j(of)d(pairs\))h(a)g Fz(t)o(yp)q(e)i(map)p
FA(.)75 1740 y(The)22 b(sequence)g(of)f(basic)h(datat)o(yp)q(es)f
(\(displacemen)o(ts)h(ignored\))g(is)f(the)h Fz(t)o(yp)q(e)i(signature)e
FA(of)f(the)75 1797 y(datat)o(yp)q(e.)166 1853 y(Let)476 1910
y Fi(T)6 b(y)r(pemap)12 b FA(=)h Fl(f)p FA(\()p Fi(ty)r(pe)849
1917 y Fj(0)867 1910 y Fi(;)8 b(disp)972 1917 y Fj(0)990 1910
y FA(\))p Fi(;)g(:::;)f FA(\()p Fi(ty)r(pe)1190 1917 y Fg(n)p
Fh(\000)p Fj(1)1253 1910 y Fi(;)h(disp)1358 1917 y Fg(n)p Fh(\000)p
Fj(1)1421 1910 y FA(\))p Fl(g)p Fi(;)75 1993 y FA(b)q(e)16
b(suc)o(h)f(a)g(t)o(yp)q(e)h(map,)e(where)i Fi(ty)r(pe)709
2000 y Fg(i)738 1993 y FA(are)f(basic)h(t)o(yp)q(es,)f(and)g
Fi(disp)1233 2000 y Fg(i)1261 1993 y FA(are)g(displacemen)o(ts.)22
b(Let)676 2094 y Fi(T)6 b(y)r(pesig)14 b FA(=)f Fl(f)p Fi(ty)r(pe)1005
2101 y Fj(0)1023 2094 y Fi(;)8 b(:::;)g(ty)r(pe)1188 2101 y
Fg(n)p Fh(\000)p Fj(1)1251 2094 y Fl(g)75 2195 y FA(b)q(e)14
b(the)f(asso)q(ciated)h(t)o(yp)q(e)f(signature.)19 b(This)14
b(t)o(yp)q(e)f(map,)g(together)g(with)g(a)g(base)g(address)h
Fr(buf)p FA(,)f(sp)q(eci\014es)75 2252 y(a)19 b(comm)o(unication)i(bu\013er:)
28 b(the)20 b(comm)o(unication)h(bu\013er)e(that)g(consists)h(of)f
Fi(n)h FA(en)o(tries,)h(where)f(the)75 2308 y Fi(i)p FA(-th)e(en)o(try)g(is)h
(at)e(address)h Fi(buf)f FA(+)c Fi(disp)778 2315 y Fg(i)809
2308 y FA(and)19 b(has)f(t)o(yp)q(e)g Fi(ty)r(pe)1174 2315
y Fg(i)1188 2308 y FA(.)29 b(A)18 b(message)g(assem)o(bled)h(from)f(suc)o(h)
75 2365 y(comm)o(unication)e(bu\013er)f(will)i(consist)e(of)g
Fi(n)h FA(v)m(alues,)g(of)e(the)i(t)o(yp)q(es)f(de\014ned)h(b)o(y)g
Fi(T)6 b(y)r(pesig)r FA(.)166 2421 y(W)l(e)11 b(can)f(use)h(a)f(handle)i(to)e
(a)g(general)h(datat)o(yp)q(e)f(as)h(an)f(argumen)o(t)g(in)h(a)f(send)i(or)e
(receiv)o(e)h(op)q(eration,)75 2478 y(in)j(replacemen)o(t)f(of)f(a)h(basic)g
(datat)o(yp)q(e)g(argumen)o(t.)18 b(The)13 b(op)q(eration)g
Fv(MPI)p 1359 2478 14 2 v 16 w(SEND\(buf,)h(1,)e(datat)o(yp)q(e,...\))75
2534 y FA(will)j(use)e(the)h(send)g(bu\013er)f(de\014ned)h(b)o(y)g(the)f
(base)g(address)h Fv(buf)g FA(and)f(the)g(general)h(datat)o(yp)q(e)f(asso)q
(ciated)75 2591 y(with)f Fv(datat)o(yp)q(e)p FA(;)i(it)e(will)i(generate)d(a)
h(message)f(with)h(the)g(t)o(yp)q(e)g(signature)g(determined)h(b)o(y)e(the)h
Fv(datat)o(yp)q(e)75 2647 y FA(argumen)o(t.)28 b Fv(MPI)p 390
2647 V 16 w(RECV\(buf,)20 b(1,)e(datat)o(yp)q(e,...\))29 b
FA(will)20 b(use)e(the)h(receiv)o(e)g(bu\013er)f(de\014ned)h(b)o(y)g(the)f
(base)75 2704 y(address)d Fv(buf)h FA(and)g(the)f(general)h(datat)o(yp)q(e)e
(asso)q(ciated)i(with)f Fv(datat)o(yp)q(e)p FA(.)1967 46 y
Fy(1)1967 103 y(2)1967 159 y(3)1967 215 y(4)1967 272 y(5)1967
328 y(6)1967 385 y(7)1967 441 y(8)1967 498 y(9)1959 554 y(10)1959
611 y(11)1959 667 y(12)1959 724 y(13)1959 780 y(14)1959 836
y(15)1959 893 y(16)1959 949 y(17)1959 1006 y(18)1959 1062 y(19)1959
1119 y(20)1959 1175 y(21)1959 1232 y(22)1959 1288 y(23)1959
1345 y(24)1959 1401 y(25)1959 1457 y(26)1959 1514 y(27)1959
1570 y(28)1959 1627 y(29)1959 1683 y(30)1959 1740 y(31)1959
1796 y(32)1959 1853 y(33)1959 1909 y(34)1959 1966 y(35)1959
2022 y(36)1959 2078 y(37)1959 2135 y(38)1959 2191 y(39)1959
2248 y(40)1959 2304 y(41)1959 2361 y(42)1959 2417 y(43)1959
2474 y(44)1959 2530 y(45)1959 2587 y(46)1959 2643 y(47)1959
2699 y(48)p eop
%%Page: 45 45
bop 75 -100 a Fw(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b FA(45)166 49 y(General)16 b(datat)o(yp)q(es)e(can)i(b)q(e)g(used)f(in)h
(all)h(send)e(and)h(receiv)o(e)g(op)q(erations.)k(W)l(e)c(address)f(later)g
(in)75 106 y(section)h(1.13.5)d(the)i(case)h(where)f(the)g(second)h(argumen)o
(t)e Fv(count)j FA(has)e(v)m(alue)h Fi(>)d FA(1.)166 162 y(The)e(basic)g
(datat)o(yp)q(es)f(presen)o(ted)i(in)f(section)g(1.2.1)f(are)g(particular)h
(cases)g(of)f(a)h(general)g(datat)o(yp)q(e,)75 219 y(and)19
b(are)f(prede\014ned.)32 b(Th)o(us,)19 b Fv(MPI)p 711 219 14
2 v 16 w(INT)f FA(is)h(a)g(prede\014ned)h(handle)g(to)e(a)g(datat)o(yp)q(e)g
(with)h(t)o(yp)q(e)g(map)75 275 y Fl(f)p FA(\()p Fv(int)p Fi(;)8
b FA(0\))p Fl(g)p FA(,)j(with)i(one)g(en)o(try)f(of)g(t)o(yp)q(e)h
Fv(int)g FA(and)f(displacemen)o(t)i(zero.)19 b(And)13 b(similarly)i(for)d
(all)h(other)f(basic)75 332 y(datat)o(yp)q(es.)166 388 y(The)j
Fz(exten)o(t)f FA(of)g(a)g(datat)o(yp)q(e)g(is)h(de\014ned)g(to)f(b)q(e)h
(the)g(span)f(from)g(the)g(\014rst)g(b)o(yte)h(to)e(the)i(last)f(b)o(yte)75
444 y(o)q(ccupied)19 b(b)o(y)d(en)o(tries)h(in)h(this)f(datat)o(yp)q(e,)f
(rounded)h(up)g(to)f(satisfy)h(alignmen)o(t)g(requiremen)o(ts.)25
b(That)75 501 y(is,)15 b(if)476 557 y Fi(T)6 b(y)r(pemap)12
b FA(=)h Fl(f)p FA(\()p Fi(ty)r(pe)849 564 y Fj(0)867 557 y
Fi(;)8 b(disp)972 564 y Fj(0)990 557 y FA(\))p Fi(;)g(:::;)f
FA(\()p Fi(ty)r(pe)1190 564 y Fg(n)p Fh(\000)p Fj(1)1253 557
y Fi(;)h(disp)1358 564 y Fg(n)p Fh(\000)p Fj(1)1421 557 y FA(\))p
Fl(g)p Fi(;)75 635 y FA(then)501 726 y Fi(l)q(b)p FA(\()p Fi(T)e(y)r(pemap)p
FA(\))39 b(=)j(min)906 752 y Fg(j)959 726 y Fi(disp)1043 733
y Fg(j)1060 726 y Fi(;)489 812 y(ub)p FA(\()p Fi(T)6 b(y)r(pemap)p
FA(\))40 b(=)i(max)911 839 y Fg(j)961 812 y FA(\()p Fi(disp)1063
819 y Fg(j)1089 812 y FA(+)11 b Fi(siz)r(eof)5 b FA(\()p Fi(ty)r(pe)1367
819 y Fg(j)1385 812 y FA(\)\))p Fi(;)22 b FA(and)406 899 y
Fi(extent)p FA(\()p Fi(T)6 b(y)r(pemap)p FA(\))42 b(=)g Fi(ub)p
FA(\()p Fi(T)6 b(y)r(pemap)p FA(\))j Fl(\000)h Fi(l)q(b)p FA(\()p
Fi(T)c(y)r(pemap)p FA(\))i(+)j Fi(\017:)238 b FA(\(1.1\))75
990 y(If)17 b Fi(ty)r(pe)206 997 y Fg(i)237 990 y FA(requires)g(alignmen)o(t)
g(to)f(a)h(b)o(yte)f(address)h(that)f(is)h(is)g(a)f(m)o(ultiple)j(of)d
Fi(k)1474 997 y Fg(i)1487 990 y FA(,)h(then)g Fi(\017)g FA(is)g(the)g(least)
75 1046 y(nonnegativ)o(e)f(incremen)o(t)g(needed)g(to)f(round)g
Fi(extent)p FA(\()p Fi(T)6 b(y)r(pemap)p FA(\))16 b(to)e(the)h(next)h(m)o
(ultiple)h(of)d(max)1794 1053 y Fg(i)1815 1046 y Fi(k)1839
1053 y Fg(i)1853 1046 y FA(.)166 1103 y(Example:)23 b(Assume)17
b(that)f Fi(T)6 b(y)r(pe)14 b FA(=)h Fl(f)p FA(\()p Fv(double)q
Fi(;)8 b FA(0\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g FA(8\))p
Fl(g)15 b FA(\(a)h Fv(double)h FA(at)f(displacemen)o(t)i(zero,)75
1159 y(follo)o(w)o(ed)g(b)o(y)g(a)f Fv(cha)o(r)g FA(at)g(displacemen)o(t)j
(eigh)o(t\).)27 b(Assume,)18 b(furthermore,)f(that)g(doubles)i(ha)o(v)o(e)e
(to)g(b)q(e)75 1216 y(strictly)e(aligned)g(at)f(addresses)h(that)e(are)h(m)o
(ultiple)i(of)e(eigh)o(t.)20 b(Then,)15 b(the)f(exten)o(t)g(of)g(this)h
(datat)o(yp)q(e)e(is)75 1272 y(16)d(\(9)g(rounded)h(to)f(the)h(next)g(m)o
(ultiple)h(of)f(8\).)17 b(A)11 b(datat)o(yp)q(e)f(that)g(consists)h(of)f(a)g
(c)o(haracter)g(immediately)75 1329 y(follo)o(w)o(ed)16 b(b)o(y)f(a)g(double)
h(will)h(also)e(ha)o(v)o(e)g(an)g(exten)o(t)g(of)g(16.)189
1421 y Fr(R)n(ationale.)39 b FA(The)15 b(de\014nition)h(of)e(exten)o(t)g(is)h
(motiv)m(ated)f(b)o(y)h(the)f(assumption)h(that)e(the)i(amoun)o(t)189
1478 y(of)i(padding)i(added)g(at)e(the)h(end)g(of)g(eac)o(h)g(structure)f(in)
i(an)f(arra)o(y)e(of)i(structures)f(is)i(the)f(least)189 1534
y(needed)d(to)e(ful\014ll)j(alignmen)o(t)e(constrain)o(ts.)19
b(More)14 b(explicit)i(con)o(trol)d(of)g(the)h(exten)o(t)g(is)g(pro)o(vided)
189 1591 y(in)i(section)g(1.13.3.)k(Suc)o(h)c(explicit)i(con)o(trol)e(is)g
(needed)h(in)f(cases)g(where)g(the)g(assumption)g(do)q(es)189
1647 y(not)e(hold,)i(e.g.)j(where)d(union)g(t)o(yp)q(es)f(are)g(used.)21
b(\()p Fr(End)15 b(of)i(r)n(ationale.)p FA(\))75 1767 y Fs(1.13.1)49
b(Datat)o(yp)q(e)17 b(constructo)o(rs)75 1853 y Fv(Contiguous)47
b FA(The)16 b(simplest)i(datat)o(yp)q(e)e(constructor)f(is)i
Fv(MPI)p 1171 1853 V 16 w(TYPE)p 1304 1853 V 17 w(CONTIGUOUS)h
FA(whic)o(h)f(allo)o(ws)75 1909 y(replication)g(of)e(a)g(datat)o(yp)q(e)f(in)
o(to)h(con)o(tiguous)h(lo)q(cations.)75 2013 y Fv(MPI)p 160
2013 V 16 w(TYPE)p 293 2013 V 17 w(CONTIGUOUS\(count,)h(oldt)o(yp)q(e,)f
(newt)o(yp)q(e\))117 2090 y Fu(IN)155 b Fv(count)482 b Fu(replication)14
b(coun)o(t)g(\(nonnegativ)o(e)g(in)o(teger\))117 2164 y(IN)155
b Fv(oldt)o(yp)q(e)450 b Fu(old)13 b(datat)o(yp)q(e)i(\(handle\))117
2237 y(OUT)108 b Fv(newt)o(yp)q(e)433 b Fu(new)15 b(datat)o(yp)q(e)f
(\(handle\))75 2361 y Ft(int)23 b(MPI)p 245 2361 15 2 v 17
w(Type)p 358 2361 V 17 w(contiguous\(int)f(count,)h(MPI)p 972
2361 V 17 w(Datatype)f(oldtype,)393 2418 y(MPI)p 468 2418 V
17 w(Datatype)h(*newtype\))75 2504 y(MPI)p 150 2504 V 17 w(TYPE)p
263 2504 V 16 w(CONTIGUOUS\(COUNT,)f(OLDTYPE,)h(NEWTYPE,)f(IERROR\))170
2561 y(INTEGER)h(COUNT,)g(OLDTYPE,)g(NEWTYPE,)g(IERROR)166
2647 y Fv(newt)o(yp)q(e)c FA(is)f(the)f(datat)o(yp)q(e)g(obtained)h(b)o(y)f
(concatenating)h Fv(count)h FA(copies)f(of)f Fv(oldt)o(yp)q(e)p
FA(.)27 b(Concate-)75 2704 y(nation)15 b(is)h(de\014ned)h(using)f
Fr(extent)e FA(as)h(the)h(size)g(of)e(the)i(concatenated)f(copies.)-32
46 y Fy(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: 46 46
bop 75 -100 a FA(46)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y Fq(Discussion:)55
b Fu(Here,)15 b(and)f(in)g(the)h(other)f(datat)o(yp)q(e)h(constructors,)h
(the)f(input)f(datat)o(yp)q(e)g(argumen)o(t)g(of)-1905 b Fn(\))75
106 y Fu(the)16 b(C)g(function)f(is)h(passed)h(b)o(y)e(v)n(alue,)g(and)h(the)
g(output)g(datat)o(yp)q(e)g(argumen)o(t)f(is)h(passed)g(b)o(y)g(reference.)26
b(I.e.,)75 162 y(\(...,oldt)o(yp)q(e,)12 b(*newt)o(yp)q(e\).)18
b(It)c(has)g(b)q(een)h(argued)g(that)f(it)f(is)h(more)f(con)o(v)o(enien)o(t)h
(to)g(pass)g(b)q(oth)g(via)f(a)h(p)q(oin)o(ter.)166 301 y FA(Example:)31
b(let)21 b Fv(oldt)o(yp)q(e)h FA(ha)o(v)o(e)e(t)o(yp)q(e)h(map)f
Fl(f)p FA(\()p Fv(double)q Fi(;)8 b FA(0\))p Fi(;)g FA(\()p
Fv(cha)o(r)n Fi(;)g FA(8\))p Fl(g)p Fi(;)18 b FA(with)j(exten)o(t)g(16,)g
(and)f(let)75 358 y Fv(count)14 b FA(=)f(3.)19 b(The)d(t)o(yp)q(e)f(map)g(of)
g(the)g(datat)o(yp)q(e)g(returned)g(b)o(y)h Fv(newt)o(yp)q(e)h
FA(is)308 458 y Fl(f)p FA(\()p Fv(double)q Fi(;)8 b FA(0\))p
Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g FA(8\))p Fi(;)g FA(\()p
Fv(double)n Fi(;)g FA(16\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g
FA(24\))p Fi(;)g FA(\()p Fv(double)o Fi(;)g FA(32\))p Fi(;)g
FA(\()p Fv(cha)o(r)m Fi(;)g FA(40\))p Fl(g)p FA(;)75 558 y(i.e.,)15
b(alternating)g Fv(double)i FA(and)e Fv(cha)o(r)g FA(elemen)o(ts,)h(with)f
(displacemen)o(ts)i(0)p Fi(;)8 b FA(8)p Fi(;)g FA(16)p Fi(;)f
FA(24)p Fi(;)g FA(32)o Fi(;)h FA(4)o(0.)166 615 y(In)16 b(general,)f(assume)g
(that)g(the)g(t)o(yp)q(e)g(map)g(of)g Fv(oldt)o(yp)q(e)h FA(is)600
715 y Fl(f)p FA(\()p Fi(ty)r(pe)725 722 y Fj(0)743 715 y Fi(;)8
b(disp)848 722 y Fj(0)865 715 y FA(\))p Fi(;)g(:::;)g FA(\()p
Fi(ty)r(pe)1066 722 y Fg(n)p Fh(\000)p Fj(1)1128 715 y Fi(;)g(disp)1233
722 y Fg(n)p Fh(\000)p Fj(1)1297 715 y FA(\))p Fl(g)p Fi(;)75
815 y FA(with)16 b(exten)o(t)e Fi(extent)p FA(.)22 b(Then)15
b Fv(newt)o(yp)q(e)i FA(has)e(a)g(t)o(yp)q(e)h(map)f(with)g
Fv(count)c Fl(\001)f Fv(n)16 b FA(en)o(tries)f(de\014ned)i(b)o(y:)75
915 y Fl(f)p FA(\()p Fi(ty)r(pe)200 922 y Fj(0)218 915 y Fi(;)8
b(disp)323 922 y Fj(0)341 915 y FA(\))p Fi(;)g(:::;)g FA(\()o
Fi(ty)r(pe)541 922 y Fg(n)p Fh(\000)p Fj(1)604 915 y Fi(;)g(disp)709
922 y Fg(n)p Fh(\000)p Fj(1)773 915 y FA(\))p Fi(;)g FA(\()p
Fi(ty)r(pe)914 922 y Fj(0)931 915 y Fi(;)g(disp)1036 922 y
Fj(0)1061 915 y FA(+)h Fi(extent)p FA(\))p Fi(;)f(:::;)g FA(\()p
Fi(ty)r(pe)1433 922 y Fg(n)p Fh(\000)p Fj(1)1496 915 y Fi(;)g(disp)1601
922 y Fg(n)p Fh(\000)p Fj(1)1673 915 y FA(+)g Fi(extent)p FA(\))p
Fi(;)145 1015 y(:::;)g FA(\()p Fi(ty)r(pe)307 1022 y Fj(0)324
1015 y Fi(;)g(disp)429 1022 y Fj(0)456 1015 y FA(+)j Fi(extent)g
Fl(\001)f FA(\()p Fv(count)h Fl(\000)g FA(1\)\))p Fi(;)d(:::;)f
FA(\()p Fi(ty)r(pe)1084 1022 y Fg(n)p Fh(\000)p Fj(1)1146 1015
y Fi(;)h(disp)1251 1022 y Fg(n)p Fh(\000)p Fj(1)1325 1015 y
FA(+)j Fi(extent)g Fl(\001)f FA(\()p Fv(count)h Fl(\000)f FA(1\)\))p
Fl(g)p Fi(:)75 1135 y Fv(V)o(ecto)o(r)45 b FA(The)16 b(function)g
Fv(MPI)p 600 1135 14 2 v 16 w(TYPE)p 733 1135 V 17 w(VECTOR)g
FA(is)g(a)f(more)g(general)h(constructor)e(that)h(allo)o(ws)g(repli-)75
1192 y(cation)20 b(of)g(a)g(datat)o(yp)q(e)f(in)o(to)h(lo)q(cations)h(that)e
(consist)i(of)e(equally)j(spaced)f(blo)q(c)o(ks.)35 b(Eac)o(h)20
b(blo)q(c)o(k)g(is)75 1248 y(obtained)g(b)o(y)f(concatenating)h(the)f(same)g
(n)o(um)o(b)q(er)h(of)f(copies)h(of)f(the)g(old)h(datat)o(yp)q(e.)32
b(The)19 b(spacing)75 1304 y(b)q(et)o(w)o(een)d(blo)q(c)o(ks)f(is)h(a)f(m)o
(ultiple)i(of)e(the)g(exten)o(t)g(of)g(the)g(old)h(datat)o(yp)q(e.)75
1408 y Fv(MPI)p 160 1408 V 16 w(TYPE)p 293 1408 V 17 w(VECTOR\()g(count,)g
(blo)q(cklength,)g(stride,)g(oldt)o(yp)q(e,)g(newt)o(yp)q(e\))117
1485 y Fu(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(blo)q(c)o(ks)g
(\(nonnegativ)o(e)f(in)o(teger\))117 1560 y(IN)155 b Fv(blo)q(cklength)371
b Fu(n)o(um)o(b)q(er)16 b(of)h(elemen)o(ts)g(in)f(eac)o(h)i(blo)q(c)o(k)e
(\(nonnegativ)o(e)h(in)o(te-)905 1617 y(ger\))117 1691 y(IN)155
b Fv(stride)484 b Fu(n)o(um)o(b)q(er)13 b(of)f(elemen)o(ts)h(b)q(et)o(w)o
(een)h(start)g(of)f(eac)o(h)g(blo)q(c)o(k)g(\(in)o(te-)905
1748 y(ger\))117 1823 y(IN)155 b Fv(oldt)o(yp)q(e)450 b Fu(old)13
b(datat)o(yp)q(e)i(\(handle\))117 1898 y(OUT)108 b Fv(newt)o(yp)q(e)433
b Fu(new)15 b(datat)o(yp)q(e)f(\(handle\))75 2022 y Ft(int)23
b(MPI)p 245 2022 15 2 v 17 w(Type)p 358 2022 V 17 w(vector\(int)f(count,)h
(int)h(blocklength,)e(int)i(stride,)393 2078 y(MPI)p 468 2078
V 17 w(Datatype)f(oldtype,)f(MPI)p 986 2078 V 17 w(Datatype)h(*newtype\))75
2165 y(MPI)p 150 2165 V 17 w(TYPE)p 263 2165 V 16 w(VECTOR\(COUNT,)f
(BLOCKLENGTH,)h(STRIDE,)g(OLDTYPE,)f(NEWTYPE,)h(IERROR\))170
2221 y(INTEGER)g(COUNT,)g(BLOCKLENGTH,)g(STRIDE,)g(OLDTYPE,)f(NEWTYPE,)h
(IERROR)166 2308 y FA(Example:)c(Assume,)12 b(again,)g(that)f
Fv(oldt)o(yp)q(e)i FA(has)f(t)o(yp)q(e)g(map)g Fl(f)p FA(\()p
Fv(double)p Fi(;)c FA(0\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g
FA(8\))p Fl(g)p Fi(;)i FA(with)i(exten)o(t)75 2364 y(16.)20
b(A)c(call)h(to)d Fv(MPI)p 428 2364 14 2 v 16 w(TYPE)p 561
2364 V 17 w(VECTOR\()i(2,)f(3,)g(4,)g(oldt)o(yp)q(e,)i(newt)o(yp)q(e\))g
FA(will)g(create)e(the)h(datat)o(yp)q(e)f(with)75 2421 y(t)o(yp)q(e)g(map)320
2521 y Fl(f)p FA(\()p Fv(double)p Fi(;)8 b FA(0\))p Fi(;)g
FA(\()p Fv(cha)o(r)n Fi(;)g FA(8\))p Fi(;)g FA(\()p Fv(double)o
Fi(;)g FA(16\))p Fi(;)g FA(\()p Fv(cha)o(r)m Fi(;)g FA(24\))p
Fi(;)g FA(\()p Fv(double)o Fi(;)g FA(32\))p Fi(;)g FA(\()p
Fv(cha)o(r)n Fi(;)g FA(40\))p Fi(;)279 2621 y FA(\()p Fv(double)q
Fi(;)g FA(64\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g FA(72\))p
Fi(;)g FA(\()p Fv(double)n Fi(;)g FA(80\))p Fi(;)g FA(\()p
Fv(cha)o(r)n Fi(;)g FA(88\))p Fi(;)g FA(\()p Fv(double)n Fi(;)g
FA(96\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g FA(104\))p Fl(g)i
FA(:)75 2704 y(t)o(w)o(o)k(blo)q(c)o(ks)i(with)f(three)h(copies)g(eac)o(h)f
(of)g(the)g(old)h(t)o(yp)q(e,)f(starting)f(4*16)g(apart.)1967
46 y Fy(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: 47 47
bop 75 -100 a Fw(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b FA(47)166 49 y(A)15 b(call)h(to)f Fv(MPI)p 439 49 14 2 v
16 w(TYPE)p 572 49 V 17 w(VECTOR\(3,)g(1,)g(-2,)f(oldt)o(yp)q(e,)i(newt)o(yp)
q(e\))h FA(will)g(create)e(the)g(datat)o(yp)q(e)237 154 y Fl(f)p
FA(\()p Fv(double)q Fi(;)8 b FA(0\))p Fi(;)g FA(\()p Fv(cha)o(r)n
Fi(;)g FA(8\))p Fi(;)g FA(\()p Fv(double)o Fi(;)g Fl(\000)p
FA(32\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g Fl(\000)p FA(24\))p
Fi(;)g FA(\()p Fv(double)o Fi(;)g Fl(\000)p FA(64\))p Fi(;)g
FA(\()p Fv(cha)o(r)n Fi(;)g Fl(\000)p FA(56\))p Fl(g)p Fi(:)166
260 y FA(In)16 b(general,)f(assume)g(that)g Fv(oldt)o(yp)q(e)h
FA(has)f(t)o(yp)q(e)g(map)600 365 y Fl(f)p FA(\()p Fi(ty)r(pe)725
372 y Fj(0)743 365 y Fi(;)8 b(disp)848 372 y Fj(0)865 365 y
FA(\))p Fi(;)g(:::;)g FA(\()p Fi(ty)r(pe)1066 372 y Fg(n)p
Fh(\000)p Fj(1)1128 365 y Fi(;)g(disp)1233 372 y Fg(n)p Fh(\000)p
Fj(1)1297 365 y FA(\))p Fl(g)p Fi(;)75 470 y FA(with)15 b(exten)o(t)e
Fi(extent)p FA(.)21 b(The)15 b(newly)g(created)f(datat)o(yp)q(e)f(has)i(a)e
(t)o(yp)q(e)i(map)f(with)g Fv(count)9 b Fl(\001)f Fv(blo)q(cklength)i
Fl(\001)e Fi(n)75 526 y FA(en)o(tries:)611 586 y Fl(f)p FA(\()p
Fi(ty)r(pe)736 593 y Fj(0)754 586 y Fi(;)g(disp)859 593 y Fj(0)877
586 y FA(\))p Fi(;)g(:::;)g FA(\()o Fi(ty)r(pe)1077 593 y Fg(n)p
Fh(\000)p Fj(1)1140 586 y Fi(;)g(disp)1245 593 y Fg(n)p Fh(\000)p
Fj(1)1309 586 y FA(\))p Fi(;)409 675 y FA(\()p Fi(ty)r(pe)511
682 y Fj(0)530 675 y Fi(;)g(disp)635 682 y Fj(0)662 675 y FA(+)j
Fi(extent)p FA(\))p Fi(;)d(:::;)g FA(\()p Fi(ty)r(pe)1036 682
y Fg(n)p Fh(\000)p Fj(1)1099 675 y Fi(;)g(disp)1204 682 y Fg(n)p
Fh(\000)p Fj(1)1278 675 y FA(+)j Fi(extent)p FA(\))p Fi(;)d(:::;)75
765 y FA(\()p Fi(ty)r(pe)177 772 y Fj(0)196 765 y Fi(;)g(disp)301
772 y Fj(0)328 765 y FA(+)i(\()p Fv(blo)q(cklength)i Fl(\000)e
FA(1\))f Fl(\001)h Fi(extent)p FA(\))p Fi(;)e(:::;)g FA(\()p
Fi(ty)r(pe)1065 772 y Fg(n)p Fh(\000)p Fj(1)1128 765 y Fi(;)g(disp)1233
772 y Fg(n)p Fh(\000)p Fj(1)1307 765 y FA(+)j(\()p Fv(blo)q(cklength)g
Fl(\000)f FA(1\))g Fl(\001)f Fi(extent)p FA(\))p Fi(;)273 854
y FA(\()p Fi(ty)r(pe)375 861 y Fj(0)393 854 y Fi(;)f(disp)498
861 y Fj(0)526 854 y FA(+)i Fv(stride)h Fl(\001)f Fi(extent)p
FA(\))p Fi(;)e(:::;)g FA(\()p Fi(ty)r(pe)1036 861 y Fg(n)p
Fh(\000)p Fj(1)1099 854 y Fi(;)g(disp)1204 861 y Fg(n)p Fh(\000)p
Fj(1)1278 854 y FA(+)j Fv(stride)g Fl(\001)f Fi(extent)p FA(\))p
Fi(;)e(:::;)455 944 y FA(\()p Fi(ty)r(pe)557 951 y Fj(0)576
944 y Fi(;)g(disp)681 951 y Fj(0)708 944 y FA(+)j(\()p Fv(stride)g
FA(+)f Fv(blo)q(cklength)i Fl(\000)f FA(1\))e Fl(\001)h Fi(extent)p
FA(\))p Fi(;)e(:::;)403 1033 y FA(\()p Fi(ty)r(pe)505 1040
y Fg(n)p Fh(\000)p Fj(1)570 1033 y Fi(;)g(disp)675 1040 y Fg(n)p
Fh(\000)p Fj(1)749 1033 y FA(+)i(\()p Fv(stride)h FA(+)f Fv(blo)q(cklength)i
Fl(\000)f FA(1\))e Fl(\001)h Fi(extent)p FA(\))p Fi(;)e(::::;)523
1123 y FA(\()p Fi(ty)r(pe)625 1130 y Fj(0)643 1123 y Fi(;)g(disp)748
1130 y Fj(0)776 1123 y FA(+)i Fv(stride)h Fl(\001)f FA(\()p
Fv(count)h Fl(\000)f FA(1\))g Fl(\001)g Fi(extent)p FA(\))p
Fi(;)e(:::;)476 1213 y FA(\()p Fi(ty)r(pe)578 1220 y Fg(n)p
Fh(\000)p Fj(1)643 1213 y Fi(;)g(disp)748 1220 y Fg(n)p Fh(\000)p
Fj(1)822 1213 y FA(+)j Fv(stride)g Fl(\001)e FA(\()p Fv(count)i
Fl(\000)g FA(1\))e Fl(\001)h Fi(extent)p FA(\))p Fi(;)e(:::;)329
1302 y FA(\()p Fi(ty)r(pe)431 1309 y Fj(0)450 1302 y Fi(;)g(disp)555
1309 y Fj(0)582 1302 y FA(+)j(\()p Fv(stride)f Fl(\001)g FA(\()p
Fv(count)h Fl(\000)g FA(1\))e(+)h Fv(blo)q(cklength)j Fl(\000)d
FA(1\))f Fl(\001)h Fi(extent)p FA(\))p Fi(;)e(:::;)307 1392
y FA(\()p Fi(ty)r(pe)409 1399 y Fg(n)p Fh(\000)p Fj(1)474 1392
y Fi(;)g(disp)579 1399 y Fg(n)p Fh(\000)p Fj(1)653 1392 y FA(+)i(\()p
Fv(stride)h Fl(\001)e FA(\()p Fv(count)j Fl(\000)e FA(1\))f(+)i
Fv(blo)q(cklength)h Fl(\000)e FA(1\))g Fl(\001)g Fi(extent)p
FA(\))p Fl(g)166 1479 y FA(A)16 b(call)i(to)e Fv(MPI)p 443
1479 V 16 w(TYPE)p 576 1479 V 16 w(CONTIGUOUS\(count,)k(oldt)o(yp)q(e,)d
(newt)o(yp)q(e\))h FA(is)f(equiv)m(alen)o(t)h(to)e(a)g(call)i(to)75
1536 y Fv(MPI)p 160 1536 V 16 w(TYPE)p 293 1536 V 17 w(VECTOR\(count,)g(1,)f
(1,)f(oldt)o(yp)q(e,)h(newt)o(yp)q(e\))p FA(,)h(or)e(to)g(a)h(call)g(to)f
Fv(MPI)p 1495 1536 V 16 w(TYPE)p 1628 1536 V 17 w(VECTOR\(1,)75
1592 y(count,)g(n,)f(oldt)o(yp)q(e,)h(newt)o(yp)q(e\))p FA(,)h
Fv(n)e FA(arbitrary)l(.)75 1718 y Fv(Hvecto)o(r)45 b FA(The)19
b(function)h Fv(MPI)p 631 1718 V 16 w(TYPE)p 764 1718 V 17
w(HVECTOR)g FA(is)f(iden)o(tical)i(to)d Fv(MPI)p 1389 1718
V 16 w(TYPE)p 1522 1718 V 17 w(VECTOR)p FA(,)h(except)75 1774
y(that)h Fv(stride)h FA(is)g(giv)o(en)g(in)g(b)o(ytes,)g(rather)f(then)g(in)i
(elemen)o(ts.)36 b(The)20 b(use)h(for)f(b)q(oth)g(t)o(yp)q(es)h(of)f(v)o
(ector)75 1831 y(constructors)14 b(is)i(illustrated)h(in)f(section)f(1.13.7.)
j(\()p Fv(H)d FA(is)h(used)g(for)e(\\heterogeneous"\).)75 1935
y Fv(MPI)p 160 1935 V 16 w(TYPE)p 293 1935 V 17 w(HVECTOR\()i(count,)g(blo)q
(cklength,)h(stride,)e(oldt)o(yp)q(e,)h(newt)o(yp)q(e\))117
2013 y Fu(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13 b(of)h(blo)q(c)o(ks)g
(\(nonnegativ)o(e)f(in)o(teger\))117 2090 y(IN)155 b Fv(blo)q(cklength)371
b Fu(n)o(um)o(b)q(er)16 b(of)h(elemen)o(ts)g(in)f(eac)o(h)i(blo)q(c)o(k)e
(\(nonnegativ)o(e)h(in)o(te-)905 2147 y(ger\))117 2224 y(IN)155
b Fv(stride)484 b Fu(n)o(um)o(b)q(er)13 b(of)g(b)o(ytes)h(b)q(et)o(w)o(een)h
(start)f(of)f(eac)o(h)h(blo)q(c)o(k)f(\(in)o(teger\))117 2301
y(IN)155 b Fv(oldt)o(yp)q(e)450 b Fu(old)13 b(datat)o(yp)q(e)i(\(handle\))117
2378 y(OUT)108 b Fv(newt)o(yp)q(e)433 b Fu(new)15 b(datat)o(yp)q(e)f
(\(handle\))75 2503 y Ft(int)23 b(MPI)p 245 2503 15 2 v 17
w(Type)p 358 2503 V 17 w(hvector\(int)f(count,)h(int)h(blocklength,)e(MPI)p
1306 2503 V 17 w(Aint)h(stride,)393 2560 y(MPI)p 468 2560 V
17 w(Datatype)g(oldtype,)f(MPI)p 986 2560 V 17 w(Datatype)h(*newtype\))75
2647 y(MPI)p 150 2647 V 17 w(TYPE)p 263 2647 V 16 w(HVECTOR\(COUNT,)f
(BLOCKLENGTH,)h(STRIDE,)f(OLDTYPE,)h(NEWTYPE,)g(IERROR\))170
2704 y(INTEGER)g(COUNT,)g(BLOCKLENGTH,)g(STRIDE,)g(OLDTYPE,)f(NEWTYPE,)h
(IERROR)-32 46 y Fy(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: 48 48
bop 75 -100 a FA(48)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y FA(Assume)f(that)g
Fv(oldt)o(yp)q(e)h FA(has)f(t)o(yp)q(e)g(map)600 155 y Fl(f)p
FA(\()p Fi(ty)r(pe)725 162 y Fj(0)743 155 y Fi(;)8 b(disp)848
162 y Fj(0)865 155 y FA(\))p Fi(;)g(:::;)g FA(\()p Fi(ty)r(pe)1066
162 y Fg(n)p Fh(\000)p Fj(1)1128 155 y Fi(;)g(disp)1233 162
y Fg(n)p Fh(\000)p Fj(1)1297 155 y FA(\))p Fl(g)p Fi(;)75 260
y FA(with)15 b(exten)o(t)e Fi(extent)p FA(.)21 b(The)15 b(newly)g(created)f
(datat)o(yp)q(e)f(has)i(a)e(t)o(yp)q(e)i(map)f(with)g Fv(count)9
b Fl(\001)f Fv(blo)q(cklength)i Fl(\001)e Fi(n)75 317 y FA(en)o(tries:)611
377 y Fl(f)p FA(\()p Fi(ty)r(pe)736 384 y Fj(0)754 377 y Fi(;)g(disp)859
384 y Fj(0)877 377 y FA(\))p Fi(;)g(:::;)g FA(\()o Fi(ty)r(pe)1077
384 y Fg(n)p Fh(\000)p Fj(1)1140 377 y Fi(;)g(disp)1245 384
y Fg(n)p Fh(\000)p Fj(1)1309 377 y FA(\))p Fi(;)409 467 y FA(\()p
Fi(ty)r(pe)511 474 y Fj(0)530 467 y Fi(;)g(disp)635 474 y Fj(0)662
467 y FA(+)j Fi(extent)p FA(\))p Fi(;)d(:::;)g FA(\()p Fi(ty)r(pe)1036
474 y Fg(n)p Fh(\000)p Fj(1)1099 467 y Fi(;)g(disp)1204 474
y Fg(n)p Fh(\000)p Fj(1)1278 467 y FA(+)j Fi(extent)p FA(\))p
Fi(;)d(:::;)75 558 y FA(\()p Fi(ty)r(pe)177 565 y Fj(0)196
558 y Fi(;)g(disp)301 565 y Fj(0)328 558 y FA(+)i(\()p Fv(blo)q(cklength)i
Fl(\000)e FA(1\))f Fl(\001)h Fi(extent)p FA(\))p Fi(;)e(:::;)g
FA(\()p Fi(ty)r(pe)1065 565 y Fg(n)p Fh(\000)p Fj(1)1128 558
y Fi(;)g(disp)1233 565 y Fg(n)p Fh(\000)p Fj(1)1307 558 y FA(+)j(\()p
Fv(blo)q(cklength)g Fl(\000)f FA(1\))g Fl(\001)f Fi(extent)p
FA(\))p Fi(;)434 649 y FA(\()p Fi(ty)r(pe)536 656 y Fj(0)555
649 y Fi(;)f(disp)660 656 y Fj(0)687 649 y FA(+)i Fv(stride)q
FA(\))p Fi(;)e(:::;)g FA(\()p Fi(ty)r(pe)1037 656 y Fg(n)p
Fh(\000)p Fj(1)1099 649 y Fi(;)g(disp)1204 656 y Fg(n)p Fh(\000)p
Fj(1)1278 649 y FA(+)j Fv(stride)q FA(\))p Fi(;)d(:::;)455
740 y FA(\()p Fi(ty)r(pe)557 747 y Fj(0)576 740 y Fi(;)g(disp)681
747 y Fj(0)708 740 y FA(+)j Fv(stride)g FA(+)f(\()p Fv(blo)q(cklength)i
Fl(\000)f FA(1\))e Fl(\001)h Fi(extent)p FA(\))p Fi(;)e(:::;)403
831 y FA(\()p Fi(ty)r(pe)505 838 y Fg(n)p Fh(\000)p Fj(1)570
831 y Fi(;)g(disp)675 838 y Fg(n)p Fh(\000)p Fj(1)749 831 y
FA(+)i Fv(stride)h FA(+)g(\()p Fv(blo)q(cklength)g Fl(\000)g
FA(1\))e Fl(\001)h Fi(extent)p FA(\))p Fi(;)e(::::;)603 921
y FA(\()p Fi(ty)r(pe)705 928 y Fj(0)724 921 y Fi(;)g(disp)829
928 y Fj(0)856 921 y FA(+)j Fv(stride)g Fl(\001)e FA(\()p Fv(count)j
Fl(\000)e FA(1\)\))p Fi(;)e(:::;)557 1012 y FA(\()p Fi(ty)r(pe)659
1019 y Fg(n)p Fh(\000)p Fj(1)724 1012 y Fi(;)g(disp)829 1019
y Fg(n)p Fh(\000)p Fj(1)903 1012 y FA(+)i Fv(stride)h Fl(\001)f
FA(\()p Fv(count)h Fl(\000)f FA(1\)\))p Fi(;)e(:::;)329 1103
y FA(\()p Fi(ty)r(pe)431 1110 y Fj(0)450 1103 y Fi(;)g(disp)555
1110 y Fj(0)582 1103 y FA(+)j Fv(stride)g Fl(\001)e FA(\()p
Fv(count)i Fl(\000)g FA(1\))e(+)i(\()p Fv(blo)q(cklength)h
Fl(\000)e FA(1\))f Fl(\001)h Fi(extent)p FA(\))p Fi(;)e(:::;)307
1194 y FA(\()p Fi(ty)r(pe)409 1201 y Fg(n)p Fh(\000)p Fj(1)474
1194 y Fi(;)g(disp)579 1201 y Fg(n)p Fh(\000)p Fj(1)653 1194
y FA(+)i Fv(stride)h Fl(\001)f FA(\()p Fv(count)h Fl(\000)f
FA(1\))g(+)g(\()p Fv(blo)q(cklength)i Fl(\000)e FA(1\))g Fl(\001)g
Fi(extent)p FA(\))p Fl(g)75 1320 y Fv(Indexed)47 b FA(The)19
b(function)h Fv(MPI)p 629 1320 14 2 v 16 w(TYPE)p 762 1320
V 17 w(INDEXED)f FA(allo)o(ws)h(replication)h(of)d(an)i(old)f(datat)o(yp)q(e)
g(in)o(to)g(a)75 1377 y(sequence)c(of)e(con)o(tiguous)h(blo)q(c)o(ks,)g
(where)g(eac)o(h)g(blo)q(c)o(k)h(can)f(con)o(tain)g(di\013eren)o(t)g(n)o(um)o
(b)q(er)g(of)f(copies)i(and)75 1433 y(ha)o(v)o(e)f(a)g(di\013eren)o(t)g
(displacemen)o(t.)21 b(All)16 b(blo)q(c)o(k)f(displacemen)o(ts)g(are)f(m)o
(ultiples)i(of)e(the)h(old)f(t)o(yp)q(e)h(exten)o(t.)75 1538
y Fv(MPI)p 160 1538 V 16 w(TYPE)p 293 1538 V 17 w(INDEXED\()d(count,)i(a)o
(rra)o(y)p 762 1538 V 14 w(of)p 813 1538 V 16 w(blo)q(cklengths,)h(a)o(rra)o
(y)p 1185 1538 V 15 w(of)p 1237 1538 V 16 w(displacements,)e(oldt)o(yp)q(e,)h
(newt)o(yp)q(e\))117 1673 y Fu(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)34
b(of)f(blo)q(c)o(ks)h({)g(also)f(n)o(um)o(b)q(er)h(of)f(en)o(tries)i(in)905
1729 y Fo(a)o(rra)o(y)p 992 1729 13 2 v 15 w(of)p 1041 1729
V 15 w(displacements)17 b Fu(and)h Fo(a)o(rra)o(y)p 1483 1729
V 15 w(of)p 1532 1729 V 15 w(blo)q(cklengths)i Fu(\(non-)905
1786 y(negativ)o(e)14 b(in)o(teger\))117 1863 y(IN)155 b Fv(a)o(rra)o(y)p
416 1863 14 2 v 15 w(of)p 468 1863 V 16 w(blo)q(cklengths)191
b Fu(n)o(um)o(b)q(er)18 b(of)f(elemen)o(ts)h(p)q(er)i(blo)q(c)o(k)d(\(arra)o
(y)i(of)e(nonnegativ)o(e)905 1919 y(in)o(tegers\))117 1997
y(IN)155 b Fv(a)o(rra)o(y)p 416 1997 V 15 w(of)p 468 1997 V
16 w(displacements)162 b Fu(displacemen)o(t)19 b(for)h(eac)o(h)g(blo)q(c)o
(k,)g(in)g(m)o(ultiples)e(of)h Fo(oldt)o(yp)q(e)905 2053 y
Fu(exten)o(t)c(\(arra)o(y)f(of)f(in)o(teger\))117 2131 y(IN)155
b Fv(oldt)o(yp)q(e)450 b Fu(old)13 b(datat)o(yp)q(e)i(\(handle\))117
2208 y(OUT)108 b Fv(newt)o(yp)q(e)433 b Fu(new)15 b(datat)o(yp)q(e)f
(\(handle\))75 2334 y Ft(int)23 b(MPI)p 245 2334 15 2 v 17
w(Type)p 358 2334 V 17 w(indexed\(int)f(count,)h(int)h(*array)p
1068 2334 V 16 w(of)p 1132 2334 V 17 w(blocklengths,)393 2390
y(int)g(*array)p 636 2390 V 16 w(of)p 700 2390 V 17 w(displacements,)e(MPI)p
1147 2390 V 17 w(Datatype)g(oldtype,)393 2447 y(MPI)p 468 2447
V 17 w(Datatype)h(*newtype\))75 2534 y(MPI)p 150 2534 V 17
w(TYPE)p 263 2534 V 16 w(INDEXED\(COUNT,)f(ARRAY)p 757 2534
V 17 w(OF)p 822 2534 V 17 w(BLOCKLENGTHS,)g(ARRAY)p 1293 2534
V 16 w(OF)p 1357 2534 V 17 w(DISPLACEMENTS,)393 2591 y(OLDTYPE,)h(NEWTYPE,)g
(IERROR\))170 2647 y(INTEGER)g(COUNT,)g(ARRAY)p 651 2647 V
17 w(OF)p 716 2647 V 17 w(BLOCKLENGTHS\(*\),)e(ARRAY)p 1258
2647 V 17 w(OF)p 1323 2647 V 17 w(DISPLACEMENTS\(*\),)170 2704
y(OLDTYPE,)i(NEWTYPE,)g(IERROR)1967 46 y Fy(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: 49 49
bop 75 -100 a Fw(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b FA(49)166 49 y(Example:)25 b(let)19 b Fv(oldt)o(yp)q(e)f
FA(ha)o(v)o(e)g(t)o(yp)q(e)g(map)f Fl(f)p FA(\()p Fv(double)q
Fi(;)8 b FA(0\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g FA(8\))p
Fl(g)p Fi(;)15 b FA(with)j(exten)o(t)g(16.)27 b(Let)18 b Fv(B)g(=)75
106 y(\(3,)13 b(1\))h FA(and)g(let)h Fv(D)f(=)g(\(4,)f(0\))p
FA(.)19 b(A)14 b(call)i(to)d Fv(MPI)p 855 106 14 2 v 16 w(TYPE)p
988 106 V 17 w(INDEXED\(2,)g(B,)h(D,)f(oldt)o(yp)q(e,)j(newt)o(yp)q(e\))f
FA(returns)75 162 y(a)g(datat)o(yp)q(e)g(with)g(t)o(yp)q(e)g(map)285
251 y Fl(f)p FA(\()p Fv(double)q Fi(;)8 b FA(64\))p Fi(;)g
FA(\()p Fv(cha)o(r)n Fi(;)g FA(72\))p Fi(;)g FA(\()p Fv(double)n
Fi(;)g FA(80\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g FA(88\))p
Fi(;)g FA(\()p Fv(double)n Fi(;)g FA(96\))p Fi(;)g FA(\()p
Fv(cha)o(r)n Fi(;)g FA(104\))p Fi(;)760 339 y FA(\()p Fv(double)q
Fi(;)g FA(0\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g FA(8\))p
Fl(g)j FA(:)75 416 y(three)k(copies)h(of)e(the)i(old)f(t)o(yp)q(e)g(starting)
f(at)h(displacemen)o(t)h(64,)e(and)h(one)h(cop)o(y)e(starting)h(at)f
(displace-)75 473 y(men)o(t)h(0.)166 529 y(In)h(general,)f(assume)g(that)g
Fv(oldt)o(yp)q(e)h FA(has)f(t)o(yp)q(e)g(map)600 618 y Fl(f)p
FA(\()p Fi(ty)r(pe)725 625 y Fj(0)743 618 y Fi(;)8 b(disp)848
625 y Fj(0)865 618 y FA(\))p Fi(;)g(:::;)g FA(\()p Fi(ty)r(pe)1066
625 y Fg(n)p Fh(\000)p Fj(1)1128 618 y Fi(;)g(disp)1233 625
y Fg(n)p Fh(\000)p Fj(1)1297 618 y FA(\))p Fl(g)p Fi(;)75 706
y FA(with)35 b(exten)o(t)g Fr(extent)p FA(.)79 b(Let)36 b Fv(B)f
FA(b)q(e)h(the)f Fv(a)o(rra)o(y)p 1013 706 V 15 w(of)p 1065
706 V 16 w(blo)q(cklength)i FA(argumen)o(t)d(and)h Fv(D)g FA(b)q(e)h(the)75
763 y Fv(a)o(rra)o(y)p 173 763 V 15 w(of)p 225 763 V 16 w(displacements)15
b FA(argumen)o(t.)k(The)c(newly)h(created)f(datat)o(yp)q(e)g(has)g
Fi(n)c Fl(\001)1450 731 y Ff(P)1494 741 y Fe(count)p Fh(\000)p
Fj(1)1494 774 y Fg(i)p Fj(=0)1618 763 y Fv(B)p FA([)p Fv(i)p
FA(])k(en)o(tries:)284 851 y Fl(f)p FA(\()p Fi(ty)r(pe)409
858 y Fj(0)428 851 y Fi(;)8 b(disp)533 858 y Fj(0)560 851 y
FA(+)j Fv(D)p FA([)p Fv(0)p FA(])e Fl(\001)g Fi(extent)p FA(\))p
Fi(;)f(:::;)g FA(\()p Fi(ty)r(pe)1047 858 y Fg(n)p Fh(\000)p
Fj(1)1111 851 y Fi(;)g(disp)1216 858 y Fg(n)p Fh(\000)p Fj(1)1290
851 y FA(+)i Fv(D)p FA([)p Fv(0)p FA(])f Fl(\001)h Fi(extent)p
FA(\))p Fi(;)e(:::;)75 940 y FA(\()p Fi(ty)r(pe)177 947 y Fj(0)196
940 y Fi(;)g(disp)301 947 y Fj(0)325 940 y FA(+)f(\()p Fv(D)p
FA([)p Fv(0)p FA(])e(+)i Fv(B)p FA([)p Fv(0)p FA(])f Fl(\000)h
FA(1\))g Fl(\001)g Fi(extent)p FA(\))p Fi(;)h(:::;)g FA(\()p
Fi(ty)r(pe)1037 947 y Fg(n)p Fh(\000)p Fj(1)1099 940 y Fi(;)g(disp)1204
947 y Fg(n)p Fh(\000)p Fj(1)1275 940 y FA(+)f(\()p Fv(D)p FA([)p
Fv(0)p FA(])e(+)i Fv(B)p FA([)p Fv(0)p FA(])g Fl(\000)g FA(1\))g
Fl(\001)g Fi(extent)p FA(\))p Fi(;)h(:::;)134 1017 y FA(\()p
Fi(ty)r(pe)236 1024 y Fj(0)255 1017 y Fi(;)g(disp)360 1024
y Fj(0)387 1017 y FA(+)i Fv(D)p FA([)p Fv(count)h Fl(\000)g
Fv(1)p FA(])e Fl(\001)h Fi(extent)p FA(\))p Fi(;)e(:::;)g FA(\()p
Fi(ty)r(pe)1036 1024 y Fg(n)p Fh(\000)p Fj(1)1099 1017 y Fi(;)g(disp)1204
1024 y Fg(n)p Fh(\000)p Fj(1)1278 1017 y FA(+)j Fv(D)p FA([)p
Fv(count)g Fl(\000)f Fv(1)p FA(])g Fl(\001)f Fi(extent)p FA(\))p
Fi(;)f(:::;)375 1093 y FA(\()p Fi(ty)r(pe)477 1100 y Fj(0)496
1093 y Fi(;)g(disp)601 1100 y Fj(0)628 1093 y FA(+)i(\()p Fv(D)p
FA([)p Fv(count)h Fl(\000)f Fv(1)p FA(])g(+)g Fv(B)p FA([)p
Fv(count)i Fl(\000)e Fv(1)p FA(])g Fl(\000)g FA(1\))g Fl(\001)f
Fi(extent)p FA(\))p Fi(;)f(:::;)346 1170 y FA(\()p Fi(ty)r(pe)448
1177 y Fg(n)p Fh(\000)p Fj(1)513 1170 y Fi(;)g(disp)618 1177
y Fg(n)p Fh(\000)p Fj(1)692 1170 y FA(+)j(\()p Fv(D)p FA([)p
Fv(count)f Fl(\000)h Fv(1)p FA(])e(+)h Fv(B)p FA([)p Fv(count)i
Fl(\000)e Fv(1)p FA(])g Fl(\000)g FA(1\))g Fl(\001)f Fi(extent)p
FA(\))p Fl(g)p Fi(:)166 1247 y FA(A)k(call)g(to)f Fv(MPI)p
431 1247 V 16 w(TYPE)p 564 1247 V 17 w(VECTOR\(count,)j(blo)q(cklength,)g
(stride,)e(oldt)o(yp)q(e,)h(newt)o(yp)q(e\))g FA(is)f(equiv)m(alen)o(t)75
1303 y(to)i(a)f(call)j(to)d Fv(MPI)p 392 1303 V 16 w(TYPE)p
525 1303 V 17 w(INDEX\(count,)i(B,)f(D,)f(oldt)o(yp)q(e,)i(newt)o(yp)q(e\))h
FA(where)623 1392 y Fv(D)p FA([)p Fv(j)p FA(])12 b(=)h Fi(j)f
Fl(\001)e Fv(stride)16 b Fi(;)8 b(j)14 b FA(=)f(0)p Fi(;)8
b(:::;)g Fv(count)g Fl(\000)j FA(1)p Fi(;)75 1481 y FA(and)594
1537 y Fv(B)p FA([)p Fv(j)p FA(])h(=)h Fv(blo)q(cklength)18
b Fi(;)8 b(j)14 b FA(=)f(0)p Fi(;)8 b(:::;)g Fv(count)g Fl(\000)j
FA(1)p Fi(:)75 1655 y Fv(Hindexed)47 b FA(The)11 b(function)h
Fv(MPI)p 643 1655 V 15 w(TYPE)p 775 1655 V 17 w(HINDEXED)f
FA(is)g(iden)o(tical)i(to)d Fv(MPI)p 1383 1655 V 15 w(TYPE)p
1515 1655 V 17 w(INDEXED)p FA(,)g(except)75 1711 y(that)19
b(blo)q(c)o(k)i(displacemen)o(ts)h(in)41 b Fv(a)o(rra)o(y)p
774 1711 V 14 w(of)p 825 1711 V 16 w(displacements)20 b FA(are)g(sp)q
(eci\014ed)i(in)f(b)o(ytes,)g(rather)e(than)h(in)75 1768 y(m)o(ultiples)d(of)
e(the)g Fv(oldt)o(yp)q(e)h FA(exten)o(t.)75 1872 y Fv(MPI)p
160 1872 V 16 w(TYPE)p 293 1872 V 17 w(HINDEXED\()21 b(count,)k(a)o(rra)o(y)p
814 1872 V 14 w(of)p 865 1872 V 16 w(blo)q(cklengths,)h(a)o(rra)o(y)p
1248 1872 V 15 w(of)p 1300 1872 V 16 w(displacements,)d(oldt)o(yp)q(e,)h
(new-)75 1928 y(t)o(yp)q(e\))117 2005 y Fu(IN)155 b Fv(count)482
b Fu(n)o(um)o(b)q(er)34 b(of)f(blo)q(c)o(ks)h({)g(also)f(n)o(um)o(b)q(er)h
(of)f(en)o(tries)i(in)905 2062 y Fo(a)o(rra)o(y)p 992 2062
13 2 v 15 w(of)p 1041 2062 V 15 w(displacements)17 b Fu(and)h
Fo(a)o(rra)o(y)p 1483 2062 V 15 w(of)p 1532 2062 V 14 w(blo)q(cklengths)i
Fu(\(in)o(te-)905 2118 y(ger\))117 2191 y(IN)155 b Fv(a)o(rra)o(y)p
416 2191 14 2 v 15 w(of)p 468 2191 V 16 w(blo)q(cklengths)191
b Fu(n)o(um)o(b)q(er)15 b(of)g(elemen)o(ts)h(in)f(eac)o(h)h(blo)q(c)o(k)g
(\(arra)o(y)f(of)g(nonnega-)905 2248 y(tiv)o(e)f(in)o(tegers\))117
2320 y(IN)155 b Fv(a)o(rra)o(y)p 416 2320 V 15 w(of)p 468 2320
V 16 w(displacements)162 b Fu(b)o(yte)14 b(displacemen)o(t)g(of)f(eac)o(h)h
(blo)q(c)o(k)g(\(arra)o(y)g(of)f(in)o(teger\))117 2393 y(IN)155
b Fv(oldt)o(yp)q(e)450 b Fu(old)13 b(datat)o(yp)q(e)i(\(handle\))117
2466 y(OUT)108 b Fv(newt)o(yp)q(e)433 b Fu(new)15 b(datat)o(yp)q(e)f
(\(handle\))75 2591 y Ft(int)23 b(MPI)p 245 2591 15 2 v 17
w(Type)p 358 2591 V 17 w(hindexed\(int)f(count,)h(int)h(*array)p
1092 2591 V 16 w(of)p 1156 2591 V 17 w(blocklengths,)393 2647
y(MPI)p 468 2647 V 17 w(Aint)f(*array)p 748 2647 V 17 w(of)p
813 2647 V 17 w(displacements,)e(MPI)p 1259 2647 V 17 w(Datatype)i(oldtype,)
393 2704 y(MPI)p 468 2704 V 17 w(Datatype)g(*newtype\))-32
46 y Fy(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: 50 50
bop 75 -100 a FA(50)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Ft(MPI)p 150 49 15
2 v 17 w(TYPE)p 263 49 V 16 w(HINDEXED\(COUNT,)22 b(ARRAY)p
781 49 V 17 w(OF)p 846 49 V 17 w(BLOCKLENGTHS,)g(ARRAY)p 1317
49 V 16 w(OF)p 1381 49 V 17 w(DISPLACEMENTS,)393 106 y(OLDTYPE,)h(NEWTYPE,)g
(IERROR\))170 162 y(INTEGER)g(COUNT,)g(ARRAY)p 651 162 V 17
w(OF)p 716 162 V 17 w(BLOCKLENGTHS\(*\),)e(ARRAY)p 1258 162
V 17 w(OF)p 1323 162 V 17 w(DISPLACEMENTS\(*\),)170 219 y(OLDTYPE,)i
(NEWTYPE,)g(IERROR)166 306 y FA(Assume)15 b(that)g Fv(oldt)o(yp)q(e)h
FA(has)f(t)o(yp)q(e)g(map)600 411 y Fl(f)p FA(\()p Fi(ty)r(pe)725
418 y Fj(0)743 411 y Fi(;)8 b(disp)848 418 y Fj(0)865 411 y
FA(\))p Fi(;)g(:::;)g FA(\()p Fi(ty)r(pe)1066 418 y Fg(n)p
Fh(\000)p Fj(1)1128 411 y Fi(;)g(disp)1233 418 y Fg(n)p Fh(\000)p
Fj(1)1297 411 y FA(\))p Fl(g)p Fi(;)75 517 y FA(with)35 b(exten)o(t)g
Fr(extent)p FA(.)79 b(Let)36 b Fv(B)f FA(b)q(e)h(the)f Fv(a)o(rra)o(y)p
1013 517 14 2 v 15 w(of)p 1065 517 V 16 w(blo)q(cklength)i
FA(argumen)o(t)d(and)h Fv(D)g FA(b)q(e)h(the)75 573 y Fv(a)o(rra)o(y)p
173 573 V 15 w(of)p 225 573 V 16 w(displacements)21 b FA(argumen)o(t.)39
b(The)22 b(newly)h(created)f(datat)o(yp)q(e)f(has)h(a)f(t)o(yp)q(e)h(map)f
(with)i Fi(n)14 b Fl(\001)75 598 y Ff(P)119 608 y Fe(count)p
Fh(\000)p Fj(1)119 641 y Fg(i)p Fj(=0)243 630 y Fv(B)p FA([)p
Fv(i)p FA(])h(en)o(tries:)446 735 y Fl(f)p FA(\()p Fi(ty)r(pe)571
742 y Fj(0)589 735 y Fi(;)8 b(disp)694 742 y Fj(0)721 735 y
FA(+)j Fv(D)p FA([)p Fv(0)p FA(])o(\))p Fi(;)d(:::;)g FA(\()o
Fi(ty)r(pe)1048 742 y Fg(n)p Fh(\000)p Fj(1)1111 735 y Fi(;)g(disp)1216
742 y Fg(n)p Fh(\000)p Fj(1)1290 735 y FA(+)i Fv(D)p FA([)p
Fv(0)p FA(])o(\))p Fi(;)e(:::;)75 844 y FA(\()p Fi(ty)r(pe)177
851 y Fj(0)196 844 y Fi(;)g(disp)301 851 y Fj(0)325 844 y FA(+)f
Fv(D)p FA([)p Fv(0)p FA(])e(+)i(\()p Fv(B)p FA([)p Fv(0)p FA(])f
Fl(\000)h FA(1\))g Fl(\001)g Fi(extent)p FA(\))p Fi(;)h(:::;)g
FA(\()p Fi(ty)r(pe)1037 851 y Fg(n)p Fh(\000)p Fj(1)1099 844
y Fi(;)g(disp)1204 851 y Fg(n)p Fh(\000)p Fj(1)1275 844 y FA(+)f
Fv(D)p FA([)p Fv(0)p FA(])f(+)h(\()p Fv(B)p FA([)p Fv(0)p FA(])f
Fl(\000)h FA(1\))g Fl(\001)g Fi(extent)p FA(\))p Fi(;)h(:::;)295
934 y FA(\()p Fi(ty)r(pe)397 941 y Fj(0)416 934 y Fi(;)g(disp)521
941 y Fj(0)548 934 y FA(+)j Fv(D)p FA([)p Fv(count)g Fl(\000)f
Fv(1)p FA(])o(\))p Fi(;)e(:::;)g FA(\()p Fi(ty)r(pe)1037 941
y Fg(n)p Fh(\000)p Fj(1)1099 934 y Fi(;)g(disp)1204 941 y Fg(n)p
Fh(\000)p Fj(1)1278 934 y FA(+)j Fv(D)p FA([)p Fv(count)g Fl(\000)f
Fv(1)p FA(])o(\))p Fi(;)e(:::;)375 1024 y FA(\()p Fi(ty)r(pe)477
1031 y Fj(0)496 1024 y Fi(;)g(disp)601 1031 y Fj(0)628 1024
y FA(+)i Fv(D)p FA([)p Fv(count)h Fl(\000)g Fv(1)p FA(])e(+)i(\()p
Fv(B)p FA([)p Fv(count)g Fl(\000)f Fv(1)p FA(])g Fl(\000)g
FA(1\))g Fl(\001)f Fi(extent)p FA(\))p Fi(;)f(:::;)346 1115
y FA(\()p Fi(ty)r(pe)448 1122 y Fg(n)p Fh(\000)p Fj(1)513 1115
y Fi(;)g(disp)618 1122 y Fg(n)p Fh(\000)p Fj(1)692 1115 y FA(+)j
Fv(D)p FA([)p Fv(count)f Fl(\000)h Fv(1)p FA(])e(+)i(\()p Fv(B)p
FA([)p Fv(count)g Fl(\000)f Fv(1)p FA(])g Fl(\000)g FA(1\))g
Fl(\001)f Fi(extent)p FA(\))p Fl(g)p Fi(:)75 1241 y Fv(Struct)47
b(MPI)p 323 1241 V 16 w(TYPE)p 456 1241 V 16 w(STRUCT)23 b
FA(is)g(the)f(most)g(general)h(constructor:)33 b(It)22 b(further)g
(generalizes)i(the)75 1297 y(previous)16 b(one)f(in)h(that)f(it)g(allo)o(ws)h
(eac)o(h)f(blo)q(c)o(k)h(to)e(consist)i(of)f(replications)h(of)f(a)g
(di\013eren)o(t)h(datat)o(yp)q(e.)75 1402 y Fv(MPI)p 160 1402
V 16 w(TYPE)p 293 1402 V 17 w(STRUCT\(count,)c(a)o(rra)o(y)p
729 1402 V 15 w(of)p 781 1402 V 16 w(blo)q(cklengths,)h(a)o(rra)o(y)p
1151 1402 V 14 w(of)p 1202 1402 V 16 w(displacements,)e(a)o(rra)o(y)p
1599 1402 V 15 w(of)p 1651 1402 V 15 w(t)o(yp)q(es,)i(new-)75
1459 y(t)o(yp)q(e\))117 1537 y Fu(IN)155 b Fv(count)482 b Fu(n)o(um)o(b)q(er)
18 b(of)h(blo)q(c)o(ks)g(\(in)o(teger\))g({)g(also)f(n)o(um)o(b)q(er)h(of)f
(en)o(tries)905 1593 y(in)c(arra)o(ys)h Fo(a)o(rra)o(y)p 1167
1593 13 2 v 15 w(of)p 1216 1593 V 14 w(t)o(yp)q(es)p Fu(,)h
Fo(a)o(rra)o(y)p 1432 1593 V 15 w(of)p 1481 1593 V 14 w(displacements)e
Fu(and)g Fo(a)o(r-)905 1650 y(ra)o(y)p 959 1650 V 15 w(of)p
1008 1650 V 15 w(blo)q(cklengths)117 1727 y Fu(IN)155 b Fv(a)o(rra)o(y)p
416 1727 14 2 v 15 w(of)p 468 1727 V 16 w(blo)q(cklength)208
b Fu(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(in)h(eac)o(h)g(blo)q(c)o(k)g
(\(arra)o(y)g(of)f(in)o(teger\))117 1804 y(IN)155 b Fv(a)o(rra)o(y)p
416 1804 V 15 w(of)p 468 1804 V 16 w(displacements)162 b Fu(b)o(yte)14
b(displacemen)o(t)g(of)f(eac)o(h)h(blo)q(c)o(k)g(\(arra)o(y)g(of)f(in)o
(teger\))117 1882 y(IN)155 b Fv(a)o(rra)o(y)p 416 1882 V 15
w(of)p 468 1882 V 16 w(t)o(yp)q(es)327 b Fu(t)o(yp)q(e)20 b(of)f(elemen)o(ts)
g(in)g(eac)o(h)h(blo)q(c)o(k)f(\(arra)o(y)g(of)g(handles)g(to)905
1938 y(datat)o(yp)q(e)14 b(ob)r(jects\))117 2015 y(OUT)108
b Fv(newt)o(yp)q(e)433 b Fu(new)15 b(datat)o(yp)q(e)f(\(handle\))75
2141 y Ft(int)23 b(MPI)p 245 2141 15 2 v 17 w(Type)p 358 2141
V 17 w(struct\(int)f(count,)h(int)h(*array)p 1044 2141 V 16
w(of)p 1108 2141 V 17 w(blocklengths,)393 2197 y(MPI)p 468
2197 V 17 w(Aint)f(*array)p 748 2197 V 17 w(of)p 813 2197 V
17 w(displacements,)e(MPI)p 1259 2197 V 17 w(Datatype)i(*array)p
1635 2197 V 16 w(of)p 1699 2197 V 17 w(types,)393 2254 y(MPI)p
468 2254 V 17 w(Datatype)g(*newtype\))75 2341 y(MPI)p 150 2341
V 17 w(TYPE)p 263 2341 V 16 w(STRUCT\(COUNT,)f(ARRAY)p 733
2341 V 17 w(OF)p 798 2341 V 17 w(BLOCKLENGTHS,)g(ARRAY)p 1269
2341 V 16 w(OF)p 1333 2341 V 17 w(DISPLACEMENTS,)393 2398 y(ARRAY)p
516 2398 V 17 w(OF)p 581 2398 V 17 w(TYPES,)h(NEWTYPE,)f(IERROR\))170
2454 y(INTEGER)h(COUNT,)g(ARRAY)p 651 2454 V 17 w(OF)p 716
2454 V 17 w(BLOCKLENGTHS\(*\),)e(ARRAY)p 1258 2454 V 17 w(OF)p
1323 2454 V 17 w(DISPLACEMENTS\(*\),)170 2511 y(ARRAY)p 293
2511 V 17 w(OF)p 358 2511 V 17 w(TYPES\(*\),)h(NEWTYPE,)h(IERROR)166
2598 y FA(Example:)d(Let)c Fv(t)o(yp)q(e1)g FA(ha)o(v)o(e)f(t)o(yp)q(e)g(map)
755 2704 y Fl(f)p FA(\()p Fv(double)q Fi(;)8 b FA(0\))p Fi(;)g
FA(\()p Fv(cha)o(r)n Fi(;)g FA(8\))p Fl(g)p Fi(;)1967 46 y
Fy(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: 51 51
bop 75 -100 a Fw(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b FA(51)75 49 y(with)12 b(exten)o(t)f(16.)18 b(Let)11 b Fv(B)h(=)g(\(2,)f(1,)
g(3\))p FA(,)g Fv(D)h(=)f(\(0,)g(16,)h(26\))p FA(,)e(and)i
Fv(T)f(=)h(\(MPI)p 1321 49 14 2 v 15 w(FLO)o(A)l(T,)f(t)o(yp)q(e1,)i(MPI)p
1711 49 V 16 w(CHAR\))p FA(.)75 106 y(Then)j(a)f(call)h(to)e
Fv(MPI)p 455 106 V 16 w(TYPE)p 588 106 V 17 w(STRUCT\(3,)h(B,)g(D,)g(T,)f
(newt)o(yp)q(e\))j FA(returns)e(datat)o(yp)q(e)g(with)g(t)o(yp)q(e)h(map,)240
212 y Fl(f)p FA(\()p Fv(\015oat)p Fi(;)8 b FA(0\))p Fi(;)g
FA(\()p Fv(\015oat)m Fi(;)g FA(4\))p Fi(;)g FA(\()p Fv(double)o
Fi(;)g FA(16\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g FA(24\))p
Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g FA(26\))p Fi(;)g FA(\()p
Fv(cha)o(r)m Fi(;)g FA(27\))p Fi(;)g FA(\()p Fv(cha)o(r)n Fi(;)g
FA(28\))p Fl(g)i FA(:)75 318 y(t)o(w)o(o)g(copies)j(of)e Fv(MPI)p
421 318 V 15 w(FLO)o(A)l(T)h FA(starting)f(at)g(0,)g(follo)o(w)o(ed)h(b)o(y)f
(one)h(cop)o(y)f(of)g Fv(t)o(yp)q(e1)i FA(starting)e(at)f(16,)i(follo)o(w)o
(ed)75 375 y(b)o(y)i(three)g(copies)h(of)e Fv(MPI)p 520 375
V 16 w(CHAR)p FA(,)i(starting)e(at)g(26.)19 b(\(W)l(e)14 b(assume)g(that)f(a)
g(\015oat)h(o)q(ccupies)h(four)f(b)o(ytes.\))166 433 y(In)i(general,)f(let)h
Fv(T)f FA(b)q(e)h(the)f Fv(a)o(rra)o(y)p 742 433 V 14 w(of)p
793 433 V 16 w(t)o(yp)q(es)i FA(argumen)o(t,)d(where)31 b Fv(T[i])15
b FA(is)h(a)f(handle)h(to)464 539 y Fi(ty)r(pemap)635 546 y
Fg(i)661 539 y FA(=)d Fl(f)p FA(\()p Fi(ty)r(pe)834 520 y Fg(i)834
550 y Fj(0)853 539 y Fi(;)8 b(disp)958 520 y Fg(i)958 550 y
Fj(0)975 539 y FA(\))p Fi(;)g(:::;)g FA(\()p Fi(ty)r(pe)1176
520 y Fg(i)1176 550 y(n)1197 554 y Fd(i)1207 550 y Fh(\000)p
Fj(1)1251 539 y Fi(;)g(disp)1356 520 y Fg(i)1356 550 y(n)1377
554 y Fd(i)1389 550 y Fh(\000)p Fj(1)1433 539 y FA(\))p Fl(g)p
Fi(;)75 645 y FA(with)i(exten)o(t)g Fi(extent)434 652 y Fg(i)450
645 y FA(.)18 b(Let)10 b Fv(B)g FA(b)q(e)h(the)g Fv(a)o(rra)o(y)p
826 645 V 14 w(of)p 877 645 V 16 w(blo)q(cklength)h FA(argumen)o(t)d(and)i
Fv(D)f FA(b)q(e)h(the)f Fv(a)o(rra)o(y)p 1671 645 V 14 w(of)p
1722 645 V 16 w(displacements)75 702 y FA(argumen)o(t.)19 b(Then)d(the)f
(newly)h(created)f(datat)o(yp)q(e)g(has)g(a)g(t)o(yp)q(e)g(map)g(with)1399
670 y Ff(P)1443 680 y Fe(count)p Fh(\000)p Fj(1)1443 713 y
Fg(i)p Fj(=0)1567 702 y Fv(B)p FA([)p Fv(i)p FA(])9 b Fl(\001)h
Fi(n)1693 709 y Fg(i)1722 702 y FA(en)o(tries)472 821 y Fl(f)p
FA(\()p Fi(ty)r(pe)597 802 y Fj(0)597 832 y(0)615 821 y Fi(;)e(disp)720
802 y Fj(0)720 832 y(0)748 821 y FA(+)i Fv(D)p FA([)p Fv(0)p
FA(])o(\))p Fi(;)e(:::;)g FA(\()p Fi(ty)r(pe)1075 802 y Fj(0)1075
832 y Fg(n)1096 836 y Fc(0)1111 821 y Fi(;)g(disp)1216 802
y Fj(0)1216 832 y Fg(n)1237 836 y Fc(0)1263 821 y FA(+)j Fv(D)p
FA([)p Fv(0)p FA(])o(\))p Fi(;)d(:::;)75 931 y FA(\()p Fi(ty)r(pe)177
913 y Fj(0)177 943 y(0)196 931 y Fi(;)g(disp)301 913 y Fj(0)301
943 y(0)325 931 y FA(+)f Fv(D)p FA([)p Fv(0)p FA(])g(+)g(\()p
Fv(B)p FA([)p Fv(0)p FA(])g Fl(\000)g FA(1\))g Fl(\001)g Fi(extent)839
938 y Fj(0)860 931 y FA(\))p Fi(;)h(:::;)g FA(\()p Fi(ty)r(pe)1061
913 y Fj(0)1061 943 y Fg(n)1081 947 y Fc(0)1097 931 y Fi(;)g(disp)1202
913 y Fj(0)1202 943 y Fg(n)1223 947 y Fc(0)1247 931 y FA(+)f
Fv(D)p FA([)p Fv(0)p FA(])g(+)g(\()p Fv(B)p FA([)p Fv(0)p FA(])i
Fl(\000)i Fv(1)p FA(\))c Fl(\001)g Fi(extent)1767 938 y Fj(0)1787
931 y FA(\))p Fi(;)h(:::;)107 1024 y FA(\()p Fi(ty)r(pe)209
1005 y Fe(count)p Fh(\000)p Fj(1)209 1035 y(0)326 1024 y Fi(;)g(disp)431
1005 y Fe(count)n Fh(\000)p Fj(1)431 1035 y(0)556 1024 y FA(+)j
Fv(D)p FA([)p Fv(count)f Fl(\000)h Fv(1)p FA(])o(\))p Fi(;)d(:::;)g
FA(\()p Fi(ty)r(pe)1045 1005 y Fe(count)m Fh(\000)p Fj(1)1045
1035 y Fg(n)1066 1039 y Fb(count)m Fa(\000)p Fc(1)1153 1035
y Fh(\000)p Fj(1)1198 1024 y Fi(;)g(disp)1303 1005 y Fe(count)n
Fh(\000)p Fj(1)1303 1035 y Fg(n)1324 1039 y Fb(count)n Fa(\000)p
Fc(1)1412 1035 y Fh(\000)p Fj(1)1467 1024 y FA(+)i Fv(D)p FA([)p
Fv(count)h Fl(\000)g Fv(1)p FA(])o(\))p Fi(;)d(:::;)218 1116
y FA(\()p Fi(ty)r(pe)320 1097 y Fe(count)q Fh(\000)p Fj(1)320
1127 y(0)437 1116 y Fi(;)g(disp)542 1097 y Fe(count)o Fh(\000)p
Fj(1)542 1127 y(0)668 1116 y FA(+)i Fv(D)p FA([)p Fv(count)h
Fl(\000)g Fv(1)p FA(])e(+)h(\()p Fv(B)p FA([)p Fv(count)h Fl(\000)g
Fv(1)p FA(])e Fl(\000)i FA(1\))e Fl(\001)h Fi(extent)1525 1123
y Fe(count)r Fh(\000)p Fj(1)1643 1116 y FA(\))p Fi(;)e(:::;)204
1209 y FA(\()p Fi(ty)r(pe)306 1190 y Fe(count)p Fh(\000)p Fj(1)306
1220 y Fg(n)327 1224 y Fb(count)p Fa(\000)p Fc(1)417 1220 y
Fh(\000)p Fj(1)461 1209 y Fi(;)g(disp)566 1190 y Fe(count)o
Fh(\000)p Fj(1)566 1220 y Fg(n)587 1224 y Fb(count)o Fa(\000)p
Fc(1)676 1220 y Fh(\000)p Fj(1)730 1209 y FA(+)j Fv(D)p FA([)p
Fv(count)g Fl(\000)f Fv(1)p FA(])g(+)g(\()p Fv(B)p FA([)p Fv(count)h
Fl(\000)f Fv(1)p FA(])g Fl(\000)g Fv(1)p FA(\))g Fl(\001)g
Fi(extent)1588 1216 y Fe(count)q Fh(\000)p Fj(1)1706 1209 y
FA(\))p Fl(g)166 1298 y FA(A)15 b(call)h(to)f Fv(MPI)p 439
1298 V 16 w(TYPE)p 572 1298 V 16 w(HINDEXED\()g(count,)h(B,)f(D,)g(oldt)o(yp)
q(e,)h(newt)o(yp)q(e\))g FA(is)g(equiv)m(alen)o(t)h(to)d(a)h(call)75
1355 y(to)d Fv(MPI)p 213 1355 V 16 w(TYPE)p 346 1355 V 17 w(STRUCT\()h
(count,)i(B,)e(D,)f(T,)h(newt)o(yp)q(e\))p FA(,)h(where)f(eac)o(h)g(en)o(try)
g(of)g Fv(T)g FA(is)g(equal)h(to)e Fv(oldt)o(yp)q(e)p FA(.)75
1485 y Fs(1.13.2)49 b(Address)16 b(and)g(extent)f(functions)75
1573 y FA(The)j(displacemen)o(ts)i(in)f(a)f(general)g(datat)o(yp)q(e)g(are)g
(relativ)o(e)h(to)e(some)h(initial)i(bu\013er)e(address.)29
b Fz(Ab-)75 1630 y(solute)20 b(addresses)15 b FA(can)i(b)q(e)g(substituted)h
(for)e(these)h(displacemen)o(ts:)24 b(w)o(e)16 b(treat)g(them)h(as)f
(displace-)75 1686 y(men)o(ts)e(relativ)o(e)h(to)f(\\address)g(zero",)g(the)h
(start)e(of)h(the)h(address)g(space.)20 b(This)15 b(initial)h(address)f(zero)
f(is)75 1742 y(indicated)i(b)o(y)d(the)h(constan)o(t)f Fo(MPI)p
668 1742 13 2 v 15 w(BOTTOM)p FA(.)g(Th)o(us,)h(a)f(datat)o(yp)q(e)g(can)i
(sp)q(ecify)g(the)f(absolute)g(address)75 1799 y(of)k(the)g(en)o(tries)g(in)h
(the)f(comm)o(unication)h(bu\013er,)f(in)h(whic)o(h)g(case)f(the)g
Fv(buf)h FA(argumen)o(t)e(is)i(passed)f(the)75 1855 y(v)m(alue)e
Fo(MPI)p 269 1855 V 15 w(BOTTOM)p FA(.)166 1913 y(The)31 b(address)g(of)f(a)h
(lo)q(cation)g(in)h(memory)e(can)h(b)q(e)h(found)f(b)o(y)g(in)o(v)o(oking)g
(the)g(function)75 1970 y Fv(MPI)p 160 1970 14 2 v 16 w(ADDRESS)p
FA(.)75 2075 y Fv(MPI)p 160 2075 V 16 w(ADDRESS\(lo)q(cation,)16
b(address\))117 2153 y Fu(IN)155 b Fv(lo)q(cation)437 b Fu(lo)q(cation)13
b(in)h(caller)f(memory)f(\(c)o(hoice\))117 2231 y(OUT)108 b
Fv(address)449 b Fu(address)15 b(of)f(lo)q(cation)f(\(in)o(teger\))75
2357 y Ft(int)23 b(MPI)p 245 2357 15 2 v 17 w(Address\(void*)f(location,)h
(MPI)p 907 2357 V 17 w(Aint)g(*address\))75 2445 y(MPI)p 150
2445 V 17 w(ADDRESS\(LOCATION,)e(ADDRESS,)i(IERROR\))170 2501
y(<type>)g(LOCATION\(*\))170 2558 y(INTEGER)g(ADDRESS,)g(IERROR)166
2646 y FA(Returns)16 b(the)f(\(b)o(yte\))f(address)i(of)e Fv(lo)q(cation)p
FA(.)166 2704 y(Example:)-32 46 y Fy(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: 52 52
bop 75 -100 a FA(52)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)147 49 y Ft(REAL)23 b(A\(100,100\))147
106 y(INTEGER)f(I1,)i(I2,)f(DIFF)147 162 y(CALL)g(MPI_ADDRESS\(A\(1,1\),)e
(I1,)j(IERROR\))147 219 y(CALL)f(MPI_ADDRESS\(A\(10,10\),)e(I2,)i(IERROR\))
147 275 y(DIFF)g(=)h(I2)f(-)h(I1)75 332 y(!)g(The)f(value)g(of)h(DIFF)f(is)h
(909*sizeofreal;)e(the)h(values)g(of)h(I1)f(and)h(I2)f(are)75
388 y(!)h(implementation)e(dependent.)189 502 y Fr(A)n(dvic)n(e)e(to)i
(users.)73 b FA(C)20 b(users)h(ma)o(y)f(b)q(e)h(tempted)g(to)f(a)o(v)o(oid)h
(the)f(usage)h(of)f Fv(MPI)p 1659 502 14 2 v 16 w(ADDRESS)189
558 y FA(and)e(rely)g(on)g(the)g(a)o(v)m(ailabilit)o(y)i(of)d(the)h(address)g
(op)q(erator)f(&.)29 b(Note,)17 b(ho)o(w)o(ev)o(er,)h(that)f
Fo(&)h Fr(c)n(ast-)189 614 y(expr)n(ession)c FA(is)j(a)e(p)q(oin)o(ter,)i
(not)e(an)h(address.)22 b(ANSI)17 b(C)f(do)q(es)g(not)g(require)g(that)g(the)
g(v)m(alue)h(of)e(a)189 671 y(p)q(oin)o(ter)g(\(or)g(the)g(p)q(oin)o(ter)h
(cast)f(to)f Fo(int)p FA(\))h(b)q(e)h(the)g(absolute)f(address)h(of)e(the)i
(ob)s(ject)e(p)q(oin)o(ted)j(at)d({)189 727 y(although)j(this)g(is)h(the)f
(common)g(case.)25 b(F)l(urthermore,)17 b(referencing)h(ma)o(y)e(not)h(ha)o
(v)o(e)g(a)f(unique)189 784 y(de\014nition)i(on)f(mac)o(hines)g(with)g
(segmen)o(ted)g(address)g(space.)24 b(The)17 b(use)g(of)f Fv(MPI)p
1602 784 V 16 w(ADDRESS)i FA(to)189 840 y(\\reference")11 b(C)g(v)m(ariables)
h(guaran)o(tees)e(p)q(ortabilit)o(y)i(to)f(suc)o(h)g(mac)o(hines)h(as)e(w)o
(ell.)20 b(\()p Fr(End)12 b(of)g(advic)n(e)189 897 y(to)k(users.)p
FA(\))166 1012 y(The)f(follo)o(wing)h(auxiliary)h(functions)f(pro)o(vide)f
(useful)i(information)e(on)g(deriv)o(ed)h(datat)o(yp)q(es.)75
1118 y Fv(MPI)p 160 1118 V 16 w(TYPE)p 293 1118 V 17 w(EXTENT\(datat)o(yp)q
(e,)g(extent\))117 1197 y Fu(IN)155 b Fv(datat)o(yp)q(e)424
b Fu(datat)o(yp)q(e)14 b(\(handle\))117 1276 y(OUT)108 b Fv(extent)471
b Fu(datat)o(yp)q(e)14 b(exten)o(t)h(\(in)o(teger\))75 1402
y Ft(int)23 b(MPI)p 245 1402 15 2 v 17 w(Type)p 358 1402 V
17 w(extent\(MPI)p 615 1402 V 16 w(Datatype)f(datatype,)h(MPI)p
1156 1402 V 17 w(Aint)g(*extent\))75 1490 y(MPI)p 150 1490
V 17 w(TYPE)p 263 1490 V 16 w(EXTENT\(DATATYPE,)f(EXTENT,)h(IERROR\))170
1547 y(INTEGER)g(DATATYPE,)g(EXTENT,)g(IERROR)166 1635 y FA(Returns)16
b(the)f(exten)o(t)g(of)g(a)f(datat)o(yp)q(e)h({)g(where)g(exten)o(t)g(is)h
(as)f(de\014ned)h(in)g(Eq.)f(1.1)f(on)h(page)h(45.)75 1740
y Fv(MPI)p 160 1740 14 2 v 16 w(TYPE)p 293 1740 V 17 w(SIZE\(datat)o(yp)q(e,)
f(size\))117 1819 y Fu(IN)155 b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14
b(\(handle\))117 1898 y(OUT)108 b Fv(size)519 b Fu(datat)o(yp)q(e)14
b(size)h(\(in)o(teger\))75 2024 y Ft(int)23 b(MPI)p 245 2024
15 2 v 17 w(Type)p 358 2024 V 17 w(size\(MPI)p 567 2024 V 16
w(Datatype)g(datatype,)f(MPI)p 1108 2024 V 17 w(Aint)h(*size\))75
2113 y(MPI)p 150 2113 V 17 w(TYPE)p 263 2113 V 16 w(SIZE\(DATATYPE,)f(SIZE,)i
(IERROR\))170 2169 y(INTEGER)f(DATATYPE,)g(SIZE,)g(IERROR)166
2257 y FA(Returns)15 b(the)h(n)o(um)o(b)q(er)f(of)g(b)o(ytes)f(o)q(ccupied)j
(b)o(y)e(en)o(tries)h(in)g(the)f(datat)o(yp)q(e)f({)h(i.e.)20
b(the)15 b(sum)g(of)g(the)75 2314 y(sizes)h(of)f(the)g(datat)o(yp)q(e)g
(elemen)o(ts.)75 2419 y Fv(MPI)p 160 2419 14 2 v 16 w(TYPE)p
293 2419 V 17 w(COUNT\(datat)o(yp)q(e,)i(count\))117 2499 y
Fu(IN)155 b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14 b(\(handle\))117
2577 y(OUT)108 b Fv(count)482 b Fu(datat)o(yp)q(e)14 b(coun)o(t)g(\(in)o
(teger\))75 2704 y Ft(int)23 b(MPI)p 245 2704 15 2 v 17 w(Type)p
358 2704 V 17 w(count\(MPI)p 591 2704 V 16 w(Datatype)g(datatype,)f(int)i
(*count\))1967 46 y Fy(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: 53 53
bop 75 -100 a Fw(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b FA(53)75 49 y Ft(MPI)p 150 49 15 2 v 17 w(TYPE)p 263 49 V
16 w(COUNT\(DATATYPE,)22 b(COUNT,)h(IERROR\))170 106 y(INTEGER)g(DATATYPE,)g
(COUNT,)g(IERROR)166 192 y FA(Returns)16 b(the)f(n)o(um)o(b)q(er)g(of)g(en)o
(tries)h(in)g(the)f(datat)o(yp)q(e.)75 316 y Fs(1.13.3)49 b(Lo)o(w)o(er-b)q
(ound)17 b(and)g(upp)q(er-b)q(ound)g(ma)o(rk)n(ers)75 402 y
FA(It)e(is)g(often)g(con)o(v)o(enien)o(t)g(to)g(de\014ne)h(explicitly)h(the)e
(lo)o(w)o(er)g(b)q(ound)h(and)f(upp)q(er)h(b)q(ound)f(of)g(a)g(t)o(yp)q(e)g
(map,)75 459 y(and)20 b(o)o(v)o(erwrite)g(the)g(de\014nition)i(giv)o(en)f(b)o
(y)f(Equation)g(1.1)g(on)g(page)g(45.)34 b(This)21 b(allo)o(ws)f(to)g
(de\014ne)h(a)75 515 y(datat)o(yp)q(e)12 b(that)g(has)h(\\holes")g(at)f(its)h
(b)q(eginning)h(or)f(its)g(end;)g(or)g(a)f(datat)o(yp)q(e)g(with)h(en)o
(tries)g(that)f(extend)75 572 y(ab)q(o)o(v)o(e)k(the)g(upp)q(er)g(b)q(ound)h
(or)f(b)q(elo)o(w)g(the)g(lo)o(w)o(er)g(b)q(ound.)23 b(Examples)16
b(of)g(suc)o(h)g(a)g(usage)g(are)f(pro)o(vided)75 628 y(in)h(section)g
(1.13.7.)j(T)l(o)d(ac)o(hiev)o(e)g(this,)g(w)o(e)f(add)h(t)o(w)o(o)e
(additional)j(\\pseudo-datat)o(yp)q(es")e Fv(MPI)p 1706 628
14 2 v 16 w(LB)p FA(,)g(and)75 685 y Fv(MPI)p 160 685 V 16
w(UB)i FA(that)e(can)i(b)q(e)g(used,)g(resp)q(ectiv)o(ely)l(,)h(to)e(mark)f
(the)i(lo)o(w)o(er)f(b)q(ound)h(or)f(the)h(upp)q(er)g(b)q(ound)g(of)f(a)75
741 y(datat)o(yp)q(e.)j(These)c(pseudo-datat)o(yp)q(es)g(o)q(ccup)o(y)g(no)f
(space)h(\()p Fi(extent)p FA(\()p Fv(MPI)p 1357 741 V 17 w(LB)p
FA(\))d(=)h Fi(extent)p FA(\()p Fv(MPI)p 1734 741 V 17 w(UB)p
FA(\))g(=)75 798 y(0\).)18 b(They)c(do)f(not)f(a\013ect)g(the)h(size)h(or)f
(coun)o(t)g(of)f(a)h(datat)o(yp)q(e,)f(and)h(do)g(not)g(a\013ect)f(the)h(the)
g(con)o(ten)o(t)g(of)f(a)75 854 y(message)i(created)h(with)h(this)f(datat)o
(yp)q(e.)k(Ho)o(w)o(ev)o(er,)14 b(they)h(do)g(a\013ect)f(the)h(de\014nition)h
(of)f(the)g(exten)o(t)f(of)75 911 y(a)e(datat)o(yp)q(e)g(and,)h(therefore,)g
(a\013ect)f(the)g(outcome)h(of)f(a)g(replication)i(of)f(this)g(datat)o(yp)q
(e)f(b)o(y)g(a)g(datat)o(yp)q(e)75 967 y(constructor.)166 1024
y(Example:)27 b(Let)19 b Fv(D)f(=)h(\(-3,)f(0,)h(6\))p FA(;)g
Fv(T)f(=)h(\(MPI)p 990 1024 V 15 w(LB,)f(MPI)p 1173 1024 V
16 w(INT,)g(MPI)p 1378 1024 V 16 w(UB\))p FA(,)g(and)h Fv(B)f(=)h(\(1,)f(1,)h
(1\))p FA(.)75 1080 y(Then)e(a)e(call)i(to)f Fv(MPI)p 459 1080
V 16 w(TYPE)p 592 1080 V 16 w(STRUCT\(3,)g(B,)g(D,)g(T,)f(t)o(yp)q(e1\))i
FA(creates)e(a)h(new)g(datat)o(yp)q(e)g(that)f(has)h(an)75
1137 y(exten)o(t)f(of)g(9)g(\(from)f(-3)i(to)e(5\),)h(and)g(con)o(tains)h(an)
f(in)o(teger)h(at)e(displacemen)o(t)j(0.)j(This)c(is)g(the)f(datat)o(yp)q(e)
75 1193 y(de\014ned)g(b)o(y)g(the)f(sequence)h Fl(f)p Fv(\(lb,)f(-3\),)f
(\(int,)i(0\),)e(\(ub,)h(6\))p Fl(g)g FA(.)19 b(If)c(this)f(t)o(yp)q(e)g(is)h
(replicated)h(t)o(wice)e(b)o(y)g(a)g(call)75 1250 y(to)f Fv(MPI)p
214 1250 V 16 w(TYPE)p 347 1250 V 16 w(CONTIGUOUS\(2,)i(t)o(yp)q(e1,)f(t)o
(yp)q(e2\))g FA(then)g(the)g(newly)g(created)g(t)o(yp)q(e)f(can)h(b)q(e)g
(describ)q(ed)75 1306 y(b)o(y)f(the)g(sequence)h Fl(f)p Fv(\(lb,)f(-3\),)g
(\(int,)g(0\),)f(\(int,9\),)h(\(ub,)h(15\))p Fl(g)d FA(.)20
b(\(En)o(tries)12 b(of)h(t)o(yp)q(e)g Fv(lb)g FA(or)g Fv(ub)h
FA(can)f(b)q(e)h(deleted)75 1363 y(if)i(they)f(are)g(not)g(at)f(the)h(end-p)q
(oin)o(ts)i(of)e(the)g(datat)o(yp)q(e.\))166 1419 y(In)h(general,)f(if)476
1522 y Fi(T)6 b(y)r(pemap)12 b FA(=)h Fl(f)p FA(\()p Fi(ty)r(pe)849
1529 y Fj(0)867 1522 y Fi(;)8 b(disp)972 1529 y Fj(0)990 1522
y FA(\))p Fi(;)g(:::;)f FA(\()p Fi(ty)r(pe)1190 1529 y Fg(n)p
Fh(\000)p Fj(1)1253 1522 y Fi(;)h(disp)1358 1529 y Fg(n)p Fh(\000)p
Fj(1)1421 1522 y FA(\))p Fl(g)p Fi(;)75 1625 y FA(then)16 b(the)f
Fz(lo)o(w)o(er)h(b)q(ound)g FA(of)f Fi(T)6 b(y)r(pemap)15 b
FA(is)g(de\014ned)i(to)e(b)q(e)227 1759 y Fi(l)q(b)p FA(\()p
Fi(T)6 b(y)r(pemap)p FA(\))k(=)544 1687 y Ff(\()598 1730 y
FA(min)674 1737 y Fg(j)699 1730 y Fi(disp)783 1737 y Fg(j)1142
1730 y FA(if)16 b(no)f(en)o(try)g(has)g(basic)h(t)o(yp)q(e)f
Fv(lb)598 1787 y FA(min)q Fl(f)p Fi(disp)781 1794 y Fg(j)826
1787 y FA(:)27 b Fi(ty)r(pe)950 1794 y Fg(j)981 1787 y FA(=)13
b Fv(lb)p Fl(g)41 b FA(otherwise)166 1892 y(Similarly)l(,)17
b(the)e Fz(upp)q(er)j(b)q(ound)e FA(of)e Fi(T)6 b(y)r(pemap)15
b FA(is)h(de\014ned)h(to)d(b)q(e)191 2026 y Fi(ub)p FA(\()p
Fi(T)6 b(y)r(pemap)p FA(\))11 b(=)520 1954 y Ff(\()575 1997
y FA(max)659 2004 y Fg(j)684 1997 y Fi(disp)768 2004 y Fg(j)795
1997 y FA(+)g Fi(siz)r(eof)5 b FA(\()p Fi(ty)r(pe)1073 2004
y Fg(j)1091 1997 y FA(\))56 b(if)16 b(no)f(en)o(try)g(has)g(basic)h(t)o(yp)q
(e)f Fv(ub)575 2054 y FA(max)o Fl(f)p Fi(disp)766 2061 y Fg(j)811
2054 y FA(:)27 b Fi(ty)r(pe)935 2061 y Fg(j)966 2054 y FA(=)13
b Fv(ub)q Fl(g)66 b FA(otherwise)166 2159 y(Then)441 2217 y
Fi(extent)p FA(\()p Fi(T)6 b(y)r(pemap)p FA(\))14 b(=)e Fi(ub)p
FA(\()p Fi(T)6 b(y)r(pemap)p FA(\))j Fl(\000)i Fi(l)q(b)p FA(\()p
Fi(T)6 b(y)r(pemap)p FA(\))i(+)i Fi(\017)75 2301 y FA(If)19
b Fi(ty)r(pe)208 2308 y Fg(i)242 2301 y FA(requires)h(alignmen)o(t)g(to)e(a)h
(b)o(yte)g(address)g(that)g(is)h(a)f(m)o(ultiple)i(of)d Fi(k)1460
2308 y Fg(i)1474 2301 y FA(,)i(then)f Fi(\017)h FA(is)g(the)f(least)75
2358 y(nonnegativ)o(e)d(incremen)o(t)g(needed)g(to)f(round)g
Fi(extent)p FA(\()p Fi(T)6 b(y)r(pemap)p FA(\))16 b(to)e(the)h(next)h(m)o
(ultiple)h(of)d(max)1794 2365 y Fg(i)1815 2358 y Fi(k)1839
2365 y Fg(i)1853 2358 y FA(.)166 2414 y(The)g(formal)f(de\014nitions)j(giv)o
(en)e(for)f(the)h(v)m(arious)g(datat)o(yp)q(e)f(constructors)g(apply)i(no)o
(w,)e(with)h(the)75 2471 y(amended)i(de\014nition)h(of)e Fz(exten)o(t)p
FA(.)166 2604 y Fq(Discussion:)52 b Fu(The)15 b(follo)o(wing)c(additional)h
(functions)i(w)o(ere)h(suggested:)575 b Fn(\()166 2654 y Fo(MPI)p
243 2654 13 2 v 14 w(TYPE)p 365 2654 V 14 w(LB\()15 b(datat)o(yp)q(e,)f
(displacement\))75 2704 y Fu(Returns)h(the)f(lo)o(w)o(er)g(b)q(ound)g(of)f
(the)h(t)o(yp)q(e)h(map)d(of)h(datat)o(yp)q(e.)-32 46 y Fy(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: 54 54
bop 75 -100 a FA(54)613 b Fw(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y Fo(MPI)p 243 49 13
2 v 14 w(TYPE)p 365 49 V 14 w(UB\()e(datat)o(yp)q(e,)g(displacement\))75
99 y Fu(Returns)h(the)f(upp)q(er)h(b)q(ound)f(of)f(the)i(t)o(yp)q(e)f(map)f
(of)g(datat)o(yp)q(e.)75 306 y Fs(1.13.4)49 b(Comm)o(it)13
b(and)k(free)75 392 y FA(A)g(datat)o(yp)q(e)f(ob)s(ject)h(has)g(to)f(b)q(e)h
Fz(committed)h FA(b)q(efore)f(it)g(can)g(b)q(e)h(used)g(in)f(a)g(comm)o
(unication.)26 b(The)75 449 y(system)20 b(ma)o(y)g(\\compile")i(at)e(commit)g
(time)h(an)g(in)o(ternal)g(represen)o(tation)g(for)f(the)h(datat)o(yp)q(e)f
(that)75 505 y(facilitates)c(comm)o(unication,)g(e.g.)k(c)o(hange)15
b(from)g(a)g(compacted)g(represen)o(tation)h(to)e(a)h(\015at)g(represen-)75
561 y(tation)i(of)f(the)h(datat)o(yp)q(e,)g(and)g(select)g(the)g(most)g(con)o
(v)o(enien)o(t)g(transfer)f(mec)o(hanism.)26 b(A)17 b(committed)75
618 y(datat)o(yp)q(e)e(can)g(still)i(b)q(e)e(used)h(as)f(a)g(argumen)o(t)f
(in)i(datat)o(yp)q(e)f(constructors.)166 675 y(Note:)28 b(the)20
b(commit)f(op)q(eration)h(commits)f(the)h(datat)o(yp)q(e,)f(i.e.,)i(the)e
(formal)g(description)i(of)e(a)75 731 y(comm)o(unication)i(bu\013er,)h(not)e
(the)h(con)o(ten)o(t)f(of)g(that)g(bu\013er.)36 b(Th)o(us,)22
b(after)e(a)g(datat)o(yp)q(e)g(has)h(b)q(een)75 788 y(committed,)d(it)h(can)f
(b)q(e)h(rep)q(eatedly)g(reused)g(to)e(comm)o(unicate)h(the)h(c)o(hanging)f
(con)o(ten)o(t)g(of)f(a)h(bu\013er)75 844 y(or,)c(indeed,)j(the)e(con)o(ten)o
(t)g(of)g(di\013eren)o(t)g(bu\013ers,)g(with)g(di\013eren)o(t)h(starting)e
(addresses.)75 948 y Fv(MPI)p 160 948 14 2 v 16 w(TYPE)p 293
948 V 17 w(COMMIT\(datat)o(yp)q(e\))117 1026 y Fu(INOUT)62
b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14 b(that)g(is)g(committed)e
(\(handle\))75 1151 y Ft(int)23 b(MPI)p 245 1151 15 2 v 17
w(Type)p 358 1151 V 17 w(commit\(MPI)p 615 1151 V 16 w(Datatype)f
(*datatype\))75 1237 y(MPI)p 150 1237 V 17 w(TYPE)p 263 1237
V 16 w(COMMIT\(DATATYPE,)g(IERROR\))170 1294 y(INTEGER)h(DATATYPE,)g(IERROR)
166 1381 y FA(There)15 b(is)h(no)f(need)h(to)f(commit)g(basic)h(datat)o(yp)q
(es;)e(they)h(are)g(\\pre-committed".)75 1485 y Fv(MPI)p 160
1485 14 2 v 16 w(TYPE)p 293 1485 V 17 w(FREE\(datat)o(yp)q(e\))117
1562 y Fu(INOUT)62 b Fv(datat)o(yp)q(e)424 b Fu(datat)o(yp)q(e)14
b(that)g(is)g(freed)h(\(handle\))75 1687 y Ft(int)23 b(MPI)p
245 1687 15 2 v 17 w(Type)p 358 1687 V 17 w(free\(MPI)p 567
1687 V 16 w(Datatype)g(*datatype\))75 1774 y(MPI)p 150 1774
V 17 w(TYPE)p 263 1774 V 16 w(FREE\(DATATYPE,)f(IERROR\))170
1830 y(INTEGER)h(DATATYPE,)g(IERROR)166 1917 y FA(Marks)16
b(the)h(datat)o(yp)q(e)f(ob)s(ject)g(asso)q(ciated)h(with)g
Fv(datat)o(yp)q(e)i FA(for)d(deallo)q(cation.)26 b(The)17 b(ob)s(ject)f(will)
75 1974 y(b)q(e)g(deallo)q(cated)h(after)d(an)o(y)i(p)q(ending)h(comm)o
(unication)f(that)e(uses)i(this)g(ob)s(ject)f(completes,)g(at)g(whic)o(h)75
2030 y(p)q(oin)o(t)21 b Fv(datat)o(yp)q(e)g FA(b)q(ecomes)g(n)o(ull.)36
b(It)20 b(is)h(erroneous)f(to)f(use)i(a)f(datat)o(yp)q(e)f(as)h(argumen)o(t)f
(to)h(an)g(MPI)75 2087 y(function)c(after)e(it)i(w)o(as)e(freed.)166
2143 y(Example:)75 2308 y Ft(INTEGER)23 b(type1,)g(type2)75
2365 y(CALL)g(MPI_TYPE_CONTIGUOUS\(5,)e(MPI_REAL,)i(type1,)g(ierr\))409
2421 y(!)h(new)f(type)h(object)f(created)75 2478 y(CALL)g
(MPI_TYPE_COMMIT\(type1,)e(ierr\))409 2534 y(!)j(now)f(type1)g(can)h(be)f
(used)h(for)f(communication)75 2591 y(type2)g(=)h(type1)409
2647 y(!)g(type2)f(can)g(be)h(used)f(for)h(communication)409
2704 y(!)g(\(it)f(is)h(a)g(handle)f(to)g(same)h(object)f(as)g(type1\))1967
46 y Fy(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: 55 55
bop 75 -100 a Fw(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b FA(55)75 49 y Ft(CALL)23 b(MPI_TYPE_VECTOR\(3,)f(5,)h(4,)h(MPI_REAL,)f
(type1,)g(ierr\))409 106 y(!)h(new)f(uncommitted)g(type)g(object)g(created)75
162 y(CALL)g(MPI_TYPE_COMMIT\(type1,)e(ierr\))409 219 y(!)j(now)f(type1)g
(can)h(be)f(used)h(anew)f(for)h(communication)166 317 y FA(F)l(reeing)19
b(a)f(datat)o(yp)q(e)f(do)q(es)i(not)f(a\013ect)f(an)o(y)h(other)g(datat)o
(yp)q(e)f(that)h(w)o(as)f(built)j(from)d(the)i(freed)75 373
y(datat)o(yp)q(e.)34 b(The)20 b(system)g(should)h(b)q(eha)o(v)o(e)g(as)e(if)i
(a)f(separate)f(cop)o(y)h(of)g(the)g(datat)o(yp)q(e)g(w)o(as)f(created)75
430 y(whenev)o(er)d(this)f(datat)o(yp)q(e)g(w)o(as)f(incorp)q(orated)i(in)g
(a)f(new)g(deriv)o(ed)i(datat)o(yp)q(e.)166 562 y Fq(Implemen)o(tati)o(on)12
b(note:)166 612 y Fu(The)e(implemen)o(tati)o(on)d(ma)o(y)g(k)o(eep)j(a)f
(reference)j(coun)o(t)e(of)f(activ)o(e)g(comm)o(unications)d(that)k(use)g
(the)g(datat)o(yp)q(e,)75 662 y(in)15 b(order)i(to)f(decide)h(when)f(to)g
(free)h(it.)24 b(Also,)15 b(one)h(ma)o(y)e(implemen)o(t)g(constructors)k(of)d
(deriv)o(ed)h(datat)o(yp)q(es)h(so)75 711 y(that)e(they)h(k)o(eep)g(p)q(oin)o
(ters)g(to)f(their)h(datat)o(yp)q(e)f(argumen)o(ts,)f(rather)j(then)e(cop)o
(ying)g(them.)21 b(In)16 b(suc)o(h)g(case,)g(one)75 761 y(needs)e(to)e(k)o
(eep)h(trac)o(k)f(of)g(activ)o(e)g(datat)o(yp)q(e)g(de\014nition)g
(references)j(in)d(order)h(to)f(kno)o(w)g(when)h(a)f(datat)o(yp)q(e)g(ob)r
(ject)75 811 y(can)i(b)q(e)h(freed.)75 1014 y Fs(1.13.5)49
b(Use)16 b(of)h(general)f(datat)o(yp)q(es)g(in)h(comm)n(unication)75
1100 y FA(Handles)g(to)f(deriv)o(ed)h(datat)o(yp)q(es)f(can)h(b)q(e)f(passed)
h(to)f(a)g(comm)o(unication)h(call)g(wherev)o(er)f(a)g(datat)o(yp)q(e)75
1157 y(argumen)o(t)11 b(is)h(required.)19 b(A)12 b(call)g(of)f(the)h(form)e
Fv(MPI)p 947 1157 14 2 v 16 w(SEND\(buf,)j(count,)g(datat)o(yp)q(e)g(,)f
(...\))p FA(,)e(where)i Fv(count)i Fi(>)75 1213 y Fv(1)p FA(,)e(is)h(in)o
(terpreted)g(as)g(if)g(the)f(call)i(w)o(as)d(passed)i(a)f(new)h(datat)o(yp)q
(e)f(whic)o(h)h(is)g(the)g(concatenation)g(of)f Fv(count)75
1270 y FA(copies)k(of)f Fv(datat)o(yp)q(e)p FA(.)21 b(Th)o(us,)166
1326 y Fv(MPI)p 251 1326 V 16 w(SEND\(buf,)15 b(count,)i(datat)o(yp)q(e,)f
(dest,)g(tag,)f(comm)m(\))d FA(is)k(equiv)m(alen)o(t)h(to)75
1424 y Ft(MPI_TYPE_CONTIGUOUS\(count,)j(datatype,)j(newtype\))75
1480 y(MPI_TYPE_COMMIT\(newtype\))75 1537 y(MPI_SEND\(buf,)f(1,)i(newtype,)e
(dest,)i(tag,)f(comm\))166 1635 y FA(The)14 b(same)g(applies)h(to)f(all)h
(other)e(comm)o(unication)i(functions)g(that)e(ha)o(v)o(e)g(a)h
Fv(count)h FA(and)f Fv(datat)o(yp)q(e)75 1691 y FA(argumen)o(t.)166
1748 y(Supp)q(ose)k(that)e(a)g(a)h(send)g(op)q(eration)g Fv(MPI)p
920 1748 V 16 w(SEND\(buf,)h(count,)g(datat)o(yp)q(e.)26 b(dest,)18
b(tag,)f(comm)m(\))c FA(is)75 1804 y(executed,)j(where)f Fv(datat)o(yp)q(e)i
FA(ha)o(v)o(e)e(t)o(yp)q(e)g(map)600 1908 y Fl(f)p FA(\()p
Fi(ty)r(pe)725 1915 y Fj(0)743 1908 y Fi(;)8 b(disp)848 1915
y Fj(0)865 1908 y FA(\))p Fi(;)g(:::;)g FA(\()p Fi(ty)r(pe)1066
1915 y Fg(n)p Fh(\000)p Fj(1)1128 1908 y Fi(;)g(disp)1233 1915
y Fg(n)p Fh(\000)p Fj(1)1297 1908 y FA(\))p Fl(g)p Fi(;)166
2003 y FA(with)20 b(exten)o(t)f Fi(extent)i FA(\(empt)o(y)e(en)o(tries)g
(deleted\).)34 b(Then)20 b(the)g(send)g(bu\013er)f(used)h(b)o(y)g(the)f(send)
75 2060 y(op)q(eration)c(consists)h(of)f Fi(n)10 b Fl(\001)g
Fv(count)16 b FA(en)o(tries,)f(where)h(en)o(try)f Fi(i)9 b
Fl(\001)h Fi(n)h FA(+)f Fi(j)17 b FA(is)f(at)f(lo)q(cation)653
2163 y Fi(addr)746 2170 y Fg(i;j)796 2163 y FA(=)e Fv(buf)h
FA(+)d Fi(extent)g Fl(\001)f Fi(i)g FA(+)g Fi(disp)1280 2170
y Fg(j)166 2258 y FA(and)15 b(has)h(t)o(yp)q(e)f Fi(ty)r(pe)522
2265 y Fg(j)540 2258 y FA(,)g(for)f Fi(i)f FA(=)g(0)p Fi(;)8
b(:::;)g Fv(count)h Fl(\000)h FA(1)15 b(and)h Fi(j)f FA(=)e(0)p
Fi(;)8 b(:::;)g(n)f Fl(\000)k FA(1.)20 b(These)15 b(en)o(tries)h(need)g(not)
75 2315 y(b)q(e)g(con)o(tiguous,)f(nor)g(distinct;)h(their)f(order)g(can)h(b)
q(e)g(arbitrary)l(.)166 2371 y(The)g(v)m(ariable)h(stored)e(at)g(address)g
Fi(addr)879 2378 y Fg(i;j)933 2371 y FA(in)h(the)g(calling)h(program)e
(should)h(b)q(e)h(of)e(a)g(t)o(yp)q(e)h(that)75 2428 y(matc)o(hes)d
Fi(ty)r(pe)333 2435 y Fg(j)351 2428 y FA(,)h(where)g(t)o(yp)q(e)g(matc)o
(hing)g(is)g(de\014ned)i(as)d(in)i(section)f(1.5.)19 b(The)14
b(message)f(sen)o(t)h(con)o(tains)75 2484 y Fi(n)c Fl(\001)g
Fv(count)17 b FA(en)o(tries,)e(where)g(en)o(try)g Fi(i)10 b
Fl(\001)g Fi(n)g FA(+)g Fi(j)18 b FA(has)d(t)o(yp)q(e)g Fi(ty)r(pe)1100
2491 y Fg(j)1118 2484 y FA(.)166 2541 y(Similarly)l(,)g(supp)q(ose)f(that)e
(a)h(receiv)o(e)h(op)q(eration)f Fv(MPI)p 1100 2541 V 16 w(RECV\(buf,)h
(count,)g(datat)o(yp)q(e,)h(source,)e(tag,)75 2597 y(comm)m(,)f(status\))17
b FA(is)e(executed,)h(where)g Fv(datat)o(yp)q(e)g FA(has)g(t)o(yp)q(e)f(map)
600 2704 y Fl(f)p FA(\()p Fi(ty)r(pe)725 2711 y Fj(0)743 2704
y Fi(;)8 b(disp)848 2711 y Fj(0)865 2704 y FA(\))p Fi(;)g(:::;)g
FA(\()p Fi(ty)r(pe)1066 2711 y Fg(n)p Fh(\000)p Fj(1)1128 2704
y Fi(;)g(disp)1233 2711 y Fg(n)p Fh(\000)p Fj(1)1297 2704 y
FA(\))p Fl(g)p Fi(;)-32 46 y Fy(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: 56 56
bop 75 -100 a FA(56)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y FA(with)c(exten)o(t)f
Fi(extent)i FA(\(empt)o(y)e(en)o(tries)i(deleted\).)19 b(Then)12
b(the)g(receiv)o(e)h(bu\013er)f(used)g(for)f(this)h(receiv)o(e)75
106 y(op)q(eration)j(consists)h(of)e(the)h Fi(n)c Fl(\001)e
Fv(count)16 b FA(en)o(tries,)f(where)h(en)o(try)e Fi(i)c Fl(\001)f
Fi(n)i FA(+)f Fi(j)17 b FA(is)f(at)e(lo)q(cation)i Fv(buf)e
FA(+)c Fi(extent)h Fl(\001)75 162 y Fi(i)d FA(+)h Fi(disp)227
169 y Fg(j)259 162 y FA(and)15 b(has)f(t)o(yp)q(e)h Fi(ty)r(pe)613
169 y Fg(j)630 162 y FA(.)20 b(If)15 b(the)f(incoming)i(message)e(consists)h
(of)f Fi(k)i FA(elemen)o(ts,)e(then)h(w)o(e)g(m)o(ust)75 219
y(ha)o(v)o(e)f Fi(k)g Fl(\024)f Fi(n)d Fl(\001)f Fv(count)p
FA(;)15 b(the)g Fi(i)9 b Fl(\001)g Fi(n)h FA(+)f Fi(j)s FA(-th)15
b(elemen)o(t)g(of)g(the)f(message)h(should)h(ha)o(v)o(e)e(a)g(t)o(yp)q(e)h
(that)f(matc)o(hes)75 275 y Fi(ty)r(pe)159 282 y Fg(j)177 275
y FA(.)166 332 y(Note)d(that)g(t)o(yp)q(e)h(matc)o(hing)f(is)h(de\014ned)h
(according)f(to)f(the)h(t)o(yp)q(e)f(signature)h(of)f(the)h(corresp)q(onding)
75 389 y(datat)o(yp)q(es,)f(i.e.,)h(the)f(sequence)i(of)e(basic)h(t)o(yp)q(e)
g(comp)q(onen)o(ts,)f(and)h(do)q(es)g(not)f(dep)q(end)i(on)e(the)g(datat)o
(yp)q(e)75 445 y(de\014nition.)166 502 y(Example:)75 599 y
Ft(...)75 655 y(CALL)23 b(MPI_TYPE_CONTIGUOUS\()e(2,)j(MPI_REAL,)f(type2,)g
(...\))75 712 y(CALL)g(MPI_TYPE_CONTIGUOUS\()e(4,)j(MPI_REAL,)f(type4,)g
(...\))75 768 y(CALL)g(MPI_TYPE_CONTIGUOUS\()e(2,)j(type2,)f(type22,)g(...\))
75 825 y(...)75 881 y(CALL)g(MPI_SEND\()g(a,)h(4,)f(MPI_REAL,)g(...\))75
938 y(CALL)g(MPI_SEND\()g(a,)h(2,)f(type2,)g(...\))75 994 y(CALL)g
(MPI_SEND\()g(a,)h(1,)f(type22,)g(...\))75 1051 y(CALL)g(MPI_SEND\()g(a,)h
(1,)f(type4,)g(...\))75 1107 y(...)75 1163 y(CALL)g(MPI_RECV\()g(a,)h(4,)f
(MPI_REAL,)g(...\))75 1220 y(CALL)g(MPI_RECV\()g(a,)h(2,)f(type2,)g(...\))75
1276 y(CALL)g(MPI_RECV\()g(a,)h(1,)f(type22,)g(...\))75 1333
y(CALL)g(MPI_RECV\()g(a,)h(1,)f(type4,)g(...\))166 1429 y FA(F)l(rom)14
b(a)h(t)o(yp)q(e)h(matc)o(hing)f(viewp)q(oin)o(t)h(an)o(y)f(of)g(the)g(sends)
h(legally)g(matc)o(hes)f(an)o(y)g(of)g(the)g(receiv)o(es.)166
1486 y(A)22 b(datat)o(yp)q(e)f(ma)o(y)g(sp)q(ecify)i(o)o(v)o(erlapping)g(en)o
(tries.)40 b(If)22 b(suc)o(h)h(datat)o(yp)q(e)e(is)h(used)h(in)f(a)g(receiv)o
(e)75 1543 y(op)q(eration,)17 b(i.e.,)f(if)h(the)f(some)g(part)g(of)g(the)g
(receiv)o(e)i(bu\013er)e(is)h(o)o(v)o(erwritten)f(more)g(than)g(once)h(b)o(y)
f(the)75 1599 y(receiv)o(e)g(op)q(eration,)f(then)h(the)f(outcome)g(of)g(the)
g(receiv)o(e)h(is)g(unde\014ned.)166 1656 y(Supp)q(ose,)j(again,)f(that)f
Fv(MPI)p 683 1656 14 2 v 15 w(RECV\(buf,)j(count,)f(datat)o(yp)q(e,)g(dest,)g
(tag,)f(comm)m(,)d(status\))k FA(is)f(exe-)75 1712 y(cuted,)d(where)h
Fv(datat)o(yp)q(e)h FA(has)e(t)o(yp)q(e)g(map)600 1826 y Fl(f)p
FA(\()p Fi(ty)r(pe)725 1833 y Fj(0)743 1826 y Fi(;)8 b(disp)848
1833 y Fj(0)865 1826 y FA(\))p Fi(;)g(:::;)g FA(\()p Fi(ty)r(pe)1066
1833 y Fg(n)p Fh(\000)p Fj(1)1128 1826 y Fi(;)g(disp)1233 1833
y Fg(n)p Fh(\000)p Fj(1)1297 1826 y FA(\))p Fl(g)p Fi(:)166
1930 y FA(The)k(receiv)o(ed)g(message)f(need)h(not)f(\014ll)i(all)g(the)e
(receiv)o(e)h(bu\013er,)g(nor)f(do)q(es)h(it)g(need)g(to)f(\014ll)i(a)e(n)o
(um)o(b)q(er)75 1987 y(of)i(lo)q(cations)h(whic)o(h)g(is)f(a)g(m)o(ultiple)i
(of)e Fi(n)p FA(;)h(an)o(y)f(n)o(um)o(b)q(er)g Fi(k)i FA(of)d(basic)i(elemen)
o(ts)g(can)f(b)q(e)h(receiv)o(ed,)h(where)75 2043 y(0)d Fl(\024)h
Fi(k)h Fl(\024)f Fv(count)e Fl(\001)f Fi(n)p FA(.)166 2100
y(The)k(n)o(um)o(b)q(er)g(of)f(elemen)o(ts)i(receiv)o(ed)g(can)f(b)q(e)g
(retriev)o(ed)g(from)f Fv(status)j FA(using)e(the)g(query)g(function)75
2157 y Fv(MPI)p 160 2157 V 16 w(GET)p 264 2157 V 17 w(ELEMENTS)p
FA(:)75 2261 y Fv(MPI)p 160 2261 V 16 w(GET)p 264 2261 V 17
w(ELEMENTS\()h(status,)h(datat)o(yp)q(e,)h(count\))117 2339
y Fu(IN)155 b Fv(status)476 b Fu(return)15 b(status)g(of)e(receiv)o(e)i(op)q
(eration)f(\(Status\))117 2415 y(IN)155 b Fv(datat)o(yp)q(e)424
b Fu(datat)o(yp)q(e)14 b(used)h(b)o(y)f(receiv)o(e)h(op)q(eration)f
(\(handle\))117 2491 y(OUT)108 b Fv(count)482 b Fu(n)o(um)o(b)q(er)13
b(of)h(receiv)o(ed)h(basic)f(elemen)o(ts)g(\(in)o(teger\))75
2617 y Ft(int)23 b(MPI)p 245 2617 15 2 v 17 w(Get)p 334 2617
V 17 w(elements\(MPI)p 639 2617 V 16 w(Status)g(status,)f(MPI)p
1084 2617 V 17 w(Datatype)h(datatype,)g(int)g(*count\))75 2704
y(MPI)p 150 2704 V 17 w(GET)p 239 2704 V 17 w(ELEMENTS\(STATUS,)e(DATATYPE,)i
(COUNT,)g(IERROR\))1967 46 y Fy(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: 57 57
bop 75 -100 a Fw(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b FA(57)170 49 y Ft(INTEGER)23 b(STATUS\(MPI)p 604 49 15 2
v 16 w(STATUS)p 764 49 V 17 w(SIZE\),)g(DATATYPE,)f(COUNT,)h(IERROR)166
136 y FA(The)13 b(previously)h(used)f(function)h Fv(MPI)p 834
136 14 2 v 16 w(GET)p 938 136 V 16 w(COUNT)g FA(has)f(a)f(di\013eren)o(t)h(b)
q(eha)o(vior:)19 b(it)13 b(returns)g(the)75 192 y(n)o(um)o(b)q(er)g(of)f
(\\top)g(elemen)o(ts")h(receiv)o(ed.)21 b(In)13 b(the)g(previous)g(example,)h
Fv(MPI)p 1368 192 V 16 w(GET)p 1472 192 V 16 w(COUNT)g FA(ma)o(y)e(return)75
249 y(an)o(y)i(in)o(teger)h(v)m(alue)g Fi(k)q FA(,)g(where)f(0)f
Fl(\024)g Fi(k)g Fl(\024)g Fv(count)r FA(.)19 b(If)c Fv(MPI)p
1047 249 V 16 w(GET)p 1151 249 V 16 w(COUNT)h FA(returns)e
Fi(k)q FA(,)g(then)h(the)g(n)o(um)o(b)q(er)75 305 y(of)f(basic)h(elemen)o(ts)
f(receiv)o(ed)i(\(and)e(the)g(v)m(alue)h(returned)g(b)o(y)f
Fv(MPI)p 1226 305 V 16 w(GET)p 1330 305 V 16 w(ELEMENTS)p FA(\))g(is)h
Fi(n)8 b Fl(\001)g Fi(k)q FA(.)19 b(If)c(the)75 362 y(n)o(um)o(b)q(er)j(of)f
(basic)h(elemen)o(ts)g(receiv)o(ed)h(is)f(not)f(a)h(m)o(ultiple)h(of)e
Fi(n)p FA(,)h(i.e.)27 b(if)18 b(the)g(receiv)o(e)g(op)q(eration)g(has)75
418 y(not)f(receiv)o(ed)i(an)f(in)o(tegral)g(n)o(um)o(b)q(er)g(of)f
Fv(datat)o(yp)q(e)j FA(\\copies",)e(then)g Fv(MPI)p 1360 418
V 16 w(GET)p 1464 418 V 17 w(COUNT)g FA(returns)g(the)75 475
y(v)m(alue)e Fo(MPI)p 269 475 13 2 v 15 w(UNDEFINED)p FA(.)166
531 y(Example:)75 639 y Ft(...)75 695 y(CALL)23 b(MPI_TYPE_CONTIGUOUS\(2,)e
(MPI_REAL,)i(Type2,)g(ierr\))75 752 y(CALL)g(MPI_COMMIT\(Type2,)f(ierr\))75
808 y(...)75 865 y(CALL)h(MPI_RANK\(comm,)f(rank,)h(ierr\))75
921 y(IF\(rank.EQ.0\))147 977 y(THEN)218 1034 y(CALL)g(MPI_SEND\(a,)g(2,)g
(MPI_REAL,)g(1,)h(0,)f(comm,)g(ierr\))218 1090 y(CALL)g(MPI_SEND\(a,)g(3,)g
(MPI_REAL,)g(1,)h(0,)f(comm,)g(ierr\))147 1147 y(ELSE)218 1203
y(CALL)g(MPI_RECV\(a,)g(2,)g(Type2,)g(0,)h(0,)g(comm,)f(stat,)g(ierr\))218
1260 y(CALL)g(MPI_GET_COUNT\(stat,)f(Type2,)h(i,)g(ierr\))119
b(!)24 b(returns)f(i=1)218 1316 y(CALL)g(MPI_GET_ELEMENTS\(stat,)e(Type2,)i
(i,)h(ierr\))47 b(!)24 b(returns)f(i=2)218 1373 y(CALL)g(MPI_RECV\(a,)g(2,)g
(Type2,)g(0,)h(0,)g(comm,)f(stat,)g(ierr\))218 1429 y(CALL)g
(MPI_GET_COUNT\(stat,)f(Type2,)h(i,)g(ierr\))119 b(!)24 b(returns)f
(i=MPI_UNDEFINED)218 1486 y(CALL)g(MPI_GET_ELEMENTS\(stat,)e(Type2,)i(i,)h
(ierr\))47 b(!)24 b(returns)f(i=3)75 1542 y(END)g(IF)166 1649
y FA(The)15 b(function)h Fv(MPI)p 522 1649 14 2 v 16 w(GET)p
626 1649 V 17 w(ELEMENTS)f FA(can)g(also)g(b)q(e)g(used)h(after)e(a)h(prob)q
(e)g(to)g(\014nd)h(the)f(n)o(um)o(b)q(er)75 1706 y(of)20 b(elemen)o(ts)h(in)g
(the)f(prob)q(ed)h(message.)34 b(Note)20 b(that)f(the)h(t)o(w)o(o)f
(functions)i Fv(MPI)p 1507 1706 V 16 w(GET)p 1611 1706 V 17
w(COUNT)g FA(and)75 1762 y Fv(MPI)p 160 1762 V 16 w(GET)p 264
1762 V 17 w(ELEMENTS)15 b FA(return)g(the)g(same)g(v)m(alues)i(when)e(they)h
(are)e(used)i(with)g(basic)g(datat)o(yp)q(es.)189 1869 y Fr(R)n(ationale.)38
b FA(The)14 b(extension)g(giv)o(en)g(to)f(the)h(de\014nition)h(of)e
Fv(MPI)p 1303 1869 V 16 w(GET)p 1407 1869 V 16 w(COUNT)i FA(seems)e(natural:)
189 1926 y(one)j(w)o(ould)h(exp)q(ect)h(this)f(function)g(to)f(return)h(the)f
(v)m(alue)i(of)e(the)h Fv(count)h FA(argumen)o(t,)e(when)h(the)189
1982 y(receiv)o(e)e(bu\013er)f(is)h(\014lled.)22 b(Often)15
b(times)f Fv(datat)o(yp)q(e)i FA(represen)o(ts)f(a)f(basic)h(unit)g(of)f
(data)g(one)g(w)o(an)o(ts)189 2039 y(to)19 b(transfer;)j(e.g.,)e(a)g(record)g
(in)h(an)f(arra)o(y)f(of)h(records)g(\(structures\).)34 b(One)21
b(should)g(b)q(e)g(able)189 2095 y(to)f(\014nd)i(out)f(ho)o(w)f(man)o(y)h
(comp)q(onen)o(ts)g(where)g(receiv)o(ed)i(without)e(b)q(othering)h(to)e
(divide)j(b)o(y)189 2152 y(the)18 b(n)o(um)o(b)q(er)h(of)f(elemen)o(ts)i(in)f
(eac)o(h)g(comp)q(onen)o(t.)30 b(Ho)o(w)o(ev)o(er,)18 b(on)h(other)f(o)q
(ccasions,)h Fv(datat)o(yp)q(e)189 2208 y FA(is)h(used)h(to)f(de\014ned)h(a)f
(complex)h(la)o(y)o(out)f(of)g(data)f(in)i(the)g(receiv)o(er)g(memory)l(,)f
(and)h(do)q(es)f(not)189 2265 y(represen)o(t)i(a)g(basic)h(unit)g(of)f(data)g
(for)f(transfers.)41 b(In)23 b(suc)o(h)f(cases,)i(one)e(needs)i(to)d(use)i
(the)189 2321 y(function)16 b Fv(MPI)p 452 2321 V 15 w(GET)p
555 2321 V 17 w(ELEMENTS)p FA(.)f(\()p Fr(End)h(of)g(r)n(ationale.)p
FA(\))166 2504 y Fq(Implemen)o(tati)o(on)i(note:)58 b Fu(The)19
b(curren)o(t)i(de\014nition)e(implies)e(that)i(a)g(receiv)o(e)h(cannot)g(c)o
(hange)f(the)75 2554 y(v)n(alue)d(of)g(storage)h(b)q(et)o(w)o(een)h(the)f(en)
o(tries)g(de\014ned)h(to)e(comp)q(ose)g(the)h(comm)o(unication)c(bu\013er.)27
b(In)17 b(particular,)75 2604 y(the)c(de\014nition)g(implies)e(that)i
(padding)f(space)i(in)e(a)h(structure)i(should)d(not)h(b)q(e)g(mo)q(di\014ed)
f(when)h(suc)o(h)h(structure)75 2654 y(is)f(copied)g(from)f(one)h(pro)q(cess)
i(to)e(another.)18 b(This)13 b(w)o(ould)f(prev)o(en)o(ts)j(the)f(ob)o(vious)e
(optimization)e(of)j(cop)o(ying)f(the)75 2704 y(structure,)i(together)f(with)
e(the)i(padding,)e(as)h(one)g(con)o(tiguous)f(blo)q(c)o(k.)18
b(The)12 b(implemen)o(tatio)o(n)d(is)j(free)h(to)e(do)h(this)-32
46 y Fy(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: 58 58
bop 75 -100 a FA(58)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fu(optimization)d(when)j(it)f(do)q
(es)i(not)e(impact)f(the)i(outcome)f(of)g(the)h(computation.)22
b(The)16 b(user)g(can)g(\\force")g(this)75 99 y(optimization)11
b(b)o(y)j(explicitly)f(including)g(padding)g(as)h(part)g(of)f(the)h(message.)
75 302 y Fs(1.13.6)49 b(Co)o(rrect)15 b(use)h(of)g(addresses)75
388 y FA(Successiv)o(ely)23 b(declared)f(v)m(ariables)h(in)e(C)g(or)g(F)l
(ortran)e(are)i(not)g(necessarily)h(stored)f(at)f(con)o(tiguous)75
444 y(lo)q(cations.)i(Th)o(us,)16 b(care)g(m)o(ust)f(b)q(e)h(exercised)i
(that)d(displacemen)o(ts)i(do)f(not)f(cross)h(from)f(one)h(v)m(ariable)75
501 y(to)e(another.)20 b(Also,)15 b(in)g(mac)o(hines)h(with)f(segmen)o(ted)g
(address)g(space,)g(addresses)g(are)g(not)f(unique)j(and)75
557 y(address)11 b(arithmetic)h(has)g(some)f(p)q(eculiar)i(prop)q(erties.)19
b(Th)o(us,)12 b(use)g(of)f Fz(addresses)p FA(,)f(i.e.)20 b(displacemen)o(ts)
75 614 y(relativ)o(e)c(to)e(the)i(start)e(address)29 b Fo(MPI)p
733 614 13 2 v 14 w(BOTTOM)p FA(,)14 b(has)h(to)g(b)q(e)h(restricted.)166
670 y(V)l(ariables)g(b)q(elong)f(to)f(the)g(same)g Fz(sequen)o(tial)k
(storage)c FA(if)h(they)f(b)q(elong)i(to)e(the)g(same)g(arra)o(y)l(,)g(to)75
727 y(the)k(same)g Fv(COMMON)g FA(blo)q(c)o(k)h(in)g(F)l(ortran,)e(or)h(to)f
(the)h(same)g(structure)f(in)i(C.)f(V)l(alid)h(addresses)f(are)75
783 y(de\014ned)f(recursiv)o(ely)f(as)f(follo)o(ws:)131 878
y(1.)22 b(The)g(function)g Fv(MPI)p 558 878 14 2 v 16 w(ADDRESS)h
FA(returns)e(a)h(v)m(alid)h(address,)h(when)e(passed)g(as)f(argumen)o(t)g(a)
189 935 y(v)m(ariable)16 b(of)f(the)g(calling)i(program.)131
1025 y(2.)22 b(The)d Fv(buf)h FA(argumen)o(t)f(of)g(a)g(comm)o(unication)h
(function)g(ev)m(aluates)h(to)d(a)h(v)m(alid)i(address,)f(when)189
1082 y(passed)15 b(as)g(argumen)o(t)f(a)h(v)m(ariable)i(of)e(the)g(calling)i
(program.)131 1172 y(3.)22 b(If)15 b Fv(v)g FA(is)h(a)f(v)m(alid)i(address,)d
(and)i Fv(i)f FA(is)g(an)h(in)o(teger,)f(then)g Fv(v+i)g FA(is)h(a)f(v)m
(alid)i(address,)e(pro)o(vided)h Fv(v)f FA(and)189 1229 y Fv(v+i)g
FA(are)g(in)h(the)f(same)g(sequen)o(tial)h(storage.)131 1319
y(4.)22 b(If)15 b Fv(v)g FA(is)h(a)f(v)m(alid)i(address)e(then)29
b Fo(MPI)p 820 1319 13 2 v 15 w(BOTTOM)13 b(+)h(v)h FA(is)h(a)f(v)m(alid)i
(address.)166 1414 y(A)22 b(correct)g(program)g(uses)g(only)h(v)m(alid)i
(addresses)d(to)g(iden)o(tify)i(the)e(lo)q(cations)h(of)f(en)o(tries)h(in)75
1471 y(comm)o(unication)16 b(bu\013ers.)k(F)l(urthermore,)14
b(if)h Fv(u)h FA(and)f Fv(v)g FA(are)g(t)o(w)o(o)f(v)m(alid)j(addresses,)e
(then)g(the)g(\(in)o(teger\))75 1527 y(di\013erence)g Fv(u)f(-)g(v)g
FA(can)g(b)q(e)g(computed)g(only)h(if)f(b)q(oth)g Fv(u)g FA(and)g
Fv(v)g FA(are)f(in)i(the)f(same)f(sequen)o(tial)i(storage;)e(no)75
1584 y(other)i(arithmetic)h(op)q(erations)f(can)g(b)q(e)h(meaningfully)h
(executed)g(on)e(addresses.)166 1640 y(The)41 b(ab)q(o)o(v)o(e)20
b(rules)h(imp)q(ose)g(no)f(constrain)o(ts)g(in)h(the)f(use)h(of)f(deriv)o(ed)
h(datat)o(yp)q(es,)g(as)f(long)g(as)-1903 b Fk(\))75 1697 y
FA(they)18 b(are)f(used)h(to)f(de\014ne)h(a)g(comm)o(unication)g(bu\013er)f
(that)g(is)h(wholly)h(con)o(tained)f(within)h(the)e(same)75
1753 y(sequen)o(tial)23 b(storage.)38 b(Ho)o(w)o(ev)o(er,)22
b(the)g(construction)g(of)f(a)h(comm)o(unication)g(bu\013er)g(that)f(con)o
(tains)75 1810 y(v)m(ariables)f(that)f(are)g(not)g(within)h(the)f(same)g
(sequen)o(tial)h(storage)e(m)o(ust)h(ob)q(ey)g(certain)h(restrictions.)75
1866 y(Basically)l(,)g(a)e(comm)o(unication)h(bu\013er)f(with)g(v)m(ariables)
i(that)d(are)h(not)g(within)h(the)f(same)g(sequen)o(tial)75
1923 y(storage)g(can)h(b)q(e)h(used)g(only)g(b)o(y)f(sp)q(ecifying)i(in)f
(the)g(comm)o(unication)g(call)g Fv(buf)g(=)g(MPI)p 1651 1923
14 2 v 16 w(BOTTOM)p FA(,)75 1979 y Fv(count)i(=)g(1)p FA(,)g(and)f(using)h
(a)f Fv(datat)o(yp)q(e)i FA(argumen)o(t)d(where)i(all)g(displacemen)o(ts)h
(are)d(v)m(alid)j(\(absolute\))75 2035 y(addresses.)d(A)15
b(datat)o(yp)q(e)f(with)h(displacemen)o(ts)h(that)e(are)h(absolute)g
(addresses)g(not)f(within)i(the)f(same)75 2092 y(sequen)o(tial)h(storage)e
(can)i(only)f(b)q(e)h(constructed)g(using)g Fv(MPI)p 1139 2092
V 15 w(TYPE)p 1271 2092 V 17 w(STRUCT)p FA(.)189 2187 y Fr(A)n(dvic)n(e)f(to)
i(users.)39 b FA(It)16 b(is)f(not)g(exp)q(ected)i(that)d(MPI)h(implemen)o
(tations)i(will)f(b)q(e)g(able)g(to)f(detect)189 2244 y(erroneous,)22
b(\\out)f(of)g(b)q(ound")h(displacemen)o(ts)h({)f(unless)g(those)f(o)o(v)o
(er\015o)o(w)g(the)g(user)h(address)189 2300 y(space)15 b({)h(since)g(the)g
(MPI)g(call)g(ma)o(y)f(not)g(kno)o(w)g(the)h(exten)o(t)f(of)g(the)h(arra)o
(ys)e(and)i(records)f(in)i(the)189 2356 y(host)d(program.)19
b(\()p Fr(End)d(of)g(advic)n(e)g(to)h(users.)p FA(\))166 2534
y Fq(Implemen)o(tati)o(on)d(note:)41 b Fu(There)16 b(is)f(no)g(need)h(to)f
(distinguish)g(\(absolute\))h(addresses)h(and)e(\(relativ)o(e\))75
2591 y(displacemen)o(ts)h(on)h(a)g(mac)o(hine)e(with)i(con)o(tiguous)f
(address)i(space:)25 b Fo(MPI)p 1274 2591 13 2 v 15 w(BOTTOM)16
b Fu(is)h(zero,)h(and)e(b)q(oth)h(ad-)75 2647 y(dresses)d(and)e(displacemen)o
(ts)g(are)g(in)o(tegers.)18 b(On)13 b(mac)o(hines)e(where)i(the)f
(distinction)g(is)g(required,)g(addresses)j(are)75 2704 y(recognized)g(as)f
(expressions)h(that)f(in)o(v)o(olv)o(e)f Fo(MPI)p 852 2704
V 14 w(BOTTOM)p Fu(.)1967 46 y Fy(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: 59 59
bop 75 -100 a Fw(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b FA(59)75 49 y Fs(1.13.7)49 b(Examples)75 137 y FA(The)15
b(follo)o(wing)h(examples)g(illustrate)h(the)e(use)g(of)g(deriv)o(ed)h(datat)
o(yp)q(es.)75 263 y Fv(First)f(example:)43 b FA(Send)16 b(and)g(receiv)o(e)g
(a)e(section)i(of)f(a)g(3D)g(arra)o(y)l(.)218 376 y Ft(REAL)23
b(a\(100,100,100\),)f(e\(9,9,9\))218 432 y(INTEGER)h(oneslice,)g(twoslice,)f
(threeslice,)h(sizeofreal,)f(myrank,)h(ierr)218 489 y(MPI_STATUS)g(status)75
602 y(C)143 b(extract)23 b(the)g(section)g(a\(1:17:2,)g(3:11,)g(2:10\))75
658 y(C)143 b(and)23 b(store)h(it)f(in)h(e\(*,*,*\).)218 771
y(CALL)f(MPI_COMM_RANK\(MPI_COMM_WORLD,)d(myrank\))218 884
y(CALL)j(MPI_TYPE_EXTENT\()f(MPI_REAL,)h(sizeofreal,)f(ierr\))75
997 y(C)119 b(create)23 b(datatype)g(for)g(a)h(1D)g(section)218
1053 y(CALL)f(MPI_TYPE_VECTOR\()f(9,)i(1,)f(2,)h(MPI_REAL,)f(oneslice,)f
(ierr\))75 1166 y(C)119 b(create)23 b(datatype)g(for)g(a)h(2D)g(section)218
1223 y(CALL)f(MPI_TYPE_HVECTOR\(9,)f(1,)h(100*sizeofreal,)f(oneslice,)h
(twoslice,ierr\))75 1336 y(C)119 b(create)23 b(datatype)g(for)g(the)h(entire)
f(section)218 1392 y(CALL)g(MPI_TYPE_HVECTOR\()f(9,)i(1,)f
(100*100*sizeofreal,)e(twoslice,)i(1,)767 1449 y(threeslice,)f(ierr\))218
1561 y(CALL)h(MPI_TYPE_COMMIT\()f(threeslice,)h(ierr\))218
1618 y(CALL)g(MPI_SENDRECV\(a\(1,3,2\),)e(1,)j(threeslice,)e(myrank,)h(0,)h
(e,)f(9*9*9,)648 1674 y(MPI_REAL,)f(myrank,)h(0,)h(MPI_COMM_WORLD,)e(status,)
h(ierr\))75 1801 y Fv(Second)17 b(example:)42 b FA(Cop)o(y)15
b(the)g(\(strictly\))g(lo)o(w)o(er)g(triangular)g(part)g(of)g(a)g(matrix.)218
1913 y Ft(REAL)23 b(a\(100,100\),)g(b\(100,100\))218 1970 y(INTEGER)47
b(disp\(100\),)22 b(blocklen\(100\),)g(ltype,)h(myrank,)g(ierr)218
2026 y(MPI_STATUS)g(status)75 2139 y(C)119 b(copy)23 b(lower)h(triangular)e
(part)h(of)h(array)f(a)75 2195 y(C)119 b(onto)23 b(lower)h(triangular)e(part)
h(of)h(array)f(b)218 2308 y(CALL)g(MPI_COMM_RANK\(MPI_COMM_WORLD,)d(myrank\))
75 2421 y(C)119 b(compute)23 b(start)g(and)h(size)f(of)h(each)f(column)218
2478 y(DO)h(i=1,)f(100)266 2534 y(disp\(i\))g(=)h(100*\(i-1\))e(+)i(i)266
2591 y(block\(i\))f(=)g(100-i)218 2647 y(END)h(DO)-32 46 y
Fy(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: 60 60
bop 75 -100 a FA(60)613 b Fw(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Ft(C)119 b(create)23
b(datatype)g(for)g(lower)h(triangular)e(part)218 106 y(CALL)h
(MPI_TYPE_INDEX\()f(100,)i(block,)f(disp,)g(MPI_REAL,)f(ltype,)i(ierr\))218
219 y(CALL)f(MPI_TYPE_COMMIT\(ltype,)e(ierr\))218 275 y(CALL)i
(MPI_SENDRECV\()g(a,)g(1,)h(ltype,)f(myrank,)g(0,)g(b,)h(1,)552
332 y(ltype,)f(myrank,)g(0,)h(MPI_COMM_WORLD,)e(status,)h(ierr\))75
458 y Fv(Third)15 b(example:)43 b FA(T)l(ransp)q(ose)15 b(a)g(matrix)218
572 y Ft(REAL)23 b(a\(100,100\),)g(b\(100,100\))218 628 y(INTEGER)g(row,)g
(xpose,)g(sizeofreal,)g(myrank,)g(ierr)218 685 y(MPI_STATUS)g(status)75
798 y(C)119 b(transpose)23 b(matrix)g(a)h(onto)f(b)218 911
y(CALL)g(MPI_COMM_RANK\(MPI_COMM_WORLD,)d(myrank\))218 1024
y(CALL)j(MPI_TYPE_EXTENT\()f(MPI_REAL,)h(sizeofreal,)f(ierr\))75
1137 y(C)119 b(create)23 b(datatype)g(for)g(one)h(row)218 1193
y(CALL)f(MPI_TYPE_VECTOR\()f(100,)h(1,)h(100,)f(MPI_REAL,)g(row,)g(ierr\))75
1306 y(C)119 b(create)23 b(datatype)g(for)g(matrix)g(in)h(row-major)f(order)
218 1362 y(CALL)g(MPI_TYPE_HVECTOR\()f(100,)h(1,)h(sizeofreal,)e(row,)i
(xpose,)f(ierr\))218 1475 y(CALL)g(MPI_TYPE_COMMIT\()f(xpose,)h(ierr\))75
1588 y(C)119 b(send)23 b(matrix)h(in)f(row-major)g(order)g(and)g(receive)g
(in)h(column)f(major)g(order)218 1645 y(CALL)g(MPI_SENDRECV\()g(a,)g(1,)h
(xpose,)f(myrank,)g(0,)g(b,)h(100*100,)457 1701 y(MPI_REAL,)e(myrank,)h(0,)h
(MPI_COMM_WORLD,)e(status,)h(ierr\))166 1813 y FA(Another)15
b(approac)o(h)g(to)f(the)i(transp)q(ose)f(problem:)218 1913
y Ft(REAL)23 b(a\(100,100\),)g(b\(100,100\))218 1970 y(INTEGER)47
b(disp\(2\),)23 b(blocklen\(2\),)f(type\(2\),)h(row,)g(row1,)g(sizeofreal)218
2026 y(INTEGER)47 b(myrank,)23 b(ierr)218 2083 y(MPI_STATUS)g(status)218
2195 y(CALL)g(MPI_COMM_RANK\(MPI_COMM_WORLD,)d(myrank\))75
2308 y(C)119 b(transpose)23 b(matrix)g(a)h(onto)f(b)218 2421
y(CALL)g(MPI_TYPE_EXTENT\()f(MPI_REAL,)h(sizeofreal,)f(ierr\))75
2534 y(C)119 b(create)23 b(datatype)g(for)g(one)h(row)218 2591
y(CALL)f(MPI_TYPE_VECTOR\()f(100,)h(1,)h(100,)f(MPI_REAL,)g(row,)g(ierr\))75
2704 y(C)119 b(create)23 b(datatype)g(for)g(one)h(row,)f(with)h(the)f(extent)
g(of)h(one)f(real)g(number)1967 46 y Fy(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: 61 61
bop 75 -100 a Fw(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b FA(61)218 49 y Ft(disp\(1\))23 b(=)h(0)218 106 y(disp\(2\))f(=)h
(sizeofreal)218 162 y(type\(1\))47 b(=)24 b(row)218 219 y(type\(2\))47
b(=)24 b(MPI_UB)218 275 y(blocklen\(1\))46 b(=)24 b(1)218 332
y(blocklen\(2\))46 b(=)24 b(1)218 388 y(CALL)f(MPI_TYPE_STRUCT\()f(2,)i
(blocklen,)e(disp,)i(type,)f(row1,)g(ierr\))218 501 y(CALL)g
(MPI_TYPE_COMMIT\()f(row1,)h(ierr\))75 614 y(C)119 b(send)23
b(100)h(rows)f(and)h(receive)f(in)g(column)g(major)g(order)218
670 y(CALL)g(MPI_SENDRECV\()g(a,)g(100,)g(row1,)h(myrank,)f(0,)g(b,)h
(100*100,)457 727 y(MPI_REAL,)e(myrank,)h(0,)h(MPI_COMM_WORLD,)e(status,)h
(ierr\))75 847 y Fv(F)o(ourth)15 b(example:)43 b FA(manipulate)17
b(an)e(arra)o(y)f(of)g(structures.)75 953 y Ft(struct)23 b(Partstruct)147
1010 y({)147 1066 y(int)95 b(class;)47 b(/*)23 b(particle)g(class)g(*/)147
1123 y(double)g(d[6];)71 b(/*)23 b(particle)g(coordinates)f(*/)147
1179 y(char)71 b(b[7];)g(/*)23 b(some)g(additional)g(information)f(*/)147
1236 y(};)75 1349 y(struct)h(Partstruct)94 b(particle[1000];)75
1462 y(int)429 b(i,)24 b(dest,)f(rank;)75 1518 y(MPI_Comm)118
b(comm;)75 1687 y(/*)24 b(build)f(datatype)g(describing)f(structure)h(*/)75
1800 y(MPI_Datatype)f(Particletype;)75 1857 y(MPI_Datatype)g(type[3])h(=)h
({MPI_INT,)e(MPI_DOUBLE,)h(MPI_CHAR};)75 1913 y(int)238 b(blocklen[3])23
b(=)g({1,)h(6,)f(7};)75 1970 y(MPI_Aint)118 b(disp[3];)75 2139
y(/*)24 b(compute)e(displacements)h(of)g(structure)g(components)f(*/)75
2252 y(MPI_Address\()g(particle,)h(disp\);)75 2308 y(MPI_Address\()f
(particle[0].d,)g(disp+1\);)75 2365 y(MPI_Address\()g(particle[0].b,)g
(disp+2\);)75 2421 y(for)h(\(i=0;)h(i)f(<3;)h(i++\))f(disp[i])g(-=)h
(disp[0];)75 2534 y(MPI_Type_struct\()e(3,)h(blocklen,)g(disp,)g(type,)g
(&Particletype\);)147 2647 y(/*)g(If)h(compiler)f(does)g(padding)g(in)g
(mysterious)g(ways,)147 2704 y(the)g(following)g(may)g(be)h(safer)f(*/)-32
46 y Fy(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: 62 62
bop 75 -100 a FA(62)613 b Fw(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 106 y Ft(MPI_Datatype)22
b(type1[4])h(=)h({MPI_INT,)e(MPI_DOUBLE,)h(MPI_CHAR,)f(MPI_UB};)75
162 y(int)238 b(blocklen1[4])22 b(=)i({1,)g(6,)f(7,)h(1};)75
219 y(MPI_Aint)118 b(disp1[4];)75 332 y(/*)24 b(compute)e(displacements)h(of)
g(structure)g(components)f(*/)75 444 y(MPI_Address\()g(particle,)h(disp1\);)
75 501 y(MPI_Address\()f(particle[0].d,)g(disp1+1\);)75 557
y(MPI_Address\()g(particle[0].b,)g(disp1+2\);)75 614 y(MPI_Address\()g
(particle+1,)h(disp1+3\);)75 670 y(for)g(\(i=0;)h(i)f(<4;)h(i++\))f(disp1[i])
g(-=)g(disp1[0];)75 783 y(/*)h(build)f(datatype)g(describing)f(structure)h
(*/)75 896 y(MPI_Type_struct\()f(4,)h(blocklen1,)g(disp1,)g(type1,)g
(&Particletype\);)409 1065 y(/*)h(4.1:)266 1122 y(send)f(the)h(entire)f
(array)g(*/)75 1235 y(MPI_Type_commit\()f(&Particletype\);)75
1291 y(MPI_Send\()h(particle,)f(1000,)h(Particletype,)g(dest,)g(tag,)g
(comm\);)409 1461 y(/*)h(4.2:)266 1517 y(send)f(only)h(the)f(entries)g(of)g
(class)h(zero)f(particles,)266 1574 y(preceded)g(by)g(the)h(number)f(of)g
(such)h(entries)f(*/)75 1686 y(MPI_Datatype)f(Zparticles;)70
b(/*)24 b(datatype)f(describing)f(all)i(particles)791 1743
y(with)f(class)g(zero)h(\(needs)f(to)g(be)h(recomputed)791
1799 y(if)f(classes)g(change\))g(*/)75 1856 y(MPI_Datatype)f(Ztype;)75
1969 y(MPI_Aint)118 b(zdisp[1000];)75 2025 y(int)23 b(zblock[1000],)g(j,)g
(k;)75 2082 y(int)g(zzblock[2])g(=)h({1,1};)75 2138 y(MPI_Aint)118
b(zzdisp[2];)75 2195 y(MPI_Datatype)22 b(zztype[2];)75 2307
y(/*)i(compute)e(displacements)h(of)g(class)g(zero)h(particles)e(*/)75
2364 y(j)i(=)f(0;)75 2420 y(for\(i=0;)g(i)g(<)h(1000;)f(i++\))123
2477 y(if)g(\(particle[i].class==0\))194 2533 y({)194 2590
y(zdisp[j])g(=)h(i;)194 2646 y(zblock[j])f(=)h(1;)194 2703
y(j++;)1967 46 y Fy(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: 63 63
bop 75 -100 a Fw(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b FA(63)194 49 y Ft(})75 162 y(/*)24 b(create)f(datatype)f(for)i(class)f
(zero)g(particles)47 b(*/)75 219 y(MPI_Type_indexed\()22 b(j,)h(zblock,)g
(zdisp,)g(Particletype,)f(&Zparticles\);)75 332 y(/*)i(prepend)e(particle)h
(count)g(*/)75 388 y(MPI_Address\(&j,)f(zzdisp\);)75 444 y
(MPI_Address\(particle,)f(zzdisp+1\);)75 501 y(zztype[0])i(=)g(MPI_INT;)75
557 y(zztype[1])g(=)g(Zparticles;)75 614 y(MPI_Type_struct\(2,)e(zzblock,)i
(zzdisp,)g(zztype,)g(&Ztype\);)75 727 y(MPI_Type_commit\()f(&Ztype\);)75
783 y(MPI_Send\()h(MPI_BOTTOM,)f(1,)i(Ztype,)f(dest,)g(tag,)g(comm\);)242
953 y(/*)h(A)f(probably)g(more)g(efficient)g(way)h(of)f(defining)g
(Zparticles)f(*/)75 1065 y(/*)i(consecutive)e(particles)h(with)g(index)g
(zero)g(are)h(handled)f(as)g(one)h(block)f(*/)75 1122 y(j=0;)75
1178 y(for)g(\(i=0;)h(i)f(<)h(1000;)f(i++\))123 1235 y(if)g
(\(particle[i].index==0\))170 1291 y({)170 1348 y(for)h(\(k=i+1;)f(\(k)g(<)h
(1000\)&&\(particle[k].index)d(==)i(0\))h(;)f(k++\);)170 1404
y(zdisp[j])g(=)h(i;)170 1461 y(zblock[j])f(=)h(k-i;)170 1517
y(j++;)170 1574 y(i)g(=)g(k;)170 1630 y(})75 1686 y(MPI_Type_indexed\()e(j,)h
(zblock,)g(zdisp,)g(Particletype,)f(&Zparticles\);)457 1856
y(/*)h(4.3:)314 1912 y(send)g(the)g(first)h(two)f(coordinates)f(of)i(all)f
(entries)g(*/)75 2025 y(MPI_Datatype)f(Allpairs;)142 b(/*)24
b(datatype)f(for)g(all)g(pairs)h(of)f(coordinates)g(*/)75 2138
y(MPI_Aint)g(sizeofentry;)75 2251 y(MPI_Type_extent\()f(Particletype,)g
(sizeofentry\);)194 2364 y(/*)i(sizeofentry)e(can)i(also)f(be)h(computed)e
(by)i(subtracting)e(the)i(address)266 2420 y(of)f(particle[0])g(from)g(the)h
(address)f(of)g(particle[1])f(*/)75 2533 y(MPI_Type_hvector\()g(1000,)h(2,)g
(sizeofentry,)g(MPI_REAL,)f(&Allpairs\);)75 2590 y(MPI_Type_commit\()g
(&Allpairs\);)75 2646 y(MPI_Send\()h(particle.d,)f(1,)i(Allpairs,)e(dest,)h
(tag,)h(comm\);)-32 46 y Fy(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: 64 64
bop 75 -100 a FA(64)613 b Fw(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)218 49 y Ft(/*)24 b(an)f(alternative)g
(solution)f(to)i(4.3)g(*/)75 162 y(MPI_Datatype)e(Onepair;)71
b(/*)23 b(datatype)g(for)h(one)f(pair)g(of)h(coordinates,)e(with)695
219 y(the)i(extent)f(of)h(one)f(particle)g(entry)g(*/)75 275
y(MPI_Aint)g(disp2[3];)75 332 y(MPI_Datatype)f(type2[3])h(=)h({MPI_LB,)e
(MPI_DOUBLE,)h(MPI_UB};)75 388 y(int)g(blocklen2[3])g(=)g({1,)h(2,)f(1};)75
501 y(MPI_Address\()f(particle,)h(disp2\);)75 557 y(MPI_Address\()f
(particle[0].d,)g(disp2+1\);)75 614 y(MPI_Address\()g(particle+1,)h
(disp2+2\);)75 670 y(for)g(\(i=0;)h(i<2;)f(i++\))g(disp2[i])g(-=)h(disp2[0];)
75 783 y(MPI_Type_struct\()e(3,)h(blocklen2,)g(disp2,)g(type2,)g(&Onepair\);)
75 840 y(MPI_Type_commit\()f(&Onepair\);)75 896 y(MPI_Send\()h
(particle[0].d,)f(1000,)h(Onepair,)g(dest,)g(tag,)g(comm\);)75
1073 y Fv(Fifth)18 b(example:)43 b FA(same)17 b(arra)o(y)g(manipulations)i
(as)f(in)g(the)g(previous)g(example,)h(but)f(using)h(absolute)75
1129 y(addresses)c(in)h(datat)o(yp)q(es.)75 1236 y Ft(struct)23
b(Partstruct)147 1292 y({)147 1349 y(int)g(class;)147 1405
y(double)g(d[6];)147 1462 y(char)g(b[7];)147 1518 y(};)75 1631
y(struct)g(Partstruct)g(particle[1000];)337 1744 y(/*)h(build)f(datatype)g
(describing)g(first)g(array)g(entry)g(*/)75 1857 y(MPI_Datatype)f
(Particletype;)75 1913 y(MPI_Datatype)g(type[3])h(=)h({MPI_INT,)e
(MPI_DOUBLE,)h(MPI_CHAR};)75 1970 y(int)238 b(block[3])23 b(=)h({1,)f(6,)h
(7};)75 2026 y(MPI_Aint)118 b(disp[3];)75 2139 y(MPI_Address\()22
b(particle,)h(disp\);)75 2195 y(MPI_Address\()f(particle[0].d,)g(disp+1\);)75
2252 y(MPI_Address\()g(particle[0].b,)g(disp+2\);)75 2308 y
(MPI_Type_struct\()g(3,)h(block,)g(disp,)g(type,)h(&Particletype\);)75
2421 y(/*)g(Particletype)e(describes)g(first)i(array)f(entry)g(--)h(using)f
(absolute)147 2478 y(addresses)f(*/)505 2591 y(/*)h(5.1:)361
2647 y(send)h(the)f(entire)g(array)g(*/)1967 46 y Fy(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: 65 65
bop 75 -100 a Fw(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b FA(65)75 49 y Ft(MPI_Type_commit\()22 b(&Particletype\);)75
106 y(MPI_Send\()h(MPI_BOTTOM,)f(1000,)h(Particletype,)f(dest,)h(tag,)h
(comm\);)481 275 y(/*)f(5.2:)290 332 y(send)g(the)h(entries)e(of)i(class)f
(zero,)290 388 y(preceded)g(by)g(the)h(number)f(of)g(such)h(entries)e(*/)75
501 y(MPI_Datatype)g(Zparticles,)h(Ztype;)75 614 y(MPI_Aint)g(zdisp[1000])75
670 y(int)g(zblock[1000],)g(i,)g(j,)h(k;)75 727 y(int)f(zzblock[2])g(=)h
({1,1};)75 783 y(MPI_Datatype)e(zztype[2];)75 840 y(MPI_Aint)118
b(zzdisp[2];)75 953 y(j=0;)75 1009 y(for)23 b(\(i=0;)h(i)f(<)h(1000;)f(i++\))
123 1065 y(if)g(\(particle[i].index==0\))170 1122 y({)170 1178
y(for)h(\(k=i+1;)f(\(k)g(<)h(1000\)&&\(particle[k].index)d(=)i(0\))h(;)g
(k++\);)170 1235 y(zdisp[j])f(=)h(i;)170 1291 y(zblock[j])f(=)h(k-i;)170
1348 y(j++;)170 1404 y(i)g(=)g(k;)170 1461 y(})75 1517 y(MPI_Type_indexed\()e
(j,)h(zblock,)g(zdisp,)g(Particletype,)f(&Zparticles\);)75
1574 y(/*)i(Zparticles)e(describe)h(particles)f(with)i(class)f(zero,)g(using)
147 1630 y(their)g(absolute)g(addresses*/)75 1743 y(/*)h(prepend)e(particle)h
(count)g(*/)75 1799 y(MPI_Address\(&j,)f(zzdisp\);)75 1856
y(zzdisp[1])h(=)g(MPI_BOTTOM;)75 1912 y(zztype[0])g(=)g(MPI_INT;)75
1969 y(zztype[1])g(=)g(Zparticles;)75 2025 y(MPI_Type_struct\(2,)e(zzblock,)i
(zzdisp,)g(zztype,)g(&Ztype\);)75 2138 y(MPI_Type_commit\()f(&Ztype\);)75
2195 y(MPI_Send\()h(MPI_BOTTOM,)f(1,)i(Ztype,)f(dest,)g(tag,)g(comm\);)75
2371 y Fv(Sixth)16 b(example:)43 b FA(handling)17 b(of)e(unions.)75
2478 y Ft(union)23 b({)147 2534 y(int)118 b(ival;)147 2591
y(float)70 b(fval;)218 2647 y(})24 b(u[1000])-32 46 y Fy(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: 66 66
bop 75 -100 a FA(66)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Ft(int)119 b(utype;)75
162 y(/*)24 b(All)f(entries)g(of)h(u)f(have)h(identical)e(type;)h(variable)
147 219 y(utype)g(keeps)g(track)g(of)h(their)f(current)g(type)g(*/)75
332 y(MPI_Datatype)70 b(type[2];)75 388 y(int)286 b(blocklen[2])22
b(=)i({1,1};)75 444 y(MPI_Aint)166 b(disp[2];)75 501 y(MPI_Datatype)70
b(mpi_utype[2];)75 557 y(MPI_Aint)166 b(i,j;)75 670 y(/*)24
b(compute)e(an)i(MPI)g(datatype)e(for)i(each)f(possible)g(union)g(type;)147
727 y(assume)g(values)g(are)g(left-aligned)f(in)i(union)f(storage.)g(*/)75
840 y(MPI_Address\()f(u,)i(&i\);)75 896 y(MPI_Address\()e(u+1,)i(&j\);)75
953 y(disp[0])f(=)h(0;)f(disp[1])g(=)h(j-i)75 1009 y(type[1])f(=)h(MPI_UB;)75
1122 y(type[0])f(=)h(MPI_INT;)75 1178 y(MPI_Type_struct\(2,)d(blocklen,)i
(disp,)g(type,)g(&mpi_utype[0]\);)75 1291 y(type[0])g(=)h(MPI_FLOAT;)75
1348 y(MPI_Type_struct\(2,)d(blocklen,)i(disp,)g(type,)g(&mpi_utype[1]\);)75
1461 y(for\(i=0;)g(i<2;)g(i++\))g(MPI_Type_commit\(&mpi_utype[i])o(\);)75
1574 y(/*)h(actual)f(communication)f(*/)75 1686 y(MPI_Send\(u,)g(1000,)i
(mpi_utype[utype],)d(dest,)i(tag,)h(comm\);)75 1901 y FB(1.14)60
b(New)19 b(p)n(rop)r(osal)h(fo)n(r)g(pack)g(and)g(unpack)-28
1969 y Fk(\))189 2026 y Fr(R)n(ationale.)37 b FA(Man)o(y)12
b(existing)h(comm)o(unication)f(libraries)i(pro)o(vide)e(pac)o(k/unpac)o(k)g
(functions)h(for)189 2083 y(sending)19 b(noncon)o(tiguous)f(data:)24
b(the)18 b(user)g(explicitly)i(pac)o(ks)e(data)f(in)o(to)h(a)f(con)o(tiguous)
h(bu\013er)189 2139 y(b)q(efore)c(sending)h(it,)f(and)g(unpac)o(ks)g(it)g
(from)f(a)h(con)o(tiguous)g(bu\013er)f(after)g(receiv)o(eing)j(it.)j(Deriv)o
(ed)189 2195 y(datat)o(yp)q(es,)g(whic)o(h)h(are)e(describ)q(ed)j(in)f
(Section)g(1.13)e(b)q(elo)o(w,)i(allo)o(w)g(in)g(most)e(cases)h(to)f(a)o(v)o
(oid)189 2252 y(explicit)d(pac)o(king)f(and)f(unpac)o(king)h(in)g(most)e
(cases:)19 b(the)13 b(user)h(sp)q(eci\014es)h(the)e(la)o(y)o(out)g(of)f(the)i
(data)189 2308 y(to)f(b)q(e)h(send)g(or)f(receiv)o(ed,)i(and)f(the)f(comm)o
(unication)i(library)f(directly)h(accesses)f(a)f(noncon)o(tigu-)189
2365 y(ous)18 b(bu\013er.)30 b(The)19 b(pac)o(k/unpac)o(k)f(routines)h(are)f
(pro)o(vided)h(for)f(compatibilit)o(y)i(with)f(previous)189
2421 y(libraries.)h(Also,)13 b(they)f(pro)o(vide)h(some)e(functionalit)o(y)j
(that)d(is)i(not)e(otherwise)i(a)o(v)m(ailable)g(in)g(MPI:)189
2478 y(a)f(message)g(can)g(b)q(e)i(receiv)o(ed)f(in)h(sev)o(eral)e(parts,)g
(where)h(the)f(receiv)o(e)i(op)q(eration)f(done)f(on)h(a)f(later)189
2534 y(part)i(ma)o(y)g(dep)q(end)i(on)f(the)g(con)o(ten)o(t)f(of)h(a)f
(former)g(part;)g(and)h(outgoing)g(messages)f(ma)o(y)g(b)q(e)i(ex-)189
2591 y(plicitly)22 b(bu\013ered)e(in)h(user)f(supplied)i(space,)f(th)o(us)e
(o)o(v)o(eriding)i(the)f(system)f(bu\013ering)h(p)q(olicy)l(.)189
2647 y(Finally)l(,)f(the)e(a)o(v)m(ailabilit)o(y)i(of)e(pac)o(k)f(and)i
(unpac)o(k)f(op)q(erations)g(facilitate)h(the)g(dev)o(elopmen)o(t)f(of)189
2704 y(additional)f(comm)o(unication)g(libraries)h(la)o(y)o(ered)e(on)h(top)e
(of)h(MPI.)g(\()p Fr(End)g(of)i(r)n(ationale.)p FA(\))1967
46 y Fy(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: 67 67
bop 75 -100 a Fw(1.14.)34 b(NEW)15 b(PR)o(OPOSAL)h(F)o(OR)g(P)l(A)o(CK)f(AND)
g(UNP)l(A)o(CK)662 b FA(67)75 49 y Fv(MPI)p 160 49 14 2 v 16
w(P)l(A)o(CK\(inbuf,)15 b(incount,)i(int)o(yp)q(e,)f(outbuf,)g(outsize,)g(p)q
(osition,)g(dest,)g(comm)m(\))117 126 y Fu(IN)155 b Fv(inbuf)493
b Fu(input)14 b(bu\013er)h(start)f(\(c)o(hoice\))117 201 y(IN)155
b Fv(incount)448 b Fu(n)o(um)o(b)q(er)13 b(of)h(input)f(data)h(items)f(\(in)o
(teger\))117 275 y(IN)155 b Fv(int)o(yp)q(e)473 b Fu(datat)o(yp)q(e)14
b(of)g(eac)o(h)g(input)g(data)f(item)g(\(handle\))117 350 y(OUT)108
b Fv(outbuf)465 b Fu(output)14 b(bu\013er)h(start)g(\(arra)o(y)e(of)h(c)o
(haracters\))117 424 y(IN)155 b Fv(outsize)457 b Fu(output)14
b(bu\013er)h(size,)f(in)g(c)o(haracter)h(units)f(\(in)o(teger\))117
498 y(INOUT)62 b Fv(outcount)420 b Fu(curren)o(t)16 b(p)q(osition)d(in)g
(bu\013er)i(\(in)o(teger\))117 573 y(IN)155 b Fv(dest)511 b
Fu(destination)14 b(of)f(pac)o(k)o(ed)h(message)g(\(in)o(teger\))117
647 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11 b(for)j(pac)o(k)o(ed)g
(message)g(\(handle\))75 771 y Ft(int)23 b(MPI)p 245 771 15
2 v 17 w(Pack\(void*)g(inbuf,)g(int)g(incount,)g(MPI)p 1074
771 V 17 w(Datatype)g(intype,)f(char)i(*outbuf,)393 828 y(int)g(outsize,)e
(int)i(*position,)e(int)i(dest,)f(MPI)p 1375 828 V 17 w(Comm)g(comm\))75
914 y(MPI)p 150 914 V 17 w(PACK\(INBUF,)f(INCOUNT,)h(INTYPE,)g(OUTBUF,)g
(OUTSIZE,)f(POSITION,)h(DEST,)g(COMM,)393 971 y(IERROR\))170
1027 y(<type>)g(INBUF\(*\))170 1084 y(CHARACTER*1)g(OUTBUF\(*\))170
1140 y(INTEGER)g(INCOUNT,)g(INTYPE,)g(OUTSIZE,)g(POSITION,)f(DEST,)i(COMM,)f
(IERROR)166 1227 y FA(P)o(ac)o(ks)15 b(the)h(message)f(in)i(the)f(send)g
(bu\013er)g(sp)q(eci\014ed)i(b)o(y)d Fv(inbuf,)i(incount,)g(int)o(yp)q(e)g
FA(in)o(to)f(the)g(bu\013er)75 1283 y(space)i(sp)q(eci\014ed)h(b)o(y)f
Fv(outbuf)h FA(and)e Fv(outsize)p FA(.)28 b(The)17 b(input)i(bu\013er)e(can)h
(b)q(e)g(an)o(y)f(comm)o(unication)h(bu\013er)75 1340 y(allo)o(w)o(ed)f(in)g
Fv(MPI)p 377 1340 14 2 v 15 w(SEND)p FA(.)g(The)f(output)g(bu\013er)g
Fv(outbuf)i FA(is)e(an)g(arra)o(y)f(of)h(c)o(haracters)g(of)f(length)i
Fv(outsize)75 1396 y FA(\(declared)j(as)e Fv(cha)o(r)g(buf[outsize])j
FA(in)e(C)g(and)f Fv(CHARA)o(CTER*1)i(BUF\(OUTSIZE\))f FA(in)g(F)l(ortran\).)
29 b(The)75 1452 y(input)22 b(v)m(alue)g(of)e Fv(p)q(osition)i
FA(is)f(the)g(\014rst)g(lo)q(cation)g(in)h(the)f(output)f(bu\013er)h(to)f(b)q
(e)h(used)h(for)e(pac)o(king.)75 1509 y Fv(p)q(osition)d FA(is)f(incremen)o
(ted)g(b)o(y)g(the)f(size)i(of)e(the)g(pac)o(k)o(ed)h(message,)f(and)g(the)h
(output)f(v)m(alue)i(of)e Fv(p)q(osition)75 1565 y FA(is)21
b(the)f(\014rst)g(lo)q(cation)i(in)f(the)f(output)h(bu\013er)f(follo)o(wing)h
(the)g(lo)q(cations)g(o)q(ccupied)h(b)o(y)e(the)h(pac)o(k)o(ed)75
1622 y(message.)k(The)17 b Fv(dest)i FA(and)e Fv(comm)11 b
FA(argumen)o(ts)17 b(iden)o(ti\014es)h(the)g(in)o(tended)g(destination)g(of)f
(the)g(pac)o(k)o(ed)75 1678 y(message)e(\(see)g(b)q(elo)o(w\).)75
1782 y Fv(MPI)p 160 1782 V 16 w(UNP)l(A)o(CK\(inbuf,)h(insize,)f(p)q
(osition,)h(outbuf,)g(outcount,)h(outt)o(yp)q(e,)g(source,)e(comm)m(\))117
1859 y Fu(IN)155 b Fv(inbuf)493 b Fu(input)14 b(bu\013er)h(start)f(\(arra)o
(y)g(of)f(c)o(haracters\))117 1934 y(IN)155 b Fv(insize)485
b Fu(size)15 b(of)e(input)h(bu\013er,)g(in)g(c)o(haracter)h(units)f(\(in)o
(teger\))117 2008 y(INOUT)62 b Fv(p)q(osition)439 b Fu(curren)o(t)16
b(p)q(osition)d(in)g(bu\013er)i(\(in)o(teger\))117 2082 y(OUT)108
b Fv(outbuf)465 b Fu(output)14 b(bu\013er)h(start)g(\(c)o(hoice\))117
2157 y(IN)155 b Fv(outcount)420 b Fu(n)o(um)o(b)q(er)13 b(of)h(items)f(to)g
(b)q(e)i(unpac)o(k)o(ed)f(\(in)o(teger\))117 2231 y(IN)155
b Fv(outt)o(yp)q(e)445 b Fu(datat)o(yp)q(e)14 b(of)g(eac)o(h)g(output)g(data)
g(item)e(\(handle\))117 2305 y(IN)155 b Fv(source)468 b Fu(source)15
b(of)f(pac)o(k)o(ed)g(message)f(\(in)o(teger\))117 2380 y(IN)155
b Fv(comm)466 b Fu(comm)o(unicator)11 b(for)j(pac)o(k)o(ed)g(message)g
(\(handle\))75 2504 y Ft(int)23 b(MPI)p 245 2504 15 2 v 17
w(Unpack\(char*)f(inbuf,)h(int)h(insize,)f(int)g(*position,)g(void)g
(*outbuf,)393 2561 y(int)h(outcount,)e(MPI)p 802 2561 V 17
w(Datatype)h(outtype,)g(int)g(source,)g(MPI)p 1607 2561 V 17
w(Comm)g(comm\))75 2647 y(MPI)p 150 2647 V 17 w(UNPACK\(INBUF,)f(INSIZE,)h
(POSITION,)f(OUTBUF,)h(OUTCOUNT,)g(OUTTYPE,)g(SOURCE,)393 2704
y(COMM,)g(IERROR\))-32 46 y Fy(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: 68 68
bop 75 -100 a FA(68)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)170 49 y Ft(CHARACTER*1)23
b(INBUF\(*\))170 106 y(<type>)g(OUTBUF\(*\))170 162 y(INTEGER)g(INSIZE,)g
(POSITION,)g(OUTCOUNT,)g(OUTTYPE,)f(SOURCE,)h(COMM,)g(IERROR)166
249 y FA(Unpac)o(ks)17 b(a)f(message)g(in)o(to)h(the)f(receiv)o(e)i(bu\013er)
f(sp)q(eci\014ed)h(b)o(y)f Fv(outbuf,)h(outcount,)g(outt)o(yp)q(e)h
FA(from)75 305 y(the)14 b(bu\013er)g(space)g(sp)q(eci\014ed)i(b)o(y)e
Fv(inbuf)i FA(and)e Fv(insize)p FA(.)20 b(The)14 b(output)g(bu\013er)g(can)g
(b)q(e)h(an)o(y)e(comm)o(unication)75 362 y(bu\013er)21 b(allo)o(w)o(ed)h(in)
g Fv(MPI)p 523 362 14 2 v 16 w(RECV)p FA(.)g(The)g(input)g(bu\013er)g
Fv(inbuf)g FA(is)g(an)f(arra)o(y)g(of)g(c)o(haracters)f(of)h(length)75
418 y Fv(outsize)p FA(.)f(\(declared)14 b(as)f Fv(cha)o(r)g(buf[outsize])i
FA(in)f(C)f(and)g Fv(CHARA)o(CTER*1)h(BUF\(OUTSIZE\))g FA(in)g(F)l(ortran\).)
75 474 y(The)h(input)g(v)m(alue)g(of)f Fv(p)q(osition)i FA(is)f(the)f
(\014rst)g(lo)q(cation)h(in)g(the)g(output)f(bu\013er)g(o)q(ccupied)i(b)o(y)e
(the)h(pac)o(k)o(ed)75 531 y(message.)34 b Fv(p)q(osition)21
b FA(is)g(incremen)o(ted)g(b)o(y)f(the)g(size)h(of)f(the)g(pac)o(k)o(ed)g
(message,)h(so)f(that)f(the)h(output)75 587 y(v)m(alue)g(of)e
Fv(p)q(osition)i FA(is)f(the)g(\014rst)f(lo)q(cation)i(in)f(the)g(output)g
(bu\013er)f(after)g(the)h(lo)q(cations)g(o)q(ccupied)i(b)o(y)75
644 y(the)14 b(message)f(that)f(w)o(as)h(unpac)o(k)o(ed.)20
b(The)13 b Fv(source)h FA(and)g Fv(comm)8 b FA(argumen)o(ts)k(iden)o(tify)j
(the)e(source)h(of)f(the)75 700 y(pac)o(k)o(ed)i(message)g(\(see)g(b)q(elo)o
(w\).)189 802 y Fr(A)n(dvic)n(e)21 b(to)i(users.)81 b FA(Note)21
b(the)h(di\013erence)i(b)q(et)o(w)o(een)e Fv(MPI)p 1277 802
V 16 w(RECV)g FA(and)h Fv(MPI)p 1608 802 V 15 w(UNP)l(A)o(CK)p
FA(:)f(In)189 859 y Fv(MPI)p 274 859 V 15 w(RECV)p FA(,)17
b(the)f Fv(count)h FA(argumen)o(t)e(sp)q(eci\014es)j(the)e(maxim)o(um)f(n)o
(um)o(b)q(er)i(of)e(items)h(that)f(can)h(b)q(e)189 915 y(receiv)o(ed.)35
b(The)21 b(actual)f(n)o(um)o(b)q(er)g(of)g(items)g(receiv)o(ed)h(is)g
(determined)g(b)o(y)f(the)g(length)h(of)f(the)189 972 y(incoming)15
b(message.)20 b(In)15 b Fv(MPI)p 716 972 V 16 w(UNP)l(A)o(CK)p
FA(,)f(the)h Fv(count)h FA(argumen)o(t)e(sp)q(eci\014es)i(the)f(actual)g(n)o
(um)o(b)q(er)189 1028 y(of)f(items)i(that)e(are)h(unpac)o(k)o(ed;)g(the)g
(\\size")h(of)e(the)i(corresp)q(onding)g(message)e(is)i(the)f(incremen)o(t)
189 1085 y(in)20 b Fv(p)q(osition)p FA(.)35 b(The)20 b(reason)f(for)g(this)i
(c)o(hange)e(is)i(that)e(the)h(\\incoming)g(message)g(size")g(is)g(not)189
1141 y(predetermined)15 b(since)f(the)g(user)g(decides)h(ho)o(w)e(m)o(uc)o(h)
h(to)e(unpac)o(k;)j(nor)e(is)h(it)g(easy)f(to)g(determine)189
1198 y(the)d(\\message)g(size")h(from)f(the)g(n)o(um)o(b)q(er)h(of)f(items)h
(to)f(b)q(e)h(unpac)o(k)o(ed.)19 b(In)11 b(fact,)g(in)g(a)f(heterogenous)189
1254 y(system,)k(this)i(n)o(um)o(b)q(er)f(ma)o(y)g(not)f(b)q(e)i(determined)h
(apriori.)j(\()p Fr(End)c(of)g(advic)n(e)g(to)h(users.)p FA(\))166
1356 y(T)l(o)f(understand)h(the)f(b)q(eha)o(vior)h(of)e(pac)o(k)h(and)h
(unpac)o(k,)f(it)h(is)f(con)o(v)o(enien)o(t)h(to)f(think)h(of)e(the)i(data)75
1413 y(part)11 b(of)g(a)g(message)g(as)g(b)q(eing)i(the)e(sequence)i
(obtained)f(b)o(y)g(concatenating)f(the)h(successiv)o(e)h(v)m(alues)f(sen)o
(t)75 1469 y(in)k(that)f(message.)20 b(The)c(pac)o(k)f(op)q(eration)h(stores)
f(this)g(sequence)i(in)f(the)g(bu\013er)f(space,)h(as)f(if)h(sending)75
1526 y(the)d(message)g(to)g(that)f(bu\013er.)19 b(The)14 b(unpac)o(k)f(op)q
(eration)h(retriev)o(es)f(this)h(sequence)g(from)f(bu\013er)g(space,)75
1582 y(as)j(if)h(receiv)o(eing)i(a)d(message)g(from)g(that)g(bu\013er.)25
b(\(It)16 b(is)h(helpful)i(to)d(think)i(of)e(in)o(ternal)h(F)l(ortran)f
(\014les)75 1639 y(or)f Fv(sscanf)h FA(in)g(C,)f(for)f(a)h(similar)i
(function.\))166 1695 y(A)k(message)f(can)g(b)q(e)i(pac)o(k)o(ed,)f(next)g
(sen)o(t)f(with)h(t)o(yp)q(e)g Fo(MPI)p 1228 1695 13 2 v 14
w(BYTE)p FA(;)f(the)g(outcome)h(is)g(as)f(if)h(the)75 1752
y(message)15 b(w)o(as)g(directly)i(sen)o(t)f(without)f(pac)o(king)h(\014rst.)
21 b(Similarly)l(,)d(a)d(message)h(can)f(b)q(e)i(receiv)o(ed)g(with)75
1808 y(t)o(yp)q(e)g Fo(MPI)p 256 1808 V 14 w(BYTE)p FA(,)f(next)h(unpac)o(k)o
(ed;)h(the)f(outcome)f(is)h(as)g(if)g(it)g(w)o(as)f(receiv)o(ed)i(directly)l
(,)h(without)d(\014rst)75 1864 y(unpac)o(king.)21 b(Th)o(us)75
1967 y Ft(position)i(=)g(0;)75 2023 y(MPI_PACK\(inbuf,)f(incount,)h(intype,)f
(outbuf,)h(outsize,)g(position,)g(dest,)g(tag\);)75 2080 y(MPI_SEND\(outbuf,)
f(position,)g(MPI_BYTE,)h(dest,)g(tag,)g(comm\))166 2182 y
FA(is)16 b(equiv)m(alen)o(t)h(to)75 2284 y Ft(MPI_SEND\(inbuf,)22
b(incount,)h(intype,)f(dest,)i(tag,)f(comm\))75 2386 y(MPI_RECV\(inbuf,)f
(insize,)h(MPI_BYTE,)f(source,)h(tag,)h(comm,)f(status\);)75
2443 y(position)g(=)g(0;)75 2499 y(MPI_UNPACK\(inbuf,)f(insize,)g(position,)h
(outbuf,)g(outcount,)g(outtype\))166 2601 y FA(is)16 b(equiv)m(alen)o(t)h(to)
75 2704 y Ft(MPI_RECV\(outbuf,)22 b(outcount,)g(outtype,)h(source,)g(tag,)g
(comm,)g(status\))1967 46 y Fy(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: 69 69
bop 75 -100 a Fw(1.14.)29 b(NEW)15 b(PR)o(OPOSAL)h(F)o(OR)g(P)l(A)o(CK)f(AND)
g(UNP)l(A)o(CK)667 b FA(69)166 49 y(assuming)13 b(that)g(the)g(incoming)i
(message)d(con)o(tains)i Fv(outcount)h FA(items)e(of)g(t)o(yp)q(e)g
Fv(outt)o(yp)q(e)p FA(.)21 b(\(It)13 b(is)h(the)75 106 y(user)h(the)h
(repsonsibilit)o(y)h(to)e(unpac)o(k)g(the)g(righ)o(t)g(n)o(um)o(b)q(er)h(of)f
(data)f(items.\))166 162 y(The)20 b Fv(comm)14 b FA(and)20
b Fv(dest)h FA(argumen)o(ts)e(in)h(a)g(call)h(to)e Fv(MPI)p
1148 162 14 2 v 16 w(P)l(A)o(CK)g FA(should)i(matc)o(h)e(the)h(argumen)o(ts)
75 219 y(used)e(to)e(subsequen)o(tly)i(send)g(the)f(pac)o(k)o(ed)g(bu\013er;)
h(the)f Fv(comm)11 b FA(and)17 b Fv(source)h FA(argumen)o(ts)e(in)i(a)e(call)
j(to)75 275 y Fv(MPI)p 160 275 V 16 w(UNP)l(A)o(CK)c FA(should)h(matc)o(h)e
(the)g(argumen)o(ts)g(previously)i(used)g(to)e(receiv)o(e)h(the)g(pac)o(k)o
(ed)g(bu\013er.)20 b(If)75 332 y(the)14 b(bu\013er)g(is)g(pac)o(k)o(ed)g(and)
g(unpac)o(k)o(ed)h(b)o(y)f(the)g(same)f(pro)q(cess,)h(then)g(the)g
Fv(comm)8 b FA(and)14 b Fv(dest)i FA(argumen)o(ts)75 388 y(of)g(the)h
Fv(MPI)p 293 388 V 16 w(P)l(A)o(CK)f FA(call)i(should)f(matc)o(h)f(the)h
Fv(comm)11 b FA(and)16 b Fv(source)h FA(argumen)o(ts)f(of)g(the)h
Fv(MPI)p 1684 388 V 16 w(UNP)l(A)o(CK)75 444 y FA(call.)189
546 y Fr(R)n(ationale.)38 b FA(The)13 b(need)h(for)e(the)h
Fv(comm)7 b FA(and)13 b Fv(source/dest)i FA(argumen)o(ts)d(follo)o(ws)h(from)
f(the)h(desire)189 602 y(to)g(\(i\))i(supp)q(ort)f(comm)o(unication)h(across)
f(heterogenous)h(no)q(des;)f(\(ii\))h(not)f(require)i(messages)e(to)189
659 y(b)q(e)i(self-t)o(yp)q(ed;)g(and)g(\(iii\))h(allo)o(w)f(data)f(con)o(v)o
(ersion)g(to)g(b)q(e)i(done)f(either)g(b)o(y)f(sender)i(or)e(receiv)o(er.)189
715 y(I.e.,)e(w)o(e)h(wish)h(to)e(con)o(tin)o(ue)i(the)f(general)h(MPI)f
(design)h(where)f(b)q(oth)h(sender)f(and)h(receiv)o(er)f(ha)o(v)o(e)189
772 y(su\016cien)o(t)21 b(information)f(to)g(do)g(data)g(con)o(v)o(ersion,)h
(and)g(b)q(oth)f(c)o(hoices)h(are)f(a)o(v)m(ailable)i(to)e(the)189
828 y(implemen)o(ter,)i(ev)o(en)f(if)g(messages)f(carry)g(no)g(information,)h
(in)h(addition)f(to)f(data.)34 b(\()p Fr(End)21 b(of)189 885
y(r)n(ationale.)p FA(\))166 1062 y Fq(Discussion:)33 b Fu(Rather)13
b(than)g(requiring)f(that)h(the)h Fo(comm)7 b Fu(and)13 b Fo(dest)g
Fu(argumen)o(ts)f(of)h Fo(MPI)p 1608 1062 13 2 v 14 w(P)m(A)o(CK)e
Fu(iden)o(tify)75 1112 y(the)j(target)f(of)f(the)i(pac)o(k)o(ed)f(message,)f
(one)i(could)e(merely)g(require)i(that)f(the)h(argumen)o(t)d(iden)o(ti\014es)
j(a)e(target)i(\\of)75 1162 y(the)h(same)e(kind".)18 b(This)c(w)o(ould)f
(allo)o(w)g(to)h(pac)o(k)g(a)g(message)f(and)h(send)h(it)f(to)g(sev)o(eral)h
(destinations,)f(as)g(long)f(as)75 1212 y(all)g(these)i(destinations)f(are)g
(\\of)f(the)i(same)e(kind".)k(T)m(o)c(supp)q(ort)i(this)f(extension,)g(it)g
(w)o(ould)f(b)q(e)h(useful)g(to)g(ha)o(v)o(e)75 1261 y(an)e(inquiry)f
(function)h(that)h(returns)g(the)g(\\kind")e(of)h(a)g(destination,)g(or)g(an)
g(enquiry)g(function)g(that)g(c)o(hec)o(ks)i(that)75 1311 y(t)o(w)o(o)f
(destinations)h(are)h(\\of)e(the)h(same)f(kind".)166 1368 y(A)e(further)h
(extension)g(is)f(to)g(allo)o(w)e(a)i(\\generic")g(destination,)g(of)g(unkno)
o(wn)f(\\kind".)17 b(This)11 b(could)f(sp)q(eci\014ed)75 1424
y(b)o(y)h(a)g(constan)o(t)h Fo(dest)g Fu(=)g Fo(MPI)p 530 1424
V 14 w(ANY)p 629 1424 V 15 w(DEST)p Fu(.)e(A)i(message)f(pac)o(k)o(ed)g(for)g
(a)g(destination)h(of)e(unkno)o(wn)h(kind,)g(m)o(ust)f(b)q(e)75
1481 y(unpac)o(k)o(ed)i(with)f Fo(source)i Fu(=)f Fo(MPI)p
590 1481 V 14 w(ANY)p 689 1481 V 15 w(SOURCE)p Fu(,)d(a)i(generic)i(source)g
(of)e(unkno)o(wn)g(kind.)17 b(The)11 b(implemen)o(tation)75
1537 y(w)o(ould)h(need)h(to)g(use)g(a)f(common)e(in)o(terc)o(hange)j(format)e
(\(e.g.,)g(XDR\),)h(for)g(suc)o(h)h(messages.)18 b(The)13 b(last)f(extension)
75 1594 y(could)i(b)q(e)g(in)g(addition)e(to)i(or)g(in)f(place)h(of)g(the)g
(previous)g(one.)166 1733 y FA(One)23 b(can)f(pac)o(k)g(sev)o(eral)h
(messages,)g(in)g(succession,)i(in)e(a)f(bu\013er,)h(then)g(send)g(the)f
(resulting)75 1789 y(concatenation.)d(The)12 b(outcome)f(is)h(as)g(if)g(the)g
(concatenated)g(message)f(w)o(as)g(prepared)h(using)g(a)g(suitable)75
1846 y(deriv)o(ed)k(datat)o(yp)q(e.)k(Similarly)l(,)d(one)e(can)g(unpac)o(k)h
(a)f(bu\013er)g(in)o(to)g(sev)o(eral)h(messages.)j(Th)o(us)75
1947 y Ft(...)75 2004 y(POSITION)k(=)g(0)75 2060 y(CALL)g(MPI_PACK\()g(LEN,)g
(1,)h(MPI_INTEGER,)e(OUTBUF,)290 2116 y(1000,)h(POSITION,)g(DEST,)g(COMM,)g
(IERR\))75 2173 y(CALL)g(MPI_PACK\()g(A,)h(LEN,)f(MPI_REAL,)f(OUTBUF,)314
2229 y(1000,)h(POSITION,)f(DEST,)i(COMM,)f(IERR\);)75 2286
y(CALL)g(MPI_SEND\()g(OUTBUF,)g(POSITION,)f(MPI_BYTE,)h(DEST,)314
2342 y(TAG,)g(COMM,)g(IERR\))166 2444 y FA(is)16 b(equiv)m(alen)o(t)h(to)75
2534 y Ft(...)75 2591 y(BLEN\(1\))23 b(=)h(1)75 2647 y(BLEN\(2\))f(=)h(LEN)75
2704 y(CALL)f(MPI_ADDRESS\()g(LEN,)g(DISP\(1\)\))-32 46 y Fy(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: 70 70
bop 75 -100 a FA(70)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Ft(CALL)23 b(MPI_ADDRESS\()g(A,)g
(DISP\(2\)\))75 106 y(TYPE\(1\))g(=)h(MPI_INTEGER)75 162 y(TYPE\(2\))f(=)h
(MPI_REAL)75 219 y(CALL)f(MPI_TYPE_STRUCT\(2,)f(BLEN,)h(DISP,)g(TYPE,)g
(NEWTYPE,)g(IERR\))75 275 y(CALL)g(MPI_COMMIT\(NEWTYPE,)f(IERR\))75
332 y(CALL)h(MPI_SEND\(MPI_BOTTOM,)e(1,)j(NEWTYPE,)f(DEST,)g(TAG,)g(COMM\))
166 425 y FA(Both)15 b(programs)f(send)i(a)f(message)f(that)h(consists)g(of)g
(one)g(in)o(teger)h(\(with)f(v)m(alue)h Fv(LEN)p FA(\),)f(follo)o(w)o(ed)75
481 y(b)o(y)g Fv(LEN)h FA(reals)f(from)g(arra)o(y)f Fv(A)p
FA(.)i(The)f(second)h(program)e(p)q(ossibly)j(a)o(v)o(oids)f(an)f(additional)
i(memory-to-)75 537 y(memory)e(cop)o(y)g(op)q(eration,)g(at)f(the)i(exp)q
(ense)g(of)f(additional)h(prepro)q(cessing.)166 594 y(If)h(the)f(v)m(alue)i
(of)e Fv(LEN)g FA(is)h(not)f(kno)o(wn)g(at)g(the)g(receiving)i(side)g(ahead)e
(of)g(the)h(receiv)o(e)g(op)q(eration,)75 650 y(then)f(the)f(message)g(can)g
(b)q(e)h(receiv)o(ed)g(b)o(y)f(executing)i(the)e(co)q(de)h(b)q(elo)o(w)75
755 y Ft(...)75 812 y(CALL)23 b(MPI_RECV\(INBUF,)f(1000,)h(MPI_BYTE,)g
(SOURCE,)g(TAG,)g(COMM,)385 868 y(STATUS,)g(IERR\))75 925 y(CALL)g
(MPI_UNPACK\(INBUF,)f(1000,)h(POSITION,)g(LEN,)g(1,)385 981
y(MPI_INTEGER,)f(SOURCE,)h(COMM,)h(IERR\))75 1038 y(CALL)f
(MPI_UNPACK\(INBUF,)f(1000,)h(POSITION,)g(A,)g(LEN,)385 1094
y(MPI_REAL,)g(SOURCE,)g(COMM,)g(IERR\))189 1199 y Fr(A)n(dvic)n(e)c(to)h
(users.)66 b FA(The)20 b(simplest)h(w)o(a)o(y)d(of)h(receiving)j(an)d(in)o
(teger)h Fv(LEN)p FA(,)f(follo)o(w)o(ed)h(b)o(y)f Fv(LEN)189
1256 y FA(reals,)14 b(is)h(to)f(send)h(t)o(w)o(o)e(messages,)g(the)i(\014rst)
f(with)g(the)h(v)m(alue)g Fv(LEN)p FA(,)f(the)h(second)g(with)f
Fv(LEN)h FA(real)189 1312 y(n)o(um)o(b)q(ers,)g(as)g(sho)o(wn)f(b)q(elo)o(w)
189 1436 y Ft(...)189 1492 y(!)23 b(send)h(side)189 1549 y(CALL)f
(MPI_SEND\(LEN,)f(1,)i(MPI_INTEGER,)e(DEST,)h(TAG,)g(COMM,)h(IERR\))189
1605 y(CALL)f(MPI_SEND\(A,)f(LEN,)i(MPI_REAL,)e(DEST,)h(TAG,)h(COMM,)f
(IERR\))189 1718 y(...)189 1775 y(!)g(receive)g(side)189 1831
y(CALL)g(MPI_RECV\(LEN,)f(1,)i(MPI_INTEGER,)e(SOURCE,)h(TAG,)g(COMM,)g
(IERR\))189 1887 y(CALL)g(MPI_RECV\(A,)f(LEN,)i(MPI_REAL,)e(SOURCE,)h(TAG,)g
(COMM,)h(IERR\))189 2011 y FA(The)c(\\pac)o(king")g(of)f(sev)o(eral)h
(di\013eren)o(t)h(data)e(items)h(in)h(one)f(message,)g(using)h(either)g
(explicit)189 2067 y(calls)c(to)e Fv(MPI)p 432 2067 14 2 v
16 w(P)l(A)o(CK)p FA(,)h(or)g(deriv)o(ed)h(datat)o(yp)q(es)e(is)i(only)g(to)e
(impro)o(v)o(e)h(p)q(erformance,)g(in)h(systems)189 2124 y(where)e(comm)o
(unication)h(latencies)h(are)d(signi\014can)o(t.)21 b(\()p
Fr(End)16 b(of)g(advic)n(e)g(to)h(users.)p FA(\))166 2305 y
Fq(Discussion:)51 b Fu(Sev)o(eral)18 b(restrictions)h(w)o(ere)g(suggested)h
(ab)q(out)e(sending/receiving)g(of)g(messages)g(that)75 2355
y(where)d(pac)o(k)o(ed)f(together:)166 2405 y(\(1\))j(Messages)h(are)g(alw)o
(a)o(ys)e(pac)o(k)o(ed/unpac)o(k)o(ed)h(in)g(sequence,)i(and)e(the)g
(starting)g(p)q(oin)o(t)g(for)g(unpac)o(king)75 2455 y(is)e(the)g(starting)f
(p)q(oin)o(t)h(for)f(pac)o(king.)20 b(E.g.,)13 b(one)i(cannot)g(pac)o(k)f
(separately)i(t)o(w)o(o)e(messages,)g(then)i(concatenate)75
2504 y(them)c(and)g(send)h(the)g(result.)18 b(Or,)13 b(one)f(cannot)h(pac)o
(k)f(\014v)o(e)h(messages,)f(and)g(then)h(send)g(a)g(message)f(that)g
(consists)75 2554 y(of)h(the)i(last)f(three)h(ones)g(pac)o(k)o(ed.)k(With)13
b(this)h(rule,)g(the)h(only)e(constrain)o(t)i(on)f(message)f(represen)o
(tation)j(is)e(that)75 2604 y(it)f(is)g(\\monotone":)j(the)e(represen)o
(tation)g(for)f(a)g(pre\014x)h(of)f(the)h(full)e(message)h(is)g(a)g(pre\014x)
h(of)f(the)g(represen)o(tation)75 2654 y(for)h(the)g(full)f(message.)19
b(T)m(o)13 b(pic)o(k)h(a)g(fancy)g(example:)j(supp)q(ose)e(that)f(one)h(w)o
(an)o(ts)f(to)g(compress)g(messages)g(using)75 2704 y(a)h(Lemp)q(el-Ziv)f(co)
q(de)j(b)q(efore)f(they)g(are)g(sen)o(t,)g(and)f(vice-v)o(ersa)i(on)e(the)h
(receiv)o(e)h(side.)23 b(This)15 b(restriction)i(w)o(ould)1967
46 y Fy(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: 71 71
bop 75 -100 a Fw(1.14.)34 b(NEW)15 b(PR)o(OPOSAL)h(F)o(OR)g(P)l(A)o(CK)f(AND)
g(UNP)l(A)o(CK)662 b FA(71)75 49 y Fu(allo)o(w)12 b(to)i(do)g(so;)g(the)h
(pac)o(k/unpac)o(k)f(routines)g(w)o(ould)g(ha)o(v)o(e)g(to)g(store)h(in)o
(ternally)e(information)e(on)j(the)g(curren)o(t)75 99 y(state)g(of)g(the)g
(Ziv-Lemp)q(el)e(algorithm.)k(A)d(less)i(fancy)e(example:)k(one)d(migh)o(t)d
(w)o(an)o(t)j(to)f(store)i(a)e(general)h(header)75 149 y(at)g(the)g(start)h
(of)e(the)i(message\))166 199 y(The)g(formal)e(constrain)o(t)i(is)g(that,)g
(on)g(the)h(send/pac)o(k)f(side,)h(the)f(initial)e(v)n(alue)i(of)f
Fo(p)q(osition)i Fu(matc)o(hes)e(the)75 249 y(initial)c(bu\013er)k(address)f
(used)h(in)d(the)i(send)h(op)q(eration,)e(and)g(that)g Fo(p)q(osition)h
Fu(is)f(only)g(mo)q(di\014ed)f(b)o(y)h(the)h(successiv)o(e)75
298 y(calls)g(to)f(pac)o(k.)18 b(I)13 b(sligh)o(t)f(extension)i(to)f(this,)f
(whic)o(h)h(is)g(harmless)f(and)h(simpli\014es)e(implemen)o(tation,)f(is)i
(that)h(the)75 348 y(initial)f(v)n(alue)h(of)g(p)q(osition)h(is)f(zero)i
(\(pac)o(king)e(starts)i(at)f(bu\013er)h(start\).)166 405 y(\(2\))e(Messages)
h(are)f(unpac)o(k)o(ed)h(in)e(the)i(same)e(\\c)o(h)o(unks")h(that)g(they)g
(where)h(pac)o(k)o(ed.)k(This)13 b(w)o(ould)f(preserv)o(e)75
461 y(ev)o(en)i(more)e(freedom)h(in)g(the)h(in)o(ternal)f(represen)o(tation)i
(of)e(messages,)g(as)g(co)q(de)h(do)q(es)h(not)e(ha)o(v)o(e)g(an)o(ymore)f
(to)h(b)q(e)75 517 y(self-delimiting.)i(But)f(this)g(restriction)h(is)f(more)
f(signi\014can)o(t)g(from)f(the)j(user)g(viewp)q(oin)o(t.)166
657 y FA(The)e(follo)o(wing)g(calls)g(allo)o(w)g(the)f(user)h(to)f(\014nd)h
(out)f(ho)o(w)g(m)o(uc)o(h)g(space)h(is)f(needed)i(to)e(pac)o(k/unpac)o(k)75
713 y(messages)j(and,)g(th)o(us,)f(manage)h(space)g(allo)q(cation)i(for)d
(bu\013ers.)75 817 y Fv(MPI)p 160 817 14 2 v 16 w(P)l(A)o(CK)p
291 817 V 16 w(SIZE\(incount,)i(int)o(yp)q(e,)g(dest,)g(comm)n(,)11
b(size\))117 894 y Fu(IN)155 b Fv(incount)448 b Fu(n)o(um)o(b)q(er)13
b(of)h(input)f(data)h(items)f(\(in)o(teger\))117 967 y(IN)155
b Fv(int)o(yp)q(e)473 b Fu(datat)o(yp)q(e)14 b(of)g(eac)o(h)g(input)g(data)f
(item)g(\(handle\))117 1040 y(IN)155 b Fv(dest)511 b Fu(destination)14
b(of)f(pac)o(k)o(ed)h(message)g(\(in)o(teger\))117 1112 y(IN)155
b Fv(comm)466 b Fu(comm)o(unicator)11 b(for)j(pac)o(k)o(ed)g(message)g
(\(handle\))117 1185 y(OUT)108 b Fv(size)519 b Fu(size)15 b(of)e(pac)o(k)o
(ed)h(message)g(\(in)o(teger\))75 1310 y Ft(int)23 b(MPI)p
245 1310 15 2 v 17 w(Pack)p 358 1310 V 17 w(size\(int)g(incount,)f(MPI)p
876 1310 V 17 w(Datatype)h(intype,)g(int)g(dest,)g(MPI)p 1609
1310 V 17 w(Comm)h(comm,)393 1366 y(int*)f(size\))75 1453 y(MPI)p
150 1453 V 17 w(PACK)p 263 1453 V 16 w(SIZE\(INCOUNT,)f(INTYPE,)h(DEST,)h
(COMM,)f(SIZE,)g(IERROR\))170 1509 y(INTEGER)g(INCOUNT,)g(INTYPE,)g(DEST,)g
(COMM,)g(SIZE,)h(IERROR)166 1595 y FA(A)11 b(call)h(to)e Fv(MPI)p
426 1595 14 2 v 16 w(P)l(A)o(CK)p 557 1595 V 16 w(SIZE\(incount,)j(int)o(yp)q
(e,)g(dest,)g(comm)m(,)8 b(size\))j FA(returns)g(in)h Fv(size)f
FA(the)g(incremen)o(t)75 1652 y(in)21 b Fv(p)q(osition)h FA(that)e(is)h
(e\013ected)f(b)o(y)h(a)f(call)h(to)f Fv(MPI)p 974 1652 V 16
w(P)l(A)o(CK\(inbuf,)i(incount,)h(int)o(yp)q(e,)g(outbuf,)g(outsize,)75
1708 y(p)q(osition,)16 b(dest,)g(tag\))p FA(;)75 1812 y Fv(MPI)p
160 1812 V 16 w(UNP)l(A)o(CK)p 354 1812 V 17 w(SIZE\(outcount,)g(outt)o(yp)q
(e,)g(source,)g(comm)m(,)11 b(size\))117 1889 y Fu(IN)155 b
Fv(outcount)420 b Fu(n)o(um)o(b)q(er)13 b(of)h(output)g(data)f(items)g(\(in)o
(teger\))117 1962 y(IN)155 b Fv(outt)o(yp)q(e)445 b Fu(datat)o(yp)q(e)14
b(of)g(eac)o(h)g(output)g(data)g(item)e(\(handle\))117 2035
y(IN)155 b Fv(source)468 b Fu(source)15 b(of)f(pac)o(k)o(ed)g(message)f(\(in)
o(teger\))117 2108 y(IN)155 b Fv(comm)466 b Fu(comm)o(unicator)11
b(for)j(pac)o(k)o(ed)g(message)g(\(handle\))117 2180 y(OUT)108
b Fv(size)519 b Fu(size)15 b(of)e(pac)o(k)o(ed)h(message)g(\(in)o(teger\))75
2305 y Ft(int)23 b(MPI)p 245 2305 15 2 v 17 w(Unpack)p 406
2305 V 17 w(size\(int)f(outount,)h(MPI)p 924 2305 V 17 w(Datatype)g(outtype,)
f(int)i(source,)393 2361 y(MPI)p 468 2361 V 17 w(Comm)f(comm,)g(int*)h
(size\))75 2448 y(MPI)p 150 2448 V 17 w(PACK)p 263 2448 V 16
w(SIZE\(OUTCOUNT,)e(OUTTYPE,)h(SOURCE,)g(COMM,)g(SIZE,)g(IERROR\))170
2504 y(INTEGER)g(OUTCOUNT,)g(OUTTYPE,)g(SOURCE,)g(COMM,)g(SIZE,)g(IERROR)166
2591 y FA(A)15 b(call)i(to)d Fv(MPI)p 439 2591 14 2 v 16 w(UNP)l(A)o(CK)p
633 2591 V 17 w(SIZE\(outcount,)i(outt)o(yp)q(e,)h(source,)f(comm)m(,)c
(size\))j FA(returns)g(in)h Fv(size)g FA(the)75 2647 y(incremen)o(t)i(in)g
Fv(p)q(osition)g FA(that)f(is)g(e\013ected)h(b)o(y)f(a)f(call)j(to)d
Fv(MPI)p 1157 2647 V 16 w(UNP)l(A)o(CK\(outbuf,)j(outcount,)g(outt)o(yp)q(e,)
75 2704 y(inbuf,)d(insize,)f(p)q(osition,)h(dest,)h(tag\))p
FA(;)-32 46 y Fy(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: 72 72
bop 75 -100 a FA(72)608 b Fw(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y Fq(Discussion:)37
b Fu(This)15 b(de\014nition)f(implies)f(that)h(a)h(pac)o(k)o(ed)g(message)f
(tak)o(es)h(the)g(same)f(size,)h(whether)h(it's)75 99 y(pac)o(k)o(ed)g
(\014rst,)f(or)h(second,)g(or)f(third.)22 b(This)15 b(is)g(not)h(true)g(in)f
(our)g(h)o(yp)q(othetical)g(example)f(where)i(messages)g(are)75
149 y(compressed,)g(or)f(in)f(the)i(case)g(where)g(a)f(header)h(is)e(stored)i
(when)g(the)g(\014rst)f(message)g(is)g(pac)o(k)o(ed.)22 b(Rather,)15
b(one)75 199 y(migh)o(t)d(w)o(an)o(t)h(these)j(t)o(w)o(o)d(functions)h(to)g
(return)h(an)e(upp)q(er)i(b)q(ound)f(on)g(the)g(amoun)o(t)e(of)i(storage)g
(required.)166 249 y(If)f(w)o(e)i(put)f(in)f(these)i(functions,)f(w)o(e)g(ma)
o(y)e(w)o(an)o(t)h(to)h(delete)h(the)g(function)e Fo(MPI)p
1424 249 13 2 v 14 w(TYPE)p 1546 249 V 15 w(SIZE)p Fu(.)166
298 y(If)g(w)o(e)i(supp)q(ort)f(pac)o(king)f(and)h(unpac)o(king,)f(w)o(e)h
(ma)o(y)e(w)o(an)o(t)i(to)f(delete)i(the)g(function)75 348
y Fo(MPI)p 152 348 V 14 w(USER)p 270 348 V 14 w(SPECIFIES)p
482 348 V 13 w(BUFFER)p Fu(.)10 b(If)i(the)h(user)h(w)o(an)o(ts)e(to)g
(bu\013er)i(on)e(its)h(o)o(wn,)f(then)h(it)f(will)f(use)i(pac)o(k/unpac)o(k)
75 398 y(calls.)166 454 y(I)i(cannot)g(resist)h(p)q(oin)o(ting)d(out)i(that)g
(at)g(least)g(three)h(di\013eren)o(t)g(groups)f(came)f(out)g(with)h
(suggestions)g(for)75 511 y(pac)o(k/unpac)o(k)i(functions)g(that)g(w)o(ere)h
(essen)o(tially)f(iden)o(tical.)27 b(This)17 b(suggests)h(to)f(me)f(that)h
(MPI)g(has)h(a)e(go)q(o)q(d)75 567 y(in)o(ternal)d(coherence,)j(so)e(that)g
(there)h(often)f(is)g(one)g(\\righ)o(t")f(w)o(a)o(y)g(of)h(pro)o(viding)e(a)i
(new)g(function.)1967 46 y Fy(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