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.
Respuestas:
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.
fuente
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.
fuente
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.
fuente
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.
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.
fuente
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.
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
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).
fuente