Vitis コンパイラでは、カーネル引数のデータ型に基づいてカーネルおよびメモリ コントローラー間のユーザー データ幅を設定できます。ザイリンクスでは、データ スループットを最大にするため、ユーザーがメモリ コントローラーの全データ幅にマップされるデータ型を選択することをお勧めします。サポートされるアクセラレーション カードすべてのメモリ コントローラーで 512 ビットのユーザー インターフェイスがサポートされており、C/C++ 任意精度データ型 ap_int<512>
や int16
などの OpenCL ベクター データ型にマップできます。
メモリ インターフェイスの幅に関する考慮事項 に示すように、デフォルトでは、Vitis HLS ツールでカーネル インターフェイス ポートのサイズが最大 512 ビットまで変更され、バースト アクセスを向上するようになっています。次の図では、バースト AXI トランザクション (バースト長 16) およびパッケージ サイズ 512 ビット (バースト サイズ 64 バイト) です。
図 1. バースト AXI トランザクション
この例は、AXI データ幅を最大にした良いインターフェイス設定と、実際のバースト トランザクションを示しています。
インターフェイスを宣言するのに使用される複雑な構造体またはクラスがあると、メモリ レイアウトやデータ パッケージの違いにより、ハードウェア インターフェイスが複雑になることがあります。これにより、複雑なシステムでデバッグするのが困難な問題が発生する可能性があります。
推奨: カーネル引数には、32 ビット境界にパック可能なシンプルな構造体を使用することをお勧めします。構造体の使用に推奨される方法は、GitHub のザイリンクス オンボーディング例の kernel_to_gmem カテゴリの Custom Data Type Example を参照してください。