12

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

r600g 驱动程序仍然需要将专有微代码加载到 GPU 中以启用硬件加速。该固件通常包含在内核中,但在 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 作为驱动程序:

您肯定正在使用 wheezy 的 xserver-xorg-core,它不再提供 xorg-video-abi-6.0,并且 radeonhd 不适用于较新的 xorg-video-abi,因为它已从 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

错误代码值在 opencl.h 中定义 看起来您的平台配置不正确。来自 clGetPlatformID 的 CL_PLATFORM_NOT_FOUND_KHR (-1001) 错误。那是因为你有调度程序,但没有真正的 OpenCL 驱动程序。”

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

如何使这项工作?

4

2 回答 2

5

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

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

在您的特定示例中,.bc' 将由Freedesktop.org GalliumCompute页面libclc-r600上提供,但是我没有看到您的芯片组 'DONE' 的任何内容。似乎支持的最低芯片组是 Evergreen(HD5000 系列)。

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

于 2014-02-04T21:22:06.517 回答
1

不确定“非自由”驱动程序是否是开源的。

然后,如果你看:

OpenGL renderer string: Gallium 0.4 on AMD RV770

看起来 Gallium LLVM 用于渲染(不是原生 GPU),所以不能保证 OpenGL 是由 GPU 加速的。无论如何,如果您使用非免费驱动程序,我的建议是从 AMD 网站下载最新的驱动程序并使用它们而不是当前安装的。

此外,最近的 AMD APP SDK(从 2.8 开始,如果我没记错的话)与 GPU 驱动程序分开发货,所以你可以尝试使用它而不是打开包。它至少可以在 Ubuntu 12.04 上运行(来自存储库的 AMD 驱动程序 + 来自 AMD 网站的 AMD APP SDK)

于 2014-02-04T09:53:10.693 回答