Guía Hardware

Computación heterogénea: qué es y qué puede mejorar

Actualizado a: 19 de enero de 2024

Las nuevas aplicaciones móviles, IoT, IA o HPC, cada vez demandan un rendimiento mayor y un consumo inferior de energía. El avance en la tecnología de los semiconductores y las nuevas microarquitecturas no parecen satisfacer esta demanda como es debido, y por eso hay que buscar alternativas que aceleren estos casos, como lo hace la computación heterogénea.

La computación heterogénea se refiere a sistemas que usan más de un tipo de unidad de procesamiento, con capacidades para manejar una tarea especializada. Es decir, se combina la computación de propósito general con la computación especializada (aceleradores específicos o dedicados) para lograr un alto rendimiento y un consumo de energía reducido, especialmente en la transferencia de datos y durante el procesamiento.

Este tipo de computación heterogénea, aunque parece algo bastante nuevo, lo cierto es que lleva tiempo entre nosotros, aunque aún hay grandes desafíos de software y hardware que solventar. Pero la hemos tenido desde el lanzamiento de los primeros sistemas STI (Sony-Toshiba-IBM) Cell, hasta los últimos multinúcleo heterogéneo que están apareciendo en la actualidad, pasando por las GPGPUs y otros SoCs para móviles…

¿Qué es computación heterogénea?

Tradicionalmente, en la informática homogénea, se ha venido usando una CPU para propósito general. Sin embargo, en la computación heterogénea se les ha dado un lugar protagonista a otras unidades, como la GPU, DSP, DPU, NPU, VPU, FPGA, e incluso algunos ASICs. Y es que estas otras unidades pueden realizar ciertas tareas de una forma más eficiente energéticamente y con mejor rendimiento.

Por ejemplo, mientras una CPU está hecha para procesar unas pocas tareas complejas a la vez, la GPU está hecha para procesar multitud de tareas simples a la vez. Por tanto, aplicaciones como las científicas donde se necesitan gran cantidad de operaciones matemáticas o FLOPS, la GPU será superior a la CPU. Así que ¿por qué no usarla para este fin?

En los últimos años, la definición de computación heterogénea se ha actualizado para abarcar también a otras unidades de procesamiento basadas en otras arquitecturas. Por ejemplo, los procesadores basados en la arquitectura Arm pueden usar lo que conocemos como big.LITTLE, es decir, dos tipos de núcleos de CPU, unos de alto rendimiento y otros eficientes para adecuarse mejor a las cargas de trabajo de cada momento. La adopción de una arquitectura alternativa puede revelar formas más inteligentes de manejar las cargas de trabajo y las tareas informáticas existentes.

¿Por qué es importante la computación heterogénea?

La famosa Ley de Moore establece que la cantidad de transistores se duplicará cada 18 meses. Por otro lado está la escala de Dennard, que dice que a medida que los transistores se hacen más pequeños, su densidad de potencia se mantiene constante.

Si combinamos estas dos reglas, vemos que esto se ha venido manteniendo durante los últimos años en la industria de los microprocesadores. Sin embargo, en los últimos años algo se ha «roto», la Ley de Moore se ha mantenido durante más de 50 años vigente, pero últimamente se ha vuelto un desafío seguir manteniéndola.

Al mismo tiempo, la escala de Dennard colapsó durante 2005-2006, con la llegada de los procesadores multinúcleo como alternativa de mejorar el rendimiento. A medida que aumenta la cantidad de núcleos, las restricciones de energía impiden que todos los núcleos funcionen a su máximo rendimiento, lo que provoca que algunos se tengan que desconectar o mermar su rendimiento para seguir manteniendo unos márgenes de consumo y disipación de calor controlado. Aunque no vamos a entrar en lo que es el dark silicon…

Sin embargo, con la llegada de los primeros dispositivos móviles, la demanda de chips más eficientes aumentó de forma exponencial, y también la necesidad de nuevos requerimientos. Todo un desafío conseguir el rendimiento necesario sin disparar el calor generado por estos dispositivos o sin que la batería se consuma en muy poco tiempo.

