22 votos

¿Puede la FPGA superar a un PC multinúcleo?

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

Recientemente me han alertado de que la FPGA puede ofrecer un rendimiento aún mayor. No entiendo cómo funciona eso. Puede alguien explicar cómo la FPGA acelera un algoritmo y si debo cambiar a una solución FPGA de Xilinx o Altera o seguir realizando los cálculos en mi portátil de cuatro núcleos.

Detalles adicionales: El algoritmo ejecuta 20 redes neuronales artificiales utilizando entradas alimentadas a través de la transformada de paquetes de ondas

Gracias a todos por las buenas respuestas.

1 votos

¿Has considerado ejecutar el algoritmo en una CPU de escritorio (o de servidor)? Éstas suelen ser más rápidas que las CPU de los ordenadores portátiles. (Por un factor constante, pero aún así son más rápidas).

1 votos

Piensa en utilizar la GPU para el procesamiento de redes neuronales. Las GPU tienen muchas unidades que pueden multiplicar números de coma flotante en paralelo.

0 votos

@ntoskrnl Supongo que tiene i5 o mejor cpu (4 núcleos) por lo que el rendimiento en escritorio o servidor será sólo proprocional a la velocidad de reloj. Tal vez en Xeon puede ganar un poco (20%?) el rendimiento gracias a la enorme caché y mejor ancho de banda de memoria, pero eso no es mucho.

25voto

jns Puntos 449

Un colega mío hizo una evaluación comparativa y llegó a la conclusión de que las FPGAs superarían a un PC una vez que tuvieras más de 100 independiente , entero tareas que caben en la FPGA. Para las tareas de punto flotante, la GPGPU supera a la FPGA en todo momento. Para tareas de multihilo o SIMD, las CPU están muy optimizadas y funcionan a una velocidad de reloj superior a la que suelen alcanzar las FPGA.

Las otras advertencias: las tareas deben ser independientes. Si hay dependencias de datos entre las tareas, eso limita el camino crítico del cálculo. Las FPGAs son buenas para la evaluación booleana y las matemáticas de números enteros, así como para las interfaces de baja latencia del hardware, pero no para las cargas de trabajo que dependen de la memoria o del punto flotante.

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

3 votos

Para decidir si la DRAM es el límite, también hay que saber que las FPGAs tienen muchas pequeñas RAMs distribuidas (por ejemplo, 500 bloques de RAM de 9kbit independientes) que pueden leer/escribir todos durante el mismo ciclo de reloj.

19voto

BiAiB Puntos 131

Una FPGA funciona de forma completamente diferente a un procesador.

En un procesador se escribe un software que indica al hardware lo que debe hacer. En una FPGA se describe internamente "cómo debe ser el hardware". 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. Hay que pensar de forma completamente diferente y no se pueden utilizar algoritmos que funcionan en el software de forma directa.

Para las redes neuronales artificiales, la FPGA es una gran opción. Hay muchas investigaciones en curso en este ámbito.

0 votos

En realidad, el desarrollo de FPGAs se realiza a menudo utilizando lenguajes como Verilog o VHDL que describen el comportamiento en lugar de la implementación - un hecho que a veces es útil pero que puede complicar enormemente el diseño de la lógica secuencial asíncrona. Si uno estuviera especificando implementaciones, los retrasos de propagación serían algo consistentes, pero en los lenguajes de comportamiento ni siquiera se garantiza que sean positivo . La clave del diseño de la FPGA es que los lenguajes facilitan mucho que muchas (potencialmente cientos o miles) de partes diferentes del chip realicen comportamientos simples simultáneamente.

13voto

Jonah Katz Puntos 128

Depende mucho del algoritmo, pero el principio se puede explicar de forma bastante sencilla.

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

Si se utiliza una FPGA, se puede implementar un gran número de sumadores simples que funcionen en paralelo, calculando quizás miles de sumas en paralelo. Aunque una sola operación puede llevar más tiempo, tienes un enorme grado de paralelismo.

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

0 votos

La GPGPU es una gran entrada para el uso de redes neuronales.

