Por Isabel López Sardiñas / c_info@myb.jovenclub.cu

El campo de computación de alto rendimiento (high performance computing o HPC) es una herramienta muy importante en el desarrollo de simulaciones computacionales a problemas complejos. Para lograr este objetivo, esta herramienta se apoya en tecnologías computacionales como los clusters, supercomputadores o mediante el uso de la computación paralela, la cual es muy importante actualmente, pues permite mejorar la velocidad en la solución de grandes problemas, de modo que aumenta el rendimiento de cómputo. La supercomputadora paralela Blue Gene de IBM es un ejemplo de la magnitud del tipo tarea de la que estamos hablando (Figura 1).

Figura 1. Supercomputadora paralela Blue Gene de IBM
Figura 1. Supercomputadora paralela Blue Gene de IBM

La programación paralela es el uso de varios procesadores trabajando en conjunto para dar solución a una tarea en común, de forma que se dividen el trabajo y cada procesador resuelve una porción del problema al poder intercambiar datos por una red de interconexión o a través de memoria.
La programación paralela permite solucionar problemas que no caben en un solo procesador y que no se resuelven en un tiempo razonable, se pueden ejecutar problemas con mayor complejidad más rápidamente.
El rendimiento de las computadoras tradicionales secuenciales está saturándose porque las aplicaciones de hoy en día necesitan realizar trabajo más complejo, por lo cual la solución es tener varios procesadores en sistemas paralelos, al así obtener ganancia de eficiencia, siempre y cuando los algoritmos se diseñen adecuadamente.

Desarrollo:

Los lenguajes paralelos para computadoras son flexibles de forma que permitan una implementación eficiente y resulten aun más fáciles para programar. Existen dos técnicas básicas a tener en cuenta:

Pipeline: conjunto de elementos procesadores de datos conectados en serie, en el cual la salida de un elemento está conectado en la entrada del que sigue. Los elementos de esta técnica son ejecutados en paralelo, debe haber un tipo buffer insertando cada elemento.

Figura 2. Pipelines
Figura 2. Pipelines

Las aplicaciones de pipeline, consisten en múltiples procesos que están ordenados de tal forma que el flujo de salida de un proceso se alimenta de la entrada del siguiente.

Replicación asincrónica: tecnología en la que una vez que los datos están escritos en el sitio de almacenamiento primario, los nuevos datos a este sitio son aceptados, sin tener que esperar que el sitio de almacenamiento secundario o remoto termine su escritura.

Figura 3. Replicación asincrónica
Figura 3. Replicación asincrónica

En la Wikipedia encontramos una explicación más amplia respecto al tema donde exponen que la computación paralela es una forma de cómputo en la que muchas instrucciones se ejecutan simultáneamente, operando sobre el principio de que problemas grandes, a menudo se pueden dividir en unos más pequeños, que luego son resueltos simultáneamente (en paralelo). Hay varias formas diferentes de computación paralela: paralelismo a nivel de bit, paralelismo a nivel de instrucción, paralelismo de datos y paralelismo de tareas. El paralelismo se ha empleado durante muchos años, sobre todo en la computación de altas prestaciones, pero el interés en ella ha crecido últimamente debido a las limitaciones físicas que impiden el aumento de la frecuencia. Como el consumo de energía —y por consiguiente la generación de calor— de las computadoras constituye una preocupación en los últimos años, la computación en paralelo se ha convertido en el paradigma dominante en la arquitectura de computadores, principalmente en forma de procesadores multinúcleo.

Las computadoras paralelas pueden clasificarse según el nivel de paralelismo que admite su hardware: equipos con procesadores multinúcleo y multi-procesador que tienen múltiples elementos de procesamiento dentro de una sola máquina y los clústers, MPPS y grids que utilizan varios equipos para trabajar en la misma tarea. Muchas veces, para acelerar tareas específicas, se utilizan arquitecturas especializadas de computación en paralelo junto a procesadores tradicionales.

Los programas informáticos paralelos son más difíciles de escribir que los secuenciales, porque la concurrencia introduce nuevos tipos de errores de software, siendo las condiciones de carrera los más comunes. La comunicación y sincronización entre diferentes tareas secundarias son algunos de los mayores obstáculos para obtener un buen rendimiento del programa paralelo.

La máxima aceleración posible de un programa como resultado de la paralelización se conoce como la ley de Amdahl. Otro científico Gustafson continúa el trabajo de Amdahl y demuestra que la limitación que él plantea es superable si se confeccionan los algoritmos lógicos con la idea clara de la paralelización, y la velocidad sería siempre ascendente en relación directa a la cantidad de microprocesadores que se asignen a una sola tarea.

Por lo general se asocian a este apasionante tema de la Programación en Paralelo soluciones a tareas muy difíciles como el control de la electricidad de una inmensa ciudad o también la confección algorítmica del, muy eficiente, motor de búsqueda de Internet Google, con la programación en paralelo se podría realizar la búsqueda, de forma que cada procesador encontrara la información ante todo en sus distintas formas de escribirse (uso de mayúsculas, minúsculas, artículos, preposiciones) y después de todas las variantes cada micro buscará en dominios diferentes, proporcionando rapidez y eficiencia.

Conclusiones:

Tradicionalmente, los programas informáticos se han escrito para el cómputo en serie. Para resolver un problema, se construye un algoritmo y se implementa como un flujo en serie de instrucciones. Estas instrucciones se ejecutan en una unidad central de procesamiento en un ordenador. Sólo puede ejecutarse una instrucción a la vez y un tiempo después de que la instrucción ha terminado, se ejecuta la siguiente. La computación en paralelo, por el contrario, utiliza, simultáneamente, múltiples elementos de procesamiento para resolver un problema. Esto se logra mediante la división del problema en partes independientes de modo que cada elemento de procesamiento pueda ejecutar su parte del algoritmo de manera simultánea con los otros, lo cual permite mejorar la velocidad en la solución de grandes problemas.

 Referencias Bibliográficas

Martínez, R. C. (2010). Lenguajes de Programación. “¿Qué es la programación paralela?”. [Online] [Disponible en http://ldp-roberto.blogspot.com/2010/11/que-es-la-programacion-paralela-lab.html] Consultado en enero/2015.

Wikipedia, la enciclopedia libre. (2013). “Computación paralela” [Online] [Disponible en http://es.wikipedia.org/wiki/Computaci%C3%B3n_paralela] Consultado en enero/2015.

Wikipedia, la enciclopedia libre. (2013).  “Computación de alto rendimiento” [Online] [Disponible en http://es.wikipedia.org/wiki/Computaci%C3%B3n_de_alto_rendimiento] Consultado en enero/2015.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *