グローバル メモリとカーネルの間の最大データ幅は 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
を使用します。