0 votos

También hay ASIC de redes neuronales. Intel fabricaba uno que implementaba 16 neuronas en los años 80.

0 votos

@LiorBilia pues no sé nada de ellas :). Nunca he trabajado con redes neuronales, y muy poco con FPGA

6voto

Agent_L Puntos 295

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

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

La FPGA (que significa Field Programmable Gate Array) es el nivel medio. Como su nombre indica, puede programarse "sobre el terreno", es decir, fuera de una fábrica. La FPGA suele programarse una vez; este proceso puede describirse como la configuración de su estructura interna. Después de este proceso, se comporta como un pequeño ordenador especializado en la tarea que se ha elegido para él. Por eso puede funcionar mejor que una CPU genérica. La programación de la FPGA es muy difícil y costosa y su depuración es muy difícil.

El ASIC (que significa Circuito Integrado de Aplicación Específica) es el especialista por excelencia. Es un chip diseñado y fabricado para una y sólo una tarea, una tarea que realiza de forma extremadamente rápida y eficiente. No hay posibilidad de reprogramar el ASIC, sale de la fábrica totalmente definido y es inútil cuando su trabajo ya no es necesario. Diseñar un ASIC es algo que sólo pueden permitirse las grandes empresas y depurarlo es, bueno, prácticamente imposible.

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

Puedes mirar la comunidad de mineros de bitcoin. Ellos hacen hashes SHA256.

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

Por supuesto, esos bebés ASIC cuestan casi 2.000 dólares cuando se fabrican en serie, pero eso da una idea de cómo puede enfrentarse un "todoterreno" a un especialista.

La única pregunta es: ¿puede la FPGA suponer un mayor ahorro que el coste de su diseño? Por supuesto, en lugar de ejecutarlo en UN portátil, puedes probar a ejecutarlo en 20 PCS.

0 votos

El hashing es un muy Sin embargo, es un caso especial; ten en cuenta que las monedas basadas en scrypt son (deliberadamente) poco acelerables por hardware especializado.

1 votos

& La depuración de los ASIC se suele realizar en simulación antes de su envío a fabricación. Así que suelen pasar 6 meses o más desde la especificación hasta la fabricación. Diagnosticar los errores después de la fabricación es caro pero no imposible.

0 votos

Y aunque es difícil, de hecho puede ser muy muy difícil, hay cosas como el escaneo de límites, la prueba JTAG y las técnicas directas usando FIB, etc. Así que no es ni mucho menos imposible depurarlos, sólo hay que saber lo que se hace. Hoy en día ASIC se refiere más a un flujo de diseño (HDL, Síntesis, P&R) que a un dispositivo real ya que la mayoría de los dispositivos son ASIC's incluyendo cosas como los procesadores ARM.

5voto

Kamil Puntos 3745

Sí, la FPGA puede superar a la CPU moderna (como el Intel i7) en algunas tareas específicas, pero hay métodos más fáciles y baratos para mejorar el rendimiento de las redes neuronales.

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

  1. Utilice SSE - He visto implementaciones de redes neuronales bastante sencillas con un rendimiento 2-3 veces mayor. Esto puede ser una buena idea si no tienes una GPU dedicada en tu portátil.

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

  2. Utilice GPGPU (Computación de propósito general en unidades de procesamiento gráfico) - Creo que se puede archivar un aumento de rendimiento de 100-200x en una GPU de portátil de clase media como la GeForce 730M.

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

    El enfoque de la GPGPU es muy escalable, si en algún momento te das cuenta de que necesitas más potencia de cálculo, puedes utilizar un ordenador de sobremesa con una GPU más potente o incluso la Nvidia Tesla K80 con 4992 núcleos (que es cara).

1 votos

El problema aquí es definir el rendimiento. Si queremos decir más rápido, entonces sí, fpga puede ser más rápido que los cpus normales. Sin embargo, los fpga no son tan flexibles como las CPU, están diseñados para ejecutar eficientemente sólo una tarea predefinida. Ejecutar otra tarea significaría cambiar su cableado interno implementando realmente otro fpga

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X