AMD OpenCL 在 Linux 上工作所需的最小必要文件子集是什么?

What is the minimal nesesary file subset, required to AMD OpenCL work on Linux?

我已经使用 buildroot 构建了 Linux 内核。我已经将开源 amdgpu 驱动程序和所需的固件合并到其中。驱动程序正常,正在检测 GPU,模式设置正常,为 "small text" 调整分辨率,启动后显示命令行。

现在我需要 运行 OpenCL 程序。我从 amdgpu-pro 驱动程序(rhel7 变体)手动解压文件并组装骨架 fs,然后复制我认为需要的内容。

OpenCL 无法识别任何设备,clinfo 实用程序从 cl::getPlatformIDs() 调用中抛出 cl::error

OpenCL 在 linux 上完全工作需要哪些文件?

PS:相关 unaswerred question,因此该主题被认为是实际的。

我又走了好几步,才站起来 运行:

  • 有几个重要的库符号链接,如*.1、*.1.0.0 等。它们也必须被复制。那让 opencl 工作了,但是矿工仍然错误地显示可用内存和计算单元的数量,并且我有段错误。

  • 需要
  • /opt/amdgpu/share/libdrm/amdgpu.ids 才能正确检测和显示 gpu 型号的名称及其显存大小。

  • /etc/amd/amdapfxx.blb 是重要文件,出于某些绝密目的而提供,原因不明。

  • 当我升级 amdgpu-pro 驱动程序时,重要的是不要弄乱不同版本的库文件。很容易犯这样的错误,因为 buildroot 缓存覆盖到 output/target 结构,如果你从覆盖中删除某些东西,你也必须从目标中删除它。这样的库混乱可能会导致段错误

  • 为了进一步缩小子集、libEGL 和 libGLESv2,可以删除 libgbm。它们对于 OpenCL 操作来说不是必需的,这可以额外节省 1-1.5 兆字节 space.

  • LLVM 似乎与 OpenCL 完全无关,节省了大量 space。我不确定,也许是 GL 或 Vulkan 要求的。

这里是必要文件和符号链接的完整列表,带有确切位置,以便 OpenCL 正常工作:

/usr/lib/libamdocl64.so
/usr/lib/libamdocl12cl64.so
/usr/lib/libdrm.so -> libdrm.so.2.4.0
/usr/lib/libdrm.so.2 -> libdrm.so.2.4.0
/usr/lib/libdrm.so.2.4.0
/usr/lib/libdrm_amdgpu.so -> libdrm_amdgpu.so.1.0.0
/usr/lib/libdrm_amdgpu.so.1 -> libdrm_amdgpu.so.1.0.0
/usr/lib/libdrm_amdgpu.so.1.0.0
/usr/lib/libdrm_radeon.so -> libdrm_radeon.so.1.0.1
/usr/lib/libdrm_radeon.so.1 -> libdrm_radeon.so.1.0.1
/usr/lib/libdrm_radeon.so.1.0.1
/usr/lib/libkms.so -> libkms.so.1.0.0
/usr/lib/libkms.so.1 -> libkms.so.1.0.0
/usr/lib/libkms.so.1.0.0
/usr/lib/libOpenCL.so -> libOpenCL.so.1
/usr/lib/libOpenCL.so.1
/usr/bin/clinfo
/etc/amd/amdapfxx.blb
/etc/OpenCL/vendors/amdocl64.icd
/opt/amdgpu/share/libdrm/amdgpu.ids