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

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

Document ID
UG1393
Release Date
2022-03-29
Version
2021.1 Japanese

データをバースト転送すると、メモリ アクセスのレイテンシは表示されず、帯域幅の使用およびメモリ コントローラーの効率が改善されます。HLS レポートでバースト情報も確認してください。

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

図 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 出力に書き出しますバーストの詳細は、 『Vitis 高位合成ユーザー ガイド』 (UG1399) を参照してください。

計算結果からの read および write 関数を分離すると、次のようになります。

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