我在C中运行以下程序时遇到了上述错误。该程序使用3-d超立方体拓扑来查找8元素数组的所有元素的总和。它使用MPI库。:
#moreActionsDropdown
通过调用
使用8个进程#include<stdio.h>
#include<mpi.h>
int main(int argc, char **argv)
{
int rank, n, src, dest;
MPI_Init(&argc, &argv);
MPI_Status status;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &n);
int tag = 100;
int receive;
int array[8] = {10, 20, 30, 40, 50, 60, 70, 80};
if (rank&1 == 1)
MPI_Send(&array[rank], 1, MPI_INT, rank-1, tag, MPI_COMM_WORLD);
else
{
MPI_Recv(&receive, 1, MPI_INT, rank+1, tag, MPI_COMM_WORLD, &status);
array[rank] += receive;
if (rank&2 == 1)
MPI_Send(&array[rank], 1, MPI_INT, rank-2, tag, MPI_COMM_WORLD);
else
{
MPI_Recv(&receive, 1, MPI_INT, rank+2, tag, MPI_COMM_WORLD, &status);
array[rank] += receive;
if (rank&4 == 1)
MPI_Send(&array[rank], 1, MPI_INT, rank-4, tag, MPI_COMM_WORLD);
else
{
MPI_Recv(&receive, 1, MPI_INT, rank+4, tag, MPI_COMM_WORLD, &status);
array[rank] += receive;
printf("\n%d \n", array[0]);
}
}
}
MPI_Finalize();
return 0;
}
运行时错误消息:
mpirun -n 8 ./a.out
答案 0 :(得分:1)
使用bitwise和。
的方式看起来像是一个错误例如,它应该是
if (rank & 2)
而不是
if (rank&2 == 1)
rank&2
是按位的,这意味着它的值为0
或2
(并且它永远不会是1
)