Subject: mpi pt2pt section draft postscript

From: [email-masked] (Marc Snir)
Date: Wed, 12 Jan 94 19:14:44 -0500

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

%!PS-Adobe-2.0
%%Creator: dvips 5.47 (RS/6000 1.0) Copyright 1986-91 Radical Eye Software
%%Title: pt2pt941.dvi
%%Pages: 62 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<0001C0000000000380000000000380000000000700000000000E0000000000
0E00000000001FFFFFFF80007FFFFFFF8000FFFFFFFF8001E0000000000780000000003F000000
0000FC00000000003F000000000007800000000001E00000000000FFFFFFFF80007FFFFFFF8000
1FFFFFFF80000E00000000000E000000000007000000000003800000000003800000000001C000
000029197D9630>40 D<000001C00000000000E00000000000E000000000007000000000003800
00000000380000FFFFFFFC0000FFFFFFFF0000FFFFFFFF800000000003C00000000000F0000000
00007E00000000001F80000000007E0000000000F00000000003C000FFFFFFFF8000FFFFFFFF00
00FFFFFFFC0000000000380000000000380000000000700000000000E00000000000E000000000
01C0000029197D9630>I E /Fl 15 118 df<387CFEFEFE7C3800000000387CFEFEFE7C380712
7D910D>58 D<FFFFF800FFFFFF000FC01FC00FC007E00FC003F00FC001F80FC001F80FC000FC0F
C000FC0FC000FC0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE
0FC000FC0FC000FC0FC000FC0FC001F80FC001F80FC003F00FC007E00FC01FC0FFFFFF00FFFFF8
001F1C7E9B25>68 D<FFFFFFFF07E007E007E007E007E007E007E007E007E007E007E007E007E0
07E007E007E007E007E007E007E007E007E007E007E0FFFFFFFF101C7F9B12>73
D<0FF8001FFE003E1F803E07803E07C01C07C00007C003FFC01FFFC03F87C07E07C0FC07C0FC07
C0FC07C0FC0FC07E1FC03FFBF80FE1F815127F9117>97 D<03FC000FFE001F1F003E1F007C1F00
7C0E00FC0000FC0000FC0000FC0000FC0000FC00007C00007E01803E03801F07000FFE0003F800
11127E9115>99 D<01FC000FFF001F0F803E07C07C03C07C03E0FC03E0FFFFE0FFFFE0FC0000FC
0000FC00007C00007E00603E00C01F81C00FFF0001FC0013127F9116>101
D<1E003F003F007F003F003F001E0000000000000000000000FF00FF001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F9D0E>105
D<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C0E>108 D<FF1FC0FE00FF7FE3FF00
1FE1F70F801F80FC07C01F80FC07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807
C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF
3FF825127F9128>I<FF1FC0FF7FE01FE1F01F80F81F80F81F00F81F00F81F00F81F00F81F00F8
1F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF18127F911B>I<01FC000FFF801F07
C03E03E07C01F07C01F0FC01F8FC01F8FC01F8FC01F8FC01F8FC01F87C01F07C01F03E03E01F07
C00FFF8001FC0015127F9118>I<FF1FC0FFFFE01FC1F81F00F81F00FC1F007C1F007E1F007E1F
007E1F007E1F007E1F007E1F007C1F00FC1F80F81FC1F01F7FE01F1F801F00001F00001F00001F
00001F00001F0000FFE000FFE000171A7F911B>I<1FD83FF87038E018E018F000FF807FE07FF0
1FF807FC007CC01CC01CE01CF038FFF0CFC00E127E9113>115 D<030003000300070007000F00
0F003F00FFFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F9807F003
E00E1A7F9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
00F81F00F81F00F81F00F81F01F80F03F80FFEFF03F8FF18127F911B>I
E /Fm 2 42 df<0000200000000000700000000000F00000000001E00000000001C00000000003
C0000000000780000000000FFFFFFFF0001FFFFFFFF8007FFFFFFFF800F80000000003E0000000
001FC000000000FF0000000000FE00000000001F800000000007E00000000001F0000000000078
00000000003FFFFFFFF8001FFFFFFFF8000FFFFFFFF00007800000000003C00000000001C00000
000001E00000000000F00000000000700000000000200000002D1D7D9934>40
D<0000002000000000007000000000007800000000003C00000000001C00000000001E00000000
000F00007FFFFFFF8000FFFFFFFFC000FFFFFFFFF00000000000F800000000003E00000000001F
C00000000007F80000000003F8000000000FC0000000003F00000000007C0000000000F000FFFF
FFFFE000FFFFFFFFC0007FFFFFFF80000000000F00000000001E00000000001C00000000003C00
000000007800000000007000000000002000002D1D7D9934>I E /Fn 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 /Fo 53 122 df<01F1C003F1C007F1C00701
C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFF1C0FFF1C0FFF1C00E01C00E01C00E01
C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0121D
809C16>13 D<00F0000001F8000003FC0000039C0000070E0000070E0000070E0000070E000007
0E0000071E0000071C0000073C00000778000003F0040003E0070007C00F000FC00E001FC00E00
3DE01E0078E01C0070F03C00E0703800E0387800E03CF000E01FE000E00FC00070078000781FE0
C03FFFFFC01FF8FFC007E03F001A1F7E9D1F>38 D<00E001C0038007000E000E001C001C003800
380038007000700070007000E000E000E000E000E000E000E000E000E000E000E000E000700070
00700070003800380038001C001C000E000E000700038001C000E00B2A7E9E10>40
D<E000700038001C000E000E000700070003800380038001C001C001C001C000E000E000E000E0
00E000E000E000E000E000E000E000E001C001C001C001C0038003800380070007000E000E001C
0038007000E0000B2A7E9E10>I<00060000000600000006000000060000000600000006000000
060000000600000006000000060000000600000006000000060000FFFFFFE0FFFFFFE000060000
000600000006000000060000000600000006000000060000000600000006000000060000000600
0000060000000600001B1C7E9720>43 D<7878787838307060E005097D830C>I<FFE0FFE0FFE0
0B03808A0E>I<F0F0F0F004047C830C>I<F0F0F0F000000000000000000000F0F0F0F004127C91
0C>58 D<7FFFFFC0FFFFFFE0000000000000000000000000000000000000000000000000000000
0000000000FFFFFFE07FFFFFC01B0C7E8F20>61 D<001C0000003E0000003E0000002E00000067
00000067000000E7800000C7800000C3800001C3C0000183C0000181C0000381E0000381E00007
00F0000700F0000600F0000E0078000FFFF8000FFFF8001FFFFC001C003C0018003C0038001E00
38001E0070001F0070000F0070000F00E0000780191D7F9C1C>65 D<FFF800FFFF00FFFF80F00F
C0F003E0F000F0F000F0F000F0F000F0F000F0F001E0F007C0FFFF80FFFE00FFFF80F01FC0F003
E0F000F0F00078F00078F00078F00078F00078F000F0F001F0F007E0FFFFC0FFFF80FFFC00151D
7C9C1C>I<003FC000FFF003FFF007C0700F80001E00003E00003C0000780000780000780000F0
0000F00000F00000F00000F00000F00000F00000F00000F000007800007800007800003C00003E
00001E00000F800807C07803FFF800FFF0003F80151F7D9D1B>I<FFFC00FFFF00FFFF80F00FE0
F003F0F000F0F00078F00078F0003CF0003CF0001CF0001EF0001EF0001EF0001EF0001EF0001E
F0001EF0001EF0003CF0003CF0007CF00078F000F0F001F0F007E0FFFFC0FFFF00FFFC00171D7C
9C1E>I<FFFFC0FFFFC0FFFFC0F00000F00000F00000F00000F00000F00000F00000F00000F000
00FFFF80FFFF80FFFF80F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000FFFFC0FFFFC0FFFFC0121D7C9C19>I<FFFF80FFFF80FFFF80F00000F00000F00000F0
0000F00000F00000F00000F00000F00000F00000FFFF00FFFF00FFFF00F00000F00000F00000F0
0000F00000F00000F00000F00000F00000F00000F00000F00000F00000111D7C9C18>I<003F80
01FFF003FFF807C0F80F00181E00003E00003C0000780000780000780000F00000F00000F00000
F00000F00000F00000F007F8F007F8F007F87800387800387800383C00383E00381E00380F0038
07C07803FFF801FFF0003F80151F7D9D1C>I<F000F0F000F0F000F0F000F0F000F0F000F0F000
F0F000F0F000F0F000F0F000F0F000F0FFFFF0FFFFF0FFFFF0F000F0F000F0F000F0F000F0F000
F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0141D7C9C1D>I<F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0041D7C9C0C>I<F000F000F000F0
00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
F000F000F000FFFEFFFEFFFE0F1D7C9C16>76 D<FC0007E0FC0007E0FC0007E0EE000DE0EE000D
E0EE000DE0E70019E0E70019E0E70019E0E78039E0E38031E0E3C071E0E3C071E0E1C061E0E1C0
61E0E1E0E1E0E1E0E1E0E0E0C1E0E0F1C1E0E07181E0E07181E0E07181E0E03B01E0E03B01E0E0
3B01E0E01E01E0E01E01E0E01E01E0E00001E01B1D7C9C24>I<FC0070FC0070FE0070EE0070EF
0070E70070E70070E78070E38070E3C070E3C070E1E070E1E070E0E070E0F070E07070E07870E0
7870E03C70E03C70E01C70E01E70E00E70E00E70E00F70E00770E007F0E003F0E003F0141D7C9C
1D>I<003F000001FFE00003FFF00007C0F8000F807C001E001E003E001F003C000F0078000780
7800078078000780F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003
C0F80007C078000780780007807C000F803C000F003E001F001F003E000F807C0007C0F80003FF
F00001FFE000003F00001A1F7E9D1F>I<FFFC00FFFF00FFFF80F007C0F003E0F001E0F000F0F0
00F0F000F0F000F0F000F0F001E0F003E0F007C0FFFF80FFFF00FFFC00F00000F00000F00000F0
0000F00000F00000F00000F00000F00000F00000F00000F00000141D7C9C1B>I<FFF800FFFF00
FFFF80F007C0F001E0F000E0F000F0F000F0F000F0F000F0F000E0F001E0F007C0FFFF80FFFF00
FFF800F03C00F01C00F01E00F00F00F00F00F00780F00780F003C0F003C0F001E0F000F0F000F0
F00078151D7C9C1B>82 D<03F8000FFE001FFF003E0F00780300780000F00000F00000F00000F0
0000F800007C00007F00003FE0001FFC0007FE0001FF00001F800007800007C00003C00003C000
03C00003C00003C0C00780E00780FC1F007FFE001FFC0007F000121F7E9D17>I<FFFFFF80FFFF
FF80FFFFFF80001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E000000
1E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000
001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000191D7F9C1C>I<
F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070F00070
F00070F00070F00070F00070F00070F00070F00070F00070F00070F000F07800E07801E03C03C0
1F07800FFF8007FE0001F800141E7C9C1D>I<F0000380F0000380780007007800070078000700
3C000E003C000E003E000E001E001C001E001C000F0038000F0038000F00380007807000078070
0003C0600003C0E00003C0E00001E0C00001E1C00001E1C00000F1800000F38000007300000073
0000007B0000003E0000003E0000001C0000191D7F9C1C>I<F000F00070F000F80070F000F800
707800B8006078019C00E078019C00E078019C00E03C039C01C03C031E01C03C030E01C01E030E
01801E070F03801E070F03801E060F03800F060703000F0E0787000F0C078700070C038600070C
038600079C038E00079803CE00039801CC00039801CC00039801CC0001D001C80001D000D80001
F000F80001E000F80000E0007000241D7F9C27>I<F80001E07C0001C03E0003801E0007801F00
07000F800E0007801E0007C01C0003E03C0001E0380001F0700000F0F0000078E000007DC00000
3FC000001F8000001F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
000F0000000F0000000F0000000F0000000F00001B1D809C1C>89 D<0FC03FF07FF87038401C00
1C001C00FC0FFC3FFC781CE01CE01CE01CF07C7FFC7FDC3F1C0E127E9114>97
D<E000E000E000E000E000E000E000E000E000E000E000E3E0EFF0FFF8F87CF01CE01EE00EE00E
E00EE00EE00EE00EE01CF01CF87CFFF8EFF0E3C00F1D7D9C15>I<07E00FF81FFC3C1C70047000
E000E000E000E000E000E000700070043C1C1FFC0FF807E00E127E9112>I<000E000E000E000E
000E000E000E000E000E000E000E0F8E1FEE3FFE7C3E700E700EE00EE00EE00EE00EE00EE00EF0
0E701E7C3E3FFE1FEE0F8E0F1D7E9C15>I<07C01FE03FF078787018601CFFFCFFFCFFFCE000E0
00E000700070043C1C3FFC1FF807E00E127E9112>I<00FC01FC03FC07000E000E000E000E000E
000E000E00FFE0FFE0FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E1D809C0D>I<03C3C00FFFC01FFFC01C3800381C00381C00381C00381C00381C001C3800
1FF8001FF0003BC0003800003800001FFC001FFF003FFF80700780E001C0E001C0E001C0F003C0
7C0F803FFF001FFE0007F800121B7F9115>I<E000E000E000E000E000E000E000E000E000E000
E000E3E0EFF0FFF8F83CF01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C0E
1D7D9C15>I<F0F0F0F000000000000000707070707070707070707070707070707070041D7E9C
0A>I<E000E000E000E000E000E000E000E000E000E000E000E03CE078E0F0E1E0E3C0E780EF00
FF00FF80FB80F9C0F1E0E0E0E0F0E078E038E03CE01E0F1D7D9C14>107
D<E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0031D7D9C0A>I<E3F0
3F00EFF8FF80FFFDFFC0F81F81E0F00F00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E0
0E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E01B127D9124>I<E3
E0EFF0FFF8F83CF01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C0E127D91
15>I<03F0000FFC001FFE003C0F00780780700380E001C0E001C0E001C0E001C0E001C0F003C0
7003807807803C0F001FFE000FFC0003F00012127F9115>I<E3E0EFF0FFF8F87CF01CE01EE00E
E00EE00EE00EE00EE00EE01CF03CF87CFFF8EFF0E3C0E000E000E000E000E000E000E000E0000F
1A7D9115>I<E380E780EF80FC00F800F000F000E000E000E000E000E000E000E000E000E000E0
00E00009127D910E>114 D<1FC03FF07FF0F030E000E000F0007F003FC01FE000F00038003880
38F078FFF07FE01FC00D127F9110>I<1C001C001C001C001C001C00FFE0FFE0FFE01C001C001C
001C001C001C001C001C001C001C001C001C201FF00FF007C00C187F970F>I<E01CE01CE01CE0
1CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE07CFFFC7FDC3F1C0E127D9115>I<E007E0
077006700E700E381C381C381C1C381C381C380E700E700660076007E003C003C010127F9113>
I<7003807807003C0E001C1C000E1C0007380003F00001E00001C00001E00003F0000738000E18
000E1C001C0E00380700700380F003C01212809113>120 D<E007E007700E700E780E381C381C
1C181C380C380E300E7006700760036003C001C001C001800180030003000700FE00FC00F80010
1A7F9113>I E /Fp 26 122 df<7FF0FFE0FFE00C037D8A10>45 D<70F8F8F0E005057B840E>I<
000007000000070000000F0000000F0000001F0000003F0000003F0000006F0000006F000000CF
000000CF0000018F0000038F0000030F0000060F0000060F00000C0F80000C0780001807800018
0780003FFF80007FFF800060078000C0078000C00780018007800180078003000780070007800F
0007807FC07FF8FFC07FF81D207E9F22>65 D<01FFFFFE01FFFFFC001E003C001E001C001E001C
003C000C003C000C003C000C003C001800780C1800780C1800780C0000781C0000F0380000FFF8
0000FFF80000F0380001E0300001E0300001E0303001E0306003C0006003C0006003C000C003C0
01C007800180078003800780070007801F00FFFFFF00FFFFFE001F1F7D9E1F>69
D<01FFFF0001FFFFC0001E01E0001E00F0001E0078003C0078003C0078003C0078003C00780078
00F0007800F0007801E0007803C000F00F0000FFFE0000FFF80000F03C0001E01E0001E00E0001
E00F0001E00F0003C01E0003C01E0003C01E0003C01E0007803C0007803C1807803C1807803C30
FFF81E30FFF00FE0000007C01D207D9E21>82 D<00F18003FDC0078F800E07801C07803C07803C
0700780700780700780700F00E00F00E00F00E00F00E30F01C60F03C60707C6078FCC03FCFC00F
078014147C9317>97 D<07803F803F000700070007000E000E000E000E001C001C001CF01FFC3F
1E3E0E3C0F380F700F700F700F700FE01EE01EE01EE03CE03CE038607071E03FC01F0010207B9F
15>I<007E0001FF000383800F07801E07801C07003C0200780000780000780000F00000F00000
F00000F00000F00000700200700700381E001FF80007E00011147C9315>I<0000780003F80003
F00000700000700000700000E00000E00000E00000E00001C00001C000F1C003FDC0078F800E07
801C07803C07803C0700780700780700780700F00E00F00E00F00E00F00E30F01C60F03C60707C
6078FCC03FCFC00F078015207C9F17>I<007C0001FF000783000F01801E01803C01803C030078
0E007FFC007FE000F00000F00000F00000F000007000007002007807003C1E001FF80007E00011
147C9315>I<0000F80001FC0003BC00033C000718000700000700000E00000E00000E00000E00
000E0001FFE001FFE0001C00001C00001C00003800003800003800003800003800007000007000
00700000700000700000700000E00000E00000E00000E00001C00001C00001C000018000338000
7B8000F300007E00003C00001629829F0E>I<003C6000FF7001E3E00381E00701E00F01E00F01
C01E01C01E01C01E01C03C03803C03803C03803C03803C07003C0F001C1F001E3F000FFE0003CE
00000E00000E00001C00001C00301C00783800F0F0007FE0003F8000141D7E9315>I<006000F0
00F000E000000000000000000000000000000F001F80318031C063806380C3800700070007000E
000E000E001C301C601C6038C018C01F800F000C1F7D9E0E>105 D<01E0000FE0000FC00001C0
0001C00001C0000380000380000380000380000700000700000703C00707E00E0C600E10E00E21
E00E61E01CC1C01F80001F00001FC00039E0003870003870003838607070C07070C07070C07031
80E03F00601E0013207D9F15>107 D<03C01FC01F8003800380038007000700070007000E000E
000E000E001C001C001C001C0038003800380038007000700070007180E300E300E300E6007E00
3C000A207C9F0C>I<1E07C0F8003F1FE1FC0033B8730E0063E076070063C03C07006380380700
C780780E000700700E000700700E000700700E000E00E01C000E00E01C000E00E01C000E00E038
601C01C038C01C01C038C01C01C071801C01C031803803803F001801801E0023147D9325>I<1E
07C03F1FE033B87063E07063C038638038C780700700700700700700700E00E00E00E00E00E00E
01C31C01C61C01C61C038C1C018C3801F81800F018147D931A>I<007C0001FF000383800F01C0
1E01C01C01E03C01E07801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00701E00
3838001FF00007C00013147C9317>I<03C1E007E7F8067E3C0C7C1C0C781E0C701E18E01E00E0
1E00E01E00E01E01C03C01C03C01C03C01C07803C07803C07003C0E003E3C0077F80071E000700
000700000E00000E00000E00000E00001C0000FFC000FFC000171D809317>I<1E0F003F3F8033
F1C063C1C063C3C06383C0C783800700000700000700000E00000E00000E00000E00001C00001C
00001C00001C000038000018000012147D9313>114 D<00FC03FE07070E0F0E0F0E0E1E000F80
0FF007F803FC003E001E701EF01CF01CE03860703FE01F8010147D9313>I<018001C003800380
0380038007000700FFF0FFF00E000E000E000E001C001C001C001C003800380038003830706070
6070C071803F001E000C1C7C9B0F>I<0F00601F80703180E031C0E06380E06380E0C381C00701
C00701C00701C00E03800E03800E03800E038C0E07180E07180E0F180E1F3007F3F003E1E01614
7D9318>I<0F01C01F83C03183E031C1E06380E06380E0C380C00700C00700C00700C00E01800E
01800E01800E03000E03000E06000E06000F0C0007F80001E00013147D9315>I<0787800FCFC0
18F8E03070E06071E06071E0C0E1C000E00000E00000E00001C00001C00001C00071C060F380C0
F380C0E38180C7C3007CFE00387C0013147D9315>120 D<0F00601F80703180E031C0E06380E0
6380E0C381C00701C00701C00701C00E03800E03800E03800E03800E07000E07000E0F000E1F00
07FE0003EE00000E00000E00001C00781C0078380070700060E0003FC0001F0000141D7D9316>
I E /Fq 45 122 df<FFE0FFE0FFE00B037F8C10>45 D<F0F0F0F004047B830E>I<00C001C007
C0FFC0FFC0FBC003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C0
03C003C003C003C003C003C003C003C003C0FFFFFFFFFFFF10227CA118>49
D<03F0000FFC001FFE003C1F003807807007C07003C0F003E0E001E06001E02001E00001E00001
E00001E00003C00003C0000780000780000F00001E00003C0000780000F00001E00001C0000380
000700000E00001C0000380000700000FFFFE0FFFFE0FFFFE013227EA118>I<01F00007FC001F
FF003E0F003807807003C02003C02003C00003C00003C00003C0000780000780000F00001E0003
FC0003F80003FE00000F000007800003C00003C00001E00001E00001E00001E00001E08001E0C0
03C0E003C07007803C0F801FFF000FFC0003F00013237EA118>I<001F00001F00002F00002F00
006F0000EF0000CF0001CF0001CF00038F00038F00078F00070F000F0F000E0F001E0F003C0F00
3C0F00780F00780F00F00F00FFFFF8FFFFF8FFFFF8000F00000F00000F00000F00000F00000F00
000F00000F00000F0015217FA018>I<3FFF803FFF803FFF803C00003C00003C00003C00003C00
003C00003C00003C00003C00003CF8003FFE003FFF003F0F803E07803C03C03803C00001E00001
E00001E00001E00001E00001E00001E04003C04003C0E003C07007807C1F003FFE000FFC0003F0
0013227EA018>I<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 /Fr 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 /Fs 69 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<00C00180030006000E000C001C0018003800300030007000700060006000E000E000E000E000
E000E000E000E000E000E000E000E000600060007000700030003000380018001C000C000E0006
000300018000C00A2A7D9E10>40 D<C0006000300018001C000C000E0006000700030003000380
03800180018001C001C001C001C001C001C001C001C001C001C001C001C0018001800380038003
000300070006000E000C001C00180030006000C0000A2A7E9E10>I<018001C0018001806186F9
9F7DBE1FF807E007E01FF87DBEF99F61860180018001C0018010127E9E15>I<70F0F8F8781818
183030706040050D7D840C>44 D<FFE0FFE0FFE00B0380890E>I<70F8F8F87005057D840C>I<00
030003000700060006000E000C001C0018001800380030003000700060006000E000C000C001C0
01800380030003000700060006000E000C000C001C001800180038003000700060006000E000C0
00C00010297E9E15>I<030007003F00FF00C70007000700070007000700070007000700070007
0007000700070007000700070007000700070007000700FFF8FFF80D1C7C9B15>49
D<07C01FF03878603C601EF01EF80FF80FF80F700F000F000E001E001C003C0078007000E001C0
038007000E030C03180330067FFEFFFEFFFE101C7E9B15>I<07E01FF03838301C781E781E781E
381E001E003C0038007007E007E00038001C001E000E000F000F700FF80FF80FF80EF01E601C38
381FF007C0101D7E9B15>I<300C3FFC3FF83FE030003000300030003000300033E037F03C3838
1C301E300E000F000F000F000F700FF00FF00FE00E601E601C38781FF007C0101D7E9B15>53
D<70F8F8F870000000000000000070F8F8F87005127D910C>58 D<70F8F8F87000000000000000
0070F0F8F8781818183030706040051A7D910C>I<7FFFFFC0FFFFFFE000000000000000000000
00000000000000000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>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<FFF07FE0FFF07FE00F003E000F0018000F0030000F0060000F00C0000F
01C0000F0380000F0700000F0E00000F1E00000F1F00000F3F00000F6780000FC780000F83C000
0F01E0000F01E0000F00F0000F00F8000F0078000F003C000F003C000F001E000F001F00FFF07F
F0FFF07FF01C1C7E9B20>75 D<FFF800FFF8000F00000F00000F00000F00000F00000F00000F00
000F00000F00000F00000F00000F00000F00000F00000F00000F00180F00180F00180F00180F00
380F00300F00700F00F00F01F0FFFFF0FFFFF0151C7E9B1A>I<FF8000FF80FFC001FF800FC001
F8000FC001F8000DE00378000DE00378000DE00378000CF00678000CF00678000CF00678000C78
0C78000C780C78000C780C78000C3C1878000C3C1878000C3C1878000C1E3078000C1E3078000C
1E3078000C0F6078000C0F6078000C0F6078000C07C078000C07C078000C07C078001E03807800
FFC387FF80FFC387FF80211C7E9B26>I<FF00FFC0FF80FFC00F801E000FC00C000FC00C000DE0
0C000CF00C000CF00C000C780C000C780C000C3C0C000C1E0C000C1E0C000C0F0C000C0F0C000C
078C000C07CC000C03CC000C01EC000C01EC000C00FC000C00FC000C007C000C003C000C003C00
1E001C00FFC01C00FFC00C001A1C7E9B1F>I<003F800000FFE00003E0F80007803C000E000E00
1E000F003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001
E0F00001E0F00001E0F00001E0F00001E0780003C0780003C0780003C03C0007803C0007801E00
0F000F001E0007803C0003E0F80000FFE000003F80001B1E7E9C20>I<FFFF80FFFFE00F00F00F
00380F003C0F001E0F001E0F001E0F001E0F001E0F001E0F003C0F00380F00F00FFFE00FFF800F
00000F00000F00000F00000F00000F00000F00000F00000F00000F0000FFF000FFF000171C7E9B
1C>I<FFFF0000FFFFE0000F00F0000F0038000F003C000F001E000F001E000F001E000F001E00
0F001E000F003C000F0038000F00F0000FFFE0000FFFC0000F01E0000F00F0000F0078000F0078
000F0078000F0078000F0078000F0078000F0078000F0078300F003830FFF03C60FFF01FE00000
07C01C1D7E9B1F>82 D<07E0801FF9803C1F80700780700380E00380E00180E00180E00180F000
00F000007C00007FC0003FF8001FFE0007FF0000FF80000F800003C00003C00001C0C001C0C001
C0C001C0E00180E00380F00300FC0E00CFFC0083F800121E7E9C17>I<7FFFFFC07FFFFFC0780F
03C0700F01C0600F00C0E00F00E0C00F0060C00F0060C00F0060C00F0060000F0000000F000000
0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
000F0000000F0000000F0000000F000003FFFC0003FFFC001B1C7F9B1E>I<FFF0FFC0FFF0FFC0
0F001E000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C
000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F000C000F00
0C0007001800078018000380300001C0300000E0E000007FC000001F00001A1D7E9B1F>I<FFE0
FFE1FFFFE0FFE1FF1F001E007C0F001E00300F003F00300F003F00300F803F0070078067806007
80678060078067806003C0E780C003C0C3C0C003C0C3C0C001E0C3C18001E181E18001E181E180
01E181E18000F381F30000F300F30000F300F300007B00F600007E007E00007E007E00007E007E
00003C003C00003C003C00003C003C00001C0038000018001800281D7F9B2B>87
D<FFF00FFCFFF00FFC078003C007C0038003C0030003E0060001F0060000F00C0000F81C000078
1800007C3800003C3000001E6000001F6000000FC000000FC00000078000000780000007800000
078000000780000007800000078000000780000007800000078000007FF800007FF8001E1C809B
1F>89 D<08081818303060606060C0C0C0C0C0C0F8F8FCFCFCFC7C7C38380E0D7B9C15>92
D<0FE0001FF8003C3C003C1E00180E00000E00001E0007FE001FFE003E0E00780E00F00E00F00E
60F00E60F01E60783E603FFFC01F878013127F9115>97 D<FC0000FC00001C00001C00001C0000
1C00001C00001C00001C00001C00001C00001C7E001DFF001F87801E01C01C01E01C00E01C00F0
1C00F01C00F01C00F01C00F01C00F01C00E01C01E01E01C01F078019FF00187C00141D7F9C17>
I<03F00FF81E3C383C78187000F000F000F000F000F000F000780078063C061E0C0FF803E00F12
7F9112>I<001F80001F8000038000038000038000038000038000038000038000038000038003
E3800FFB801E0F80380780780380700380F00380F00380F00380F00380F00380F0038070038078
03803807801E1F800FFBF007E3F0141D7F9C17>I<03E00FF01C38381C781E700EFFFEFFFEF000
F000F000F000700078063C061E0C0FF803E00F127F9112>I<007801FC039E071E0E0C0E000E00
0E000E000E000E00FFE0FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E
007FE07FE00F1D809C0D>I<00038007E7C00FFDC03C3DC0381C00781E00781E00781E00781E00
381C003C3C003FF00037E0007000007000003000003FFC001FFF003FFF80700780E001C0E001C0
E001C0E001C07003803C0F001FFE0007F800121C7F9215>I<FC0000FC00001C00001C00001C00
001C00001C00001C00001C00001C00001C00001C7C001DFF001F07001E03801E03801C03801C03
801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0FF9FF0141D7F9C17
>I<18003C007C003C001800000000000000000000000000FC00FC001C001C001C001C001C001C
001C001C001C001C001C001C001C001C00FF80FF80091D7F9C0C>I<01C003E003E003E001C000
00000000000000000000000FE00FE000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E060E0F1C0F1C07F803E000B25839C0D>I<FC0000FC00001C00
001C00001C00001C00001C00001C00001C00001C00001C00001C7FC01C7FC01C3E001C18001C30
001C60001CC0001DE0001FE0001E70001C78001C38001C3C001C1C001C0E001C0F00FF9FE0FF9F
E0131D7F9C16>I<FC00FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C001C001C00FF80FF80091D7F9C0C>I<FC7E07E000
FDFF9FF8001F83B838001E01E01C001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C
001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8
FF80FF8FF8FF8021127F9124>I<FC7C00FDFF001F07001E03801E03801C03801C03801C03801C
03801C03801C03801C03801C03801C03801C03801C0380FF9FF0FF9FF014127F9117>I<03F000
0FFC001E1E00380700780780700380F003C0F003C0F003C0F003C0F003C0F003C0700380780780
3807001E1E000FFC0003F00012127F9115>I<FC7E00FDFF001F87801E03C01C01E01C01E01C00
F01C00F01C00F01C00F01C00F01C00F01C01E01C01E01E03C01F07801DFF001C7C001C00001C00
001C00001C00001C00001C0000FF8000FF8000141A7F9117>I<03E1800FF9801E1F803C078078
0780780380F00380F00380F00380F00380F00380F003807803807807803C07801E1F800FFB8007
E380000380000380000380000380000380000380001FF0001FF0141A7F9116>I<FDE0FFF01F78
1E781E301C001C001C001C001C001C001C001C001C001C001C00FFC0FFC00D127F9110>I<1F90
3FF07070E030E030E030F8007F803FE00FF000F8C038C038E038E038F070DFE08FC00D127F9110
>I<0C000C000C000C000C001C001C003C00FFE0FFE01C001C001C001C001C001C001C001C001C
301C301C301C301C301E600FC007800C1A7F9910>I<FC1F80FC1F801C03801C03801C03801C03
801C03801C03801C03801C03801C03801C03801C03801C03801C07800C0F800FFBF003E3F01412
7F9117>I<FF0FE0FF0FE01C07801C03000E06000E06000E0600070C00070C00071C0003980003
980003F80001F00001F00000E00000E00000E00013127F9116>I<FF3FCFE0FF3FCFE01C0F0780
1C0F03001C1F03000E1B06000E1B86000E1B86000E318E000731CC000731CC000760CC0003E0F8
0003E0F80003E0F80001C0700001C0700001C070001B127F911E>I<7F8FF07F8FF00F07800706
00038E0001DC0001D80000F00000700000780000F80001DC00038E00030E000607000F0380FF8F
F8FF8FF81512809116>I<FF0FE0FF0FE01C07801C03000E06000E06000E0600070C00070C0007
1C0003980003980003F80001F00001F00000E00000E00000E00000C00000C00000C000F18000F1
8000C700007E00003C0000131A7F9116>I<7FFC7FFC7838707060F060E061C063C00380070C0F
0C0E0C1C1C3C1838187078FFF8FFF80E127F9112>I<FFFFF0FFFFF01402808B15>I
E /Ft 71 123 df<0000F000F8F001F8F003F8F00780000700000F00000F00000F00000F00000F
00000F00000F0000FFF8F0FFF8F0FFF8F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F
00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F0142180A018>12
D<00F8F001F8F003F8F00780F00700F00F00F00F00F00F00F00F00F00F00F00F00F00F00F0FFF8
F0FFF8F0FFF8F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00F00
F00F00F00F00F00F00F00F00F00F00F00F00F01420809F18>I<007000E001C00380078007000E
001E001E003C003C003C0078007800780078007000F000F000F000F000F000F000F000F000F000
F000F000F000700078007800780078003C003C003C001E001E000E0007000780038001C000E000
700C2E7EA112>40 D<E000700038001C001E000E0007000780078003C003C003C001E001E001E0
01E000E000F000F000F000F000F000F000F000F000F000F000F000F000E001E001E001E001E003
C003C003C00780078007000E001E001C0038007000E0000C2E7DA112>I<000600000006000000
060000000600000006000000060000000600000006000000060000000600000006000000060000
000600000006000000060000FFFFFFF0FFFFFFF000060000000600000006000000060000000600
000006000000060000000600000006000000060000000600000006000000060000000600000006
00001C207D9A23>43 D<787878781830306060E0050A7D830D>I<FFC0FFC0FFC00A037F8B0F>I<
F0F0F0F004047C830D>I<03F00007F8001FFE001E1E003C0F00380700780780780780700380F0
03C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F0
03C07807807807807807803807003C0F001E1E001FFE000FFC0003F00012207E9E17>48
D<00C001C00FC0FFC0FFC0F3C003C003C003C003C003C003C003C003C003C003C003C003C003C0
03C003C003C003C003C003C003C003C003C0FFFEFFFEFFFE0F1F7C9E17>I<07F0000FFC001FFE
00383F00700F00600780E00780E003C04003C04003C00003C00003C00003C0000780000780000F
00000E00001C00003C0000780000E00001C0000380000700000E00001C0000380000700000FFFF
C0FFFFC0FFFFC0121F7E9E17>I<03F0000FFC001FFE003C1F00780F0030078020078000078000
0780000780000F00000F00003E0003FC0003F80003FC00001E00000F000007800003800003C000
03C00003C00003C08003C0C003C0C00780700F807C1F003FFE000FFC0003F00012207E9E17>I<
003E00003E00005E00005E0000DE0001DE00019E00039E00039E00079E00071E000F1E000E1E00
1E1E003C1E003C1E00781E00781E00F01E00FFFFF0FFFFF0FFFFF0001E00001E00001E00001E00
001E00001E00001E00001E00141E7F9D17>I<7FFF007FFF007FFF007800007800007800007800
0078000078000078000079F0007FFC007FFE007F1F007C07007C07807807800003C00003C00003
C00003C00003C00003C00003C0400780600780F00F007C1E003FFC001FF80007E000121F7E9D17
>I<007C0001FE0003FE000782000F00001E00003C00003C000078000078000078F800F3FC00F7
FE00FE1F00FC0F80F80780F80780F003C0F003C0F003C0F003C0F003C07003C07803C07803C078
07803807803C0F001E1E000FFE0007F80001F00012207E9E17>I<03F0000FFC001FFE003E1F00
3C0F007807807807807807807807807807807807803C0F001E1E000FFC0007F8000FFC001F3E00
3C0F00780780780780F003C0F003C0F003C0F003C0F003C0F003C07807807C0F803E1F001FFE00
0FFC0003F00012207E9E17>56 D<03F00007F8000FFC001E1E003C0F00780700780780F00780F0
0380F003C0F003C0F003C0F003C0F003C0F003C07807C07807C07C0FC03E1FC01FFBC00FF3C007
C780000780000780000700000F00001E00201E00307C007FF8003FF0000FC00012207E9E17>I<
F0F0F0F0000000000000000000000000F0F0F0F004147C930D>I<FFFFFFF0FFFFFFF000000000
00000000000000000000000000000000000000000000000000000000FFFFFFF0FFFFFFF01C0C7D
9023>61 D<001F0000001F0000003F8000003B8000003B8000007BC0000073C0000071C00000F1
E00000E1E00000E0E00001E0F00001E0F00001C0F00003C0780003C078000380780007803C0007
803C0007003C000FFFFE000FFFFE000FFFFE001E000F001E000F003C000F803C0007803C000780
780007C0780003C0780003C0F00003E01B207F9F1E>65 D<FFF800FFFF00FFFF80F00FC0F003E0
F001E0F000F0F000F0F000F0F000F0F000F0F001E0F003C0F01F80FFFF00FFFF00FFFF80F007E0
F001E0F000F0F00078F00078F00078F00078F00078F00078F000F0F001F0F007E0FFFFC0FFFF80
FFFC0015207B9F1E>I<001FC000FFF801FFFC03E03C07800C0F00001E00003E00003C00007C00
00780000780000780000F00000F00000F00000F00000F00000F00000F00000F000007800007800
007800007C00003C00003E00001E00000F000207800E03E03E01FFFC00FFF0001FC017227DA01D
>I<FFFC00FFFF80FFFFC0F007E0F001F0F000F8F00078F0003CF0003CF0001EF0001EF0000EF0
000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0001EF0001EF0001EF0003CF0
007CF000F8F001F0F007E0FFFFC0FFFF80FFFC0018207B9F21>I<FFFFC0FFFFC0FFFFC0F00000
F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000FFFF80FFFF80FFFF80
F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000FFFFE0
FFFFE0FFFFE013207B9F1B>I<FFFFC0FFFFC0FFFFC0F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000FFFF00FFFF00FFFF00F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000012207B9F1A>I<00
1FE000FFF801FFFE03E03E07800E0F00001E00003E00003C00007C0000780000780000780000F0
0000F00000F00000F00000F00000F00000F003FEF003FE7803FE78001E78001E7C001E3C001E3E
001E1E001E0F001E07801E03E03E01FFFE00FFF8001FC017227DA01E>I<F00078F00078F00078
F00078F00078F00078F00078F00078F00078F00078F00078F00078F00078F00078FFFFF8FFFFF8
FFFFF8F00078F00078F00078F00078F00078F00078F00078F00078F00078F00078F00078F00078
F00078F00078F0007815207B9F20>I<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F004207C9F0D>I<F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
00F00000F00000F00000F00000F00000F00000F00000F00000FFFF80FFFF80FFFF8011207B9F19
>76 D<F80001F8FC0003F8FC0003F8F4000378F6000778F6000778F6000778F7000F78F3000E78
F3000E78F3801E78F3801E78F1801C78F1C03C78F1C03C78F1C03C78F0C03878F0E07878F0E078
78F0607078F070F078F070F078F030E078F039E078F039E078F019C078F019C078F019C078F00F
8078F00F8078F00F8078F00000781D207B9F28>I<FC0078FE0078FE0078F60078F70078F70078
F38078F38078F38078F3C078F1C078F1E078F1E078F0E078F0F078F07078F07078F07878F03878
F03C78F03C78F01C78F01E78F00E78F00E78F00E78F00778F00778F00378F003F8F003F8F001F8
15207B9F20>I<003F000000FFC00003FFF00007E1F8000F807C001F003E001E001E003C000F00
3C000F00780007807800078078000780F00003C0F00003C0F00003C0F00003C0F00003C0F00003
C0F00003C0F00003C0F00003C0F80007C07800078078000780780007803C000F003C000F001E00
1E001F003E000F807C0007E1F80003FFF00000FFC000003F00001A227DA021>I<FFF800FFFF00
FFFF80F00FC0F003E0F001E0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F001E0F003E0
F00FC0FFFF80FFFF00FFF800F00000F00000F00000F00000F00000F00000F00000F00000F00000
F00000F00000F00000F0000014207B9F1D>I<003F000000FFC00003FFF00007E1F8000F807C00
1F003E001E001E003C000F003C000F00780007807800078078000780F00003C0F00003C0F00003
C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C07800078078000780781E
07803C0F0F003C0F8F001E079E001F03FE000F83FC0007E1F80003FFF00000FFF800003F780000
007C0000003E0000001E0000001F0000000F801A277DA021>I<FFF800FFFF00FFFF80F007C0F0
03E0F001E0F000F0F000F0F000F0F000F0F000F0F001E0F003E0F007C0FFFF80FFFF00FFF800F0
3C00F01E00F01E00F00F00F00F00F00780F00780F003C0F001C0F001E0F000F0F000F0F00078F0
0078F0003C16207B9F1D>I<01FC0007FF800FFFC01F03C03C00C03C0000780000780000780000
7800007800007C00003C00003F00001FE0000FFC0007FE0001FF00003F800007C00003C00003E0
0001E00001E00001E00001E00001E00001C0C003C0F007C0FC0F807FFF001FFE0003F80013227E
A019>I<FFFFFFC0FFFFFFC0FFFFFFC0001E0000001E0000001E0000001E0000001E0000001E00
00001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E
0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E000000
1E0000001E0000001E0000001E00001A207E9F1F>I<F000F0F000F0F000F0F000F0F000F0F000
F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000F0F000
F0F000F0F000F0F000F0F000F0F000F0F000F07801E07801E03C03C03C03C01F0F800FFF0007FE
0001F80014217B9F1F>I<F00001E0F00001E0780003C0780003C0780003C03C0007803C000780
3C0007801E000F001E000F001F000F000F001E000F001E0007801C0007803C0007803C0003C038
0003C0780003C0780001E0700001E0F00001E0F00000F0E00000F1E00000F1E0000071C000007B
C000003B8000003B8000003F8000001F0000001F00001B207F9F1E>I<F0007C000FF0007E000F
F0007E000F78006E000E7800EE001E7800E7001E7800E7001E3C00E7003C3C01E7803C3C01C780
3C3C01C3803C1E01C380781E03C3C0781E0383C0780E0381C0700F0381C0F00F0781E0F00F0701
E0F0070700E0E0078700E1E0078F00F1E0078E00F1E0038E0071C0038E0071C003CE0073C001DC
007B8001DC003B8001DC003B8001DC003B8000F8003F0000F8001F0000F8001F0028207F9F2B>
I<780007807C000F003E001F001E001E000F003C000F807C000780780003C0F00003E1F00001F1
E00000F3C000007FC000007F8000003F0000001F0000001E0000003F0000007F8000007FC00000
F3C00001F1E00001E0F00003C0F80007C0780007803C000F003E001F001E001E000F003C000F80
7C0007C0780003C0F00003E01B207F9F1E>I<F80000F87C0001F03C0001E03E0003E01F0003C0
0F0007800F800F8007C00F0003C01F0003E01E0001F03C0000F07C00007878000078F000003CF0
00001DE000001FE000000FC0000007800000078000000780000007800000078000000780000007
8000000780000007800000078000000780000007800000078000000780001D20809F1E>I<FFFF
F8FFFFF8FFFFF80000F00001F00001E00003C00007C0000780000F80000F00001E00003E00003C
00007C0000780000F00001F00001E00003E00003C0000780000F80000F00001F00001E00003C00
007C0000780000FFFFFCFFFFFCFFFFFC16207D9F1C>I<FFFFFFF0F0F0F0F0F0F0F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFF082D7DA10D>I<FFFFFF
0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F
FFFFFF082D7FA10D>93 D<07E03FF87FFC701E401F000F000F000F003F07FF1FFF7E0FF80FF00F
F00FF00FF83F7FFF3FEF1F8F10147E9316>97 D<F00000F00000F00000F00000F00000F00000F0
0000F00000F00000F00000F00000F00000F1F000F7FC00FFFE00FC3E00F80F00F00F00F00780F0
0780F00780F00780F00780F00780F00780F00F00F00F00F81F00FC3E00FFFC00F7F800F1E00011
207D9F17>I<03F00FFC1FFE3E0E3C0278007800F000F000F000F000F000F000780078003C013E
0F1FFF0FFE03F010147E9314>I<00078000078000078000078000078000078000078000078000
078000078000078000078007C7800FF7801FFF803E1F807C0780780780F80780F00780F00780F0
0780F00780F00780F00780F00780780780780F803E1F801FFF800FF78007C78011207E9F17>I<
03F0000FFC001FFE003E1F003C0700780700700380FFFF80FFFF80FFFF80F00000F00000F00000
7000007800003C01003E07001FFF0007FE0001F80011147F9314>I<007E01FE03FE078007000F
000F000F000F000F000F000F00FFF0FFF0FFF00F000F000F000F000F000F000F000F000F000F00
0F000F000F000F000F000F000F000F20809F0E>I<03E0F00FFFF01FFFF03E3E003C1E00780F00
780F00780F00780F00780F003C1E003E3E001FFC003FF80033E0003000003800003FFE003FFF80
1FFFC03FFFE07803F0F000F0F000F0F000F0F801F07E07E03FFFC00FFF0003FC00141E7F9317>
I<F000F000F000F000F000F000F000F000F000F000F000F000F1F8F3FCF7FEFC1FF80FF80FF00F
F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F10207D9F17>I<F0F0F0F00000
000000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004207D9F0B>I<01E001E001E0
01E00000000000000000000000000000000001E001E001E001E001E001E001E001E001E001E001
E001E001E001E001E001E001E001E001E001E001E001E001E001E001E0C3C0FFC0FF803F000B29
839F0C>I<F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0
0000F01F00F01E00F03C00F07800F0F000F1E000F3C000F78000FFC000FFC000FFE000F9F000F8
F000F0F800F07C00F07C00F03E00F01E00F01F00F00F8011207D9F16>I<F0F0F0F0F0F0F0F0F0
F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004207D9F0B>I<F0FC07E0F3FE1FF0F7
FF3FF8FE0FF07CF807C03CF807C03CF007803CF007803CF007803CF007803CF007803CF007803C
F007803CF007803CF007803CF007803CF007803CF007803CF007803CF007803C1E147D9327>I<
F1F8F3FCF7FEFC1FF80FF80FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0
0F10147D9317>I<01F80007FE001FFF803F0FC03C03C07801E07801E0F000F0F000F0F000F0F0
00F0F000F0F000F07801E07801E03C03C03F0FC01FFF8007FE0001F80014147F9317>I<F1F000
F7FC00FFFE00FC3E00F81F00F00F00F00F80F00780F00780F00780F00780F00780F00780F00F00
F00F00F81F00FC3E00FFFC00F7F800F1E000F00000F00000F00000F00000F00000F00000F00000
F00000F00000111D7D9317>I<03C7800FF7801FFF803E1F807C0F80780780780780F00780F007
80F00780F00780F00780F00780F807807807807C0F803E1F801FFF800FF78007C7800007800007
80000780000780000780000780000780000780000780111D7E9317>I<F0E0F3E0F7E0FF00FC00
FC00F800F800F000F000F000F000F000F000F000F000F000F000F000F0000B147D9310>I<07F0
1FFC3FFC780C7800780078007C003FC01FF00FF803F8007C003C003CC03CF07CFFF87FF00FC00E
147F9311>I<1E001E001E001E001E001E00FFF0FFF0FFF01E001E001E001E001E001E001E001E
001E001E001E001E001E001E201FF00FF007C00C1A7F9910>I<F00FF00FF00FF00FF00FF00FF0
0FF00FF00FF00FF00FF00FF00FF00FF00FF01FF03FFFFF7FEF3F0F10147D9317>I<F003C0F003
C07803807807807807803C0F003C0F003C0F001E0E001E1E001E1E000F1C000F3C000F3C000738
0007380007B80003F00003F00001E00012147F9315>I<F01F00F0F01F80F0F01F80F0781B81E0
783B81E0783BC1E07839C1E03C31C3C03C71C3C03C71E3C01C70E3801E60E7801E60E7801EE0E7
800EE077000EC077000EC0770007C07E0007C03E0007803E001C147F931F>I<7801E07C03C03E
07801E0F000F0F00079E0003FC0003F80001F80000F00001F00001F80003FC00079E000F0F000E
0F001E07803C03C07801E0F801F01414809315>I<F003C0F003C07807807807807C07803C0F00
3C0F001E0F001E1E000E1E000F1C000F1C00073C0007380003B80003B80003B00001F00001F000
00E00000E00001C00001C00003C0000380000780007F00007E00007C0000121D7F9315>I<7FFF
7FFF7FFF003E003C007800F800F001E003E007C007800F001F001E003C007C00FFFFFFFFFFFF10
147F9314>I E /Fu 34 90 df<7FE07FE0FFC00B037E8A0F>45 D<3078F8787005057C840D>I<
007E0001FF0003C3800701C00E01C00E01E01C00E01C01E03C01E03C01E07801E07801E07801E0
7801E07801E0F003C0F003C0F003C0F003C0F003C0F00380F00780E00780E00700E00F00E00E00
701E00701C003878003FF0000FC000131F7C9D17>48 D<000C001C00FC0FF80F38003800380038
003800700070007000700070007000E000E000E000E000E000E001C001C001C001C001C001C003
C07FFEFFFE0F1E7C9D17>I<003F0000FFC001C1E00300F00600780600780F007C0F807C0F807C
0F00780600780000F80000F00001F00001E00003C0000780000F00001C0000380000700000C000
0180000300600600601C00C03800C07FFFC0FFFF80FFFF80161E7E9D17>I<007F0001FFC00383
E00701E00700F00F00F00F01F00F01F00001E00001E00003C0000780000F0000FE0000F800000E
000007000007800003C00003C00003C03007C07807C0F807C0F807C0F00F80C00F00601E00383C
001FF80007E000141F7D9D17>I<0001C00003C00003C0000780000F80001B80003B8000738000
638000C7000187000307000707000E07000C0700180E00300E00600E00E00E00FFFFF0FFFFF000
1C00001C00001C00001C00001C00001C00003C0003FFC003FFC0141E7D9D17>I<03007003FFF0
03FFE003FF8003FE000600000600000600000600000600000600000C7C000DFF000F87800E0380
0C01C00C01C00001E00001E00001E00001E07003C0F003C0F003C0F00380C00780E00700600E00
383C001FF0000FC000141F7D9D17>I<000F80007FC000F0E001C0E00381E00701E00E00C01E00
001C00003C000038000079FC007BFE007E07007C0380F80380F803C0F003C0F003C0F003C0F003
C0F00780E00780E00780E00700E00F00700E00701C003838001FF00007C000131F7C9D17>I<30
00003FFFE07FFFE07FFFC0600180E00300C00600C00C0000180000180000300000600000C00001
C0000180000380000300000700000600000E00000E00001E00001C00001C00003C00003C00003C
0000780000780000780000300000131F799D17>I<003F0000FF8001C1E00380E00700700E0070
0E00700E00700E00E00F00E00F81C00FC38007F70003FC0001FC0003FF000F3F801C0F803807C0
3803C07001C07001C0E001C0E001C0E001C0E003807003007007003C1C001FF80007E000141F7D
9D17>I<007E0001FF000383800701C00E01C01E01C01C01E03C01E03C01E07801E07801E07801
E07801E07803E07803E03807C03807C01C0FC01FFBC00FE380000780000780000700000E00600E
00F01C00F03800E07000E0E0007FC0003F0000131F7C9D17>I<00001800000038000000380000
00780000007C000000FC000000FC000001BC000001BC0000033C0000033E0000061E0000061E00
000C1E00000C1E0000181E0000181F0000300F0000300F0000600F00007FFF0000FFFF0000C00F
000180078001800780030007800300078006000780060007801F0007C0FFC07FFCFFC07FFC1E20
7E9F22>65 D<07FFFF0007FFFFC0003C01E0003C01F0007800F8007800F8007800F8007800F800
7800F8007800F000F001F000F003E000F007C000F00F8000FFFE0000FFFF8001E007C001E003E0
01E003E001E001E001E001E001E001F003C001E003C003E003C003E003C007C003C007C003C00F
8007C03F007FFFFE00FFFFF0001D1F7E9E20>I<0003F808000FFE18003F0738007801F801F000
F803C000F007C00070078000700F0000701F0000701E0000703E0000603C0000607C0000007C00
00007C0000007C000000F8000000F8000000F8000000F8000000F80000C0780000C0780001807C
0001803C0003003C0003001E0006001E000C000F80180007E0700001FFC000007F00001D217B9F
21>I<07FFFF0007FFFFE0003C01F0003C00F80078007C0078003C0078001E0078001E0078001E
0078001F00F0001F00F0001F00F0001F00F0001F00F0001F00F0001F01E0001E01E0003E01E000
3E01E0003E01E0003C01E0007C03C0007803C000F003C000F003C001E003C003C003C00F8007C0
3F007FFFFC00FFFFE000201F7E9E23>I<07FFFFF807FFFFF8003C00F8003C0078007800380078
003800780038007800380078003800780C3000F0183000F0180000F0180000F0380000FFF80000
FFF80001E0700001E0300001E0300001E0301801E0303001E0003003C0003003C0006003C00060
03C000E003C001C003C003C007C00FC07FFFFF80FFFFFF801D1F7E9E1F>I<07FFFFF807FFFFF8
003C00F8003C0078007800380078003800780038007800380078003800780C3000F0183000F018
0000F0180000F0380000FFF80000FFF80001E0700001E0300001E0300001E0300001E0300001E0
000003C0000003C0000003C0000003C0000003C0000003C0000007C000007FFE0000FFFE00001D
1F7E9E1E>I<0001FC04000FFF0C003F039C007800FC00F000FC03E0007803C00078078000380F
0000381F0000381E0000383E0000303E0000307C0000007C0000007C0000007C000000F8000000
F8000000F8007FFCF8007FFCF80001E0780001E0780003C07C0003C03C0003C03C0003C01E0003
C00F0007C007800F8003E0398001FFF080003F80001E217B9F24>I<07FFC7FFC007FFC7FFC000
3C007800003C007800007800F000007800F000007800F000007800F000007800F000007800F000
00F001E00000F001E00000F001E00000F001E00000FFFFE00000FFFFE00001E003C00001E003C0
0001E003C00001E003C00001E003C00001E003C00003C007800003C007800003C007800003C007
800003C007800003C007800007C00F80007FFCFFF800FFF8FFF800221F7E9E22>I<07FFE007FF
E0003C00003C0000780000780000780000780000780000780000F00000F00000F00000F00000F0
0000F00001E00001E00001E00001E00001E00001E00003C00003C00003C00003C00003C00003C0
0007C000FFFC00FFFC00131F7F9E10>I<07FFE0FFE007FFE0FFE0003C003E00003C0038000078
007000007800E00000780180000078030000007806000000780C000000F018000000F030000000
F060000000F1F0000000F3F0000000F778000001EC78000001F878000001F03C000001E03C0000
01E01E000001E01E000003C00F000003C00F000003C00F000003C007800003C007800003C003C0
0007C007E0007FFC1FFC00FFFC3FFC00231F7E9E23>75 D<07FFF00007FFF000003C0000003C00
0000780000007800000078000000780000007800000078000000F0000000F0000000F0000000F0
000000F0000000F0000001E0000001E0000001E0000001E0018001E0018001E0030003C0030003
C0030003C0070003C0060003C00E0003C01E0007C07E007FFFFC00FFFFFC00191F7E9E1C>I<07
FC0000FFC007FC0001FFC0003E0001F800003E00037800006E0003F000006E0006F000006E0006
F000006E000CF0000067000CF00000670018F00000C70019E00000C70031E00000C70031E00000
C70061E00000C38061E00000C380C1E000018380C3C00001838183C00001838183C0000181C303
C0000181C303C0000181C603C0000301C60780000301CC0780000301CC0780000300F807800003
00F80780000700F00780000F80F00F80007FF0E0FFF800FFF0E1FFF8002A1F7E9E2A>I<07FC03
FFC007FC03FFC0003E007C00003E003800006F003000006F003000006F00300000678030000067
8030000063C0300000C3C0600000C3C0600000C1E0600000C1E0600000C0F0600000C0F0600001
80F0C000018078C000018078C00001803CC00001803CC00001803CC00003001F800003001F8000
03000F800003000F800003000F800007000780000F800700007FF0030000FFF0030000221F7E9E
22>I<0003F800001FFE00003C1F0000F0078001E003C003C001E0078001E00F8000F00F0000F0
1F0000F01E0000F83E0000F83C0000F87C0000F87C0000F87C0000F87C0000F8F80001F0F80001
F0F80001F0F80001F0F80003E0780003E0780007C07C0007C07C000F803C000F003E001E001E00
3C000F00780007C1F00003FFC00000FE00001D217B9F23>I<07FFFF0007FFFFC0003C03E0003C
01F0007800F0007800F8007800F8007800F8007800F8007800F800F001F000F001F000F001E000
F003C000F00F8000FFFE0001FFF80001E0000001E0000001E0000001E0000001E0000003C00000
03C0000003C0000003C0000003C0000003C0000007C000007FFC0000FFFC00001D1F7E9E1F>I<
0003F800001FFE00003C1F0000F0078001E003C003C001E0078001E00F8001F00F0000F01F0000
F01E0000F83E0000F83C0000F87C0000F87C0000F87C0000F87C0000F8F80001F0F80001F0F800
01F0F80001F0F80003E0780003E0780003C0780007C07C1E07803C3F0F003C619E001E61BC000F
C0F80007E1F00003FFC04000FEC0400000E0400000E0800000E1800000FF800000FF000000FF00
00007E0000003C001D297B9F23>I<07FFFC0007FFFF00003C07C0003C03E0007801E0007801F0
007801F0007801F0007801F0007801E000F003E000F003C000F0078000F01F0000FFFC0000FFF0
0001E0380001E03C0001E01C0001E01C0001E01E0001E01E0003C03E0003C03E0003C03E0003C0
3E0003C03E0603C03E0607C03E0C7FFC1F18FFFC0FF8000003E01F207E9E21>I<003F04007FCC
01E0FC03807C03003C0700380600180E00180E00180E00180E00000F00000F00000FE00007FE00
03FF8001FFC0007FE00007E00001E00000E00000F00000F06000E06000E06000E06000E07001C0
700180F80380FE0F00C7FC0081F80016217D9F19>I<1FFFFFF81FFFFFF81E03C0F83803C03838
0780383007803870078018600780186007803860078030C00F0030000F0000000F0000000F0000
000F0000000F0000001E0000001E0000001E0000001E0000001E0000001E0000003C0000003C00
00003C0000003C0000003C0000003C0000007C00001FFFF0003FFFF0001D1F7B9E21>I<FFFC7F
F8FFFC7FF807800F80078007000F0006000F0006000F0006000F0006000F0006000F0006001E00
0C001E000C001E000C001E000C001E000C001E000C003C0018003C0018003C0018003C0018003C
0018003C001800380030003800300038003000380060003C00C0001C00C0001E0180000F070000
07FC000001F800001D20799E22>I<FFF007FEFFF007FE0F0001F00F0000C00F0000C00F000180
0780018007800300078007000780060007800E0007C00C0003C01C0003C0180003C0300003C030
0003C0600001E0600001E0C00001E0C00001E1800001E1800000F3000000F3000000F6000000F6
000000FC000000FC0000007800000078000000700000007000001F207A9E22>I<7FF803FF80FF
F803FF0007C000F80007C000E00003C000C00003E001C00001E003800001F003000000F0060000
00F80E000000F80C00000078180000007C300000003C700000003E600000001EC00000001F8000
00000F800000000F000000000F000000000F000000000E000000001E000000001E000000001E00
0000001E000000001E000000001C000000003C00000003FFE0000007FFE00000211F7B9E22>89
D E /Fv 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 /Fw 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 /Fx 30 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<07FC001FFF003F0F803F07C03F
03E03F03E00C03E00003E001FFE00FFFE03F83E07E03E07C03E0F803E0F803E0F803E0FC07E07E
0DE03FF9FE07E07E17147F9319>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00
001F00001F00001F00001F00001F1FC01F7FF01FE0F81F807C1F007E1F003E1F003E1F003F1F00
3F1F003F1F003F1F003F1F003F1F003E1F003E1F007C1F807C1EC1F81C7FE0181F8018207E9F1D
>I<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC0000FC
00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<0007F80007F80000F8
0000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F80FFEF81F83F83E01F8
7E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87C00F87E00F83E01F8
1F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF801F83E03F01F07E00F07E00F8FC00F8FC00
F8FFFFF8FFFFF8FC0000FC0000FC00007C00007E00003E00183F00380F807007FFE000FF801514
7F9318>I<01FC3C07FFFE0F07DE1E03DE3E03E03E03E03E03E03E03E03E03E01E03C00F07800F
FF0019FC001800001800001C00001FFF801FFFF00FFFF83FFFFC7C007C70003EF0001EF0001EF0
001E78003C78003C3F01F80FFFE001FF00171E7F931A>103 D<FF0000FF00001F00001F00001F
00001F00001F00001F00001F00001F00001F00001F00001F0FC01F3FE01F61F01FC0F81F80F81F
00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FF
E3FFFFE3FF18207D9F1D>I<1C003F007F007F007F003F001C00000000000000000000000000FF
00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0
0B217EA00E>I<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00
001F00001F01FE1F01FE1F00F01F01C01F03801F07001F1E001F38001F7C001FFE001FFF001F1F
001E0F801E07C01E07E01E03F01E01F01E00F8FFC3FFFFC3FF18207E9F1C>107
D<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B207E9F0E>I<FE0FE03F80FE
3FF0FFC01E70F9C3E01EC07F01F01F807E01F01F807E01F01F007C01F01F007C01F01F007C01F0
1F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01
F01F007C01F0FFE3FF8FFEFFE3FF8FFE27147D932C>I<FE0FC0FE3FE01E61F01EC0F81F80F81F
00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FF
E3FFFFE3FF18147D931D>I<01FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007E
FC007EFC007EFC007EFC007E7C007C7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>
I<FF1FC0FF7FF01FE1F81F80FC1F007E1F007E1F003E1F003F1F003F1F003F1F003F1F003F1F00
3F1F003E1F007E1F007C1F80FC1FC1F81F7FE01F1F801F00001F00001F00001F00001F00001F00
001F0000FFE000FFE000181D7E931D>I<01F81807FE381F87783F01F83E01F87E00F87C00F8FC
00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87E00F87E00F83F01F81F87F80FFEF803F8F800
00F80000F80000F80000F80000F80000F80000F80007FF0007FF181D7E931C>I<FE3E00FE7F80
1ECFC01F8FC01F8FC01F8FC01F03001F00001F00001F00001F00001F00001F00001F00001F0000
1F00001F00001F0000FFF000FFF00012147E9316>I<0FE63FFE701E600EE006E006F800FFC07F
F83FFC1FFE03FE001FC007C007E007F006F81EFFFCC7F010147E9315>I<018001800180038003
80038007800F803F80FFFCFFFC0F800F800F800F800F800F800F800F800F800F800F860F860F86
0F860F8607CC03F801F00F1D7F9C14>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F
00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F01F81F01F80F07F807FEFF03F8FF18
147D931D>I<FFE07F80FFE07F801F001C000F8018000F80180007C0300007C0300003E0600003
E0600001F0C00001F0C00001F9C00000F9800000FF8000007F0000007F0000003E0000003E0000
001C0000001C000019147F931C>I<FFE7FE1FE0FFE7FE1FE01F00F007001F00F803000F80F806
000F80F8060007C1BC0C0007C1BC0C0007C1BE0C0003E31E180003E31E180001F60F300001F60F
300001F60FB00000FC07E00000FC07E000007803C000007803C000007803C00000300180002314
7F9326>I<FFE1FF00FFE1FF000F80700007C0E00007E0C00003E1800001F3800000FF0000007E
0000003E0000003F0000007F8000006F800000C7C0000183E0000381F0000701F8000E00FC00FF
81FF80FF81FF8019147F931C>I<FFE07F80FFE07F801F001C000F8018000F80180007C0300007
C0300003E0600003E0600001F0C00001F0C00001F9C00000F9800000FF8000007F0000007F0000
003E0000003E0000001C0000001C0000001800000018000078300000FC300000FC600000C0E000
00E1C000007F8000001E000000191D7F931C>I E /Fy 78 124 df<000FC3E0007FEFF000E07C
7801C0F8780380F83007007000070070000700700007007000070070000700700007007000FFFF
FF80FFFFFF80070070000700700007007000070070000700700007007000070070000700700007
007000070070000700700007007000070070000700700007007000070070007FE3FF007FE3FF00
1D20809F1B>11 D<001F80007FC001E0E00381E00381E00701E007000007000007000007000007
0000070000FFFFE0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E007
00E00700E00700E00700E00700E00700E00700E07FC3FE7FC3FE1720809F19>I<001FE0007FE0
01E1E00381E00380E00700E00700E00700E00700E00700E00700E00700E0FFFFE0FFFFE00700E0
0700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0
0700E00700E07FE7FE7FE7FE1720809F19>I<000F80F800007FE7FE0000E06E060001C0FC0F00
0380F80F000700F00F000700700000070070000007007000000700700000070070000007007000
00FFFFFFFF00FFFFFFFF0007007007000700700700070070070007007007000700700700070070
070007007007000700700700070070070007007007000700700700070070070007007007000700
700700070070070007007007007FE3FE3FF07FE3FE3FF02420809F26>I<7038F87CFC7EFC7E7C
3E0C060C060C06180C180C381C3018603040200F0E7E9F17>34 D<0078000000FC000001860000
0386000003030000070300000703000007030000070300000706000007060000070C0000071800
0003B81FFC03F01FFC03E003E003C0018003C0030007C003000EE006001CE0060038700C007878
0C0070381800F01C3000F01E3000F00E6000F007C000F003C0187801C0187807E0303E1E78701F
F83FE007E00F801E227EA023>38 D<70F8FCFC7C0C0C0C181838306040060E7C9F0D>I<006000
C001800300070006000C001C00180038003800300070007000700060006000E000E000E000E000
E000E000E000E000E000E000E000E0006000600070007000700030003800380018001C000C0006
0007000300018000C000600B2E7DA112>I<C0006000300018001C000C00060007000300038003
80018001C001C001C000C000C000E000E000E000E000E000E000E000E000E000E000E000E000C0
00C001C001C001C00180038003800300070006000C001C00180030006000C0000B2E7DA112>I<
018001C001800180C183E187F99F7DBE1FF807E007E01FF87DBEF99FE187C1830180018001C001
8010147DA117>I<00060000000600000006000000060000000600000006000000060000000600
0000060000000600000006000000060000000600000006000000060000FFFFFFF0FFFFFFF00006
000000060000000600000006000000060000000600000006000000060000000600000006000000
060000000600000006000000060000000600001C207D9A23>I<70F8FCFC7C0C0C0C1818383060
40060E7C840D>I<FFC0FFC0FFC00A037F8A0F>I<70F8F8F87005057C840D>I<00030003000700
060006000E000C000C001C0018001800380030003000700060006000E000C000C001C001800180
01800380030003000700060006000E000C000C001C0018001800380030003000700060006000E0
00C000C000102D7DA117>I<03F0000FFC001E1E001C0E00380700780780700380700380700380
F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0
7003807003807003807807803807001C0E001E1E000FFC0003F000121F7E9D17>I<018003801F
80FF80E38003800380038003800380038003800380038003800380038003800380038003800380
038003800380038003800380FFFEFFFE0F1E7C9D17>I<03F0000FFC00183E00300F00600F80C0
0780F007C0F807C0F803C0F803C02003C00007C0000780000780000F00000E00001C0000380000
700000E00001C0000380000300000600C00C00C01800C03001807FFF80FFFF80FFFF80121E7E9D
17>I<03F0000FFC001C1E00300F00780F80780F80780780380F80000F80000F00000F00001E00
003C0003F80003F000001C00000E00000F000007800007800007C02007C0F807C0F807C0F807C0
F00780600F80700F003C1E001FFC0003F000121F7E9D17>I<000E00000E00001E00003E00003E
00006E0000EE0000CE00018E00038E00030E00060E000E0E000C0E00180E00380E00300E00600E
00E00E00FFFFF0FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE000FFE0141E
7F9D17>I<3803003FFF003FFE003FF8003FE00030000030000030000030000030000030000031
F00037FC003E0E003C07003807803003800003800003C00003C00003C06003C0F003C0F003C0F0
0380C00780600700700E003C1E000FF80007E000121F7E9D17>I<007C0001FE000783000E0380
0C07801C0780380300380000780000700000700000F3F800F7FE00FC0E00F80700F80380F80380
F003C0F003C0F003C0F003C0F003C07003C07003C07003803803803807001C07000E1E0007FC00
01F000121F7E9D17>I<6000007FFFC07FFFC07FFF80600180C00300C00600C00600000C000018
0000180000300000600000600000E00000C00001C00001C00001C0000380000380000380000380
00078000078000078000078000078000078000078000030000121F7D9D17>I<03F0000FFC001E
1E003807003007007003807003807003807003807807003E07003F0E001FDC000FF80003F80007
FC001E7E00383F00700F80700780E003C0E001C0E001C0E001C0E001C0F001807003803807001E
0E000FFC0003F000121F7E9D17>I<03F00007F8001E1C00380E00380700700700700380F00380
F00380F003C0F003C0F003C0F003C0F003C07007C07007C0380FC01C0FC01FFBC007F3C0000380
000380000780000700300700780E00780E00701C003078001FF0000FC000121F7E9D17>I<70F8
F8F8700000000000000000000070F8F8F87005147C930D>I<70F8F8F870000000000000000000
0070F8F8F878181818183030606040051D7C930D>I<7FFFFFE0FFFFFFF0000000000000000000
0000000000000000000000000000000000000000000000FFFFFFF07FFFFFE01C0C7D9023>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<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C0FEFE072D7CA10D>91 D<0804180C3018703860306030C060C060C060F87C
FC7EFC7E7C3E381C0F0E7B9F17>I<FEFE06060606060606060606060606060606060606060606
06060606060606060606060606060606060606FEFE072D7FA10D>I<1FE0003FF000783800781C
00300E00000E00000E00000E0003FE001FFE003E0E00780E00F80E00F00E30F00E30F00E30F01E
30783F703FEFE00F878014147E9317>97 D<0E0000FE0000FE00000E00000E00000E00000E0000
0E00000E00000E00000E00000E00000E3F000EFF800FC3C00F00E00E00F00E00700E00780E0078
0E00780E00780E00780E00780E00780E00700E00F00F00F00F01E00FC3C00CFF800C3E0015207F
9F19>I<03F80FFC1E1E3C1E380C78007000F000F000F000F000F000F0007000780038033C031F
0E0FFC03F010147E9314>I<000380003F80003F80000380000380000380000380000380000380
00038000038000038003E3800FFB801E0F803C0780780380780380700380F00380F00380F00380
F00380F00380F003807003807003807807803807801E1F800FFBF803E3F815207E9F19>I<03F0
000FFC001E1E003C0F00380700780700700380F00380FFFF80FFFF80F00000F00000F000007000
007800003801801C03800F070007FE0001F80011147F9314>I<003C00FE01CF038F0306070007
0007000700070007000700FFF0FFF0070007000700070007000700070007000700070007000700
07000700070007007FF07FF01020809F0E>I<0001E003E3F00FFF701C1C703C1E00380E00780F
00780F00780F00780F00380E003C1E001C1C003FF80033E0003000003000003800003FFE001FFF
803FFFC07003E07000F0E00070E00070E00070F000F07801E03E07C00FFF0003FC00141F7F9417
>I<0E0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
3E000EFF000FC3800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
01C00E01C00E01C00E01C00E01C0FFE7FCFFE7FC16207F9F19>I<1C001E003E001E001C000000
000000000000000000000E007E007E000E000E000E000E000E000E000E000E000E000E000E000E
000E000E000E00FFC0FFC00A1F809E0C>I<00E001F001F001F000E00000000000000000000000
00007007F007F000F0007000700070007000700070007000700070007000700070007000700070
007000700070007000706070F0E0F1C07F803E000C28829E0E>I<0E0000FE0000FE00000E0000
0E00000E00000E00000E00000E00000E00000E00000E00000E1FF00E1FF00E0F800E0E000E0C00
0E18000E30000E70000EF0000FF8000F38000E1C000E1E000E0E000E07000E07800E03800E03C0
FFCFF8FFCFF815207F9F18>I<0E00FE00FE000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0FFE00B
20809F0C>I<0E3F03F000FEFF8FF800FFC1DC1C000F80F80E000F00F00E000E00E00E000E00E0
0E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00
E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE0FFE7FE7FE023147F9326>I<0E3E00FE
FF00FFC3800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
01C00E01C00E01C00E01C0FFE7FCFFE7FC16147F9319>I<01F80007FE001E07803C03C03801C0
7000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07801E03801C03C03C01E0780
07FE0001F80014147F9317>I<0E3F00FEFF80FFC3C00F01E00E00F00E00F00E00780E00780E00
780E00780E00780E00780E00780E00700E00F00F00F00F01E00FC3C00EFF800E3E000E00000E00
000E00000E00000E00000E00000E0000FFE000FFE000151D7F9319>I<03E1800FF9801E1F803C
0780780780780380700380F00380F00380F00380F00380F00380F003807003807803807807803C
0F801E1F800FF38003E380000380000380000380000380000380000380000380003FF8003FF815
1D7E9318>I<0E78FEFCFF9E0F1E0F0C0F000E000E000E000E000E000E000E000E000E000E000E
000E00FFE0FFE00F147F9312>I<1F903FF07070E030E030E030F00078007F803FE00FF000F0C0
78C038C038E038E038F070DFE08F800D147E9312>I<06000600060006000E000E001E003E00FF
F8FFF80E000E000E000E000E000E000E000E000E000E000E180E180E180E180E18073007E003C0
0D1C7F9B12>I<0E01C0FE1FC0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
C00E01C00E01C00E01C00E01C00E03C00E03C0070FC007FDFC01F1FC16147F9319>I<FF87F8FF
87F81E01E00E01C00E01800E0180070300070300070300038600038600038E0001CC0001CC0001
FC0000F80000F80000700000700000700015147F9318>I<FF9FF3FCFF9FF3FC1C0780F01C0780
601C07C0E00E0FC0C00E0CC0C00E0CE0C0070CE18007186180071871800398730003B0330003B0
330003B03F0001F03E0001E01E0001E01E0000E01C0000C00C001E147F9321>I<7FC7FC7FC7FC
0703E007038003830001C70000EE0000EC00007800003800003C00007C0000EE0001C700018700
0303800701C00F01E0FF87FEFF87FE1714809318>I<FF87F8FF87F81E01E00E01C00E01800E01
80070300070300070300038600038600038E0001CC0001CC0001FC0000F80000F8000070000070
0000700000600000600000600000C000F0C000F18000F380007F00003C0000151D7F9318>I<3F
FF3FFF380E301C703C6038607060F001E001C0038007830F030E031C073C063806701EFFFEFFFE
10147F9314>I<FFFFFCFFFFFC1602808C17>I E /Fz 43 122 df<FFFEFFFEFFFEFFFE0F047F8F
14>45 D<F8F8F8F8F805057B8410>I<007E0001FF8007FFE00FFFF01FC3F81F00F83E007C3E00
7C3C003C7C003E7C003E78001E78001EF8001FF8001FF8001FF8001FF8001FF8001FF8001FF800
1FF8001FF8001FF8001FF8001FF8001FF8001FF8001F78001E7C003E7C003E7C003E7C003E3E00
7C3F00FC1F00F81FC3F80FFFF007FFE001FF80007E0018297EA71D>48 D<00180000380000F800
07F800FFF800FFF800FFF800F8F80000F80000F80000F80000F80000F80000F80000F80000F800
00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
00F80000F80000F80000F80000F80000F80000F8007FFFF07FFFF07FFFF07FFFF014287CA71D>
I<00FE0003FF800FFFC01FFFE01F07F03C01F87800FC78007C70007CF0003EF0003E60003E2000
3E00003E00003E00003E00007C00007C0000780000F80001F00001E00003E00007C0000F80001F
00003E00007C0000F80001F00003E00003C0000780000F00001E00003C00007FFFFE7FFFFE7FFF
FE7FFFFE17287EA71D>I<007E0003FF8007FFE00FFFF01F81F83E00F87C007C78007C30007C10
007C00007C00007C0000780000F80000F80001F00007E000FFC000FF8000FFC000FFF00001F800
00FC00007C00003E00003E00001F00001F00001F00001F00001F80001FC0003EE0003EF0007E7C
00FC3F01F81FFFF00FFFE003FFC000FE0018297EA71D>I<0007E0000FE0000BE0001BE0001BE0
003BE0003BE00073E00073E000F3E000F3E001E3E001E3E003E3E003C3E007C3E00F83E00F83E0
1F03E01F03E03E03E03E03E07C03E07C03E0F803E0FFFFFFFFFFFFFFFFFFFFFFFF0003E00003E0
0003E00003E00003E00003E00003E00003E00003E00003E018277EA61D>I<3FFFF83FFFF83FFF
F83FFFF83E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E3E003EFF
803FFFE03FFFF03FC1F03F80F83F007C3E007C00007C00003E00003E00003E00003E00003E0000
3E00003E20003E60007C70007CF800F87C01F87F07F03FFFE00FFFC007FF0001FC0017287EA61D
>I<000FE0003FF800FFF801FFF803F81807E0000F80000F80001F00003E00003E00003C00007C
00007C02007C3FC0F8FFE0F9FFF0FBFFF8FF80FCFE007CFE003EFC003EFC003FFC001FF8001FF8
001FF8001FF8001F78001F7C001F7C001F7C001E3C003E3E003E1E007C1F00FC0FC1F807FFF003
FFE001FF80007E0018297EA71D>I<FFFFFFFFFFFFFFFFFFFFFFFF00000F00001E00003C000078
0000780000F00001F00001E00003E00003C00007C0000F80000F80000F00001F00001E00003E00
003E00003C00007C00007C00007C0000F80000F80000F80000F80000F80000F00001F00001F000
01F00001F00001F00001F00001F00018277EA61D>I<007E0003FFC007FFE00FFFF01F81F83F00
FC3E007C7E007E7C003E7C003E7C003E7C003E7C003E3E007C3E007C1F00F80FC3F007FFE003FF
C003FFC00FFFF01F81F83F00FC3E007C7C003E7C003EF8001FF8001FF8001FF8001FF8001FF800
1F7C003E7C003E7E007E3F00FC1F81F80FFFF007FFE003FFC0007E0018297EA71D>I<007E0001
FF8007FFC00FFFE01F83F01F00F83E00787C007C7C003C78003EF8003EF8003EF8001EF8001FF8
001FF8001FF8001FF8003FFC003F7C003F7C007F3E007F3F01FF1FFFDF0FFF9F07FF1F03FC1E00
403E00003E00003E00007C00007C0000F80000F80001F01803E01E0FC03FFF801FFF000FFE0003
F80018297EA71D>I<FFFFC000FFFFF800FFFFFE00FFFFFF00F800FF80F8001FC0F80007E0F800
03E0F80001F0F80001F0F80000F0F80000F0F80001F0F80001E0F80003E0F80007C0F8001FC0F8
007F80FFFFFE00FFFFF800FFFFFC00FFFFFF00F8007FC0F8000FE0F80003F0F80001F8F80000F8
F800007CF800007CF800007CF800007CF800007CF800007CF80000F8F80000F8F80003F0F80007
F0F8003FE0FFFFFFC0FFFFFF00FFFFFE00FFFFF0001E2A7BA927>66 D<0003FE00000FFFC0003F
FFF000FFFFF001FE03F003F8006007E0002007C000000F8000001F8000001F0000003E0000003E
0000007C0000007C0000007C0000007C000000F8000000F8000000F8000000F8000000F8000000
F8000000F8000000F8000000F8000000F80000007C0000007C0000007C0000007C0000003E0000
003E0000001F0000001F8000000F80000007C0000007E0000803F8003801FE01F800FFFFF8003F
FFF0000FFFC00003FE001D2C7CAA25>I<FFFFE00000FFFFFC0000FFFFFF0000FFFFFF8000F800
3FC000F8000FE000F80003F000F80001F800F80000F800F800007C00F800007E00F800003E00F8
00003E00F800001F00F800001F00F800001F00F800000F80F800000F80F800000F80F800000F80
F800000F80F800000F80F800000F80F800000F80F800000F80F800000F80F800000F00F800001F
00F800001F00F800001F00F800003E00F800007E00F800007C00F80000FC00F80001F800F80003
F000F8000FE000F8003FC000FFFFFF8000FFFFFF0000FFFFFC0000FFFFE00000212A7BA92A>I<
F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
F8F8F8052A7BA910>73 D<FE000000FFFE000000FFFE000000FFFF000001FFFB000001DFFB8000
03DFFB800003DFFB800003DFF9C000079FF9C000079FF9C000079FF9E0000F9FF8E0000F1FF8E0
000F1FF8F0001F1FF870001E1FF870001E1FF878003E1FF838003C1FF83C007C1FF83C007C1FF8
1C00781FF81E00F81FF81E00F81FF80E00F01FF80F01F01FF80F01F01FF80701E01FF80783E01F
F80783E01FF80383C01FF803C7C01FF803C7C01FF801C7801FF801EF801FF801EF801FF800EF00
1FF800FF001FF8007E001FF8007E001FF8007E001FF80000001F282A7BA933>77
D<FF00007CFF00007CFF80007CFF80007CFBC0007CFBC0007CFBE0007CF9E0007CF9F0007CF8F0
007CF8F0007CF8F8007CF878007CF87C007CF83C007CF83E007CF81E007CF81F007CF80F007CF8
0F807CF80F807CF807C07CF807C07CF803C07CF803E07CF801E07CF801F07CF800F07CF800F87C
F800787CF8007C7CF8003C7CF8003C7CF8003E7CF8001E7CF8001F7CF8000F7CF8000F7CF80007
FCF80007FCF80003FCF80003FC1E2A7BA929>I<FFFFC000FFFFF800FFFFFE00FFFFFF00F8007F
80F8001FC0F80007C0F80003E0F80003E0F80001F0F80001F0F80001F0F80001F0F80001F0F800
01F0F80001F0F80003E0F80003E0F80007C0F8001FC0F8007F80FFFFFF00FFFFFE00FFFFF800FF
FFC000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000
F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000001C2A7BA925>80
D<007FC00001FFF80007FFFE000FFFFF001FC07F003F000F007E0006007C0000007C000000F800
0000F8000000F8000000F8000000F8000000FC0000007E0000007F0000003F8000001FF800000F
FF000007FFE00003FFF80000FFFC00000FFE000000FF0000003F0000001F8000000F8000000FC0
000007C0000007C0000007C0000007C0000007C0000007C000000F8060000F80F0001F00FC003F
00FF80FE007FFFFC001FFFF80007FFE00000FF80001A2C7DAA21>83 D<FFFFFFFFE0FFFFFFFFE0
FFFFFFFFE0FFFFFFFFE00001F000000001F000000001F000000001F000000001F000000001F000
000001F000000001F000000001F000000001F000000001F000000001F000000001F000000001F0
00000001F000000001F000000001F000000001F000000001F000000001F000000001F000000001
F000000001F000000001F000000001F000000001F000000001F000000001F000000001F0000000
01F000000001F000000001F000000001F000000001F000000001F000000001F000000001F00000
0001F00000232A7EA928>I<01FC000FFF003FFF803FFFC03C07E03003E00001F00001F00001F0
0001F00001F00003F001FFF007FFF01FFFF03FC1F07E01F0FC01F0F801F0F801F0F801F0FC03F0
7E0FF07FFFF03FFFF01FF9F00FE1F0141B7E9A1C>97 D<F80000F80000F80000F80000F80000F8
0000F80000F80000F80000F80000F80000F80000F80000F80000F80000F87E00F9FF80FFFFC0FF
FFE0FF07E0FC03F0F801F8F800F8F800F8F8007CF8007CF8007CF8007CF8007CF8007CF8007CF8
007CF800FCF800F8F800F8F801F0FC03F0FE0FE0FFFFC0FFFF80FBFF00F8FC00162A7BA91E>I<
007F8001FFE007FFF80FFFF81FC0783F00103E00007C00007C00007C0000F80000F80000F80000
F80000F80000F80000F800007C00007C00007C00003E00003F00181FC0780FFFF807FFF801FFE0
007F80151B7E9A1A>I<00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
7C00007C00007C00007C00007C00007C00FC7C03FF7C07FFFC0FFFFC1FC1FC3F00FC3E007C7C00
7C7C007CFC007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007C7C007C7C007C7E00
FC3F00FC1F83FC1FFFFC0FFF7C03FE7C01F87C162A7EA91E>I<00FC0003FF0007FF800FFFC01F
87E03F01E03E00F07C00F07C0070F80078FFFFF8FFFFF8FFFFF8FFFFF8F80000F80000F8000078
00007C00007C00003E00003F00181FC0F80FFFF807FFF801FFE0007F00151B7E9A1A>I<001FC0
007FC000FFC001FFC003F00003E00007C00007C00007C00007C00007C00007C00007C00007C000
07C000FFFE00FFFE00FFFE00FFFE0007C00007C00007C00007C00007C00007C00007C00007C000
07C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C000
07C00007C000122A7FA912>I<00F80F0003FE7F800FFFFF801FFFFF801F07C0003E03E0003E03
E0007C01F0007C01F0007C01F0007C01F0007C01F0003E03E0003E03E0001F07C0001FFFC0003F
FF80003BFE000038F8000078000000780000007C0000003FFF80003FFFF0001FFFF8001FFFFC00
3FFFFE007C00FE007C003F00F8001F00F8001F00F8001F00F8001F00FC003F007E007E003F81FC
001FFFF8000FFFF00007FFE00000FF000019287E9A1D>I<F80000F80000F80000F80000F80000
F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F87E00F9FF00FBFF80
FFFFC0FF0FC0FE07E0FC03E0FC03E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0
F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0132A7BA91E>
I<F8F8F8F8F800000000000000000000F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
F8F8F8F8052A7CA90E>I<F80000F80000F80000F80000F80000F80000F80000F80000F80000F8
0000F80000F80000F80000F80000F80000F803F0F807E0F807C0F80F80F81F00F83E00F87E00F8
FC00F8F800F9F000FBE000FFF000FFF800FFF800FFFC00FE7C00FC7E00F83F00F83F00F81F80F8
1F80F80FC0F807C0F807E0F803F0F803F0F801F8152A7BA91C>107 D<F8F8F8F8F8F8F8F8F8F8
F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8052A7CA90E>I<
F83F007E00F9FF83FF00FBFFC7FF80FFFFEFFFC0FF07FE0FC0FE03FC07E0FC01F803E0FC01F803
E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F0
03E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801F003E0F801
F003E0F801F003E0F801F003E0F801F003E0231B7B9A30>I<F87E00F9FF00FBFF80FFFFC0FF0F
C0FE07E0FC03E0FC03E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803
E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0131B7B9A1E>I<007E0001
FF8007FFE00FFFF01F81F83F00FC3E007C7C003E7C003E78001EF8001FF8001FF8001FF8001FF8
001FF8001FF8001F7C003E7C003E7C003E3E007C3F00FC1FC3F80FFFF007FFE003FFC0007E0018
1B7E9A1D>I<F87E00F9FF80FFFFC0FFFFE0FF0FE0FC03F0F801F8F800F8F800F8F800FCF8007C
F8007CF8007CF8007CF8007CF8007CF8007CF800FCF800F8F801F8F801F0FC03F0FE0FE0FFFFC0
FFFF80FBFF00F8FC00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000
F80000F8000016277B9A1E>I<00FC7C03FF7C07FFFC0FFFFC1FC1FC3F00FC3E00FC7E007C7C00
7CFC007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CFC007C7C007C7C007C7E007C3F00
FC1FC3FC1FFFFC0FFF7C03FE7C01F87C00007C00007C00007C00007C00007C00007C00007C0000
7C00007C00007C00007C00007C16277E9A1E>I<F838F8F8F9F8FBF8FFC0FF00FE00FE00FC00FC
00F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F8000D1B7B9A
14>I<07F8001FFF003FFF807FFF807C0780F80100F80000F80000F80000FC00007F00007FF000
3FFC001FFE0007FF0000FF80001FC0000FC00007C00007C04007C0E007C0FC1F80FFFF807FFF00
1FFE0007F800121B7E9A16>I<07C00007C00007C00007C00007C00007C00007C000FFFF80FFFF
80FFFF80FFFF8007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0
0007C00007C00007C00007C00007C00007C00007C08007E38003FFC003FFC001FF0000FC001222
7FA115>I<F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8
03E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F807E0F807E0FC1FE0FFFFE07F
FBE03FF3E01F83E0131B7B9A1E>I<F8001FF8001F7C003E7C003E7C003E3E007C3E007C3E007C
1F00F81F00F81F00F80F81F00F81F00F81F007C3E007C3E007C3E003C3C003E7C001E78001E780
01E78000E70000F70000FF00007E00007E00181B7F9A1B>I<F8001FFC001F7C003E7C003E3E00
3E3E007C3F007C1F007C1F00F80F80F80F80F00F81F007C1F007C1E003C1E003E3E003E3C001E3
C001E3C000F78000F78000F780007700007700003F00003E00003E00003E00003C00003C000078
0000780000780000F00001F0007FE0007FE0007FC0007F000018277F9A1B>121
D E /FA 10 118 df<000000007FFC00000E0000000FFFFFC0001E0000007FFFFFF8003E000003
00000047497AC754>67 D<FFFFFFFFFFFF000000FFFFFFFFFFFFF00000FFFFFFFFFFFFFE0000FF
FFFFFFF000000000FFFFFFFFF000000000FFFFFFFFF00000000044477CC64F>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 /FB 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 FB(Chapter)31 b(1)75 620 y FA(P)m(oin)m(t)39 b(to)g(P)m(oin)m(t)
g(Comm)m(u)o(nication)75 886 y Fz(1.1)59 b(Intro)r(duction)75
1038 y Fy(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 Fx(send)g Fy(and)h Fx(receiv)o(e)p Fy(.)29
b(A)18 b Fx(send)75 1346 y Fy(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
Fx(send)i(bu\013er)f Fy(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 Fx(en)o(v)o(elop)q(e)16
b Fy(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 Fx(receiv)o(e)g
Fy(op)q(eration)g(to)g(select)h(a)e(particular)75 1572 y(message.)166
1654 y(A)22 b Fx(receiv)o(e)f Fy(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 Fx(receiv)o(e)g
(bu\013er)p Fy(.)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 Fz(1.2)59 b(Basic)20 b(send)g(op)r(eration)75 2518 y
Fy(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 Fw(1)144 2704
y Fv(V)m(ersion)e(of)f(Jan)g(4,)f(1994)-32 46 y Fw(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 Fy(2)631 b Fu(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)75 49 y Ft(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 Fs(IN)155
b Ft(buf)527 b Fs(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o
(hoice\))117 213 y(IN)155 b Ft(count)482 b Fs(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 Ft(datat)o(yp)q(e)424 b Fs(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 Ft(dest)511 b Fs(rank)14 b(of)f(destination)h(\(in)o(teger\))
117 517 y(IN)155 b Ft(tag)526 b Fs(message)14 b(tag)f(\(in)o(teger\))117
599 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)11 b(\(handle\))75
727 y Fr(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 Fq(1.2.1)49
b(Message)16 b(data)75 1253 y Fy(The)e(send)g(bu\013er)g(sp)q(eci\014ed)i(b)o
(y)e(the)f Ft(MPI)p 803 1253 14 2 v 16 w(SEND)h Fy(op)q(eration)g(consists)g
(of)f Ft(count)i Fy(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 Ft(datat)o(yp)q(e)p
Fy(,)i(starting)e(with)h(the)f(en)o(try)g(at)g(address)h Ft(buf)p
Fy(.)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
Fp(elements)p Fy(,)f(not)g(n)o(um)o(b)q(er)i(of)e Fp(bytes)p
Fy(.)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 Ft(count)i Fy(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 Ft(datat)o(yp)q(e)p Fy(.)31 b Ft(count)20
b Fy(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 Ft(MPI)p 582 1990 14 2
v 16 w(INTEGER)p 1046 2007 2 57 v 287 w Fr(INTEGER)p 1477 2007
V 471 2064 V 497 2047 a Ft(MPI)p 582 2047 14 2 v 16 w(REAL)p
1046 2064 2 57 v 365 w Fr(REAL)p 1477 2064 V 471 2120 V 497
2103 a Ft(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 Fr(DOUBLE)23 b(PRECISION)p
1477 2120 V 471 2176 V 497 2159 a Ft(MPI)p 582 2159 14 2 v
16 w(COMPLEX)p 1046 2176 2 57 v 263 w Fr(COMPLEX)p 1477 2176
V 471 2233 V 497 2216 a Ft(MPI)p 582 2216 14 2 v 16 w(LOGICAL)p
1046 2233 2 57 v 291 w Fr(LOGICAL)p 1477 2233 V 471 2289 V
497 2272 a Ft(MPI)p 582 2272 14 2 v 16 w(CHARA)o(CTER)p 1046
2289 2 57 v 211 w Fr(CHARACTER\(1\))p 1477 2289 V 471 2346
V 497 2329 a Ft(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 Fy(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 Fw(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 Fu(1.2.)34 b(BASIC)16 b(SEND)f(OPERA)l(TION)1097
b Fy(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 Ft(MPI)p 576 103 14 2 v 16 w(CHAR)p
1004 120 2 57 v 321 w Fr(signed)23 b(char)p 1483 120 V 465
176 V 491 159 a Ft(MPI)p 576 159 14 2 v 16 w(SHORT)p 1004 176
2 57 v 291 w Fr(signed)g(short)p 1483 176 V 465 233 V 491 216
a Ft(MPI)p 576 216 14 2 v 16 w(INT)p 1004 233 2 57 v 365 w
Fr(signed)g(int)p 1483 233 V 465 289 V 491 272 a Ft(MPI)p 576
272 14 2 v 16 w(LONG)p 1004 289 2 57 v 321 w Fr(signed)g(long)g(int)p
1483 289 V 465 346 V 491 329 a Ft(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 Fr(unsigned)f(char)p
1483 346 V 465 402 V 491 385 a Ft(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 Fr(unsigned)g(short)i(int)p
1483 402 V 465 459 V 491 442 a Ft(MPI)p 576 442 14 2 v 16 w(UNSIGNED)p
1004 459 2 57 v 218 w Fr(unsigned)e(int)p 1483 459 V 465 515
V 491 498 a Ft(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 Fr(unsigned)g(long)i(int)p
1483 515 V 465 571 V 491 555 a Ft(MPI)p 576 555 14 2 v 16 w(FLO)o(A)l(T)p
1004 571 2 57 v 301 w Fr(float)p 1483 571 V 465 628 V 491 611
a Ft(MPI)p 576 611 14 2 v 16 w(DOUBLE)p 1004 628 2 57 v 262
w Fr(double)p 1483 628 V 465 684 V 491 667 a Ft(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 Fr(long)f(double)p 1483 684 V 465 741 V 491 724 a Ft(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 Fy(The)16 b(datat)o(yp)q(e)f Ft(MPI)p 536
912 14 2 v 15 w(BYTE)i Fy(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 Ft(MPI)p 260 968 V 16 w(BYTE)h Fy(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 Ft(MPI)p 160 1307 V 16 w(LONG)p 296 1307 V 17 w(LONG)p
433 1307 V 17 w(INT)p Fy(,)13 b(for)h(64)g(bit)h(in)o(tegers)g(in)g(C;)f
Ft(MPI)p 1113 1307 V 16 w(DOUBLE)p 1308 1307 V 16 w(COMPLEX)h
Fy(for)f(double)i(preci-)75 1364 y(sion)h(complex)g(in)g(F)l(ortran;)e
Ft(MPI)p 667 1364 V 16 w(REAL2)p Fy(,)h Ft(MPI)p 928 1364 V
16 w(REAL4)g Fy(and)h Ft(MPI)p 1266 1364 V 15 w(REAL8)g Fy(for)e(2,4)g(or)h
(8)g(b)o(yte)g(reals,)75 1420 y(in)g(F)l(ortran;)e Ft(MPI)p
391 1420 V 15 w(INTEGER1)i(MPI)p 716 1420 V 16 w(INTEGER2)f
Fy(and)g Ft(MPI)p 1129 1420 V 16 w(INTEGER4)h Fy(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 Fp(R)n(ationale.)77 b Fy(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 Fp(End)20 b(of)189 1863 y(r)n(ationale.)p Fy(\))75 1984
y Fq(1.2.2)49 b(Message)16 b(envelop)q(e)75 2070 y Fy(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 Fx(message)i(en)o(v)o(elop)q(e)p
Fy(.)i(These)d(\014elds)g(are)75 2275 y Fx(source)75 2368 y(destination)75
2462 y(tag)75 2555 y(con)o(text)166 2647 y Fy(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 Fw(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 Fy(4)631 b Fu(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)166 49 y Fy(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 Ft(tag)h Fy(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 Ft(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
Fy(en)o(vironmen)o(tal)e(inquiry)h(function,)e(as)g(describ)q(ed)i(in)f
(Chapter)f Fx(??)p Fy(.)166 275 y(The)10 b(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 Ft(comm)5 b
Fy(argumen)o(t.)17 b(The)11 b(message)f(carries)75 332 y(the)21
b(con)o(text)g(asso)q(ciated)g(with)h(this)f(comm)o(unicator)g(\(see)g
(Chapter)g Fx(??)p Fy(\).)37 b(Eac)o(h)21 b(comm)o(unication)75
388 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
444 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 501 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 557 y(The)f(message)f
(destination)h(is)h(sp)q(eci\014ed)g(b)o(y)f(the)f Ft(dest)j
Fy(argumen)o(t)c(as)i(a)f(rank)g(within)i(the)f(pro)q(cess)75
614 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
670 y(cators\).)32 b(The)19 b(range)h(of)f(v)m(alid)i(v)m(alues)g(is)f
Ft(0,)g(...)32 b(,)20 b(n-1)p Fy(,)h(where)e Ft(n)h Fy(is)h(the)e(n)o(um)o(b)
q(er)h(of)f(pro)q(cesses)h(in)75 727 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 783 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
840 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 896
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
953 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
1009 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 1065 y(absolute)j(ids;)f(etc.)189 1168 y Fp(A)n(dvic)n(e)j(to)i
(users.)60 b Fy(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 1225 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 1281 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 1281 13 2
v 15 w(COMM)p 1582 1281 V 14 w(W)o(ORLD)f Fy(as)f(the)189 1338
y Ft(comm)d Fy(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
1394 y(initialization)f(time.)i(\()p Fp(End)c(of)g(advic)n(e)g(to)h(users.)p
Fy(\))75 1537 y Fz(1.3)59 b(Basic)20 b(receive)f(op)r(eration)75
1638 y Fy(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.)75 1742 y Ft(MPI)p 160 1742 14
2 v 16 w(RECV)g(\(buf,)f(count,)h(datat)o(yp)q(e,)h(source,)e(tag,)g(comm)m
(,)d(status\))117 1819 y Fs(OUT)108 b Ft(buf)527 b Fs(initial)12
b(address)j(of)f(receiv)o(e)h(bu\013er)g(\(c)o(hoice\))117
1894 y(IN)155 b Ft(count)482 b Fs(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 1968 y(IN)155
b Ft(datat)o(yp)q(e)424 b Fs(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 2043 y(IN)155 b Ft(source)468
b Fs(rank)14 b(of)f(source)j(\(in)o(teger\))117 2118 y(IN)155
b Ft(tag)526 b Fs(message)14 b(tag)f(\(in)o(teger\))117 2192
y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)11 b(\(handle\))117
2267 y(OUT)108 b Ft(status)476 b Fs(status)15 b(ob)r(ject)g(\(Status\))75
2391 y Fr(int)23 b(MPI)p 245 2391 15 2 v 17 w(Recv\(void*)g(buf,)g(int)g
(count,)h(MPI)p 979 2391 V 16 w(Datatype)f(datatype,)g(int)g(source,)393
2448 y(int)h(tag,)f(MPI)p 683 2448 V 17 w(Comm)g(comm,)g(MPI)p
1034 2448 V 17 w(Status)g(*status\))75 2534 y(MPI)p 150 2534
V 17 w(RECV\(BUF,)f(COUNT,)h(DATATYPE,)g(SOURCE,)g(TAG,)g(COMM,)g(STATUS,)g
(IERROR\))170 2591 y(<type>)g(BUF\(*\))170 2647 y(INTEGER)g(COUNT,)g
(DATATYPE,)g(SOURCE,)g(TAG,)g(COMM,)g(STATUS\(MPI)p 1463 2647
V 16 w(STATUS)p 1623 2647 V 17 w(SIZE\),)170 2704 y(IERROR)1967
46 y Fw(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 Fu(1.3.)34 b(BASIC)16 b(RECEIVE)g(OPERA)l(TION)1012
b Fy(5)166 49 y(The)15 b(receiv)o(e)h(bu\013er)f(consists)h(of)e(the)h
(storage)f(con)o(taining)i Ft(count)g Fy(consecutiv)o(e)g(elemen)o(ts)g(of)f
(the)75 106 y(t)o(yp)q(e)e(sp)q(eci\014ed)i(b)o(y)e Ft(datat)o(yp)q(e)p
Fy(,)h(starting)e(at)h(address)f Ft(buf)p Fy(.)20 b(The)13
b(length)h(of)e(the)h(receiv)o(ed)h(message)f(m)o(ust)75 162
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 219 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 Ft(MPI)p 1531 219
14 2 v 16 w(PROBE)h Fy(function)75 275 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 355 y(The)j(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 412
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 Fx(en)o(v)o(elop)q(e)k
(pattern)p Fy(;)f(a)75 468 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 525 y(A)19 b(pattern)g(sp)q(eci\014es)i(v)m
(alues)g(for)e(the)g Ft(source)p Fy(,)i Ft(tag)e Fy(and)h Ft(context)g
Fy(\014elds)h(of)e(the)g(message)g(en)o(v)o(elop)q(e.)75 581
y(The)d(receiv)o(er)h(ma)o(y)e(sp)q(ecify)j(a)e(wildcard)h
Fo(MPI)p 889 581 13 2 v 14 w(ANY)p 988 581 V 15 w(SOURCE)d
Fy(v)m(alue)k(for)d Ft(source)p Fy(,)h(and/or)g(a)g(wildcard)75
638 y Fo(MPI)p 152 638 V 14 w(ANY)p 251 638 V 15 w(T)m(A)o(G)c
Fy(v)m(alue)j(for)d Ft(tag)p Fy(,)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 694
y(sp)q(ecify)h(a)f(wildcard)h(v)m(alue)g(for)f Ft(context)p
Fy(.)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)75 751 y(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 807 y(source)14 b(unless)g(source=)p Fo(MPI)p
581 807 V 15 w(ANY)p 681 807 V 15 w(SOURCE)d Fy(in)k(the)e(pattern,)g(and)h
(has)g(a)f(matc)o(hing)g(tag)g(unless)i(tag=)75 863 y Fo(MPI)p
152 863 V 14 w(ANY)p 251 863 V 15 w(T)m(A)o(G)f Fy(in)i(the)f(pattern.)166
944 y(The)d(message)g(tag)f(is)i(sp)q(eci\014ed)h(b)o(y)e(the)g
Ft(tag)h Fy(argumen)o(t)e(of)h(the)g(receiv)o(e)h(op)q(eration.)19
b(The)12 b(message)75 1000 y Ft(context)20 b Fy(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 Ft(comm)m Fy(.)75 1057 y(The)g(message)g(source,)h(if)f
(di\013eren)o(t)h(from)32 b Fo(MPI)p 929 1057 V 14 w(ANY)p
1028 1057 V 15 w(SOURCE)p Fy(,)15 b(is)j(sp)q(eci\014ed)h(as)e(a)g(rank)f
(within)j(the)75 1113 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
1170 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 Ft(source)g Fy(argumen)o(t)g(is)g
Fn(f)g Ft(0,)f(...)28 b(,)18 b(n-1)75 1226 y Fn(g[f)d Ft(MPI)p
251 1226 14 2 v 16 w(ANY)p 359 1226 V 17 w(SOURCE)i Fn(g)p
Fy(,)d(where)h Ft(n)h Fy(is)g(the)f(n)o(um)o(b)q(er)h(of)e(pro)q(cesses)i(in)
g(this)g(group.)166 1306 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 1363 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
1419 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 1476
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
1532 y(b)o(y)d(the)g(receiv)o(er\).)166 1612 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 1669 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 1725 y(lead)g(to)f(deadlo)q
(c)o(k;)g(see)h(Section)g(1.4\))75 1983 y Fq(1.3.1)49 b(Return)16
b(status)75 2115 y Fy(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 2172 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 2228 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 2285 y(returned)12 b(b)o(y)g(the)f
Ft(status)j Fy(argumen)o(t)d(of)g(the)h Ft(MPI)p 923 2285 V
16 w(RECV)g Fy(function.)20 b(This)12 b(is)g(an)g(argumen)o(t)f(of)g(a)g(sp)q
(ecial)75 2341 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 2397 y(not)e(system)g(ob)s(jects.)166
2478 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 Ft(count)p Fy(,)g Ft(source)h Fy(and)f
Ft(tag)f Fy(\014elds,)i(using)75 2534 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 2591 y(information)k(stored)e(in)j(the)e
Ft(status)j Fy(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 2647 y(call)c(that)f(w)o(as)f(passed)h
Ft(status)i Fy(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 2704 y Ft(status)h Fy(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\).)-32
46 y Fw(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 Fy(6)631 b Fu(CHAPTER)15 b(1.)35 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)75 49 y Ft(MPI)p 160 49 14 2 v 16 w(GET)p
264 49 V 17 w(SOURCE\(status,)i(source\))117 131 y Fs(IN)155
b Ft(status)476 b Fs(return)15 b(status)g(of)e(receiv)o(e)i(op)q(eration)f
(\(Status\))117 215 y(OUT)108 b Ft(source)468 b Fs(source)15
b(rank)f(\(in)o(teger\))75 344 y Fr(int)23 b(MPI)p 245 344
15 2 v 17 w(Get)p 334 344 V 17 w(source\(MPI)p 591 344 V 16
w(Status)g(status,)g(int)g(*source\))75 435 y(MPI)p 150 435
V 17 w(GET)p 239 435 V 17 w(SOURCE\(STATUS,)e(SOURCE,)i(IERROR\))170
491 y(INTEGER)g(STATUS\(MPI)p 604 491 V 16 w(STATUS)p 764 491
V 17 w(SIZE\),)g(SOURCE,)f(IERROR)166 582 y Fy(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 639 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\).)75 747 y Ft(MPI)p
160 747 14 2 v 16 w(GET)p 264 747 V 17 w(T)l(A)o(G\(status,)i(tag\))117
829 y Fs(IN)155 b Ft(status)476 b Fs(return)15 b(status)g(of)e(receiv)o(e)i
(or)f(prob)q(e)h(op)q(eration)f(\(Status\))117 913 y(OUT)108
b Ft(tag)526 b Fs(message)14 b(tag)f(\(in)o(teger\))75 1042
y Fr(int)23 b(MPI)p 245 1042 15 2 v 17 w(Get)p 334 1042 V 17
w(tag\(MPI)p 519 1042 V 16 w(Status)g(status,)g(int)h(*tag\))75
1133 y(MPI)p 150 1133 V 17 w(GET)p 239 1133 V 17 w(TAG\(STATUS,)e(TAG,)h
(IERROR\))170 1189 y(INTEGER)g(STATUS\(MPI)p 604 1189 V 16
w(STATUS)p 764 1189 V 17 w(SIZE\),)g(TAG,)g(IERROR)166 1280
y Fy(Returns)16 b(the)f(tag)f(of)h(receiv)o(ed)h(message.)75
1388 y Ft(MPI)p 160 1388 14 2 v 16 w(GET)p 264 1388 V 17 w(COUNT\(status,)h
(datat)o(yp)q(e,)f(count\))117 1470 y Fs(IN)155 b Ft(status)476
b Fs(return)15 b(status)g(of)e(receiv)o(e)i(op)q(eration)f(\(Status\))117
1554 y(IN)155 b Ft(datat)o(yp)q(e)424 b Fs(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
1638 y(OUT)108 b Ft(count)482 b Fs(n)o(um)o(b)q(er)13 b(of)h(receiv)o(ed)h
(elemen)o(ts)f(\(in)o(teger\))75 1767 y Fr(int)23 b(MPI)p 245
1767 15 2 v 17 w(Get)p 334 1767 V 17 w(count\(MPI)p 567 1767
V 16 w(Status)g(status,)g(MPI)p 1013 1767 V 17 w(Datatype)f(datatype,)h(int)h
(*count\))75 1858 y(MPI)p 150 1858 V 17 w(GET)p 239 1858 V
17 w(COUNT\(STATUS,)e(DATATYPE,)g(COUNT,)h(IERROR\))170 1915
y(INTEGER)g(STATUS\(MPI)p 604 1915 V 16 w(STATUS)p 764 1915
V 17 w(SIZE\),)g(DATATYPE,)f(COUNT,)h(IERROR)166 2006 y Fy(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 Fp(elements)p Fy(,)f(not)h
Fp(bytes)p Fy(.\))75 2062 y(The)f Ft(datat)o(yp)q(e)h Fy(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 2119 y Ft(status)k Fy(v)m(ariable.)43
b(\(W)l(e)16 b(shall)g(later)g(see,)f(in)h(Section)h(1.13.5,)c(that)i
Ft(MPI)p 1350 2119 14 2 v 16 w(GET)p 1454 2119 V 16 w(COUNT)i
Fy(ma)o(y)d(return,)-1903 b Fm(\))75 2175 y Fy(in)16 b(certain)g(situations,)
f(the)g(v)m(alue)i Fo(MPI)p 773 2175 13 2 v 14 w(UNDEFINED)p
Fy(.\))166 2236 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
2293 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 Fp(R)n(ationale.)43 b Fy(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 Fs(INOUT)g Fy(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 Fy(constan)o(t)h(as)g(the)h(actual)189 2534 y(argumen)o(t)k(for)g
Ft(tag)p Fy(\).)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 Fw(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 Fu(1.4.)34 b(SEMANTICS)16 b(OF)f(POINT-TO-POINT)i(COMMUNICA)l
(TION)472 b Fy(7)189 49 y(The)18 b Ft(datat)o(yp)q(e)i Fy(argumen)o(t)d(is)i
(passed)g(to)e(the)i Ft(MPI)p 1096 49 14 2 v 16 w(GET)p 1200
49 V 16 w(COUNT)g Fy(so)f(as)g(to)g(impro)o(v)o(e)g(p)q(erfor-)189
106 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
162 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 Ft(MPI)p 1170 162 V 16 w(PROBE)p Fy(.)h(\()p Fp(End)f(of)i(r)n
(ationale.)p Fy(\))166 354 y Fl(Implemen)o(tati)o(on)d(note:)44
b Fs(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 411 y(tions.)166 551 y Fy(All)19
b(send)g(and)g(receiv)o(e)g(op)q(erations)f(use)h(the)f Ft(buf)p
Fy(,)h Ft(count)p Fy(,)h Ft(datat)o(yp)q(e)p Fy(,)g Ft(source)p
Fy(,)f Ft(dest)p Fy(,)h Ft(tag)p Fy(,)f Ft(comm)75 607 y Fy(and)e
Ft(status)i Fy(argumen)o(ts)d(in)i(the)f(same)g(w)o(a)o(y)f(as)g(the)h(basic)
h Ft(MPI)p 1201 607 V 16 w(SEND)f Fy(and)g Ft(MPI)p 1523 607
V 16 w(RECV)h Fy(op)q(erations)75 664 y(describ)q(ed)f(in)f(this)g(section.)
166 797 y Fl(Discussion:)56 b Fs(An)15 b(alternativ)o(e)f(design)h(for)f(the)
h(query)h(functions)e(is)h(to)f(mak)o(e)f(explicit)h(\(part)h(of)s(\))f(the)
69 b Fk(\()75 847 y Fs(structure)17 b(of)c Fo(Status)i Fs(v)n(ariables,)e(so)
i(that)f(the)h(use)h(can)e(access)i(status)g(information)11
b(merely)j(b)o(y)g(accessing)h(the)75 896 y(righ)o(t)h(\014eld)g(of)g(a)g
(status)h(v)n(ariable.)24 b(E.g,)16 b(in)f(C,)h Fo(status.tag,)g
(status.source)h Fs(etc.)26 b(w)o(ould)15 b(pro)o(vide)h(the)h(tag)f(and)75
946 y(source)h(information;)c(in)i(F)m(ortran)g Fo(ST)m(A)m(TUS\(MPI)p
891 946 13 2 v 13 w(T)m(A)o(G\),)g(ST)m(A)m(TUS\(MPI)p 1271
946 V 13 w(SOURCE\))p Fs(,)e(could)j(b)q(e)g(used)g(for)f(the)75
996 y(same)8 b(purp)q(ose.)18 b(This)9 b(has)h(the)g(adv)n(an)o(tage)e(of)h
(a)o(v)o(oiding)e(a)j(function)f(call)f(\(whic)o(h)i(cannot)f(b)q(e)h
(inlined)f(in)g(standard)75 1046 y(F)m(ortran,)15 b(although)g(it)g(can)h(b)q
(e)g(inlined)f(in)g(C)g(and)g(in)g(F)m(ortran)h(systems)f(whic)o(h)h(supp)q
(ort)g(macro)e(expansion\).)75 1096 y(The)e(use)g(of)f(this)h(design)f(in)g
(replacemen)o(t)h(of)f Fo(MPI)p 873 1096 V 14 w(GET)p 968 1096
V 15 w(COUNT)p Fs(,)f(and)h(of)g(the)h(function)f Fo(MPI)p
1576 1096 V 15 w(GET)p 1672 1096 V 14 w(ELEMENT)75 1145 y Fs(of)i(section)i
(1.13.5)d(w)o(ould)h(require)i(to)e(delete)i(the)g Fo(datat)o(yp)q(e)g
Fs(argumen)o(t)e(from)f(the)i(function)g(call)f({)h(see)h(b)q(elo)o(w.)166
1196 y(The)j(use)g(of)f(a)h(datat)o(yp)q(e)g(argumen)o(t)e(in)h
Fo(MPI)p 916 1196 V 15 w(GET)p 1012 1196 V 14 w(COUNT)g Fs(is)h(somewhat)e
(inelegan)o(t.)29 b(On)18 b(the)g(other)75 1246 y(hand,)g(the)g(use)h(of)e(a)
g(datat)o(yp)q(e)h(argumen)o(t)f(is)g(rational)g(after)g(a)h(call)f(to)g
Fo(MPI)p 1358 1246 V 14 w(PROBE)p Fs(,)f(since)i(one)g(ma)o(y)e(not)75
1296 y(kno)o(w)f(the)g(datat)o(yp)q(e)g(of)g(the)h(incoming)c(data)j(when)h
(one)f(prob)q(es,)h(and)f(it)f(is)h(inelegan)o(t)g(and)g(time)e(consuming)75
1345 y(to)h(prob)q(e)g(m)o(ultiple)e(times,)g(with)i(a)g(datat)o(yp)q(e)g
(argumen)o(t,)e(with)h(a)h(call)f(to)h Fo(MPI)p 1361 1345 V
14 w(IPROBE)p Fs(.)166 1396 y(As)g(an)g(alternativ)o(e)g(to)f(the)i(curren)o
(t)g(design,)f(on)f(can)75 1446 y(1.)37 b(Rede\014ne)22 b(it)e(not)g(to)g
(require)i(a)e(datat)o(yp)q(e)g(argumen)o(t,)h(and)f(ha)o(v)o(e)g(a)g
(distinct)h(function)f(that)h(requires)75 1495 y(a)e(datat)o(yp)q(e)h
(argumen)o(t)f(to)g(use)i(after)e(prob)q(e)i(\(this)f(do)q(es)g(not)f(add)h
(an)o(y)f(real)h(o)o(v)o(erhead,)h(but)e(adds)h(a)g(new)75
1545 y(function\).)75 1595 y(2.)38 b(Replace)21 b(a)g(function)f(call)g(b)o
(y)h(an)f(access)j(to)d(status.coun)o(t)i(\(adds)f(a)f(division)g(and)h(a)f
(few)h(additional)75 1645 y(instructions)15 b(to)e(eac)o(h)i(receiv)o(e\),)g
(and)e(ha)o(v)o(e)h(the)g(curren)o(t)i Fo(MPI)p 1079 1645 V
14 w(GET)p 1174 1645 V 15 w(COUNT)d Fs(used)i(after)f(prob)q(e.)166
1695 y(The)h(sa)o(vings)f(from)f(ha)o(ving)h(a)g(datat)o(yp)q(e)h(argumen)o
(t)f(are)h(more)f(signi\014can)o(t)g(for)h Fo(MPI)p 1542 1695
V 14 w(GET)p 1637 1695 V 15 w(ELEMENTS)p Fs(,)75 1745 y(where)h(one)g(w)o
(ould)e(ha)o(v)o(e)h(otherwise)h(to)f(main)o(tain)e(a)i(running)f(elemen)o(t)
h(coun)o(t)h(when)f(a)g(message)g(is)g(receiv)o(ed.)75 1795
y(Also,)e(an)h(elemen)o(t)f(coun)o(t)h(is)g(less)h(lik)o(ely)d(to)i(b)q(e)g
(needed.)166 1852 y(An)o(y)g(app)q(etite)g(for)g(c)o(hanges?)75
2082 y Fz(1.4)59 b(Semantics)18 b(of)i(p)r(oint-to-p)r(oint)e(communication)
75 2185 y Fy(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 2241 y(m)o(unication,)e(whic)o(h)g(are)f(describ)q(ed)i(in)f(this)f
(section.)75 2365 y Ft(Order)46 b Fy(Messages)14 b(are)h Fp(non-overtaking)p
Fy(,)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 2421 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 2478 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 2534 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 2591 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 2647 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 2704 y(are)h(single-threaded)j(and)e
(wildcard)h Fo(MPI)p 831 2704 V 14 w(ANY)p 930 2704 V 15 w(SOURCE)d
Fy(is)i(not)f(used)h(in)h(receiv)o(es.)31 b(\(Some)19 b(of)f(the)-32
46 y Fw(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 Fy(8)636 b Fu(CHAPTER)16 b(1.)29 b(POINT)16 b(TO)f(POINT)h
(COMMUNICA)l(TION)75 49 y Fy(calls)22 b(describ)q(ed)h(later,)g(suc)o(h)e(as)
g Ft(MPI)p 771 49 14 2 v 16 w(CANCEL)g Fy(or)g Ft(MPI)p 1124
49 V 16 w(W)l(AIT)l(ANY)p Fy(,)h(are)f(additional)h(sources)f(of)75
106 y(nondeterminism.\),)166 162 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 219 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 275 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 332 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 388 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 444 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
501 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
557 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
614 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
734 y Ft(Progress)45 b Fy(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 790 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)75 847 y(system:)e(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 903 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
960 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 1079 y Ft(F)o(airness)46
b Fy(MPI)15 b(mak)o(es)g(no)g(guaran)o(tee)g(of)g Fp(fairness)f
Fy(in)i(the)g(handling)h(of)e(comm)o(unication.)21 b(Supp)q(ose)75
1136 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 1192 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 1249 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 1305 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 1362 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 1418 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 1475 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 1594
y Ft(Resource)e(lim)o(itations)44 b Fy(The)13 b(curren)o(t)f(practice)h(for)f
(man)o(y)g(commercial)i(message-passing)e(libraries)i(is)75
1651 y(that)f(\(short\))f(messages)h(are)g(bu\013ered)g(b)o(y)h(the)f
(system,)g(th)o(us)g(allo)o(wing)h(blo)q(c)o(king)h(send)f(op)q(erations)g
(to)75 1707 y(complete)d(ahead)f(of)g(the)h(matc)o(hing)f(receiv)o(es.)19
b(It)11 b(is)f(exp)q(ected)i(that)e(man)o(y)f(MPI)i(implemen)o(tations)g
(will)75 1764 y(follo)o(w)j(this)g(practice,)g(and)f(pro)o(vide)h(the)g(same)
f(lev)o(el)i(of)e(bu\013ering)h(that)f(is)h(a)o(v)m(ailable)h(on)f(the)f
(libraries)75 1820 y(they)21 b(replace.)37 b(Ho)o(w)o(ev)o(er,)20
b(message)g(bu\013ering)h(is)h(not)e(a)g(univ)o(ersal)i(practice.)36
b(Ev)o(en)21 b(on)f(systems)75 1877 y(where)e(bu\013ering)g(o)q(ccur,)g(the)f
(amoun)o(t)g(of)g(bu\013er)h(space)f(a)o(v)m(ailable)j(and)d(the)h(w)o(a)o(y)
e(it)i(is)g(allo)q(cated)g(is)75 1933 y(b)q(ound)e(to)f(b)q(e)h(implemen)o
(tation)g(dep)q(enden)o(t.)166 1990 y(Therefore,)d(message)h(bu\013ering)g
(is)g(not)f(mandated)h(b)o(y)f(MPI.)h(A)f(v)m(alid)j(MPI)d(implemen)o(tation)
i(of)75 2046 y Ft(MPI)p 160 2046 V 16 w(SEND)j Fy(is)g(to)f(blo)q(c)o(k)h
(the)f(sender)i(un)o(til)f(a)f(matc)o(hing)h(receiv)o(e)g(has)g(b)q(een)g
(initiated.)29 b(In)18 b(general,)75 2103 y(the)d(programmer)e(can)i(mak)o(e)
g(no)f(assumptions)h(on)g(the)g(a)o(v)m(ailabilit)o(y)i(of)d(bu\013er)h
(space,)f(and)h(ho)o(w)g(this)75 2159 y(space)g(is)g(allo)q(cated.)21
b(Th)o(us,)14 b(p)q(ortable)h(\(safe\))f(MPI)g(co)q(de)i(should)f(w)o(ork)f
(under)h(the)g(assumption)g(that)75 2215 y(an)g(arbitrary)g(subset)h(of)f
(the)h(send)g(op)q(erations)f(are)h(going)f(to)g(return)g(b)q(efore)h(a)f
(matc)o(hing)h(receiv)o(e)g(is)75 2272 y(p)q(osted,)f(and)g(the)h(rest)f
(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 2328 y(An)g(MPI)g(implemen)o(tation)h(will)g(pro)o(vide)f
(information)g(and)g(con)o(trol)f(on)h(the)g(amoun)o(t)f(of)g(a)o(v)m(ail-)75
2385 y(able)j(bu\013er)f(space)h(and)f(on)g(the)g(bu\013ering)h(p)q(olicy)h
(via)e(the)h(en)o(vironmen)o(tal)g(inquiries)h(describ)q(ed)g(in)75
2441 y(Chapter)c Fx(??)p Fy(.)166 2498 y(Examples)h(\(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 2554
y(The)f(follo)o(wing)h(program)e(is)i(safe,)f(and)g(should)h(alw)o(a)o(ys)f
(succeed.)75 2704 y Fr(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))1967
46 y Fw(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 Fu(1.5.)34 b(D)o(A)l(T)l(A)15 b(TYPE)g(MA)l(TCHING)1127
b Fy(9)75 49 y Fr(IF)24 b(\(rank.EQ.0\))123 106 y(THEN)170
162 y(CALL)g(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g(1,)h(tag,)f(comm,)g
(ierr\))170 219 y(CALL)h(MPI_RECV\(recvbuf,)d(count,)i(MPI_REAL,)g(1,)h(tag,)
f(comm,)g(status,)g(ierr\))123 275 y(ELSE)95 b(!)23 b(rank.EQ.1)170
332 y(CALL)h(MPI_RECV\(recvbuf,)d(count,)i(MPI_REAL,)g(0,)h(tag,)f(comm,)g
(status,)g(ierr\))170 388 y(CALL)h(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g
(0,)h(tag,)f(comm,)g(ierr\))75 444 y(END)g(IF)166 538 y Fy(The)15
b(follo)o(wing)h(program)e(is)i(erroneous,)f(and)g(should)h(alw)o(a)o(ys)f
(fail.)75 687 y Fr(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75
744 y(IF)h(\(rank.EQ.0\))123 800 y(THEN)170 857 y(CALL)g(MPI_RECV\(recvbuf,)d
(count,)i(MPI_REAL,)g(1,)h(tag,)f(comm,)g(status,)g(ierr\))170
913 y(CALL)h(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g(1,)h(tag,)f(comm,)g
(ierr\))123 970 y(ELSE)95 b(!)23 b(rank.EQ.1)170 1026 y(CALL)h
(MPI_RECV\(recvbuf,)d(count,)i(MPI_REAL,)g(0,)h(tag,)f(comm,)g(status,)g
(ierr\))170 1082 y(CALL)h(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g(0,)h
(tag,)f(comm,)g(ierr\))75 1139 y(END)g(IF)166 1232 y Fy(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 1289
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)75
1345 y(of)c(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
1401 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 1458 y(The)10
b(follo)o(wing)h(program)f(is)g(unsafe,)h(and)g(ma)o(y)e(succeed)j(or)e
(fail,)h(dep)q(ending)i(on)d(implemen)o(tation.)75 1620 y Fr(CALL)23
b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 1676 y(IF)h(\(rank.EQ.0\))123
1733 y(THEN)170 1789 y(CALL)g(MPI_SEND\(sendbuf,)d(count,)i(MPI_REAL,)g(1,)h
(tag,)f(comm,)g(ierr\))170 1846 y(CALL)h(MPI_RECV\(recvbuf,)d(count,)i
(MPI_REAL,)g(1,)h(tag,)f(comm,)g(status,)g(ierr\))123 1902
y(ELSE)95 b(!)23 b(rank.EQ.1)170 1958 y(CALL)h(MPI_SEND\(sendbuf,)d(count,)i
(MPI_REAL,)g(0,)h(tag,)f(comm,)g(ierr\))170 2015 y(CALL)h(MPI_RECV\(recvbuf,)
d(count,)i(MPI_REAL,)g(0,)h(tag,)f(comm,)g(status,)g(ierr\))75
2071 y(END)g(IF)166 2233 y Fy(The)11 b(message)g(sen)o(t)g(b)o(y)g(eac)o(h)g
(pro)q(cess)g(has)g(to)f(b)q(e)i(copied)g(out)f(b)q(efore)g(the)g(send)h(op)q
(eration)f(returns)75 2290 y(and)k(the)g(receiv)o(e)h(op)q(eration)f(starts.)
k(F)l(or)14 b(the)h(program)f(to)g(complete,)h(it)h(is)f(necessary)g(that)g
(at)f(least)75 2346 y(one)i(of)g(the)h(t)o(w)o(o)d(messages)i(sen)o(t)g(is)h
(bu\013ered.)23 b(Th)o(us,)16 b(this)h(program)e(can)i(succeed)g(only)g(if)g
(the)f(MPI)75 2403 y(implemen)o(tation)e(bu\013ers)f(messages,)g(and)g(the)g
(comm)o(unication)h(system)f(has)g(su\016cien)o(t)h(bu\013er)f(space)75
2459 y(to)i(bu\013er)g Ft(count)h Fy(w)o(ords)f(of)f(data.)75
2602 y Fz(1.5)59 b(Data)20 b(T)-5 b(yp)r(e)19 b(Matching)75
2704 y Fy(One)d(can)f(think)h(of)f(message)g(transmission)g(as)g(consisting)h
(of)f(three)g(phases:)-32 46 y Fw(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 Fy(10)613 b Fu(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)131 49 y Fy(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 142 y(2.)22 b(A)15 b(message)g(is)g(transferred)g(from)f
(sender)i(to)f(receiv)o(er)131 235 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 326 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 383 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 439 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 496
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 552 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 608 y(rules)j(is)g(erroneous.)166 665
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 721 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 778 y(of)h(t)o(yp)q(es)g(at)g(sender)g(and)h(receiv)o(er.)166
834 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 891 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 Ft(MPI)p
1500 891 14 2 v 16 w(INTEGER)12 b Fy(matc)o(hes)75 947 y Ft(MPI)p
160 947 V 16 w(INTEGER)p Fy(,)j Ft(MPI)p 475 947 V 16 w(REAL)h
Fy(matc)o(hes)30 b Ft(MPI)p 891 947 V 15 w(REAL)p Fy(,)16 b(and)f(so)g(on.)
166 1004 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
1060 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
1117 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 Ft(MPI)p
1449 1117 V 16 w(INTEGER)21 b Fy(matc)o(hes)e(a)75 1173 y(F)l(ortran)c(v)m
(ariable)j(of)f(t)o(yp)q(e)f Fr(INTEGER)p Fy(,)g(an)g(en)o(try)g(with)h(t)o
(yp)q(e)g(name)g Ft(MPI)p 1368 1173 V 16 w(REAL)g Fy(matc)o(hes)f(a)g(F)l
(ortran)75 1229 y(v)m(ariable)j(of)e(t)o(yp)q(e)g Fr(REAL)p
Fy(,)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 1286 y(t)o(yp)q(e)h(name)37
b Ft(MPI)p 408 1286 V 15 w(BYTE)19 b Fy(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
1342 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 1399 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(.)166 1455 y(W)l(e)f(th)o(us)g(ha)o(v)o(e)g(t)o(w)o(o)f(cases:)143
1547 y Fn(\017)23 b Fy(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 Ft(MPI)p 1586 1547 V 16 w(BYTE)p Fy(\),)11 b(where)189 1603
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
1659 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 1752 y Fn(\017)23 b Fy(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
Ft(MPI)p 1330 1752 V 16 w(BYTE)p Fy(\),)g(where)g(b)q(oth)g(sender)189
1809 y(and)g(receiv)o(er)h(use)f(the)g(datat)o(yp)q(e)g Ft(MPI)p
881 1809 V 15 w(BYTE)p Fy(.)h(In)f(this)h(case,)f(there)g(are)g(no)f
(requiremen)o(ts)i(on)189 1865 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 1922 y(it)h(required)h(that)f(they)g(b)q(e)h(the)f
(same.)166 2013 y(The)g(follo)o(wing)h(examples)g(illustrate)h(these)e(t)o(w)
o(o)f(cases.)166 2069 y(First)h(program:)75 2161 y Fr(CALL)23
b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 2217 y(IF\(rank.EQ.0\))123
2274 y(THEN)170 2330 y(CALL)h(MPI_SEND\(a\(1\),)e(10,)h(MPI_REAL,)g(1,)g
(tag,)h(comm,)f(ierr\))123 2386 y(ELSE)170 2443 y(CALL)h(MPI_RECV\(a\(1\),)e
(15,)h(MPI_REAL,)g(0,)g(tag,)h(comm,)f(status,)g(ierr\))75
2499 y(END)g(IF)166 2591 y Fy(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 2647 y(storage)14 b(for)h(ten)g(real)g(n)o(um)o(b)q(ers,)g
(starting)g(from)f Ft(a\(1\))p Fy(.)166 2704 y(Second)i(program:)1967
46 y Fw(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 Fu(1.5.)34 b(D)o(A)l(T)l(A)15 b(TYPE)g(MA)l(TCHING)1105
b Fy(11)75 49 y Fr(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75
106 y(IF\(rank.EQ.0\))123 162 y(THEN)170 219 y(CALL)h(MPI_SEND\(a\(1\),)e
(10,)h(MPI_REAL,)g(1,)g(tag,)h(comm,)f(ierr\))123 275 y(ELSE)170
332 y(CALL)h(MPI_RECV\(a\(1\),)e(40,)h(MPI_BYTE,)g(0,)g(tag,)h(comm,)f
(status,)g(ierr\))75 388 y(END)g(IF)166 486 y Fy(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 542 y(argumen)o(ts.)166 600
y(Third)d(program:)75 699 y Fr(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h
(ierr\))75 755 y(IF\(rank.EQ.0\))123 812 y(THEN)170 868 y(CALL)h
(MPI_SEND\(a\(1\),)e(40,)h(MPI_BYTE,)g(1,)g(tag,)h(comm,)f(ierr\))123
925 y(ELSE)170 981 y(CALL)h(MPI_RECV\(a\(1\),)e(60,)h(MPI_BYTE,)g(0,)g(tag,)h
(comm,)f(status,)g(ierr\))75 1037 y(END)g(IF)166 1135 y Fy(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
Ft(a\(1\))g Fy(and)i(follo)o(wing)g(v)m(ariables)g(in)g(store.)189
1247 y Fp(A)n(dvic)n(e)11 b(to)h(users.)56 b Fy(If)11 b(a)g(bu\013er)f(of)h
(t)o(yp)q(e)f Fo(MPI)p 974 1247 13 2 v 15 w(BYTE)g Fy(is)h(passed)g(as)f(an)h
(argumen)o(t)f(to)g Ft(MPI)p 1732 1247 14 2 v 16 w(SEND)p Fy(,)69
b Fm(\()189 1303 y Fy(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
1360 y(indicated)22 b(b)o(y)e(the)h Ft(buf)g Fy(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)189 1416 y(la)o(y)o(out)12 b(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 1473 y(a)e(F)l(ortran)f Fo(CHARA)o(CTER)g
Fy(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 1529 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 1585 y Fo(CHARA)o(CTER)f Fy(v)m(ariable)j
(using)g(the)f Fo(MPI)p 907 1585 13 2 v 15 w(BYTE)f Fy(will)j(not)e(ha)o(v)o
(e)f(the)i(an)o(ticipated)g(result.)32 b(F)l(or)189 1642 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 Fp(End)189
1698 y(of)16 b(advic)n(e)g(to)h(users.)p Fy(\))75 1826 y Fq(1.5.1)49
b(T)l(yp)q(e)17 b Fo(MPI)p 417 1826 V 14 w(CHARA)o(CTER)75
1914 y Fy(The)23 b(t)o(yp)q(e)11 b Fo(MPI)p 351 1914 V 14 w(CHARA)o(CTER)f
Fy(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 Fy(.)67 b Fm(\()75 1970 y Fy(F)l(ortran)12
b(v)m(ariables)j(of)e(t)o(yp)q(e)h Fo(CHARA)o(CTER)e Fy(or)h(substrings)h
(are)f(transferred)g(as)g(if)h(they)g(w)o(ere)f(arra)o(ys)f(of)75
2027 y(c)o(haracters.)18 b(The)c Ft(buf)f Fy(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
2083 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
2195 y Fr(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,)e(5,)i
(MPI_CHARACTER,)e(1,)h(tag,)h(comm,)f(ierr\))123 2591 y(ELSE)170
2647 y(CALL)h(MPI_RECV\(b\(6:10\),)d(5,)j(MPI_CHARACTER,)e(0,)h(tag,)h(comm,)
f(status,)g(ierr\))75 2704 y(END)g(IF)-32 46 y Fw(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 Fy(12)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y Fy(The)e(last)h(\014v)o(e)f(c)o
(haracters)g(of)f(string)i Fo(b)f Fy(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 Fy(at)g(pro)q(cess)g(0.)166 245 y Fl(Implemen)o(tati)o(on)10
b(note:)33 b Fs(Some)10 b(compilers)h(pass)h(F)m(ortran)f Fo(CHARA)o(CTER)f
Fs(argumen)o(ts)h(as)h(a)f(structure)75 301 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
358 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 558 y Ft(Alternative)i(De\014nition)75 644 y Fy(The)h(t)o(yp)q(e)
g Fo(MPI)p 351 644 13 2 v 14 w(CHARA)o(CTER)e Fy(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 Fy(or)h(a)h(substring)75
700 y(of)h(arbitrary)f(length.)30 b(Th)o(us,)19 b(suc)o(h)f(c)o(haracter)g
(is)h(sen)o(t)f(b)o(y)g(sp)q(ecifying)i Ft(t)o(yp)q(e)f(=)g(MPI)p
1596 700 14 2 v 16 w(CHARA)o(CTER)75 757 y Fy(and)c Ft(count)i(=)e(1)p
Fy(.)20 b(This)c(is)f(illustrated)i(in)f(the)f(example)h(b)q(elo)o(w.)75
846 y Fr(CHARACTER*10)22 b(a)75 902 y(CHARACTER*10)g(b)75 1015
y(CALL)h(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 1072 y(IF\(rank.EQ.0\))123
1128 y(THEN)170 1184 y(CALL)h(MPI_SEND\(a\(1:5\),)d(1,)j(MPI_CHARACTER,)e(1,)
i(tag,)f(comm,)g(ierr\))123 1241 y(ELSE)170 1297 y(CALL)h
(MPI_RECV\(b\(6:10\),)d(1,)j(MPI_CHARACTER,)e(0,)h(tag,)h(comm,)f(status,)g
(ierr\))75 1354 y(END)g(IF)166 1443 y Fy(The)14 b(last)h(\014v)o(e)f(c)o
(haracters)g(of)f(string)i Fo(b)f Fy(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 1499
y(of)g(string)g Fo(a)g Fy(at)g(pro)q(cess)g(0.)166 1556 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 1612 y(in)21 b(the)f(receiv)o(e)g
(bu\013er)g(are)g(handled)h(as)e(in)i(F)l(ortran)e(c)o(haracter)g(assignmen)o
(ts)g(\(blank)i(padding)f(or)75 1669 y(truncation\).)166 1801
y Fl(Implemen)o(tati)o(on)13 b(note:)37 b Fs(F)m(ortran)14
b(passes)i(information)c(on)i(c)o(haracter)h(length)g(together)g(with)f(c)o
(har-)75 1851 y(acter)j(argumen)o(ts.)24 b(Some)14 b(compilers)h(pass)i(the)f
(c)o(haracter)i(length)e(via)f(an)h(additional)e(\\hidden")i(argumen)o(t;)75
1901 y(other)d(pass)f(a)g(c)o(haracter)i(argumen)o(t)d(as)h(a)g(structure)i
(with)e(a)g(length)g(\014eld)g(and)g(a)g(p)q(oin)o(ter)h(to)f(the)h(actual)e
(string.)75 1950 y(The)k(MPI)f(send)h(call)f(needs)h(to)f(access)i(the)f
(length)f(information)e(for)i(the)h Fo(buf)f Fs(c)o(haracter)i(argumen)o(t)d
(and)h(send)75 2000 y(it)f(together)h(with)e(the)i(actual)e(string;)h(the)h
(MPI)f(receiv)o(e)h(call)e(needs)j(to)e(compare)f(the)h(length)g(of)g(the)g
(incoming)75 2050 y(c)o(haracter)i(with)f(the)g(length)g(of)f(the)i
Fo(buf)f Fs(c)o(haracter)i(argumen)o(t)c(and)i(pad)g(or)g(truncate,)g(as)g
(is)g(the)h(case.)166 2107 y(F)m(or)e(non)o(blo)q(c)o(king)f(comm)o
(unication)e(or)k(p)q(ersisten)o(t)h(handles,)e(the)h(comm)o(unication)c
(initiating)i(call)h(needs)75 2163 y(to)e(retriev)o(e)i(the)f(c)o(haracter)h
(length)f(information)c(and)k(bu\013er)g(it)f(in)o(ternally)m(.)16
b(\(Since)d(the)f(storage)g(for)f(the)h(length)75 2219 y(\014eld)j(in)f(a)h
(c)o(haracter)h(argumen)o(t)e(is)g(not)h(explicitly)f(allo)q(cated)g(b)o(y)h
(the)g(F)m(ortran)g(program,)e(the)i(compiler)f(ma)o(y)75 2276
y(reuse)j(this)f(storage)g(ev)o(en)h(if)e(the)h(user)h(do)q(es)g(not)e(mo)q
(dify)f(the)i(corresp)q(onding)h(actual)e(c)o(haracter)i(argumen)o(t.\))75
2332 y(E\013ectiv)o(ely)m(,)10 b(the)h(MPI)f(call)f(has)i(to)e(compute)h(and)
g(bu\013er)h(a)e(\\deriv)o(ed)h(datat)o(yp)q(e")g(that)g(describ)q(es)j(this)
d(c)o(haracter)75 2389 y(v)n(ariable.)166 2604 y Fl(Discussion:)55
b Fs(Please)19 b(advise)h(on)e(a)h(c)o(hoice)h(b)q(et)o(w)o(een)g(the)g(t)o
(w)o(o)f(de\014nitions.)33 b(The)20 b(second)g(is)f(more)75
2654 y(elegan)o(t,)12 b(and)f(more)g(in)g(tune)h(with)g(F)m(ortran)f(seman)o
(tics)h(for)f(c)o(haracter)i(strings)f(\(they)g(are)h(scalars...\).)j(The)c
(\014rst)75 2704 y(is)i(closer)g(to)g(the)h(C)e(de\014nition)h(and)g(easier)g
(to)g(implemen)o(t.)1967 46 y Fw(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 Fu(1.6.)34 b(D)o(A)l(T)l(A)15 b(CONVERSION)1197
b Fy(13)166 49 y Fs(Please)17 b(also)e(c)o(hec)o(k)i(for)e(hidden)h(pitfalls)
f(with)g(y)o(our)h(compiler)e(of)i(c)o(hoice.)24 b(Do)q(es)17
b(ev)o(erything)f(w)o(ork)f(OK)75 99 y(with)f(substrings?)19
b(with)13 b(arra)o(ys)h(of)f(c)o(haracters?)166 156 y(The)i(de\014nitions)g
(also)f(extend)i(to)f(the)h(construction)f(of)g(deriv)o(ed)g(datat)o(yp)q
(es.)22 b(One)15 b(needs)i(to)d(de\014ne)i(the)75 213 y(exten)o(t)d(of)e(a)g
(c)o(haracter)i(correctly)g(\(one)f(b)o(yte,)g(in)f(the)h(\014rst)h(in)o
(terpretation,)f(string-length)f(b)o(ytes)h(in)g(the)g(second)75
269 y(one\);)j(one)g(needs)h(to)f(retriev)o(e)h(the)f(string)g(lo)q(cation)f
(and)g(\(in)h(the)g(second)h(in)o(terpretation\))f(the)h(string)e(length,)75
326 y(in)f(order)i(to)f(build)f(the)h(righ)o(t)g(deriv)o(ed)g(datat)o(yp)q(e)
g(represen)o(tation.)75 556 y Fz(1.6)59 b(Data)20 b(conversion)75
659 y Fy(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 715
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
772 y(W)l(e)g(use)h(the)f(follo)o(wing)h(terminology:)75 869
y Fx(t)o(yp)q(e)h(con)o(v)o(ersion)22 b Fy(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
Ft(REAL)h Fy(to)f(an)g Ft(INTE-)189 926 y(GER)p Fy(.)75 1022
y Fx(represen)o(tation)h(con)o(v)o(ersion)22 b Fy(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 1079 y(\015oating)f(p)q(oin)o(t)g(to)g(IEEE)g(\015oating)
h(p)q(oin)o(t.)166 1176 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 1232 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 1289 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
1345 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 1401 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 1458 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.)166 1515 y(Ov)o(er\015o)o(w)c(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 1572 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 1628 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 1684 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
1741 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 1798 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
Ft(MPI)p 1370 1798 14 2 v 15 w(BYTE)p Fy(\),)g(then)g(the)f(binary)75
1855 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 1911 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 1967 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
2025 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 2081 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
2138 y(of)e Ft(MPI)p 210 2138 V 15 w(BYTE)h Fy(and)f(of)g Ft(MPI)p
575 2138 V 15 w(CHAR)p Fy(.)h(A)f(bu\013er)g(descriptor)g(en)o(try)g(with)g
(datat)o(yp)q(e)g(of)f Ft(MPI)p 1660 2138 V 16 w(CHAR)i Fy(can)75
2194 y(only)f(matc)o(h)f(a)g(C)g(v)m(ariable)i(of)e(t)o(yp)q(e)h
Fr(CHAR)p Fy(;)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 2250 y(of)g(t)o(yp)q(e)h Ft(MPI)p
311 2250 V 15 w(CHAR)h Fy(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 2308 y(Consider)h(the)f
(previous)h(three)f(examples)h(on)f(page)g(10.)166 2365 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 2421 y(real)20 b(v)m(ariables)h(in)g
(storage)e(starting)g(at)g Ft(a\(1\))p Fy(.)33 b(If)20 b(the)g(sender)g(and)g
(receiv)o(er)h(execute)f(in)h(di\013eren)o(t)75 2478 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 2534
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
2591 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 2647 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 2704 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)-32 46 y Fw(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 Fy(14)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fy(b)o(yte)h(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 106 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 162 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 219 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 275 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 332 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 388 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 444 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 501 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 557 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 614 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 670 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 803
y Fl(Implemen)o(tati)o(on)11 b(note:)36 b Fs(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 853 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 902 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 952 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 1002 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 1052 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
1102 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 1158 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 1215 y(tion.)166 1354 y Fy(The)20 b(curren)o(t)g(draft)f(do)q(es)
h(not)g(pro)o(vide)g(a)g(mec)o(hanism)h(for)e(in)o(ter-language)i(comm)o
(unication:)75 1410 y(messages)d(sen)o(t)h(b)o(y)f(F)l(ortran)g(calls)i
(should)f(b)q(e)h(receiv)o(ed)g(b)o(y)e(F)l(ortran)g(calls)h(and)g(messages)g
(sen)o(t)f(b)o(y)75 1467 y(C)e(calls)g(should)h(b)q(e)g(receiv)o(ed)g(b)o(y)e
(C)h(calls)h(\(this)f(follo)o(ws)f(from)h(the)f(requiremen)o(ts)i(of)e(t)o
(yp)q(e)h(matc)o(hing)75 1523 y(and)g(the)h(fact)f(that)f(F)l(ortran)g(and)i
(C)f(datat)o(yp)q(es)g(are)g(distinct\).)24 b(If)16 b(in)o(ter-language)h
(comm)o(unication)75 1579 y(is)g(needed)i(then)e(one)g(needs)h(to)e(in)o(v)o
(ok)o(e)h(C)f(comm)o(unication)i(routines)f(from)f(a)h(F)l(ortran)f(program)f
(or)75 1636 y(F)l(ortran)f(comm)o(unication)i(routines)g(from)e(a)h(C)g
(program.)189 1739 y Fp(R)n(ationale.)46 b Fy(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 1796 y(to)h(b)q(e)i(no)f(agreed)h(standards)e(for)h(in)o(ter-language)h
(t)o(yp)q(e)f(con)o(v)o(ersions.)32 b(The)20 b(curren)o(t)f(design)189
1852 y(means)13 b(that)g(in)o(ter-language)i(comm)o(unication)f(relies)h(on)f
(the)g(v)o(endor)f(sp)q(eci\014c)j(rules)e(for)g(in)o(ter-)189
1909 y(language)h(calls)h(at)f(eac)o(h)g(site.)20 b(\()p Fp(End)c(of)g(r)n
(ationale.)p Fy(\))166 2094 y Fl(Discussion:)53 b Fs(Do)13
b(w)o(e)h(w)o(an)o(t)g(to)g(sp)q(ecify)g(\(at)g(least\))h(that)f(messages)g
(of)f(t)o(yp)q(e)i Fo(MPI)p 1535 2094 13 2 v 14 w(BYTE)e Fs(can)i(b)q(e)f
(sen)o(t)-1903 b Fk(\))75 2151 y Fs(across)14 b(languages?)k(This)13
b(still)g(requires)h(to)f(agree)h(on)g(the)g(corresp)q(ondence)i(b)q(et)o(w)o
(een)f(the)f(in)o(teger)g(t)o(yp)q(es)g(used)75 2207 y(for)g(tag)f(and)h
(source/destination,)g(and)g(on)f(the)i(represen)o(tation)g(of)f(con)o(text)g
(information.)75 2433 y Fz(1.7)59 b(Communication)17 b(Mo)r(des)75
2534 y Fy(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 Fx(standard)g Fy(comm)o(unication)h(mo)q(de.)75
2591 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
2647 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
2704 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)1967 46 y Fw(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 Fu(1.7.)34 b(COMMUNICA)l(TION)16 b(MODES)1048
b Fy(15)75 49 y(the)18 b(sender)h(bu\013er.)30 b(Th)o(us,)18
b(the)h(op)q(eration)f(is)h Fx(lo)q(cally-blo)r(c)o(king)p
Fy(:)29 b(it)19 b(do)q(es)f(not)g(return)g(un)o(til)i(the)75
106 y(send)c(op)q(eration)f(has)g(completed)h Fx(lo)q(cally)p
Fy(,)i(on)d(the)g(sender)h(side.)166 163 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 220 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 276 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 333 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 389 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 446 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 502 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 560 y(There)h(are)g(t)o(w)o(o)f(additional)j(comm)o
(unication)f(mo)q(des:)166 617 y(A)e(send)h(that)e(uses)h(the)g
Fx(ready)g Fy(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 674 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 730 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 787 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 843 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
900 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
956 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
1013 y(where)15 b(a)g(regular)h(send)f(can)h(b)q(e)g(used.)166
1070 y(A)i(send)g(that)f(uses)g(the)h Fx(sync)o(hronous)e Fy(mo)q(de)i(can)g
(b)q(e)g(started)f(whether)g(or)g(not)h(a)f(matc)o(hing)75
1127 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 1183 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 1240 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 1296 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 1352 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 1409 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 1465 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 1522 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)75
1578 y(b)q(efore)12 b(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
1635 y(is)16 b(a)f Fx(global)i Fy(ev)o(en)o(t,)d(and)h(the)h(op)q(eration)f
(is)h Fx(globally-blo)q(cking)p Fy(.)166 1692 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 1749 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 Ft(R)22 b Fy(for)f(ready)g(and)75 1805 y Ft(S)15 b Fy(for)g(sync)o
(hronous.)166 1863 y(Send)h(in)g(ready)f(mo)q(de)75 1968 y
Ft(MPI)p 160 1968 14 2 v 16 w(RSEND)h(\(buf,)f(count,)h(datat)o(yp)q(e,)h
(dest,)f(tag,)f(comm)m(\))117 2046 y Fs(IN)155 b Ft(buf)527
b Fs(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))117
2124 y(IN)155 b Ft(count)482 b Fs(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 2201 y(IN)155 b Ft(datat)o(yp)q(e)424
b Fs(datat)o(yp)q(e)14 b(of)g(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)e
(\(handle\))117 2279 y(IN)155 b Ft(dest)511 b Fs(rank)14 b(of)f(destination)h
(\(in)o(teger\))117 2356 y(IN)155 b Ft(tag)526 b Fs(message)14
b(tag)f(\(in)o(teger\))117 2434 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)
11 b(\(handle\))75 2559 y Fr(int)23 b(MPI)p 245 2559 15 2 v
17 w(Rsend\(void*)g(buf,)g(int)g(count,)g(MPI)p 1002 2559 V
17 w(Datatype)g(datatype,)g(int)g(dest,)393 2616 y(int)h(tag,)f(MPI)p
683 2616 V 17 w(Comm)g(comm\))75 2704 y(MPI)p 150 2704 V 17
w(RSEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(TAG,)g(COMM,)h(IERROR\))-32
46 y Fw(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 Fy(16)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)170 49 y Fr(<type>)23 b(BUF\(*\))170
106 y(INTEGER)g(COUNT,)g(DATATYPE,)g(DEST,)g(TAG,)h(COMM,)f(IERROR)166
192 y Fy(Send)16 b(in)g(sync)o(hronous)f(mo)q(de)75 296 y Ft(MPI)p
160 296 14 2 v 16 w(SSEND)h(\(buf,)f(count,)h(datat)o(yp)q(e,)g(dest,)h(tag,)
e(comm)m(\))117 373 y Fs(IN)155 b Ft(buf)527 b Fs(initial)12
b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))117 446 y(IN)155
b Ft(count)482 b Fs(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 520 y(IN)155 b Ft(datat)o(yp)q(e)424
b Fs(datat)o(yp)q(e)14 b(of)g(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)e
(\(handle\))117 593 y(IN)155 b Ft(dest)511 b Fs(rank)14 b(of)f(destination)h
(\(in)o(teger\))117 666 y(IN)155 b Ft(tag)526 b Fs(message)14
b(tag)f(\(in)o(teger\))117 739 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)11
b(\(handle\))75 864 y Fr(int)23 b(MPI)p 245 864 15 2 v 17 w(Ssend\(void*)g
(buf,)g(int)g(count,)g(MPI)p 1002 864 V 17 w(Datatype)g(datatype,)g(int)g
(dest,)393 920 y(int)h(tag,)f(MPI)p 683 920 V 17 w(Comm)g(comm\))75
1007 y(MPI)p 150 1007 V 17 w(SSEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(TAG,)
g(COMM,)h(IERROR\))170 1063 y(<type>)f(BUF\(*\))170 1120 y(INTEGER)g(COUNT,)g
(DATATYPE,)g(DEST,)g(TAG,)h(COMM,)f(IERROR)166 1206 y Fy(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 1263
y(op)q(eration)g(describ)q(ed)h(in)g(the)e(last)h(section)g(is)g
Fx(blo)q(c)o(king)p Fy(:)22 b(it)16 b(returns)f(only)h(after)f(the)h(receiv)o
(e)g(bu\013er)75 1319 y(con)o(tains)h(the)h(newly)g(receiv)o(ed)g(message.)26
b(It)17 b(is)h Fx(async)o(hronous)p Fy(:)23 b(the)17 b(completion)i(of)d(a)h
(receiv)o(e)h(is)75 1375 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 1432 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 1488 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 1545 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)75 1601 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 1658 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 1714 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 1771 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 1827 y(w)o(as)f(started.)166 1884 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 1940 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 1996 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 2053 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 2109 y(computation)f(is)h(unde\014ned.)189 2202 y
Fp(R)n(ationale.)61 b Fy(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
2259 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
2315 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 2372
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
2428 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 2485
y(the)e(main)h(pro)q(cessor.)j(\()p Fp(End)d(of)g(r)n(ationale.)p
Fy(\))166 2654 y Fl(Implemen)o(tati)o(on)10 b(note:)34 b Fs(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 2704 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.)1967 46 y Fw(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 Fu(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b Fy(17)166 49 y Fs(A)13 b(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 99 y(is)g(needed.)166 158 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 216 y Fo(ready)i(send)p
Fs(:)k(The)14 b(message)g(is)g(sen)o(t)h(as)e(so)q(on)h(as)g(p)q(ossible.)166
274 y Fo(synchronous)f(send:)18 b Fs(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 324 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 374 y(sender)h(no)o(w)f(sends)h(the)g(message.)166
432 y Fo(standa)o(rd)k(send:)27 b Fs(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
482 y(messages.)166 541 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 591 y(there)f(are)f(man)o(y)f(other)h(p)q(ossible)
g(proto)q(cols.)75 866 y Fz(1.8)59 b(Nonblo)r(cking)20 b(communication)75
984 y Fy(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
1040 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
1097 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 1153 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 1210 y(p)q(erformance)e(is)g(to)f(use)h Fx(non)o(blo)q(c)o(king)j
(comm)o(unication)p Fy(.)32 b(A)19 b(non)o(blo)q(c)o(king)h(send)f(call)h
(initiates)75 1266 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 1323 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 1379 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 1436 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
1492 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
1549 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 1605 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)75 1661 y(complete)f(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 1718 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 1774 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 1831 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 1887 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 1952 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 Ft(standa)o(rd)p
Fy(,)13 b Ft(ready)f Fy(and)75 2009 y Ft(synchronous)p Fy(.)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 2065 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 2122 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 2178 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 2235 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 2291 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 2348 y(send)j(op)q(eration.)166
2413 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
2469 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
2526 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
2582 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
2639 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 2704 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.)-32 46 y Fw(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 Fy(18)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fq(1.8.1)49 b(Comm)o(unication)14
b(Objects)75 184 y Fy(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 241 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
297 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
354 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 410 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
466 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
523 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
579 y(p)q(erformed)i(with)h(this)g(ob)s(ject.)75 846 y Fq(1.8.2)49
b(Comm)o(unication)14 b(initiation)75 981 y Fy(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 Ft(R)h Fy(\()p Ft(S)p
Fy(\))75 1037 y(is)f(used)f(for)f Ft(READ)o(Y)i Fy(\()p Ft(SYNCHRONOUS)p
Fy(\))h(mo)q(de.)32 b(In)20 b(addition)g(a)e(pre\014x)i(of)e
Ft(I)h Fy(\(for)f Ft(IMMEDIA)l(TE)p Fy(\))75 1093 y(indicates)f(that)d(the)h
(call)i(is)e(non)o(blo)q(c)o(king.)166 1175 y(Initiate)h(a)f(standard)g(mo)q
(de)g(non)o(blo)q(c)o(king)i(send.)75 1304 y Ft(MPI)p 160 1304
14 2 v 16 w(ISEND\(buf,)e(count,)h(datat)o(yp)q(e,)h(dest,)f(tag,)f(comm)m(,)
d(request\))117 1407 y Fs(IN)155 b Ft(buf)527 b Fs(initial)12
b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))117 1532 y(IN)155
b Ft(count)482 b Fs(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 1658 y(IN)155 b Ft(datat)o(yp)q(e)424
b Fs(datat)o(yp)q(e)14 b(of)g(eac)o(h)g(send)h(bu\013er)g(elemen)o(t)e
(\(handle\))117 1784 y(IN)155 b Ft(dest)511 b Fs(rank)14 b(of)f(destination)h
(\(in)o(teger\))117 1910 y(IN)155 b Ft(tag)526 b Fs(message)14
b(tag)f(\(in)o(teger\))117 2035 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)
11 b(\(handle\))117 2161 y(OUT)108 b Ft(request)452 b Fs(comm)o(unication)11
b(request)k(\(handle\))75 2311 y Fr(int)23 b(MPI)p 245 2311
15 2 v 17 w(Isend\(void*)g(buf,)g(int)g(count,)g(MPI)p 1002
2311 V 17 w(Datatype)g(datatype,)g(int)g(dest,)393 2367 y(int)h(tag,)f(MPI)p
683 2367 V 17 w(Comm)g(comm,)g(MPI)p 1034 2367 V 17 w(Comm)p
1147 2367 V 17 w(request)g(*request\))75 2479 y(MPI)p 150 2479
V 17 w(ISEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g(TAG,)g(COMM,)h(REQUEST,)e
(IERROR\))170 2535 y(<type>)h(BUF\(*\))170 2592 y(INTEGER)g(COUNT,)g
(DATATYPE,)g(DEST,)g(TAG,)h(COMM,)f(REQUEST,)f(IERROR)166 2704
y Fy(Initiate)16 b(a)f(ready)g(mo)q(de)h(non)o(blo)q(c)o(king)g(send.)1967
46 y Fw(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 Fu(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b Fy(19)75 49 y Ft(MPI)p 160 49 14 2 v 16 w(IRSEND\(buf,)16
b(count,)g(datat)o(yp)q(e,)g(dest,)g(tag,)f(comm)m(,)d(request\))117
143 y Fs(IN)155 b Ft(buf)527 b Fs(initial)12 b(address)j(of)f(send)g
(bu\013er)h(\(c)o(hoice\))117 253 y(IN)155 b Ft(count)482 b
Fs(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 Ft(datat)o(yp)q(e)424 b Fs(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 Ft(dest)511 b Fs(rank)14 b(of)f(destination)h(\(in)o(teger\))
117 580 y(IN)155 b Ft(tag)526 b Fs(message)14 b(tag)f(\(in)o(teger\))117
689 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)11 b(\(handle\))117
798 y(OUT)108 b Ft(request)452 b Fs(comm)o(unication)11 b(request)k
(\(handle\))75 940 y Fr(int)23 b(MPI)p 245 940 15 2 v 17 w(Irsend\(void*)f
(buf,)i(int)f(count,)g(MPI)p 1026 940 V 17 w(Datatype)g(datatype,)f(int)i
(dest,)393 996 y(int)g(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(IRSEND\(BUF,)f(COUNT,)h(DATATYPE,)g(DEST,)g
(TAG,)g(COMM,)g(REQUEST,)g(IERROR\))170 1156 y(<type>)g(BUF\(*\))170
1213 y(INTEGER)g(COUNT,)g(DATATYPE,)g(DEST,)g(TAG,)h(COMM,)f(REQUEST,)f
(IERROR)166 1316 y Fy(Initiate)16 b(a)f(sync)o(hronous)g(mo)q(de)h(non)o(blo)
q(c)o(king)g(send.)75 1437 y Ft(MPI)p 160 1437 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
1531 y Fs(IN)155 b Ft(buf)527 b Fs(initial)12 b(address)j(of)f(send)g
(bu\013er)h(\(c)o(hoice\))117 1640 y(IN)155 b Ft(count)482
b Fs(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 Ft(datat)o(yp)q(e)424 b Fs(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 Ft(dest)511 b Fs(rank)14 b(of)f(destination)h(\(in)o(teger\))
117 1968 y(IN)155 b Ft(tag)526 b Fs(message)14 b(tag)f(\(in)o(teger\))117
2077 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)11 b(\(handle\))117
2186 y(OUT)108 b Ft(request)452 b Fs(comm)o(unication)11 b(request)k
(\(handle\))75 2327 y Fr(int)23 b(MPI)p 245 2327 15 2 v 17
w(Issend\(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(ISSEND\(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 Fy(Initiate)16 b(a)f(non)o(blo)q(c)o(king)i(receiv)o(e.)-32
46 y Fw(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 Fy(20)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Ft(MPI)p 160 49 14
2 v 16 w(IRECV)f(\(buf,)h(count,)g(datat)o(yp)q(e,)g(source,)g(tag,)e(comm)n
(,)d(request\))117 127 y Fs(OUT)108 b Ft(buf)527 b Fs(initial)12
b(address)j(of)f(receiv)o(e)h(bu\013er)g(\(c)o(hoice\))117
204 y(IN)155 b Ft(count)482 b Fs(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 281 y(IN)155 b
Ft(datat)o(yp)q(e)424 b Fs(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 357 y(IN)155 b Ft(source)468
b Fs(rank)14 b(of)f(source)j(\(in)o(teger\))117 434 y(IN)155
b Ft(tag)526 b Fs(message)14 b(tag)f(\(in)o(teger\))117 511
y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)11 b(\(handle\))117
587 y(OUT)108 b Ft(request)452 b Fs(comm)o(unication)11 b(request)k
(\(handle\))75 713 y Fr(int)23 b(MPI)p 245 713 15 2 v 17 w(Irecv\(void*)g
(buf,)g(int)g(count,)g(MPI)p 1002 713 V 17 w(Datatype)g(datatype,)g(int)g
(source,)393 769 y(int)h(tag,)f(MPI)p 683 769 V 17 w(Comm)g(comm,)g(MPI)p
1034 769 V 17 w(Comm)p 1147 769 V 17 w(request)g(*request\))75
856 y(MPI)p 150 856 V 17 w(IRECV\(BUF,)f(COUNT,)h(DATATYPE,)g(SOURCE,)g(TAG,)
g(COMM,)g(REQUEST,)g(IERROR\))170 913 y(<type>)g(BUF\(*\))170
969 y(INTEGER)g(COUNT,)g(DATATYPE,)g(SOURCE,)g(TAG,)g(COMM,)g(REQUEST,)g
(IERROR)166 1056 y Fy(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 1113 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 1170 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 1227 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 1283 y(send)f(op)q(eration)f(is)h(called,)g(un)o(til)h(the)e
(send)h(completes.)166 1340 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 1397 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 1453 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.)75
1579 y Fq(1.8.3)49 b(Comm)o(unication)14 b(Completion)75 1667
y Fy(The)j(functions)g Ft(MPI)p 452 1667 14 2 v 16 w(W)l(AIT)f
Fy(and)g Ft(MPI)p 768 1667 V 16 w(TEST)h Fy(are)f(used)h(to)f(complete)h(a)f
(non)o(blo)q(c)o(king)h(comm)o(unica-)75 1723 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 1780
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
1836 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 1892 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 Ft(synchronous)i Fy(mo)q(de)f(send)g(w)o
(as)75 1949 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
2005 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 2063 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 2119 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 2176 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 2232 y(indicates,)e(of)f(course,)g
(that)f(the)i(send)f(w)o(as)g(initiated\).)75 2336 y Ft(MPI)p
160 2336 V 16 w(W)l(AIT\(request,)h(status\))117 2414 y Fs(INOUT)62
b Ft(request)452 b Fs(comm)o(unication)11 b(request)k(\(handle\))117
2491 y(OUT)108 b Ft(status)476 b Fs(status)15 b(ob)r(ject)g(\(Status\))75
2616 y Fr(int)23 b(MPI)p 245 2616 15 2 v 17 w(Wait\(MPI)p 454
2616 V 16 w(Comm)p 566 2616 V 17 w(request)g(*request,)f(MPI)p
1084 2616 V 17 w(Status)h(*status\))75 2704 y(MPI)p 150 2704
V 17 w(WAIT\(REQUEST,)f(STATUS,)h(IERROR\))1967 46 y Fw(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 Fu(1.8.)29 b(NONBLOCKING)17 b(COMMUNICA)l(TION)868
b Fy(21)170 49 y Fr(INTEGER)23 b(REQUEST,)g(STATUS\(MPI)p 819
49 15 2 v 16 w(STATUS)p 979 49 V 16 w(SIZE\),)g(IERROR)166
136 y Fy(A)14 b(call)h(to)f Ft(MPI)p 436 136 14 2 v 15 w(W)l(AIT)h
Fy(returns)e(when)i(the)f(send)h(op)q(eration)f(iden)o(ti\014ed)i(b)o(y)e
Ft(request)i Fy(is)f(complete.)75 192 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 249 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 Ft(MPI)p 1431 249 V 16 w(W)l(AIT)13 b Fy(and)g(the)g(request)75
305 y(b)q(ecomes)j(n)o(ull.)189 396 y Fp(R)n(ationale.)74 b
Fy(MPI)17 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)69 b Fm(\()189
452 y Fy(as)14 b(to)h(a)o(v)o(oid)g(dangling)h(references.)21
b(\()p Fp(End)15 b(of)i(r)n(ationale.)p Fy(\))166 543 y(The)g(call)g(returns)
g(in)g Ft(status)h Fy(information)f(on)f(the)h(completed)g(op)q(eration.)24
b(The)17 b(status)f(ob)s(ject)75 599 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 Fm(\()75 656 y Fy(status)12
b(ob)s(ject)f(for)h(a)g(send)h(op)q(eration)g(ma)o(y)e(b)q(e)i(up)q(dated)h
(as)e(w)o(ell)h(b)o(y)f Ft(MPI)p 1362 656 V 16 w(CANCEL)p Fy(,)g(if)h(the)g
(op)q(eration)75 712 y(is)i(canceled)i(\(Section)e(1.9,)f(b)q(elo)o(w\).)20
b(Th)o(us,)14 b(one)h(alw)o(a)o(ys)f(need)i(to)e(pro)o(vide)i(a)e(v)m(alid)j
(status)d(argumen)o(t)75 769 y(to)h Ft(MPI)p 216 769 V 15 w(W)l(AIT)h
Fy(and)f(the)g(other)g(related)h(functions.)166 825 y(It)21
b(is)11 b(allo)o(w)o(ed)g(to)f(call)i Ft(MPI)p 634 825 V 16
w(W)l(AIT)e Fy(with)h(a)g(n)o(ull)h Ft(request)g Fy(argumen)o(t,)e(in)i(whic)
o(h)f(case)g(the)g(op)q(eration)69 b Fm(\()75 882 y Fy(has)15
b(no)g(e\013ect.)189 973 y Fp(R)n(ationale.)52 b Fy(This)18
b(mak)o(es)e Ft(MPI)p 772 973 V 16 w(W)l(AIT)h Fy(functionally)i(equiv)m
(alen)o(t)g(to)e Ft(MPI)p 1528 973 V 16 w(W)l(AIT)l(ALL)g Fy(with)g(a)189
1029 y(list)f(of)e(length)i(one)g(and)f(adds)g(some)g(elegance.)21
b(\()p Fp(End)16 b(of)g(r)n(ationale.)p Fy(\))75 1167 y Ft(MPI)p
160 1167 V 16 w(TEST\(request,)g(\015ag,)f(status\))117 1244
y Fs(INOUT)62 b Ft(request)452 b Fs(comm)o(unication)11 b(request)k
(\(handle\))117 1317 y(OUT)108 b Ft(\015ag)518 b Fs(\(logical\))117
1390 y(OUT)108 b Ft(status)476 b Fs(status)15 b(ob)r(ject)g(\(Status\))75
1514 y Fr(int)23 b(MPI)p 245 1514 15 2 v 17 w(Test\(MPI)p 454
1514 V 16 w(Comm)p 566 1514 V 17 w(request)g(*request,)f(int)i(flag,)f(MPI)p
1323 1514 V 17 w(Status)g(*status\))75 1601 y(MPI)p 150 1601
V 17 w(TEST\(REQUEST,)f(FLAG,)h(STATUS,)g(IERROR\))170 1657
y(LOGICAL)g(FLAG)170 1714 y(INTEGER)g(REQUEST,)g(STATUS\(MPI)p
819 1714 V 16 w(STATUS)p 979 1714 V 16 w(SIZE\),)g(IERROR)166
1800 y Fy(A)17 b(call)i(to)e Ft(MPI)p 446 1800 14 2 v 15 w(TEST)h
Fy(returns)f Ft(\015ag)h(=)f(true)h Fy(if)g(the)g(op)q(eration)f(iden)o
(ti\014ed)j(b)o(y)d Ft(request)i Fy(is)f(com-)75 1857 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 1913 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 1970
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 Ft(\015ag=false)p Fy(,)g(otherwise.)28
b(In)75 2026 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 2083 y Ft(MPI)p 251 2083
V 16 w(TEST)f Fy(is)h(a)f(lo)q(cal,)h(non)o(blo)q(c)o(king)g(op)q(eration.)
166 2139 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
2195 y(using)k(the)g(functions)g(describ)q(ed)i(in)e(section)g(1.3.1.)38
b(The)15 b(status)f(ob)s(ject)g(for)g(a)g(send)h(op)q(eration)g(ma)o(y)68
b Fm(\()75 2252 y Fy(b)q(e)16 b(up)q(dated)g(as)f(w)o(ell,)h(if)f(the)g(op)q
(eration)h(w)o(as)e(canceled)j(\(see)e(Section)h(1.9,)e(b)q(elo)o(w\).)166
2308 y(It)21 b(is)11 b(allo)o(w)o(ed)g(to)f(call)i Ft(MPI)p
634 2308 V 15 w(TEST)f Fy(with)g(a)f(n)o(ull)i Ft(request)g
Fy(argumen)o(t,)f(in)g(whic)o(h)h(case)e(the)h(op)q(eration)69
b Fm(\()75 2365 y Fy(returns)15 b Fo(\015ag=false)p Fy(.)166
2421 y(In)g(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 Ft(MPI)p
1732 2421 V 15 w(W)l(AIT)p Fy(\))75 2478 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 2534 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 2591 y(\()p Ft(MPI)p 178 2591
V 15 w(TEST)p Fy(\))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 2647
y(execution.)166 2704 y(Example:)-32 46 y Fw(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 Fy(22)613 b Fu(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fr(CALL)23 b(MPI_COMM_RANK\(comm,)f
(rank,)h(ierr\))75 106 y(IF\(rank.EQ.0\))123 162 y(THEN)170
219 y(CALL)h(MPI_ISEND\(a\(1\),)e(10,)h(MPI_REAL,)g(1,)g(tag,)h(comm,)f
(request,)g(ierr\))170 275 y(****)h(do)f(some)h(computation)e(to)i(mask)f
(latency)g(****)170 332 y(CALL)h(MPI_WAIT\(request,)d(status,)i(ierr\))123
388 y(ELSE)170 444 y(CALL)h(MPI_IRECV\(a\(1\),)e(15,)h(MPI_REAL,)g(0,)g(tag,)
h(comm,)f(request,)g(ierr\))170 501 y(****)h(do)f(some)h(computation)e(to)i
(mask)f(latency)g(****)170 557 y(CALL)h(MPI_WAIT\(request,)d(status,)i
(ierr\))75 614 y(END)g(IF)166 708 y Fy(The)f(functions)h Ft(MPI)p
554 708 14 2 v 15 w(W)l(AIT)f Fy(and)g Ft(MPI)p 881 708 V 16
w(TEST)g Fy(can)g(b)q(e)g(used)h(to)e(complete)h(b)q(oth)g(sends)h(and)75
764 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
821 y(b)o(y)h(MPI.)75 943 y Fq(1.8.4)49 b(Semantics)13 b(of)k(Nonblo)q(cking)
h(Comm)o(unications)75 1029 y Fy(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 1085 y(in)16 b(section)g(1.4)e(for)h(order)g(and)g
(progress.)166 1142 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
1198 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 1255
y(comm)o(unication.)166 1311 y(Example:)75 1418 y Fr(CALL)k
(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 1474 y(IF)h(\(RANK.EQ.0\))147
1531 y(THEN)218 1587 y(CALL)f(MPI_ISEND\(a,)g(1,)g(MPI_REAL,)g(1,)h(0,)f
(comm,)g(h1,)h(ierr\))218 1644 y(CALL)f(MPI_ISEND\(b,)g(1,)g(MPI_REAL,)g(1,)h
(0,)f(comm,)g(h2,)h(ierr\))147 1700 y(ELSE)94 b(!)24 b(rank.EQ.1)218
1756 y(CALL)f(MPI_IRECV\(a,)g(1,)g(MPI_REAL,)g(0,)h(MPI_ANY_TAG,)e(comm,)h
(h1,)g(ierr\))218 1813 y(CALL)g(MPI_IRECV\(b,)g(1,)g(MPI_REAL,)g(0,)h(0,)f
(comm,)g(h2,)h(ierr\))75 1869 y(END)f(IF)75 1926 y(CALL)g
(MPI_WAIT\(h1,status\))75 1982 y(CALL)g(MPI_WAIT\(h2,status\))166
2089 y Fy(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 2145 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
2202 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 2258 y(A)22 b(call)g(to)f
Ft(MPI)p 458 2258 V 16 w(W)l(AIT)h Fy(that)f(completes)h(a)f(receiv)o(e)i
(will)g(ev)o(en)o(tually)g(terminate)e(and)h(return)75 2315
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 2371 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 2428 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
Ft(MPI)p 1651 2428 V 15 w(W)l(AIT)h Fy(that)75 2484 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 2540 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 2597 y(Example:)75 2704
y Fr(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))1967 46
y Fw(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 Fu(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b Fy(23)75 49 y Fr(IF)24 b(\(RANK.EQ.0\))147 106 y(THEN)218
162 y(CALL)f(MPI_ISEND\(a,)g(1,)g(MPI_REAL,)g(1,)h(0,)f(comm,)g(h,)h(ierr\))
218 219 y(CALL)f(MPI_RECV\(b,)g(1,)g(MPI_REAL,)g(1,)h(0,)f(comm,)g(ierr\))218
275 y(CALL)g(MPI_WAIT\(h,)g(status,)g(ierr\))147 332 y(ELSE)94
b(!)24 b(rank.EQ.1)218 388 y(CALL)f(MPI_RECV\(a,)g(1,)g(MPI_REAL,)g(0,)h(0,)f
(comm,)g(ierr\))218 444 y(CALL)g(MPI_SEND\(b,)g(1,)g(MPI_REAL,)g(0,)h(0,)f
(comm,)g(ierr\))75 501 y(END)g(IF)166 633 y Fy(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
694 y(If)j Ft(MPI)p 299 694 14 2 v 16 w(TEST)g Fy(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 751 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 Ft(\015ag=true)p
Fy(,)h(unless)75 807 y(the)i(send)g(is)g(satis\014ed)h(b)o(y)f(another)f
(receiv)o(e.)25 b(If)17 b Ft(MPI)p 1020 807 V 16 w(TEST)g Fy(that)f
(completes)i(a)e(send)i(is)f(rep)q(eatedly)75 864 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 920 y(ev)o(en)o(tually)i(return)f
Ft(\015ag=true)p Fy(,)h(unless)g(the)g(receiv)o(e)g(is)f(satis\014ed)h(b)o(y)
f(another)g(send.)166 982 y(Non)o(blo)q(c)o(king)g(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 1038 y(the)h Ft(synchronous)i Fy(comm)o(unication)f(mo)q
(de.)k(Consider)c(the)f(follo)o(wing)h(example:)75 1157 y Fr(CALL)23
b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75 1214 y(IF\(rank.EQ.0\))123
1270 y(THEN)170 1327 y(CALL)h(MPI_ISEND\(a\(1\),)e(count,)h(MPI_REAL,)f(1,)i
(tag1,)f(comm,)g(request1,)g(ierr\))170 1383 y(CALL)h(MPI_ISEND\(a\(2\),)e
(count,)h(MPI_REAL,)f(1,)i(tag2,)f(comm,)g(request2,)g(ierr\))170
1440 y(CALL)h(MPI_WAIT\(request1,)d(status,)i(ierr\))170 1496
y(CALL)h(MPI_WAIT\(request2,)d(status,)i(ierr\))123 1552 y(ELSE)170
1609 y(CALL)h(MPI_IRECV\(a\(2\),)e(count,)h(MPI_REAL,)f(0,)i(tag2,)f(comm,)g
(request2,)g(ierr\))170 1665 y(CALL)h(MPI_IRECV\(a\(1\),)e(count,)h
(MPI_REAL,)f(0,)i(tag1,)f(comm,)g(request1,)g(ierr\))170 1722
y(CALL)h(MPI_WAIT\(request2,)d(status,)i(ierr\))170 1778 y(CALL)h
(MPI_WAIT\(request1,)d(status,)i(ierr\))75 1835 y(END)g(IF)166
1949 y Fy(The)16 b(co)q(de)g(is)g(guaran)o(teed)f(to)g(execute)h(correctly)l
(,)g(ev)o(en)g(in)g(an)g(implemen)o(tation)h(that)d(do)q(es)i(not)75
2005 y(bu\013er)d(messages)f(\(the)h(only)h(resource)f(requiremen)o(t)g(is)h
(the)f(abilit)o(y)h(to)e(ha)o(v)o(e)h(t)o(w)o(o)f(p)q(ending)i(comm)o(uni-)75
2062 y(cations\).)20 b(If)15 b(one)h(replaces)g(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)i(sends)f(\(receiv)o(es\),)
f(and)75 2118 y(deletes)j(the)f(calls)h(to)e Ft(MPI)p 551 2118
V 15 w(W)l(AIT)p Fy(,)h(then)g(the)g(co)q(de)g(ma)o(y)f(deadlo)q(c)o(k.)26
b(The)17 b(co)q(de)g(ma)o(y)f(also)h(deadlo)q(c)o(k)75 2175
y(if)f(one)f(deletes)h(the)f(calls)h(that)f(initiate)h(comm)o(unication)g
(and)f(replaces)h(eac)o(h)f(call)i(to)d Ft(MPI)p 1686 2175
V 16 w(W)l(AIT)h Fy(b)o(y)75 2231 y(the)g(appropriate)g(blo)q(c)o(king)i
(send)f(or)f(receiv)o(e.)75 2382 y Fq(1.8.5)49 b(Multiple)17
b(Completions)75 2478 y Fy(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 2534 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
Ft(MPI)p 1597 2534 V 16 w(W)l(AIT)l(ANY)h Fy(or)75 2591 y Ft(MPI)p
160 2591 V 16 w(TEST)l(ANY)e Fy(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
2647 y(a)14 b(call)h(to)27 b Ft(MPI)p 347 2647 V 15 w(W)l(AIT)l(ALL)14
b Fy(or)f Ft(MPI)p 701 2647 V 16 w(TEST)l(ALL)h Fy(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 2704
y(a)h(list.)-32 46 y Fw(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 Fy(24)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Ft(MPI)p 160 49 14
2 v 16 w(W)l(AIT)l(ANY)g(\(count,)g(a)o(rra)o(y)p 640 49 V
14 w(of)p 691 49 V 16 w(requests,)h(index,)f(status\))117 126
y Fs(IN)155 b Ft(count)482 b Fs(list)14 b(length)f(\(in)o(teger\))117
198 y(INOUT)62 b Ft(a)o(rra)o(y)p 416 198 V 15 w(of)p 468 198
V 16 w(requests)272 b Fs(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e(of)f
(handles\))117 270 y(OUT)108 b Ft(index)489 b Fs(index)12 b(of)f(handle)g
(for)g(op)q(eration)h(that)f(completed)g(\(in)o(teger\))117
342 y(OUT)108 b Ft(status)476 b Fs(status)15 b(ob)r(ject)g(\(Status\))75
466 y Fr(int)23 b(MPI)p 245 466 15 2 v 17 w(Waitany\(int)g(count,)g(MPI)p
788 466 V 16 w(Comm)p 900 466 V 17 w(request)g(*array)p 1252
466 V 16 w(of)p 1316 466 V 17 w(requests,)g(int)g(*index,)393
523 y(MPI)p 468 523 V 17 w(Status)g(*status\))75 609 y(MPI)p
150 609 V 17 w(WAITANY\(COUNT,)f(ARRAY)p 645 609 V 16 w(OF)p
709 609 V 17 w(REQUESTS,)h(INDEX,)g(STATUS,)g(IERROR\))170
666 y(INTEGER)g(COUNT,)g(ARRAY)p 651 666 V 17 w(OF)p 716 666
V 17 w(REQUESTS\(*\),)f(INDEX,)h(STATUS\(MPI)p 1450 666 V 16
w(STATUS)p 1610 666 V 16 w(SIZE\),)170 722 y(IERROR)166 809
y Fy(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
865 y(arra)o(y)c(has)h(completed.)20 b(Returns)15 b(in)g Ft(index)g
Fy(the)f(index)h(of)f(that)f(request)h(in)h(the)f(arra)o(y)f(and)h(returns)g
(in)75 922 y Ft(status)j Fy(the)e(status)g(of)g(the)g(completing)h(comm)o
(unication.)166 978 y(The)j(execution)h(of)e Ft(MPI)p 610 978
14 2 v 16 w(W)l(AIT)l(ANY\(count,)j(a)o(rra)o(y)p 1079 978
V 14 w(of)p 1130 978 V 16 w(requests,)h(index,)e(status\))g
Fy(has)f(the)f(same)75 1035 y(e\013ect)10 b(as)g(the)g(execution)i(of)20
b Ft(MPI)p 655 1035 V 16 w(W)l(AIT\(a)o(rra)o(y)p 897 1035
V 14 w(of)p 948 1035 V 16 w(requests[i],)13 b(status\))p Fy(,)g(where)e
Ft(i)f Fy(is)h(the)f(v)m(alue)i(returned)75 1091 y(b)o(y)h
Ft(index)p Fy(.)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
1148 y(to)21 b(it)h(in)g Ft(a)o(rra)o(y)p 346 1148 V 15 w(of)p
398 1148 V 16 w(requests)i Fy(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
1204 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 1260 y(fairness)e(criterion.)166 1317 y Ft(MPI)p
251 1317 V 16 w(W)l(AIT)30 b Fy(is)16 b(equiv)m(alen)o(t)h(to)d
Ft(MPI)p 809 1317 V 16 w(W)l(AIT)l(ANY)i Fy(with)g(an)f(arra)o(y)f(of)h
(length)g(one.)-1624 b Fm(\))75 1421 y Ft(MPI)p 160 1421 V
16 w(TEST)l(ANY\(count,)17 b(a)o(rra)o(y)p 626 1421 V 14 w(of)p
677 1421 V 16 w(requests,)g(index,)f(\015ag,)f(status\))117
1498 y Fs(IN)155 b Ft(count)482 b Fs(list)14 b(length)f(\(in)o(teger\))117
1570 y(INOUT)62 b Ft(a)o(rra)o(y)p 416 1570 V 15 w(of)p 468
1570 V 16 w(requests)272 b Fs(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e(of)f
(handles\))117 1641 y(OUT)108 b Ft(index)489 b Fs(index)9 b(of)g(op)q
(eration)g(that)h(completed,)f(or)g Fo(MPI)p 1651 1641 13 2
v 14 w(UNDEFINED)905 1698 y Fs(if)k(none)h(completed)g(\(in)o(teger\))117
1770 y(OUT)108 b Ft(\015ag)518 b Fo(TRUE)13 b Fs(if)g(one)i(of)e(the)h(op)q
(erations)h(is)e(complete)h(\(logical\))117 1842 y(OUT)108
b Ft(status)476 b Fs(status)15 b(ob)r(ject)g(\(Status\))75
1966 y Fr(int)23 b(MPI)p 245 1966 15 2 v 17 w(Testany\(int)g(count,)g(MPI)p
788 1966 V 16 w(Comm)p 900 1966 V 17 w(request)g(*array)p 1252
1966 V 16 w(of)p 1316 1966 V 17 w(requests,)g(int)g(*index,)393
2023 y(int)h(*flag,)f(MPI)p 731 2023 V 16 w(Status)g(*status\))75
2109 y(MPI)p 150 2109 V 17 w(TESTANY\(COUNT,)f(ARRAY)p 645
2109 V 16 w(OF)p 709 2109 V 17 w(REQUESTS,)h(INDEX,)g(FLAG,)g(STATUS,)g
(IERROR\))170 2165 y(LOGICAL)g(FLAG)170 2222 y(INTEGER)g(COUNT,)g(ARRAY)p
651 2222 V 17 w(OF)p 716 2222 V 17 w(REQUESTS\(*\),)f(INDEX,)h(STATUS\(MPI)p
1450 2222 V 16 w(STATUS)p 1610 2222 V 16 w(SIZE\),)170 2278
y(IERROR)166 2365 y Fy(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
2421 y(to)g(return.)19 b(In)13 b(the)f(former)g(case,)h(it)f(returns)h(in)g
Ft(index)g Fy(the)g(index)h(of)e(its)g(request)h(in)g(the)g(arra)o(y)l(,)e
(returns)75 2478 y(in)j Ft(status)h Fy(the)e(status)f(of)g(that)g(op)q
(eration,)i(deallo)q(cates)g(the)f(asso)q(ciated)g(comm)o(unication)g(ob)s
(ject,)g(and)75 2534 y(sets)k(the)h(request)g(to)f(n)o(ull.)29
b(In)18 b(the)g(latter)f(case,)h(it)g(returns)g(a)f(v)m(alue)i(of)e
Fo(MPI)p 1458 2534 13 2 v 15 w(UNDEFINED)f Fy(in)j Ft(index)75
2591 y Fy(and)c Ft(status)j Fy(is)d(unde\014ned.)166 2647 y(The)k(execution)g
(of)f Ft(MPI)p 609 2647 14 2 v 16 w(TEST)l(ANY\(count,)j(a)o(rra)o(y)p
1079 2647 V 15 w(of)p 1131 2647 V 16 w(requests,)g(index,)f(status\))g
Fy(has)f(the)f(same)75 2704 y(e\013ect)c(as)f(the)h(execution)h(of)e
Ft(MPI)p 662 2704 V 16 w(TEST\(a)o(rra)o(y)p 905 2704 V 15
w(of)p 957 2704 V 16 w(requests[i],)j(\015ag,)d(status\))p
Fy(,)j(for)d Ft(i=0,)g(1)h(,...,)e(count-1)p Fy(,)1967 46 y
Fw(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 Fu(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b Fy(25)75 49 y(in)14 b(some)e(arbitrary)h(order,)g(un)o(til)h(one)f(call)h
(returns)f Ft(\015ag=true)p Fy(,)h(or)e(all)i(fail.)20 b(In)14
b(the)f(former)f(case,)h Ft(index)75 106 y Fy(is)19 b(set)f(to)g(the)g(last)h
(v)m(alue)g(of)f Ft(i)p Fy(;)i(in)f(the)f(later)h(case,)g(it)f(is)h(set)f(to)
g Fo(MPI)p 1314 106 13 2 v 14 w(UNDEFINED)p Fy(.)36 b(In)19
b(particular,)69 b Fm(\()75 162 y Ft(MPI)p 160 162 14 2 v 16
w(TEST)15 b Fy(is)h(equiv)m(alen)o(t)h(to)d Ft(MPI)p 704 162
V 16 w(TEST)l(ANY)j Fy(with)e(an)g(arra)o(y)f(of)h(length)h(one.)166
295 y Fl(Discussion:)48 b Fo(MPI)p 525 295 13 2 v 15 w(TEST)p
644 295 V 15 w(ANY)11 b Fs(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
Fs(and)68 b Fk(\()75 344 y Fs(the)12 b(v)n(alue)g(of)f Fo(index)i
Fs(\(i.e.,)e(whether)i Fo(index)g Fs(=)f Fo(MPI)p 870 344 V
14 w(UNDEFINED)p Fs(\).)f(One)h(could)g(do)f(with)h(one)g(only;)f(e.g.,)g
(get)h(rid)75 394 y(of)i Fo(\015ag)p Fs(,)g(or)h(allo)o(w)e
Fo(index)j Fs(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
444 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 444
V 15 w(TEST)e Fs(and)h Fo(MPI)p 1666 444 V 14 w(TEST)m(ANY)p
Fs(.)166 501 y(Opinions?)75 687 y Ft(MPI)p 160 687 14 2 v 16
w(W)l(AIT)l(ALL\()j(count,)i(a)o(rra)o(y)p 626 687 V 15 w(of)p
678 687 V 16 w(requests,)h(a)o(rra)o(y)p 971 687 V 15 w(of)p
1023 687 V 15 w(statuses\))117 764 y Fs(IN)155 b Ft(count)482
b Fs(lists)14 b(length)g(\(in)o(teger\))117 839 y(INOUT)62
b Ft(a)o(rra)o(y)p 416 839 V 15 w(of)p 468 839 V 16 w(requests)272
b Fs(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e(of)f(handles\))117
914 y(OUT)108 b Ft(a)o(rra)o(y)p 416 914 V 15 w(of)p 468 914
V 16 w(statuses)276 b Fs(arra)o(y)14 b(of)f(status)i(ob)r(jects)g(\(arra)o(y)
f(of)f(Status\))75 1038 y Fr(int)23 b(MPI)p 245 1038 15 2 v
17 w(Waitall\(int)g(count,)g(MPI)p 788 1038 V 16 w(Comm)p 900
1038 V 17 w(request)g(*array)p 1252 1038 V 16 w(of)p 1316 1038
V 17 w(requests,)393 1094 y(MPI)p 468 1094 V 17 w(Status)g(*array)p
796 1094 V 16 w(of)p 860 1094 V 17 w(statuses\))75 1181 y(MPI)p
150 1181 V 17 w(WAITALL\(COUNT,)f(ARRAY)p 645 1181 V 16 w(OF)p
709 1181 V 17 w(REQUESTS,)h(ARRAY)p 1085 1181 V 16 w(OF)p 1149
1181 V 17 w(STATUSES,)g(IERROR\))170 1237 y(INTEGER)g(COUNT,)g(ARRAY)p
651 1237 V 17 w(OF)p 716 1237 V 17 w(REQUESTS\(*\),)170 1294
y(ARRAY)p 293 1294 V 17 w(OF)p 358 1294 V 17 w(STATUSES\(MPI)p
663 1294 V 15 w(STATUS)p 822 1294 V 17 w(SIZE,*\),)g(IERROR)166
1380 y Fy(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
1437 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 1493 y(en)o(tries.)24 b(The)16 b Ft(i)p Fy(-th)h(en)o(try)f(in)h
Ft(a)o(rra)o(y)p 694 1493 14 2 v 14 w(of)p 745 1493 V 16 w(statuses)i
Fy(is)e(set)f(to)g(the)h(return)f(status)f(of)h(the)h Ft(i)p
Fy(-th)f(op)q(eration.)75 1550 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
1606 y(The)f(execution)h(of)f Ft(MPI)p 596 1606 V 16 w(W)l(AIT)l(ALL\(count,)
g(a)o(rra)o(y)p 1046 1606 V 15 w(of)p 1098 1606 V 16 w(requests,)i(a)o(rra)o
(y)p 1390 1606 V 15 w(of)p 1442 1606 V 16 w(statuses)g Fy(has)e(the)g(same)75
1663 y(e\013ect)24 b(as)g(the)g(execution)h(of)f Ft(MPI)p 714
1663 V 16 w(W)l(AIT\(a)o(rra)o(y)p 956 1663 V 14 w(of)p 1007
1663 V 16 w(request[i],)k(a)o(rra)o(y)p 1331 1663 V 15 w(of)p
1383 1663 V 16 w(statuses[i]\))p Fy(,)g(for)c Ft(i=0)g(,...,)75
1719 y(count-1)p Fy(,)16 b(in)g(some)f(arbitrary)f(order.)75
1823 y Ft(MPI)p 160 1823 V 16 w(TEST)l(ALL\(count,)i(a)o(rra)o(y)p
613 1823 V 14 w(of)p 664 1823 V 16 w(requests,)h(\015ag,)e(a)o(rra)o(y)p
1054 1823 V 14 w(of)p 1105 1823 V 16 w(statuses\))117 1900
y Fs(IN)155 b Ft(count)482 b Fs(lists)14 b(length)g(\(in)o(teger\))117
1975 y(INOUT)62 b Ft(a)o(rra)o(y)p 416 1975 V 15 w(of)p 468
1975 V 16 w(requests)272 b Fs(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e(of)f
(handle\))117 2049 y(OUT)108 b Ft(\015ag)518 b Fs(\(logical\))117
2124 y(OUT)108 b Ft(a)o(rra)o(y)p 416 2124 V 15 w(of)p 468
2124 V 16 w(statuses)276 b Fs(arra)o(y)14 b(of)f(status)i(ob)r(jects)g
(\(Status\))75 2248 y Fr(int)23 b(MPI)p 245 2248 15 2 v 17
w(Testall\(int)g(count,)g(MPI)p 788 2248 V 16 w(Comm)p 900
2248 V 17 w(request)g(*array)p 1252 2248 V 16 w(of)p 1316 2248
V 17 w(requests,)g(int)g(*flag,)393 2305 y(MPI)p 468 2305 V
17 w(Status)g(*array)p 796 2305 V 16 w(of)p 860 2305 V 17 w(statuses\))75
2391 y(MPI)p 150 2391 V 17 w(TESTALL\(COUNT,)f(ARRAY)p 645
2391 V 16 w(OF)p 709 2391 V 17 w(REQUESTS,)h(FLAG,)g(ARRAY)p
1228 2391 V 16 w(OF)p 1292 2391 V 17 w(STATUSES,)g(IERROR\))170
2448 y(LOGICAL)g(FLAG)170 2504 y(INTEGER)g(COUNT,)g(ARRAY)p
651 2504 V 17 w(OF)p 716 2504 V 17 w(REQUESTS\(*\),)170 2561
y(ARRAY)p 293 2561 V 17 w(OF)p 358 2561 V 17 w(STATUSES\(MPI)p
663 2561 V 15 w(STATUS)p 822 2561 V 17 w(SIZE,*\),)g(IERROR)166
2647 y Fy(Returns)18 b Ft(\015ag)g(=)g(true)h Fy(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 2704 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-)-32
46 y Fw(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 Fy(26)613 b Fu(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fy(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 106 y(Otherwise,)k
Ft(\015ag)e(=)g(false)h Fy(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 162
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
301 y Fl(Discussion:)51 b Fs(W)m(e)13 b(do)g(not)g(ha)o(v)o(e)g(a)g(function)
g(of)g(the)h(form:)i(\\complete)c(as)h(man)o(y)f(comm)o(unicati)o(ons)f(as)
-1904 b Fk(\))75 358 y Fs(p)q(ossible)14 b(and)g(return.")166
497 y Fy(Example:)75 645 y Fr(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h
(ierr\))75 702 y(IF\(rank)g(<)h(2\))123 758 y(THEN)214 b(!)24
b(rank=0)f(or)g(rank=1)170 815 y(CALL)h(MPI_ISEND\(a,)e(n,)i(MPI_REAL,)e(2,)i
(tag,)f(comm,)g(request,)g(ierr\))170 871 y(****)h(do)f(some)h(computation)e
(to)i(mask)f(latency)g(****)170 927 y(CALL)h(MPI_WAIT\(request,)d(status,)i
(ierr\))123 984 y(ELSE)214 b(!)24 b(rank=2)170 1040 y(CALL)g(MPI_IRECV\(a,)e
(n,)i(MPI_REAL,)e(0,)i(tag,)f(comm,)g(request_list\(0\),)f(ierr\))170
1097 y(CALL)i(MPI_IRECV\(b,)e(n,)i(MPI_REAL,)e(1,)i(tag,)f(comm,)g
(request_list\(1\),)f(ierr\))170 1153 y(****)i(do)f(some)h(computation)e(to)i
(mask)f(latency)g(****)170 1210 y(CALL)h(MPI_WAITANY\(2,)e(request_list,)g
(index,)h(status,)g(ierr\))170 1266 y(IF\(index.EQ.0\))218
1323 y(THEN)266 1379 y(****)g(handle)g(message)g(from)g(process)g(0)h(****)
266 1436 y(CALL)f(MPI_WAIT\(request_list\(1\),)e(status,)i(ierr\))266
1492 y(****)g(handle)g(message)g(from)g(process)g(1)h(****)218
1548 y(ELSE)266 1605 y(****)f(handle)g(message)g(from)g(process)g(1)h(****)
266 1661 y(CALL)f(MPI_WAIT\(request_list\(0\),)e(status,)i(ierr\))266
1718 y(****)g(handle)g(message)g(from)g(process)g(0)h(****)170
1774 y(END)g(IF)75 1831 y(END)f(IF)166 1923 y Fy(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 1979 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 2036 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
2092 y(The)44 b Ft(status)25 b Fy(argumen)o(t)c(in)i Ft(MPI)p
779 2092 14 2 v 16 w(W)l(AIT)l(ANY)g Fy(and)f Ft(MPI)p 1196
2092 V 16 w(W)l(AIT)l(ALL)g Fy(and)g(the)h(en)o(tries)f(of)g(the)-1903
b Fm(\))75 2148 y Ft(a)o(rra)o(y)p 173 2148 V 15 w(of)p 225
2148 V 16 w(statuses)18 b Fy(argumen)o(t)d(in)i Ft(MPI)p 747
2148 V 16 w(W)l(AIT)l(ALL)e Fy(and)h Ft(MPI)p 1138 2148 V 16
w(TEST)l(ALL)g Fy(ma)o(y)f(b)q(e)i(used)f(and)g(up)q(dated)75
2205 y(for)j(a)g(send)h(op)q(eration)g(as)f(w)o(ell,)i(when)f(the)g(op)q
(eration)g(is)g(canceled.)34 b(Th)o(us,)21 b(one)e(alw)o(a)o(ys)g(need)i(to)
75 2261 y(pro)o(vide)16 b(a)f(v)m(alid)h Ft(status)i Fy(\(resp.)c
Ft(a)o(rra)o(y)p 737 2261 V 15 w(of)p 789 2261 V 16 w(statuses)p
Fy(\))j(argumen)o(t.)166 2318 y(An)k Ft(a)o(rra)o(y)p 344 2318
V 15 w(of)p 396 2318 V 16 w(requests)i Fy(argumen)o(t)e(that)f(is)i(passed)g
(to)e(an)o(y)h(of)g(the)h(last)f(four)g(functions)h(ma)o(y)75
2374 y(con)o(tain)14 b(n)o(ull)i(en)o(tries.)k(These)14 b(en)o(tries)h(are)e
(ignored)i(and)f(the)h(call)g(executes)g(as)e(if)i(it)f(w)o(as)g(supplied)i
(an)75 2431 y(arra)o(y)g(of)h(requests)h(con)o(taining)g(only)g(the)g(non-n)o
(ull)h(en)o(tries.)27 b(As)17 b(a)h(request)f(in)h Ft(a)o(rra)o(y)p
1608 2431 V 15 w(of)p 1660 2431 V 16 w(requests)h Fy(is)75
2487 y(set)13 b(to)g(n)o(ull)i(when)f(the)g(corresp)q(onding)g(op)q(eration)g
(completes,)g(this)g(allo)o(ws)g(to)f(reuse)g(the)h(same)f(arra)o(y)75
2544 y(for)j(completing)h(in)g(successiv)o(e)g(calls)h(the)e(op)q(erations)g
(asso)q(ciated)h(with)f(this)h(arra)o(y)l(.)22 b(Th)o(us,)16
b(the)g(last)75 2600 y(example)g(can)f(b)q(e)h(rewritten)f(as)g(follo)o(ws:)
1967 46 y Fw(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 Fu(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b Fy(27)75 49 y Fr(CALL)23 b(MPI_COMM_RANK\(comm,)f(rank,)h(ierr\))75
106 y(IF\(rank)g(<)h(2\))123 162 y(THEN)214 b(!)24 b(rank=0)f(or)g(rank=1)170
219 y(CALL)h(MPI_ISEND\(a,)e(n,)i(MPI_REAL,)e(2,)i(tag,)f(comm,)g(request,)g
(ierr\))170 275 y(CALL)h(MPI_WAIT\(request,)d(status,)i(ierr\))123
332 y(ELSE)214 b(!)24 b(rank=2)170 388 y(CALL)g(MPI_IRECV\(a,)e(n,)i
(MPI_REAL,)e(0,)i(tag,)f(comm,)g(request_list\(0\),)f(ierr\))170
444 y(CALL)i(MPI_IRECV\(b,)e(n,)i(MPI_REAL,)e(1,)i(tag,)f(comm,)g
(request_list\(1\),)f(ierr\))170 501 y(CALL)i(MPI_WAITANY\(2,)e
(request_list,)g(index,)h(status,)g(ierr\))266 557 y(****)g(handle)g(first)g
(arriving)g(message)47 b(****)170 614 y(CALL)24 b(MPI_WAITANY\(2,)e
(request_list,)g(index,)h(status,)g(ierr\))266 670 y(****)g(handle)g(second)g
(arriving)g(message)47 b(****)166 797 y Fy(If)18 b Ft(MPI)p
299 797 14 2 v 16 w(W)l(AIT)l(ANY)i Fy(or)d Ft(MPI)p 676 797
V 16 w(TEST)l(ANY)j Fy(are)e(called)i(with)e(an)g(empt)o(y)g
Ft(a)o(rra)o(y)p 1534 797 V 15 w(of)p 1586 797 V 16 w(requests)i
Fy(argu-)75 853 y(men)o(t)d(\(i.e.,)g(an)g(arra)o(y)f(of)h(length)h(zero,)f
(or)f(an)i(arra)o(y)d(with)j(all)g(en)o(tries)g(n)o(ull\))g(then)f(they)h
(return)f(the)75 910 y(v)m(alue)k Fo(MPI)p 274 910 13 2 v 14
w(UNDEFINED)d Fy(in)i Ft(index)p Fy(;)i Ft(MPI)p 812 910 14
2 v 16 w(W)l(AIT)l(ALL)d Fy(with)h(an)f(empt)o(y)g Ft(a)o(rra)o(y)p
1449 910 V 14 w(of)p 1500 910 V 16 w(requests)j Fy(argumen)o(t)75
966 y(has)15 b(no)g(e\013ect;)g Ft(MPI)p 437 966 V 16 w(TEST)l(ALL)g
Fy(with)g(an)g(empt)o(y)g Ft(a)o(rra)o(y)p 1058 966 V 15 w(of)p
1110 966 V 16 w(requests)i Fy(argumen)o(t)e(returns)g Ft(\015ag=true)p
Fy(.)166 1027 y(A)h(p)q(ersisten)o(t)g(request)f(for)g(whic)o(h)i(there)f(is)
g(no)f(p)q(ending)j(comm)o(unication)e(is)g(handled)i(as)d(a)g(n)o(ul)75
1083 y(handle)h(when)g(it)g(o)q(ccurs)f(in)h(an)f(arra)o(y)f(of)h(requests)g
({)g(see)h(Section)g(1.10,)d(b)q(elo)o(w.)75 1228 y Fq(1.8.6)49
b(Alternative)16 b(p)o(rop)q(osal)189 1322 y Fp(R)n(ationale.)457
1306 y Fj(1)498 1322 y Fy(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 Fm(\()189 1379 y Fy(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 1435 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
1492 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 1548 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 Fy(\()p Fi(n)1429
1532 y Fj(2)1447 1548 y Fy(\))g(time)h(for)e(handling)j Fi(n)189
1604 y Fy(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 1661
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 1717 y
Fi(O)q Fy(\(log)8 b(log)g Fi(n)p Fy(\),)20 b(where)g Fi(n)h
Fy(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 1774 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 1830 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 1887 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 1970 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 2027 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 2083 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
Fp(End)g(of)i(r)n(ationale.)p Fy(\))166 2210 y(A)23 b(new)f(opaque)h(ob)s
(ject,)h(a)e Fo(collection)i Fy(is)f(added)g(to)f(MPI.)g(The)h(functions)h
Ft(MPI)p 1648 2210 V 15 w(W)l(AIT)l(ANY)p Fy(,)75 2266 y Ft(MPI)p
160 2266 V 16 w(W)l(AIT)l(ALL)p Fy(,)17 b Ft(MPI)p 477 2266
V 16 w(TEST)l(ANY)j Fy(and)e Ft(MPI)p 888 2266 V 16 w(TEST)l(ALL)g
Fy(accept)h(a)f Ft(collection)g Fy(argumen)o(t,)g(whic)o(h)h(is)75
2323 y(a)i(handle)i(to)e(a)g(set)g(of)g(requests,)i(instead)f(of)f(the)g
Ft(a)o(rra)o(y)p 1113 2323 V 15 w(of)p 1165 2323 V 16 w(requests)j
Fy(argumen)o(t)c(they)i(ha)o(v)o(e)f(no)o(w.)75 2379 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 Ft(MPI)p 1282 2379 V 15 w(W)l(AIT)l(ANY)i Fy(or)d Ft(MPI)p
1646 2379 V 16 w(TEST)l(ANY)p Fy(,)75 2436 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 2492 y(When)f(a)f(call)h(to)f
Ft(MPI)p 466 2492 V 16 w(W)l(AIT)p 595 2492 V 16 w(ANY)h Fy(or)f(other)g
(similar)i(function)f(satis\014es)f(a)g(request,)h(then)f(the)h(index)75
2548 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 2605 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.)p 75 2661
720 2 v 127 2688 a Fw(1)144 2704 y Fv(Prop)q(osal)h(and)f(rationale)h(b)o(y)e
(Salmon)h(and)g(Edelsohn)-32 46 y Fw(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 Fy(28)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Ft(MPI)p 160 49 14
2 v 16 w(COLLECTION)p 453 49 V 16 w(CREA)l(TE\(collection\))117
128 y Fs(OUT)108 b Ft(collection)409 b Fs(collection)14 b(\(handle\))75
254 y Fr(int)23 b(int)h(MPI)p 341 254 15 2 v 17 w(Collection)p
598 254 V 15 w(create\(MPI)p 853 254 V 16 w(Comm)p 965 254
V 17 w(collection)e(*collection\))75 342 y(MPI)p 150 342 V
17 w(COLLECTION)p 407 342 V 16 w(CREATE\(COLLECTION,)f(IERROR\))170
399 y(INTEGER)i(COLLECTION,)g(IERROR)166 487 y Fy(The)14 b(function)h
Ft(MPI)p 520 487 14 2 v 16 w(COLLECTION)p 813 487 V 16 w(CREA)l(TE)g
Fy(creates)f(a)f(collection)j(ob)s(ject)d(for)g(m)o(ultiple)j(com-)75
544 y(pletion)h(tests.)75 649 y Ft(MPI)p 160 649 V 16 w(ADD)p
272 649 V 16 w(TO)p 352 649 V 17 w(COLLECTION\(request,)f(collection,)g(k)o
(ey\))117 728 y Fs(IN)155 b Ft(request)452 b Fs(comm)o(unication)11
b(request)k(\(handle\))117 806 y(INOUT)62 b Ft(collection)409
b Fs(collection)14 b(\(handle\))117 885 y(IN)155 b Ft(k)o(ey)525
b Fs(user-sp)q(eci\014ed)17 b(k)o(ey)d(for)f(request)j(\(address\))75
1011 y Fr(int)23 b(int)h(MPI)p 341 1011 15 2 v 17 w(Add)p 430
1011 V 16 w(to)p 494 1011 V 17 w(collection\(MPI)p 847 1011
V 16 w(Comm)p 959 1011 V 16 w(request)f(request,)g(MPI)p 1453
1011 V 17 w(Comm)p 1566 1011 V 16 w(collection)393 1068 y(collection,)g(MPI)p
755 1068 V 16 w(Aint)h(key\))75 1156 y(MPI)p 150 1156 V 17
w(ADD)p 239 1156 V 17 w(TO)p 304 1156 V 16 w(COLLECTION\(REQUEST,)e
(COLLECTION,)g(KEY,)h(IERROR\))170 1212 y(INTEGER)g(REQUEST,)g(COLLECTION,)f
(KEY,)i(IERROR)166 1300 y Fy(The)15 b(function)g Ft(MPI)p 521
1300 14 2 v 16 w(ADD)p 633 1300 V 16 w(TO)p 713 1300 V 17 w(COLLECTION)f
Fy(inserts)h Ft(request)h Fy(in)o(to)f(the)f(set)g(of)g(requests)h(asso-)75
1357 y(ciated)h(with)f Ft(collection)h Fy(and)f(asso)q(ciates)h(the)f
(user-sp)q(eci\014ed)i Ft(k)o(ey)f Fy(with)f(it.)75 1462 y
Ft(MPI)p 160 1462 V 16 w(DELETE)p 346 1462 V 16 w(FROM)p 490
1462 V 17 w(COLLECTION\(request,)h(collection\))117 1541 y
Fs(IN)155 b Ft(request)452 b Fs(comm)o(unication)11 b(request)k(\(handle\))
117 1620 y(INOUT)62 b Ft(collection)409 b Fs(collection)14
b(\(handle\))75 1746 y Fr(int)23 b(int)h(MPI)p 341 1746 15
2 v 17 w(Delete)p 502 1746 V 16 w(from)p 614 1746 V 17 w(collection\(MPI)p
967 1746 V 15 w(Comm)p 1078 1746 V 17 w(request)e(request,)393
1802 y(MPI)p 468 1802 V 17 w(Comm)p 581 1802 V 17 w(collection)g
(collection\))75 1890 y(MPI)p 150 1890 V 17 w(DELETE)p 311
1890 V 16 w(FROM)p 423 1890 V 17 w(COLLECTION\(REQUEST,)f(COLLECTION,)h
(IERROR\))170 1947 y(INTEGER)h(REQUEST,)g(COLLECTION,)f(IERROR)166
2035 y Fy(The)d(function)g Ft(MPI)p 529 2035 14 2 v 16 w(DELETE)p
715 2035 V 16 w(FROM)p 859 2035 V 17 w(COLLECTION)f Fy(remo)o(v)o(es)g
Ft(request)i Fy(from)e(the)h(set)f(of)g(re-)75 2091 y(quests)d(asso)q(ciated)
h(with)f Ft(collection)p Fy(.)75 2197 y Ft(MPI)p 160 2197 V
16 w(W)l(AIT)l(ANY\(collection,)h(value,)f(status\))117 2276
y Fs(INOUT)62 b Ft(collection)409 b Fs(collection)14 b(\(handle\))117
2354 y(OUT)108 b Ft(k)o(ey)525 b Fs(user-sp)q(eci\014ed)17
b(k)o(ey)d(\(address\))117 2433 y(OUT)108 b Ft(status)476 b
Fs(status)15 b(ob)r(ject)g(\(Status\))75 2559 y Fr(int)23 b(int)h(MPI)p
341 2559 15 2 v 17 w(Waitany\(MPI)p 622 2559 V 15 w(Comm)p
733 2559 V 17 w(collection)e(collection,)h(MPI)p 1371 2559
V 17 w(Aint)g(*key,)393 2615 y(MPI)p 468 2615 V 17 w(Status)g(*status\))75
2704 y(MPI)p 150 2704 V 17 w(WAITANY\(COLLECTION,)e(KEY,)i(STATUS,)g
(IERROR\))1967 46 y Fw(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 Fu(1.8.)34 b(NONBLOCKING)17 b(COMMUNICA)l(TION)863
b Fy(29)170 49 y Fr(INTEGER)23 b(COLLECTION,)g(KEY,)g(STATUS\(MPI)p
1010 49 15 2 v 16 w(STATUS)p 1170 49 V 16 w(SIZE\),)g(IERROR)166
157 y Fy(The)11 b(function)g Ft(MPI)p 513 157 14 2 v 16 w(W)l(AIT)l(ANY)h
Fy(w)o(aits)e(for)g(the)h(completion)h(of)e(one)h(request)g(from)f(the)h
(collection.)75 213 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 270 y(with)h(the)f(request)g(is)h(returned)f(in)h
Ft(k)o(ey)p Fy(.)75 395 y Ft(MPI)p 160 395 V 16 w(TEST)l(ANY\(collection,)g
(\015ag,)f(k)o(ey)l(,)g(status\))117 493 y Fs(INOUT)62 b Ft(collection)409
b Fs(collection)14 b(\(handle\))117 611 y(OUT)108 b Ft(\015ag)518
b Fo(true)11 b Fs(if)d(one)i(of)f(the)h(op)q(erations)g(is)f(complete)g
Fo(false)p Fs(,)h(otherwise)905 667 y(\(logical\))117 785 y(OUT)108
b Ft(k)o(ey)525 b Fs(user-sp)q(eci\014ed)17 b(k)o(ey)d(\(address\))117
902 y(OUT)108 b Ft(status)476 b Fs(status)15 b(ob)r(ject)g(\(Status\))75
1048 y Fr(int)23 b(int)h(MPI)p 341 1048 15 2 v 17 w(Testany\(MPI)p
622 1048 V 15 w(Comm)p 733 1048 V 17 w(collection)e(collection,)h(int)g
(*flag,)g(MPI)p 1633 1048 V 17 w(Aint)393 1104 y(*key,)g(MPI)p
611 1104 V 17 w(Status)g(*status\))75 1212 y(MPI)p 150 1212
V 17 w(TESTANY\(COLLECTION,)e(FLAG,)i(KEY,)h(STATUS,)e(IERROR\))170
1268 y(INTEGER)h(COLLECTION,)g(FLAG,)g(KEY,)g(STATUS\(MPI)p
1153 1268 V 16 w(STATUS)p 1313 1268 V 16 w(SIZE\),)g(IERROR)166
1376 y Ft(MPI)p 251 1376 14 2 v 16 w(TEST)l(ANY)c Fy(returns)f
Ft(\015ag)g(=)g(true)g Fy(if)h(an)o(y)e(of)h(the)g(op)q(erations)g(asso)q
(ciated)g(with)g Ft(collection)75 1433 y Fy(has)f(completed.)28
b(In)19 b(this)f(case,)f(it)h(returns)g(in)g Ft(k)o(ey)g Fy(the)f(user-sp)q
(eci\014ed)j(v)m(alue)f(asso)q(ciated)f(with)g(the)75 1489
y(request)d(handle)g(whic)o(h)h(completed,)f(in)h Ft(status)g
Fy(the)f(status)f(of)g(that)g(op)q(eration,)g(and)h(deallo)q(cates)h(the)75
1545 y(asso)q(ciated)f(comm)o(unications)h(ob)s(ject)f(if)h(ephemeral.)21
b(It)15 b(returns)g Ft(\015ag)g(=)g(false)p Fy(,)g(otherwise.)75
1670 y Ft(MPI)p 160 1670 V 16 w(W)l(AIT)l(ALL\(collection,)g(a)o(rra)o(y)p
684 1670 V 14 w(of)p 735 1670 V 16 w(k)o(eys,)g(a)o(rra)o(y)p
953 1670 V 15 w(of)p 1005 1670 V 16 w(statuses\))117 1769 y
Fs(INOUT)62 b Ft(collection)409 b Fs(collection)14 b(\(handle\))117
1886 y(OUT)108 b Ft(a)o(rra)o(y)p 416 1886 V 15 w(of)p 468
1886 V 16 w(k)o(eys)345 b Fs(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 2004 y(OUT)108 b Ft(a)o(rra)o(y)p
416 2004 V 15 w(of)p 468 2004 V 16 w(statuses)276 b Fs(arra)o(y)14
b(of)f(status)i(ob)r(jects)g(\(arra)o(y)f(of)f(Status\))75
2150 y Fr(int)23 b(int)h(MPI)p 341 2150 15 2 v 17 w(Waitall\(MPI)p
622 2150 V 15 w(Comm)p 733 2150 V 17 w(collection)e(collection,)h(MPI)p
1371 2150 V 17 w(Aint)g(*array)p 1651 2150 V 16 w(of)p 1715
2150 V 17 w(keys,)393 2206 y(MPI)p 468 2206 V 41 w(Status)g(*array)p
820 2206 V 16 w(of)p 884 2206 V 17 w(statuses\))75 2314 y(MPI)p
150 2314 V 17 w(WAITALL\(COLLECTION,)e(ARRAY)p 764 2314 V 17
w(OF)p 829 2314 V 16 w(KEYS,)j(ARRAY)p 1109 2314 V 16 w(OF)p
1173 2314 V 17 w(STATUSES,)f(IERROR\))170 2370 y(INTEGER)g(COLLECTION,)g
(ARRAY)p 771 2370 V 16 w(OF)p 835 2370 V 17 w(KEYS,)g(ARRAY)p
1115 2370 V 17 w(OF)p 1180 2370 V 17 w(STATUSES\(MPI)p 1485
2370 V 15 w(STATUS)p 1644 2370 V 17 w(SIZE,*\),)170 2427 y(IERROR)166
2534 y Fy(The)14 b(function)g Ft(MPI)p 519 2534 14 2 v 16 w(W)l(AIT)l(ALL)f
Fy(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 2591 y(the)g(requests)g(in)h Ft(collection)g
Fy(complete.)20 b Ft(MPI)p 866 2591 V 16 w(W)l(AIT)l(ALL)13
b Fy(returns)h(the)g(user-sp)q(eci\014ed)j(k)o(ey)d(asso)q(ciated)75
2647 y(with)21 b(eac)o(h)g(request)g(handle)h(in)f Ft(a)o(rra)o(y)p
764 2647 V 15 w(of)p 816 2647 V 16 w(k)o(eys)g Fy(and)g(the)g(resp)q(ectiv)o
(e)g(status)f(of)g(eac)o(h)h(op)q(eration)g(in)75 2704 y Ft(a)o(rra)o(y)p
173 2704 V 15 w(of)p 225 2704 V 16 w(statuses)p Fy(.)h(All)16
b(ephemeral)h(comm)o(unication)f(ob)s(jects)e(are)h(deallo)q(cated.)-32
46 y Fw(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 Fy(30)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Ft(MPI)p 160 49 14
2 v 16 w(TEST)l(ALL\(collection,)f(\015ag,)g(a)o(rra)o(y)p
782 49 V 14 w(of)p 833 49 V 16 w(k)o(eys,)g(a)o(rra)o(y)p 1051
49 V 15 w(of)p 1103 49 V 16 w(statuses\))117 128 y Fs(INOUT)62
b Ft(collection)409 b Fs(collection)14 b(\(handle\))117 206
y(OUT)108 b Ft(\015ag)518 b Fo(true)15 b Fs(if)e(all)g(of)g(the)i(op)q
(erations)f(are)g(complete)f(\(logical\))117 285 y(OUT)108
b Ft(a)o(rra)o(y)p 416 285 V 15 w(of)p 468 285 V 16 w(k)o(eys)345
b Fs(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 363 y(OUT)108 b Ft(a)o(rra)o(y)p 416 363 V
15 w(of)p 468 363 V 16 w(statuses)276 b Fs(arra)o(y)14 b(of)f(status)i(ob)r
(jects)g(\(arra)o(y)f(of)f(Status\))75 489 y Fr(int)23 b(int)h(MPI)p
341 489 15 2 v 17 w(Testall\(MPI)p 622 489 V 15 w(Comm)p 733
489 V 17 w(collection)e(collection,)h(int)g(*flag,)g(MPI)p
1633 489 V 17 w(Aint)393 546 y(*array)p 540 546 V 17 w(of)p
605 546 V 16 w(keys,)h(MPI)p 837 546 V 16 w(Status)f(*array)p
1164 546 V 17 w(of)p 1229 546 V 17 w(statuses\))75 634 y(MPI)p
150 634 V 17 w(TESTALL\(COLLECTION,)e(FLAG,)i(ARRAY)p 907 634
V 17 w(OF)p 972 634 V 17 w(KEYS,)g(ARRAY)p 1252 634 V 16 w(OF)p
1316 634 V 17 w(STATUSES,)g(IERROR\))170 690 y(INTEGER)g(COLLECTION,)g(FLAG,)
g(ARRAY)p 914 690 V 16 w(OF)p 978 690 V 17 w(KEYS,)170 747
y(ARRAY)p 293 747 V 17 w(OF)p 358 747 V 17 w(STATUSES\(MPI)p
663 747 V 15 w(STATUS)p 822 747 V 17 w(SIZE,*\),)g(IERROR)166
835 y Ft(MPI)p 251 835 14 2 v 16 w(TEST)l(ALL)12 b Fy(returns)g
Ft(\015ag)h(=)g(true)g Fy(if)f(all)i(of)e(the)g(op)q(erations)h(asso)q
(ciated)g(with)f Ft(collection)h Fy(ha)o(v)o(e)75 891 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 947 y(handle)f(in)f
Ft(a)o(rra)o(y)p 375 947 V 14 w(of)p 426 947 V 16 w(k)o(eys)g
Fy(and)f(the)h(resp)q(ectiv)o(e)g(status)f(of)f(eac)o(h)i(op)q(eration)f(in)h
Ft(a)o(rra)o(y)p 1564 947 V 15 w(of)p 1616 947 V 16 w(statuses)p
Fy(.)26 b(All)75 1004 y(ephemeral)17 b(comm)o(unication)g(ob)s(jects)f(are)g
(deallo)q(cated.)25 b(It)16 b(returns)g Ft(\015ag)g(=)h(false)p
Fy(,)f(otherwise.)23 b(This)75 1060 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 1166 y Ft(MPI)p
160 1166 V 16 w(COLLECTION)p 453 1166 V 16 w(SIZE\(collection,)g(count\))117
1244 y Fs(IN)155 b Ft(collection)409 b Fs(collection)14 b(\(handle\))117
1323 y(OUT)108 b Ft(count)482 b Fs(n)o(um)o(b)q(er)13 b(of)h(requests)i(in)d
(collection)g(\(in)o(teger\))75 1449 y Fr(int)23 b(int)h(MPI)p
341 1449 15 2 v 17 w(Collection)p 598 1449 V 15 w(size\(MPI)p
805 1449 V 17 w(Comm)p 918 1449 V 16 w(collection)f(collection,int)f
(*count\))75 1537 y(MPI)p 150 1537 V 17 w(COLLECTION)p 407
1537 V 16 w(SIZE\(COLLECTION,)f(COUNT,)i(IERROR\))p Ft(I)p
Fr(NTEGER)f(COLLECTION,)g(COUNT,)393 1593 y(IERROR)166 1681
y Ft(MPI)p 251 1681 14 2 v 16 w(COLLECTION)p 544 1681 V 16
w(SIZE)f Fy(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 1738 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 1794 y(pass)g(to)g Ft(MPI)p
315 1794 V 15 w(TEST)l(ALL)h Fy(and)f Ft(MPI)p 706 1794 V 16
w(W)l(AIT)l(ALL)p Fy(.)75 1900 y Ft(MPI)p 160 1900 V 16 w(COLLECTION)p
453 1900 V 16 w(FREE\(collection\))117 1978 y Fs(IN)155 b Ft(collection)409
b Fs(collection)14 b(\(handle\))75 2104 y Fr(int)23 b(int)h(MPI)p
341 2104 15 2 v 17 w(Collection)p 598 2104 V 15 w(free\(MPI)p
805 2104 V 17 w(Comm)p 918 2104 V 16 w(collection)f(collection\))75
2193 y(MPI)p 150 2193 V 17 w(COLLECTION)p 407 2193 V 16 w(FREE\(COLLECTION,)e
(IERROR\))170 2249 y(INTEGER)i(COLLECTION,)g(IERROR)166 2337
y Fy(The)12 b(function)g Ft(MPI)p 515 2337 14 2 v 16 w(COLLECTION)p
808 2337 V 16 w(FREE)h Fy(deallo)q(cates)f(the)g(collection)h(ob)s(ject.)18
b(It)12 b(is)g(erroneous)75 2393 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 2534 y Fl(Discussion:)34 b Fs(Some)13 b(\(less)h(p)q(o)o(w)o(erful\))g
(alternativ)o(es:)75 2591 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 2647 y(requires)i
Fo(MPI)p 308 2647 13 2 v 14 w(GET)p 403 2647 V 15 w(T)m(A)o(G)e
Fs(to)h(w)o(ork)f(after)h(a)g(send,)g(to)q(o\).)75 2704 y(Drop)g(the)p
255 2704 V 29 w(ADD)f(and)p 459 2704 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 2704 V 12
w(arra)o(y")h(function.)1967 46 y Fw(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 Fu(1.9.)34 b(PR)o(OBE)16 b(AND)f(CANCEL)1161
b Fy(31)75 49 y Fz(1.9)59 b(Prob)r(e)20 b(and)f(Cancel)75 151
y Fy(The)d Ft(MPI)p 254 151 14 2 v 16 w(PROBE)g Fy(and)g Ft(MPI)p
605 151 V 16 w(IPROBE)g Fy(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 207 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 264 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 Ft(status)p Fy(\).)28 b(In)75 320 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 377 y(the)f(prob)q(ed)h(message.)166
433 y(The)i Ft(MPI)p 347 433 V 16 w(CANCEL)g Fy(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 489 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)75 546 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
650 y Ft(MPI)p 160 650 V 16 w(IPROBE\(source,)h(tag,)f(comm)m(,)c(\015ag,)k
(status\))117 727 y Fs(IN)155 b Ft(source)468 b Fs(source)15
b(rank,)f(or)27 b Fo(MPI)p 1281 727 13 2 v 15 w(ANY)p 1381
727 V 14 w(SOURCE)13 b Fs(\(in)o(teger\))117 801 y(IN)155 b
Ft(tag)526 b Fs(tag)14 b(v)n(alue)f(or)28 b Fo(MPI)p 1226 801
V 14 w(ANY)p 1325 801 V 15 w(T)m(A)o(G)12 b Fs(\(in)o(teger\))117
876 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)11 b(\(handle\))117
951 y(OUT)108 b Ft(\015ag)518 b Fs(\(logical\))117 1025 y(OUT)108
b Ft(status)476 b Fs(status)15 b(ob)r(ject)g(\(Status\))75
1150 y Fr(int)23 b(MPI)p 245 1150 15 2 v 17 w(Iprobe\(int)g(source,)g(int)g
(tag,)g(MPI)p 1002 1150 V 17 w(Comm)g(comm,)h(int)f(*flag,)393
1206 y(MPI)p 468 1206 V 17 w(Status)g(*status\))75 1292 y(MPI)p
150 1292 V 17 w(IPROBE\(SOURCE,)f(TAG,)h(COMM,)g(FLAG,)g(STATUS,)g(IERROR\))
170 1349 y(LOGICAL)g(FLAG)170 1405 y(INTEGER)g(SOURCE,)g(TAG,)h(COMM,)f
(STATUS\(MPI)p 1058 1405 V 16 w(STATUS)p 1218 1405 V 16 w(SIZE\),)g(IERROR)
166 1492 y Ft(MPI)p 251 1492 14 2 v 16 w(IPROBE)c Fy(returns)f
Ft(\015ag)g(=)h(true)f Fy(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 1548 y(matc)o(hes)i(the)g(pattern)f(sp)q
(eci\014ed)j(b)o(y)e(the)h(argumen)o(ts)e Ft(source)p Fy(,)i
Ft(tag)p Fy(,)g(and)g Ft(comm)m Fy(.)34 b(It)21 b(returns)g
Ft(\015ag)75 1605 y(=)i(false)p Fy(,)h(otherwise.)41 b(If)23
b Ft(MPI)p 633 1605 V 16 w(IPROBE)g Fy(returns)f Ft(\015ag)g(=)h(true)p
Fy(,)h(then)f(the)f(status)g(ob)s(ject)g(can)g(b)q(e)75 1661
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 1718
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
1774 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 Ft(MPI)p 897 1774 V 16 w(RECV)i Fy(executed)g(at)f(the)g(same)g(p)q(oin)o
(t)h(in)g(the)f(program.)75 1831 y(The)k(return)h(status)e(ob)s(ject)h(is)g
(unde\014ned)i(if)f Ft(\015ag)f(=)h(false)p Fy(.)166 1887 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 1943 y(b)o(y)g(querying)h(the)f(status)f
(returned)i(b)o(y)f Ft(MPI)p 858 1943 V 16 w(IPROBE)h Fy(will)h(receiv)o(e)f
(the)f(message)f(that)h(w)o(as)f(matc)o(hed)75 2000 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
2056 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
2113 y(holds.)166 2169 y(The)d Ft(source)h Fy(argumen)o(t)e(of)h
Ft(MPI)p 738 2169 V 16 w(PROBE)h Fy(can)f(b)q(e)h Fo(MPI)p
1140 2169 13 2 v 14 w(ANY)p 1239 2169 V 15 w(SOURCE)p Fy(,)d(and)i(the)h
Ft(tag)f Fy(argumen)o(t)75 2226 y(can)g(b)q(e)g Fo(MPI)p 298
2226 V 15 w(ANY)p 398 2226 V 14 w(T)m(A)o(G)p Fy(,)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
2282 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 2339 y Ft(comm)9 b Fy(argumen)o(t.)166 2395
y(A)32 b(call)17 b(to)e Ft(MPI)p 457 2395 14 2 v 16 w(PROBE)i
Fy(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 Fm(\()75 2452 y Fy(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
2508 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
2564 y(in)h(a)f(m)o(ultithreaded)h(en)o(vironmen)o(t.)166 2704
y Fl(Implemen)o(tati)o(on)g(note:)47 b Fs(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)-32
46 y Fw(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 Fy(32)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fs(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 106
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 162 y(for)k(eac)o(h)g(con)o(text.)56 b Fo(MPI)p 516 162
13 2 v 14 w(PROBE)16 b Fs(returns)i(information)c(on)j(the)h(\014rst)g(matc)o
(hing)d(message)i(in)f(this)h(FIF)o(O;)75 219 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 275
y(con)o(text)i(as)f(the)g(message)g(matc)o(hed)f(b)o(y)g Fo(MPI)p
806 275 V 15 w(PROBE)p Fs(.)75 463 y Ft(MPI)p 160 463 14 2
v 16 w(PROBE\(source,)j(tag,)f(comm)m(,)d(status\))117 543
y Fs(IN)155 b Ft(source)468 b Fs(source)15 b(rank,)f(or)27
b Fo(MPI)p 1281 543 13 2 v 15 w(ANY)p 1381 543 V 14 w(SOURCE)13
b Fs(\(in)o(teger\))117 622 y(IN)155 b Ft(tag)526 b Fs(tag)14
b(v)n(alue,)e(or)28 b Fo(MPI)p 1237 622 V 14 w(ANY)p 1336 622
V 15 w(T)m(A)o(G)13 b Fs(\(in)o(teger\))117 701 y(IN)155 b
Ft(comm)466 b Fs(comm)o(unicator)11 b(\(handle\))117 780 y(OUT)108
b Ft(status)476 b Fs(status)15 b(ob)r(ject)g(\(Status\))75
906 y Fr(int)23 b(MPI)p 245 906 15 2 v 17 w(Probe\(int)g(source,)g(int)g
(tag,)h(MPI)p 979 906 V 16 w(Comm)g(comm,)f(MPI)p 1330 906
V 17 w(Status)g(*status\))75 994 y(MPI)p 150 994 V 17 w(PROBE\(SOURCE,)f
(TAG,)h(COMM,)g(STATUS,)g(IERROR\))170 1051 y(INTEGER)g(SOURCE,)g(TAG,)h
(COMM,)f(STATUS\(MPI)p 1058 1051 V 16 w(STATUS)p 1218 1051
V 16 w(SIZE\),)g(IERROR)166 1139 y Ft(MPI)p 251 1139 14 2 v
16 w(PROBE)17 b Fy(b)q(eha)o(v)o(es)g(lik)o(e)g Ft(MPI)p 769
1139 V 16 w(IPROBE)g Fy(except)g(that)f(it)g(is)h(a)f(blo)q(c)o(king)i(call)f
(whic)o(h)g(returns)75 1196 y(only)f(after)e(a)h(matc)o(hing)g(message)g(has)
g(b)q(een)h(found.)166 1254 y(An)24 b(MPI)f(implemen)o(tation)h(of)f
Ft(MPI)p 838 1254 V 16 w(PROBE)i Fy(needs)f(to)e(guaran)o(tee)h(progress:)35
b(if)24 b(a)f(call)i(to)75 1310 y Ft(MPI)p 160 1310 V 16 w(PROBE)20
b Fy(has)f(b)q(een)h(issued)h(b)o(y)e(a)f(pro)q(cess,)i(and)g(a)e(send)i
(that)e(matc)o(hes)h(the)g(prob)q(e)h(has)f(b)q(een)75 1367
y(initiated)g(b)o(y)e(some)g(pro)q(cess,)h(then)g(the)f(call)i(to)e
Ft(MPI)p 1029 1367 V 15 w(PROBE)i Fy(will)g(return,)f(unless)g(the)g(message)
e(is)75 1423 y(receiv)o(ed)21 b(b)o(y)e(another)g(concurren)o(t)h(receiv)o(e)
h(op)q(eration)e(\(that)g(is)h(executed)g(b)o(y)g(another)f(thread)h(at)75
1480 y(the)c(probing)g(pro)q(cess\).)21 b(Similarly)l(,)d(if)e(a)g(pro)q
(cess)g(busy)g(w)o(aits)f(with)h Ft(MPI)p 1374 1480 V 16 w(IPROBE)h
Fy(and)f(a)f(matc)o(hing)75 1536 y(message)j(has)g(b)q(een)h(issued,)h(then)e
(the)g(call)i(to)d Ft(MPI)p 1015 1536 V 16 w(IPROBE)i Fy(will)h(ev)o(en)o
(tually)f(return)f Ft(\015ag)g(=)g(true)75 1593 y Fy(unless)e(the)g(message)e
(is)i(receiv)o(ed)g(b)o(y)g(another)e(concurren)o(t)i(receiv)o(e)g(op)q
(eration.)75 1698 y Ft(MPI)p 160 1698 V 16 w(CANCEL\(request\))117
1777 y Fs(IN)155 b Ft(request)452 b Fs(comm)o(unication)11
b(request)k(\(handle\))75 1904 y Fr(int)23 b(MPI)p 245 1904
15 2 v 17 w(Cancel\(MPI)p 502 1904 V 16 w(Comm)p 614 1904 V
17 w(request)g(*request\))75 1992 y(MPI)p 150 1992 V 17 w(CANCEL\(REQUEST,)f
(IERROR\))170 2049 y(INTEGER)h(REQUEST,)g(IERROR)166 2137 y
Fy(A)17 b(call)h(to)e Ft(MPI)p 444 2137 14 2 v 15 w(CANCEL)i
Fy(marks)e(for)g(cancellation)i(a)f(p)q(ending)h(non)o(blo)q(c)o(king)g(comm)
o(unication)75 2194 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 2250 y(ately)l(,)f(p)q(ossibly)i(b)q(efore)e
(the)h(comm)o(unication)g(is)f(actually)h(canceled.)166 2308
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 2365 y(using)i(a)g(call)h
(to)e Ft(MPI)p 450 2365 V 15 w(W)l(AIT)h Fy(or)f Ft(MPI)p 728
2365 V 16 w(TEST)h Fy(\(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 2421 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 2478 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
2534 y(lation,)j(then)h(a)e Ft(MPI)p 445 2534 V 16 w(W)l(AIT)h
Fy(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 2591 y(of)i(the)g(activities)i(of)e(other)g(pro)q
(cesses)h(\(i.e.,)f Ft(MPI)p 970 2591 V 16 w(W)l(AIT)g Fy(b)q(eha)o(v)o(es)h
(as)f(a)g(lo)q(cal)i(function\);)f(similarly)75 2647 y(if)g
Ft(MPI)p 204 2647 V 16 w(TEST)f Fy(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
2704 y Ft(MPI)p 160 2704 V 16 w(TEST)d Fy(will)i(ev)o(en)o(tually)f(b)q(e)g
(successful.)1967 46 y Fw(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 Fu(1.10.)34 b(PERSISTENT)16 b(COMMUNICA)l(TION)g(REQUESTS)638
b Fy(33)166 49 y(Either)19 b(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 106 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
162 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
219 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
275 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 332 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 388 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 444 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.)75
548 y Ft(MPI)p 160 548 14 2 v 16 w(TEST)p 290 548 V 16 w(CANCELLED\(status,)i
(\015ag\))117 625 y Fs(IN)155 b Ft(status)476 b Fs(status)15
b(ob)r(ject)g(\(Status\))117 699 y(OUT)108 b Ft(\015ag)518
b Fs(\(logical\))75 824 y Fr(int)23 b(MPI)p 245 824 15 2 v
17 w(Test)p 358 824 V 17 w(cancelled\(MPI)p 687 824 V 15 w(Status)g(status,)g
(int)h(*flag\))75 910 y(MPI)p 150 910 V 17 w(TEST)p 263 910
V 16 w(CANCELLED\(STATUS,)e(FLAG,)h(IERROR\))170 966 y(LOGICAL)g(FLAG)170
1023 y(INTEGER)g(STATUS\(MPI)p 604 1023 V 16 w(STATUS)p 764
1023 V 17 w(SIZE\),)g(IERROR)166 1109 y Fy(Returns)12 b Ft(\015ag)f(=)h(true)
g Fy(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 1166 y(successfully)l(.)27 b(In)18
b(suc)o(h)f(a)g(case,)g(all)g(other)g(\014elds)h(of)e Ft(status)j
Fy(\(suc)o(h)e(as)g Ft(count)h Fy(or)e Ft(tag)p Fy(\))h(are)f(unde\014ned.)75
1222 y(Returns)i Ft(\015ag)f(=)h(false)p Fy(,)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 1279 y(call)41 b Ft(MPI)p 268 1279 14 2 v
16 w(TEST)p 398 1279 V 17 w(CANCELLED)20 b Fy(\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
1335 y(c)o(hec)o(king)16 b(on)f(the)g(other)g(\014elds)i(of)d(the)i(return)f
(status.)166 1474 y Fl(Implemen)o(tati)o(on)h(note:)51 b Fs(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 1531 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 1587 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 1644 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 1644 13 2 v
15 w(CANCEL)75 1700 y Fs(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 1757 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 1757 V 14 w(CANCEL)p
Fs(,)i(this)h(is)g(still)f(a)h(lo)q(cal)f(op)q(eration,)i(in)e(the)75
1813 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 1869 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 1926 y(in)o(terrupt)i(and)e(an)h(in)o(terrupt)h
(handler\).)75 2150 y Fz(1.10)60 b(P)n(ersistent)21 b(comm)o(unication)c
(requests)75 2252 y Fy(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
2308 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 2365 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
2421 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 2478
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 2534
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 2591 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 2647 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 2704 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.)
-32 46 y Fw(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 Fy(34)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y Fy(A)h(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 106 y(in)o(v)o(olv)o(e)f(no)f(comm)o(unication.)166
167 y(The)10 b(function)i Ft(MPI)p 513 167 14 2 v 15 w(CREA)l(TE)p
697 167 V 18 w(SEND)f Fy(creates)f(a)g(comm)o(unication)h(request)f(for)g(a)g
(standard)g(mo)q(de)75 224 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.)75
332 y Ft(MPI)p 160 332 V 16 w(CREA)l(TE)p 345 332 V 17 w(SEND\(buf,)g(count,)
g(datat)o(yp)q(e,)h(dest,)f(tag,)f(comm)m(,)d(request\))117
415 y Fs(IN)155 b Ft(buf)527 b Fs(initial)12 b(address)j(of)f(send)g
(bu\013er)h(\(c)o(hoice\))117 500 y(IN)155 b Ft(count)482 b
Fs(n)o(um)o(b)q(er)13 b(of)h(elemen)o(ts)f(sen)o(t)i(\(in)o(teger\))117
585 y(IN)155 b Ft(datat)o(yp)q(e)424 b Fs(t)o(yp)q(e)15 b(of)e(eac)o(h)h
(elemen)o(t)g(\(handle\))117 670 y(IN)155 b Ft(dest)511 b Fs(rank)14
b(of)f(destination)h(\(in)o(teger\))117 755 y(IN)155 b Ft(tag)526
b Fs(message)14 b(tag)f(\(in)o(teger\))117 840 y(IN)155 b Ft(comm)466
b Fs(comm)o(unicator)11 b(\(handle\))117 925 y(OUT)108 b Ft(request)452
b Fs(comm)o(unication)11 b(request)k(\(handle\))75 1055 y Fr(int)23
b(MPI)p 245 1055 15 2 v 17 w(Create)p 406 1055 V 17 w(send\(void*)f(buf,)h
(int)h(count,)f(MPI)p 1139 1055 V 17 w(Datatype)f(datatype,)h(int)h(dest,)393
1111 y(int)g(tag,)f(MPI)p 683 1111 V 17 w(Comm)g(comm,)g(MPI)p
1034 1111 V 17 w(Comm)p 1147 1111 V 17 w(request)g(*request\))75
1203 y(MPI)p 150 1203 V 17 w(CREATE)p 311 1203 V 16 w(SEND\(BUF,)g(COUNT,)g
(DATATYPE,)f(DEST,)i(TAG,)f(COMM,)g(REQUEST,)g(IERROR\))170
1259 y(<type>)g(BUF\(*\))170 1316 y(INTEGER)g(REQUEST,)g(COUNT,)g(DATATYPE,)g
(DEST,)g(TAG,)g(COMM,)g(REQUEST,)g(IERROR)166 1407 y Fy(The)16
b(function)h Ft(MPI)p 524 1407 14 2 v 16 w(CREA)l(TE)p 709
1407 V 17 w(RSEND)g Fy(creates)e(a)h(comm)o(unication)h(ob)s(ject)e(for)g(a)h
(ready)g(mo)q(de)75 1464 y(send)g(op)q(eration.)75 1572 y Ft(MPI)p
160 1572 V 16 w(CREA)l(TE)p 345 1572 V 17 w(RSEND\(buf,)g(count,)g(datat)o
(yp)q(e,)h(dest,)f(tag,)f(comm)m(,)d(request\))117 1655 y Fs(IN)155
b Ft(buf)527 b Fs(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o
(hoice\))117 1740 y(IN)155 b Ft(count)482 b Fs(n)o(um)o(b)q(er)13
b(of)h(elemen)o(ts)f(sen)o(t)i(\(in)o(teger\))117 1825 y(IN)155
b Ft(datat)o(yp)q(e)424 b Fs(t)o(yp)q(e)15 b(of)e(eac)o(h)h(elemen)o(t)g
(\(handle\))117 1910 y(IN)155 b Ft(dest)511 b Fs(rank)14 b(of)f(destination)h
(\(in)o(teger\))117 1995 y(IN)155 b Ft(tag)526 b Fs(message)14
b(tag)f(\(in)o(teger\))117 2080 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)
11 b(\(handle\))117 2165 y(OUT)108 b Ft(request)452 b Fs(comm)o(unication)11
b(request)k(\(handle\))75 2295 y Fr(int)23 b(MPI)p 245 2295
15 2 v 17 w(Create)p 406 2295 V 17 w(rsend\(void*)f(buf,)h(int)h(count,)f
(MPI)p 1163 2295 V 17 w(Datatype)f(datatype,)h(int)g(dest,)393
2351 y(int)h(tag,)f(MPI)p 683 2351 V 17 w(Comm)g(comm,)g(MPI)p
1034 2351 V 17 w(Comm)p 1147 2351 V 17 w(request)g(*request\))75
2443 y(MPI)p 150 2443 V 17 w(CREATE)p 311 2443 V 16 w(RSEND\(BUF,)g(COUNT,)g
(DATATYPE,)f(DEST,)h(TAG,)h(COMM,)f(REQUEST,)g(IERROR\))170
2499 y(<type>)g(BUF\(*\))170 2556 y(INTEGER)g(COUNT,)g(DATATYPE,)g(DEST,)g
(TAG,)h(COMM,)f(REQUEST,)f(IERROR)166 2647 y Fy(The)15 b(function)i
Ft(MPI)p 523 2647 14 2 v 15 w(CREA)l(TE)p 707 2647 V 18 w(SSEND)f
Fy(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 Fw(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 Fu(1.10.)34 b(PERSISTENT)16 b(COMMUNICA)l(TION)g(REQUESTS)638
b Fy(35)75 49 y Ft(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 Fs(IN)155 b Ft(buf)527 b Fs(initial)12
b(address)j(of)f(send)g(bu\013er)h(\(c)o(hoice\))117 202 y(IN)155
b Ft(count)482 b Fs(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 Ft(datat)o(yp)q(e)424 b Fs(t)o(yp)q(e)15
b(of)e(eac)o(h)h(elemen)o(t)g(\(handle\))117 352 y(IN)155 b
Ft(dest)511 b Fs(rank)14 b(of)f(destination)h(\(in)o(teger\))117
427 y(IN)155 b Ft(tag)526 b Fs(message)14 b(tag)f(\(in)o(teger\))117
502 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)11 b(\(handle\))117
577 y(OUT)108 b Ft(request)452 b Fs(comm)o(unication)11 b(request)k
(\(handle\))75 702 y Fr(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 Fy(The)15 b(function)h Ft(MPI)p 522 1044
14 2 v 15 w(CREA)l(TE)p 706 1044 V 18 w(RECV)g Fy(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 Ft(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 Fs(OUT)108 b Ft(buf)527 b
Fs(initial)12 b(address)j(of)f(receiv)o(e)h(bu\013er)g(\(c)o(hoice\))117
1356 y(IN)155 b Ft(count)482 b Fs(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 Ft(datat)o(yp)q(e)424
b Fs(t)o(yp)q(e)15 b(of)e(eac)o(h)h(elemen)o(t)g(\(handle\))117
1507 y(IN)155 b Ft(dest)511 b Fs(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 Ft(tag)526 b Fs(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 Ft(comm)466 b Fs(comm)o(unicator)11 b(\(handle\))117
1732 y(OUT)108 b Ft(request)452 b Fs(comm)o(unication)11 b(request)k
(\(handle\))75 1857 y Fr(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 Fy(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 Ft(MPI)p 338
2255 14 2 v 16 w(ST)l(ART)p Fy(.)75 2359 y Ft(MPI)p 160 2359
V 16 w(ST)l(ART\(request\))117 2436 y Fs(INOUT)62 b Ft(request)452
b Fs(comm)o(unication)11 b(request)k(\(handle\))75 2561 y Fr(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 Fw(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 Fy(36)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y Fy(The)11 b(comm)o(unication)h(ob)s
(ject)f(asso)q(ciated)g(with)h Ft(request)h Fy(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 Ft(ready)g Fy(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
Ft(MPI)p 1218 729 14 2 v 16 w(ST)l(ART)h Fy(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 Ft(MPI)p
838 786 V 16 w(ISEND)p Fy(,)h Ft(MPI)p 1099 786 V 15 w(IRSEND)p
Fy(,)g Ft(MPI)p 1388 786 V 16 w(ISSEND)g Fy(or)f Ft(MPI)p 1721
786 V 16 w(IRECV)p Fy(,)75 842 y(resp)q(ectiv)o(ely)l(.)166
983 y Fl(Discussion:)34 b Fs(It)14 b(has)g(b)q(een)h(suggested)g(that)f
Fo(MPI)p 1005 983 13 2 v 14 w(IST)m(ART)f Fs(w)o(ould)g(mak)o(e)g(this)h(p)q
(oin)o(t)f(b)q(etter)75 1170 y Ft(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 Fs(IN)155 b Ft(count)482
b Fs(list)14 b(length)f(\(in)o(teger\))117 1327 y(INOUT)62
b Ft(a)o(rra)o(y)p 416 1327 V 15 w(of)p 468 1327 V 16 w(requests)272
b Fs(arra)o(y)14 b(of)f(requests)j(\(arra)o(y)e(of)f(handle\))75
1453 y Fr(int)23 b(MPI)p 245 1453 15 2 v 17 w(Startall\(int)f(count,)h(MPI)p
811 1453 V 17 w(Comm)p 924 1453 V 17 w(request)g(*array)p 1276
1453 V 16 w(of)p 1340 1453 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 1597 y(INTEGER)g(COUNT,)g(ARRAY)p
651 1597 V 17 w(OF)p 716 1597 V 17 w(REQUESTS\(*\),)f(IERROR)166
1685 y Fy(Start)i(all)j(comm)o(unications)f(asso)q(ciated)g(with)f(requests)h
(in)g Ft(a)o(rra)o(y)p 1399 1685 14 2 v 15 w(of)p 1451 1685
V 16 w(requests)p Fy(.)52 b(A)26 b(call)h(to)75 1741 y Ft(MPI)p
160 1741 V 16 w(ST)l(ART)l(ALL\(count,)76 b(a)o(rra)o(y)p 701
1741 V 14 w(of)p 752 1741 V 16 w(requests\))65 b Fy(has)d(the)h(same)f
(e\013ect)h(as)f(calls)i(to)75 1798 y Ft(MPI)p 160 1798 V 16
w(ST)l(ART\(a)o(rra)o(y)p 431 1798 V 15 w(of)p 483 1798 V 16
w(requests[i]\))p Fy(,)17 b(executed)f(for)e Ft(i=0)i(,...,)d(count-1)p
Fy(,)j(in)g(some)f(arbitrary)f(order.)166 1855 y(A)j(comm)o(unication)g
(started)f(with)h(a)g(call)h(to)e Ft(MPI)p 1063 1855 V 16 w(ST)l(ART)h
Fy(or)f Ft(MPI)p 1377 1855 V 16 w(ST)l(ART)l(ALL)i Fy(is)f(completed)75
1912 y(b)o(y)11 b(a)h(call)g(to)f Ft(MPI)p 385 1912 V 16 w(W)l(AIT)p
Fy(,)g Ft(MPI)p 620 1912 V 16 w(TEST)p Fy(,)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 1968
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 2025 y(reused)g(anew)g
(b)o(y)f(a)h Ft(MPI)p 521 2025 V 15 w(ST)l(ART)h Fy(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 2081 y(to)j(the)g(function)i Ft(MPI)p 482
2081 V 16 w(REQUEST)p 701 2081 V 17 w(FREE)p Fy(,)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 2138 y(requests:)34 b Fx(p)q(ersisten)o(t)23
b Fy(requests,)h(whic)o(h)f(are)f(allo)q(cated)i(b)o(y)e(a)g(call)i(to)e
Ft(MPI)p 1503 2138 V 15 w(CREA)l(TE)p 1687 2138 V 18 w(xxx)p
Fy(,)i(and)75 2194 y(are)18 b(explicitly)j(deallo)q(cated)e(b)o(y)f
Ft(MPI)p 746 2194 V 16 w(REQUEST)p 965 2194 V 18 w(FREE)p Fy(,)g(and)g
Fx(ephemeral)g Fy(requests)g(that)f(p)q(ersist)75 2251 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 2307 y(function,)e(and)f(are)g
(freed)g(b)o(y)h(the)f(comm)o(unication)h(completion)g(call.)166
2365 y(If)40 b(a)20 b(call)h(to)e Ft(MPI)p 512 2365 V 16 w(W)l(AIT)p
Fy(,)g Ft(MPI)p 755 2365 V 16 w(TEST)p Fy(,)h(or)f(an)o(y)h(of)f(the)h(deriv)
o(ed)h(functions,)h(is)e(executed)h(on)-1903 b Fm(\))75 2421
y Fy(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
2478 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 Ft(MPI)p 1378 2478 V 16 w(W)l(AIT)p
Fy(\))h(then)g(the)f(outcome)75 2534 y(is)16 b(as)f(if)h(a)f(n)o(ull)i
(request)e(w)o(as)g(passed)g(as)g(argumen)o(t:)20 b Ft(MPI)p
1100 2534 V 16 w(W)l(AIT)15 b Fy(returns)g(immediately)i(and)f(has)f(no)75
2591 y(e\013ect,)d Ft(MPI)p 290 2591 V 16 w(TEST)g Fy(returns)g(with)h
Fo(\015ag)d(=)i(false)p Fy(,)g(etc.)19 b(In)12 b(particular,)h(one)g(can)f
(pass)g(to)f Ft(MPI)p 1660 2591 V 16 w(W)l(AIT)l(ANY)75 2647
y Fy(and)20 b(the)h(other)e(functions)i(in)g(section)g(1.8.5)d(an)i
Ft(a)o(rra)o(y)p 1070 2647 V 15 w(of)p 1122 2647 V 16 w(request)i
Fy(argumen)o(t)d(where)h(some)g(of)g(the)75 2704 y(requests)10
b(are)h(p)q(ersisten)o(t)g(ones,)g(and)f(ha)o(v)o(e)g(the)h(desired)h
(outcome:)17 b(the)10 b(call)i(will)g(ignore)f(those)f(requests)1967
46 y Fw(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 Fu(1.11.)34 b(SEND-RECEIVE)1277 b Fy(37)75 49
y(in)13 b(the)g(arra)o(y)e(for)h(whic)o(h)i(there)e(are)g(no)h(p)q(ending)h
(comm)o(unications)f(\(in)g(the)g(same)f(manner)h(that)f(these)75
106 y(functions)18 b(ignore)g(n)o(ull)h(request)f(en)o(tries\).)27
b(Th)o(us,)18 b(the)f(last)h(example)g(on)g(page)f(27)g(w)o(orks)g(correctly)
75 162 y(with)f(p)q(ersisten)o(t)f(requests,)g(to)q(o.)75 282
y Ft(MPI)p 160 282 14 2 v 16 w(REQUEST)p 379 282 V 18 w(FREE\(request\))117
375 y Fs(INOUT)62 b Ft(request)452 b Fs(comm)o(unication)11
b(request)k(\(handle\))75 515 y Fr(int)23 b(MPI)p 245 515 15
2 v 17 w(Request)p 430 515 V 16 w(free\(MPI)p 638 515 V 17
w(Comm)p 751 515 V 16 w(request)g(*request\))75 617 y(MPI)p
150 617 V 17 w(REQUEST)p 335 617 V 16 w(FREE\(REQUEST,)f(IERROR\))170
674 y(INTEGER)h(REQUEST,)g(IERROR)166 776 y Fy(Mark)c Ft(request)i
Fy(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 832 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 904 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 Ft(MPI)p
1249 904 14 2 v 16 w(REQUEST)p 1468 904 V 18 w(FREE\(request\))h
Fy(after)75 961 y(a)f(comm)o(unication)g(that)f(uses)h Ft(request)i
Fy(has)e(b)q(een)h(initiated,)h(but)e(b)q(efore)g(it)g(has)g(completed.)32
b(The)75 1017 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 1074 y(comm)o(unication)f(with)f(a)g(request)h(that)e(has)h(b)q(een)h
(freed.)166 1146 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
1202 y(of)g(the)g(form)166 1275 y Fx(Create)i Fy(\()p Fx(Start)h(Complete)p
Fy(\))725 1258 y Fh(\003)761 1275 y Fx(F)l(ree)f Fi(;)166 1347
y Fy(where)f Fn(\003)g Fy(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
1403 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
1460 y(correct)d(sequence)h(is)g(ob)q(ey)o(ed.)166 1532 y(A)c(send)g(op)q
(eration)f(initiated)j(with)d Ft(MPI)p 874 1532 V 16 w(ST)l(ART)i
Fy(can)e(b)q(e)i(matc)o(hed)e(with)h(an)o(y)f(receiv)o(e)i(op)q(eration)75
1588 y(and,)g(lik)o(ewise,)h(a)e(receiv)o(e)i(op)q(eration)e(initiated)i
(with)f Ft(MPI)p 1098 1588 V 16 w(ST)l(ART)g Fy(can)g(receiv)o(e)g(messages)f
(generated)75 1645 y(b)o(y)j(an)o(y)g(send)h(op)q(eration.)75
1878 y Fz(1.11)60 b(Send-receive)75 2010 y Fy(The)18 b Fx(send-receiv)o(e)g
Fy(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 2067 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 2123 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
2180 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
2236 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
2293 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
2349 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 2406
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
2462 y(in)h(Chapter)f Fx(??)k Fy(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
2518 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 Fm(\()75 2647 y Fy(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
Fw(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 Fy(38)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Ft(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 Fs(IN)155
b Ft(sendbuf)444 b Fs(initial)12 b(address)j(of)f(send)g(bu\013er)h(\(c)o
(hoice\))117 254 y(IN)155 b Ft(sendcount)399 b Fs(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 Ft(sendt)o(yp)q(e)424 b Fs(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 Ft(dest)511
b Fs(rank)14 b(of)f(destination)h(\(in)o(teger\))117 468 y(IN)155
b Ft(sendtag)443 b Fs(send)15 b(tag)e(\(in)o(teger\))117 539
y(OUT)108 b Ft(recvbuf)450 b Fs(initial)12 b(address)j(of)f(receiv)o(e)h
(bu\013er)g(\(c)o(hoice\))117 610 y(IN)155 b Ft(recvcount)405
b Fs(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 Ft(recvt)o(yp)q(e)430 b
Fs(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 Ft(source)468 b Fs(rank)14 b(of)f(source)j
(\(in)o(teger\))117 824 y(IN)155 b Ft(recvtag)449 b Fs(receiv)o(e)15
b(tag)f(\(in)o(teger\))117 895 y(IN)155 b Ft(comm)466 b Fs(comm)o(unicator)11
b(\(handle\))117 966 y(OUT)108 b Ft(status)476 b Fs(status)15
b(ob)r(ject)g(\(Status\))75 1091 y Fr(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 Fy(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 Ft(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 Fs(INOUT)62 b Ft(buf)527 b Fs(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
Ft(count)482 b Fs(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
Ft(datat)o(yp)q(e)424 b Fs(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 Ft(dest)511 b Fs(rank)14 b(of)f(destination)h(\(in)o(teger\))117
2294 y(IN)155 b Ft(sendtag)443 b Fs(send)15 b(message)f(tag)f(\(in)o(teger\))
117 2365 y(IN)155 b Ft(source)468 b Fs(rank)14 b(of)f(source)j(\(in)o
(teger\))117 2437 y(IN)155 b Ft(recvtag)449 b Fs(receiv)o(e)15
b(message)f(tag)f(\(in)o(teger\))117 2508 y(IN)155 b Ft(comm)466
b Fs(comm)o(unicator)11 b(\(handle\))117 2579 y(OUT)108 b Ft(status)476
b Fs(status)15 b(ob)r(ject)g(\(Status\))75 2704 y Fr(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 Fw(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 Fu(1.12.)34 b(NULL)16 b(PR)o(OCESSES)1218 b Fy(39)393
49 y Fr(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 Fy(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 Fr(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 Fy(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 Fz(1.12)60 b(Null)19 b(p)n(ro)r(cesses)75 1952 y
Fy(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 Fy(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 Fy(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 Fy(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 Fy(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 Ft(source)h Fy(=)32 b Fo(MPI)p 1090
2348 V 15 w(PROCNULL)16 b Fy(is)i(executed)f(then)h(the)f(status)75
2404 y(ob)s(ject)e(returns)30 b Ft(source)16 b Fy(=)29 b Fo(MPI)p
661 2404 V 14 w(PROCNULL)p Fy(,)14 b Ft(tag)h Fy(=)30 b Fo(MPI)p
1132 2404 V 14 w(ANY)p 1231 2404 V 15 w(T)m(A)o(G)14 b Fy(and)h
Ft(count=0)p Fy(.)75 2546 y Fz(1.13)60 b(Derived)19 b(datat)n(yp)r(es)75
2647 y Fy(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 Fw(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 Fy(40)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fy(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 Fx(general)j(datat)o(yp)q(e)e Fy(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 Fn(\017)23
b Fy(A)15 b(sequence)h(of)f(basic)h(datat)o(yp)q(es)143 1478
y Fn(\017)23 b Fy(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 Fx(t)o(yp)q(e)i(map)p
Fy(.)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 Fx(t)o(yp)q(e)i(signature)e
Fy(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 Fy(=)h Fn(f)p Fy(\()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 Fy(\))p Fi(;)g(:::;)f Fy(\()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 Fy(\))p Fn(g)p Fi(;)75 1993 y Fy(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 Fy(are)f(basic)h(t)o(yp)q(es,)f(and)g
Fi(disp)1233 2000 y Fg(i)1261 1993 y Fy(are)g(displacemen)o(ts.)22
b(Let)676 2094 y Fi(T)6 b(y)r(pesig)14 b Fy(=)f Fn(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 Fn(g)75 2195 y Fy(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
Fp(buf)p Fy(,)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 Fy(en)o(tries,)h(where)f(the)75 2308 y Fi(i)p Fy(-th)e(en)o(try)g(is)h
(at)e(address)h Fi(buf)f Fy(+)c Fi(disp)778 2315 y Fg(i)809
2308 y Fy(and)19 b(has)f(t)o(yp)q(e)g Fi(ty)r(pe)1174 2315
y Fg(i)1188 2308 y Fy(.)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 Fy(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 Fy(.)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
Ft(MPI)p 1359 2478 14 2 v 16 w(SEND\(buf,)h(1,)e(datat)o(yp)q(e,...\))75
2534 y Fy(will)j(use)e(the)h(send)g(bu\013er)f(de\014ned)h(b)o(y)g(the)f
(base)g(address)h Ft(buf)g Fy(and)f(the)g(general)h(datat)o(yp)q(e)f(asso)q
(ciated)75 2591 y(with)f Ft(datat)o(yp)q(e)p Fy(;)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
Ft(datat)o(yp)q(e)75 2647 y Fy(argumen)o(t.)28 b Ft(MPI)p 390
2647 V 16 w(RECV\(buf,)20 b(1,)e(datat)o(yp)q(e,...\))29 b
Fy(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 Ft(buf)h Fy(and)g(the)f(general)h(datat)o(yp)q(e)e
(asso)q(ciated)i(with)f Ft(datat)o(yp)q(e)p Fy(.)1967 46 y
Fw(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 Fu(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b Fy(41)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 Ft(count)j Fy(has)e(v)m(alue)h Fi(>)d Fy(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 Ft(MPI)p 711 219 14
2 v 16 w(INT)f Fy(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 Fn(f)p Fy(\()p Ft(int)p Fi(;)8
b Fy(0\))p Fn(g)p Fy(,)j(with)i(one)g(en)o(try)f(of)g(t)o(yp)q(e)h
Ft(int)g Fy(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
Fx(exten)o(t)f Fy(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 Fy(=)h Fn(f)p Fy(\()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 Fy(\))p Fi(;)g(:::;)f
Fy(\()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 Fy(\))p
Fn(g)p Fi(;)75 635 y Fy(then)501 726 y Fi(l)q(b)p Fy(\()p Fi(T)e(y)r(pemap)p
Fy(\))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 Fy(\()p Fi(T)6 b(y)r(pemap)p
Fy(\))40 b(=)i(max)911 839 y Fg(j)961 812 y Fy(\()p Fi(disp)1063
819 y Fg(j)1089 812 y Fy(+)11 b Fi(siz)r(eof)5 b Fy(\()p Fi(ty)r(pe)1367
819 y Fg(j)1385 812 y Fy(\)\))p Fi(;)22 b Fy(and)406 899 y
Fi(extent)p Fy(\()p Fi(T)6 b(y)r(pemap)p Fy(\))42 b(=)g Fi(ub)p
Fy(\()p Fi(T)6 b(y)r(pemap)p Fy(\))j Fn(\000)h Fi(l)q(b)p Fy(\()p
Fi(T)c(y)r(pemap)p Fy(\))i(+)j Fi(\017:)238 b Fy(\(1.1\))75
990 y(If)17 b Fi(ty)r(pe)206 997 y Fg(i)237 990 y Fy(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 Fy(,)h(then)g Fi(\017)g Fy(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 Fy(\()p Fi(T)6 b(y)r(pemap)p Fy(\))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 Fy(.)166 1103 y(Example:)23 b(Assume)17
b(that)f Fi(T)6 b(y)r(pe)14 b Fy(=)h Fn(f)p Fy(\()p Ft(double)q
Fi(;)8 b Fy(0\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(8\))p
Fn(g)15 b Fy(\(a)h Ft(double)h Fy(at)f(displacemen)o(t)i(zero,)75
1159 y(follo)o(w)o(ed)g(b)o(y)g(a)f Ft(cha)o(r)g Fy(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 Fp(R)n(ationale.)39 b Fy(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 Fp(End)15 b(of)i(r)n(ationale.)p Fy(\))75 1767 y Fq(1.13.1)49
b(Datat)o(yp)q(e)17 b(constructo)o(rs)75 1853 y Ft(Contiguous)47
b Fy(The)16 b(simplest)i(datat)o(yp)q(e)e(constructor)f(is)i
Ft(MPI)p 1171 1853 V 16 w(TYPE)p 1304 1853 V 17 w(CONTIGUOUS)h
Fy(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 Ft(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 Fs(IN)155 b Ft(count)482 b Fs(replication)14
b(coun)o(t)g(\(nonnegativ)o(e)g(in)o(teger\))117 2164 y(IN)155
b Ft(oldt)o(yp)q(e)450 b Fs(old)13 b(datat)o(yp)q(e)i(\(handle\))117
2237 y(OUT)108 b Ft(newt)o(yp)q(e)433 b Fs(new)15 b(datat)o(yp)q(e)f
(\(handle\))75 2361 y Fr(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 Ft(newt)o(yp)q(e)c Fy(is)f(the)f(datat)o(yp)q(e)g(obtained)h(b)o(y)f
(concatenating)h Ft(count)h Fy(copies)f(of)f Ft(oldt)o(yp)q(e)p
Fy(.)27 b(Concate-)75 2704 y(nation)15 b(is)h(de\014ned)h(using)f
Fp(extent)e Fy(as)h(the)h(size)g(of)e(the)i(concatenated)f(copies.)-32
46 y Fw(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 Fy(42)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y Fl(Discussion:)55
b Fs(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 Fk(\))75
106 y Fs(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 Fy(Example:)31
b(let)21 b Ft(oldt)o(yp)q(e)h Fy(ha)o(v)o(e)e(t)o(yp)q(e)h(map)f
Fn(f)p Fy(\()p Ft(double)q Fi(;)8 b Fy(0\))p Fi(;)g Fy(\()p
Ft(cha)o(r)n Fi(;)g Fy(8\))p Fn(g)p Fi(;)18 b Fy(with)j(exten)o(t)g(16,)g
(and)f(let)75 358 y Ft(count)14 b Fy(=)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 Ft(newt)o(yp)q(e)h
Fy(is)308 458 y Fn(f)p Fy(\()p Ft(double)q Fi(;)8 b Fy(0\))p
Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(8\))p Fi(;)g Fy(\()p
Ft(double)n Fi(;)g Fy(16\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g
Fy(24\))p Fi(;)g Fy(\()p Ft(double)o Fi(;)g Fy(32\))p Fi(;)g
Fy(\()p Ft(cha)o(r)m Fi(;)g Fy(40\))p Fn(g)p Fy(;)75 558 y(i.e.,)15
b(alternating)g Ft(double)i Fy(and)e Ft(cha)o(r)g Fy(elemen)o(ts,)h(with)f
(displacemen)o(ts)i(0)p Fi(;)8 b Fy(8)p Fi(;)g Fy(16)p Fi(;)f
Fy(24)p Fi(;)g Fy(32)o Fi(;)h Fy(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 Ft(oldt)o(yp)q(e)h Fy(is)600
715 y Fn(f)p Fy(\()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 Fy(\))p Fi(;)g(:::;)g Fy(\()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 Fy(\))p Fn(g)p Fi(;)75
815 y Fy(with)16 b(exten)o(t)e Fi(extent)p Fy(.)22 b(Then)15
b Ft(newt)o(yp)q(e)i Fy(has)e(a)g(t)o(yp)q(e)h(map)f(with)g
Ft(count)c Fn(\001)f Ft(n)16 b Fy(en)o(tries)f(de\014ned)i(b)o(y:)75
915 y Fn(f)p Fy(\()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 Fy(\))p Fi(;)g(:::;)g Fy(\()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 Fy(\))p Fi(;)g Fy(\()p
Fi(ty)r(pe)914 922 y Fj(0)931 915 y Fi(;)g(disp)1036 922 y
Fj(0)1061 915 y Fy(+)h Fi(extent)p Fy(\))p Fi(;)f(:::;)g Fy(\()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 Fy(+)g Fi(extent)p Fy(\))p
Fi(;)145 1015 y(:::;)g Fy(\()p Fi(ty)r(pe)307 1022 y Fj(0)324
1015 y Fi(;)g(disp)429 1022 y Fj(0)456 1015 y Fy(+)j Fi(extent)g
Fn(\001)f Fy(\()p Ft(count)h Fn(\000)g Fy(1\)\))p Fi(;)d(:::;)f
Fy(\()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
Fy(+)j Fi(extent)g Fn(\001)f Fy(\()p Ft(count)h Fn(\000)f Fy(1\)\))p
Fn(g)p Fi(:)75 1135 y Ft(V)o(ecto)o(r)45 b Fy(The)16 b(function)g
Ft(MPI)p 600 1135 14 2 v 16 w(TYPE)p 733 1135 V 17 w(VECTOR)g
Fy(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 Ft(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 Fs(IN)155 b Ft(count)482 b Fs(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 Ft(blo)q(cklength)371
b Fs(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 Ft(stride)484 b Fs(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 Ft(oldt)o(yp)q(e)450 b Fs(old)13
b(datat)o(yp)q(e)i(\(handle\))117 1898 y(OUT)108 b Ft(newt)o(yp)q(e)433
b Fs(new)15 b(datat)o(yp)q(e)f(\(handle\))75 2022 y Fr(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 Fy(Example:)c(Assume,)12 b(again,)g(that)f
Ft(oldt)o(yp)q(e)i Fy(has)f(t)o(yp)q(e)g(map)g Fn(f)p Fy(\()p
Ft(double)p Fi(;)c Fy(0\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g
Fy(8\))p Fn(g)p Fi(;)i Fy(with)i(exten)o(t)75 2364 y(16.)20
b(A)c(call)h(to)d Ft(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
Fy(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 Fn(f)p Fy(\()p Ft(double)p Fi(;)8 b Fy(0\))p Fi(;)g
Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(8\))p Fi(;)g Fy(\()p Ft(double)o
Fi(;)g Fy(16\))p Fi(;)g Fy(\()p Ft(cha)o(r)m Fi(;)g Fy(24\))p
Fi(;)g Fy(\()p Ft(double)o Fi(;)g Fy(32\))p Fi(;)g Fy(\()p
Ft(cha)o(r)n Fi(;)g Fy(40\))p Fi(;)279 2621 y Fy(\()p Ft(double)q
Fi(;)g Fy(64\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(72\))p
Fi(;)g Fy(\()p Ft(double)n Fi(;)g Fy(80\))p Fi(;)g Fy(\()p
Ft(cha)o(r)n Fi(;)g Fy(88\))p Fi(;)g Fy(\()p Ft(double)n Fi(;)g
Fy(96\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(104\))p Fn(g)i
Fy(:)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 Fw(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 Fu(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b Fy(43)166 49 y(A)15 b(call)h(to)f Ft(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 Fy(will)g(create)e(the)g(datat)o(yp)q(e)237 154 y Fn(f)p
Fy(\()p Ft(double)q Fi(;)8 b Fy(0\))p Fi(;)g Fy(\()p Ft(cha)o(r)n
Fi(;)g Fy(8\))p Fi(;)g Fy(\()p Ft(double)o Fi(;)g Fn(\000)p
Fy(32\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fn(\000)p Fy(24\))p
Fi(;)g Fy(\()p Ft(double)o Fi(;)g Fn(\000)p Fy(64\))p Fi(;)g
Fy(\()p Ft(cha)o(r)n Fi(;)g Fn(\000)p Fy(56\))p Fn(g)p Fi(:)166
260 y Fy(In)16 b(general,)f(assume)g(that)g Ft(oldt)o(yp)q(e)h
Fy(has)f(t)o(yp)q(e)g(map)600 365 y Fn(f)p Fy(\()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
Fy(\))p Fi(;)g(:::;)g Fy(\()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 Fy(\))p Fn(g)p Fi(;)75 470 y Fy(with)15 b(exten)o(t)e
Fi(extent)p Fy(.)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 Ft(count)9 b Fn(\001)f Ft(blo)q(cklength)i
Fn(\001)e Fi(n)75 526 y Fy(en)o(tries:)611 586 y Fn(f)p Fy(\()p
Fi(ty)r(pe)736 593 y Fj(0)754 586 y Fi(;)g(disp)859 593 y Fj(0)877
586 y Fy(\))p Fi(;)g(:::;)g Fy(\()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 Fy(\))p Fi(;)409 675 y Fy(\()p Fi(ty)r(pe)511
682 y Fj(0)530 675 y Fi(;)g(disp)635 682 y Fj(0)662 675 y Fy(+)j
Fi(extent)p Fy(\))p Fi(;)d(:::;)g Fy(\()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 Fy(+)j Fi(extent)p Fy(\))p Fi(;)d(:::;)75
765 y Fy(\()p Fi(ty)r(pe)177 772 y Fj(0)196 765 y Fi(;)g(disp)301
772 y Fj(0)328 765 y Fy(+)i(\()p Ft(blo)q(cklength)i Fn(\000)e
Fy(1\))f Fn(\001)h Fi(extent)p Fy(\))p Fi(;)e(:::;)g Fy(\()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 Fy(+)j(\()p Ft(blo)q(cklength)g
Fn(\000)f Fy(1\))g Fn(\001)f Fi(extent)p Fy(\))p Fi(;)273 854
y Fy(\()p Fi(ty)r(pe)375 861 y Fj(0)393 854 y Fi(;)f(disp)498
861 y Fj(0)526 854 y Fy(+)i Ft(stride)h Fn(\001)f Fi(extent)p
Fy(\))p Fi(;)e(:::;)g Fy(\()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 Fy(+)j Ft(stride)g Fn(\001)f Fi(extent)p Fy(\))p
Fi(;)e(:::;)455 944 y Fy(\()p Fi(ty)r(pe)557 951 y Fj(0)576
944 y Fi(;)g(disp)681 951 y Fj(0)708 944 y Fy(+)j(\()p Ft(stride)g
Fy(+)f Ft(blo)q(cklength)i Fn(\000)f Fy(1\))e Fn(\001)h Fi(extent)p
Fy(\))p Fi(;)e(:::;)403 1033 y Fy(\()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 Fy(+)i(\()p Ft(stride)h Fy(+)f Ft(blo)q(cklength)i
Fn(\000)f Fy(1\))e Fn(\001)h Fi(extent)p Fy(\))p Fi(;)e(::::;)523
1123 y Fy(\()p Fi(ty)r(pe)625 1130 y Fj(0)643 1123 y Fi(;)g(disp)748
1130 y Fj(0)776 1123 y Fy(+)i Ft(stride)h Fn(\001)f Fy(\()p
Ft(count)h Fn(\000)f Fy(1\))g Fn(\001)g Fi(extent)p Fy(\))p
Fi(;)e(:::;)476 1213 y Fy(\()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 Fy(+)j Ft(stride)g Fn(\001)e Fy(\()p Ft(count)i
Fn(\000)g Fy(1\))e Fn(\001)h Fi(extent)p Fy(\))p Fi(;)e(:::;)329
1302 y Fy(\()p Fi(ty)r(pe)431 1309 y Fj(0)450 1302 y Fi(;)g(disp)555
1309 y Fj(0)582 1302 y Fy(+)j(\()p Ft(stride)f Fn(\001)g Fy(\()p
Ft(count)h Fn(\000)g Fy(1\))e(+)h Ft(blo)q(cklength)j Fn(\000)d
Fy(1\))f Fn(\001)h Fi(extent)p Fy(\))p Fi(;)e(:::;)307 1392
y Fy(\()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 Fy(+)i(\()p
Ft(stride)h Fn(\001)e Fy(\()p Ft(count)j Fn(\000)e Fy(1\))f(+)i
Ft(blo)q(cklength)h Fn(\000)e Fy(1\))g Fn(\001)g Fi(extent)p
Fy(\))p Fn(g)166 1479 y Fy(A)16 b(call)i(to)e Ft(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 Fy(is)f(equiv)m(alen)o(t)h(to)e(a)g(call)i(to)75
1536 y Ft(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 Fy(,)h(or)e(to)g(a)h(call)g(to)f
Ft(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 Fy(,)h
Ft(n)e Fy(arbitrary)l(.)75 1718 y Ft(Hvecto)o(r)45 b Fy(The)19
b(function)h Ft(MPI)p 631 1718 V 16 w(TYPE)p 764 1718 V 17
w(HVECTOR)g Fy(is)f(iden)o(tical)i(to)d Ft(MPI)p 1389 1718
V 16 w(TYPE)p 1522 1718 V 17 w(VECTOR)p Fy(,)h(except)75 1774
y(that)h Ft(stride)h Fy(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 Ft(H)d Fy(is)h(used)g(for)e(\\heterogeneous"\).)75 1935
y Ft(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 Fs(IN)155 b Ft(count)482 b Fs(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 Ft(blo)q(cklength)371
b Fs(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 Ft(stride)484 b Fs(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 Ft(oldt)o(yp)q(e)450 b Fs(old)13 b(datat)o(yp)q(e)i(\(handle\))117
2378 y(OUT)108 b Ft(newt)o(yp)q(e)433 b Fs(new)15 b(datat)o(yp)q(e)f
(\(handle\))75 2503 y Fr(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 Fw(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 Fy(44)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y Fy(Assume)f(that)g
Ft(oldt)o(yp)q(e)h Fy(has)f(t)o(yp)q(e)g(map)600 155 y Fn(f)p
Fy(\()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 Fy(\))p Fi(;)g(:::;)g Fy(\()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 Fy(\))p Fn(g)p Fi(;)75 260
y Fy(with)15 b(exten)o(t)e Fi(extent)p Fy(.)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 Ft(count)9
b Fn(\001)f Ft(blo)q(cklength)i Fn(\001)e Fi(n)75 317 y Fy(en)o(tries:)611
377 y Fn(f)p Fy(\()p Fi(ty)r(pe)736 384 y Fj(0)754 377 y Fi(;)g(disp)859
384 y Fj(0)877 377 y Fy(\))p Fi(;)g(:::;)g Fy(\()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 Fy(\))p Fi(;)409 467 y Fy(\()p
Fi(ty)r(pe)511 474 y Fj(0)530 467 y Fi(;)g(disp)635 474 y Fj(0)662
467 y Fy(+)j Fi(extent)p Fy(\))p Fi(;)d(:::;)g Fy(\()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 Fy(+)j Fi(extent)p Fy(\))p
Fi(;)d(:::;)75 558 y Fy(\()p Fi(ty)r(pe)177 565 y Fj(0)196
558 y Fi(;)g(disp)301 565 y Fj(0)328 558 y Fy(+)i(\()p Ft(blo)q(cklength)i
Fn(\000)e Fy(1\))f Fn(\001)h Fi(extent)p Fy(\))p Fi(;)e(:::;)g
Fy(\()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 Fy(+)j(\()p
Ft(blo)q(cklength)g Fn(\000)f Fy(1\))g Fn(\001)f Fi(extent)p
Fy(\))p Fi(;)434 649 y Fy(\()p Fi(ty)r(pe)536 656 y Fj(0)555
649 y Fi(;)f(disp)660 656 y Fj(0)687 649 y Fy(+)i Ft(stride)q
Fy(\))p Fi(;)e(:::;)g Fy(\()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 Fy(+)j Ft(stride)q Fy(\))p Fi(;)d(:::;)455
740 y Fy(\()p Fi(ty)r(pe)557 747 y Fj(0)576 740 y Fi(;)g(disp)681
747 y Fj(0)708 740 y Fy(+)j Ft(stride)g Fy(+)f(\()p Ft(blo)q(cklength)i
Fn(\000)f Fy(1\))e Fn(\001)h Fi(extent)p Fy(\))p Fi(;)e(:::;)403
831 y Fy(\()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
Fy(+)i Ft(stride)h Fy(+)g(\()p Ft(blo)q(cklength)g Fn(\000)g
Fy(1\))e Fn(\001)h Fi(extent)p Fy(\))p Fi(;)e(::::;)603 921
y Fy(\()p Fi(ty)r(pe)705 928 y Fj(0)724 921 y Fi(;)g(disp)829
928 y Fj(0)856 921 y Fy(+)j Ft(stride)g Fn(\001)e Fy(\()p Ft(count)j
Fn(\000)e Fy(1\)\))p Fi(;)e(:::;)557 1012 y Fy(\()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 Fy(+)i Ft(stride)h Fn(\001)f
Fy(\()p Ft(count)h Fn(\000)f Fy(1\)\))p Fi(;)e(:::;)329 1103
y Fy(\()p Fi(ty)r(pe)431 1110 y Fj(0)450 1103 y Fi(;)g(disp)555
1110 y Fj(0)582 1103 y Fy(+)j Ft(stride)g Fn(\001)e Fy(\()p
Ft(count)i Fn(\000)g Fy(1\))e(+)i(\()p Ft(blo)q(cklength)h
Fn(\000)e Fy(1\))f Fn(\001)h Fi(extent)p Fy(\))p Fi(;)e(:::;)307
1194 y Fy(\()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 Fy(+)i Ft(stride)h Fn(\001)f Fy(\()p Ft(count)h Fn(\000)f
Fy(1\))g(+)g(\()p Ft(blo)q(cklength)i Fn(\000)e Fy(1\))g Fn(\001)g
Fi(extent)p Fy(\))p Fn(g)75 1320 y Ft(Indexed)47 b Fy(The)19
b(function)h Ft(MPI)p 629 1320 14 2 v 16 w(TYPE)p 762 1320
V 17 w(INDEXED)f Fy(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 Ft(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 Fs(IN)155 b Ft(count)482 b Fs(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 Fs(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 Fs(\(non-)905
1786 y(negativ)o(e)14 b(in)o(teger\))117 1863 y(IN)155 b Ft(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 Fs(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 Ft(a)o(rra)o(y)p 416 1997 V 15 w(of)p 468 1997 V
16 w(displacements)162 b Fs(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
Fs(exten)o(t)c(\(arra)o(y)f(of)f(in)o(teger\))117 2131 y(IN)155
b Ft(oldt)o(yp)q(e)450 b Fs(old)13 b(datat)o(yp)q(e)i(\(handle\))117
2208 y(OUT)108 b Ft(newt)o(yp)q(e)433 b Fs(new)15 b(datat)o(yp)q(e)f
(\(handle\))75 2334 y Fr(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 Fw(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 Fu(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b Fy(45)166 49 y(Example:)25 b(let)19 b Ft(oldt)o(yp)q(e)f
Fy(ha)o(v)o(e)g(t)o(yp)q(e)g(map)f Fn(f)p Fy(\()p Ft(double)q
Fi(;)8 b Fy(0\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(8\))p
Fn(g)p Fi(;)15 b Fy(with)j(exten)o(t)g(16.)27 b(Let)18 b Ft(B)g(=)75
106 y(\(3,)13 b(1\))h Fy(and)g(let)h Ft(D)f(=)g(\(4,)f(0\))p
Fy(.)19 b(A)14 b(call)i(to)d Ft(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
Fy(returns)75 162 y(a)g(datat)o(yp)q(e)g(with)g(t)o(yp)q(e)g(map)285
251 y Fn(f)p Fy(\()p Ft(double)q Fi(;)8 b Fy(64\))p Fi(;)g
Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(72\))p Fi(;)g Fy(\()p Ft(double)n
Fi(;)g Fy(80\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(88\))p
Fi(;)g Fy(\()p Ft(double)n Fi(;)g Fy(96\))p Fi(;)g Fy(\()p
Ft(cha)o(r)n Fi(;)g Fy(104\))p Fi(;)760 339 y Fy(\()p Ft(double)q
Fi(;)g Fy(0\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(8\))p
Fn(g)j Fy(:)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
Ft(oldt)o(yp)q(e)h Fy(has)f(t)o(yp)q(e)g(map)600 618 y Fn(f)p
Fy(\()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 Fy(\))p Fi(;)g(:::;)g Fy(\()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 Fy(\))p Fn(g)p Fi(;)75 706
y Fy(with)35 b(exten)o(t)g Fp(extent)p Fy(.)79 b(Let)36 b Ft(B)f
Fy(b)q(e)h(the)f Ft(a)o(rra)o(y)p 1013 706 V 15 w(of)p 1065
706 V 16 w(blo)q(cklength)i Fy(argumen)o(t)d(and)h Ft(D)g Fy(b)q(e)h(the)75
763 y Ft(a)o(rra)o(y)p 173 763 V 15 w(of)p 225 763 V 16 w(displacements)15
b Fy(argumen)o(t.)k(The)c(newly)h(created)f(datat)o(yp)q(e)g(has)g
Fi(n)c Fn(\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 Ft(B)p Fy([)p Ft(i)p
Fy(])k(en)o(tries:)284 851 y Fn(f)p Fy(\()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
Fy(+)j Ft(D)p Fy([)p Ft(0)p Fy(])e Fn(\001)g Fi(extent)p Fy(\))p
Fi(;)f(:::;)g Fy(\()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 Fy(+)i Ft(D)p Fy([)p Ft(0)p Fy(])f Fn(\001)h Fi(extent)p
Fy(\))p Fi(;)e(:::;)75 940 y Fy(\()p Fi(ty)r(pe)177 947 y Fj(0)196
940 y Fi(;)g(disp)301 947 y Fj(0)325 940 y Fy(+)f(\()p Ft(D)p
Fy([)p Ft(0)p Fy(])e(+)i Ft(B)p Fy([)p Ft(0)p Fy(])f Fn(\000)h
Fy(1\))g Fn(\001)g Fi(extent)p Fy(\))p Fi(;)h(:::;)g Fy(\()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 Fy(+)f(\()p Ft(D)p Fy([)p
Ft(0)p Fy(])e(+)i Ft(B)p Fy([)p Ft(0)p Fy(])g Fn(\000)g Fy(1\))g
Fn(\001)g Fi(extent)p Fy(\))p Fi(;)h(:::;)134 1017 y Fy(\()p
Fi(ty)r(pe)236 1024 y Fj(0)255 1017 y Fi(;)g(disp)360 1024
y Fj(0)387 1017 y Fy(+)i Ft(D)p Fy([)p Ft(count)h Fn(\000)g
Ft(1)p Fy(])e Fn(\001)h Fi(extent)p Fy(\))p Fi(;)e(:::;)g Fy(\()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 Fy(+)j Ft(D)p Fy([)p
Ft(count)g Fn(\000)f Ft(1)p Fy(])g Fn(\001)f Fi(extent)p Fy(\))p
Fi(;)f(:::;)375 1093 y Fy(\()p Fi(ty)r(pe)477 1100 y Fj(0)496
1093 y Fi(;)g(disp)601 1100 y Fj(0)628 1093 y Fy(+)i(\()p Ft(D)p
Fy([)p Ft(count)h Fn(\000)f Ft(1)p Fy(])g(+)g Ft(B)p Fy([)p
Ft(count)i Fn(\000)e Ft(1)p Fy(])g Fn(\000)g Fy(1\))g Fn(\001)f
Fi(extent)p Fy(\))p Fi(;)f(:::;)346 1170 y Fy(\()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 Fy(+)j(\()p Ft(D)p Fy([)p
Ft(count)f Fn(\000)h Ft(1)p Fy(])e(+)h Ft(B)p Fy([)p Ft(count)i
Fn(\000)e Ft(1)p Fy(])g Fn(\000)g Fy(1\))g Fn(\001)f Fi(extent)p
Fy(\))p Fn(g)p Fi(:)166 1247 y Fy(A)k(call)g(to)f Ft(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 Fy(is)f(equiv)m(alen)o(t)75
1303 y(to)i(a)f(call)j(to)d Ft(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
Fy(where)623 1392 y Ft(D)p Fy([)p Ft(j)p Fy(])12 b(=)h Fi(j)f
Fn(\001)e Ft(stride)16 b Fi(;)8 b(j)14 b Fy(=)f(0)p Fi(;)8
b(:::;)g Ft(count)g Fn(\000)j Fy(1)p Fi(;)75 1481 y Fy(and)594
1537 y Ft(B)p Fy([)p Ft(j)p Fy(])h(=)h Ft(blo)q(cklength)18
b Fi(;)8 b(j)14 b Fy(=)f(0)p Fi(;)8 b(:::;)g Ft(count)g Fn(\000)j
Fy(1)p Fi(:)75 1655 y Ft(Hindexed)47 b Fy(The)11 b(function)h
Ft(MPI)p 643 1655 V 15 w(TYPE)p 775 1655 V 17 w(HINDEXED)f
Fy(is)g(iden)o(tical)i(to)d Ft(MPI)p 1383 1655 V 15 w(TYPE)p
1515 1655 V 17 w(INDEXED)p Fy(,)g(except)75 1711 y(that)19
b(blo)q(c)o(k)i(displacemen)o(ts)h(in)41 b Ft(a)o(rra)o(y)p
774 1711 V 14 w(of)p 825 1711 V 16 w(displacements)20 b Fy(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 Ft(oldt)o(yp)q(e)h Fy(exten)o(t.)75 1872 y Ft(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 Fs(IN)155 b Ft(count)482
b Fs(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 Fs(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
Fs(\(in)o(te-)905 2118 y(ger\))117 2191 y(IN)155 b Ft(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 Fs(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 Ft(a)o(rra)o(y)p 416 2320 V 15 w(of)p 468 2320
V 16 w(displacements)162 b Fs(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 Ft(oldt)o(yp)q(e)450 b Fs(old)13 b(datat)o(yp)q(e)i(\(handle\))117
2466 y(OUT)108 b Ft(newt)o(yp)q(e)433 b Fs(new)15 b(datat)o(yp)q(e)f
(\(handle\))75 2591 y Fr(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 Fw(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 Fy(46)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fr(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 Fy(Assume)15 b(that)g Ft(oldt)o(yp)q(e)h
Fy(has)f(t)o(yp)q(e)g(map)600 411 y Fn(f)p Fy(\()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
Fy(\))p Fi(;)g(:::;)g Fy(\()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 Fy(\))p Fn(g)p Fi(;)75 517 y Fy(with)35 b(exten)o(t)g
Fp(extent)p Fy(.)79 b(Let)36 b Ft(B)f Fy(b)q(e)h(the)f Ft(a)o(rra)o(y)p
1013 517 14 2 v 15 w(of)p 1065 517 V 16 w(blo)q(cklength)i
Fy(argumen)o(t)d(and)h Ft(D)g Fy(b)q(e)h(the)75 573 y Ft(a)o(rra)o(y)p
173 573 V 15 w(of)p 225 573 V 16 w(displacements)21 b Fy(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 Fn(\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 Ft(B)p Fy([)p
Ft(i)p Fy(])h(en)o(tries:)446 735 y Fn(f)p Fy(\()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
Fy(+)j Ft(D)p Fy([)p Ft(0)p Fy(])o(\))p Fi(;)d(:::;)g Fy(\()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 Fy(+)i Ft(D)p Fy([)p
Ft(0)p Fy(])o(\))p Fi(;)e(:::;)75 844 y Fy(\()p Fi(ty)r(pe)177
851 y Fj(0)196 844 y Fi(;)g(disp)301 851 y Fj(0)325 844 y Fy(+)f
Ft(D)p Fy([)p Ft(0)p Fy(])e(+)i(\()p Ft(B)p Fy([)p Ft(0)p Fy(])f
Fn(\000)h Fy(1\))g Fn(\001)g Fi(extent)p Fy(\))p Fi(;)h(:::;)g
Fy(\()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 Fy(+)f
Ft(D)p Fy([)p Ft(0)p Fy(])f(+)h(\()p Ft(B)p Fy([)p Ft(0)p Fy(])f
Fn(\000)h Fy(1\))g Fn(\001)g Fi(extent)p Fy(\))p Fi(;)h(:::;)295
934 y Fy(\()p Fi(ty)r(pe)397 941 y Fj(0)416 934 y Fi(;)g(disp)521
941 y Fj(0)548 934 y Fy(+)j Ft(D)p Fy([)p Ft(count)g Fn(\000)f
Ft(1)p Fy(])o(\))p Fi(;)e(:::;)g Fy(\()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 Fy(+)j Ft(D)p Fy([)p Ft(count)g Fn(\000)f
Ft(1)p Fy(])o(\))p Fi(;)e(:::;)375 1024 y Fy(\()p Fi(ty)r(pe)477
1031 y Fj(0)496 1024 y Fi(;)g(disp)601 1031 y Fj(0)628 1024
y Fy(+)i Ft(D)p Fy([)p Ft(count)h Fn(\000)g Ft(1)p Fy(])e(+)i(\()p
Ft(B)p Fy([)p Ft(count)g Fn(\000)f Ft(1)p Fy(])g Fn(\000)g
Fy(1\))g Fn(\001)f Fi(extent)p Fy(\))p Fi(;)f(:::;)346 1115
y Fy(\()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 Fy(+)j
Ft(D)p Fy([)p Ft(count)f Fn(\000)h Ft(1)p Fy(])e(+)i(\()p Ft(B)p
Fy([)p Ft(count)g Fn(\000)f Ft(1)p Fy(])g Fn(\000)g Fy(1\))g
Fn(\001)f Fi(extent)p Fy(\))p Fn(g)p Fi(:)75 1241 y Ft(Struct)47
b(MPI)p 323 1241 V 16 w(TYPE)p 456 1241 V 16 w(STRUCT)23 b
Fy(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 Ft(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 Fs(IN)155 b Ft(count)482 b Fs(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 Fs(,)h
Fo(a)o(rra)o(y)p 1432 1593 V 15 w(of)p 1481 1593 V 14 w(displacements)e
Fs(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 Fs(IN)155 b Ft(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 Fs(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 Ft(a)o(rra)o(y)p
416 1804 V 15 w(of)p 468 1804 V 16 w(displacements)162 b Fs(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 Ft(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 Fs(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 Ft(newt)o(yp)q(e)433 b Fs(new)15 b(datat)o(yp)q(e)f(\(handle\))75
2141 y Fr(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 Fy(Example:)d(Let)c Ft(t)o(yp)q(e1)g Fy(ha)o(v)o(e)f(t)o(yp)q(e)g(map)
755 2704 y Fn(f)p Fy(\()p Ft(double)q Fi(;)8 b Fy(0\))p Fi(;)g
Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(8\))p Fn(g)p Fi(;)1967 46 y
Fw(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 Fu(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b Fy(47)75 49 y(with)12 b(exten)o(t)f(16.)18 b(Let)11 b Ft(B)h(=)g(\(2,)f(1,)
g(3\))p Fy(,)g Ft(D)h(=)f(\(0,)g(16,)h(26\))p Fy(,)e(and)i
Ft(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 Fy(.)75 106 y(Then)j(a)f(call)h(to)e
Ft(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 Fy(returns)e(datat)o(yp)q(e)g(with)g(t)o(yp)q(e)h(map,)240
212 y Fn(f)p Fy(\()p Ft(\015oat)p Fi(;)8 b Fy(0\))p Fi(;)g
Fy(\()p Ft(\015oat)m Fi(;)g Fy(4\))p Fi(;)g Fy(\()p Ft(double)o
Fi(;)g Fy(16\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(24\))p
Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g Fy(26\))p Fi(;)g Fy(\()p
Ft(cha)o(r)m Fi(;)g Fy(27\))p Fi(;)g Fy(\()p Ft(cha)o(r)n Fi(;)g
Fy(28\))p Fn(g)i Fy(:)75 318 y(t)o(w)o(o)g(copies)j(of)e Ft(MPI)p
421 318 V 15 w(FLO)o(A)l(T)h Fy(starting)f(at)g(0,)g(follo)o(w)o(ed)h(b)o(y)f
(one)h(cop)o(y)f(of)g Ft(t)o(yp)q(e1)i Fy(starting)e(at)f(16,)i(follo)o(w)o
(ed)75 375 y(b)o(y)i(three)g(copies)h(of)e Ft(MPI)p 520 375
V 16 w(CHAR)p Fy(,)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
Ft(T)f Fy(b)q(e)h(the)f Ft(a)o(rra)o(y)p 742 433 V 14 w(of)p
793 433 V 16 w(t)o(yp)q(es)i Fy(argumen)o(t,)d(where)31 b Ft(T[i])15
b Fy(is)h(a)f(handle)h(to)464 539 y Fi(ty)r(pemap)635 546 y
Fg(i)661 539 y Fy(=)d Fn(f)p Fy(\()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 Fy(\))p Fi(;)g(:::;)g Fy(\()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 Fy(\))p Fn(g)p
Fi(;)75 645 y Fy(with)i(exten)o(t)g Fi(extent)434 652 y Fg(i)450
645 y Fy(.)18 b(Let)10 b Ft(B)g Fy(b)q(e)h(the)g Ft(a)o(rra)o(y)p
826 645 V 14 w(of)p 877 645 V 16 w(blo)q(cklength)h Fy(argumen)o(t)d(and)i
Ft(D)f Fy(b)q(e)h(the)f Ft(a)o(rra)o(y)p 1671 645 V 14 w(of)p
1722 645 V 16 w(displacements)75 702 y Fy(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 Ft(B)p Fy([)p Ft(i)p Fy(])9 b Fn(\001)h
Fi(n)1693 709 y Fg(i)1722 702 y Fy(en)o(tries)472 821 y Fn(f)p
Fy(\()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 Fy(+)i Ft(D)p Fy([)p Ft(0)p
Fy(])o(\))p Fi(;)e(:::;)g Fy(\()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 Fy(+)j Ft(D)p
Fy([)p Ft(0)p Fy(])o(\))p Fi(;)d(:::;)75 931 y Fy(\()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 Fy(+)f Ft(D)p Fy([)p Ft(0)p Fy(])g(+)g(\()p
Ft(B)p Fy([)p Ft(0)p Fy(])g Fn(\000)g Fy(1\))g Fn(\001)g Fi(extent)839
938 y Fj(0)860 931 y Fy(\))p Fi(;)h(:::;)g Fy(\()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 Fy(+)f
Ft(D)p Fy([)p Ft(0)p Fy(])g(+)g(\()p Ft(B)p Fy([)p Ft(0)p Fy(])i
Fn(\000)i Ft(1)p Fy(\))c Fn(\001)g Fi(extent)1767 938 y Fj(0)1787
931 y Fy(\))p Fi(;)h(:::;)107 1024 y Fy(\()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 Fy(+)j
Ft(D)p Fy([)p Ft(count)f Fn(\000)h Ft(1)p Fy(])o(\))p Fi(;)d(:::;)g
Fy(\()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 Fy(+)i Ft(D)p Fy([)p
Ft(count)h Fn(\000)g Ft(1)p Fy(])o(\))p Fi(;)d(:::;)218 1116
y Fy(\()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 Fy(+)i Ft(D)p Fy([)p Ft(count)h
Fn(\000)g Ft(1)p Fy(])e(+)h(\()p Ft(B)p Fy([)p Ft(count)h Fn(\000)g
Ft(1)p Fy(])e Fn(\000)i Fy(1\))e Fn(\001)h Fi(extent)1525 1123
y Fe(count)r Fh(\000)p Fj(1)1643 1116 y Fy(\))p Fi(;)e(:::;)204
1209 y Fy(\()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 Fy(+)j Ft(D)p Fy([)p
Ft(count)g Fn(\000)f Ft(1)p Fy(])g(+)g(\()p Ft(B)p Fy([)p Ft(count)h
Fn(\000)f Ft(1)p Fy(])g Fn(\000)g Ft(1)p Fy(\))g Fn(\001)g
Fi(extent)1588 1216 y Fe(count)q Fh(\000)p Fj(1)1706 1209 y
Fy(\))p Fn(g)166 1298 y Fy(A)15 b(call)h(to)f Ft(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 Fy(is)g(equiv)m(alen)o(t)h(to)d(a)h(call)75
1355 y(to)d Ft(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 Fy(,)h(where)f(eac)o(h)g(en)o(try)
g(of)g Ft(T)g Fy(is)g(equal)h(to)e Ft(oldt)o(yp)q(e)p Fy(.)75
1485 y Fq(1.13.2)49 b(Address)16 b(and)g(extent)f(functions)75
1573 y Fy(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 Fx(Ab-)75 1630 y(solute)20 b(addresses)15 b Fy(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 Fy(.)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
Ft(buf)h Fy(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 Fy(.)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 Ft(MPI)p 160 1970 14 2 v 16 w(ADDRESS)p
Fy(.)75 2075 y Ft(MPI)p 160 2075 V 16 w(ADDRESS\(lo)q(cation,)16
b(address\))117 2153 y Fs(IN)155 b Ft(lo)q(cation)437 b Fs(lo)q(cation)13
b(in)h(caller)f(memory)f(\(c)o(hoice\))117 2231 y(OUT)108 b
Ft(address)449 b Fs(address)15 b(of)f(lo)q(cation)f(\(in)o(teger\))75
2357 y Fr(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 Fy(Returns)16 b(the)f(\(b)o(yte\))f(address)i(of)e Ft(lo)q(cation)p
Fy(.)166 2704 y(Example:)-32 46 y Fw(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 Fy(48)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)147 49 y Fr(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 Fp(A)n(dvic)n(e)e(to)i
(users.)73 b Fy(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 Ft(MPI)p 1659 502 14 2 v 16 w(ADDRESS)189
558 y Fy(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 Fp(c)n(ast-)189 614 y(expr)n(ession)c Fy(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 Fy(\))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 Ft(MPI)p
1602 784 V 16 w(ADDRESS)i Fy(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 Fp(End)12 b(of)g(advic)n(e)189 897 y(to)k(users.)p
Fy(\))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 Ft(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 Fs(IN)155 b Ft(datat)o(yp)q(e)424
b Fs(datat)o(yp)q(e)14 b(\(handle\))117 1276 y(OUT)108 b Ft(extent)471
b Fs(datat)o(yp)q(e)14 b(exten)o(t)h(\(in)o(teger\))75 1402
y Fr(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 Fy(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(41.)75 1740
y Ft(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 Fs(IN)155 b Ft(datat)o(yp)q(e)424 b Fs(datat)o(yp)q(e)14
b(\(handle\))117 1898 y(OUT)108 b Ft(size)519 b Fs(datat)o(yp)q(e)14
b(size)h(\(in)o(teger\))75 2024 y Fr(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 Fy(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 Ft(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
Fs(IN)155 b Ft(datat)o(yp)q(e)424 b Fs(datat)o(yp)q(e)14 b(\(handle\))117
2577 y(OUT)108 b Ft(count)482 b Fs(datat)o(yp)q(e)14 b(coun)o(t)g(\(in)o
(teger\))75 2704 y Fr(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 Fw(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 Fu(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b Fy(49)75 49 y Fr(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 Fy(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 Fq(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
Fy(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(41.)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 Ft(MPI)p 1706 628
14 2 v 16 w(LB)p Fy(,)g(and)75 685 y Ft(MPI)p 160 685 V 16
w(UB)i Fy(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 Fy(\()p Ft(MPI)p 1357 741 V 17 w(LB)p
Fy(\))d(=)h Fi(extent)p Fy(\()p Ft(MPI)p 1734 741 V 17 w(UB)p
Fy(\))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 Ft(D)f(=)h(\(-3,)f(0,)h(6\))p Fy(;)g
Ft(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 Fy(,)g(and)h Ft(B)f(=)h(\(1,)f(1,)h
(1\))p Fy(.)75 1080 y(Then)e(a)e(call)i(to)f Ft(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
Fy(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 Fn(f)p Ft(\(lb,)f(-3\),)f
(\(int,)i(0\),)e(\(ub,)h(6\))p Fn(g)g Fy(.)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 Ft(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 Fy(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 Fn(f)p Ft(\(lb,)f(-3\),)g
(\(int,)g(0\),)f(\(int,9\),)h(\(ub,)h(15\))p Fn(g)d Fy(.)20
b(\(En)o(tries)12 b(of)h(t)o(yp)q(e)g Ft(lb)g Fy(or)g Ft(ub)h
Fy(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 Fy(=)h Fn(f)p Fy(\()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 Fy(\))p Fi(;)g(:::;)f Fy(\()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 Fy(\))p Fn(g)p Fi(;)75 1625 y Fy(then)16 b(the)f
Fx(lo)o(w)o(er)h(b)q(ound)g Fy(of)f Fi(T)6 b(y)r(pemap)15 b
Fy(is)g(de\014ned)i(to)e(b)q(e)227 1759 y Fi(l)q(b)p Fy(\()p
Fi(T)6 b(y)r(pemap)p Fy(\))k(=)544 1687 y Ff(\()598 1730 y
Fy(min)674 1737 y Fg(j)699 1730 y Fi(disp)783 1737 y Fg(j)1142
1730 y Fy(if)16 b(no)f(en)o(try)g(has)g(basic)h(t)o(yp)q(e)f
Ft(lb)598 1787 y Fy(min)q Fn(f)p Fi(disp)781 1794 y Fg(j)826
1787 y Fy(:)27 b Fi(ty)r(pe)950 1794 y Fg(j)981 1787 y Fy(=)13
b Ft(lb)p Fn(g)41 b Fy(otherwise)166 1892 y(Similarly)l(,)17
b(the)e Fx(upp)q(er)j(b)q(ound)e Fy(of)e Fi(T)6 b(y)r(pemap)15
b Fy(is)h(de\014ned)h(to)d(b)q(e)191 2026 y Fi(ub)p Fy(\()p
Fi(T)6 b(y)r(pemap)p Fy(\))11 b(=)520 1954 y Ff(\()575 1997
y Fy(max)659 2004 y Fg(j)684 1997 y Fi(disp)768 2004 y Fg(j)795
1997 y Fy(+)g Fi(siz)r(eof)5 b Fy(\()p Fi(ty)r(pe)1073 2004
y Fg(j)1091 1997 y Fy(\))56 b(if)16 b(no)f(en)o(try)g(has)g(basic)h(t)o(yp)q
(e)f Ft(ub)575 2054 y Fy(max)o Fn(f)p Fi(disp)766 2061 y Fg(j)811
2054 y Fy(:)27 b Fi(ty)r(pe)935 2061 y Fg(j)966 2054 y Fy(=)13
b Ft(ub)q Fn(g)66 b Fy(otherwise)166 2159 y(Then)441 2217 y
Fi(extent)p Fy(\()p Fi(T)6 b(y)r(pemap)p Fy(\))14 b(=)e Fi(ub)p
Fy(\()p Fi(T)6 b(y)r(pemap)p Fy(\))j Fn(\000)i Fi(l)q(b)p Fy(\()p
Fi(T)6 b(y)r(pemap)p Fy(\))i(+)i Fi(\017)75 2301 y Fy(If)19
b Fi(ty)r(pe)208 2308 y Fg(i)242 2301 y Fy(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 Fy(,)i(then)f Fi(\017)h Fy(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 Fy(\()p Fi(T)6 b(y)r(pemap)p Fy(\))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 Fy(.)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 Fx(exten)o(t)p
Fy(.)166 2604 y Fl(Discussion:)52 b Fs(The)15 b(follo)o(wing)c(additional)h
(functions)i(w)o(ere)h(suggested:)575 b Fk(\()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 Fs(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 Fw(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 Fy(50)613 b Fu(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 Fs(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.)166 156 y Fo(MPI)p 243 156 V 14 w(MO)o(VE\(from)o(buf,)
e(fromt)o(yp)q(e,)g(fromcount,)g(tobuf,)j(tot)o(yp)q(e,)g(to)q(count\))75
212 y Fs(Lo)q(cal)f(mo)o(v)o(e)e(of)i(data.)18 b(Essen)o(tially)13
b(equiv)n(alen)o(t)f(to)h Fo(MPI)p 982 212 V 14 w(SENDRECV)g
Fs(with)g Fo(source)h(=)g(dest)p Fs(,)f(but)h(could)f(b)q(e)h(de-)75
269 y(\014ned)d(to)f(b)q(e)h(lenien)o(t)g(w.r.t.)e(t)o(yp)q(e)i(matc)o(hing.)
k(It)c(could)f(b)q(e)h(then)g(used)g(for)f(pac)o(king)g(\(with)g
Fo(tot)o(yp)q(e)h(=)g(MPI)p 1738 269 V 14 w(BYTE)p Fs(\))75
325 y(or)j(unpac)o(king)f(\(with)h Fo(from)o(t)o(yp)q(e)e(=)i(MPI)p
726 325 V 15 w(BYTE)p Fs(\).)75 532 y Fq(1.13.4)49 b(Comm)o(it)13
b(and)k(free)75 618 y Fy(A)g(datat)o(yp)q(e)f(ob)s(ject)h(has)g(to)f(b)q(e)h
Fx(committed)h Fy(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 675 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 731 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
788 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
844 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 901 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 957 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 1014 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 1070 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 1174 y Ft(MPI)p 160 1174 14 2 v 16 w(TYPE)p
293 1174 V 17 w(COMMIT\(datat)o(yp)q(e\))117 1252 y Fs(INOUT)62
b Ft(datat)o(yp)q(e)424 b Fs(datat)o(yp)q(e)14 b(that)g(is)g(committed)e
(\(handle\))75 1377 y Fr(int)23 b(MPI)p 245 1377 15 2 v 17
w(Type)p 358 1377 V 17 w(commit\(MPI)p 615 1377 V 16 w(Datatype)f
(*datatype\))75 1463 y(MPI)p 150 1463 V 17 w(TYPE)p 263 1463
V 16 w(COMMIT\(DATATYPE,)g(IERROR\))170 1520 y(INTEGER)h(DATATYPE,)g(IERROR)
166 1607 y Fy(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 1711 y Ft(MPI)p 160
1711 14 2 v 16 w(TYPE)p 293 1711 V 17 w(FREE\(datat)o(yp)q(e\))117
1788 y Fs(INOUT)62 b Ft(datat)o(yp)q(e)424 b Fs(datat)o(yp)q(e)14
b(that)g(is)g(freed)h(\(handle\))75 1913 y Fr(int)23 b(MPI)p
245 1913 15 2 v 17 w(Type)p 358 1913 V 17 w(free\(MPI)p 567
1913 V 16 w(Datatype)g(*datatype\))75 2000 y(MPI)p 150 2000
V 17 w(TYPE)p 263 2000 V 16 w(FREE\(DATATYPE,)f(IERROR\))170
2056 y(INTEGER)h(DATATYPE,)g(IERROR)166 2143 y Fy(Marks)16
b(the)h(datat)o(yp)q(e)f(ob)s(ject)g(asso)q(ciated)h(with)g
Ft(datat)o(yp)q(e)i Fy(for)d(deallo)q(cation.)26 b(The)17 b(ob)s(ject)f(will)
75 2200 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
2256 y(p)q(oin)o(t)21 b Ft(datat)o(yp)q(e)g Fy(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 2313 y(function)c(after)e(it)i(w)o(as)e(freed.)166
2369 y(Example:)75 2534 y Fr(INTEGER)23 b(type1,)g(type2)75
2591 y(CALL)g(MPI_TYPE_CONTIGUOUS\(5,)e(MPI_REAL,)i(type1,)g(ierr\))409
2647 y(!)h(new)f(type)h(object)f(created)75 2704 y(CALL)g
(MPI_TYPE_COMMIT\(type1,)e(ierr\))1967 46 y Fw(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 Fu(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b Fy(51)409 49 y Fr(!)24 b(now)f(type1)g(can)h(be)f(used)h(for)f
(communication)75 106 y(type2)g(=)h(type1)409 162 y(!)g(type2)f(can)g(be)h
(used)f(for)h(communication)409 219 y(!)g(\(it)f(is)h(a)g(handle)f(to)g(same)
h(object)f(as)g(type1\))75 275 y(CALL)g(MPI_TYPE_VECTOR\(3,)f(5,)h(4,)h
(MPI_REAL,)f(type1,)g(ierr\))409 332 y(!)h(new)f(uncommitted)g(type)g(object)
g(created)75 388 y(CALL)g(MPI_TYPE_COMMIT\(type1,)e(ierr\))409
444 y(!)j(now)f(type1)g(can)h(be)f(used)h(anew)f(for)h(communication)166
541 y Fy(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
598 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 654 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 787 y Fl(Implemen)o(tati)o(on)12
b(note:)166 837 y Fs(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 886 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 936 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 986 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 1036 y(can)i(b)q(e)h(freed.)75 1239 y Fq(1.13.5)49
b(Use)16 b(of)h(general)f(datat)o(yp)q(es)g(in)h(comm)n(unication)75
1325 y Fy(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
1381 y(argumen)o(t)11 b(is)h(required.)19 b(A)12 b(call)g(of)f(the)h(form)e
Ft(MPI)p 947 1381 14 2 v 16 w(SEND\(buf,)j(count,)g(datat)o(yp)q(e)g(,)f
(...\))p Fy(,)e(where)i Ft(count)i Fi(>)75 1438 y Ft(1)p Fy(,)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 Ft(count)75
1494 y Fy(copies)k(of)f Ft(datat)o(yp)q(e)p Fy(.)21 b(Th)o(us,)166
1551 y Ft(MPI)p 251 1551 V 16 w(SEND\(buf,)15 b(count,)i(datat)o(yp)q(e,)f
(dest,)g(tag,)f(comm)m(\))d Fy(is)k(equiv)m(alen)o(t)h(to)75
1648 y Fr(MPI_TYPE_CONTIGUOUS\(count,)j(datatype,)j(newtype\))75
1704 y(MPI_TYPE_COMMIT\(newtype\))75 1761 y(MPI_SEND\(buf,)f(1,)i(newtype,)e
(dest,)i(tag,)f(comm\))166 1858 y Fy(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
Ft(count)h Fy(and)f Ft(datat)o(yp)q(e)75 1914 y Fy(argumen)o(t.)166
1970 y(Supp)q(ose)k(that)e(a)g(a)h(send)g(op)q(eration)g Ft(MPI)p
920 1970 V 16 w(SEND\(buf,)h(count,)g(datat)o(yp)q(e.)26 b(dest,)18
b(tag,)f(comm)m(\))c Fy(is)75 2027 y(executed,)j(where)f Ft(datat)o(yp)q(e)i
Fy(ha)o(v)o(e)e(t)o(yp)q(e)g(map)600 2130 y Fn(f)p Fy(\()p
Fi(ty)r(pe)725 2137 y Fj(0)743 2130 y Fi(;)8 b(disp)848 2137
y Fj(0)865 2130 y Fy(\))p Fi(;)g(:::;)g Fy(\()p Fi(ty)r(pe)1066
2137 y Fg(n)p Fh(\000)p Fj(1)1128 2130 y Fi(;)g(disp)1233 2137
y Fg(n)p Fh(\000)p Fj(1)1297 2130 y Fy(\))p Fn(g)p Fi(;)166
2224 y Fy(with)20 b(exten)o(t)f Fi(extent)i Fy(\(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 2281 y(op)q(eration)c(consists)h(of)f Fi(n)10 b Fn(\001)g
Ft(count)16 b Fy(en)o(tries,)f(where)h(en)o(try)f Fi(i)9 b
Fn(\001)h Fi(n)h Fy(+)f Fi(j)17 b Fy(is)f(at)f(lo)q(cation)653
2384 y Fi(addr)746 2391 y Fg(i;j)796 2384 y Fy(=)e Ft(buf)h
Fy(+)d Fi(extent)g Fn(\001)f Fi(i)g Fy(+)g Fi(disp)1280 2391
y Fg(j)166 2478 y Fy(and)15 b(has)h(t)o(yp)q(e)f Fi(ty)r(pe)522
2485 y Fg(j)540 2478 y Fy(,)g(for)f Fi(i)f Fy(=)g(0)p Fi(;)8
b(:::;)g Ft(count)h Fn(\000)h Fy(1)15 b(and)h Fi(j)f Fy(=)e(0)p
Fi(;)8 b(:::;)g(n)f Fn(\000)k Fy(1.)20 b(These)15 b(en)o(tries)h(need)g(not)
75 2534 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 2591 y(The)g(v)m(ariable)h(stored)e(at)g(address)g
Fi(addr)879 2598 y Fg(i;j)933 2591 y Fy(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 2647 y(matc)o(hes)d
Fi(ty)r(pe)333 2654 y Fg(j)351 2647 y Fy(,)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 2704 y Fi(n)c Fn(\001)g
Ft(count)17 b Fy(en)o(tries,)e(where)g(en)o(try)g Fi(i)10 b
Fn(\001)g Fi(n)g Fy(+)g Fi(j)18 b Fy(has)d(t)o(yp)q(e)g Fi(ty)r(pe)1100
2711 y Fg(j)1118 2704 y Fy(.)-32 46 y Fw(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 Fy(52)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)166 49 y Fy(Similarly)l(,)f(supp)q(ose)f
(that)e(a)h(receiv)o(e)h(op)q(eration)f Ft(MPI)p 1100 49 14
2 v 16 w(RECV\(buf,)h(count,)g(datat)o(yp)q(e,)h(source,)e(tag,)75
106 y(comm)m(,)f(status\))17 b Fy(is)e(executed,)h(where)g
Ft(datat)o(yp)q(e)g Fy(has)g(t)o(yp)q(e)f(map)600 258 y Fn(f)p
Fy(\()p Fi(ty)r(pe)725 265 y Fj(0)743 258 y Fi(;)8 b(disp)848
265 y Fj(0)865 258 y Fy(\))p Fi(;)g(:::;)g Fy(\()p Fi(ty)r(pe)1066
265 y Fg(n)p Fh(\000)p Fj(1)1128 258 y Fi(;)g(disp)1233 265
y Fg(n)p Fh(\000)p Fj(1)1297 258 y Fy(\))p Fn(g)p Fi(;)166
398 y Fy(with)k(exten)o(t)f Fi(extent)i Fy(\(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 455 y(op)q(eration)j(consists)h(of)e(the)h Fi(n)c
Fn(\001)e Ft(count)16 b Fy(en)o(tries,)f(where)h(en)o(try)e
Fi(i)c Fn(\001)f Fi(n)i Fy(+)f Fi(j)17 b Fy(is)f(at)e(lo)q(cation)i
Ft(buf)e Fy(+)c Fi(extent)h Fn(\001)75 511 y Fi(i)d Fy(+)h
Fi(disp)227 518 y Fg(j)259 511 y Fy(and)15 b(has)f(t)o(yp)q(e)h
Fi(ty)r(pe)613 518 y Fg(j)630 511 y Fy(.)20 b(If)15 b(the)f(incoming)i
(message)e(consists)h(of)f Fi(k)i Fy(elemen)o(ts,)e(then)h(w)o(e)g(m)o(ust)75
567 y(ha)o(v)o(e)f Fi(k)g Fn(\024)f Fi(n)d Fn(\001)f Ft(count)p
Fy(;)15 b(the)g Fi(i)9 b Fn(\001)g Fi(n)h Fy(+)f Fi(j)s Fy(-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 624 y Fi(ty)r(pe)159 631 y Fg(j)177 624
y Fy(.)166 690 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 746 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 803 y(de\014nition.)166 869 y(Example:)75 1011 y
Fr(...)75 1067 y(CALL)23 b(MPI_TYPE_CONTIGUOUS\()e(2,)j(MPI_REAL,)f(type2,)g
(...\))75 1124 y(CALL)g(MPI_TYPE_CONTIGUOUS\()e(4,)j(MPI_REAL,)f(type4,)g
(...\))75 1180 y(CALL)g(MPI_TYPE_CONTIGUOUS\()e(2,)j(type2,)f(type22,)g
(...\))75 1237 y(...)75 1293 y(CALL)g(MPI_SEND\()g(a,)h(4,)f(MPI_REAL,)g
(...\))75 1349 y(CALL)g(MPI_SEND\()g(a,)h(2,)f(type2,)g(...\))75
1406 y(CALL)g(MPI_SEND\()g(a,)h(1,)f(type22,)g(...\))75 1462
y(CALL)g(MPI_SEND\()g(a,)h(1,)f(type4,)g(...\))75 1519 y(...)75
1575 y(CALL)g(MPI_RECV\()g(a,)h(4,)f(MPI_REAL,)g(...\))75 1632
y(CALL)g(MPI_RECV\()g(a,)h(2,)f(type2,)g(...\))75 1688 y(CALL)g(MPI_RECV\()g
(a,)h(1,)f(type22,)g(...\))75 1745 y(CALL)g(MPI_RECV\()g(a,)h(1,)f(type4,)g
(...\))166 1877 y Fy(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 1943 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 1999 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 2056 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 2122
y(Supp)q(ose,)j(again,)f(that)f Ft(MPI)p 683 2122 V 15 w(RECV\(buf,)j(count,)
f(datat)o(yp)q(e,)g(dest,)g(tag,)f(comm)m(,)d(status\))k Fy(is)f(exe-)75
2178 y(cuted,)d(where)h Ft(datat)o(yp)q(e)h Fy(has)e(t)o(yp)q(e)g(map)600
2328 y Fn(f)p Fy(\()p Fi(ty)r(pe)725 2335 y Fj(0)743 2328 y
Fi(;)8 b(disp)848 2335 y Fj(0)865 2328 y Fy(\))p Fi(;)g(:::;)g
Fy(\()p Fi(ty)r(pe)1066 2335 y Fg(n)p Fh(\000)p Fj(1)1128 2328
y Fi(;)g(disp)1233 2335 y Fg(n)p Fh(\000)p Fj(1)1297 2328 y
Fy(\))p Fn(g)p Fi(:)166 2468 y Fy(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 2525 y(of)i(lo)q(cations)h(whic)o(h)g
(is)f(a)g(m)o(ultiple)i(of)e Fi(n)p Fy(;)h(an)o(y)f(n)o(um)o(b)q(er)g
Fi(k)i Fy(of)d(basic)i(elemen)o(ts)g(can)f(b)q(e)h(receiv)o(ed,)h(where)75
2581 y(0)d Fn(\024)h Fi(k)h Fn(\024)f Ft(count)e Fn(\001)f
Fi(n)p Fy(.)166 2647 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 Ft(status)j Fy(using)e(the)g(query)
g(function)75 2704 y Ft(MPI)p 160 2704 V 16 w(GET)p 264 2704
V 17 w(ELEMENTS)p Fy(:)1967 46 y Fw(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 Fu(1.13.)34 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1119
b Fy(53)75 49 y Ft(MPI)p 160 49 14 2 v 16 w(GET)p 264 49 V
17 w(ELEMENTS\()15 b(status,)h(datat)o(yp)q(e,)h(count\))117
127 y Fs(IN)155 b Ft(status)476 b Fs(return)15 b(status)g(of)e(receiv)o(e)i
(op)q(eration)f(\(Status\))117 202 y(IN)155 b Ft(datat)o(yp)q(e)424
b Fs(datat)o(yp)q(e)14 b(used)h(b)o(y)f(receiv)o(e)h(op)q(eration)f
(\(handle\))117 278 y(OUT)108 b Ft(count)482 b Fs(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
402 y Fr(int)23 b(MPI)p 245 402 15 2 v 17 w(Get)p 334 402 V
17 w(elements\(MPI)p 639 402 V 16 w(Status)g(status,)f(MPI)p
1084 402 V 17 w(Datatype)h(datatype,)g(int)g(*count\))75 489
y(MPI)p 150 489 V 17 w(GET)p 239 489 V 17 w(ELEMENTS\(STATUS,)e(DATATYPE,)i
(COUNT,)g(IERROR\))170 545 y(INTEGER)g(STATUS\(MPI)p 604 545
V 16 w(STATUS)p 764 545 V 17 w(SIZE\),)g(DATATYPE,)f(COUNT,)h(IERROR)166
632 y Fy(The)13 b(previously)h(used)f(function)h Ft(MPI)p 834
632 14 2 v 16 w(GET)p 938 632 V 16 w(COUNT)g Fy(has)f(a)f(di\013eren)o(t)h(b)
q(eha)o(vior:)19 b(it)13 b(returns)g(the)75 688 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
Ft(MPI)p 1368 688 V 16 w(GET)p 1472 688 V 16 w(COUNT)g Fy(ma)o(y)e(return)75
745 y(an)o(y)i(in)o(teger)h(v)m(alue)g Fi(k)q Fy(,)g(where)f(0)f
Fn(\024)g Fi(k)g Fn(\024)g Ft(count)r Fy(.)19 b(If)c Ft(MPI)p
1047 745 V 16 w(GET)p 1151 745 V 16 w(COUNT)h Fy(returns)e
Fi(k)q Fy(,)g(then)h(the)g(n)o(um)o(b)q(er)75 801 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
Ft(MPI)p 1226 801 V 16 w(GET)p 1330 801 V 16 w(ELEMENTS)p Fy(\))g(is)h
Fi(n)8 b Fn(\001)g Fi(k)q Fy(.)19 b(If)c(the)75 858 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 Fy(,)h(i.e.)27 b(if)18 b(the)g(receiv)o(e)g(op)q(eration)g(has)75
914 y(not)f(receiv)o(ed)i(an)f(in)o(tegral)g(n)o(um)o(b)q(er)g(of)f
Ft(datat)o(yp)q(e)j Fy(\\copies",)e(then)g Ft(MPI)p 1360 914
V 16 w(GET)p 1464 914 V 17 w(COUNT)g Fy(returns)g(the)75 971
y(v)m(alue)e Fo(MPI)p 269 971 13 2 v 15 w(UNDEFINED)p Fy(.)166
1027 y(Example:)75 1134 y Fr(...)75 1191 y(CALL)23 b(MPI_TYPE_CONTIGUOUS\(2,)
e(MPI_REAL,)i(Type2,)g(ierr\))75 1247 y(CALL)g(MPI_COMMIT\(Type2,)f(ierr\))75
1304 y(...)75 1360 y(CALL)h(MPI_RANK\(comm,)f(rank,)h(ierr\))75
1417 y(IF\(rank.EQ.0\))147 1473 y(THEN)218 1530 y(CALL)g(MPI_SEND\(a,)g(2,)g
(MPI_REAL,)g(1,)h(0,)f(comm,)g(ierr\))218 1586 y(CALL)g(MPI_SEND\(a,)g(3,)g
(MPI_REAL,)g(1,)h(0,)f(comm,)g(ierr\))147 1643 y(ELSE)218 1699
y(CALL)g(MPI_RECV\(a,)g(2,)g(Type2,)g(0,)h(0,)g(comm,)f(stat,)g(ierr\))218
1755 y(CALL)g(MPI_GET_COUNT\(stat,)f(Type2,)h(i,)g(ierr\))119
b(!)24 b(returns)f(i=1)218 1812 y(CALL)g(MPI_GET_ELEMENTS\(stat,)e(Type2,)i
(i,)h(ierr\))47 b(!)24 b(returns)f(i=2)218 1868 y(CALL)g(MPI_RECV\(a,)g(2,)g
(Type2,)g(0,)h(0,)g(comm,)f(stat,)g(ierr\))218 1925 y(CALL)g
(MPI_GET_COUNT\(stat,)f(Type2,)h(i,)g(ierr\))119 b(!)24 b(returns)f
(i=MPI_UNDEFINED)218 1981 y(CALL)g(MPI_GET_ELEMENTS\(stat,)e(Type2,)i(i,)h
(ierr\))47 b(!)24 b(returns)f(i=3)75 2038 y(END)g(IF)166 2145
y Fy(The)15 b(function)h Ft(MPI)p 522 2145 14 2 v 16 w(GET)p
626 2145 V 17 w(ELEMENTS)f Fy(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 2201 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 Ft(MPI)p 1507 2201 V 16 w(GET)p 1611 2201 V 17
w(COUNT)g Fy(and)75 2258 y Ft(MPI)p 160 2258 V 16 w(GET)p 264
2258 V 17 w(ELEMENTS)15 b Fy(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 2365 y Fp(R)n(ationale.)38
b Fy(The)14 b(extension)g(giv)o(en)g(to)f(the)h(de\014nition)h(of)e
Ft(MPI)p 1303 2365 V 16 w(GET)p 1407 2365 V 16 w(COUNT)i Fy(seems)e(natural:)
189 2421 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 Ft(count)h Fy(argumen)o(t,)e(when)h(the)189
2478 y(receiv)o(e)e(bu\013er)f(is)h(\014lled.)22 b(Often)15
b(times)f Ft(datat)o(yp)q(e)i Fy(represen)o(ts)f(a)f(basic)h(unit)g(of)f
(data)g(one)g(w)o(an)o(ts)189 2534 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 2591 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 2647 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 Ft(datat)o(yp)q(e)189 2704 y Fy(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)-32 46 y Fw(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 Fy(54)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)189 49 y Fy(represen)o(t)22
b(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 106 y(function)16
b Ft(MPI)p 452 106 14 2 v 15 w(GET)p 555 106 V 17 w(ELEMENTS)p
Fy(.)f(\()p Fp(End)h(of)g(r)n(ationale.)p Fy(\))166 300 y Fl(Implemen)o(tati)
o(on)i(note:)58 b Fs(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 350 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 400 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 450 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
500 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)75 549 y(optimization)h(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 599 y(optimization)11 b(b)o(y)j(explicitly)f(including)g(padding)g
(as)h(part)g(of)f(the)h(message.)75 818 y Fq(1.13.6)49 b(Co)o(rrect)15
b(use)h(of)g(addresses)75 908 y Fy(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 965 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 1021 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
1078 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 Fx(addresses)p Fy(,)f(i.e.)20 b(displacemen)o(ts)
75 1134 y(relativ)o(e)c(to)e(the)i(start)e(address)29 b Fo(MPI)p
733 1134 13 2 v 14 w(BOTTOM)p Fy(,)14 b(has)h(to)g(b)q(e)h(restricted.)166
1193 y(V)l(ariables)g(b)q(elong)f(to)f(the)g(same)g Fx(sequen)o(tial)k
(storage)c Fy(if)h(they)f(b)q(elong)i(to)e(the)g(same)g(arra)o(y)l(,)g(to)75
1250 y(the)k(same)g Ft(COMMON)g Fy(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
1306 y(de\014ned)f(recursiv)o(ely)f(as)f(follo)o(ws:)131 1425
y(1.)22 b(The)g(function)g Ft(MPI)p 558 1425 14 2 v 16 w(ADDRESS)h
Fy(returns)e(a)h(v)m(alid)h(address,)h(when)e(passed)g(as)f(argumen)o(t)g(a)
189 1481 y(v)m(ariable)16 b(of)f(the)g(calling)i(program.)131
1585 y(2.)22 b(The)d Ft(buf)h Fy(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
1641 y(passed)15 b(as)g(argumen)o(t)f(a)h(v)m(ariable)i(of)e(the)g(calling)i
(program.)131 1745 y(3.)22 b(If)15 b Ft(v)g Fy(is)h(a)f(v)m(alid)i(address,)d
(and)i Ft(i)f Fy(is)g(an)h(in)o(teger,)f(then)g Ft(v+i)g Fy(is)h(a)f(v)m
(alid)i(address,)e(pro)o(vided)h Ft(v)f Fy(and)189 1801 y Ft(v+i)g
Fy(are)g(in)h(the)f(same)g(sequen)o(tial)h(storage.)131 1905
y(4.)22 b(If)15 b Ft(v)g Fy(is)h(a)f(v)m(alid)i(address)e(then)29
b Fo(MPI)p 820 1905 13 2 v 15 w(BOTTOM)13 b(+)h(v)h Fy(is)h(a)f(v)m(alid)i
(address.)166 2024 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
2080 y(comm)o(unication)16 b(bu\013ers.)k(F)l(urthermore,)14
b(if)h Ft(u)h Fy(and)f Ft(v)g Fy(are)g(t)o(w)o(o)f(v)m(alid)j(addresses,)e
(then)g(the)g(\(in)o(teger\))75 2137 y(di\013erence)g Ft(u)f(-)g(v)g
Fy(can)g(b)q(e)g(computed)g(only)h(if)f(b)q(oth)g Ft(u)g Fy(and)g
Ft(v)g Fy(are)f(in)i(the)f(same)f(sequen)o(tial)i(storage;)e(no)75
2193 y(other)i(arithmetic)h(op)q(erations)f(can)g(b)q(e)h(meaningfully)h
(executed)g(on)e(addresses.)166 2252 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 Fm(\))75 2308 y
Fy(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
2365 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 2421 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
2478 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
2534 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 Ft(buf)g(=)g(MPI)p 1651 2534
14 2 v 16 w(BOTTOM)p Fy(,)75 2591 y Ft(count)i(=)g(1)p Fy(,)g(and)f(using)h
(a)f Ft(datat)o(yp)q(e)i Fy(argumen)o(t)d(where)i(all)g(displacemen)o(ts)h
(are)d(v)m(alid)j(\(absolute\))75 2647 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 2704 y(sequen)o(tial)h(storage)e
(can)i(only)f(b)q(e)h(constructed)g(using)g Ft(MPI)p 1139 2704
V 15 w(TYPE)p 1271 2704 V 17 w(STRUCT)p Fy(.)1967 46 y Fw(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 Fu(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b Fy(55)189 49 y Fp(A)n(dvic)n(e)15 b(to)i(users.)39 b Fy(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 106 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 162 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 219 y(host)d(program.)19 b(\()p Fp(End)d(of)g(advic)n(e)g(to)h(users.)p
Fy(\))166 412 y Fl(Implemen)o(tati)o(on)d(note:)41 b Fs(There)16
b(is)f(no)g(need)h(to)f(distinguish)g(\(absolute\))h(addresses)h(and)e
(\(relativ)o(e\))75 468 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 468 13
2 v 15 w(BOTTOM)16 b Fs(is)h(zero,)h(and)e(b)q(oth)h(ad-)75
524 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 581 y(recognized)g(as)f(expressions)h(that)f(in)o(v)o
(olv)o(e)f Fo(MPI)p 852 581 V 14 w(BOTTOM)p Fs(.)75 790 y Fq(1.13.7)49
b(Examples)75 877 y Fy(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 1002 y Ft(First)f(example:)43
b Fy(Send)16 b(and)g(receiv)o(e)g(a)e(section)i(of)f(a)g(3D)g(arra)o(y)l(.)
218 1113 y Fr(REAL)23 b(a\(100,100,100\),)f(e\(9,9,9\))218
1169 y(INTEGER)h(oneslice,)g(twoslice,)f(threeslice,)h(sizeofreal,)f(myrank,)
h(ierr)218 1226 y(MPI_STATUS)g(status)75 1339 y(C)143 b(extract)23
b(the)g(section)g(a\(1:17:2,)g(3:11,)g(2:10\))75 1395 y(C)143
b(and)23 b(store)h(it)f(in)h(e\(*,*,*\).)218 1508 y(CALL)f
(MPI_COMM_RANK\(MPI_COMM_WORLD,)d(myrank\))218 1621 y(CALL)j
(MPI_TYPE_EXTENT\()f(MPI_REAL,)h(sizeofreal,)f(ierr\))75 1734
y(C)119 b(create)23 b(datatype)g(for)g(a)h(1D)g(section)218
1790 y(CALL)f(MPI_TYPE_VECTOR\()f(9,)i(1,)f(2,)h(MPI_REAL,)f(oneslice,)f
(ierr\))75 1903 y(C)119 b(create)23 b(datatype)g(for)g(a)h(2D)g(section)218
1960 y(CALL)f(MPI_TYPE_HVECTOR\(9,)f(1,)h(100*sizeofreal,)f(oneslice,)h
(twoslice,ierr\))75 2073 y(C)119 b(create)23 b(datatype)g(for)g(the)h(entire)
f(section)218 2129 y(CALL)g(MPI_TYPE_HVECTOR\()f(9,)i(1,)f
(100*100*sizeofreal,)e(twoslice,)i(1,)767 2186 y(threeslice,)f(ierr\))218
2299 y(CALL)h(MPI_TYPE_COMMIT\()f(threeslice,)h(ierr\))218
2355 y(CALL)g(MPI_SENDRECV\(a\(1,3,2\),)e(1,)j(threeslice,)e(myrank,)h(0,)h
(e,)f(9*9*9,)648 2411 y(MPI_REAL,)f(myrank,)h(0,)h(MPI_COMM_WORLD,)e(status,)
h(ierr\))75 2536 y Ft(Second)17 b(example:)42 b Fy(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
2647 y Fr(REAL)23 b(a\(100,100\),)g(b\(100,100\))218 2704 y(INTEGER)47
b(disp\(100\),)22 b(blocklen\(100\),)g(ltype,)h(myrank,)g(ierr)-32
46 y Fw(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 Fy(56)613 b Fu(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)218 49 y Fr(MPI_STATUS)23 b(status)75
162 y(C)119 b(copy)23 b(lower)h(triangular)e(part)h(of)h(array)f(a)75
219 y(C)119 b(onto)23 b(lower)h(triangular)e(part)h(of)h(array)f(b)218
332 y(CALL)g(MPI_COMM_RANK\(MPI_COMM_WORLD,)d(myrank\))75 444
y(C)119 b(compute)23 b(start)g(and)h(size)f(of)h(each)f(column)218
501 y(DO)h(i=1,)f(100)266 557 y(disp\(i\))g(=)h(100*\(i-1\))e(+)i(i)266
614 y(block\(i\))f(=)g(100-i)218 670 y(END)h(DO)75 783 y(C)119
b(create)23 b(datatype)g(for)g(lower)h(triangular)e(part)218
840 y(CALL)h(MPI_TYPE_INDEX\()f(100,)i(block,)f(disp,)g(MPI_REAL,)f(ltype,)i
(ierr\))218 953 y(CALL)f(MPI_TYPE_COMMIT\(ltype,)e(ierr\))218
1009 y(CALL)i(MPI_SENDRECV\()g(a,)g(1,)h(ltype,)f(myrank,)g(0,)g(b,)h(1,)552
1065 y(ltype,)f(myrank,)g(0,)h(MPI_COMM_WORLD,)e(status,)h(ierr\))75
1192 y Ft(Third)15 b(example:)43 b Fy(T)l(ransp)q(ose)15 b(a)g(matrix)218
1306 y Fr(REAL)23 b(a\(100,100\),)g(b\(100,100\))218 1362 y(INTEGER)g(row,)g
(xpose,)g(sizeofreal,)g(myrank,)g(ierr)218 1419 y(MPI_STATUS)g(status)75
1532 y(C)119 b(transpose)23 b(matrix)g(a)h(onto)f(b)218 1645
y(CALL)g(MPI_COMM_RANK\(MPI_COMM_WORLD,)d(myrank\))218 1758
y(CALL)j(MPI_TYPE_EXTENT\()f(MPI_REAL,)h(sizeofreal,)f(ierr\))75
1870 y(C)119 b(create)23 b(datatype)g(for)g(one)h(row)218 1927
y(CALL)f(MPI_TYPE_VECTOR\()f(100,)h(1,)h(100,)f(MPI_REAL,)g(row,)g(ierr\))75
2040 y(C)119 b(create)23 b(datatype)g(for)g(matrix)g(in)h(row-major)f(order)
218 2096 y(CALL)g(MPI_TYPE_HVECTOR\()f(100,)h(1,)h(sizeofreal,)e(row,)i
(xpose,)f(ierr\))218 2209 y(CALL)g(MPI_TYPE_COMMIT\()f(xpose,)h(ierr\))75
2322 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 2379 y(CALL)g(MPI_SENDRECV\()g(a,)g(1,)h
(xpose,)f(myrank,)g(0,)g(b,)h(100*100,)457 2435 y(MPI_REAL,)e(myrank,)h(0,)h
(MPI_COMM_WORLD,)e(status,)h(ierr\))166 2547 y Fy(Another)15
b(approac)o(h)g(to)f(the)i(transp)q(ose)f(problem:)218 2647
y Fr(REAL)23 b(a\(100,100\),)g(b\(100,100\))218 2704 y(INTEGER)47
b(disp\(2\),)23 b(blocklen\(2\),)f(type\(2\),)h(row,)g(row1,)g(sizeofreal)
1967 46 y Fw(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 Fu(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b Fy(57)218 49 y Fr(INTEGER)47 b(myrank,)23 b(ierr)218 106
y(MPI_STATUS)g(status)218 219 y(CALL)g(MPI_COMM_RANK\(MPI_COMM_WORLD,)d
(myrank\))75 332 y(C)119 b(transpose)23 b(matrix)g(a)h(onto)f(b)218
444 y(CALL)g(MPI_TYPE_EXTENT\()f(MPI_REAL,)h(sizeofreal,)f(ierr\))75
557 y(C)119 b(create)23 b(datatype)g(for)g(one)h(row)218 614
y(CALL)f(MPI_TYPE_VECTOR\()f(100,)h(1,)h(100,)f(MPI_REAL,)g(row,)g(ierr\))75
727 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)218 783 y(disp\(1\))g(=)h(0)218 840
y(disp\(2\))f(=)h(sizeofreal)218 896 y(type\(1\))47 b(=)24
b(row)218 953 y(type\(2\))47 b(=)24 b(MPI_UB)218 1009 y(blocklen\(1\))46
b(=)24 b(1)218 1065 y(blocklen\(2\))46 b(=)24 b(1)218 1122
y(CALL)f(MPI_TYPE_STRUCT\()f(2,)i(blocklen,)e(disp,)i(type,)f(row1,)g(ierr\))
218 1235 y(CALL)g(MPI_TYPE_COMMIT\()f(row1,)h(ierr\))75 1348
y(C)119 b(send)23 b(100)h(rows)f(and)h(receive)f(in)g(column)g(major)g(order)
218 1404 y(CALL)g(MPI_SENDRECV\()g(a,)g(100,)g(row1,)h(myrank,)f(0,)g(b,)h
(100*100,)457 1461 y(MPI_REAL,)e(myrank,)h(0,)h(MPI_COMM_WORLD,)e(status,)h
(ierr\))75 1581 y Ft(F)o(ourth)15 b(example:)43 b Fy(manipulate)17
b(an)e(arra)o(y)f(of)g(structures.)75 1687 y Fr(struct)23 b(Partstruct)147
1744 y({)147 1800 y(int)95 b(class;)47 b(/*)23 b(particle)g(class)g(*/)147
1857 y(double)g(d[6];)71 b(/*)23 b(particle)g(coordinates)f(*/)147
1913 y(char)71 b(b[7];)g(/*)23 b(some)g(additional)g(information)f(*/)147
1970 y(};)75 2083 y(struct)h(Partstruct)94 b(particle[1000];)75
2195 y(int)429 b(i,)24 b(dest,)f(rank;)75 2252 y(MPI_Comm)118
b(comm;)75 2421 y(/*)24 b(build)f(datatype)g(describing)f(structure)h(*/)75
2534 y(MPI_Datatype)f(Particletype;)75 2591 y(MPI_Datatype)g(type[3])h(=)h
({MPI_INT,)e(MPI_DOUBLE,)h(MPI_CHAR};)75 2647 y(int)238 b(blocklen[3])23
b(=)g({1,)h(6,)f(7};)75 2704 y(MPI_Aint)118 b(disp[3];)-32
46 y Fw(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 Fy(58)613 b Fu(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 162 y Fr(/*)24 b(compute)e(displacements)h
(of)g(structure)g(components)f(*/)75 275 y(MPI_Address\()g(particle,)h
(disp\);)75 332 y(MPI_Address\()f(particle[0].d,)g(disp+1\);)75
388 y(MPI_Address\()g(particle[0].b,)g(disp+2\);)75 444 y(for)h(\(i=0;)h(i)f
(<3;)h(i++\))f(disp[i])g(-=)h(disp[0];)75 557 y(MPI_Type_struct\()e(3,)h
(blocklen,)g(disp,)g(type,)g(&Particletype\);)147 670 y(/*)g(If)h(compiler)f
(does)g(padding)g(in)g(mysterious)g(ways,)147 727 y(the)g(following)g(may)g
(be)h(safer)f(*/)75 840 y(MPI_Datatype)f(type1[4])h(=)h({MPI_INT,)e
(MPI_DOUBLE,)h(MPI_CHAR,)f(MPI_UB};)75 896 y(int)238 b(blocklen1[4])22
b(=)i({1,)g(6,)f(7,)h(1};)75 953 y(MPI_Aint)118 b(disp1[4];)75
1065 y(/*)24 b(compute)e(displacements)h(of)g(structure)g(components)f(*/)75
1178 y(MPI_Address\()g(particle,)h(disp1\);)75 1235 y(MPI_Address\()f
(particle[0].d,)g(disp1+1\);)75 1291 y(MPI_Address\()g(particle[0].b,)g
(disp1+2\);)75 1348 y(MPI_Address\()g(particle+1,)h(disp1+3\);)75
1404 y(for)g(\(i=0;)h(i)f(<4;)h(i++\))f(disp1[i])g(-=)g(disp1[0];)75
1517 y(/*)h(build)f(datatype)g(describing)f(structure)h(*/)75
1630 y(MPI_Type_struct\()f(4,)h(blocklen1,)g(disp1,)g(type1,)g
(&Particletype\);)409 1799 y(/*)h(4.1:)266 1856 y(send)f(the)h(entire)f
(array)g(*/)75 1969 y(MPI_Type_commit\()f(&Particletype\);)75
2025 y(MPI_Send\()h(particle,)f(1000,)h(Particletype,)g(dest,)g(tag,)g
(comm\);)409 2195 y(/*)h(4.2:)266 2251 y(send)f(only)h(the)f(entries)g(of)g
(class)h(zero)f(particles,)266 2307 y(preceded)g(by)g(the)h(number)f(of)g
(such)h(entries)f(*/)75 2420 y(MPI_Datatype)f(Zparticles;)70
b(/*)24 b(datatype)f(describing)f(all)i(particles)791 2477
y(with)f(class)g(zero)h(\(needs)f(to)g(be)h(recomputed)791
2533 y(if)f(classes)g(change\))g(*/)75 2590 y(MPI_Datatype)f(Ztype;)75
2703 y(MPI_Aint)118 b(zdisp[1000];)1967 46 y Fw(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 Fu(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b Fy(59)75 49 y Fr(int)23 b(zblock[1000],)g(j,)g(k;)75 106
y(int)g(zzblock[2])g(=)h({1,1};)75 162 y(MPI_Aint)118 b(zzdisp[2];)75
219 y(MPI_Datatype)22 b(zztype[2];)75 332 y(/*)i(compute)e(displacements)h
(of)g(class)g(zero)h(particles)e(*/)75 388 y(j)i(=)f(0;)75
444 y(for\(i=0;)g(i)g(<)h(1000;)f(i++\))123 501 y(if)g
(\(particle[i].class==0\))194 557 y({)194 614 y(zdisp[j])g(=)h(i;)194
670 y(zblock[j])f(=)h(1;)194 727 y(j++;)194 783 y(})75 896
y(/*)g(create)f(datatype)f(for)i(class)f(zero)g(particles)47
b(*/)75 953 y(MPI_Type_indexed\()22 b(j,)h(zblock,)g(zdisp,)g(Particletype,)f
(&Zparticles\);)75 1065 y(/*)i(prepend)e(particle)h(count)g(*/)75
1122 y(MPI_Address\(&j,)f(zzdisp\);)75 1178 y(MPI_Address\(particle,)f
(zzdisp+1\);)75 1235 y(zztype[0])i(=)g(MPI_INT;)75 1291 y(zztype[1])g(=)g
(Zparticles;)75 1348 y(MPI_Type_struct\(2,)e(zzblock,)i(zzdisp,)g(zztype,)g
(&Ztype\);)75 1461 y(MPI_Type_commit\()f(&Ztype\);)75 1517
y(MPI_Send\()h(MPI_BOTTOM,)f(1,)i(Ztype,)f(dest,)g(tag,)g(comm\);)242
1686 y(/*)h(A)f(probably)g(more)g(efficient)g(way)h(of)f(defining)g
(Zparticles)f(*/)75 1799 y(/*)i(consecutive)e(particles)h(with)g(index)g
(zero)g(are)h(handled)f(as)g(one)h(block)f(*/)75 1856 y(j=0;)75
1912 y(for)g(\(i=0;)h(i)f(<)h(1000;)f(i++\))123 1969 y(if)g
(\(particle[i].index==0\))170 2025 y({)170 2082 y(for)h(\(k=i+1;)f(\(k)g(<)h
(1000\)&&\(particle[k].index)d(==)i(0\))h(;)f(k++\);)170 2138
y(zdisp[j])g(=)h(i;)170 2195 y(zblock[j])f(=)h(k-i;)170 2251
y(j++;)170 2307 y(i)g(=)g(k;)170 2364 y(})75 2420 y(MPI_Type_indexed\()e(j,)h
(zblock,)g(zdisp,)g(Particletype,)f(&Zparticles\);)457 2590
y(/*)h(4.3:)314 2646 y(send)g(the)g(first)h(two)f(coordinates)f(of)i(all)f
(entries)g(*/)-32 46 y Fw(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 Fy(60)613 b Fu(CHAPTER)16 b(1.)29 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fr(MPI_Datatype)22
b(Allpairs;)142 b(/*)24 b(datatype)f(for)g(all)g(pairs)h(of)f(coordinates)g
(*/)75 162 y(MPI_Aint)g(sizeofentry;)75 275 y(MPI_Type_extent\()f
(Particletype,)g(sizeofentry\);)194 388 y(/*)i(sizeofentry)e(can)i(also)f(be)
h(computed)e(by)i(subtracting)e(the)i(address)266 444 y(of)f(particle[0])g
(from)g(the)h(address)f(of)g(particle[1])f(*/)75 557 y(MPI_Type_hvector\()g
(1000,)h(2,)g(sizeofentry,)g(MPI_REAL,)f(&Allpairs\);)75 614
y(MPI_Type_commit\()g(&Allpairs\);)75 670 y(MPI_Send\()h(particle.d,)f(1,)i
(Allpairs,)e(dest,)h(tag,)h(comm\);)218 783 y(/*)g(an)f(alternative)g
(solution)f(to)i(4.3)g(*/)75 896 y(MPI_Datatype)e(Onepair;)71
b(/*)23 b(datatype)g(for)h(one)f(pair)g(of)h(coordinates,)e(with)695
953 y(the)i(extent)f(of)h(one)f(particle)g(entry)g(*/)75 1009
y(MPI_Aint)g(disp2[3];)75 1065 y(MPI_Datatype)f(type2[3])h(=)h({MPI_LB,)e
(MPI_DOUBLE,)h(MPI_UB};)75 1122 y(int)g(blocklen2[3])g(=)g({1,)h(2,)f(1};)75
1235 y(MPI_Address\()f(particle,)h(disp2\);)75 1291 y(MPI_Address\()f
(particle[0].d,)g(disp2+1\);)75 1348 y(MPI_Address\()g(particle+1,)h
(disp2+2\);)75 1404 y(for)g(\(i=0;)h(i<2;)f(i++\))g(disp2[i])g(-=)h
(disp2[0];)75 1517 y(MPI_Type_struct\()e(3,)h(blocklen2,)g(disp2,)g(type2,)g
(&Onepair\);)75 1574 y(MPI_Type_commit\()f(&Onepair\);)75 1630
y(MPI_Send\()h(particle[0].d,)f(1000,)h(Onepair,)g(dest,)g(tag,)g(comm\);)75
1807 y Ft(Fifth)18 b(example:)43 b Fy(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
1863 y(addresses)c(in)h(datat)o(yp)q(es.)75 1970 y Fr(struct)23
b(Partstruct)147 2026 y({)147 2083 y(int)g(class;)147 2139
y(double)g(d[6];)147 2195 y(char)g(b[7];)147 2252 y(};)75 2365
y(struct)g(Partstruct)g(particle[1000];)337 2478 y(/*)h(build)f(datatype)g
(describing)g(first)g(array)g(entry)g(*/)75 2591 y(MPI_Datatype)f
(Particletype;)75 2647 y(MPI_Datatype)g(type[3])h(=)h({MPI_INT,)e
(MPI_DOUBLE,)h(MPI_CHAR};)75 2704 y(int)238 b(block[3])23 b(=)h({1,)f(6,)h
(7};)1967 46 y Fw(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 Fu(1.13.)29 b(DERIVED)15 b(D)o(A)l(T)l(A)l(TYPES)1124
b Fy(61)75 49 y Fr(MPI_Aint)118 b(disp[3];)75 162 y(MPI_Address\()22
b(particle,)h(disp\);)75 219 y(MPI_Address\()f(particle[0].d,)g(disp+1\);)75
275 y(MPI_Address\()g(particle[0].b,)g(disp+2\);)75 332 y(MPI_Type_struct\()g
(3,)h(block,)g(disp,)g(type,)h(&Particletype\);)75 444 y(/*)g(Particletype)e
(describes)g(first)i(array)f(entry)g(--)h(using)f(absolute)147
501 y(addresses)f(*/)505 614 y(/*)h(5.1:)361 670 y(send)h(the)f(entire)g
(array)g(*/)75 783 y(MPI_Type_commit\()f(&Particletype\);)75
840 y(MPI_Send\()h(MPI_BOTTOM,)f(1000,)h(Particletype,)f(dest,)h(tag,)h
(comm\);)481 1009 y(/*)f(5.2:)290 1065 y(send)g(the)h(entries)e(of)i(class)f
(zero,)290 1122 y(preceded)g(by)g(the)h(number)f(of)g(such)h(entries)e(*/)75
1235 y(MPI_Datatype)g(Zparticles,)h(Ztype;)75 1348 y(MPI_Aint)g(zdisp[1000])
75 1404 y(int)g(zblock[1000],)g(i,)g(j,)h(k;)75 1461 y(int)f(zzblock[2])g(=)h
({1,1};)75 1517 y(MPI_Datatype)e(zztype[2];)75 1574 y(MPI_Aint)118
b(zzdisp[2];)75 1686 y(j=0;)75 1743 y(for)23 b(\(i=0;)h(i)f(<)h(1000;)f
(i++\))123 1799 y(if)g(\(particle[i].index==0\))170 1856 y({)170
1912 y(for)h(\(k=i+1;)f(\(k)g(<)h(1000\)&&\(particle[k].index)d(=)i(0\))h(;)g
(k++\);)170 1969 y(zdisp[j])f(=)h(i;)170 2025 y(zblock[j])f(=)h(k-i;)170
2082 y(j++;)170 2138 y(i)g(=)g(k;)170 2195 y(})75 2251 y(MPI_Type_indexed\()e
(j,)h(zblock,)g(zdisp,)g(Particletype,)f(&Zparticles\);)75
2307 y(/*)i(Zparticles)e(describe)h(particles)f(with)i(class)f(zero,)g(using)
147 2364 y(their)g(absolute)g(addresses*/)75 2477 y(/*)h(prepend)e(particle)h
(count)g(*/)75 2533 y(MPI_Address\(&j,)f(zzdisp\);)75 2590
y(zzdisp[1])h(=)g(MPI_BOTTOM;)75 2646 y(zztype[0])g(=)g(MPI_INT;)75
2703 y(zztype[1])g(=)g(Zparticles;)-32 46 y Fw(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 Fy(62)608 b Fu(CHAPTER)15 b(1.)35 b(POINT)16
b(TO)f(POINT)h(COMMUNICA)l(TION)75 49 y Fr(MPI_Type_struct\(2,)21
b(zzblock,)i(zzdisp,)g(zztype,)g(&Ztype\);)75 162 y(MPI_Type_commit\()f
(&Ztype\);)75 219 y(MPI_Send\()h(MPI_BOTTOM,)f(1,)i(Ztype,)f(dest,)g(tag,)g
(comm\);)75 395 y Ft(Sixth)16 b(example:)43 b Fy(handling)17
b(of)e(unions.)75 501 y Fr(union)23 b({)147 558 y(int)118 b(ival;)147
614 y(float)70 b(fval;)218 671 y(})24 b(u[1000])75 784 y(int)119
b(utype;)75 897 y(/*)24 b(All)f(entries)g(of)h(u)f(have)h(identical)e(type;)h
(variable)147 953 y(utype)g(keeps)g(track)g(of)h(their)f(current)g(type)g(*/)
75 1066 y(MPI_Datatype)70 b(type[2];)75 1122 y(int)286 b(blocklen[2])22
b(=)i({1,1};)75 1179 y(MPI_Aint)166 b(disp[2];)75 1235 y(MPI_Datatype)70
b(mpi_utype[2];)75 1292 y(MPI_Aint)166 b(i,j;)75 1405 y(/*)24
b(compute)e(an)i(MPI)g(datatype)e(for)i(each)f(possible)g(union)g(type;)147
1461 y(assume)g(values)g(are)g(left-aligned)f(in)i(union)f(storage.)g(*/)75
1574 y(MPI_Address\()f(u,)i(&i\);)75 1631 y(MPI_Address\()e(u+1,)i(&j\);)75
1687 y(disp[0])f(=)h(0;)f(disp[1])g(=)h(j-i)75 1743 y(type[1])f(=)h(MPI_UB;)
75 1856 y(type[0])f(=)h(MPI_INT;)75 1913 y(MPI_Type_struct\(2,)d(blocklen,)i
(disp,)g(type,)g(&mpi_utype[0]\);)75 2026 y(type[0])g(=)h(MPI_FLOAT;)75
2082 y(MPI_Type_struct\(2,)d(blocklen,)i(disp,)g(type,)g(&mpi_utype[1]\);)75
2195 y(for\(i=0;)g(i<2;)g(i++\))g(MPI_Type_commit\(&mpi_utype[i])o(\);)75
2308 y(/*)h(actual)f(communication)f(*/)75 2421 y(MPI_Send\(u,)g(1000,)i
(mpi_utype[utype],)d(dest,)i(tag,)h(comm\);)1967 46 y Fw(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