📄 typeub2.c
字号:
#include "mpi.h"#include <stdio.h>#if defined(NEEDS_STDLIB_PROTOTYPES)#include "protofix.h"#endif int main( int argc, char *argv[] ){ MPI_Datatype dt1, dt2, dt3; MPI_Aint ex1, ex2, ex3; int sz1, sz2, sz3; MPI_Aint lb,ub; MPI_Aint disp[3]; MPI_Datatype types[3]; int blocklen[3]; MPI_Init(&argc, &argv); blocklen[0] = 1; blocklen[1] = 1; blocklen[2] = 1; disp[0] = -3; disp[1] = 0; disp[2] = 6; types[0] = MPI_LB; types[1] = MPI_INT; types[2] = MPI_UB; MPI_Type_struct(3,blocklen,disp, types,&dt1); MPI_Type_commit(&dt1); MPI_Type_lb(dt1, &lb); MPI_Type_ub(dt1, &ub); MPI_Type_extent(dt1,&ex1); MPI_Type_size(dt1,&sz1); /* Values should be lb = -3, ub = 6 extent 9; size depends on implementation */ if (lb != -3 || ub != 6 || ex1 != 9) { printf("Example 3.26 type1 lb %d ub %d extent %d size %d\n", (int)lb, (int)ub, (int)ex1, sz1); } else printf("Example 3.26 type1 correct\n" ); MPI_Type_contiguous(2,dt1,&dt2); MPI_Type_lb(dt2, &lb); MPI_Type_ub(dt2, &ub); MPI_Type_extent(dt2,&ex2); MPI_Type_size(dt2,&sz2); /* Values should be lb = -3, ub = 15, extent = 18, size depends on implementation */ if (lb != -3 || ub != 15 || ex2 != 18) { printf("Example 3.26 type2 lb %d ub %d extent %d size %d\n", (int)lb, (int)ub, (int)ex2, sz2); } else printf( "Example 3.26 type2 correct\n" ); types[0]=dt1; types[1]=dt1; blocklen[0]=1; blocklen[1]=1; disp[0]=0; disp[1]=ex1; MPI_Type_struct(2, blocklen, disp, types, &dt3); MPI_Type_commit(&dt3); MPI_Type_lb(dt3, &lb); MPI_Type_ub(dt3, &ub); MPI_Type_extent(dt3,&ex3); MPI_Type_size(dt3,&sz3); /* Another way to express type2 */ if (lb != -3 || ub != 15 || ex3 != 18) { printf("type3 lb %d ub %d extent %d size %d\n", (int)lb, (int)ub, (int)ex3, sz2); } else printf( "type3 correct\n" ); MPI_Type_free( &dt1 ); MPI_Type_free( &dt2 ); MPI_Type_free( &dt3 ); MPI_Finalize(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -