opencl - 如何使用开源驱动程序在 AMD 显卡上设置 OpenCL?

标签 opencl mesa

我已阅读此链接 - https://wiki.debian.org/ru/AtiHowTo
并决定设置 OpenCL。

the r600g driver still have to load proprietary microcode into the GPU to enable hardware acceleration. This firmware is usually included in the kernel, but is packaged separately in Debian.



所以,我安装了固件:
# apt-show-versions firmware-linux-nonfree firmware-linux
firmware-linux-nonfree:all/sid 0.40 uptodate
firmware-linux:all/sid 0.40 uptodate

然后我升级内核版本:
uname -v
#1 SMP PREEMPT RT Debian 3.12.8-1 (2014-01-19)

并检查内核标志:
grep DRM_RADEON /boot/config-$(uname -r)
CONFIG_DRM_RADEON=m
# CONFIG_DRM_RADEON_UMS is not set
grep AGP /boot/config-$(uname -r)
CONFIG_AGP=y
CONFIG_AGP_AMD64=y
CONFIG_AGP_INTEL=y
CONFIG_AGP_SIS=y
CONFIG_AGP_VIA=y

我还设置了足够新的 xserver 版本:
# apt-show-versions xorg
xorg:amd64/sid 1:7.7+5 uptodate

我选择 radeon 作为驱动程序:

You most certainly are using wheezy's xserver-xorg-core which does not provide xorg-video-abi-6.0 any more, and radeonhd is not available for the newer xorg-video-abi because it has been removed from Debian


# apt-show-versions xserver-xorg-video-radeon
xserver-xorg-video-radeon:amd64/sid 1:7.3.0-1 uptodate

这让我 OpenGL 工作:
$ glxinfo | grep OpenGL
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD RV770
OpenGL core profile version string: 3.1 (Core Profile) Mesa 10.1.0-devel (git-81144c0 saucy-oibaf-ppa+curaga)
OpenGL core profile shading language version string: 1.40
OpenGL core profile context flags: (none)
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 10.1.0-devel (git-81144c0 saucy-oibaf-ppa+curaga)
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:

我正在尝试使用适用于 OpenCL 的应用程序。

这个程序在 CPU 上运行正常:
$ mono scallion/bin/Debug/scallion.exe parallax
Cooking up some delicions scallions...
Putting 1 patterns into 1 buckets.
Using kernel optimized from file kernel.cl (Optimized4)
Using work group size 1
Compiling kernel... done.
LoopIteration:10  HashCount:167.77MH  Speed:7.8MH/s  Runtime:00:00:21
Predicted:19:38:20
Stopping and shutting down...

LoopIteration:11  HashCount:184.55MH  Speed:7.8MH/s  Runtime:00:00:23
Predicted:19:36:58  init: 2687ms / 1 (2687ms, 0.37/s)
generate key: 153ms / 6 (25.5ms, 39.22/s)
cpu precompute: 7ms / 6 (1.17ms, 857.14/s)
total without init: 23706ms / 1 (23706ms, 0.04/s)
set buffers: 0ms / 11 (0ms, 0/s)
write buffers: 0ms / 11 (0ms, 0/s)
read results: 23699ms / 11 (2154.45ms, 0.46/s)
check results: 0ms / 11 (0ms, 0/s)

7.78 million hashes per second

Stopping and shutting down...

但我无法检测到 GPU:
$ mono scallion/bin/Debug/scallion.exe
Usage: scallion [OPTIONS]+ regex [regex]+
Options:
      -l, --listdevices          Lists the devices that can be used.
      -d, --device=VALUE         Specifies the opencl device that should be used.

设备列表中没有 GPU:
$ mono scallion/bin/Debug/scallion.exe -l
Id:0 Name:Intel(R) Core(TM)2 Quad CPU    Q9650  @ 3.00GHz
    PreferredGroupSizeMultiple:1 ComputeUnits:4 ClockFrequency:2000
    MaxConstantBufferSize:65536 MaxConstantArgs:8 MaxMemAllocSize:2147483648

