MPI_Recv - Как определить счетчик?

Допустим, у меня есть программа 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. Я хочу знать, должен ли я сначала отправить размер, а затем подготовить процессоры для приема столько элементов, или если я могу просто отправить массив, и процессы автоматически увеличат размер оттуда.

9
задан chrisaycock 6 March 2012 в 20:03
поделиться