0
こちらは新しいものです。OpenMPI
およびC
を使用しています。私のコードがSegmentatioin fault
につながる理由を調べようとしています。私はすでにMPIについて多くの赤いが、私は助けを見つけることはできませんでした。それは私に既に数時間かかりました。そこで私はここで助けを求めることにしました。MPIセグメンテーションエラーMPI_Scatter using C
私のコードの期待した結果が得られます。しかし、私も毎回エラーメッセージを受け取ります。
私の場合、MPI_Scatter
を使用するのは正しいですか?
#include <stdio.h>
#include "mpi.h"
#include <stdlib.h>
const int MASTER_RANK = 0;
#define DIM 3
int main(int argc, char* argv[])
{
int numProc, rank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numProc);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
int n = 9;
double *m;
double *m_client;
m_client = (double *)malloc(3);
if(rank == MASTER_RANK)
{
m = (double*)malloc(n);
for(int i=0; i<n; i++)
{
m[i] = (double)i+1.0;
}
}
MPI_Scatter(m, 3, MPI_DOUBLE, m_client, 3, MPI_DOUBLE, MASTER_RANK, MPI_COMM_WORLD);
printf("Process %d:\n", rank);
for(int i=0; i < 3; i++)
{
printf(" (%lf", m_client[i]);
m_client[i] += 1000*rank;
printf(" -> %lf)", m_client[i]);
printf("\n");
}
printf("\n");
MPI_Gather(m_client, 3, MPI_DOUBLE, m, 3, MPI_DOUBLE, MASTER_RANK, MPI_COMM_WORLD);
if(rank == MASTER_RANK)
{
printf("Master: Received= \n");
for(int i=0; i<numProc; i++)
{
for(int j=0; j < 3; j++)
{
int idx = i*3 + j;
printf("%lf ", m[idx]);
}
printf("from Process %d\n", i);
}
}
free(m);
free(m_client);
MPI_Finalize();
exit(0);
}
私はmpicc mpifile.c -o mpifile
を使用して、私のMPIファイルを構築し、mpirun -np 3 ./mpifile
でそれを実行します。
は、ここに私の簡単なコードです。私は3つのプロセスを使用します。
私が手にエラーがある:
[Samuel-Z97-HD3:14361] *** Process received signal ***
[Samuel-Z97-HD3:14361] Signal: Segmentation fault (11)
[Samuel-Z97-HD3:14361] Signal code: (128)
[Samuel-Z97-HD3:14361] Failing at address: (nil)
私はUbuntuとvimの/ Geanyを使用しています。
ありがとうございました!今私はエラーを参照してくださいとうまく動作します。 – Samuel