Desafortunadamente, los progresos que se han hecho en la tecnología de las baterías y los avances de los semiconductores no han sido suficientes de por sí solos para satisfacer estas demandas. Para ayudar, la computación heterogénea ha llegado para aumentar el rendimiento de las aplicaciones y aportar una eficiencia energética sin precedentes.

Evolución de los sistemas heterogéneos: un poco de historia

Twitter: Ken Shirriff

Intel lanzó el primer microprocesador comercial en 1971. Era el 4004, un chip de 2300 transistores. A partir de él, la Ley de Moore y el escalado de Dennard fueron los métodos a seguir para mejorar el rendimiento con un solo núcleo. La industria de los semiconductores reducían los transistores, aumentando su rapidez de conmutación y el consumo para poder seguir integrando más y más de ellos, consiguiendo mayor rendimiento sin disparar el consumo y la temperatura.

Sin embargo, las ganancias de rendimiento fueron significativamente menores según lo predicho por la ley de Moore. Esto se debió al hecho de que el rendimiento de algunos de los componentes, como las memorias caché, no escalaba igual que con la lógica. Incluso si los transistores se hacían cada vez más pequeños, esto no resultó en la duplicación de los transistores como se predijo. En parte, por el aumento de las interconexiones necesarias para enlazar todos los transistores.

En definitiva, se realizaron mejoras de rendimiento al aumentar la frecuencia de la CPU y las instrucciones por ciclo de reloj (IPC). Sin embargo, esto presentó más desafíos, a medida que aumentaba la complejidad de la microarquitectura. Los procesadores de un solo núcleo se vieron limitados a medida que aumentaba el consumo de energía y los costes operativos.

Desde 2004, ha habido un cambio hacia el multinúcleo. La CPU multinúcleo combina varios núcleos en un solo chip de procesador. Este cambio a diseños multinúcleo fue para compensar el final de la escala de Dennard. Un procesador multinúcleo puede ejecutar varios subprocesos en paralelo en diferentes núcleos con contención de recursos.

Por otro lado, la red de interconexión y la jerarquía de memoria son dos componentes clave que impulsan el rendimiento de los sistemas multinúcleo. Sin embargo, las limitaciones de energía actuaron como una barrera para alimentar todos los núcleos a su máxima velocidad. Si continuamos escalando (agregando más y más núcleos), solo una fracción de los núcleos estará encendida en todo momento dentro de las limitaciones térmicas. Además de esto, el núcleo podría no ser el procesador más eficiente.

Se necesitaba un cambio de paradigma, algo que pudiera eliminar esta barrera. Para continuar escalando la capacidad de procesamiento y, al mismo tiempo, adherirse a las restricciones térmicas y de consumo, se requiere un enfoque diferente: la computación heterogénea.

El desafío para los futuros sistemas informáticos no es solo cómo hacer que funcionen más rápido, sino también cómo lograr una reducción similar en el consumo de energía. La computación heterogénea integra varios elementos de procesamiento en un entorno coherente para la eficiencia energética.

STI (Sony, Toshiba e IBM) crearon una CPU heterogénea, el Cell, integrando un núcleo PowerPC central con varios coprocesadores de coma flotante. El Cell se usó en la consola de juegos PlayStation 3 de Sony, y era el futuro de procesador multinúcleo para los Mac de Apple, aunque esto no convenció a Apple y por eso se pasó a los procesadores Intel, aunque esto es otra historia…

Por otro lado, también aparecieron otros proyectos de computación heterogénea interesantes, como las APU de AMD que salieron del proyecto Fusion, y la creación de la fundación HSA (Heterogeneous System Architecture). Y a estos le siguieron SoCs como los de Qualcomm Snapdragon, Mediatek Helio, Samsung Exynos, Apple Silicon, etc., que se han unido al carro de la heterogeneidad.

Desafíos de los sistemas heterogéneos

No todo son ventajas en los sistemas de computación heterogénea, también hay algunos desafíos y barreras que salvar:

Desde la perspectiva del hardware

