Esta semana me dí a la tarea de investigar cuando es correcto paralelizar código, esto debido a que como estoy en el equipo que debe programar es importante saber cuando si se puede hacer y cuando no.
Y las cosas que debemos saber para cuando este listo el cluster y poder pasar los programas que simulan procesos en hilos a programas que se ejecuten en procesos de diferentes máquinas.
Se tiene que analizar si se cuenta con el hardware y software necesario para determinar se si vale la pena paralelizar el programa o viceversa.
En cuestiones de equipamiento el proceso de paralelizar un programa nos exigira conocer un poco más de la arquitectura de la supercomputadora o "cluster" sobre el cual pretende paralelizar su código, conocer con cuantos procesadores se cuenta, la cantidad de memoria, espacio en disco, los niveles de memoria disponible, el medio de interconexión, etc.
En términos de software debemos conocer qué sistema operativo se manejará, si los compiladores instalados permiten realizar aplicaciones con paralelismo, si se cuenta con herramientas como PVM o MPI en sistemas distribuidos.
Para saber si vale la pena el paralelismo en un programa, podemos identificar nuestra situación con las siguientes justificaciones:
1.Necesidad de respuesta inmediata de resultados.
Si el usuario está usando un programa en una máquina secuencial, y necesita ejecutarlo en varias ocasiones con datos de entrada diferentes, y el tiempo de ejecución es considerable (consume horas o días) le es molesto esperar tanto tiempo para volver a realizar otro experimento o someterlos secuencialmente que al final disminuirá notablemente el desempeño de su máquina. Esto sin considerar las modificaciones al código o fallas en la ejecución del modelo. La paralelización y la ejecución del programa en una máquina paralela permitirá realizar más análisis o experimentos en menos tiempo.
2.Es un problema de Gran Reto.
Un programa puede presentar algoritmos de cálculo científico intensivo que demanden grandes recursos de cómputo (CPU, memoria, disco), en estos casos el dicho de "divide y vencerás" bien se puede aplicar, las tareas se dividen entre varios procesadores, se ejecutan en paralelo y se obtiene una mejora en la relación costo y desempeño. Hoy en día las arquitecturas de cómputo estan incorporando paralelismo en los más altos niveles de sus sistemas, para satisfacer las exigencias de los problemas de grandes retos.
3.Simplemente elegancia de programación.
Es completamente válido.
Para implementar paralelismo a un programa es muy importante que el código presente:
Independencia de datos. Como programadores debemos saber identificar tareas independientes dentro del código, por ejemplo, revisar que existan ciclos for o do independientes, y rutinas o módulos independientes. De tal forma que no exista dependencias de datos que puedan obstruir la paralelización.
Que el programador identifique las zonas donde se efectúa la mayor carga de trabajo y que le consuma la mayor parte de tiempo de ejecución.
Es todo por esta semana espero, mis compañeros se den la oportunidad de leerlo, ya que menciono algunos puntos que debemos tener en cuenta para empezar a hacer que nuestro código corra en clústers y saber cuando vale la pena paralelizar.
Referencias
Paralelización
Maestra no recuerdo mi contraseña del wiki, en cuanto lo haga lo subo ahi
ResponderEliminarMuy bien; te subo a 8 el lab de semana 7. El martes arreglamos tu cuenta de WIki.
ResponderEliminar