OpenCL
2022-10-25 1:18 JST
とりあえず OpenCL について調べてみる。
PoCL なんてのがあるのね
早速、PoCL をインストールして使ってみよう。ubuntu だと apt install pocl-opencl-icd ですぐに使える。ocl-icd-dev も必要になるだろう(たぶん)。Xilinx で既に U50 をGPU としては NVIDIA を使っていたので、すでに /etc/OpenCL/vendors なるディレクトリが出来ている。
プログラムを拝借
ここにある OpenCL のテスト用ソースコードを拝借する。もとのソースはOak Ridgeというところからみたい。私の環境は Xilinx と NVIDIA が入っていたのですでに nvidia.icd pocl.icd xilinx.icdという3つの icd ファイルがある。ということで、ちょっと変更する(抜粋を次に示すよ)。
VectorAdd.c
cl_platform_id cpPlatforms[10];
// 中略
cl_uint num_cpPlatform;
err = clGetPlatformIDs(10, cpPlatforms, &num_cpPlatform);
if (err != CL_SUCCESS) {
printf("%s:%d xerr:%dn", __func__, __LINE__, err);
return 0;
}
printf("num clGetPlatform:%dn", num_cpPlatform);
// Get ID for the device
for( unsigned int i = 0 ; i < num_cpPlatform ; i++ ) {
err = clGetDeviceIDs(cpPlatforms[i], CL_DEVICE_TYPE_CPU, 1, &device_id, NULL);
if (err != CL_SUCCESS) {
printf("%s:%d err:%dn", __func__, __LINE__, err);
if ( i == ( num_cpPlatform - 1)) {
return 0;
}
}
}
CL_DEVICE_TYPE_CPU
CPU を指定しているので Xilinx のはエラーになる。結果は final result: 1.000000 。
XRT build version: 2.12.427
Build hash: 2719b6027e185000fc49783171631db03fc0ef79
Build date: 2021-10-08 22:06:50
Git branch: 2021.2
PID: 1637218
UID: 1000
[Mon Oct 24 15:51:07 2022 GMT]
HOST: tiafoe
EXE: /home/ryos/Project/HPC/test/kogu2
[XRT] ERROR: XILINX_XRT must be set
num clGetPlatform:2
main:75 err:-1
final result: 1.000000
PoCL 3.0 をインストール
llvm の 14 をインストールして PoCL の本家から 3.0 のソースを自分のワークにインストールしてみる。
$ cmake
-DCMAKE_INSTALL_PREFIX=~/Work/install
-DENABLE_CUDA=ON
../
$ make
$ make install
OCL_ICD_VENDORS を verndors のディレクトリに設定して(man libopencl に詳しい)やると CPU でも GPU でも動きます。GPU の方が遅いけどね。
リンク集
PoCL の本家のページ
ここのとおりにすると PoCL インストールできるはず。
粒子法とは?(苦笑)
FDPS のサンプルになっているのかな?
FDPS 講習会ってのがあるのね。
py2llvm というのがあるらしい。
LLVM で SIMD を利用しましょうという話かな?
LLVM の Vectorizers のドキュメント