Multiprocesadores

En el surgimiento de la computación, se creaban maquinas con una capacidad muy reducida de procesar datos. En la primera generación de computadoras, los datos se almacenaban en tubos al vacío, donde cada uno representaba un bit por lo que eran máquinas grandes que ocupaban mucho espacio y a la vez provocaban un sobrecalentamiento. 

  1. Introducción

A inicios de la década de los 60, muchos diseñadores de arquitecturas de ordenadores tenían presente la idea de que fueran aún más rápidos, sin embargo, hubo muchas complicaciones con respecto al rendimiento y mejoras significativas de acceso a memoria. 

La idea del multiproceso fue básicamente de ejecutar varias tareas al mismo tiempo, lo que se conoce como paralelismo. Esta forma de dividir una tarea en varios procesos, se destaca por la manera en que aprovecha al máximo los recursos y finalizar en un tiempo considerable comparado con la secuencialidad. 

A continuación, podemos ver un ejemplo de esto:

2. Conceptos de programación 

 

Para explicar un poco el multiproceso se deben tomar en cuenta algunos conceptos básicos de programación. 

 

  1. Hilo 

El hilo es una estructura ligera que ejecuta el sistema operativo en secuencia con otras tareas. Esta es una forma de simplificar los procesos convirtiéndolos en pequeños subprocesos que se pueden ejecutar de forma paralela en ocasiones, sin embargo, los hilos no fueron creados a raíz del paralelismo, sino que simplemente se crearon con dicho objetivo. 

La idea principal de los hilos es dividir la ejecución en distintos hilos simples pero cada uno con un objetivo específico para que una vez el planificador del sistema operativo los esté ejecutando, se vayan uniendo los hilos dentro del mismo proceso, lo cual parece que se ejecutan en paralelo. 

 

  1. Cerraduras de exclusión mutua 

Son mecanismos que se usan a la hora de ejecutar hilos de procesamiento, esto con el objetivo de que los elementos sean utilizados uno a la vez por un solo hilo. En otras palabras, los cerrojos se encargan de sincronizarse entre sí y limitar el acceso a un determinado elemento para que los demás hilos trabajen con otros elementos o bien quedar a la espera. 

 

  1. Variables de condición 

Las variables de condición son estados que están presentes en bucles esperando una señal para que las cerraduras se desbloqueen y continúen con la ejecución. Los hilos tienen dos variables que indican un estado. Hay dos tipos de variables: espera y señal.  

Al ejecutarse un hilo, deberá hacer uso de elementos del sistema operativo, por lo tanto, tendrá que bloquearlo mientras que los demás hilos estarán limitados por las variables de condición. Una vez se deje de usar el elemento, se desbloquea y el hilo manda una señal a través de la variable de condición de señal, a la cual tienen acceso los demás hilos permitiendo el uso del elemento desbloqueado. 

  1. Semáforo 

Es una variable especial, similar a las variables de condición. Se encargan de dar y limitar el acceso a partes diferentes del programa y son accedidos de manera especial ya que se manipulan variables y recursos importantes. 

Los semáforos se pueden utilizar con diferentes propósitos: 

1. Implementar cerrojos de exclusión mutua. 

2. Barreras. 

3. Permitir a los hilos el acceso a los recursos del programa y otros elementos. 

4. Comunicación entre hilos para la disponibilidad de recursos. 

 

  1. Paralelismo 

 

El paralelismo es una operación de diversas tareas ejecutándose a la misma vez, con el objetivo de realizarlas en menor tiempo. El multiprocesamiento ha intentado explotar el paralelismo logrando apenas un acercamiento de este, ya que la organización y arquitectura de una computadora tiende a la operación secuencial. Además, existen varias arquitecturas de procesadores que tratan de aprovechar al máximo los recursos y trabajar simulando el paralelismo, lo veremos más adelante.   

 

Por otro lado, existen 4 tipos de paralelismo: 

  1. Paralelismo a nivel de bits. 

  1. Paralelismo a nivel de instrucción. 

  1. Paralelismo a nivel de datos. 

  1. Paralelismo a nivel de tarea. 

 

  1. Secuencialidad 

 

La secuencialidad es lo contrario del paralelismo, ya que está orientada a realizar los procesos de manera sucesiva, es decir, el proceso general una vez dividido en tareas o subprocesos más pequeños, se ejecutarán tomando en cuenta el de más prioridad debido a la consistencia e integridad de los datos, para luego continuar con los siguientes. Además, durante la ejecución, el dispositivo o el sistema que está requiriendo de esos datos, deberá esperar hasta que el procesador termine. 

El ser humano se le ha encomendado un gran potencial para pensar y buscar soluciones a la hora que se presenta un problema, sin embargo, sigue pensando y realizando las tareas de manera secuencialmente. La computación, uno de los grandes logros de la humanidad, ha roto esa barrera trayendo consigo mayor capacidad y rendimiento al procesar tareas. 

 

  1. Concurrencia 

 

