algorithm cpu fpga

algorithm - Los algoritmos FPGA dominan las CPU en



(4)

Bueno, la nueva generación de piezas de Xilinx acaba de anunciarse con 4.7TMACS y lógica de propósito general a 600MHz. (Se trata básicamente de 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, agregue y reste, y aproveche tanto el paralelismo amplio como el paralelismo de tuberías, puede comer la mayoría de las PC con vida, tanto en términos de potencia como de procesamiento.

Puedes hacer flotar en estos, pero habrá un impacto de rendimiento. Los bloques DSP contienen un MACC de 25x18 bits con una suma de 48 bits. Si puede salirse con la suya con formatos extraños y omitir parte de la normalización de punto flotante que normalmente ocurre, todavía puede sacar una carga de rendimiento de estos. (Es decir, use la entrada de 18 bits como un punto fijo de estrecho o flotante con una mantisa de 17 bits, en lugar de los 24 bits normales). Los flotadores de dobles consumirán muchos recursos, por lo que si lo necesita, probablemente lo haga mejor en una PC.

Si sus algoritmos pueden expresarse como en términos de operaciones de suma y resta, entonces la lógica de propósito general en estos puede usarse para implementar adiciones de gazillion. Cosas como los algoritmos de línea / círculo / yadda / yadda / yadda de Bresenham son MUY buenos para los 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 de activación de percisión alta, no tanto ... Nuevamente se PUEDE hacer, pero no será bonito ni rápido. (Al igual que se puede hacer en un 6502). Si puede lidiar con solo usar una tabla de búsqueda en un rango limitado, ¡entonces su oro!

Hablando del 6502, un codificador de demostración 6502 podría hacer cantar 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 todavía se aplicará. Todos los trucos que el programador moderno le dice "deje que la biblioteca 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, hablarán sobre cómo implementar cosas solo en números enteros.

En realidad, cualquier algoritmo que se pueda implementar utilizando tablas de consulta será MUY adecuado para los FPGA. No solo tiene blockrams distribuidos en toda la parte, sino que las celdas lógicas pueden configurarse como LUTS de varios tamaños y mini rams.

Puedes ver cosas como manipulaciones de bits fijos como GRATIS! Es simplemente manejar por enrutamiento. Los turnos fijos o las reversiones de bits no cuestan nada. Las operaciones dinámicas de bits como el desplazamiento en una cantidad variable 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 una puede ser un sumador de 8 bits. (4 6Bit Luts por segmento o 8 5bit Luts por segmento, según la configuración).

Durante la mayor parte de mi vida, he programado CPUs; y aunque para la mayoría de los algoritmos, el tiempo de ejecución de big-Oh sigue siendo el mismo en las CPU / FPGA, las constantes son bastante diferentes (por ejemplo, se desperdicia mucha energía de la CPU y se barajan los datos; mientras que para los FPGA, a menudo, se realiza el cálculo).

Me gustaría aprender más sobre esto: cualquier persona sabe de buenos libros / documentos de referencia / tutoriales que tratan el tema de:

en qué tareas los FPGA dominan las CPU (en términos de velocidad pura) en qué tareas los FPGA dominan las CPU (en términos de trabajo por jule)

Nota: comunidad marcada wiki


Elija un algoritmo SW gnarly. Nuestra compañía hace la aceleración de hardware de SW para ganarse la vida.

Hemos realizado implementaciones de HW de motores de expresiones regulares que realizarán miles de conjuntos de reglas en paralelo a velocidades de hasta 10 Gb / s. El mercado objetivo para eso son los enrutadores donde los antivirus y los ips / id pueden ejecutarse en tiempo real, ya que los datos se transfieren sin que esto ralentice el enrutador.

Hemos hecho codificación de video HD en HW. Solía ​​tomar varias horas de tiempo de procesamiento por segundo de película para convertirla en HD. Ahora podemos hacerlo casi en tiempo real ... se requieren casi 2 segundos de procesamiento para convertir 1 segundo de película. Netflix usó nuestro HW casi exclusivamente para su producto de video bajo demanda.

Incluso hemos hecho cosas simples como RSA, 3DES, y cifrado y descifrado AES en HW. Hemos hecho simple zip / descomprimir en HW. El mercado objetivo para eso es para cámaras de video de seguridad. El gobierno tiene una cantidad masiva de cámaras de video que generan enormes flujos de datos en tiempo real. Lo comprimen en tiempo real antes de enviarlo a través de su red, y luego lo descomprimen en tiempo real en el otro extremo.

Heck, otra compañía para la que trabajé solía hacer receptores de radar usando FPGA. Tomarían muestras de los datos del radar del enemigo digitalizado directamente en diferentes antenas y, a partir del momento de llegada del delta, descubrirían en qué dirección y a qué distancia se encuentra el transmisor enemigo. Diablos, incluso podríamos verificar la modulación no intencionada en el pulso de las señales en los FPGA para descubrir la huella digital de transmisores específicos, así podríamos saber que esta señal proviene de un sitio SAM ruso específico que solía estar estacionado en un borde diferente , por lo que podríamos rastrear movimientos y ventas de armas.

Intenta hacer eso en el software !! :-)


