Advertisement
Guest User

Untitled

a guest
Nov 21st, 2014
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. En primera instancia, el codigo genera dos procesos (si asi se indica en mpiexec) a traves de la funcion MPI_Init. El programa es entonces dividido en ambos procesos que tendran un rank (id de proceso) distinto el uno del otro. El padre tendra un id igual a 0 y el hijo un id igual a 1. Para saber el rank del proceso, se utiliza MPI_Comm_rank y para saber la cantidad total de procesos generados en MPI_Init, se utiliza MPI_Comm_size.
  2.  
  3. Si el proceso es el padre, entonces este procede a pedir al usuario el id de matriz que desea procesar. El id de matriz determinara el nombre del archivo a leer. Paralelamente, el proceso hijo estara esperado recibir informacion a traves de la funcion MPI_Recv. La informacion corresponde al numero de filas que recibiar.
  4.  
  5. En caso de algun error, el padre enviara un numero de filas invalido (-1 o 0) para indicarle al hijo que se cierre y no realie mas operaciones (como en el caso de que el archivo no se pueda abrir o la matriz dentro de este este mal formada).
  6.  
  7. El padre llama a la funcion GetArrayDimensions para determinarl as filas y columnas de la matriz y genera errores si el archivo no tiene el esquema especificado.
  8.  
  9. El padre llena una matriz (arreglo de dos dimensiones) con los datos del archivo y luego envia la mitad siguiendo el siguiente procedimiento:
  10.  
  11. -Primero se envia le numero de filas y columnas al proceso hijo para que este pueda crear su propia matriz en memoria. Esto se logra con la funcion MPI_Send.
  12. -Luego se envia fila por fila para que el hijo lo copie en memoria.
  13.  
  14. Una vez que se envia la matriz al proceso hijo, ambos procesos comenzaran a procesar las matrices en forma paralela.
  15.  
  16. Una vez que el padre termina, espera el output del hijo (que puede o no ya haber terminado) y los suma para retornar el resultado final (printearlo).
  17.  
  18. Se utilizo gettimeofday y la estructura timeval para medir el tiempo en que se demora el procesamiento de la matriz
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement