Agilex サーバの利用方法

注意事項

  • Agilex サーバーは試験的な暫定運用です。
  • 使用前の予約は不要ですが、他の人と利用がバッティングする可能性もあります。
  • Agilex 用の BSP および Quartus など一式の開発環境は ACRi ルーム内でのみ利用可能です。サーバにログインした時点で同意していただいたものとみなします。

Agilex サーバ概要

Agilex サーバでは oneAPI を使った FPGA アクセラレータの開発と DE10-Agilex カードの利用が出来ます。 DE10-Agilex の詳細は terasICのページを参照してください。

ホスト名CPUスレッドメモリOS搭載FPGA
iserv1Core i7-11700K1664GBUbuntu 20.04Intel® Agilex™ AGFB014R24B2E2V

Agilex サーバ利用方法

iserv1 には ssh でログインできます。試験的な暫定運用中は予約は不要です。

$ ssh iserv1

ログインしたら、環境設定を読み込みます。

$ source /opt/intel/oneapi/setvars.sh

これで aocloneapi-cli などの oneAPI 開発用のコマンドを利用できます。

$ aocl diagnose

oneAPI のビルドには時間がかかります。途中で ssh セッションが切れる場合などに備えて、 screentmuxなどを利用することをおすすめします。

サンプルのビルドと実行

ACRi ルームでは、次の手順で oneAPI のサンプルをビルドして実行することができます。

サンプルプロジェクトの展開

oneAPI のサンプル一式は https://github.com/oneapi-src/oneAPI-samples/tags から取得できます。一式を取得して ACRi ルームのホームディレクトリに展開してください。 ダウンロード済のアーカイブを iserv1 上に置いていますので、以下のコマンドで展開して利用することもできます。

$ tar zxvf /opt/ACRi/oneAPI-stable.tar.gz
$ cd oneAPI-samples-2022.3.0

ここで展開される oneAPI-samples-2022.3.02022.3.0 の部分はバージョンによって異なります。

一式にはたくさんのプロジェクトが含まれていますが、ここでは vector-add のビルドを行ないます。

$ cd ./DirectProgramming/DPC++/DenseLinearAlgebra/vector-add

ls すると以下のようなファイルを確認することができます。

License.txt        build.sh           sample.json
Makefile           build_fpga.sh      src   
Makefile.fpga      build_fpga_emu.sh  third-party-programs.txt
Makefile.win       run.sh             vector-add-buffers.vcxproj
Makefile.win.fpga  run_fpga.sh        vector-add-usm.sln
README.md          run_fpga_emu.sh    vector-add.sln

Makefileの書き換え

利用する DE10-Agilex 向けにサンプルの Makefile.fpga を編集します。30行目にある vector-add-buffers.fpga ターゲットに対応するコマンドの -Xshardware に続いて、

-Xsboard=de10_agilex:B2E2_8GBx4

を追加します。

ビルド

Makefile.fpga を編集したら make コマンドでビルドします。

$ make -f Makefile.fpga hw

ビルドがはじまると以下のようなメッセージがコンパイルステップに応じてターミナルに出力されます。several hours とか書かれていますが、ビルド完了までには3時間ほどかかります。

dpcpp -O2 -g -std=c++17 -fintelfpga -c src/vector-add-buffers.cpp -o a.o -DFPGA=1
dpcpp -O2 -g -std=c++17 -fintelfpga a.o -o vector-add-buffers.fpga -Xshardware -Xsboard=de10_agilex:B2E2_8GBx4
aoc: Compiling for FPGA. This process may take several hours to complete.  Prior to performing this compile, be sure to check the reports to ensure the design will meet your performance targets.  If the reports indicate performance targets are not being met, code edits may be required.  Please refer to the oneAPI FPGA Optimization Guide for information on performance tuning applications for FPGAs.

以下のようなメッセージが表示されてコマンドが終了するとビルド完了です。

'quartus_compile_report.log' and '/tmp/a-f2d191-9c3f49/quartus_compile_report.log' are identical (not copied) at /opt/intel/oneapi/compiler/2022.0.2/linux/lib/oclfpga/share/lib/perl/acl/aoc.pl line 1578.

実行

ビルドが終わったら実行しましょう。実行にも Makefile.fpga に定義されているターゲットを利用します。

$ make -f Makefile.fpga run_hw

以下のように出力されればサンプルの実行は成功です。

./vector-add-buffers.fpga
Running on device: B2E2_8GBx4 : Agilex Reference Platform (aclde10_agilex0)
Vector size: 10000
[0]: 0 + 0 = 0
[1]: 1 + 1 = 2
[2]: 2 + 2 = 4
...
[9999]: 9999 + 9999 = 19998
Vector add successfully completed on device.

このサンプルでは、FPGA 上に構成された

    h.parallel_for(num_items, [=](auto i) { sum[i] = a[i] + b[i]; });

に相当する回路で入力データの足し算を行ない、その結果をサーバ上で計算した結果と確認しています。

タイトルとURLをコピーしました