ÔÆÌ⺣ - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

µ±Ç°Î»ÖãºÊ×Ò³ > 并行算法讲义 - 百度文库

并行算法讲义 - 百度文库

  • 62 ´ÎÔĶÁ
  • 3 ´ÎÏÂÔØ
  • 2025/6/27 0:25:29

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_elementsÓëMPI_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Öвð°ü

  • ÊÕ²Ø
  • Î¥¹æ¾Ù±¨
  • °æÈ¨ÈÏÁì
ÏÂÔØÎĵµ10.00 Ôª ¼ÓÈëVIPÃâ·ÑÏÂÔØ
ÍÆ¼öÏÂÔØ
±¾ÎÄ×÷Õߣº...

¹²·ÖÏí92ƪÏà¹ØÎĵµ

Îĵµ¼ò½é£º

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,

¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩
µ¥Æª¸¶·ÑÏÂÔØ
ÏÞÊ±ÌØ¼Û£º10 Ôª/·Ý Ô­¼Û:20Ôª
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºfanwen365 QQ£º370150219
Copyright © ÔÆÌ⺣ All Rights Reserved. ËÕICP±¸16052595ºÅ-3 ÍøÕ¾µØÍ¼ ¿Í·þQQ£º370150219 ÓÊÏ䣺370150219@qq.com