La concurrencia es una forma más generalizada de lo que es el paralelismo. La idea se basa en ejecutar al menos dos hilos de manera secuencial. Sin embargo, no es capaz de seguir con la ejecución porque uno de los dos procesos se tiene que interrumpir para proseguir con el siguiente. 

Esta es la manera más cercana de ejecutar tareas de manera simultánea, pero con ciertas interrupciones en la ejecución ya que el cálculo y el procesamiento de los datos que posee una tarea requiere de la otra que se está ejecutando o está en espera. 

 

3. Organizaciones 

 

Las organizaciones de los ordenadores multiproceso se encargan de ordenar e interconectar los componentes de una forma que se pueda acceder a la memoria para almacenar datos y/o cargarlos al procesador mientras se mantienen en ejecución. Los principales componentes que se deben tomar en cuenta para el multiprocesamiento son la memoria y los procesadores. 

A continuación, se presentan 4 tipos de organizaciones. 

  1. SISD (Single Instruction, Single Data): Es la más simple de las 4 organizaciones. Esta se encarga de ejecutar una sola secuencia de instrucciones para procesar los datos almacenados en una sola memoria compartida. 

  1. SIMD (Single Instruction, Multiple Data): Una única secuencia de instrucciones controla simultáneamente y de manera sincronizada varios procesadores y cada uno tiene una memoria asociada. 

  1. MISD (Multiple Instructions, Single Data): Se transmite a los procesadores una secuencia de datos diferentes donde cada uno ejecuta una instrucción diferente. 

  1. MIMD (Multiple Instructions, Multiple Data): Es un caso de Sistema Distribuido donde utiliza memoria compartida y su función es ejecutar varias instrucciones de manera simultánea sobre un conjunto de datos diferentes. 

 

4. Redes de interconexión 

 

Las redes de interconexión es la forma en como está conectada la memoria con los procesadores, las cuales se pueden construir en dos modelos llamados Memoria Compartida y Paso de Mensajes. 

El modelo de Memoria Compartida lo que hace es compartir el recurso de la memoria con los diferentes procesadores y se tiene en cuenta los beneficios de los procesos en paralelo. Existen varios modelos de memoria compartida que están construidos de manera que se eficiente según el propósito de la máquina. A continuación, se muestra el Modelo de Acceso a Memoria Uniforme (UMA). 

 

 

El modelo de Paso de mensajes, como su nombre lo dice, es la comunicación por mensajes, pero a nivel de computadoras separadas. Están conectadas a través de un bus que envían los mensajes y solo tienen acceso a la memoria local por lo que la sincronización de las computadoras es altamente importante en este modelo debido a que muchos procesos dependen del acceso al recurso de la memoria. Este es un modelo de Paso de Mensajes: 

 

5. Sistemas multicore 

 

Los sistemas multicore al igual que las tecnologías anteriores, han venido con el objetivo de tener mayor capacidad de procesamiento administrando de manera optimizada los recursos y dando capacidad más amplia de acceso a datos en memoria.  

Su estructura es básicamente que un solo chip tiene varios núcleos y cada uno puede correr hilos de procesamiento, los cuales, ejecutan segmentos de instrucciones de manera paralela y se reduce el consumo de energía ya que el alambrado del núcleo es más corto y favorece en que los accesos a memoria sean más eficientes. 

Como antes se menciona, el paralelismo se ha trabajado de manera simulada y no se ha explotado el potencial, sin embargo, en los Sistemas o Arquitecturas Multicore, se le ha dado la importancia que se debe.  

 

IBM100 - Power 4 : The First Multi-Core, 1GHz Processor 

El procesador que vemos en la imagen anterior, es el primer procesador dos núcleos de procesamiento, diseñado por IBM. Como se observa, en la imagen, su arquitectura posee 2 núcleos y la forma en que está distribuido el acceso a la memoria trajo un gran avance para futuras generaciones de procesadores Multicore. 

 6. Threads de Hardware 

Es una tecnología que se enfoca en aprovechar los recursos tanto del sistema operativo como de la computadora a nivel de hardware, en la forma que divide las tareas en subprocesos. Se presenta en las computadoras de múltiples procesadores o de múltiples núcleos. Para lograr el máximo rendimiento, se ha logrado diferentes tipos de estructuras dentro de los procesadores: 

  1. Large-Grain Multi-Threading: Se ejecutan de forma habitual y el procesador hace un cambio de contexto cuando ocurre un evento de larga duración para que los recursos del sistema se usen de forma ordenada y cumpliendo con la secuencialidad para obtener el resultado esperado. 

 

  1. Fine-Grained Multi-Threading: Este tipo de estructura ejecuta los hilos haciendo cambios rápidos y segmentados de manera ordenada, para evitar algunos eventos de larga duración como se habla en la anterior. Además, como ventaja, elimina dependencia de datos que pausan al procesador. 

 

  1. Simultaneous Multi-Threading: A diferencia de las estructuras anteriores, esta es la más compleja de realizar ya que como tiene que ejecutar instrucciones de diferentes threads en cualquier ciclo del reloj, requiere de un hardware adicional que se encargue de la parte lógica y así permitir la simultaneidad. Además, un procesador muestra a un procesador físico como dos o más procesadores lógicos y de esta manera los programas ven a los procesadores lógicos como un procesador físico. 

 

