Acelerador y coprocesador en un SoC, ¿por qué no son lo mismo?

A día de hoy cualquier procesador es una amalgama compleja de diferentes tipos de núcleos que o bien se encargan del grueso del trabajo, hacen tareas especializadas o colaboran entre sí para conseguir el mejor resultado posible a la hora de ejecutar los diferentes procesos. En todo caso existen diferencias entre lo que es un acelerador y un coprocesador como núcleos de apoyo. Sigue leyendo para entender cuáles son.

Está muy claro que una CPU no puede hacer el trabajo ella sola, hay operaciones comunes que lleva un ordenador de manera continua en el que un procesador de propósito general no es eficiente, pero antes de nada deberíamos entender lo que significa esto y porque son necesarios los chips de apoyo.

A la hora de diseñar una nueva arquitectura hay una serie de parámetros que marcan los límites a los que los ingenieros no deben sobrepasar, entre los que se incluyen cosas como el tipo de librerías utilizadas de cara al diseño, cuanto consumirá el chip, cuál será su tamaño, pero en especial que problemas comunes se busca solucionar con el nuevo procesador. Es en ese punto donde se definen no solo las unidades principales, sino también los coprocesadores y aceleradores que formaran parte del mismo.

Los primeros procesadores de apoyo que se colocan en una arquitectura son fáciles de dilucidar, normalmente aquellos que han sido diseñados para arquitecturas anteriores de la misma marca o en su defecto los que se han licenciado a terceros. Los segundos en cambio nacen durante el desarrollo, producto de las peticiones de los clientes o por el tipo de problema que se quiere resolver y que requiere un nuevo tipo de unidad de hardware.

¿Qué es un coprocesador?

Coprocesador x87

Pese a que el significante es explicativo en sí mismo es importante tener en cuenta que si tenemos varios núcleos trabajando en conjunto para solventar un mismo problema común a partes repartidas entonces estamos hablando de que cada una de las unidades de proceso están actuando en coprocesamiento con otras. Y sí, sabemos que os ha pasado por la cabeza, pero cuando tenemos varios núcleos de una CPU atajando un problema en concreto estamos hablando que aquellas que no ejecutan el proceso principal están actuando como coprocesadores de otras.

Tradicionalmente se ha llamado como coprocesadores a los chips de apoyo, aunque el coprocesador más famoso de la historia del PC es el coprocesador matemático, el cual no era más que lo que después sería la unidad de coma flotante o FPU que se encontraba totalmente desacoplada de la CPU principal. Así pues el coprocesador por lo general carece de un proceso de captación de instrucciones desde la memoria, si no que necesita que otro procesador le envía las instrucciones y los datos a procesar. ¿El trabajo del coprocesador? Resolver esa parte del programa y devolver el resultado lo más rápido posible al procesador huésped.

Durante el tiempo en que el coprocesador se encarga de hacer su trabajo el núcleo principal puede usar la potencia que ha ganado en adelantar otras tareas, pero dado que se está ejecutando un proceso en conjunto se llegará el punto en que este no podrá continuar hasta que el coprocesador o coprocesadores hayan terminado la tarea que se les ha asignado.

¿Qué es un acelerador?

Acelerador Hardware

Técnicamente un acelerador es un coprocesador, pero con una mayor independencia que estos dado que no se encargan de ejecutar un proceso en conjunto, sino que se les asigna un proceso entero del que la CPU se desentiende completamente excepto para obtener el resultado final o para conocer que la tarea se ha realizado.

Debido a que un acelerador se encuentra completamente desacoplado del procesador este es totalmente asíncrono a este. ¿A qué nos referimos? Al hecho que un acelerador al contrario de un coprocesador no funciona de manera combinada con la CPU principal del sistema. Esto le permite acelerar su parte del código, que significa completarla a una velocidad mucho más alta y por tanto en menos tiempo. Claro esta que esto requiere cambios importantes en la arquitectura.

En primer lugar un coprocesador puede llegar a compartir partes de la unidad de control e incluso registros o acceso a una memoria común con la CPU. Todos esos elementos al ser compartidos pueden llegar a crear congestiones en el acceso a los mismos, provocando que una unidad u otra quede parada a la espera para utilizar dichos recursos. Como entenderéis esto en un acelerador no puede ocurrir, por lo que sus datos e instrucciones pese a que son proveídos por el procesador están pensados para se encuentren a su disposición el 100% del tiempo, por eso muchos aceleradores son procesadores completos que tienen su propia RAM local en su interior.

¿Si un acelerador es mejor por qué se utiliza un coprocesador?

Portada Alternativa Procesador

Lo hemos dicho durante la introducción de este artículo, todo tiene que ver con el presupuesto que tengan los arquitectos a la hora de implementar la solución a un problema y una cosa que se suele no tener en cuenta son las infraestructuras de comunicación entre los diferentes elementos, así como las unidades que forman parte del ciclo de instrucción de cada procesador, pero que no se encargan de crujir números a gran velocidad.

A nivel de marketing es muy fácil vender la potencia de un procesador en números, estos se entienden fácilmente por la gente que puede hacer una comparativa ordinal o cardinal a partir de dichos datos. La realidad es que a día de hoy de las infraestructuras en cualquier procesador es lo que más espacio ocupan y es por ello que la decisión de implementar algo en forma de coprocesador o acelerador se acaba tomando por dichas limitaciones.

Un ejemplo son los Tensor Cores y la unidad NVDLA de NVIDIA, ambos sirven para lo mismo, pero mientras los primeros son un coprocesador dentro de la unidad shader que comparte registros y unidad de control con el resto de la unidad shader de la GPU, en el caso del segundo se trata de un procesador en sí mismo. No en vano, las siglas DLA significan acelerador de aprendizaje profundo.

1 Comentario