我已经使用buildroot构建了Linux内核。我已经将opensource amdgpu驱动程序和所需的固件合并到其中。驱动程序很好,检测GPU,模式设置很好,调整“小文本”的分辨率,并在启动后显示命令行。
现在我需要运行OpenCL程序。我从amdgpu-pro驱动程序(rhel7变体)手动解压缩文件并组装骨架fs然后复制我认为需要的文件。
OpenCL无法识别任何设备,clinfo
实用程序会在cl::error
来电时抛出cl::getPlatformIDs()
。
OpenCL在Linux上完全运行所需的文件是什么?
PS:相关unaswerred question,因此该主题被认为是实际的。
答案 0 :(得分:1)
我进一步采取了一些措施,以便全面启动并运行:
库有几个重要的符号链接,如* .1,* .1.0.0等。它们也必须被复制。这得到了opencl工作,但矿工仍然错误的可用内存和计算单元的数量显示不正确,我有段错误。
/opt/amdgpu/share/libdrm/amdgpu.ids
'正确检测和显示名称及其视频内存大小。
/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