OpenCL
HPCOpenCL
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 の方が遅いけどね。

リンク集