Multiprocesadores

Un multiprocesador es un chip con dos o más unidades centrales de procesamiento (CPU). El objetivo principal de usar un multiprocesador es aumentar la velocidad de ejecución del sistema, con otros objetivos como tolerancia a fallas y coincidencia de aplicaciones.

Palabras claves

  • CPU: Es el hardware dentro de un computador u otros dispositivos programables, que interpreta las instrucciones de un programa mediante la realización de las operaciones básicas aritméticas, lógicas y de entrada/salida del sistema.
  • RAM: La memoria de acceso aleatorio se utiliza como memoria de trabajo de computadoras y otros dispositivos para el sistema operativo, los programas y la mayor parte del software. En la RAM se cargan todas las instrucciones que ejecuta la unidad central de procesamiento (procesador) y otras unidades del computador, además de contener los datos que manipulan los distintos programas.
  • Hilo (hardware): Un hilo o Thread en inglés es una versión virtual de un núcleo de un CPU, en procesadores modernos popularmente un núcleo de un CPU es capaz de crear 2 hilos, en los cuales puede procesar el doble de operaciones, en los procesadores de Intel esta capacidad se denomina Hyper Threading mientras que en los procesadores de AMD se conoce como SMT (Simultaneous Multi Threading)

Diagrama Interno de un CPU

En la imagen anterior se tiene el diagrama interno del procesador 9900k de Intel, el cual posee 8 núcleos físicos, 16 hilos y 16MB de memoria caché, las cuales asigna 2MB por cada núcleo, como se puede observar en la imagen cada núcleo del CPU tiene un 1MB de memoria caché a sus lados.

Procesamiento con múltiples hilos

Un hilo es simplemente una tarea que puede ser ejecutada al mismo tiempo que otra tarea.

Los hilos de ejecución comparten los mismos recursos. El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar estos recursos. Cuando un hilo modifica un dato en la memoria, los otros hilos acceden a ese dato modificado inmediatamente.

Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado de la CPU. El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo. Cuando el proceso finaliza, todos sus hilos de ejecución también han terminado. Así mismo, en el momento en el que todos los hilos de ejecución finalizan, el proceso no existe más y todos sus recursos son liberados.

Algunos lenguajes de programación tienen características de diseño expresamente creadas para permitir a los programadores lidiar con hilos de ejecución (como Java, Python, entre otros). Otros lenguajes de programación deben crear los hilos mediante llamadas de biblioteca especiales que dependen del sistema operativo en el que estos lenguajes están siendo utilizados (como es el caso del C y de C++).

¿Cuándo usar hilos?

  • La aplicación va a requerir realizar diversas tareas claramente diferenciadas con un alto coste computacional que sea mayor al que se genera en un cambio de contexto, es decir, de liberación del espacio de memoria asignado.
  • El resultado de las tareas que se ejecuten en diferentes hilos no debe dependerdel resultado de otras tareas, ya que, de lo contrario, las tareas se estarían esperando unas a otras y al final el rendimiento sería menor del esperado.
  • Se prevea que pueda haber tareas retenidas o bloqueadaspor estar esperando a una lectura de disco, por ejemplo. En estos casos, esta tarea se bloquea y otra entra en acción, aprovechando de esta forma la programación multihilo.

Referencias

 

No comments

Comentarios en artículos

No comments

Nobody has submitted a comment yet.