CU クラスターとマルチカードのサポート - 2023.2 日本語

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

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

ホスト マシンにアクセラレータ カードが 1 つしかない場合、VSC はそのカードを使用しようとします。カードがデザインをコンパイルしたプラットフォームに適合しない場合、致命的エラーが発生します。ただし、複数のカードがインストールされているホスト マシンでは、VSC はデフォルトで、デザインがコンパイルされたプラットフォームに正確に一致する最初のカードを選択します。ホスト コードは、次の 2 つの方法でデフォルトを上書きできます。

  • XILINX_SC_CARD 環境変数を目的の <cardIndex> に設定します。
  • ホスト コードから、ほかの呼び出しをする前に次の API を呼び出します。
    VPP_ACC call: my_acc::add_card(<cardIndex>)
ヒント: 複数のカードがインストールされている場合、インストールされているプラットフォームとプラットフォームの名前に不一致があると、VSC 用にコンパイルされたデザインではデフォルトのカードが識別されません。このような場合は、上記のようにカード インデックスを指定する必要があります。たとえば、xilinx_u2_gen3x4_xdma_gc_base_2 プラットフォームは、プラットフォームに互換性があっても、xilinx_u2_gen3x4_xdma_gc_2_202110_1 用にコンパイルされたデザインとは一致しません。

サポートされるプラットフォームとスタートアップの例sysc_multi_card の例に示すように、ホストに同一のアクセラレータ カードが含まれる場合は、複数のカードを使用して VSC アクセラレータを実行できます。これは、任意のカードのすべての CU が、次に説明するように、別の計算クラスターとして実行されているモードでサポートされます。

別の計算クラスター モードは、ローカルの smartSSD を搭載した U2 カードなどのシナリオでパフォーマンスを向上させるのに役立ちます。次のコード例では、CU クラスターを作成し、各クラスターにカードを割り当てます。その後、インデックス i に基づいてデータ選択を実行できます。選択したデータ i は同じ SSD 上にあるため、後続の compute() ジョブで自動的にカード i が使用されるようにします。

VPP_CC* cuCluster = new VPP_CC[ncards];
for (int i = 0; i < ncards; ++i) {
    my_acc::add_card(cuCluster[i], i);
}
for (int i = 0; i < ncards; ++i) {
    my_acc::send_while(
        [=]() -> bool {
            ... // data-i selection
        }
        , cuCluster[i]);
    my_acc::receive_all_in_order(
        [=]() {
           ...
       }
       , cuCluster[i]);
}
for (int i = 0; i < ncards; ++i) {
    my_acc::join(cuCluster[i]);
}