miércoles, 4 de marzo de 2009

Procesadores Digitales de Señal: Arquitecturas y criterios de selección

1. Justifica la necesidad de un DSP en una aplicación real de electrónica de consumo. ¿En qué casos usarías un microprocesador convencional?
Un DSP, hoy en día, lo podemos encontrar en cualquier reproductor de mp3 (descompresión de la señal, aplicación de efectos de audio...), en una cámara de vídeo o de fotos (algoritmos de compresión, algoritmos de balances de color...), en dispositivos de red (módems, routers...) y muchas más aplicaciones de ámbito diario, que al fin y al cabo es la electrónica de consumo.
Un microprocesador convencional lo utilizaría en cualquier aplicación de control de otros dispositivos u otros DSPs pero no para el procesado de señal ya que no sería algo eficiente.

2. ¿Qué entiendes por escalado de datos? ¿Por qué crees que se deben escalar las señales en datos de coma fija?
Simplemente el cambiar el rango en que se mueve una señal pero conservando cada uno de sus valores, es decir, no saturándola sino convirtiendo cada valor de un rango (escala) a otro rango, de forma lineal o no.
Por el hecho de que los DSPs de coma fija tienen una rango dinámico relativamente limitado (relativamente porque todo depende siempre de la problemática a la que vaya destinado a dar respuesta), al procesar datos puede que los resultados, aún estando los de origen en el rango que acepta el procesador, la salida se nos vaya de rango y por tanto sea necesario volver a introducir la señal en el mismo. Llegados a este punto bien se podría saturar la señal, pero si la gran mayoría de la señal está fuera de rango, el resultado no sería nada bueno (muchísimas muestras podrían tener el mismo valor cuando en realidad deberían ser muy diferentes), por lo que se prefiere escalar la señal, eliminando problemas como, por ejemplo, la distorsión armónica en señales de audio.

3. ¿Qué medidas para comparar la velocidad de un procesador conoces? ¿Te parecen adecuadas? ¿Cómo crees que se utilizan? Añade otras que tú consideres necesarias.
Algunas de las medidas del rendimiento conocidas son:
MIPS: Millones de instrucciones por segundo. Hace referencia a la cantidad de instrucciones que es capaz de procesar el DSP en un segundo. El que el procesador sea mejor o peor según este dato sea grande o pequeño dependerá de la arquitectura del mismo (RISC, CISC...).
MOPS: Millones de operaciones por segundo. Hace referencia a la cantidad de operaciones que puede realizar el procesador en un segundo. No es exactamente lo mismo que el parámetro anterior ya que puede que una intrucción no sea exactamente una operación (por ejemplo, en una arquitectura CISC una instrucción puede significar varias operaciones).
FLOPS: Operaciones de coma flotante por segundo. Hace referencia a lo mismo que MIPS pero se aplica a procesadores que trabajan en coma flotante.
MBPS: MegaBytes por segundo. Hace referencia al rendimiento del sistema.
MAC: Operación de multiplicación-acumulación. Hace referencia al tiempo que tarda el procesador en realizar una multiplicación y guardar el resultado en memoria.
Las medidas aquí propuestas parecen bastante razonables para cuantificar la velocidad y capacidad de procesado de un DSP. Con respecto a otra forma de medir su potencia, yo añadiría resultados de tiempo obtenidos ante procesos conocidos, como pueden ser tablas de tiempo de cómputo ante operaciones que han de realizar estos procesadores como FFTs, operaciones con filtros... Esto realmente aparece en los datasheets de los procesadores, pero al no aparecer en este artículo, creí oportuno el nombrarlo.


4. Explica, con tus propias palabras, qué es la segmentación de intrucciones. ¿Qué son las instrucciones de "salto"? ¿Por qué dan problemas con el pipelining?
La segmentación en procesadores consiste en dividir las instrucciones en unidades más pequeñas (procesos más pequeños) que puedan procesarse de forma paralela y así ganar tiempo de cómputo, ya que en los procesadores en los que las instrucciones se procesan de forma secuencial (un detrás de la otra), el tiempo de cómputo total, en el mejor caso, es la suma de los tiempos de cada operación, mientras que en un sistema en que se permita el solape, idealmente con un solape total, el tiempo de cómputo (en un período estacionario tras el transitorio inicial) sería el tiempo que tarda la mayor operación en realizarse.
Una operación de salto es una operación que cambia de la línea en la que está a otra línea que nos es la que le sigue, sino que es otra que estará en otra parte del código (tanto por arriba como por abajo). Un ejemplo de instrucción de salto sería el famoso GOTO o un condicional IF.
Las instrucciones de tipo salto dan problemas con el pipelining porque el procesador, si comienza a realizar la línea que sigue a la que se está ejecutando (concepto de solape de instrucciones), puede que esa línea nunca se tenga que ejecutar (imaginemos un condicional en el que la condición evaluada no se cumpla) o por ejemplo que la línea siguiente requiera un resultado de la anterior para poder procesarse. En este tipo de casos, no se puede realizar el solape (al menos el solape ideal del 100%) ya que necesitamos un resultado anterior para poder seguir.
Como conclusión de esto podemos afirmar que, en el peor caso del pipelining, nos encontramos con un sistema totalmente secuencial.

5. Imagina que tienes un puesto de ingeniero jefe de un proyecto telecomunicaciones en una empresa. Tu primer cometido es elegir una placa de desarrollo en tiempo real adecuada para la aplicación que vas a desarrollar. Especifica qué criterios tomarías para realizar dicha elección, justificándolos.
Para elegir una placa de desarrollo sobre la que realizar las pruebas de los algoritmos de la empresa, me basaría en los siguientes criterios:
  • Primero de todo intentaría escoger un DSP cuyas características se acercaran bastante a los procesadores que luego pueda utilizar en el proyecto. De nada serviría el poder utilizar procesadores muy potentes en diseño y esperar los mismos resultados en la fase de producción, siendo los utilizados en la segunda etapa bastante distintos (normalmente menos potentes) a los primeros. Además, también conviene utilizar un DSP cuyas características sean lo más cercanas posible a lo que finalmente requerirá el algoritmo por el hecho de que si no tuviéramos suficiente potencia de cálculo, el DSP no funcionaría en "tiempo real" y si tuviéramos más de la necesaria habrían partes del procesador que no estarían funcionando al máximo pero sí gastanto potencia energética.
  • Siguiendo con el tema de potencia (aunque en este caso energética), intentaría utilizar un DSP bastante similar al que fuera a utilizar en la aplicación final: el saber si el algoritmo necesita gran potencia energética (que aunque está relacionado con la de cálculo, vale la pena considerarlo como una variable más para un mejor diseño) vendrá bastante bien para poder optimizar el diseño final.
  • También, como criterio de búsqueda de qué DSP utilizar, propondría la utilización de un procesador que fuera relativamente común (en la medida de lo posible) y de una empresa relativamente fuerte en este tipo de mercado. Este criterio es algo inicial y no implica que más tarde, cuando ya se pudieran evaluar los objetivos comerciales del proyecto, si se hubiera tenido éxito, no se pudiera contemplar la posibilidad de firmar con una casa de DSP más modesta la creación de una línea propia de procesadores.

No hay comentarios: