Los microhilos para procesadores multinúcleo y de muchos núcleos son un mecanismo para ocultar la latencia de la memoria, similar a las arquitecturas de subprocesos múltiples. Sin embargo, en el caso de procesadores multinúcleo como el Cell Broadband Engine, se implementa mediante software para ocultar dinámicamente las latencias que se producen debido a la latencia de la memoria o a las operaciones de entrada/salida.
Introducción
El microhilo es un marco de hilos basado en software que crea pequeños hilos dentro de procesadores multinúcleo o de muchos núcleos. Cada núcleo puede tener dos o más hilos diminutos que utilizan su tiempo de inactividad. Es como el hyper-threading inventado por Intel o la arquitectura general de multihilo en los microprocesadores modernos. Permite la existencia de más de un hilo ejecutándose en el mismo núcleo sin realizar costosos cambios de contexto a la memoria principal del sistema, incluso si este núcleo no tiene lógica de hardware de multihilo . Los microhilos ocultan principalmente la latencia de memoria dentro de cada núcleo al superponer cálculos con solicitudes de memoria. La principal diferencia entre los microhilos y los modelos de hilos actuales es que la sobrecarga del cambio de contexto de los microhilos es muy pequeña. Por ejemplo, la sobrecarga de la implementación de microhilos en Cell Broadband Engine es de 160 nanosegundos; mientras tanto, la sobrecarga del cambio de contexto del hilo de todo el núcleo (SPE) es de alrededor de 2000 microsegundos. Esta baja sobrecarga se debe a tres factores principales. Primero, los microhilos son muy pequeños. Cada microhilo ejecuta una o dos funciones sencillas pero cruciales. En segundo lugar, el contexto de los microhilos incluye únicamente el archivo de registros del núcleo en el que se están ejecutando. En tercer lugar, los microhilos cambian de contexto a la caché dedicada del núcleo, lo que hace que este proceso sea muy rápido y eficiente.
Fondo
A medida que los microprocesadores se vuelven más rápidos, principalmente debido a la adición de núcleos cada pocos meses, la brecha de latencia de memoria se amplía. La latencia de memoria era de unos pocos ciclos en 1980 y hoy alcanza casi los 1000 ciclos. Si el microprocesador tiene suficientes núcleos y, afortunadamente, no envían solicitudes a la memoria principal al mismo tiempo, habrá una ocultación agregada parcial de la latencia de memoria. Algunos núcleos podrían estar ejecutando mientras otros esperan una respuesta de memoria. Esta no es la mejor situación para los procesadores multinúcleo. Los expertos en computación de alto rendimiento se esfuerzan por mantener todos los núcleos ocupados todo el tiempo. Por lo tanto, si cada núcleo se mantiene ocupado todo el tiempo, es posible una utilización completa de todo el microprocesador. La creación de hilos basados en software no resolverá el problema por una razón obvia. El cambio de contexto de los hilos a la memoria principal es una operación mucho más costosa en comparación con la latencia de memoria. Por ejemplo, en Cell Broadband Engine, el cambio de contexto de cualquier hilo del núcleo tarda 2000 microsegundos en el mejor de los casos. Algunas técnicas de software, como el doble o múltiple búfer, pueden solucionar el problema de la latencia de memoria. Sin embargo, se pueden usar en algoritmos regulares, donde el programa sabe dónde se encuentra el siguiente bloque de datos que debe recuperar de la memoria; en este caso, envía una solicitud a la memoria mientras procesa los datos solicitados previamente. No obstante, esta técnica no funcionará si el programa desconoce el siguiente bloque de datos que debe recuperar de la memoria. En otras palabras, no funcionará en algoritmos combinatorios, como la expansión de árboles o la clasificación aleatoria de listas. Además, el múltiple búfer asume que la latencia de memoria es constante y puede ocultarse estáticamente. Sin embargo, la realidad muestra que la latencia de memoria varía de una aplicación a otra. Depende de la carga general en los recursos compartidos del microprocesador , como la tasa de solicitudes de memoria y las interconexiones de los núcleos compartidos.
Implementación actual
Actualmente, el microhilo se implementa en el Cell Broadband Engine . [ 1 ] Se podría lograr una mejora del rendimiento de tres a cinco veces. Actualmente, se ha demostrado su eficacia para algoritmos regulares y combinatorios. Otros estudios están intentando demostrar su viabilidad para algoritmos científicos.
Actuación
Los microhilos ofrecen una excelente solución para minimizar la latencia de memoria, optimizada según el uso del microprocesador en tiempo de ejecución. Por ejemplo, si la latencia de memoria es muy alta en comparación con el tiempo de procesamiento y cambio de contexto, se pueden añadir más microhilos; esto ocurre cuando se solicitan grandes bloques de datos a la memoria o cuando existen muchos puntos críticos de memoria. Si esta relación es baja, se pueden introducir menos microhilos en tiempo de ejecución. Esto depende de factores relacionados con la aplicación implementada y las características de ejecución del sistema.
Crítica
Si bien los microhilos proporcionan un modelo prometedor para ocultar la latencia de la memoria en procesadores multinúcleo y de muchos núcleos, presenta algunas críticas importantes que deben abordarse:
- Requiere soporte de hardware especial. Cada núcleo debe tener su propio mecanismo de interrupción local para programar eficientemente los microhilos. Sin embargo, si se sigue una política de programación no preferente, no se requiere el mecanismo de interrupción integrado.
- Funciona mejor cuando cada núcleo tiene su propia caché local, gestionada manualmente por el programador.
- Agregar más microhilos por núcleo aumenta drásticamente la carga sobre los recursos compartidos del microprocesador. Un mayor número de solicitudes de memoria y sincronización probablemente genere congestión en dichos recursos. Sin embargo, este problema puede mitigarse mediante la monitorización por parte del sistema de tiempo de ejecución de parámetros críticos del microprocesador, como la latencia de la memoria, lo que permite ralentizar la ejecución general reduciendo los microhilos o modificando la política de planificación.
Referencias
- ↑ Ahmed, M.; R. Ammar; S. Rajasekaran (2008), "SPENK: añadiendo otro nivel de paralelismo al motor de banda ancha celular" (pdf) , 1er foro internacional sobre tecnologías multinúcleo/de muchos núcleos de próxima generación , El Cairo, Egipto: ACM, pp. 1–10 , consultado el 4 de marzo de 2009.
- Computación paralela
- Hilos (informática)