AMD では、FPGA をコアとして使用する PCIe データセンター アクセラレータ カードの Alveo ファミリを開発しました。各 Alveo カードは、アクセラレーション用の FPGA、広帯域幅デバイス メモリ バンク、高帯域幅の PCIe Gen3x16 リンクを介するホスト サーバーへの接続の 3 つの基本エレメントで構成されています。カードの種類は多く、さまざまな機能とプログラマブル リソースの数を選択できまるようになっています。次は、Alveo U250 のブロック図です。
FPGA は基本的には電源投入時にコンフィギュレーションされるブランク デバイスですが、すべての Alveo カードには、特定の用途に合わせてアクセラレータ カードをコンフィギュレーションするためのファームウェアを提供するターゲット プラットフォームが含まれます。プラットフォームは、ザイリンクス ランタイム (XRT) と一緒にインストールする必要があり、インストール時またはアクセラレータ カードの構成を変更するときに、デバイスに書き込む必要があります。
AMD デバイスでは、プラットフォームは「Shell」と「Users」の 2 つの物理 FPGA パーティションで構成されます 。Shell パーティションはスタティック領域であり、PCIe 接続、ボード管理、センサー、クロッキング、リセットなどのプラットフォームの基本インフラストラクチャを提供します。User パーティションは、実行中に XRT によってロードされる .xclbin というユーザー コンパイル バイナリを含むダイナミック領域です。RTL カーネルは、開発者が作成してダイナミック領域にプログラムするカスタム ロジックです。この資料では、カーネルは Alveo アクセラレータ カードのダイナミック領域にインプリメントする関数のことです。
PCIe インタフェースは、ホストとアクセラレータ カード間の通信、およびホストから Alveo カードのデバイス メモリへのデータ転送に使用されます。このデバイス メモリはグローバル メモリとして機能し、ホスト アクセラレータとハードウェア アクセラレータの両方からアクセスできます。Alveo プラットフォームに含まれれるデバイス メモリには、PLRAM (サイズは小さいが最短レイテンシで高速アクセスが可能)、HBM (中程度のサイズで多少のレイテンシあり)、DDR (サイズは大きいがレイテンシは最長になるので低速アクセス) などが含まれます。Alveo カードによっては、DDR または HBM、あるいはその両方が使用されている場合があります。
上図の U250 のブロック図は、それぞれ 16 GB のメモリを備えた 4 バンクの DDR を示しています。Alveo カード上の FPGA は、さらに複数の SLR (Super Logic Region) に分かれており、高パフォーマンス デザインのアーキテクチャで有益です。プラットフォームのダイナミック領域にインプリメントするための RTL カーネルを開発する際には、SLR およびグローバル メモリのデザイン制約を管理する必要があります。
FPGA には、パフォーマンスをさらに向上させ、DDR メモリへのアクセスを最小限に抑えるために、多数の小さな内部 RAM ブロックがあります。これらは、コンパイラで完全にコンフィギャラブルで、タスク間でバッファリングを作成してパイプライン形式の計算を可能にします。これにより、キャッシュが不要になるので、FPGA の主な強みの 1 つとなります。
FPGA のアーキテクチャと Alveo カードについては、さらに多くの詳細情報がありますが、入門的な目的にはこれで十分です。FPGA ベースのアクセラレーション アーキテクチャを設計するという観点から言えば、重要な点は次のとおりです。
- PCIe 上でのデータ転送はコストがかかり、Gen3x16 であってもレイテンシが長くなります。大量のデータ転送では、帯域幅がシステムのボトルネックになる可能性があります。
- DDR4 と FPGA 間の転送は、PCIe 上での転送と比較して帯域幅およびレイテンシの面ではかなり良いですが、外部メモリを使用すると、全体的なシステム パフォーマンスに影響します。