なんで-legacy-emulatorオプションをつけないと動かないんだと思って原因調べてた。ググラビリティのために、エラー例を貼り付けておく。
例1)
例2)
で、ようやく原因分かったっぽい。
・CentOS7.6だと、Cのライブラリが古すぎるらしい。しょうがないので、ついでに新しいHLS使いたいというのもあり、HLSコンパイラの最新版20.2をインストールし、出来上がったhls/gcc/lib64ディレクトリをLD_LIBRARY_PATHに入れた。これで第一関門突破。Ubuntu使っておけばデフォルトで行けるので、こんなにはまらなかった
・多分最初はVector_addとか使って試すと思うんだけど、これのホストコードの実装が駄目で、Emulator使えるようになっていない。具体的には以下の部分。
aocl diagnoseすると分かるが、Platform名は以下のようになっている(PACカードが1枚入ったシステムの場合)。
元のコードでは、1番のPlatformしか当然引っかからない。以下とかに変更するとEmulatorのPlatformのみが引っかかる。
このように書くと、実行時に頭にCL_CONFIG_CPU_EMULATE_DEVICES=1とかCL_CONTEXT_EMULATOR_DEVICE_INTELFPGA=1とか書かなくても良いっぽい。
多分、PACカードが刺さったシステムでエミュレータのテストしてねーなこれ。
<追記>
どうやらAcceleration Stackに入っているサンプルコードが古いのが問題らしい。
hld/examples_aocにあるサンプルを使えば、
$ bin/host --emulator=1
でちゃんと動くとのこと。
intel.com/fpgaに置いてあるサンプルも古いと。困ったもんだ。
例1)
Context callback: Malformed program binary: missing .acl.board section
Context callback: kernel argument info is not available
Context callback: Invalid binary
ERROR: CL_INVALID_BINARY
Location: ../common/src/AOCLUtils/opencl.cpp:392
Failed to create program with binary
例2)
ERROR: CL_DEVICE_NOT_FOUND
Location: ../common/src/AOCLUtils/opencl.cpp:356
Query for number of devices failed
で、ようやく原因分かったっぽい。
・CentOS7.6だと、Cのライブラリが古すぎるらしい。しょうがないので、ついでに新しいHLS使いたいというのもあり、HLSコンパイラの最新版20.2をインストールし、出来上がったhls/gcc/lib64ディレクトリをLD_LIBRARY_PATHに入れた。これで第一関門突破。Ubuntu使っておけばデフォルトで行けるので、こんなにはまらなかった
・多分最初はVector_addとか使って試すと思うんだけど、これのホストコードの実装が駄目で、Emulator使えるようになっていない。具体的には以下の部分。
platform = findPlatform("Intel(R) FPGA SDK for OpenCL(TM)");
aocl diagnoseすると分かるが、Platform名は以下のようになっている(PACカードが1枚入ったシステムの場合)。
Number of Platforms = 2
1. Intel(R) FPGA SDK for OpenCL(TM) | Intel(R) Corporation | OpenCL 1.0 Intel(R) FPGA SDK for OpenCL(TM), Version 19.4
2. Intel(R) FPGA Emulation Platform for OpenCL(TM) | Intel(R) Corporation | OpenCL 1.0 Intel(R) FPGA SDK for OpenCL(TM), Version 19.2
元のコードでは、1番のPlatformしか当然引っかからない。以下とかに変更するとEmulatorのPlatformのみが引っかかる。
platform = findPlatform("Intel(R) FPGA Emulation");
このように書くと、実行時に頭にCL_CONFIG_CPU_EMULATE_DEVICES=1とかCL_CONTEXT_EMULATOR_DEVICE_INTELFPGA=1とか書かなくても良いっぽい。
多分、PACカードが刺さったシステムでエミュレータのテストしてねーなこれ。
<追記>
どうやらAcceleration Stackに入っているサンプルコードが古いのが問題らしい。
hld/examples_aocにあるサンプルを使えば、
$ bin/host --emulator=1
でちゃんと動くとのこと。
intel.com/fpgaに置いてあるサンプルも古いと。困ったもんだ。
コメント