理解MPI_类型_向量
我希望下面的代码生成理解MPI_类型_向量,mpi,Mpi,我希望下面的代码生成1,0,2,0 但它会产生1,2,0,0。为什么它没有收到数据 // tmp.cpp #include <iostream> #include <mpi.h> int main( int argc, char* argv[] ) { MPI_Init( &argc, &argv ); int rk; MPI_Comm_rank( MPI_COMM_WORLD, &rk ); if ( rk
1,0,2,0
但它会产生1,2,0,0
。为什么它没有收到数据
// tmp.cpp
#include <iostream>
#include <mpi.h>
int main( int argc, char* argv[] )
{
MPI_Init( &argc, &argv );
int rk;
MPI_Comm_rank( MPI_COMM_WORLD, &rk );
if ( rk == 0 )
{
double b[2] = {1.0, 2.0};
MPI_Send( b, 2, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD );
}
if ( rk == 1 )
{
double b[4] = {0.0, 0.0, 0.0, 0.0};
MPI_Datatype padded;
MPI_Type_vector( 1, 1, 2, MPI_DOUBLE, &padded );
MPI_Type_commit( &padded );
MPI_Recv( b, 2, padded, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE );
std::cout << b[0] << ',' << b[1] << ','
<< b[2] << ',' << b[3] << '\n';
MPI_Type_free( &padded );
}
MPI_Finalize();
return 0;
}
它产生1,0,2,0
MPI:OpenMPI 3.1.2 通用条款:7.2.1 内部版本:
mpicxx tmp.cpp
运行:
mpiexec-n2./a.out
显然,这是一个正确的行为。我找到了一个解释,特别是幻灯片12-18。显然,这是一个正确的行为。我找到了一个解释,特别是幻灯片12-18
MPI_Datatype padded;
MPI_Type_vector( 2, 1, 2, MPI_DOUBLE, &padded );
MPI_Type_commit( &padded );
MPI_Recv( b, 1, padded, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE );