Я использую MPI_Gatherv для сбора данных каждого ранга, а для собранных данных я хочу сохранить их в двумерном массиве.
Вот часть моего кода:
std::vector<int> n_of_BP;
if(rank == 0)
{
n_of_BP.resize(size);
}
int n_of_BP_local = 100;
MPI_Gather(&n_of_BP_local, 1, MPI_INT, &(n_of_BP[0]), 1, MPI_INT, 0, MPI_COMM_WORLD);
std::vector<int> offsets;
if(rank == 0)
{
offsets.resize(size);
offsets[0] = 0;
for(int i=1; i<size; i++)
{
offsets[i] = offsets[i-1] + 100;
}
}
int sendBuf[100];
for(int i=0; i<100; i++)
{
sendBuf[i] = i*rank;
}
int ** recvBuf;
recvBuf = (int **) malloc(sizeof(int *)*size);
for(int i=0; i<size; i++)
{
recvBuf[i] = (int *) malloc(sizeof(int)*100);
}
MPI_Gatherv(&(sendBuf[0]), n_of_BP_local, MPI_INT, &(recvBuf[0][0]), &(n_of_BP[0]), &(offsets[0]), MPI_INT, 0, MPI_COMM_WORLD);
Ошибка возникает при объявлении recvBuf и всегда приводит к повреждению памяти. Когда я объявляю 'recvBuf' как 'int recvBuf [size] [100]', код может ошибаться без ошибок. Но я хочу использовать динамически распределенный массив, чтобы объявить 'recvBuf', какие-либо предложения по этому поводу?
Сначала спасибо!