S
suddanila
Есть простая программа на c++ / mpi (mpich2), пересылающая массив массивов (матрицу) типа double. При размере матрицы более 90х90 при вызове MPI_Send происходит зависание приложения. При меньших размерах матрицы все работает прекрасно. Ниже фрагмент кода:
double* coefReOut = GetOneDimArray(cube->coefficientsRe, cube->coefficientsReLength, cube->coefficientsReLength);
int count = cube->coefficientsReLength * cube->coefficientsReLength;
MPI_Send(coefReOut, count, MPI_DOUBLE, nodeDest, 0, MPI_COMM_WORLD);
//получаем одномерный массив из матрицы
double* GetOneDimArray(double** array, int sizeX, int sizeY) {
double* res = (double*) malloc(sizeof (double)*sizeX * sizeY);
for (int i = 0; i < sizeX; i++) {
for (int j = 0; j < sizeY; j++) {
res[i + j * sizeX] = array[j];
}
}
return res;
}
конструктор класса Cube:
Cube::Cube(int size) {
coefficientsReLength = size;
coefficientsRe = new double*[size];
for (int i = 0; i < size; i++) {
coefficientsRe = new double[size];
for (int j = 0; j < size; j++) {
coefficientsRe[j] = 10;
}
}
}
В чем может быть проблема?
double* coefReOut = GetOneDimArray(cube->coefficientsRe, cube->coefficientsReLength, cube->coefficientsReLength);
int count = cube->coefficientsReLength * cube->coefficientsReLength;
MPI_Send(coefReOut, count, MPI_DOUBLE, nodeDest, 0, MPI_COMM_WORLD);
//получаем одномерный массив из матрицы
double* GetOneDimArray(double** array, int sizeX, int sizeY) {
double* res = (double*) malloc(sizeof (double)*sizeX * sizeY);
for (int i = 0; i < sizeX; i++) {
for (int j = 0; j < sizeY; j++) {
res[i + j * sizeX] = array[j];
}
}
return res;
}
конструктор класса Cube:
Cube::Cube(int size) {
coefficientsReLength = size;
coefficientsRe = new double*[size];
for (int i = 0; i < size; i++) {
coefficientsRe = new double[size];
for (int j = 0; j < size; j++) {
coefficientsRe[j] = 10;
}
}
}
В чем может быть проблема?