2011-03-01 13 views
8

Así que vamos a decir que tengo un programa MPI con 2 procesos, fila 0 y de la fila 1.MPI_Recv - ¿Cómo determinar el recuento?

int i[20], j[20], temp, size; 

En proceso con rango 0, tengo

for(temp=0; temp<20; temp++) 
    i[temp] = temp; 
MPI_Send(i, 15, MPI_INT, 1, 1, MPI_COMM_WORLD); 

y digamos proceso con rango 1 a continuación, ¿

// 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" ; 

Mi pregunta es, en la declaración anterior, ¿se debe declarar el "tamaño"? ¿O MPI_Recv de alguna manera "sabe" que está recibiendo 15 elementos y establece automáticamente el tamaño = 15? Si el tamaño no está definido, ¿qué le sucede al código?

Básicamente, mi pregunta es, estoy enviando un número diferente de elementos a procesadores con diferentes rangos, todos los mensajes procedentes del rango 0. Quiero saber si primero debo enviar el tamaño, y luego preparar los procesadores para recibir tantos elementos, o si puedo enviar la matriz y los procesos automáticamente seleccionan el tamaño desde allí.

Respuesta

14

vistazo a la documentación de MPI_Recv:

Parámetros de entrada

recuento número máximo de elementos en el búfer de recepción (número entero)

Así que sí, sí es necesario pasar un valor Tenga en cuenta que no es necesario que sea la cantidad real de elementos que está recibiendo, sino solo la cantidad máxima de elementos que puede contener su memoria intermedia. En su caso, sólo tiene que pasar a 20. La Notas sección también menciona cómo determinar el número real de elementos que se recibieron:

El argumento count indica la longitud máxima de un mensaje; el número real se puede determinar con MPI_Get_count.

Cuestiones relacionadas