¿Puede FPGA realizar una PC multinúcleo?

20

No entiendo cómo se puede usar FPGA para acelerar un algoritmo. Actualmente estoy ejecutando un algoritmo de tiempo real que consume mucho tiempo en una computadora portátil quadcore para que se puedan hacer cuatro cálculos en paralelo.

Recientemente he sido alertado de que FPGA puede producir un rendimiento aún mejor. No entiendo cómo funciona eso. ¿Alguien puede explicar cómo FPGA acelera un algoritmo y si debo cambiar a una solución FPGA Xilinx o Altera o seguir realizando los cálculos en mi computadora portátil Quadcore?

Detalles adicionales: El algoritmo ejecuta 20 redes neuronales artificiales utilizando entradas alimentadas a través de la transformación del paquete wavelet

Gracias a todos por las excelentes respuestas.

Carlos - la mangosta - peligro
fuente
1
¿Has considerado ejecutar el algoritmo en una CPU de escritorio (o servidor)? Esos son típicamente más rápidos que las CPU de las computadoras portátiles. (Por un factor constante, pero aún más rápido.)
ntoskrnl
1
Piense en usar GPU para el procesamiento de redes neuronales. Las GPU tienen muchas unidades que pueden multiplicar números de coma flotante en paralelo.
Kamil
@ntoskrnl Supongo que tiene una CPU i5 o mejor (4 núcleos), por lo que el rendimiento en el escritorio o el servidor será solo proporcional a la velocidad del reloj. Tal vez en Xeon pueda obtener poco rendimiento (¿20%?) Gracias a la gran caché y al mejor ancho de banda de memoria, pero eso no es mucho.
Kamil
¿Qué CPU tienes?
Kamil
Interesante momento de preguntas, tenemos una pregunta similar sobre ingeniería de redes
Mike Pennington

Respuestas:

23

Un colega mío evaluó esto y llegó a la conclusión de que los FPGA superarían a una PC una vez que tuvieras más de 100 tareas enteras e independientes que encajarían en el FPGA. Para tareas de punto flotante, GPGPU supera a FPGA en todo momento. Para la operación de subprocesamiento múltiple o SIMD, las CPU están extremadamente optimizadas y funcionan a una velocidad de reloj más alta que la que alcanzan los FPGA.

Las otras advertencias: las tareas deben ser independientes. Si hay dependencias de datos entre tareas, eso limita la ruta crítica de cálculo. Los FPGA son buenos para la evaluación booleana y las matemáticas de enteros, así como para las interfaces de baja latencia de hardware, pero no para cargas de trabajo dependientes de la memoria o coma flotante.

Si tiene que mantener la carga de trabajo en DRAM, ese será el cuello de botella en lugar del procesador.

pjc50
fuente
3
Para decidir si DRAM es el límite, también debe saber que los FPGA tienen muchas RAM pequeñas distribuidas (por ejemplo, 500 bloques de RAM independientes de 9 kbit) que pueden leer / escribir durante el mismo ciclo de reloj.
maxy
19

Un FPGA funciona de manera completamente diferente a un procesador.

Para un procesador, usted escribe un software que le dice al hardware qué hacer. En un FPGA, usted describe "cómo debería verse el hardware" internamente. Es como si estuviera haciendo un chip especialmente hecho para su algoritmo.

Esto acelera muchas cosas y puede reducir el consumo de energía. Pero tiene sus inconvenientes: el desarrollo lleva mucho más tiempo y es mucho más complicado. Debe pensar de una manera completamente diferente y no puede usar algoritmos que funcionan en software de una manera directa.

Para redes neuronales artificiales, el FPGA es una gran opción. Hay mucha investigación en curso en esta área.

