hvec.c

来自「MPICH是MPI的重要研究,提供了一系列的接口函数,为并行计算的实现提供了编程」· C语言 代码 · 共 128 行

C
128
字号
#include "mpi.h"#include "test.h"#include <stdio.h>/* The original version of this was sent by     empierce@tribble.llnl.gov (Elsie M. Pierce)    I've modified it to fit the automated tests requirements *//* Prototypes for picky compilers */int iinit ( int *, int, int );int ilist1 ( int *, int, int, int );void Build_vect ( MPI_Datatype * );void Build_ctg ( int, MPI_Datatype *, MPI_Datatype * );void Get_d5 ( int );int iinit(a, value, l)int *a, value, l;{  int i;    for (i=0; i<l; i++)    a[i] = value;  return(0);}int ilist1(a, mype, pe_out, l)int *a, mype, pe_out, l;{  int i;    if (mype == pe_out){    for (i=0; i<l; i++)      printf("%d ",a[i]);    printf("\n");  }  return(0);}void Build_vect(mess_ptr) MPI_Datatype* mess_ptr;{  int count, bllen, gap, str;  /*   Define an MPI type with two blocks of 3 integers each, separated *//*   by one integer. */  count	= 2;  bllen	= 3;  gap	= 1;  str	= bllen + gap;  MPI_Type_vector(count, bllen, str, MPI_INT, mess_ptr);  MPI_Type_commit(mess_ptr);  }void   Build_ctg(big_offset,messtyp, messtyp2)int big_offset;MPI_Datatype *messtyp, *messtyp2;{  int count;  MPI_Aint ext;      count=3;  MPI_Type_extent(*messtyp, &ext);  MPI_Type_hvector(count, 1, ext+big_offset, *messtyp, messtyp2);  MPI_Type_commit(messtyp2);  /*printf( "pack is:\n" );  MPIR_PrintDatatypePack( stdout, 1, *messtyp2, 0, 0 );  printf( "unpack is:\n" );  MPIR_PrintDatatypeUnpack( stdout, 1, *messtyp2, 0, 0 ); */}  void Get_d5(my_rank)int my_rank;{  MPI_Datatype messtyp, messtyp2;  int root=0;  int count=1;  int i, big_offset;  int intlen;#define DL 32    int dar[DL];       i=iinit(dar, my_rank, DL);  Build_vect(&messtyp);  MPI_Bcast(dar, count, messtyp, root, MPI_COMM_WORLD);  if (my_rank==1)    printf("  0 = Sent, 1 = Not Sent \n%s",	   "  Vector Type with Gap : \n");  i=ilist1(dar, my_rank, 1, DL);  intlen = sizeof(int);  for (big_offset = -intlen; big_offset<=2*intlen;        big_offset += intlen){    if (my_rank==1)     printf("\n Three of above vector types combined, with offset = %i ints\n",	     big_offset/(int)sizeof(int));    i=iinit(dar, my_rank, DL);    Build_ctg(big_offset, &messtyp, &messtyp2);    MPI_Bcast(dar, count, messtyp2, root, MPI_COMM_WORLD);    MPI_Barrier(MPI_COMM_WORLD);    MPI_Type_free(&messtyp2);    i=ilist1(dar, my_rank, 1, DL);  }  MPI_Type_free( &messtyp );}int main( int argc, char *argv[]) {  int my_rank;      MPI_Init (&argc, &argv);  MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);  Get_d5(my_rank);    MPI_Finalize();  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?