next up previous contents
Next: 4.2 Implementación paralela Up: 4.1 Multiplicación de matrices Previous: 4.1.1 La operación de   Índice General


4.1.2 Una sencilla implementación de multiplicación de matrices

En el apéndice (A.1.2) se presenta un sencillo programa de multiplicación de matrices en C. Este programa se utilizará como punto de partida para las implementaciones paralelas. Como se trata de un programa con fines de pruebas, no está pensado para tener una utilidad práctica real. El programa únicamente podrá operar sobre matrices cuadradas y de igual dimensión, que contengan elementos enteros. Adicionalmente, el programa no acepta datos de entrada, sino que genera las matrices de forma aleatoria.

Aún con estas restricciones, el programa es suficiente para presentar una implementación de la multiplicación de matrices, así como evaluar su desempeño. El programa acepta parámetros en su línea de comandos para definir la dimensión de las matrices, lo cual es importante para variar la cantidad de trabajo que se debe realizar; así como para imprimir a pantalla tanto las matrices a multiplicar como su resultado. Esto es básicamente con fines de verificación de resultados, y es poco práctico para matrices de dimensiones superiores a $10\times 10$ pues es difícil visualizar éstas en una pantalla común.

Una vez asignando espacio para las matrices y generando dos de ellas aleatoriamente (líneas 62-77), el programa toma una muestra de la hora actual, con precisión hasta microsegundos (línea 80). Posteriormente procede a recorrer cada renglón de la matriz (ciclo que inicia en la línea 89). Para cada renglón, otro ciclo realiza el resultado en cada celda (línea 96), empleando un contador (línea 100) para multiplicar cada elemento del renglón de la primera matriz por su correspondiente en la columna de la segunda matriz y acumulando para finalmente obtener el resultado de la celda correspondiente. Los resultados se almacenan en una tercera matriz. Al finalizar el cálculo se toma otra muestra de la hora actual (línea 116), se calcula el tiempo de operación a partir de las dos muestras tomadas, y se despliega este valor (líneas 124-130).

Una corrida ejemplo de este programa, con una matriz de dimensión 150 (es decir, $150\times 150$, o 22,500 elementos) es como sigue:

$ ./unimatrix -d 150
dimension 150
calculado row 0
calculado row 1
calculado row 2
calculado row 3
...
calculado row 148
calculado row 149
wall clock time = 4.462505
Obsérvese la especificación del tamaño de la matriz por medio del parámetro -d. En esta corrida ejemplo se aprecia que el tiempo de ejecución es de 4.46 segundos.


next up previous contents
Next: 4.2 Implementación paralela Up: 4.1 Multiplicación de matrices Previous: 4.1.1 La operación de   Índice General
2002-05-15