MPI调试,分段故障问题

时间:2018-09-20 00:37:32

标签: c

我正在尝试使该程序适应MPI,在这个阶段,我只是在尝试一些基本的事情。但是,现在我遇到了分段错误错误。

代码如下:

#include <mpi.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int main(int argc, char *argv[]) {
  int id;               /* Process rank */
  int p;                /* Number of processes */

  double stop = (double)atol(argv[1]);

  MPI_Init (&argc, &argv);
  MPI_Comm_rank (MPI_COMM_WORLD, &id);
  MPI_Comm_size (MPI_COMM_WORLD, &p);

  assert(stop >= 1.0);

  int result = 0;

  for (double x = 0.0; x < stop; x += 1.0) {
    double tmp = sin(x);
    double tmp2 = tmp*tmp;
    int z = (int)(tmp2*10000.0);

    result = (result + z)%10000; // 0<=result<10000

  }
 MPI_Finalize();

}

错误:

我这样运行:

mpicc -o pin pin.c -lm
mpiexec -n 2 ./pin

得到这个

mpiexec noticed that process rank 1 with PID 7280 on node (my-computer) exited on signal 11 (Segmentation fault).

1 个答案:

答案 0 :(得分:1)

您这样提交

mpiexec -n 2 ./pin

然后是您的程序

double stop = (double)atol(argv[1]);

那时,您的程序由于argv[1]NULL而崩溃。 您应该首先仔细检查argc > 1,为了安全起见,您应该之后 MPI_Init(&argc, &argv);

与此同时,您可以按预期运行应用程序

mpiexec -n 2 ./pin 4