HBM の設定と使用 - 2023.2 日本語

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

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

アルゴリズムの中にはメモリ限界のあるものもあり、DDR ベースの Alveo カードで使用可能な帯域幅 77 Gb/s に制限されます。これらのアプリケーションには、広帯域幅メモリ (HBM) ベースの Alveo カードがあり、最大 460 Gb/s のメモリ帯域幅がサポートされます。Alveo のインプリメンテーションでは、2 つの 16 層の HBM (HBM2 仕様) スタックが FPGA パッケージに組み込まれ、インターポーザーを使用して FPGA ファブリックに接続されます。次に、2 つの HBM スタックの概略図を示します。

図 1. 2 つの HBM スタックの概略図

このインプリメンテーションには、次が含まれます。

  • 『Alveo U55C データセンター アクセラレータ カード データシート』 (DS978) に示すように、Alveo U55C アクセラレータ カードの場合は、512 MB の疑似チャネル (PC) を使用した 16 GB の HBM
  • 『Alveo U50 データセンター アクセラレータ カード データシート』 (DS965) に示すように、Alveo U280 アクセラレータ カードの場合は、256 MB の PC を使用した合計 8 GB の HBM
  • セグメント化されたクロスバー スイッチ ネットワークを介した Vitis カーネルと HBM PC 間の通信用の独立した AXI チャネル
  • 2 つの PC のアドレス指定用の 2 チャネルのメモリ コントローラー
  • PC 1 つあたり最大 14.375 Gb/s の理論上の帯域幅
  • HBM サブシステムの理論上の最大帯域幅 460 Gb/s (32 × 14.375 Gb/s)

各 PC の理論上の最大パフォーマンスは 14.375 Gb/s ですが、これは DDR チャネルの理論上の最大パフォーマンスである 19.25 Gb/s を下回ります。DDR パフォーマンスよりも優れたパフォーマンスにするには、HBM サブシステムに複数の AXI マスターを効率的に統合する必要があります。プログラマブル ロジックには、32 個の HBM AXI インターフェイスがあり、ビルトイン スイッチ ネットワークを介して HBM スタックの PC のどのメモリ ロケーションにもアクセスできるので、メモリ空間にフル アクセスができます。

HBM への接続は HBM Memory Subsystem (HMSS) IP で管理され、すべての HBM PC がイネーブルにされ、XDMA が自動的に HBM (ホスト アクセス用) からグローバル メモリに接続されます。Vitis コンパイラと使用すると、HMSS は --connectivity.sp オプションで指定した必要なメモリ コントローラーとポートのみをアクティベートするように自動的にカスタマイズされ、ユーザー カーネルと XDMA の両方をメモリ コントローラーに接続して、帯域幅とレイテンシが最適になるようにします。

注記: ビルトイン スイッチ ネットワークの複雑性および柔軟性のため、特定のメモリ ロケーションまたはスイッチ ネットワークで密集が発生するインプリメンテーションが多数あります。読み出しトランザクションと書き込みトランザクションをインターリーブすると、メモリ コントローラーのタイミング パラメーター (バス ターンアラウンド) が原因で、読み出しのみまたは書き込みのみと比較して効率が低下します。両方の HBM スタックにまたがる書き込みトランザクションもパフォーマンスが低下するため、回避する必要があります。カーネルが限られたメモリにアクセスするようメモリ アクセスを設計し、異なるカーネルのメモリ アクセスを異なる HBM PC に隔離するようにカーネル接続を設定することが重要です。
カーネルを HBM PC に接続する --connectivity.sp オプションは次のとおりです。
sp=<compute_unit_name>.<argument>:<HBM_PC>

次のコンフィギュレーション ファイルの例では、カーネル入力ポートの in1in2 がそれぞれ HBM PC 0 と 1 に接続され、出力バッファー outHBM PC 3 ~ 4 に接続されています。

[connectivity]
sp=krnl.in1:HBM[0]
sp=krnl.in2:HBM[1]
sp=krnl.out:HBM[3:4]

HBM PC は 256 MB で、このカーネルのメモリ アクセスは合計 1 GB です。詳細および例については、HBM チュートリアルの使用を参照してください。

ヒント: コンフィギュレーション ファイルは、カーネル引数の 1 つまたは複数の HBM PC へのマッピングを指定します。複数の PC にマッピングする場合、各 AXI インターフェイスは、使用可能な 32 個の HBM PC の連続したサブセットにのみアクセスする必要があります (例: HBM[3:7])。
カーネル引数と指定した PC 間の接続をインプリメントする場合、HMSS は擬似チャネル番号または範囲内で、スイッチ ネットワーク内の適切なチャネルを自動的に選択して、AXI スレーブ インターフェイス ポートを接続し、メモリにアクセスし、帯域幅を最大にし、レイテンシを最小にします。ただし、HBM--connectivity.sp の構文でも、HMSS がカーネル インターフェイスの接続に使用するスイッチ ネットワークのチャネル インデックスを指定できます。スイッチ ネットワーク インデックスを指定する --connectivity.sp 構文は、次のとおりです。
sp=<compute_unit_name>.<argument>:<bank_name>.<index> 

スイッチ インデックスを指定する場合、sp オプションごとにインデックスを 1 つだけ指定できます。コンフィギュレーション ファイル内の別の sp オプションまたは行で既に使用されているインデックスは再利用できません。

この場合、上の図に示すように、スイッチ チャネル 3 (S_AXI03) を使用する場合は sp=krnl.out:HBM[3:4].3、スイッチ チャネル 4 (S_AXI04) を使用する場合は sp=krnl.out:HBM[3:4].4 のように、前の例の最後の行を書き換えます。

どちらの sp オプションも、カーネルのデータ トランザクションを左端のネットワーク スイッチ ブロックの 1 つを介して配線し、インプリメンテーションの複雑さを軽減します。0~7 の範囲のいずれかのインデックスを使用すると、ネットワーク内で最も左にある 2 つのスイッチ ブロックのいずれかが使用されます。ほかのインデックスを使用すると、スイッチ ブロックが追加されるため、配線が複雑になり、アプリケーションによってはパフォーマンスに悪影響を及ぼす可能性があります。

HBM ポートは、デバイスの 1 番下の SLR にあります。SSI テクノロジ デバイスの SLR (Super Logic Region) をまたぐ AXI インターフェイスの配置とタイミングの複雑性は、HMSS により自動的に処理されます。デフォルトでは、v++--connectivity.sp または --connectivity.slr オプションを指定せずに、すべてのカーネル AXI インターフェイスが HBM[0] にアクセスし、すべてのカーネルが SLR0 に割り当てられます。

ただし、--connectivity.slr オプションを使用すると、カーネルの SLR 割り当てを指定できます。複数の SLR を使用するデバイスまたはプラットフォームの場合は、特定の SLR への CU 割り当てを定義することを強くお勧めします。詳細は、Alveo アクセラレータ カードでの演算ユニットの SLR への割り当て を参照してください。