ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Similar a como se hizo con los métodos Fork-join


Enviado por   •  3 de Octubre de 2015  •  Apuntes  •  600 Palabras (3 Páginas)  •  58 Visitas

Página 1 de 3

Informe Open MP

Introducción

Además del uso de CUDA, existen otras aplicaciones para el trabajo con multiprocesos, una de ellas es OPEN MP, una interfaz de programación de aplicaciones (API) para la programación multiproceso de memoria compartida en múltiples plataformas. Permite añadir concurrencia a los programas escritos en C, C++ y Fortran sobre la base del modelo de ejecución fork-join. A nuestro parecer es la mejor, más adelante evidenciaremos por qué.

Paralelización del algoritmo

Similar a como se hizo con los métodos Fork-join y pthread créate en la primera entrega, el proceso de paralelización tiene en cuenta varias partes del algoritmo. Inicialmente, se debe seleccionar el tamaño de la matriz y la cantidad de hilos que se desea se ejecuten en la aplicación. A partir de esto, se realiza el cálculo de la carga de cada hilo, de manera que quede lo más balanceada posible, esto, haciendo que cada hilo trabaje con un número fijo de filas de A, pero teniendo acceso a la matriz B por completo, de esta manera se optimiza el trabajo realizado, pero el trabajo se divide equitativamente entre la cantidad de hilos. Esto se puede evidenciar viendo la Figura 2. Todo esto nos lleva a una mejora en tiempos envidiable.

Metodología

Open MP está diseñado para ser, de cierta manera, fácil de utilizar, y efectivamente es impresionante la facilidad con la que se puede realizar un procedimiento haciendo uso de Open MP, por lo que es escogido a nuestro parecer como el mejor método para realizar paralelismo, sin embargo, CUDA tiene un mejor desempeño para aplicaciones muy grandes, y en general, tanto Open MP como CUDA opacan a los métodos tradicionales de procesos y con pthread créate, pues son más simples de utilizar y entender, y sus tiempos son mejores. Normalmente como programadores tenemos el algoritmo secuencial en mente, pues así fue como aprendimos a programar, con el uso de Procesos y PthreadCreate, era necesario añadir bastantes cosas adicionales, incluso era necesario el uso de una función para el cálculo de la matriz. Para la arquitectura de hilos, esta función era uno de los parámetros que recibía la creación del hilo, al igual que la matriz y sus demás valores, tras operar, era necesario hacer un join de los hilos, esperándolos a todos, para tener una multiplicación completa. Para el uso de procesos es un poco más complejo, pues al igual es necesaria la función, pero como cada hilo de cierta manera “clona” todo el código, incluyendo variables y demás, era necesaria la comunicación entre estos usando pipes, su implementación es compleja, pero gratificante al finalizar. Para el uso de CUDA, también era necesaria la función de kernel, y utilizar la memoria de manera adecuada, para que el kernel pudiera ser lanzado de manera exitosa y la multiplicación se hiciera más eficiente, sin embargo es tedioso el manejo de variables tanto de dispositivo como de host o CPU. Y para finalizar, la metodología que ofrece Open MP es la más simple, y ofrece resultados muy gratificantes, que se pueden evidenciar casi que inmediatamente, a diferencia de otros métodos que solo evidencian resultados en matrices muy grandes, Open MP permitía ver una optimización del tiempo desde las etapas iniciales de la fase de pruebas, sin embargo, cada tamaño de matriz tiene un límite de hilos con los que es óptimo realizar la multiplicación, al añadir más hilos, el tiempo en algunos casos seguía siendo el mismo, o peor aún, el tiempo empezaba a aumentar, incluso a duplicarse, lo que hace a Open MP muy bueno para aplicaciones no tan grandes, a menos que se use un computador con muy buenas prestaciones.

...

Descargar como (para miembros actualizados)  txt (3.6 Kb)   pdf (46.8 Kb)   docx (9 Kb)  
Leer 2 páginas más »
Disponible sólo en Clubensayos.com