OpenCL

GPU が乗ったマシンを買ったので、OpenCL で Device が取得できるのを見て 自己満足に浸るなどしていた (on Arch Linux)。

てか GPU って某 N 社が勝手に読んでる名前なんだっけ?忘れたけど。

インスコ:

  • opencl-clhpp (OpenCL の C++ バインディング)
  • opencl-mesa (乗ってる GPU に合わせたパッケージが必要な筈)
  • ocl-icd (ローダー)

あんまり関係ないけど compile_commands.json を生成してくれるのが便利なので 最近はどうでもいいコードでも CMake のプロジェクトを作っている。

で、コード:

#include <iostream>
#include <vector>

#define CL_HPP_TARGET_OPENCL_VERSION 300
#include <CL/opencl.hpp>

auto main() -> int {
    std::vector<cl::Platform> platforms;
    cl::Platform::get(&platforms);
    for (auto const &p: platforms) {
        std::vector<cl::Device> dev;
        p.getDevices(CL_DEVICE_TYPE_ALL, &dev);
        for (auto const &d: dev) {
            cl_device_type ty = d.getInfo<CL_DEVICE_TYPE>();
            std::string type;
            switch (ty) {
            case CL_DEVICE_TYPE_CPU:
                type = "CPU";
                break;
            case CL_DEVICE_TYPE_GPU:
                type = "GPU";
                break;
            case CL_DEVICE_TYPE_ACCELERATOR:
                type = "Accelerator";
                break;
            default:
                type = "unknown";
                break;
            }
            std::cout << type << '\n';

            std::cout << d.getInfo<CL_DEVICE_NAME>() << '\n';
            std::cout << d.getInfo<CL_DEVICE_VENDOR>() << '\n';
            std::cout << d.getInfo<CL_DEVICE_MAX_COMPUTE_UNITS>() << '\n';
        }
    }
}

んで、その出力

GPU
Radeon RX 5500 (NAVI14, DRM 3.40.0, 5.11.4-arch1-1, LLVM 11.1.0)
AMD
22

今日はとりあえずコンパイル通って動いたので良し。後日いろいろ計算とかさせていきたいね。