相关疑难解决方法(0)

使用MPI_Scatter发送矩阵的列

我正在尝试使用MPI编写矩阵向量乘法程序.我正在尝试将矩阵的列发送到单独的进程并在本地计算结果.最后我做了一个MPI_Reduce使用MPI_SUM操作.

发送矩阵的行很容易,因为C按行主顺序存储数组,但列不是(如果不逐个发送).我在这里读到了这个问题:

MPI_Scatter - 发送2D数组的列

Jonathan Dursi建议使用新的MPI数据类型,这就是我通过根据自己的需要调整代码来完成的工作:

  double matrix[10][10];
  double mytype[10][10];
  int part_size; // stores how many cols a process needs to work on
  MPI_Datatype col, coltype;
  // ...
  MPI_Type_vector(N, 1, N, MPI_DOUBLE, &col);
  MPI_Type_commit(&col);
  MPI_Type_create_resized(col, 0, 1*sizeof(double), &coltype);
  MPI_Type_commit(&coltype);
  // ...
  MPI_Scatter(matrix, part_size, coltype,
              mypart, part_size, coltype,
              0, MPI_COMM_WORLD);

  // calculations...
  MPI_Reduce(local_result, global_result,
             N, MPI_DOUBLE,
             MPI_SUM,
             0, MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)

这很完美,但我不能说我真的明白它是如何工作的.

  1. 如何MPI_Type_vector存储在内存中?
  2. MPI_Type_create_resized()工作如何以及它究竟做了什么?

请记住,我是MPI的初学者.提前致谢.

c mpi

11
推荐指数
1
解决办法
8639
查看次数

标签 统计

c ×1

mpi ×1