¿Puede FPGA superar a una PC de múltiples núcleos?

20

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

Recientemente se me ha avisado de que FPGA puede ofrecer 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 Xilinx o Altera FPGA o seguir realizando los cálculos en mi computadora portátil de cuatro núcleos.

Detalles adicionales: el algoritmo ejecuta 20 redes neuronales artificiales utilizando entradas introducidas a través de la transformación de paquetes wavelet

Gracias a todos por las excelentes respuestas.

    
pregunta Aåkon

5 respuestas

23

Un colega mío hizo una prueba comparativa de esto y llegó a la conclusión de que los FPGA superarán a una PC una vez que tengas más de 100 tareas independientes , integer que encajarían en el FPGA. Para las tareas de punto flotante, GPGPU venció a FPGA en todo. Para operaciones de subprocesos múltiples o SIMD estrechas, las CPU están extremadamente optimizadas y se ejecutan a una velocidad de reloj más alta de lo que los FPGA suelen lograr.

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 las interfaces de hardware de baja latencia, pero no para cargas de trabajo dependientes de la memoria o punto flotante.

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

    
respondido por el pjc50
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 estuvieras haciendo un chip especialmente hecho para tu 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 funcionen en el software de una manera directa.

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

    
respondido por el Botnic
13

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

Suponga que su algoritmo tiene que sumar muchos números de 8 bits. Su CPU todavía necesitará obtener 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 tenga.

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

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

    
respondido por el clabacchio
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 hacerlo todo, pero esta versatilidad tiene un precio de baja velocidad y alto consumo de energía. La CPU está programada sobre la marcha, las instrucciones provienen de la memoria RAM. Los programas para la CPU son rápidos, baratos, fáciles de escribir y muy fáciles de cambiar.

FPGA (que significa Campo de Arreglo de Puerta Programable) es el nivel medio. Como su nombre lo indica, se puede programar "en el campo", que está 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 única tarea que eligió. Es por esto 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 de Aplicación Específica) es el mejor especialista. Es un chip diseñado y producido para una y solo una tarea, una tarea que realiza de manera extremadamente rápida y eficiente. No hay posibilidad de reprogramar ASIC, deja la fábrica totalmente definida y es inútil cuando ya no se necesita trabajo. Diseñar ASIC es algo que solo las grandes empresas pueden permitirse y depurarlas es bastante, casi 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 ver la comunidad minera de bitcoin. Hacen hash SHA256.

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

Por supuesto, esos bebés con ASIC cuestan casi $ 2000 cuando se producen en masa, pero te dan una idea de cómo un jack-of-all-trade puede compararse con un especialista.

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

    
respondido por el Agent_L
5

Sí, FPGA puede superar a la CPU moderna (como Intel i7) en algunas tareas específicas, 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 una memoria muy rápida para FPGA (la necesitaría para redes neuronales) y todo el proceso de desarrollo.

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

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

  2. Utilice GPGPU (Computación de propósito general en unidades de procesamiento de gráficos) - Creo que puede archivar 100-200 aumento de rendimiento en GPU para portátiles de clase media como GeForce 730M.

    Aquí se encuentra implementación de redes neuronales (y código gratuito). Utiliza Nvidia CUDA.

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

respondido por el Kamil

Lea otras preguntas en las etiquetas