Está en la página 1de 3

Para la multiplicación de matrices con mpi vamos a recibir por consola el tamaño de la matriz con

las siguientes líneas de código

Luego declaramos tres matrices con los tamaños antes mencionados, también se declaran las
variables para mpi y los procesos que van a realizar. En este caso también tomamos unas variables
para medir los tiempos.

Se inicializa la parte de MPI con MPI_Init, MPI_Comm_rank y MPI_Comm_size, seguido de esto se


asigna a la variable cuantos nodos esclavos vamos a tener, que en este caso son los cuatro nodos
que se tienen menos el nodo maestro.

Seguido de esto en un condicional If veremos si se encuentra en el nodo maestro, si se encuentra


allí, se procede a inicializar las matrices con valores utilizando la función rand, esto se hace en un
doble bucle for. Tenemos en cuenta que utilizamos srand para mantener los mismos valores al
generar la matriz.

Se determina el numero de filas que se va a enviar a cada nodo esclavo, y un offset que determina
donde inicia cada nodo. En un bucle for se envia a cada nodo, donde va a empezar en la matriz A,
la cantidad de filas que va a procesar desde la ubicación en la matriz A, las filas de la matriz A que
de van a procesar y la matriz B. Esto se hace como se muestra en la siguiente imagen
De igual manera otro bucle for se reciben el offset el numero de filas que se procesaron y una
matriz C donde se va a almacenar el resultado de la multiplicación.

Para los demás nodos tenemos que estos van a recibir los mismos datos que se envían del nodo
maestro, para luego en un doble ciclo for hacer la operación matricial que en este caso es la
multiplicación de matrices. Este resultado se va a almacenar en la matriz C, como se ve a
continuación.
Finalmente se envían los resultados de la operación matricial, los datos que se van a enviar son los
mismos que va a recibir el nodo maestro, el offset, el numero de filas y el resultado de la
operación.

Para terminar el proceso se finaliza con MPI_Finalize().

También podría gustarte