M1 presagia el ascenso de RISC-V
(medium.com/@erik-engheim)"M1 ayudará a RISC-V por ser el inicio de un cambio de paradigma, pero no de la forma que piensas"
Un artículo de seguimiento del ingeniero que escribió "¿Por qué el chip M1 es tan rápido?". Anticipa el futuro de RISC-V desde una perspectiva interesante.
Los factores del rendimiento del M1 son:
-
una gran cantidad de decodificadores y ejecución fuera de orden (OoO)
-
varios chips dedicados como GPU, NPU y DSP
Este artículo entra más en detalle sobre el punto 2, la computación heterogénea.
A los chips dedicados se les puede llamar de varias formas, pero aquí se agrupan todos bajo el término coprocessor (o también accelerator).
-
Los coprocesadores no son una tendencia completamente nueva.
-
La Amiga 1000 de 1985 también tenía coprocesadores para audio y gráficos, y la GPU también es un coprocesador.
La TPU (Tensor Processing Unit) de Google también es un coprocesador optimizado para aprendizaje automático.
[ Qué es un coprocessor ]
-
A diferencia de la CPU, no puede funcionar por sí solo. Un computador no se vuelve tal solo por agregar un coprocesador; simplemente es un procesador de propósito especial que hace muy bien una tarea específica.
-
Un ejemplo temprano es la 8087 Floating Point Unit (FPU) de Intel. La 8086 de Intel era buena para cálculos enteros, pero no para operaciones de punto flotante.
-
Las operaciones de punto flotante podían emularse con cálculos enteros, pero era lento. Es parecido a como los primeros microprocesadores solo podían hacer sumas y restas, pero no multiplicaciones, así que resolvían la multiplicación repitiendo muchas sumas.
-
Es decir, "los cálculos matemáticos complejos pueden procesarse repitiendo operaciones simples".
-
Eso mismo hacen todos los coprocesadores. La CPU puede hacer lo que hace un coprocesador; solo tiene que repetir operaciones simples.
-
La razón por la que al principio se necesitaban GPU era que repetir el mismo cálculo sobre millones de polígonos o píxeles requería demasiado tiempo en una CPU.
[ Cómo entran y salen los datos de un coprocesador ]
-
Al igual que el mouse, el teclado y la pantalla, todos los coprocesadores, incluidos GPU, FPU y Neural Engine, leen y escriben datos accediendo a cierta memoria.
-
Estas tareas las manejan los device drivers, así que los desarrolladores de software generales no suelen verlas.
→ Es lo que hacen, por ejemplo, controladores DMA (Direct Memory Access).
-
En la era de DOS, con C/C++ era posible acceder directamente por puntero a una dirección de memoria de video para cambiar píxeles.
-
Los coprocesadores funcionan de forma similar: NPU, GPU, T1 y otros tienen direcciones para comunicarse y pueden hacerlo de manera asíncrona.
-
La CPU enumera en memoria el conjunto completo de instrucciones que enviará al Neural Engine o a la GPU, y luego les indica esa dirección.
-
Como la CPU no necesita esperar a que el coprocesador procese esas instrucciones y datos, aquí se vuelve necesaria una interrupción.
[ Cómo funcionan las interrupciones ]
-
Las tarjetas gráficas o de red se conectan a la PC y tienen una línea de interrupción asignada.
-
Esta funciona como una línea conectada directamente a la CPU; cuando se activa, la CPU deja lo que estaba haciendo y atiende la interrupción.
-
En la práctica, guarda en memoria la posición actual y los registros para poder volver después.
-
Luego busca en la tabla de interrupciones qué tarea debe ejecutar. Esa tabla contiene la dirección del programa que se ejecuta cuando se dispara la interrupción.
-
Para el programador esto no se ve así, sino más bien como una función callback registrada para un evento específico. El device driver se encarga de esto a bajo nivel.
-
La razón de explicar esto es que, al usar un coprocesador, hay que entender qué ocurre internamente para saber qué implica realmente comunicarse con él.
-
Al usar interrupciones, muchas cosas suceden en paralelo.
→ Mientras la CPU es interrumpida por el mouse, una aplicación puede traer una imagen desde la tarjeta de red; cuando el mouse se mueve, la CPU obtiene las nuevas coordenadas y se las envía a la GPU para dibujar el cursor en la nueva posición. Mientras la GPU dibuja el cursor, la CPU comienza a procesar la imagen recibida por la red.
- Usando estas interrupciones, se puede enviar al Neural Engine del M1 una tarea compleja de aprendizaje automático para identificar rostros desde una webcam. Como el Neural Engine procesa los datos de imagen, la computadora y la CPU pueden seguir respondiendo al usuario mientras hacen otras tareas.
[ The Rise of RISC-V ]
-
En 2010, el laboratorio de computación paralela de UC Berkeley evolucionó en la dirección de usar más coprocesadores.
-
Vieron el fin de la ley de Moore en el hecho de que ya no era fácil aumentar el rendimiento exprimiendo más a los núcleos de CPU de propósito general.
→ Se volvieron necesarios coprocesadores, es decir, hardware especializado.
- La frecuencia de reloj no puede aumentarse fácilmente por razones como calor y consumo energético.
→ Una forma de avanzar es usar muchos decodificadores y ejecución fuera de orden (OoO).
→ Consulta el artículo "¿Por qué el chip M1 es tan rápido?" https://es.news.hada.io/topic?id=3315
[ ¿Usar el presupuesto de transistores en núcleos de CPU o en coprocessors? ]
-
Aumentar a 128 núcleos no hace que un sistema de escritorio sea más eficiente.
-
A comienzos de los 80, si había un presupuesto de 20 mil transistores, bastaba con usar 15 mil para hacer una CPU.
-
Si una CPU realiza 100 tareas distintas, y hacer un coprocesador para una sola de esas tareas requiere 1000 transistores, entonces construir coprocesadores para todas las tareas requeriría 100 mil transistores, superando el presupuesto.
[ La estrategia cambia cuando aumentan los transistores ]
-
En los diseños iniciales había que concentrarse en la computación de propósito general, pero hoy se pueden incluir tantísimos transistores que ya no está claro qué hacer con todos ellos.
-
Por eso, diseñar coprocesadores se vuelve una gran tarea. Hay mucha investigación para crear nuevos y diversos coprocesadores.
-
En muchos casos, esta investigación tiene que partir desde la base, con aceleradores todavía muy rudimentarios.
-
A diferencia de la CPU, no leen ni procesan todas las etapas de instrucciones, así que no saben cómo acceder a memoria ni cómo organizarla.
-
La solución a esto es usar una CPU simple como controlador.
-
Es decir, los coprocesadores se componen de circuitos aceleradores especializados controlados por una CPU simple para acelerar tareas concretas.
→ Por ejemplo, chips como Neural Engine o Tensor Processing Unit pueden manipular grandes registros capaces de almacenar matrices.
[ RISC-V fue hecho a medida para controlar accelerators ]
-
Ese es el propósito con el que se diseñó RISC-V.
-
Tiene un conjunto mínimo de 40 a 50 instrucciones para tareas generales de CPU.
→ Una CPU x86 tiene un conjunto de 1500 instrucciones.
-
En lugar de un gran conjunto fijo de instrucciones, RISC-V fue diseñado alrededor del concepto de extensiones.
-
Como todos los coprocesadores son diferentes, RISC-V puede configurarse con un conjunto central de instrucciones y conjuntos de instrucciones de extensión según lo que necesite cada coprocesador.
Eso es lo que este artículo quiere explicar.
-
El M1 de Apple llevará a toda la industria hacia un futuro dominado por los coprocesadores.
-
Y para construir esos coprocesadores, "RISC-V será una pieza importante del rompecabezas".
[ Ventajas de hacer un coprocessor con RISC-V ]
-
Crear un chip es algo complejo y costoso.
-
Hace falta mucho esfuerzo desde construir herramientas para validar el chip hasta ejecutar programas de prueba, diagnósticos y muchas otras cosas.
-
Esa es parte del valor de usar ARM hoy: existe un gran ecosistema para validar y probar diseños.
-
Por eso, no es buena idea tener tu propio conjunto de instrucciones.
-
En RISC-V hay un estándar sobre el cual múltiples empresas pueden crear herramientas, y al formarse un ecosistema, varias compañías pueden compartir esa carga.
-
¿Y por qué no usar ARM, que ya existe? Porque ARM fue hecho como CPU de propósito general, con un gran conjunto fijo de instrucciones.
-
Debido a las solicitudes de clientes y a la competencia con RISC-V, ARM también presentó en 2019 un conjunto de instrucciones extensible.
-
Pero el problema de fondo sigue siendo que no fue diseñado para esto desde el inicio.
→ Todo el toolchain de ARM asume la implementación del gran conjunto de instrucciones de ARM.
→ Pero los coprocesadores no quieren ni necesitan un gran conjunto de instrucciones.
→ Los coprocesadores quieren un ecosistema de herramientas construido sobre la idea de un conjunto base mínimo y fijo de instrucciones con capacidades de extensión.
- Para entender por qué esto es útil, se puede obtener una pista a partir del uso de RISC-V por parte de Nvidia.
→ Las GPU grandes necesitan algún tipo de CPU de propósito general para usarse como controlador.
→ Utilizan un chip llamado FALCON: FAst Logic CONtroller.
→ De bajo costo y alta eficiencia.
-
Como RISC-V tiene un conjunto de instrucciones pequeño y simple, supera a ARM y a todos sus competidores.
-
Al elegir RISC-V, Nvidia hace posible chips más pequeños con un consumo mínimo de energía.
-
Mediante el mecanismo de extensiones, solo es necesario agregar las instrucciones que se ajustan al trabajo requerido.
[ ARM se convertirá en el nuevo x86 ]
-
Irónicamente, veremos un futuro donde Mac y PC funcionen con ARM.
-
Pero a su alrededor, el hardware personalizado estará ocupado por coprocesadores dominados por RISC-V.
-
A medida que los coprocesadores se popularicen, habrá más chips RISC-V que ARM sobre un SoC.
-
El futuro no será ARM or RISC-V, sino ARM and RISC-V.
[ ARM comandará un ejército de coprocesadores RISC-V ]
-
Los procesadores ARM de propósito general seguirán en el centro, junto con un ejército de coprocesadores RISC-V encargados de gráficos, cifrado, compresión de video, aprendizaje automático y procesamiento de señales.
-
El profesor David Patterson de UC Berkeley y su equipo vieron venir ese futuro y ajustaron RISC-V para encajar bien en él.
-
Todo tipo de hardware especializado y microcontroladores están mostrando gran interés en RISC-V, y muchas áreas hoy dominadas por ARM pasarán a ser de RISC-V.
[ ¿No se podría usar RISC-V como CPU principal? ]
-
Mucha gente se pregunta si no convendría reemplazar ARM por completo con RISC-V.
-
Algunos dicen que el conjunto de instrucciones extremadamente simple de RISC-V no podría ofrecer el alto rendimiento que dan ARM y x86.
-
Pero RISC-V sí puede usarse perfectamente como procesador principal, y el rendimiento no es el problema.
→ Lo que hace falta es alguien que construya un RISC-V de alto rendimiento, como se hizo con ARM.
→ Es decir, se puede, pero el problema es de momentum. macOS y Windows ya están corriendo sobre ARM.
→ En el corto plazo, ni Microsoft ni Apple harán el esfuerzo de otra transición de hardware
8 comentarios
Interesante. Gracias por el buen resumen.
Ahora llegará el día en que incluso en las escuelas las clases de arquitectura se impartan con base en ARM o RISC-V, en lugar de x86 o amd64..
Antes se publicó aquí un contenido en el que un ingeniero que venía de ARM criticaba a RISC-V.
https://es.news.hada.io/topic?id=3137
Si es como dice el contenido de arriba, entonces el aumento en la diversidad de chips que adoptan RISC-V sería algo intencional.
Cada vez se pone más interesante.
Me da curiosidad ver cómo responderán Intel y AMD.
Tengo entendido que China está prácticamente apostando todo a RISC-V... de verdad no puedo ni imaginar cómo será el futuro.
A mí también se me vino China a la mente. ¿Qué pasaría si Huawei, que sigue recibiendo la contención de Estados Unidos, diera un paso al frente e intentara hacerlo como CPU principal? jaja
Como Huawei no puede usar ni ARM ni TSMC, parece que de todos modos ya fracasó el desarrollo mismo de CPUs de alto rendimiento. Tal vez sería distinto si se tratara de sus propios equipos de red, que exigen menos rendimiento.
Pero como muchas otras empresas están usando RISC-V, parece que los resultados van a salir de esas compañías.
Ah, no había pensado que el propio TSMC estaba bloqueado. Parece que sería difícil, a menos que SMIC logre desarrollar un proceso más allá de 7 nm y hasta 5 nm.
Esta persona realmente escribe muy bien. También leí esto con mucho interés.
Había muchas predicciones de que RISC-V se convertiría en otra alternativa,
pero no había pensado en la perspectiva de que, de esta manera, podría llegar a ser el mejor chip para coprocesadores.