3

我已经使用 buildroot 构建了 Linux 内核。我已将开源 amdgpu 驱动程序和所需的固件合并到其中。驱动程序很好,检测 GPU,模式设置效果很好,为“小文本”调整分辨率,启动后显示命令行。

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

OpenCL 无法识别调用中的任何设备和clinfo实用程序抛出cl::errorcl::getPlatformIDs()

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

PS:相关的未回答问题,因此该主题被认为是实际的。

4

1 回答 1

1

我又走了几步,才让一切正常运行:

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

  • /opt/amdgpu/share/libdrm/amdgpu.ids正确检测和显示 gpu 模型的名称及其显存大小是必需的。

  • /etc/amd/amdapfxx.blb是重要文件,出于某些绝密、未知原因而提供服务。

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

  • 为了进一步缩小子集 libEGL 和 libGLESv2,可以删除 libgbm。它们不需要 OpenCL 操作,这样可以节省 1-1.5 兆的额外空间。

  • LLVM 似乎与 OpenCL 完全无关,节省了大量空间。我不确定,也许 GL 或 Vulkan 需要它。

这里是 nesesary 文件和符号链接的完整列表,以及确切的位置,以便让 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
于 2018-03-15T15:22:06.513 回答