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

Digamos que tenemos una base de datos de cinco mil señales discretas de 512 puntos . Cada entrada de la 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 importan). Esta señal corresponde a una de las señales en las cinco mil entradas de la base de datos. Comparo la señal adquirida tomando la Correlación de Spearmande la señal adquirida con cada una de las cinco mil señales y la entrada que da el coeficiente de correlación más alto 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 latencia en la PC, que es la razón principal del consumo de tiempo. El tiempo consumido es de 2,3 segundos de media para calcular la correlación de la señal adquirida con cada una de las 5000 entradas de la base de datos.

Ahora, digamos que quiero implementar exactamente lo mismo en un FPGA (Virtex-7 Xilinx Family). 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 la FPGA. Por lo tanto, no todas las 5000 señales se pueden correlacionar en paralelo, sin embargo, si al menos 1000 se pueden correlacionar en paralelo, entonces el tiempo se reducirá considerablemente en el FPGA. Entonces, mi pregunta es cuántas señales podría correlacionar a la vez en este FPGA y cuál será el tiempo aproximado que tomará esta correlación de 512 puntos en total si se implementa en este FPGA.

Primero calcule los requisitos de almacenamiento y fije el precio de un FPGA con el almacenamiento interno necesario. O determine qué tan rápido puede transmitir las 5000 señales desde la memoria externa (SRAM, SDRAM, DDR, etc.).

Respuestas (2)

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

Si tiene varios chips de memoria DDR, podría tener una interfaz de, digamos, 64 bits de ancho funcionando a 200 MHz aproximadamente, lo que le brinda un ancho de banda bruto de 3,2 GB/segundo. Esto le permite escanear a través de su base de datos en menos de 2 ms.

Luego, solo necesita asegurarse de tener suficiente lógica paralela para calcular su correlación tan rápido como llegan los datos. No estoy lo suficientemente familiarizado con los detalles de la Correlación de Spearman para ofrecer sugerencias allí.

Sin saber más sobre su aplicación, es 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() e y(), realiza la operación

C = 1 6 Σ ( R X R y ) 2 norte ( norte 1 )
donde Rx y Ry son las clasificaciones en los arreglos x e y. Es decir, su orden en una lista ordenada.

Entonces, cuando MATLAB intenta calcular la suma, primero tiene que clasificar 5001 arreglos de 512 elementos y producir una lista de clasificación para cada arreglo, y esto lleva mucho tiempo. A modo de ilustración, al usar un Basic compilado, solo se necesitan alrededor de 10 ms para realizar las acumulaciones de multiplicación principales en 5000 matrices de 512 muestras en mi máquina, lo que produce una matriz de resultados de 5000 elementos.

Esta es una gran pérdida de tiempo, ya que se pueden precalcular 5000 de 5001 matrices, ya que no cambian entre ejecuciones.

Entonces, en lugar de usar MATLAB y aplicar fuerza bruta, 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 precalculadas cada vez que evalúa una nueva matriz de datos.

Cuando obtenga una nueva matriz de datos, ordénela y produzca una matriz de clasificación, luego realice su elevación al cuadrado/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 para todas las correlaciones. Por ejemplo, si solo está interesado en las 10 mejores correlaciones, puede ordenar los resultados de MAC, elegir las 10 mejores y luego hacer sus cálculos finales.

Todo esto puede interpretarse como una sugerencia de que, en lugar de publicar en EE SE, podría considerar probar Computational Science SE, preguntando formas de acelerar sus cálculos.