Basado en el ejemplo en aquí , probé un ejemplo muy similar (pero en lugar de multiplicar dos matrices simplemente multiplico todos los elementos en una matriz por 2.0).
Sin embargo, al comparar los resultados de multiplicar una matriz de 32x32 por 2.0 en el ARM (después de la optimización -O3) con los resultados en el Hardware (es decir, en el lado del FPGA) noté que el primero me llevó 1425 ciclos de reloj donde el segundo Tomó 3654 ciclos de reloj. Entonces, básicamente, el FPGA es casi 3 veces más lento. ( accelaration_factor
= 0.389)
Vea esto para verificar los factores de accelaración de los que estoy hablando en el ejemplo de matriz.
Ya intenté cambiar el puerto que conecta el ARM y el bloque DMA AXI a HP en lugar de ACP y los resultados son los mismos.
También estoy usando AXI DMA para transferir datos rom y al DDR y medí la transferencia MM2S (Memory-Mapped to Stream) a 1343 ciclos de reloj para transferir 4096 bytes, lo que resulta en una transferencia de 290.8 Mbytes / segundo. La transferencia S2MM a su vez tiene una velocidad de 167.2 MBytes / s porque transfirió 4096 bytes en 2336 ciclos de reloj.
Tengo varias preguntas en las que espero que puedas ayudar:
-
¿Por qué mi diseño de FPGA es más lento que el ARM al multiplicar una matriz por 2.0 pero no al multiplicar dos matrices?
-
¿Te parecen bien estas velocidades de DMA AXI? Al compararlos con el el video de Sadri parece que puedo transferirlo más rápido. ¿Qué puedo hacer para mejorar estas velocidades de transferencia?
-
Vi en alguna parte que se espera que las transferencias de S2MM sean más lentas que las transferencias de MM2 en el Zedboard. ¿Puede decirme por qué y si esta gran diferencia tiene sentido?
-
Medí el tiempo en mi PC para hacer una multiplicación de matriz de 32x32 por 2.0 y es de 3.84x10⁽⁻⁶⁾ segundos. Sabiendo que la misma multiplicación toma 1.42x10⁽⁻⁵⁾ y la FPGA una 3.85x10⁽⁻⁵⁾, se puede notar que la CPU es casi 4 veces más rápida que la ARM y casi 10 veces más rápida que la FPGA. Si mi objetivo era diseñar un modelo de FPGA que abarcara software, ¿por qué estoy tan lejos cuando sigo un ejemplo?
Nota: Mi frecuencia es de 100 MHz, por lo que cada ciclo de reloj es de 10 ns.