¿Qué tipo de algoritmo SLAM es adecuado para una aceleración con FPGA o FPGA-SoC?

Exploré este problema exacto en mi tesis de maestría, Evaluación de un SoC para 3D SLAM en tiempo real.

Consideré muchos de los factores presentados en la excelente respuesta de Sharad Sinha. Finalmente elegí acelerar la porción de búsqueda de vecinos más cercana del algoritmo Iterative Closest Point después de la creación de perfiles. Este es un componente clave en muchos problemas de localización y alineación 3D, y a menudo es un cuello de botella en el rendimiento.

Implementé una arquitectura de matriz sistólica para realizar una búsqueda de distancia mínima canalizada para lotes de 110 puntos. Este diseño finalmente resultó en una aceleración de 13.74x sobre el vecino ARM de punto fijo más cercano.

Mis objetivos de diseño eran agrupar tantos puntos como fuera posible para reducir la sobrecarga de E / S y maximizar el uso de los segmentos DSP presentes en el FPGA (estos son necesarios para multiplicar y agregar operaciones).

Hay mucho más que puedes hacer para investigar SLAM en FPGA o SoC. Mi diseño estaba implementando un algoritmo SLAM muy básico que no era adecuado para usar fuera de la investigación. El ICP punto a punto no es la mejor manera de avanzar, y se ha demostrado que los mejores algoritmos que utilizan la alineación punto a plano o SDF a SDF funcionan mucho mejor.

¡La mejor de las suertes!

Hay tantos algoritmos SLAM que no sería posible sugerir cuáles pueden acelerarse en FPGA o FPGA-SoC sin hacer una verdadera experimentación y prueba.

Sin embargo, le daré algunas pautas que puede usar para decidir cuáles pueden beneficiarse más de la aceleración basada en FPGA. Estas pautas son aplicables a cualquier algoritmo en cualquier campo que se esté considerando para la aceleración de hardware:

1. Examine el control y el flujo de datos en un algoritmo SLAM. Vea si uno o ambos pueden ser paralelos. Los FPGA ofrecen un paralelismo espacial inmenso y si puede combinarlo con la canalización (que ofrece paralelismo temporal), su implementación puede ejecutarse bastante rápido.

2. Examine la cantidad de cálculo en un algoritmo SLAM. El número de dichos cálculos y su tipo (punto fijo, punto flotante, entero) pueden afectar el rendimiento en FPGA. Los FPGA no son muy buenos en aritmética de coma flotante, aunque algunos dispositivos muy recientes parecen funcionar bien, pero son caros. Los FPGA son buenos para la aritmética de punto fijo y entero. Use la gran cantidad de bloques DSP incrustados en el FPGA para realizar estos cálculos e intente programar tantos como sea posible en paralelo y luego su implementación puede volver a ser rápida.

3. Examine el patrón de acceso a la memoria de un algoritmo SLAM. ¿Realiza muchas operaciones de almacenamiento de carga y con frecuencia accede a una gran cantidad de datos (muchos MB, por ejemplo)? Tales algoritmos pueden no beneficiarse mucho de los FPGA. Aunque los FPGA modernos tienen una gran cantidad de memoria en el chip (varios KB, sí, no varios MB), no es fácil realizar operaciones frecuentes de lectura y escritura en varias ubicaciones de memoria. La mayoría de los FPGA admiten memorias de doble puerto en el chip, pero si su algoritmo necesita memorias de múltiples puertos, debe implementarlas utilizando estas memorias de doble puerto. Esto puede ser costoso en términos de recursos y enrutamiento, lo que puede afectar el rendimiento de un diseño. Por otro lado, si su algoritmo va a depender del tráfico de datos del DDR sin chip, está bien. Los FPGA admiten todo tipo de DDR y todo lo que necesita hacer es implementar un buen controlador DDR en el FPGA.

4. Si está trabajando con un FPGA-SoC como Zynq, nuevamente, la mayor parte de la aceleración de hardware vendrá del lado de la Lógica Programable (PL) de Zynq. Deberá dividir cuidadosamente su algoritmo para que la parte que se ejecuta en los procesadores ARM pueda explotar al máximo las características de ARM, incluida la FPON NEON, y la parte que se ejecuta en PL esté muy paralela. Puede leer Xilinx UG1145 (Análisis de rendimiento del sistema) para comprender más sobre esta parte.