Para velocidad pura: - Paralizables - DSP, por ejemplo, filtros de video - Datos en movimiento, por ejemplo, DMA


[no hay enlaces, solo mis reflexiones]

¡Los FPGA son esencialmente intérpretes para hardware! La arquitectura es como ASIC dedicados, pero para obtener un rápido desarrollo, usted paga un factor de ~ 10 en frecuencia y un factor [¿no sabe, al menos 10?] En eficiencia energética.

Entonces, realice cualquier tarea en la que el HW dedicado pueda superar en gran medida a las CPU, divida entre los factores FPGA 10 / [?], Y probablemente aún tenga un ganador. Cualidades típicas de tales tareas:

  • Oportunidades masivas para el paralelismo de grano fino .
    (Hacer 4 operaciones a la vez no cuenta; 128 lo hace).
  • Oportunidad para la canalización profunda .
    Este también es un tipo de paralelismo, pero es difícil aplicarlo a una sola tarea, por lo que es útil si puede hacer que muchas tareas separadas trabajen en paralelo.
  • (Principalmente) Rutas de flujo de datos fijas .
    Algunos muxes están bien, pero los accesos aleatorios masivos son malos, porque no puedes paralelizarlos. Pero ver más abajo sobre los recuerdos.
  • Alto ancho de banda total para muchos pequeños recuerdos .
    Los FPGA tienen cientos de pequeñas (O (1KB)) memorias internas (BlockRAMs en el lenguaje de Xilinx), por lo que si puede particionar su uso de memoria en muchos búferes independientes, puede disfrutar de un ancho de banda de datos con el que las CPU nunca soñaron.
  • Ancho de banda externo pequeño (comparado con el trabajo interno). La tarea FPGA ideal tiene entradas y salidas pequeñas pero requiere mucho trabajo interno. De esta manera, su FPGA no se quedará sin esperar a la E / S. (Las CPU ya sufren de hambre, y lo alivian con cachés muy sofisticados (y grandes ), incomparables en FPGA). Es perfectamente posible conectar un gran ancho de banda de E / S a un FPGA (~ 1000 pines hoy en día, algunos con alta velocidad SERDES) - pero hacer eso requiere un tablero personalizado diseñado para tal ancho de banda; en la mayoría de los escenarios, su E / S externa será un cuello de botella.
  • Suficientemente simple para HW (también conocido como buena partición SW / HW ).
    Muchas tareas consisten en un 90% de lógica de pegamento irregular y solo un 10% de trabajo duro ("kernel" en el sentido de DSP). Si pone todo eso en un FPGA, perderá un área valiosa en lógica que no funciona la mayor parte del tiempo. Idealmente, desea que toda la suciedad se maneje en SW y utilice completamente el HW para el núcleo. ( Las CPU "soft-core" dentro de los FPGA son una forma popular de empaquetar mucha lógica lenta e irregular en un área media, si no puede descargarla en una CPU real).
  • Las manipulaciones de bits extraños son una ventaja.
    Las cosas que no se asignan bien a los conjuntos de instrucciones de CPU tradicionales, como el acceso no alineado a bits empaquetados, funciones hash, codificación y compresión ... Sin embargo, no sobreestime el factor que esto le brinda: la mayoría de los formatos de datos y algoritmos que utilizará La reunión ya ha sido diseñada para facilitar los conjuntos de instrucciones de la CPU, y las CPU siguen agregando instrucciones especializadas para multimedia.
    La gran cantidad de punto flotante es un inconveniente, ya que tanto las CPU como las GPU las comprimen con un silicio dedicado extremadamente optimizado. (Los llamados FPGA "DSP" también tienen muchas unidades mul / add dedicadas, pero ¿AFAIK solo hacen enteros?)
  • Los requisitos de baja latencia / tiempo real son una ventaja.
    El hardware realmente puede brillar bajo tales demandas.

EDITAR: Varias de estas condiciones - esp. flujos de datos fijos y muchas tareas independientes en las que trabajar, también habilitan el corte de bits en las CPU, lo que en cierto modo nivela el campo.