һ - רҵ·ĵϷƽ̨

并行算法讲义 - 百度文库

Դû ʱ䣺2025/6/1 1:16:26 loading ƪĵֻ
˵ݽԤݿܲȫҪĵҪݣwordʹáword΢ź:xxxxxxxQQxxxxxx ܸṩĵл֧½⡣

Fortran 77

MPI_ADDRESS(BUFF, ADDRESS, IERR) BUFF(*)

INTEGER ADDRESS, IERR

C ָͨʵֶԵַκβ Fortran 77 ͨõķʽֱʹһַΪ Fortran 77 ʹ MPI_ADDRESSصĵַMPI һMPI_BOTTOM൱ھԵַ 0ˣ CALL MPI_ADDRESS(BUFF, ADDRESS, IERR)

MPI_BOTTOM(ADDRESS) BUFF ͬһڴַ

4.10

REAL A(N), B(N)

INTEGER TYPE, IA, IB ......

CALL MPI_ADDRESS(A, IA, IERR) CALL MPI_ADDRESS(B, IB, IERR)

CALL MPI_TYPE_HVECTOR(2, N, IB-IA, MPI_REAL, TYPE, IERR) ......

CALL MPI_SEND(A, 1, TYPE, ...) ... ...

ͬʱͬ A B

4.11

PARAMETER (N=1024, M=512, L=256)

REAL A(N) INTEGER B(M) COMPLEX C(L)

INTEGER LEN(3), DISP(3), TYPE(3), NEWTYPE, IA, IB, IC DATA TYPE /MPI_REAL, MPI_INTEGER, MPI_COMPLEX/, + LEN /N, M, L/

... ...

CALL MPI_ADDRESS(A, IA, IERR) CALL MPI_ADDRESS(B, IB, IERR) CALL MPI_ADDRESS(C, IC, IERR) DISPS(1)=0 DISPS(2)=IB-IA DISPS(3)=IC-IA

CALL MPI_TYPE_STRUCT(3, LEN, DISP, TYPE, NEWTYPE, IER) ... ...

CALL MPI_SEND(A, 1, NEWTYPE, ...) ... ...

ͬʱͬ A B C

4.12 4.ll пԸijɣ ... ...

DISPS(1)=IA DISPS(2)=IB DISPS(3)=IC

CALL MPI_TYPE_STRUCT(3, LEN, DISP, TYPE, NEWTYPE, IER) ... ...

CALL MPI_SEND(MPI_BOTTOM, 1, NEWTYPE, ...) ... ...

4.3 ͵ʹ ԭʼ⣬״Ϣ֮ǰͨ MPI_Type_commitύһԭʼ ڲҪʱӦõ MPI_Type_free ͷţԱͷռõϵͳԴ 4.3.1 ͵ύ C

int MPI_Type_commit(MPI_Datatype *datatype)

Fortran 77

MPI_TYPE_COMMIT(DATATYPE, IERR) INTEGER DATATYPE, IERR

һڱύͿԺ MPI ԭʼȫһϢʹá

һͽڴ͵м䲽ֱϢʹã򲻱ؽύһʹϼͷš

4.3.2 ͵ͷ C

int MPI_Type_free(MPI_Datatype *datatype)

Fortran 77

MPI_TYPE_FREE(DATATYPE, IERR) INTEGER DATATYPE, IERR

MPI_Type_freeͷָ͡غdatatype ó

MPI_DATATYPE_NULLڽеʹø͵ͨŽɡһ͵ͷŶĻϴͲӰ졣

4.13

REAL U(N,M), V(N,M)

INTEGER IU, IV, CTYPE, LTYPE ... ...

CALL MPI_ADDRESS(U, IU, IERR) CALL MPI_ADDRESS(V, IV, IERR)

CALL MPI_TYPE_VECTOR(M, 1, N, MPI_REAL, CTYPE, IERR)

CALL MPI_TYPE_HVECTOR(2, 1, IV-IU, CTYPE, LTYPE, IERR) CALL MPI_TYPE_FREE(CTYPE, IERR)

CALL MPI_TYPE_HVECTOR(2, N, IV-IU, MPI_REAL, CTYPE,IERR) ... ...

! ux U(1:N,1),V(1:N,1)

CALL MPI_SEND(U(1,1), 1, CTYPE, ...) ! ux U(1,1:M),V(1,1:M)