7. Jerarquía de memorias 

La jerarquía de memorias se debe a la velocidad y eficiencia de acceso a los datos almacenados de tal manera que aproveche al máximo la velocidad del procesados, ya que es considerablemente más rápido. 

Los tipos de memoria que hay en una computadora tienen su propia velocidad de acceso y entre más cerca del procesador este, mayor velocidad como se observa en la siguiente imagen. 

 

Cuadro de textoForma 

Como se menciona anteriormente, el acceso a la memoria, entre más lejos esté del procesador, su velocidad disminuye. Una de las desventajas de la poca capacidad de almacenamiento de las memorias cercanas al procesador es que, al hacer LOAD/STORE se puede agotar, por lo que se requiere subir el nivel en la jerarquía y almacenar la porción necesaria. 

8. Protocolos de coherencia 

A lo largo de esta lectura, se observa como el procesador trabaja con la memoria principal y también que están separadas por una jerarquía. La memoria caché, es la memoria externa más cercana al procesador y se encarga de almacenar datos temporalmente cunado este la requiere.  

El procesador debe ofrecer dos propiedades fundamentales para un mejor rendimiento que son: migración de datos compartidos y replicación de datos compartidos leídos y lo puede hacer mediante protocolos de coherencia de caché. 

En otras palabras, la coherencia se refiere a la comunicación entre las memorias caché que tiene asociada un procesador en un sistema de multiprocesadores. Al hacer consulta de datos se debe devolver el valor más recientemente escrito en un dato. 

tec_c 

 

En la imagen, se logra apreciar la conexión que hay entre ellas con el objetivo de brindar el dato que corresponde a la petición hecha por el procesador. 

Hay dos familias de protocoles de coherencia de caché: 

  1. Protocolos basados en directorio. 

  1. Protocolos de espionaje. 

Referencias 

Departamento de Informática - Universidad de Valladolid. (s.f.). Departamento de Informática - Universidad de Valladolid. Obtenido de https://www.infor.uva.es/~bastida/Arquitecturas%20Avanzadas/Redes.pdf 

Félix García Carballeira, A. C. (s.f.). Universidad Carlos III de Madrid. Obtenido de http://ocw.uc3m.es/ingenieria-informatica/estructura-de-computadores/transparencias/T5-memoria_intro_1-v2.pdf 

Hindle, R. (29 de Junio de 2009). it-swarm.dev. Obtenido de https://www.it-swarm.dev/es/language-agnostic/cual-es-la-diferencia-entre-concurrencia-y-paralelismo/967208702/#:~:text=Concurrencia%20es%20cuando%20dos%20o,en%20per%C3%ADodos%20de%20tiempo%20superpuestos.&text=Paralelismo%20es%20cuando%20las%20tareas,eje 

Juan F. Guerrero Martínez, J. V. (2010-2011). Open Course Ware de la Universitat de València. Obtenido de http://ocw.uv.es/ingenieria-y-arquitectura/sistemas-electronicos-para-el-tratamiento-de-la-informacion/seti_materiales/seti9_ocw.pdf 

Sánchez, J. D. (s.f.). Universidad Carlos III de Madrid. Obtenido de http://ocw.uc3m.es/ingenieria-informatica/arquitectura-de-computadores/materiales/es-m5-intro.pdf/at_download/file 

Tosini, M. (s.f.). Facultad de Ciencias Exactas - Universidad Nacional del Centro de la Provincia de Buenos Aires. Obtenido de http://www.exa.unicen.edu.ar/catedras/arqui2/arqui2/filminas/Sistemas%20de%20Procesadores%20paralelos_PARTE%20I.pdf 

Universidad Autónoma de Barcelona. (2009). Recercat. Obtenido de https://www.recercat.cat/bitstream/handle/2072/41800/TR_HectorDobladoRuesga.pdf?sequence=1 

Universidad Europea de Madrid. (s.f.). Cartagena99. Obtenido de http://www.cartagena99.com/recursos/alumnos/apuntes/ININF1_M10_U4_T1.pdf 

No comments

Comentarios en artículos

No comments

Nobody has submitted a comment yet.