问题描述
我必须解决以下练习:
编写一个创建3维矩阵(xyz)的MPI程序 在节点0上矩阵平均分配到所有节点。每个节点 确定每个xy坐标的最大z值并将其存储 在二维矩阵中。个别的部分解决方案应 最终可以在节点0处加入
我正在处理3个流程。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <mpi.h>
#define N 3
int maxValue(int* array,int _size);
int main(int argc,char** argv)
{
int rank;
int size;
MPI_Init (&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
int matrix2D[N][N];
int xy[N][N];
int c[N][N];
int matrix3D[N][N][N] = {
{
{1,1,1},{2,2,2},{3,3,3}
},{
{4,4,4},{5,5,5},{6,6,6}
},{
{7,7,7},{8,8,8},{9,16,9}
}
};
MPI_Scatter(matrix3D,N*N*N/size,MPI_INT,xy,MPI_COMM_WORLD);
for (int x = 0; x < N; x++)
{
for (int y = 0; y < N; y++)
{
matrix2D[x][y] = maxValue(xy[x],N);
}
printf("\n");
}
MPI_Gather(matrix2D,N*N,c,MPI_COMM_WORLD);
if (rank == 0)
{
for (int x = 0; x < N; x++)
{
for (int y = 0; y < N; y++)
{
printf("%d,",matrix2D[x][y]);
}
printf("\n");
}
}
MPI_Finalize();
}
int maxValue(int* array,int _size)
{
int v = 0;
for (int i = 0; i < _size; i++)
{
if (array[i] >= v)
{
v = array[i];
}
}
return v;
}
如您所见,矩阵具有一些最大值。我对结果不满意,因为我的输出是:
1,
,我感觉自己的锻炼不完整。
如果我在if(rank == 0)子句中创建矩阵,则值将被破坏。
我不知道,对于发送和接收大小,我必须赋予分散和收集功能。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)