我找不到有关如何设置 OpenCL 的说明:
apt-get install libclc-r600

apt-show-versions libclc-r600 ocl-icd-libopencl1
libclc-r600:all/saucy 0~git20140101-1~gd~s uptodate
ocl-icd-libopencl1:amd64/sid 2.1.3-2 uptodate

启动应用程序后,我收到一个错误:
~/github.com/lachesis/scallion$ mono ./scallion/bin/Debug/scallion.exe -l

Unhandled Exception:
System.InvalidOperationException: ErrorCode:'-1001'
at scallion.CLDeviceInfo.CheckError (Int32 err) [0x00000] in :0
at scallion.CLDeviceInfo.GetPlatformIds () [0x00000] in :0
at scallion.CLDeviceInfo.GetDeviceIds () [0x00000] in :0
at scallion.CLRuntime.GetDevices () [0x00000] in :0
at scallion.Program.ListDevices () [0x00000] in :0
at scallion.Program.Main (System.String[] args) [0x00000] in :0
[ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidOperationException:
ErrorCode:'-1001'
at scallion.CLDeviceInfo.CheckError (Int32 err) [0x00000] in :0
at scallion.CLDeviceInfo.GetPlatformIds () [0x00000] in :0
at scallion.CLDeviceInfo.GetDeviceIds () [0x00000] in :0
at scallion.CLRuntime.GetDevices () [0x00000] in :0
at scallion.Program.ListDevices () [0x00000] in :0
at scallion.Program.Main (System.String[] args) [0x00000] in :0

The error code values are defined in opencl.h It look like your platform is not configured properly. CL_PLATFORM_NOT_FOUND_KHR (-1001) error from clGetPlatformIDs. That's because you do have the dispatcher, but no actual OpenCL drivers."



之后
sudo apt-get install libopencl1-mesa

$ find / -iname «libMesaOpenCL.so*» 2>/dev/null
/usr/lib/x86_64-linux-gnu/libMesaOpenCL.so
/usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1.0.0
/usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1

在配置文件中应该有
cat /etc/OpenCL/vendors/mesa.icd
libMesaOpenCL.so

错误是
fatal error: cannot open file '/usr/lib/clc/rv770-r600--.bc': No such file or directory

如何使这项工作?

最佳答案

我最终启用了免费的 OpenCL 堆栈,并遇到了非常相似的问题。我将提供一些相关软件包的简要概述。

那个libopencl1-mesa只是 ICD 运行时,它被加载到通用 ocl-icd-libopencl1 中.然后libclclibopencl1-mesa 使用处理 OpenCL 内核。使用 LLVM 芯片组特定的后端,libclc生成指令。您缺少 GPU 芯片组特定的胶水,它由缺少的 .bc 提供。 .这大大简化了,但对于这个问题应该足够了,一个好的图表仍然会很有帮助。

在您的特定示例中, .bclibclc-r600 提供但是,在 Freedesktop.org GalliumCompute 上,我没有看到您的芯片组“完成”的任何内容。页。似乎支持的最低芯片组是 Evergreen(HD5000 系列)。

* 请重新检查 GalliumCompute如果您在 2014 年 2 月 4 日之后阅读本文。

关于opencl - 如何使用开源驱动程序在 AMD 显卡上设置 OpenCL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21522554/

相关文章:

c# - 宿主语言的选择对 OpenCL 性能的影响有多大(如果有的话)?

c++ - SFML vsync 始终开启?

linux - Mesa-18.1.6 'c compiler cannot create executables'

linux - 通过 mesa 在旧硬件上运行 OpenGL 程序

ubuntu - 在 Mesa 安装期间缺少 libOSMesa.so

macos - OS X Mavericks 中的 OpenCL 框架缺少 OpenCL header ?

c - 用 OpenCL C 编写快速线性系统求解器

mesa - OpenGL 4.2 header 、Mesa 3D、扩展 - 它们如何组合在一起?

windows - 我真的需要 OpenCL SDK 吗?

c - 选择CL平台后读取文件时出现段错误