Como bien sabes, la tasa de mejora de la CPU supera con creces la tasa de mejora que se ha visto en la memoria RAM en los últimos años. Por eso, esto puede suponer un gran cuello de botella que hay que salvar, una brecha que no está siendo nada fácil de solucionar.

Este problema ha existido desde la era de un solo núcleo. Por eso se ha evolucionado la jerarquía de memoria con nuevos elementos, como la inclusión de memorias intermedias como los buffers o la caché.

A todo eso hay que agregar que con la computación heterogénea han llegado nuevos problemas o desafíos. Por ejemplo, qué unidades comparten qué memoria para mantener la coherencia de caché. Coherencia significa garantizar que todos los procesadores o maestros de bus de la red interpreten la misma información. Por ejemplo, si tengo un procesador que genera una estructura de datos en su caché local y luego la transfiere a una GPU, tanto el procesador como la GPU deben ver los mismos datos. Sin coherencia, podría ocurrir que la GPU esté leyendo datos desactualizados o antiguos, e incluso que hayan sido sobreescritos por otros nuevos, lo cual daría un resultado erróneo.

Otra tarea del desarrollador de hardware es elegir la red de interconexión correcta que debe cumplir con las diversas especificaciones de tráfico de las diferentes unidades de procesamiento. Se deben considerar varios factores, como la disipación de energía, el material y la topología, para crear una red de alto rendimiento y eficiencia energética en sistemas heterogéneos.

Otra dificultad es distribuir la carga de trabajo entre los diferentes núcleos para lograr el mejor rendimiento con el menor consumo de energía. Y es que, cada unidad, como he dicho anteriormente, puede destacar para ciertas cargas de trabajo. Por ejemplo, dejar tareas cotidianas a la CPU, las cargas de coma flotante vectoriales a la GPU, o las aplicaciones de IA a las unidades neuronales. Y esto no es fácil de hacer, y mucho menos cuando se están usando diferentes ISAs.

Desde la perspectiva del software

Y no todos los problemas sobrecaen sobre el hardware, también desde el lado del software hay mucho que hacer. Desde los compiladores, APIs, pasando por los sistemas operativos, etc. Es difícil diseñar algoritmos que funcionen en varias plataformas heterogéneas y se adapten a diferentes modelos de paralelismo. Se diseña una serie de algoritmos para el entorno de destino y se selecciona el adecuado cuando se conoce el hardware subyacente real. Es difícil proporcionar un lenguaje de programación a nivel de fuente para un sistema heterogéneo que admita varios modos de paralelismo.

La portabilidad del software es difícil de lograr si nos dirigimos a una amplia variedad de plataformas que tienen diferentes combinaciones de hardware. Es difícil diseñar un compilador que mapee los diversos módulos del código fuente a los respectivos componentes de hardware. Dado que estamos abordando hardware diverso, la optimización del rendimiento también se volverá complicado.

La fiabilidad del software también es esencial. Dado que estamos desarrollando software para ejecutarse en varios entornos distribuidos, existe una mayor probabilidad de falla. Se vuelve imperativo que el programador maneje estos escenarios de falla de forma diferente a la computación homogénea. La estrategia para hacer frente a las fallas puede basarse en el hardware o en el software del sistema. El programador también puede diseñar sus rutinas para manejar fallas.

Por último, la escalabilidad del software es mucho más complicada en un sistema heterogéneo. En el caso de programas dirigidos a sistemas homogéneos, solo hay que considerar el escalado en base a las unidades de cómputo del mismo tipo. Sin embargo, en el caso de sistemas heterogéneos, se debe tener en cuenta el tipo de unidades de cómputo disponibles y su número.

Afortunadamente, ya se han conseguido grandes avances y APIs que facilitan mucho el trabajo a los desarrolladores.

Jaime Herrera

Jaime Herrera

Ingeniero Informático apasionado por el hardware y la tecnología. Llevo más de diez años dedicándome al análisis de componentes como procesadores, tarjetas gráficas y sistemas de almacenamiento. Mi objetivo es ofrecer información clara y precisa, combinando mi experiencia técnica con un enfoque práctico para ayudar a los lectores a entender mejor el mundo del hardware.

>
Guía Hardware
Logo