Допустим, у меня есть программа MPI с 2 процессами, ранг 0 и ранг 1.
int i[20], j[20], temp, size;
В процессе с рангом 0 у меня есть
for(temp=0; temp<20; temp++)
i[temp] = temp;
MPI_Send(i, 15, MPI_INT, 1, 1, MPI_COMM_WORLD);
и пусть ' s говорят, что процесс с рангом 1, тогда
// At this point, size is declared, but not assigned any value.
MPI_Recv(j,size, MPI_INT, 0, 1, MPI_COMM_WORLD):
cout << "I have received " << size << " elements" ;
Мой вопрос в приведенном выше утверждении: нужно ли объявлять «размер»? Или MPI_Recv каким-то образом «знает», что получает 15 элементов, и автоматически устанавливает size = 15? Если размер не определен, что происходит с кодом?
По сути, мой вопрос в том, что я отправляю разное количество элементов процессорам с разными рангами, все сообщения исходят с ранга 0. Я хочу знать, должен ли я сначала отправить размер, а затем подготовить процессоры для приема столько элементов, или если я могу просто отправить массив, и процессы автоматически увеличат размер оттуда.