Complejidad de tiempo para la implementación de correlación en FPGA

1

Digamos que tenemos una base de datos de cinco mil señales discretas de 512 puntos . Cada entrada de base de datos es única en sí misma. El punto importante a tener en cuenta sobre las señales en la base de datos es que de los 512 puntos, más de la mitad de los puntos son cero para todas las señales. Ahora, capturamos una señal discreta de 512 puntos desde el exterior (los detalles no son importantes). Esta señal corresponde a una de las señales en las cinco mil entradas de la base de datos. Yo comparo la señal adquirida tomando la Correlación de Spearman de la señal adquirida con cada una de las cinco mil señales y la entrada que da el mayor coeficiente de correlación es la más cercana y representa la señal adquirida. Esta operación de correlación, especialmente la correlación de 512 puntos, consume mucho tiempo en MATLAB. Obviamente, hay una latencia en la PC, que es la principal razón para el consumo de tiempo. El tiempo consumido es de 2.3 segundos en promedio para calcular la correlación de la señal adquirida con cada uno de los 5000 entradas de la base de datos.

Ahora, digamos que quiero implementar la cosa exacta en un FPGA (Familia Virtex-7 Xilinx). Creo que la operación de correlación se puede hacer en paralelo porque la señal adquirida es solo una y las entradas de la base de datos se pueden almacenar en el FPGA. Por lo tanto, no todas las 5000 señales pueden correlacionarse en paralelo, sin embargo, si al menos 1000 pueden correlacionarse en paralelo, entonces el tiempo se reducirá considerablemente en el FPGA. Por lo tanto, mi pregunta es cuántas señales podría correlacionar al mismo tiempo en este FPGA y cuál será el tiempo aproximado tomado para esta correlación de 512 puntos en total si se implementa en este FPGA.

    
pregunta Deval Mehta

2 respuestas

2

Si asumimos 2 bytes por punto de muestra (16 bits), entonces tiene aproximadamente 5 MB de datos de la base de datos, lo que prácticamente obliga a la memoria externa a mantenerla en todos los FPGA más grandes. La interfaz de memoria externa será el paso que limita la velocidad en el proceso de correlación.

Si tiene un número de chips de memoria DDR, podría tener una interfaz que tenga, digamos, 64 bits de ancho y 200 MHz aproximadamente, lo que le da un ancho de banda sin formato de 3.2 GB / segundo. Esto le permite escanear a través de su base de datos en menos de 2 ms.

Luego, solo debes asegurarte de tener suficiente lógica paralela para calcular tu correlación tan pronto como ingresen los datos. No estoy lo suficientemente familiarizado con los detalles de la correlación de Spearman para ofrecerte sugerencias.

    
respondido por el Dave Tweed
1

Sin saber más sobre su aplicación, está bastante claro que el problema está en MATLAB, no en la PC. Según su descripción, su algoritmo de procesamiento es terriblemente ineficiente, y un replanteamiento del software puede ahorrarle mucho tiempo, esfuerzo y dinero.

Considere una correlación de Spearman. En lugar de correlacionar 2 matrices de datos, x () y y (), realiza la operación $$ C = 1- \ frac {6 \ Sigma (Rx-Ry) ^ 2} {n (n-1)} $$ donde Rx y Ry son los rankings en las matrices x y y. Es decir, su orden en una lista ordenada.

Entonces, cuando MATLAB intenta calcular la suma, primero tiene que ordenar los arreglos de 5001, 512 elementos y generar una lista de clasificación para cada arreglo, y esto requiere mucho tiempo. Como ilustración, al usar un Basic compilado solo se necesitan unos 10 ms para realizar el núcleo de forma múltiple acumulada en 5000 arrays de 512 muestras en mi máquina, produciendo una matriz de resultados de 5000 elementos.

Esto es una gran pérdida de tiempo, ya que 5000 de 5001 arreglos pueden ser precomputados, ya que no cambian entre ejecuciones.

Entonces, en lugar de usar MATLAB y forzarlo bruscamente, comience clasificando sus 5000 matrices de referencia y genere una matriz de clasificación correspondiente para cada una. Solo necesita hacerlo una vez, utilizando estas matrices de clasificación precomputadas cada vez que evalúe una nueva matriz de datos.

Cuando obtenga una nueva matriz de datos, ordénela y genere una matriz de clasificación, luego realice su cuadratura / acumulación. Esto llevará mucho menos tiempo que su enfoque actual.

También tenga en cuenta que, dependiendo de lo que haga con sus correlaciones, es posible que no necesite hacer la división o la resta de todas las correlaciones. Por ejemplo, si solo está interesado en las 10 mejores correlaciones, puede ordenar los resultados de MAC, elegir los 10 mejores y luego realizar sus cálculos finales.

Todo esto se puede interpretar como una sugerencia de que, en lugar de publicarlo en EE SE, podría considerar intentarlo con Computational Science SE y pedir formas de acelerar sus cálculos.

    
respondido por el WhatRoughBeast

Lea otras preguntas en las etiquetas