我正在尝试使该程序适应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).
答案 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