大変有益な記事が多く、いつも参考にさせていただいてます。
早速ですが、PYNQ を使って Python で手軽に FPGA を活用の第五回における「PL → PS の性能の目安を知っておこう」関してですが、4.5MBpsという数値をみて、そんなマイコンのような速度ではないだろうと思い検証実験を行いました。
for l in range(LOOP):
# 測定の本体
input_buffer = allocate(shape=(SIZE//4,), dtype=np.uint32) ←この行
output_buffer = allocate(shape=(SIZE//4,), dtype=np.uint32) ←この行
dma.sendchannel.transfer(input_buffer)
dma.recvchannel.transfer(output_buffer)
となっておりましたが、ループ内で毎回メモリ領域を確保しているので、かなり実際の転送速度より遅くなっていると思います。
私はPYNQ-Zシリーズを持っておらず、Ultra96ーV2で検証を行いました。結果は以下の通りです。
ループ内メモリ確保:7.48074647765804 MBps
最初に1度だけメモリ確保:25.72652065440237 MBps
ループ内でアロケーションした場合と、ループの外でアロケーションした場合を比較すると、ループ内でのアロケーションの場合の方が70パーセント程度速度が劣化しました。
またバッファのサイズとメモリ転送速度にも大きく関連性があります。
DMAの速度は皆様参考にする重要な数値だと思いますので、是非再計測していただきたいです。