デバイスとのデータ転送を最適化 - 2020.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2021-03-22
Version
2020.2 Japanese

アクセラレーション アプリケーション、特に PCIe ベースのアプリケーションでは、データをホストからデバイスに転送する必要があります。これによりレイテンシが発生し、アプリケーションの全体的なパフォーマンスに悪影響をもたらすことがあります。

データが正しいタイミングで転送されないと、カーネルでそのデータを使用できるようになるまで待つ必要があるので、アプリケーションは遅くなります。このため、カーネルでデータが必要となる前に、データを転送しておくことが重要です。これには、デバイス カーネルを継続的に使用する で説明したように、データ転送とカーネル実行をオーバーラップさせる必要があります。上の図のシーケンスに示すように、この方法を使用すると、データ転送のレイテンシ オーバーヘッドを隠すことができ、データが準備されるのをカーネルが待つ必要がなくなります。

データ転送には、最適にサイズ指定されたバッファーを転送するという方法もあります。次の図に示すように、PCIe スループットは転送バッファー サイズによって大きく異なります。バッファーが大きいほど、スループットも良くなり、アクセラレータに常に演算する必要のあるデータが含まれるようになるので、無駄なサイクルがなくなります。通常は、データ転送を 1 MB 以上にすることをお勧めします。DMA テストを前もって実行しておくと、最適なバッファー サイズを判断するのに役立ちます。最適なバッファー サイズを判断する際は、大型バッファーを使用した場合のリソース使用率と転送レイテンシへの影響も考慮してください。

データ転送には、最適にサイズ指定されたバッファーを転送するという方法もあります。有効データ転送スループットは、転送するバッファーのサイズによって大きく異なります。バッファーが大きいほど、スループットも良くなり、アクセラレータに常に演算する必要のあるデータが含まれるようになるので、無駄なサイクルがなくなります。

次の図に示すように、PCIe ベースのシステムでは、データ転送を 1 MB 以上にすることをお勧めします。xbutil ユーティリティを使用して DMA テストを実行しておくと、最適なバッファー サイズを判断するのに役立ちます。詳細は、dmatest を参照してください。

図 1. バッファー サイズによる PCIe 転送のパフォーマンス

ザイリンクスでは、複数のデータ セットを 1 つのバッファーにまとめてできるだけ高いスループットを達成するようにすることをお勧めしています。