【发布时间】:2019-01-20 06:11:01
【问题描述】:
我想以最简单的方式将 NXN 矩阵的反对角元素从根进程发送到另一个进程。可悲的是,目前我无法测试我的代码,因为计算节点已关闭。有人可以检查我的简单代码吗?
我不确定我是否正确发送了 A 的反诊断元素。反对角元素会落在接收缓冲区 B 中吗?
#include "mpi.h"
#include <stdio.h>
int main(int argc, char** argv){
MPI_Init(&argc,&argv);
int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
int N=4;
double A[N][N];
double B[N];
MPI_Datatype antidiag;
int* blockleng=(int*)malloc(N*sizeof(int));
int* displace=(int*)malloc(N*sizeof(int));
for(int i=0; i<N; ++i){
blockleng[i]=1;
displace[i] = (i+1)*(N-1);
}
MPI_Type_indexed(N,blockleng,displace, MPI_DOUBLE,antidiag);
MPI_Type_commit(&antidiag);
MPI_Status status;
if(rank==0){
A= {
{1.0,5.0,9.0,13.0},
{2.0,6.0,10.5,14.5},
{3.0,7.2,11.0,15.0},
{4.0,8.0,12.0,16.0}
};
MPI_Send(A,1,antidiag,1,100,MPI_COMM_WORLD);
}
if(rank==1){
MPI_Recv(B,1,antidiag,0,100,MPI_COMM_WORLD,status);
}
MPI_Type_free(&antidiag);
MPI_Finalize();
return 0;
}
【问题讨论】:
-
您能否发布您的整个代码,这样我们就不需要修复未声明的排名变量之类的问题?
-
抱歉,我希望它现在已修复。
-
没问题,为了完整性和未来的用户,最好(此时)拥有整个程序。对不起节点,我知道痛苦:)