Bueno, la última generación de piezas Xilinx acaba de anunciar brag 4.7TMACS y lógica de propósito general a 600MHz. (Estos son básicamente Virtex 6s fabbed en un proceso más pequeño.)
En una bestia como esta si puede implementar sus algoritmos en operaciones de punto fijo, principalmente multiplique, suma y resta, y aproveche el paralelismo ancho y el paralelismo canalizado puedes comer la mayoría de las PC vivas, en términos de potencia y procesamiento.
Puede hacer flotante en estos, pero habrá un golpe de rendimiento. Los bloques DSP contienen un MACC de 25x18 bit con una suma de 48 bits. Si puede salirse con la suya con los formatos de oddball y eludir parte de la normalización de punto flotante que normalmente ocurre, todavía puede aspirar a la carga de rendimiento de un camión. (es decir, utilice la entrada de 18 bits como punto fijo de flotación o float con una mantisia de 17 bits, en lugar de los 24 bits normales). Los flotadores dobles van a consumir muchos recursos, por lo que si necesita eso, probablemente lo haga mejor en una PC.
Si sus algoritmos se pueden expresar en términos de operaciones de suma y resta, la lógica de propósito general en estos se puede utilizar para implementar sumadores de gazillion. Cosas como los algoritmos de línea/círculo/yadda/yadda/yadda de Bresenham son MUY buenos ajustes para diseños de FPGA.
SI necesita división ... EH ... es doloroso, y probablemente va a ser relativamente lento a menos que pueda implementar sus divisiones como multiplicaciones.
Si necesita muchas funciones trigonométricas de alta precisión, no tanto ... De nuevo, se puede hacer, pero no va a ser bonito ni rápido. (Al igual que se puede hacer en un 6502). Si puede manejar simplemente usando una tabla de búsqueda en un rango limitado, ¡entonces su oro!
Hablando de la 6502, un codificador de demostración 6502 podría hacer cantar a una de estas cosas. Cualquiera que esté familiarizado con todos los viejos trucos matemáticos que los programadores solían usar en la máquina de la vieja escuela así se aplicará. Todos los trucos que el programador moderno le dice "deje que la biblioteca lo haga por usted" son los tipos de cosas que necesita saber para implementar las matemáticas en estos. Si puedes encontrar un libro que habla sobre hacer 3d en un Atari o Amiga basado en 68000, discutirán mucho sobre cómo implementar cosas solo en números enteros.
ACTUALMENTE, cualquier algoritmo que pueda implementarse utilizando tablas de búsqueda será MUY adecuado para FPGA. No solo tiene bloques de bloques distribuidos a través de la pieza, sino que las mismas celdas lógicas se pueden configurar como LUTS de varios tamaños y mini rams.
¡Puede ver cosas como manipulación de bits fija como GRATIS! Es simplemente manejar por enrutamiento. Los cambios fijos o las inversiones de bits no cuestan nada. ¡Las operaciones dinámicas de bit como cambio en una cantidad aceptable costarán una cantidad mínima de lógica y se pueden hacer hasta que las vacas vuelvan a casa!
¡La parte más grande tiene 3960 multiplicadores! Y 142.200 rebanadas que CADA UNO puede ser un sumador de 8 bits. (4 6Bit Luts por porción o 8 5bit Luts por porción, dependiendo de la configuración.)
Buena pregunta: un ejemplo son las aplicaciones DSP dedicadas, como los filtros, donde puede lanzar tantas multiplicaciones/adiciones y tantos bits como necesite en un problema determinado, en lugar de estar restringido por el número fijo de unidades de ejecución y tamaño de palabra de una CPU convencional. –
En general, cuando hablamos de notación de Oh grande, no nos ocupamos de la paralelización. La mayor parte del ahorro de tiempo que obtienes en un FPGA sobre una CPU es conectar tu algoritmo de forma que cada reloj, ingreses y obtengas una salida (aunque la salida no corresponderá a la entrada que ese ciclo de reloj). Toda la idea de paralelización sigue siendo una pregunta abierta. Si nuestras CPUs fueran lo suficientemente inteligentes como para darse cuenta de que algo es parraleizable sin tener que decirlo, podríamos tener mejoras de órdenes de magnitud en el rendimiento. – ldog
Por ejemplo, tome el problema de la clasificación. Por lo general, lo abordamos desde un punto de vista secuencial y afirmamos que hay un límite inferior O (n log n) en el tiempo de ejecución. Sin embargo, en un FPGA con n procesadores (que no es tan extravagante) puede implementar el tipo impar-par (http://en.wikipedia.org/wiki/Odd-even_sort una extensión fácil de usar para ordenar con burbujas) y la clasificación será ocurrir en el tiempo O (n)! – ldog