Я пытаюсь собрать массивы различных размеров, используя MPI_Gatherv
, но по какой-то причине он собирает только первый объект в первом процессоре. Когда я делаю цикл выше, я получаю правильные значения от xPos и yPos, но когда я собираю данные в массив xFinal и yFinal и распечатываю значения, я получаю только первые x и y. Таким образом, в основном первый объект имеет (x, y) of (0,0), и у меня есть 10 объектов, и все объекты только распечатывают (0,0), когда фактический объект, на который он должен ссылаться, имеет разные (x, y)MPI_Gatherv не собирает данные правильно
На всякий случай, чтобы сказать, графы [ранг] и вытеснения определенно правы, потому что я использовал их для рассеивания ранее.
Я использую сборщик неправильно? Или я печатаю неправильно?
for (a = 0; a < size; a++) {
if (rank == a) {
for (i = 0 ; i < counts[rank]; i++) {
printf("from procs %d: %lE %lE\n", rank, xPos[i], yPos[i]);
}
}
}
MPI_Gatherv(&xPos, counts[rank], MPI_DOUBLE, &xFinal, counts, displs, MPI_DOUBLE,0, MPI_COMM_WORLD);
MPI_Gatherv(&yPos, counts[rank], MPI_DOUBLE, &yFinal, counts, displs, MPI_DOUBLE,0, MPI_COMM_WORLD);
MPI_Finalize();
FILE* f = fopen("universe.out", "wt");
for (i = 0; i < N; i++)
fprintf(f, "%lE %lE\n", xFinal[i], yFinal[i]);
fclose(f);
Вау, это спасло мне жизнь! Это не полностью решило мои проблемы, потому что в итоге я перешел в некоторые странные параметры со ссылками, которые дали мне сумасшедшие номера (которые я исправил), но это, наконец, позволило мне увидеть некоторые цифры в файле! Спасибо огромное! – Amanda