バースト データ転送の使用 - 2019.2 Japanese

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

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

データをバースト転送すると、メモリ アクセスのレイテンシが隠され、帯域幅の使用率およびメモリ コントローラーの効率が改善します。

バースト転送が発生すると、詳細なカーネル トレースに表示されるバースト率とバースト長の値が大きくなります。

図 1. 詳細なカーネル トレースに表示されるバースト データ転送

上の図では、AXI インターコネクトの後のメモリ データ転送も異なる方法でインプリメントされているのがわかります (トランザクション時間が短縮)。これらのトランザクション上にカーソルを置くと、AXI インターコネクトが 16 x 4 バイトのトランザクションを 1 つの 1 x 64 バイトのパッケージ トランザクションにパックしたことがわかります。この方が、AXI4 帯域幅がより効率的に使用されます。次のセクションでは、この最適化手法について詳細に説明します。

バースト インターフェイスはコーディング スタイルとアクセス パターンによって大きく異なります。ただし、次のコード例に示すように、データ転送と計算を分離すると、バースト検出が容易になり、パフォーマンスが改善します。

void kernel(T in[1024], T out[1024]) {
    T tmpIn[1024];
    T tmpOu[1024];
    read(in, tmpIn);
    process(tmpIn, tmpOut);
    write(tmpOut, out);
}

つまり、read 関数が AXI 入力から内部変数 (tmpIn) に読み込みを実行し、計算は内部変数 tmpIn および tmpOut に対して演算を実行する process 関数でインプリメントされ、write 関数は生成された出力を取り込んで AXI 出力に書き込みます。

計算から読み出し関数と書き込み関数を分離すると、次のようになります。

  • 読み出し/書き込み関数の制御構造 (ループ) がシンプルになり、バースト検出がシンプルになります。
  • AXI インターフェイスから計算関数を分離すると、可能なカーネル最適化が単純になります。詳細は、カーネル最適化 を参照してください。
  • 内部変数はオンチップ メモリにマップされるので、AXI トランザクションよりも高速にアクセスできます。Vitis コア開発キットでサポートされるアクセラレーション プラットフォームには最大 10 MB のオンチップ メモリがあり、パイプ、ローカル メモリ、およびプライベート メモリとして使用できます。これらのリソースを効率的に使用することで、アプリケーションの効率およびパフォーマンスを大幅に向上できます。