二维数组的 MPI 数据类型
MPI data type for 2D array
几个小时以来,我试图通过 MPI 将 2D 数组发送到不同的线程。代码看起来像这样(我会留下评论来展示我已经尝试过的技巧):
类型定义:
// Define datatype
//MPI_Type_contiguous(N, MPI_INT, &mpi_vector);
//MPI_Type_vector(N, N, N, mpi_vector, &mpi_matrix);
//MPI_Type_vector(N, N, N, MPI_INT, &mpi_matrix);
//MPI_Type_contiguous(N, MPI_INTEGER, &mpi_vector);
//MPI_Type_contiguous(N, mpi_vector, &mpi_matrix);
MPI_Type_vector(N, N, 0, MPI_INTEGER, &mpi_matrix);
//MPI_Type_commit(&mpi_vector);
MPI_Type_commit(&mpi_matrix);
发送和接收:
int** tmp = new int*[N];
switch(r) {
case T1:
inputMatrix(tmp, 2);
MPI_Send(tmp, 1, mpi_matrix, T2, 0, MPI_COMM_WORLD);
//task_T1();
break;
case T2:
//task_T2();
inputMatrix(tmp, -1);
MPI_Recv(tmp, 1, mpi_matrix, T1, 0, MPI_COMM_WORLD, &s);
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++) {
cout << " " << tmp[i][j];
}
cout << endl;
}
break;
}
我需要在早上(7 小时内)完成这项工作,我希望 smb 能够帮助我。
MPI 不支持单独分配每行的矩阵,即指向行的指针数组。MPI 仅适用于行连续存储在内存中的平面数组。使用平面数组:
int** tmp = ...
应该成为
int* tmp = new int[rows*cols];
然后tmp[row][col]
应该作为tmp[row*cols + col]
访问。
可以从单个行的MPI_INT
构造连续类型,然后从整个矩阵的前一个连续类型构造连续类型。您还可以构造单个连续类型的rows*cols
MPI_INT
元素。第一种方法更灵活,因为您可能需要稍后发送单独的行。
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何获取C++字符数据类型的地址
- 如何通过 mpi c++ 发送布尔数据类型?
- 使用MPI/OpenMP的C 程序带有派生数据类型(嵌套类对象)容器
- 具有灵活大小的结构的 MPI 派生数据类型
- C MPI在不同机器上派生的数据类型
- 如何在MPI中从结构类型创建新的派生数据类型
- 二维数组的 MPI 数据类型
- 如何将MPI派生的数据类型用于三维数组