如何使用MPI正确编码?

时间:2017-08-19 18:25:32

标签: c mpi

我正在尝试使用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的结构,但显然做错了。

2 个答案:

答案 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)