问题:
您有一个大型 2D 矩阵,需要跨多个处理使用 MPI 的节点。节点之间唯一的通信涉及在每个时间步之后共享边缘值。
方法:
问题中概述的您提出的方法适合此问题。以下代码段说明了建议的实现:
// (assume A is a 2D array) if (myrank == 0) { for (i = 0; i < x; i++) { for (j = 0; j < y; j++) { // Perform C++ code implementation MPI_Send(&A[i][0], 3, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Recv(&B[0][0], 3, MPI_INT, 1, 0, MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD); } } } if (myrank == 1) { for (i = x; i < xx; i++) { for (j = 0; j < y; j++) { // Perform C++ code implementation MPI_Send(&B[i][0], 3, MPI_INT, 0, 0, MPI_COMM_WORLD); MPI_Recv(&A[0][0], 3, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD); } } }
其他 MPI 函数:
注意事项:
以上是如何在 MPI 中有效发送和接收二维数组?的详细内容。更多信息请关注PHP中文网其他相关文章!