La programación y computación en Paralelo - 5ta Parte

in GEMS2 months ago


Portada.png
La imagen de fondo de la portada es una imagen de libre uso tomada de Pixabay y editada por @abdulmath con Inkscape


Los computadores paralelos varían mucho en su organización, donde las unidades de procesamiento pueden o no estar directamente conectadas entre sí; algunas de las unidades de procesamiento pueden compartir una memoria común mientras que las otras pueden poseer sólo memorias locales (privadas); el funcionamiento de las unidades de procesamiento puede estar sincronizado por un reloj común, o pueden funcionar cada una a su ritmo. Además, suele haber detalles arquitectónicos y específicos del hardware de los componentes, todo lo cual aparece durante el diseño y el uso de un computador. Y por último, hay diferencias tecnológicas, que se manifiestan en diferentes velocidades de reloj, tiempos de acceso a la memoria, entre otrass. Por lo tanto surge la siguiente pregunta:


Pregunta02.png


Para responder a la pregunta, aplicamos ideas similares a las descubiertas en el caso de la computación secuencial. Allí se descubrieron varios modelos de computadores. En resumen, la intención de cada uno de estos modelos era abstraer las propiedades relevantes de la computación (secuencial) de las irrelevantes.



waves.png



En nuestro caso, un modelo llamado Random Access Machine (RAM) es particularmente atractivo. ¿Por qué? La razón es que la RAM destila las propiedades importantes de los ordenadores secuenciales de propósito general, que todavía se utilizan ampliamente hoy en día, y que se han tomado como base conceptual para el modelado de la computación paralela de la computación paralela y de los computadores paralelos. La figura siguiente muestra la estructura de la RAM.


RAM.png
El modelo RAM de computadoras tiene una memoria M (que contiene instrucciones de programa y datos) y una unidad de procesamiento P (que ejecuta instrucciones sobre los datos). Elaborada con Inkscape, por @abdulmath.


A continuación, daremos una breve descripción de la memoria RAM:

  • La RAM está formada por una unidad de procesamiento y una memoria. La memoria es secuencialmente infinita de ubicaciones de igual tamaño m0, m1, . . . El índice i se llama la dirección de mi. Cada ubicación es directamente accesible por la unidad de procesamiento: dada una i arbitraria, la lectura de mi o la escritura en mi se realiza en tiempo constante. Los registros son una secuencia r1 . . . rn de ubicaciones en la unidad de procesamiento. Los registros son directamente accesibles. Dos de ellos tienen funciones especiales. El Program counter, pc (=r1) contiene la dirección de la ubicación en la memoria que contiene la instrucción que se ejecutará a continuación. El acumulador, a (=r2) interviene en la ejecución de cada instrucción. A otros registros se les asignan funciones según sea necesario. El programa es una secuencia secuencia finita de instrucciones (similar a la de los ordenadores reales).


computer.png
Imagen de Pixabay

  • Antes de iniciar la RAM, se hace lo siguiente:
  1. se carga un programa en posiciones sucesivas de la memoria empezando por, digamos, m0
  2. se escriben los datos de entrada en posiciones de memoria vacías, digamos después de la última instrucción del programa.
  • A partir de este momento, la RAM funciona de forma independiente y por pasos mecánicos según las instrucciones del programa. Sea pc = k al principio de un paso. (Inicialmente, k = 0.) Desde la ubicación mk, se lee y se inicia la instrucción X. Al mismo tiempo, pc se incrementa. Así, cuando X se completa, la siguiente instrucción a ejecutar está en mk+1, a menos que X fuera una de las instrucciones que cambian pc.


music-5734445_1280.png



Así que la pregunta anterior se reduce a la siguiente:


Pregunta03.png


Resulta que encontrar una respuesta a esta pregunta es sustancialmente más difícil que en el caso del cálculo secuencial. ¿Por qué? Dado que hay muchas formas de organizar los ordenadores paralelos, también hay muchas formas de modelarlos; y lo difícil es seleccionar un único modelo que sea apropiado para todos los ordenadores paralelos.


Por ello, en las últimas décadas, los investigadores han propuesto varios modelos de computación paralela. Sin embargo, no se ha llegado a un acuerdo común sobre cuál es el correcto.



waves.png
Imagen de Pixabay


Si quedastes fascinado con este apasionante tema de la computación y programación en paralelo, no te pierdas la próxima publicación sobre este tema, si deseas ampliar más te invito a leer las siguientes referencias:

  • Atallah, M., Blanton, M. (eds.): Algorithms and Theory of Computation Handbook, Chapman and Hall, Boca Raton (2010).
  • Chandra, R., Menon, R., Dagum, L., Kohr, D., Maydan, D., McDonald, J.: Parallel Programming in OpenMP. Morgan Kaufmann, Burlington (2000).
  • Foster, I.: Designing and Building Parallel Programs: Concepts and Tools for Parallel Software Engineering. Addison-Wesley Longman Publishing Co., Inc, Boston (1995).


HiveFirma.png
cervantes.png