En el anterior artículo os hablamos del audio PCM, mientras que en este lo haremos acerca de los DSP, un tipo de procesador que se hizo indispensable tan pronto como se vio que las CPU no eran lo suficientemente rápidas para el tratamiento de señales digitales a tiempo real, especialmente cuando estas requerían no solo manejar un gran volumen de datos, sino hacerlo a la mayor velocidad posible. Esto hizo que para ciertas aplicaciones se hiciera necesaria la creación de un tipo de microprocesador avanzado que sirviese como apoyo a la CPU del sistema que se bautizo como DSP-
¿Qué es un DSP?
Los microprocesadores están diseñados para leer de una memoria a su ritmo e ir ejecutando un programa. Ahora bien, imaginaos que está recibiendo una señal digital de forma continua, que puede ser una señal de vídeo o de audio, la cual se ha de procesar en un tiempo determinado. Ya de entrada nos encontramos con que la naturaleza de la CPU no le permite seguir el ritmo en lo que a los accesos de memoria se refiere, no solo eso, sino que nos encontramos con que son necesarios realizar una serie de instrucciones aritméticas complejas o más bien no habituales que no se encuentran en una CPU y requieren la concatenación de instrucciones más simples. La señal sigue llegando y la CPU no da abasto, por lo que se requiere un chip especializado.
Dicho chip especializado es lo que llamamos un DSP, el cual tiene la capacidad de manipular señales digitales para extraer información, mejorar sus calidad o llevar a cabo análisis. Dichas señales pueden venir de muchas fuentes, por ejemplo, puede ser enviada por la CPU del sistema u otro DSP, incluso recibirse de forma directa de un conversor analógico a digital (ADC). Al mismo tiempo, la señal modificada generada por un procesador de señal digital puede almacenarse en una memoria para ser enviada luego a un microprocesador, enviarse a otro DSP o convertirla en una señal analógica a través de un DAC.
Sin embargo, una de las características de un DSP es que no suelen operar con valores de 32 o 64 bits, como suele ser normal en las CPU y GPU. Esto se debe a que, a la hora de convertir las señales analógicas a digital, por ejemplo, cuando grabamos nuestra voz a través de un micrófono, los conversores de analógico a digital no suelen convertir la señal a más de 20 bits. Por eso no tiene sentido que un procesador de señal digital opera con una precisión más allá de la de sus propios datos.
Un DSP trabaja con señales digitales
Un sistema analógico trabaja con señales continuas, lo que significa que los valores pueden variar de manera ininterrumpida en un rango, mientras que una señal digital esta compuesta de señales discretas, las cuales se representan en valores binarios. Por ejemplo, los primeros reproductores de música, basados en vinilos, dado que los chips integrados todavía no existían se basaban en el procesamiento analógico de la señal, al igual que los casetes.
El gran problema de las señales analógicas es su sensibilidad al ruido. Entiéndase este como cualquier interferencia o perturbación indeseada que se superpone a una señal principal, afectando su claridad o precisión. En los sistemas electrónicos analógicos, el ruido es una señal no deseada que ocurre durante el funcionamiento de los componentes y que no depende de ningún factor externo. Esto manipula la calidad de la señal de entrada, ya que la modifica involuntariamente. Ahora bien, las señales digitales no son totalmente sensibles al ruido, pero al trabajar solo con dos valores y con una diferencia sustancial entre ambos, son más resistentes al ruido. La ventaja de las señales digitales, las cuales son las que procesa un DSP, es que se pueden utilizar técnicas de codificación de datos, para detectar y corregir errores causados por el ruido. Esto es imposible en sistemas analógicos, donde cualquier interferencia afecta directamente la señal.
La relación entre la instrucción MAC y los DSP
Con MAC no nos referimos a los ordenadores Apple Macintosh, sino a un tipo de instrucción matemática, ya que MAC son las siglas de Multiply-Accumulator y se basa en una suma y una multiplicación, en concreto en la fórmula Y=(A*B)+C. Se trata de una operación simple, pero es común y reiterada en todas los algoritmos que ejecutan los DSP. Es más, lo habitual en un chip de este tipo es que disponga de registros y unidades de ejecución para el resto de instrucciones, aparte de las exclusivas para realizar las instrucciones MAC
En una CPU general, una instrucción MAC normalmente se descompone en varios pasos, cada uno ejecutado en ciclos separados.
- Multiplicación: Se ejecuta la operación de multiplicación entre los dos operandos A y B.
- Carga del acumulador: Se lee el valor actual del acumulador desde el registro o la memoria.
- Suma: Se suma el resultado de la multiplicación al acumulador.
- Escritura: El resultado final se almacena de nuevo en el acumulador.
El problema viene cuando necesitamos más de un operando. Muchas CPU de 8 bits solo tenían un acumulador, por lo que esto significaba ir continuamente a memoria con la latencia que esto supone, otras como 8086/8088 pese a tener más registros, los usan para instrucciones específicas, por lo que solo pueden trabajar con dos operandos, por lo que para almacenar el valor C necesitamos un valor más o sacarlo de memoria. El 68000 es el que aparentemente era el más indicado, sin embargo, no dispone de una ALU del tipo MAC como los DSP, la cual le permite realizar dicha instrucción en un solo ciclo de reloj.
Arquitectura Harvard
Sin embargo, lo que diferencia a los DSP del resto de microprocesadores tanto especializados como de propósito general es el hecho de que no se basan en una arquitectura Von Neumann, sino en una Harvard. ¿Qué significa esto? En la arquitectura tradicional o Von Neumann, tanto las instrucciones como los datos se encuentran en la misma memoria, de tal manera que cada palabra en memoria es su dato + instrucción. En la arquitectura Harvard, en cambio, datos e instrucciones provienen de dos flujos diferentes de memoria.
El problema de las arquitecturas Harvard es que necesitan pines de direccionamiento y datos por separado. Esto se traduce en sistemas de acceso a memoria más caros y complejos, por eso la arquitectura Von Neumann se estandarizó. No obstante, como ya hemos dicho antes, un DSP recibe una señal digital continua, la cual son puramente datos para procesar; en dicho caso, una arquitectura Harvard tiene sentido, ya que la señal digital solo incluye los datos que se van a procesar. Sin embargo, aquí es donde entra una trampa que se realiza en muchos DSP y no es otra que incluir una pequeña RAM, de muy pequeño tamaño, donde se encuentran las instrucciones del programa que va a ejecutar.
Los primeros chips 3D para consola eran DSP
Si sois perspicaces, os habréis dado cuenta de que solo es necesario que dicho conjunto de instrucciones sean un loop continuo y cerrado para darnos cuenta de que un DSP puede aplicar de forma continuada y reiterativa el mismo algoritmo una y otra vez en la señal digital. Esto permite cosas como descomprimir audio a tiempo real, por ejemplo de MP3 a audio PCM, o cosas aún más complejas, como reproducir vídeo a tiempo real o incluso generar gráficos poligonales en 3D. Y sí, tanto el chip SuperFX de la SNES como el SVP de Mega Drive/Genesis, eran DSP.
Sin embargo, estos no proliferaron mucho en sistemas domésticos, el motivo de ello es que pese a la potencia que otorgaban respecto a las CPU de la época y, en especial, en ciertas aplicaciones. La realidad es que eran chips caros, por ejemplo, uno de los DSP más famosos de la historia, el Motorola 56001, solo se vio en el Atari Falcón y las estaciones de trabajo NeXTStation y NeXTCube, las cuales no bajaban de 3000 dólares estadounidenses de la época. Sin embargo, para comprobar la potencia de dicho DSP, solo es necesario mirar este vídeo:
Sí, es el primer Half-Life a menos de 7 FPS y una resolución pésima, pero se trata de una demo que no funciona en un PC convencional, sino que ejecuta todo su motor 3D en un DSP Motorola 56000 de un Atari Falcon, un ordenador de 1992 con un 68030 a 25 MHz. Y eso que dicho procesador de señal digital se diseñó de cara al mundo del audio a mediados de los 80, pero es una de las pruebas de la capacidad de cálculo que tenían estos chips y el motivo por el cual eran tan caros.
Trabajo en paralelo y por etapas
Dado que un procesador de señal digital lo que hace es manipular una señal digital continua, es obvio que generará una versión modificada de dicha señal digital. Pues bien, una de las posibilidades de los procesadores es usar varios en cadena para que cada uno de ellos se encargue de la etapa de un proceso o, en su defecto, usar varios en paralelo. Esto fue muy típico en las primeras máquinas recreativas que mostraban gráficos en 3D a tiempo real.
Un ejemplo de ello fue uno de los primeros juegos en 3D que se vio en salones recreativos, Winning Run. El cual se ejecutaba en la placa arcade de Namco System 21, también conocida como Polygonizer, la cual utilizaba 4 DSP Texas Instruments TMS320 a 25 MHz en paralelo para generar sus gráficos en una época donde las primeras consolas 3D todavía estaban a años vista de salir y la norma eran los gráficos en 3D formados por sprites.
¿Qué ha sido de ellos?
En la actualidad, los DSP se han integrado en los PC y consolas como una unidad más, por ejemplo, las radios WiFi y Bluetooth que nos permiten conectarnos a internet sin cables y usar periféricos de forma inalámbrica usan DSP. Otro ejemplo es el chip de sonido que se incluye en muchas placas base, el cual se encarga de gestionar las señales de audio, entrada y salida y de procesarlas. Por lo que, pese a que ya no se encarguen de tareas relacionadas con los gráficos, su presencia sigue siendo muy importante y esencial en el uso diario. Es más, los famosos decodificadores de datos entre el SSD y la RAM en consolas de la actual generación como PS5 y Xbox Series no dejan de ser DSP.
Por lo que no, en realidad no desaparecieron, pese a que no se encuentren en el marketing de los sistemas actuales, pero no se puede negar que han sido relegados de las tareas más pesadas en lo que a computación se refiere. El primero de los fenómenos que hizo que los DSP empezaran a perder importancia fue la aparición de las CPU domésticas con unidades SIMD y con la capacidad de ejecutar instrucciones MAC, tanto en enteros como en coma flotante. Si bien las CPU no eran tan eficientes por ciclo de reloj, el hecho de alcanzar velocidades mucho más altas hizo que se empezará a prescindir de los DSP para ciertas tareas.
No obstante, fue en la década de los 2000 donde los DSP recibieron el golpe más fuerte en áreas más profesionales, especialmente en la computación de alto rendimiento, donde su uso empezó a bajar poco a poco. ¿A favor de las GPU? Pues no, ya que estas tardaron tiempo en ganar el nivel de programabilidad del que hacen gala a día de hoy. Más bien fueron los FPGA, si lo habéis leído bien, los que terminaron por echar fuera a los procesadores de señal digital a ciertas tareas menores.
Los FPGA y el «fin» de los DSP
En julio de 2001, Xilinx, en la actualidad propiedad de AMD, lanzaba su FPGA Virtex-II, el cual además de disponer los bloques de lógica programable de siempre y la memoria interna, incluyó bloques MAC en el hardware y no pocos precisamente. Este cambio fue adoptado por el resto de fabricantes de FPGA y se convirtió en una tendencia generalizada. El mayor cuello de botella de los DSP es que estos solo pueden procesar una sola señal al mismo tiempo, por lo que escalar a múltiples señales simultáneas se hace complicado y requiere de varios DSP funcionando en paralelo o de forma secuencial
Si se trata de trabajar con una sola señal, un DSP es recomendable por encima de un FPGA, pero si hablamos de hacerlo con varias señales, entonces la cosa cambia, ya que un Field Programmable Gate Array dispone de las siguientes ventajas respecto a un procesador de señal digital:
- Cada bloque lógico o MAC puede configurarse para operar de forma independiente, permitiendo el procesamiento de múltiples señales de manera simultánea.
- Se pueden diseñar pipelines específicos para cada señal o incluso procesar múltiples etapas de varias señales en paralelo.
- Los recursos de hardware pueden dividirse o duplicarse según las necesidades de las señales que deseas procesar.
Todo ello ha provocado que los DSP hayan sido relegados como la solución principal a muchos problemas, lo que no quita que en su día tuviesen importancia y tampoco que ya no la tengan, pero está claro que sus días de gloria pasaron hace mucho tiempo.