Paralelizar el código presentado haciendo uso de hilos con la librería pthreads.
La función SAXPY (single-precision A*X plus Y) es una función básica en el álgebra lineal. Esta función es usada recurrentemente para el desarrollo de métodos numéricos, en el procesamiento de señales, etc.
La función saxpy (simulación) desarrolla la multiplicación de un valor escalar
Aunque la función saxpy no es particularmente difícil a nivel computacional, cuando se tiene una gran cantidad de datos a procesar puede ser ser usada como ejemplo para explorar la programación paralela.
En el ejemplo presentado en este laboratorio (saxpy.c), vamos a implementar una función saxpy iterativa, con el fin de obtener un tiempo de ejcución adecuado para el desarrollo de este ejercicio:
para un número máximo de iteraciones max_iters haga:
Y = a * X + Y
fin
Con el fin de hacer el ejercicio más divertido, el programa base propuesto, también calcula los valores promedio de cada iteración de Y.
make clean
make DEBUG=1
./saxpy
make clean
make DEBUG=0
./saxpy
- Haga un fork de este repositorio. Luego, trabajando sobre este, compile y ejecute el código, trate de entenderlo, no es difícil.
- Defina una estrategia para el desarrollo de la versión paralela: ¿Cuál es la mejor forma de dividir el trabajo entre los hilos disponibles?
- Desarrolle una primera versión paralela dividiendo el trabajo entre solo 2 hilos, verifique que el código sigue funcionando correctamente (comparando el resultado con una versión secuencial) y luego verifique que el tiempo de ejecución disminuye en la versión paralela.
- Implemente un versión paralela que distribuya el trabajo de manera automática para un número n de hilos. Se realizarán pruebas para n = 1, 2, 4, y 8 hilos.
- Desarrolle un informe dónde evalúe el desempeño su versión paralela, tomando el tiempo de ejecución del programa utilizando varios hilos, y desarrollando varias repeticiones (mínimo 10 por caso). Grafique los resultados y analice las gráficas.
A continuación, se detallan algunos enlaces con material de utilidad para el desarrollo de la practica: