Я предполагаю, что мой вопрос имеет 2 части:C++ на куски
(1) Является ли это правильный подход, чтобы отправить различные куски массива для различных процессоров? Предположим, у меня есть n
процессоры, чей ранг колеблется от 0
до n-1
. У меня есть массив размером d
. Я хочу разбить этот массив на k
одинаковые куски. Предположите, что d
делится на k
. Я хочу отправить каждый из этих кусков процессору, чей ранг меньше k
. Было бы легко, если бы я мог использовать что-то вроде MPI_Scatter, но эта функция посылает КАЖДЫМ ДРУГИМ процессорам, и я хочу отправить только определенное количество proc. Так что я сделал то, что у меня есть петля k
итераций и do k
MPI_Isend
. Является ли это эффективным?
(2) Если да, то как мне разделить массив на куски? Там всегда легкий путь, который
int size = d/k;
int buffs[k][size];
for (int rank = 0; rank < k; ++rank)
{
for (int i = 0; i < size ++i)
buffs[rank][i] = input[rank*size + i];
MPI_Isend(&buffs[rank], size, MPI_INT, rank, 1, comm, &request);
}
Не будет ли это переписывать 'buff' каждый раз через ваш внутренний цикл? Почему бы просто не отправить указатели на исходный массив? –
Мой второй вопрос все еще стоит; почему вы беспокоитесь о копии? –
Хороший вопрос! Это тоже часть моей первой части вопроса! Я спрашивал, было ли то, что я сделал, правильный подход ... похоже, что это не так. – 0x56794E