4 votos

Análisis estadístico de series temporales con FPGA

Supongamos que tengo dos series temporales, como las valoraciones de las acciones o el diagnóstico radiactivo, para las que necesito cosas como las covarianzas (problema QP), entre otras cosas. Los cálculos de covarianza deben ser fáciles de acelerar - las etapas futuras no dependen de este último. ¿Puedo hacer este tipo de problemas en tiempo constante en FPGA? -Si he entendido bien, sí. ¿Qué otras cosas de análisis estadístico -toolbox puede acelerar considerablemente con FPGA? ¿Todo lo que no depende de la última etapa? Mira, si mi pensamiento es correcto, debe haber un potencial masivo aquí -- ¿podría alguien ayudarme a encontrar proyectos especializados en el análisis de series temporales con FPGAs?

8voto

Jamie Macaulay Puntos 16

En teoría, podrías hacerlo en tiempo constante, pero sólo hasta que te quedes sin recursos. Vamos a considerar sólo las multiplicaciones por hardware por ahora, ya que probablemente limitarán el diseño. Por ejemplo, el mayor Xilinx Spartan-6 (la línea de valor) contiene 180 multiplicadores; el mayor Virtex-6 contiene 2128 multiplicadores (y probablemente costará decenas de miles). Se trata de multiplicadores de 18 bits, pero por el bien del argumento, trátalos como abstracciones. El número de multiplicadores te da entonces el número de multiplicaciones que puedes hacer a la vez. Si entiendo bien el problema, la raíz cuadrada de ese número te da el conjunto de datos que puede ejecutarse en un ciclo de reloj.

En la práctica, hay que preocuparse por las sumas/restas, la precisión requerida reducirá la cantidad de multiplicaciones que se pueden hacer y las conexiones que habrá que hacer en el tejido de la FPGA serán muy densas. Todos estos factores reducen la velocidad máxima a la que se puede programar la FPGA. Además, hay que meter y sacar los datos de la FPGA. Por lo tanto, mi intuición es que esto no es una "aplicación asesina" para las FPGAs. Los procesadores convencionales y las GPUs son probablemente una mejor apuesta. (Véase R+GPU .)

6voto

Simon Gillbee Puntos 366

Sí, se pueden hacer en tiempo constante en una FPGA, pero sólo para un valor de \$n\$ limitado por el número de puertas de su FPGA. Estás malinterpretando o tergiversando la definición de \$O(n^2)\$ - Todo lo que se puede hacer en paralelo se puede hacer \$O(1)\$ para un valor pequeño y finito de \$n\$ mediante la implementación en una CPU multinúcleo, una tarjeta gráfica, una FPGA o un conjunto de superordenadores en red.

Vamos a trabajar con su ejemplo de calcular las covarianzas de las acciones. Hay aproximadamente 3500 acciones en la Bolsa de Nueva York en este momento, así que vamos a construir el sistema para soportar 4096 elementos.

En una CPU de un solo núcleo, eso requeriría \$\left(2^{12}\right)^2 = 2^{24} \approx 16,000,000\mbox{ }\$ cálculos (que es no mucho tiempo, considere que una CPU de 4GHz puede hacer eso 250 veces por segundo), porque el algoritmo es \$O(n^2)\$ como se ha dicho antes.

Si tuvieras una CPU de 4096 núcleos, ignorando las ineficiencias, podrías hacer esto en 4096 instrucciones. Simplemente has dividido el número de operaciones por el número de núcleos paralelos en los que realizar las operaciones.

Si tuvieras un algoritmo FPGA que pudiera calcular la covarianza de 4096 elementos simultáneamente, y espacio en la FPGA para ensamblar 4096 de estos bloques, teóricamente podrías calcular la covarianza de 4096 elementos o menos en una sola operación.

Que no lo hace significa que el algoritmo es ahora \$O(1)\$ significa que has dividido \$n\$ por \$2^{24}\$ . El algoritmo sigue siendo \$O(n^2)\$ . Las FPGAs son geniales para algunas tareas, pero no son mágicas.

2voto

Martin Thompson Puntos 6509

Sí, si no hay dependencias de datos, entonces debería ser una aceleración fácil. Pero será un speedup fácil para cualquier otro tipo de paralelismo (como el uso de la GPU o SSE) y probablemente encontrará que pueden vencer a una FPGA en la mayoría de las aplicaciones para eso.

Para problemas suficientemente grandes puede ser capaz de construir una implementación de menor potencia o mayor rendimiento en la FPGA, pero no olvide tener en cuenta la potencia y el tiempo necesarios para llevar los conjuntos de datos de un procesador a la FPGA y obtener los resultados de nuevo.

FPGAs de una plaza puede obtener aumentos de velocidad espectaculares con respecto a otras implementaciones es cuando hay mucho paralelismo y se sabe mucho sobre cómo se modelan los accesos a la memoria y un controlador de caché del procesador no puede "ver" esos patrones. Puedes aprovechar esto para programar los accesos a la memoria y asegurarte de que el bus de memoria nunca esté inactivo (o vaciando cosas que va a necesitar en un futuro próximo)

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