Я пытаюсь выполнить параллелизацию некоторой части кода, которая вычисляет матрицы, но я получаю ошибку ошибки сегментации. Я уже отлаживаю код, но я не могу найти проблему.Ошибка сегментации MPI_Scatter (сигнал 11)
Вот фрагмент кода, где я объявляю Matrice:
double **A, **B, **C, *tmp1,*tmp2,*tmp3;
int N;
int myrank, P, from, to;
N = 100;
tmp1 = (double *) malloc (sizeof(double) * N * N);
tmp2 = (double *) malloc (sizeof(double) * N * N);
tmp3 = (double *) malloc (sizeof(double) * N * N);
A = (double **) malloc (sizeof(double *) * N);
B = (double **) malloc (sizeof(double *) * N);
C = (double **) malloc (sizeof(double *) * N);
from = myrank * N/P;
to = (myrank+1) * N/P;
Тогда здесь, где я inicialize МПИ
MPI_Init (&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &P);
Но так или иначе, я не могу разбрасывать ...
MPI_Bcast(B, N*N, MPI_INT, 0, MPI_COMM_WORLD);
printf("Rank: %d\n", myrank);
MPI_Scatter(A, N*N/P, MPI_INT, &A[from], N*N/P, MPI_INT, 0, MPI_COMM_WORLD);
Я не могу написать весь код здесь, потому что мне не разрешено ... Но проблема в Scatter it self. Что я делаю неправильно?
Рассмотрите возможность сделать это как можно проще для других, чтобы помочь вам. то есть не сбрасывать фрагменты, казалось бы, несвязанного кода. И не сбрасывайте всю свою программу здесь. Вместо этого попробуйте удалить блоки кода, которые не имеют отношения к проблеме, при этом повторяя ошибку. т. е. попытаться создать [короткий, самостоятельный, компилируемый пример] (http://sscce.org/). Затем вставьте это. То, что вы вставили здесь, так отключено, большинство людей даже не захочет читать его. – ArjunShankar
Переменная 'P' используется без предварительной инициализации! –