アルゴリズムの中にはメモリ限界のあるものもあり、DDR ベースの Alveo カードで使用可能な帯域幅 77 GB/s に制限されます。これらのアプリケーションには、HBM (広帯域幅メモリ) ベースの Alveo カードがあり、最大 460 GB/s のメモリ帯域幅がサポートされます。Alveo のインプリメンテーションでは、2 個の 16 層の HBM (HBM2 仕様) スタックが FPGA パッケージに組み込まれ、インターポーザーを使用して FPGA ファブリックに接続されます。次に、2 つの HBM スタックの概略図を示します。
このインプリメンテーションには、次が含まれます。
- 8 GB の HBM メモリ
- 32 個の 256 MB の HBM セグメント (擬似チャネル (PC) と呼ばれる)
- 独立した AXI チャネル (疑似チャネルごとにセグメント分割されたクロスバー スイッチを介して FPGA と通信)
- 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 のどのメモリ ロケーションにもアクセスできるので、8 GB メモリ空間全体にアクセス可能です。HBM の詳細は、 『AXI High Bandwidth Controller LogiCORE IP 製品ガイド』 (PG276) を参照してください。
HBM への接続は HBM Memory Subsystem (HMSS) IP で管理され、すべての HBM PC がイネーブルにされ、XDMA が自動的に HBM (ホスト アクセス用) からグローバル メモリに接続されます。Vitis コンパイラと使用すると、HMSS は --connectivity.sp
オプションで指定した必要なメモリ コントローラーとポートのみをアクティベートするように自動的にカスタマイズされ、ユーザー カーネルと XDMA の両方をメモリ コントローラーに接続して、帯域幅とレイテンシが最適になるようにします。詳細および例については、HBM チュートリアルの使用を参照してください。
次の設定ファイルの例では、カーネル入力ポートの in1
と in2
がそれぞれ HBM PC 0 と 1 に接続され、出力バッファー out
が HBM PC 3 ~ 4 に書き込まれています。各 HBM PC は 256 MB で、このカーネルのメモリ アクセスは合計 1 GB です。
[connectivity]
sp=krnl.in1:HBM[0]
sp=krnl.in2:HBM[1]
sp=krnl.out:HBM[3:4]
HBM ポートは、デバイスの 1 番下の SLR にあります。SSI テクノロジ デバイスの SLR (Super Logic Region) をまたぐ AXI インターフェイスの配置とタイミングの複雑性は、HMSS により自動的に処理されます。デフォルトでは、v++
で --connectivity.sp
または --connectivity.slr
オプションを指定せずに、すべてのカーネル AXI インターフェイスが HBM[0] にアクセスし、すべてのカーネルが SLR0 に割り当てられます。ただし、--connectivity.slr
オプションを使用すると、カーネルの SLR 割り当てを指定できます。詳細は、計算ユニットの SLR への割り当て を参照してください。