我正在尝试使用MPI进行编码,但是当我使用gcc
进行编译时,我得到了这些errors,我不知道如何修复。这是代码:
#include < stdio.h >
int main(int argc, char * argv[]) {
int pid, pnr;
int A[100000];
int B[100000];
int v0, v1, v2;
MPI_Init( & argc, & argv);
MPI_Comm_rank(MPI_COMM_WORD, & pid);
MPI_COMM_size(MPI_COMM_WORD, & pnr);
MPI_Status status;
for (int i = 1; i < (100000 - 1); i++) {
v1 = A[i - 1];
MPI_Send( & v0, 1, MPI_INT, 0, 0, MPI_COMM_WORD);
v2 = A[i + 1];
MPI_Send( & v1, 2, MPI_INT, 0, 0, MPI_COMM_WORD);
v3 = 2 * A[i];
MPI_Send( & v0, 3, MPI_INT, 0, 0, MPI_COMM_WORD);
if (pid == 0) {
int v;
for (int j = 1; j != pnr; i++) {
MPI_Recv( & v, j, MPI_INT, MPI_ANY_SOURCE, 0,
MPI_COMM_WORD, & status);
if (MPI_SUCCESS) {
B[i] = v;
} else {
MPI_Abort(MPI_COMM_WORD, 1);
}
}
}
}
MPI_Finalize();
}
我试图遵循此MPI发送/回收tutorial的结构,但显然做错了。
答案 0 :(得分:0)
我认为您忘记在代码中包含mpi.h和stdlib.h。
将以下预处理程序指令添加到代码顶部:
#include <mpi.h>
#include <stdlib.h>
您可以尝试指定计算机上mpi.h的位置作为附加的gcc参数,或者只是将mpi.h的副本放在要编译的同一目录中。如果仍然出现此错误,则需要对mpi.lib或.a文件执行相同的步骤,以便可以正确链接所有内容。这将是与gcc链接的示例,其中mpi位于user / local / lib路径中。
gcc <normal options> -L/usr/local/lib/mpi -lmpi
这是一个不同gcc compiler examples的教程,也可能有所帮助。
答案 1 :(得分:0)
如前所述,您需要
#include <mpi.h>
此外,构建MPI应用程序的最“自然”方式是使用MPI包装器。
在您的情况下,将gcc
替换为mpicc
,您不必担心手动添加include / library pathes并链接到所需的库(这是依赖于MPI实现的fwiw)