Botánico
fuente
En realidad, el desarrollo de FPGA a menudo se realiza utilizando lenguajes como Verilog o VHDL que describen el comportamiento en lugar de la implementación, un hecho que a veces es útil pero a veces puede complicar en gran medida el diseño de la lógica secuencial asíncrona. Si se especificaran implementaciones, los retrasos en la propagación serían algo consistentes, pero en los lenguajes de comportamiento ni siquiera se garantiza que sean positivos . La clave con el diseño de FPGA es que los lenguajes hacen que sea muy fácil hacer que muchas (potencialmente cientos o miles) de diferentes partes del chip realicen comportamientos simples simultáneamente.
supercat
13

Depende mucho del algoritmo, pero el principio puede explicarse de manera bastante simple.

Suponga que su algoritmo tiene que sumar muchos números de 8 bits. Su CPU aún tendrá que buscar cada instrucción, obtener los operandos de la RAM o la memoria caché, ejecutar la suma, almacenar el resultado en la memoria caché y continuar con la siguiente operación. La canalización ayuda, pero solo puede ejecutar tantas operaciones simultáneas como los núcleos que tiene.

Si usa un FPGA, puede implementar una gran cantidad de sumadores simples que funcionan en paralelo, y tal vez miles de sumas en paralelo. Aunque una sola operación puede llevar más tiempo, tiene un gran grado de paralelismo.

También puede usar una GPGPU para realizar tareas similares, ya que también están formadas por muchos núcleos más simples.

clabacchio
fuente
GPGPU es una gran entrada para el uso de redes neuronales.
Botnic
También hay ASIC de redes neuronales. Intel solía hacer una que implementara 16 neuronas en los años 80.
Lior Bilia
@LiorBilia bueno, no sé nada de ellos :). Nunca he trabajado con redes neuronales, y muy poco con FPGA
clabacchio
@clabacchio La red neuronal de software es un programa que en su mayoría multiplica y compara operaciones en números de coma flotante. Por mayormente quiero decir ... 95% o más.
Kamil
Una CPU convencional puede hacer un buen trabajo al sumar muchos números de 8 bits; en una máquina rápida, el tiempo de ejecución estaría dominado por el costo de obtener datos de la memoria (el 99% de las recuperaciones de código vendrían de la captura). Un ejemplo más interesante sería trabajar con datos codificados utilizando un esquema que requiere arreglos o permutaciones de bits bastante "inusuales". Por ejemplo, si una pieza de datos de muestreo de video devuelve bits intercalados para rojo, verde y azul, un FPGA podría reorganizar fácilmente los bits; Una CPU convencional tendría muchos más problemas.
supercat
6

Hay aproximadamente 3 niveles de especialización de equipos informáticos:

La CPU (como en su computadora portátil) es la más genérica de todas. Puede hacer todo, pero esta versatilidad tiene un precio de baja velocidad y alto consumo de energía. La CPU se programa sobre la marcha, las instrucciones provienen de la RAM. Los programas para CPU son rápidos, baratos y fáciles de escribir y muy fáciles de cambiar.

FPGA (que significa matriz de puerta programable de campo) es el nivel medio. Como su nombre lo indica, se puede programar "en el campo", es decir, fuera de una fábrica. FPGA generalmente se programa una vez, este proceso puede describirse como la configuración de su estructura interna. Después de este proceso, se comporta como una pequeña computadora especializada para la tarea que ha elegido. Es por eso que puede funcionar mejor que la CPU genérica. Programar FPGA es muy difícil y costoso y depurarlos es muy difícil.

ASIC (que significa Circuito Integrado Específico de Aplicación) es el máximo especialista. Es un chip diseñado y producido para una única tarea, una tarea que realiza de manera extremadamente rápida y eficiente. No hay posibilidad de reprogramar ASIC, deja la fábrica completamente definida y es inútil cuando su trabajo ya no es necesario. Diseñar ASIC es algo que solo las grandes corporaciones pueden permitirse y depurarlos es bastante imposible.

Si piensas en "núcleos", entonces míralo de esta manera: las CPU tienen 4, 6, quizás 8 núcleos grandes que pueden hacer todo. Los ASICS a menudo tienen miles de núcleos, pero muy pequeños, capaces de una sola cosa.