CALL MPI_SEND(U(1,1), 1, LTYPE, ...) ! ux U(1:N,M),V(1:N,M)

CALL MPI_SEND(U(1,M), 1, CTYPE, ...) ! ux U(N,1:M),V(N,1:M)

CALL MPI_SEND(U(N,1), 1, LTYPE, ...) ... ...

4.14

REAL U(N,M), V(N,M)

INTEGER IU, IV, EX, CTYPE, LTYPE INTEGER LENS(3), DISPS(3), TYPES(3)

DATA LENS/1, 1, 1/, TYPES/MPI_REAL, MPI_REAL, MPI_UB/ ... ...

CALL MPI_ADDRESS(U, IU, IERR) CALL MPI_ADDRESS(V, IV, IERR)

CALL MPI_TYPE_EXTENT(MPI_REAL, EX, IERR) DISPS(1) = 0

DISPS(2) = IV - IU DISPS(3) = EX

CALL MPI_TYPE_STRUCT(3, LENS, DISPS, TYPES, CTYPE, IERR) DISPS(3) = EX*N

CALL MPI_TYPE_STRUCT(3, LENS, DISPS, TYPES, LTYPE, IERR) ... ...

! ux U(1:N,1),V(1:N,1)

CALL MPI_SEND(U(1,1), N, CTYPE, ...) ! ux U(1,1:M),V(1,1:M)

CALL MPI_SEND(U(1,1), M, LTYPE, ...) ! ux U(1:N,M),V(1:N,M)

CALL MPI_SEND(U(1,M), N, CTYPE, ...) ! ux U(N,1:M),V(N,1:M)

CALL MPI_SEND(U(N,1), M, LTYPE, ...) ... ...

4.3.3 MPI_Get_elements

MPI_Get_elementsMPI_Get_countƣصϢ MPI ԭʼ͵ĸMPI_Get_elementsص count ֵ MPI_UNDEFINEDĻȻMPI_Get_countصcountֵı

C

int MPI_Get_elements(MPI_Status *status, MPI_Datatype datatype, int *count)

Fortran 77

MPI_GET_ELEMENTS(STATUS, DATATYPE, COUNT, IERR)

INTEGER STATUS(MPI_STATUS_SIZE), DATATYPE, COUNT, IERR

~ 4.15 MPI Get elements:=04-ex4.f>

4.15 MPI Get elements 04-ex4.f 4.4 ݵĴ

MPIУͨʹ MPI_PACKEDû PVM еķʽͬݽдһηͳȥշյϢٽв 4.4.1 ݴ C

int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype, void *outbuf,

int outsize, int *position, MPI_Comm comm)

Fortran 77

MPI_PACK(INBUF, INCOUNT, DATATYPE, OUTBUF, OUTSIZE, + POSITION, COMM, IERR) INBUF(*), OUTBUF(*)

INTEGER INCOUNT, DATATYPE, OUTSIZE, POSITION, COMM, + IERR

ú inbuf е incount Ϊ datatype ݽд ݷڻ outbuf outsize outbuf ܳ ֽǷԽãcomm ǷʹݽʹõͨpositionǴеλƣÿδһε MPI-PackǰûӦpositionΪ 0 MPI_Pack Զ޸ʹָδʹòֵʼλáÿε MPI-Pack positionʵϾѴݵܳȡ 4.4.2 ݲ C

int MPI_Unpack(void *inbuf, int insize, int *position, void *outbuf, int outcount,

MPI_Datatype datatype, MPI_Comm comm)

Fortran 77

MPI_UNPACK(INBUF, INSIZE, POSITION, OUTBUF, OUTCOUNT, + DATATYPE, COMM, IERR)

INBUF(*), OUTBUF(*)

INTEGER INSIZE, POSITION, OUTCOUNT, DATATYPE, COMM, + IERR

MPI_UNPACKݲ MPI_Pack inbufв

并行算法讲义 - 百度文库.doc ĵWordĵصԣ㸴ơ༭ղغʹӡ
Ƽ
Copyright © 2012-2023 һ Ȩ | ϵ
:վز֪ʶȨݡϢ紫ȨתصƷַȨ,һ֪ͨǣǻἰʱɾ
ͷQQxxxxxx 䣺xxxxxx@qq.com
ICP2023013149
Top