メモリ インターフェイスの幅に関する考慮事項 - 2019.2 Japanese

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

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

グローバル メモリとカーネルの間の最大データ幅は 512 ビットです。データ転送レートを最大にするには、この最大データ幅を使用することをお勧めします。最大ビット幅を利用するには、カーネル コードを変更する必要があります。

上記の例では、ネイティブの整数型が使用されているので、データ転送に最大帯域幅は使用されません。データ型に説明されているように、任意精度型 ap_int または ap_uint を使用すると、ビット精度の高いデータ幅を達成できます。

void cnn( ap_uint<512> *pixel, // Input pixel
  int *weights, // Input Weight Matrix 
  ap_uint<512> *out, // Output pixel
  ... // Other input or output ports
		   
#pragma HLS INTERFACE m_axi port=pixel offset=slave bundle=gmem
#pragma HLS INTERFACE m_axi port=weights offset=slave bundle=gmem
#pragma HLS INTERFACE m_axi port=out offset=slave bundle=gmem

上記の例では、ap_uint データ型を使用した出力 (out) インターフェイスにより、512 ビットの最大転送幅が使用されるようになっています。

メモリ インターフェイスのデータ幅は 2 のべき乗で指定する必要があります。データ幅が 32 未満の場合は、ネイティブ C++ データ型を使用します。32 を超え、2 のべき乗で増加していく場合は、ap_int/ap_uint を使用します。