Puedes mirar la comunidad minera de bitcoin. Hacen hash SHA256.

  • CPU core i7: 0.8-1.5 M hash / s
  • FPGA: 5-300M hash / s
  • ASIC: 12000 M de hash / s por un chip pequeño, 2000000M (sí, ese 2T) hash / s para un dispositivo de 160 chips

Por supuesto, esos bebés ASIC cuestan casi $ 2000 cuando se producen en masa, pero le da una idea acerca de cómo un Jack-of-All-Trades puede competir contra un especialista.

La única pregunta es: ¿puede FPGA brindarle más ahorros de lo que costaría diseñarlo? Por supuesto, en lugar de ejecutarlo en UNA computadora portátil, puede intentar ejecutarlo en 20 PCS.

Agent_L
fuente
Hashing es un caso muy especial; tenga en cuenta que las monedas basadas en scrypt (deliberadamente) no son muy acelerables por hardware especializado.
pjc50
1
& La depuración ASIC generalmente se maneja en simulación antes del envío a la fabricación. Por lo general, son 6 meses o más desde la especificación hasta la fabricación. Diagnosticar errores después de la fabricación es costoso pero no imposible.
pjc50
Y aunque es difícil, de hecho puede ser muy difícil, hay cosas como el escaneo de límites, la prueba JTAG y las técnicas directas que usan FIB, etc. Por lo tanto, no es imposible depurarlas, solo necesita saber lo que está haciendo. . Hoy en día, ASIC se refiere más a un flujo de diseño (HDL, Synthesis, P&R) que en realidad se refiere a un dispositivo real, ya que la mayoría de los dispositivos son ASIC, incluidos los procesadores ARM.
marcador de posición
@ pjc50 Sí, ese era mi punto: en casos especiales, la diferencia de velocidad es tremenda. Pero scrypt asics aún procesa CPU y GPU. No por un factor de millones (como con sha), pero aún más de 100.
Agent_L
@ placeholder, sí, pero incluso si encuentra el error, no sirve de mucho para todos esos chips ya fabricados. Quise decir "depuración" como en "eliminar el error" no solo "aquí está".
Agent_L
5

Sí, FPGA puede superar a la CPU moderna (como Intel i7) en alguna tarea específica, pero existen métodos más fáciles y económicos para mejorar el rendimiento de la red neuronal.

Por más barato, me refiero al esfuerzo total, no al costo de FPGA IC, sino también a la memoria muy rápida para FPGA (la necesitaría para la red neuronal) y todo el proceso de desarrollo.

  1. Use SSE : he visto implementaciones de redes neuronales bastante simples con un rendimiento 2-3 veces mejor. Esta podría ser una buena idea si no tiene una GPU dedicada en su computadora portátil.

    Mejorando la velocidad de las redes neuronales en las CPU por Vincent Vanhoucke y Andrew Senior

  2. Use GPGPU (Computación de propósito general en unidades de procesamiento de gráficos): creo que puede archivar un aumento del rendimiento de 100-200x en una GPU portátil de clase media como GeForce 730M.

    Aquí está la implementación de la red neuronal (y código libre). Utiliza Nvidia CUDA.

    El enfoque de GPGPU es muy escalable, si en algún momento se da cuenta de que necesita más potencia informática, simplemente puede usar una computadora de escritorio con una GPU más potente o incluso Nvidia Tesla K80 con 4992 núcleos (eso es costoso).

Kamil
fuente
1
El problema aquí es definir el rendimiento. Si queremos decir más rápido, entonces sí, fpga puede ser más rápido que el cpus normal. Sin embargo, las fpga no son tan flexibles como la CPU, están diseñadas para ejecutar eficientemente solo una tarea predefinida. Ejecutar otra tarea significaría cambiar su cableado interno en realidad implementando otra fpga
Gianluca Ghettini