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