我想发送以STL向量形式存储的矩阵的多列。
在Boost网站上,他们声称MPI_Type_vector在Boost.MPI中“自动使用”(http://www.boost.org/doc/libs/1_47_0/doc/html/mpi/tutorial.html#mpi.c_mapping)。
但我找不到如何详细使用它的示例。我只知道如何使用Boost发送整个矩阵或每个元素。
提前感谢您的帮助,
托比亚斯
vector < vector < double > > A ( 10, vector <double> (10));
使用Boost MPI进行计算时,由于时间紧迫,不能将内容复制到某个缓冲区中。
我发现了如何使用MPI来完成这个任务。以下是一个示例代码,演示如何将一个10x10矩阵的第4、5和6列从一个进程(rank==0)发送到另一个进程(rank==1)。尽管我不知道为什么在MPI_Typ_vector的第三个参数中必须添加“2”。请问有人知道原因吗?
int rank, size;
MPI_Init (&argc, &argv); /* starts MPI */
MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */
MPI_Comm_size (MPI_COMM_WORLD, &size); /* get number of processes */
// fill matrices
vector< vector <float> >A(10, vector <float> (10));
vector< vector <float> >A_copy(10, vector <float> (10));
for (int i=0; i!=10; i++)
{
for (int j=0; j!=10; j++)
{
A[i][j]=j+ i*10;
A_copy[i][j]=0.0;
}
}
int dest=1;
int tag=1;
// define new type = two columns
MPI_Datatype newtype;
MPI_Type_vector(10, /* # column elements */
3, /* 3 column only */
10+2, /* skip 10 elements */
MPI_FLOAT, /* elements are float */
&newtype); /* MPI derived datatype */
MPI_Type_commit(&newtype);
if (rank==0)
{
MPI_Send(&A[0][4], 1, newtype, dest, tag, MPI_COMM_WORLD);
}
if (rank==1)
MPI_Status status;
MPI_Recv(&A_copy[0][4], 1, newtype, 0, tag, MPI_COMM_WORLD, &status);
}
MPI_Finalize();
在Boost网站上,他们声称MPI_Type_vector在Boost.MPI中“自动使用”(http://www.boost.org/doc/libs/1_47_0/doc/html/mpi/tutorial.html#mpi.c_mapping)。
但我找不到如何详细使用它的示例。我只知道如何使用Boost发送整个矩阵或每个元素。
提前感谢您的帮助,
托比亚斯