Programación paralela

Programación paralela
Información sobre la plantilla
Progparalela.jpg
Concepto:La programación en Paralelo es el usar varios procesadores para resolver una tarea común.


La Programación Paralela. es una alternativa ante la demanda continua de un poder computacional superior en áreas tan importantes como la predicción meteorológica, biocomputación, astrofísica. Las computadores secuenciales convencionales han venido aumentando considerablemente su velocidad aunque no en relación con sistemas cada vez más complejos que requieren mayor tiempo de cómputo.


Micros en Paralelo

Reseña Histórica

En los orígenes encontramos a Federico Luigi Menabrea y su «Bosquejo de la Máquina Analítica inventada por Charles Babbage». Posteriormente en 1954 IBM introdujo el IBM 704, a través de un proyecto en el que Gene Amdahl fue uno de los principales arquitectos. Se convirtió en el primer equipo disponible en el mercado que utilizaba comandos aritméticos de punto flotante totalmente automáticos.

En abril de 1958 , S. Gill (Ferranti) analizó la programación en paralelo y la necesidad de la ramificación y la espera. También en 1958, los investigadores de IBM John Cocke y Daniel Slotnick discutieron por primera vez el uso del paralelismo en cálculos numéricos.


En 1962 Burroughs Corporation presentó la D825, un equipo de cuatro procesadores que accede a un máximo de 16 módulos de memoria a través de un Conmutador de Barras Cruzadas.

En 1967, Gene Amdahl y Daniel Slotnick publicaron un debate sobre la viabilidad de procesamiento en paralelo en la Conferencia de la Federación Americana de Sociedades de Procesamiento de la Información. Fue durante este debate que la Ley de Amdahl fue acuñada para definir los límites de aceleración que se pueden alcanzar debido al paralelismo.

En 1969, la compañía estadounidense Honeywell introdujo su primer sistema Multics, un sistema con multiprocesador simétrico capaz de ejecutar hasta ocho procesadores en paralelo. En 1970, C.mmp, un proyecto en la Universidad Carnegie Mellon con varios procesadores, fue «uno de los primeros multiprocesadores con más de unos pocos procesadores». En 1984 «El primer bus con conexión multi-procesador y caché espía fue el Synapse N+1».

La Computadora paralela SIMD se remontan a la década de 1970 En 1964, Slotnick había propuesto la construcción de un ordenador masivamente paralelo para el Laboratorio Nacional Lawrence Livermore . Su diseño fue financiado por la Fuerza Aérea de los Estados Unidos, que fue el primer esfuerzo por lograr la computación en paralelo SIMD. La clave de su diseño fue un paralelismo bastante alto, con hasta 256 procesadores, lo que permitió que la máquina trabajara en grandes conjuntos de datos en lo que más tarde sería conocido como el procesamiento de vectores. Sin embargo, ILLIACIV fue llamado «el más infame de los superordenadores», pues solo se había completado una cuarta parte del proyecto. Tardó 11 años, costando casi cuatro veces la estimación original. Cuando estaba listo para ejecutar una aplicación real por primera vez en 1976, fue superado por supercomputadoras comerciales, como el Cray-1.

Aspectos a tener en cuenta

  • Diseño de Computadoras paralelas.
  • Diseño de Algoritmo eficiente.
  • Métodos para evaluar el Algoritmo paralelo.
  • Lenguajes para computadores paralelos, flexibles para permitir una implementación eficiente y que sean fáciles de programar.
  • Herramientas para la programación paralela.
  • Programa Paralelo portable.
  • Compilador Paralelizante.

Los algoritmos paralelos son extremadamente importantes para solucionar problemas grandes para muchos campos de aplicación. En esta sección se describen las etapas típicas para el diseño de los algoritmos paralelos:

  1. Particionamiento. Los cálculos se descomponen en pequeñas tareas. Usualmente es independiente de la arquitectura o del modelo de programación. Un buen particionamiento divide tanto los cálculos asociados con el problema como los datos sobre los cuales opera.
  2. Comunicación. Las tareas generadas por una partición están propuestas para ejecutarse concurrentemente pero no pueden, en general, ejecutarse independientemente. Los cálculos en la ejecución de una tarea normalmente requerirán de datos asociados con otras tareas. Los datos deben transferirse entre las tareas y así permitir que los cálculos procedan. Este flujo de información se especifica en esta fase.
  3. Aglomeración. Las tareas y las estructuras de comunicación definidas en las dos primeras etapas del diseño son evaluadas con respecto a los requerimientos de ejecución y costos de implementación. Si es necesario, las tareas son combinadas en tareas más grandes para mejorar la ejecución o para reducir los costos de comunicación y sincronización.
  4. Mapeo. Cada tarea es asignada a un procesador de tal modo que intente satisfacer las metas de competencia al maximizar la utilización del procesador y minimizar los costos de comunicación.

La competencia de la paralelización es difícil ya que la Programación de Estructura secuencial esta muy optimizada. Además no todo algorítmo es paralelizable.

Ley de Amdahl

En 1967 fue usada como un argumento en contra del procesamiento paralelo masivo. Ya que plantea que llega el momento en que por más procesadores que se asignen a una tarea la velocidad alcanzará su máximo valor y en lo adelante se mantendrá constante, en dependencia de la parte no paralelizable del problema.

Ley de Gustafson

Desde 1988 ha sido usada para justificar el procesamiento paralelo masivo asegurando que el problema radica en la concepción del algoritmo y que la velocidad que puede alcanzarse es directamente proporcional al número de procesadores que se le asignen a una tarea.

Interesantemente, un análisis cuidadoso revela que estas dos leyes son de hecho idénticas. Los bien publicitados argumentos fueron el resultado de un malentendido sobre la naturaleza de ambas leyes”.

Lenguajes de programación en paralelo

Los lenguajes de Programación Concurrente, bibliotecas, APIs y modelos de programación paralela han sido creados para la programación de computadores paralelos. POSIX Threads y OpenMP , Message Passing Interface, OpenHMPP, Código C o Fortran

Ver también

  • Programacion concurrente: Es aquel que define acciones que pueden realizarse simultaneamente.
  • Programa distribuido: Es un programa paralelo diseñado para su ejecucion en una red de procesadores autonomos que no comparten la memoria.

Fuentes