私はこのリンクを読みました- 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を選択します:
あなたは間違いなく、xorg-video-abi-6.0を提供しなくなったwheezyのxserver-xorg-coreを使用しています。また、radeonhdはDebianから削除されているため、新しいxorg-video-abiでは使用できません。
# 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で定義されています。プラットフォームが正しく構成されていないようです。 clGetPlatformIDsからの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
これを機能させる方法は?
最終的に無料のOpenCLスタックを有効にしましたが、非常によく似た問題が発生しました。関連するパッケージのいくつかの要約概要を提供します。
そのlibopencl1-mesa
は単なるICDランタイムであり、汎用のocl-icd-libopencl1
にロードされます。次に、libclc
はlibopencl1-mesa
によってOpenCLカーネルを処理するために使用されます。 LLVMチップセット固有のバックエンドを使用して、libclc
は命令を生成します。欠落している.bc
によって提供されるGPUチップセット固有のglueが欠落しています。これは大幅に簡略化されていますが、この問題についてはそれで十分です。それでも、優れた図が非常に役立ちます。
あなたの特定の例では、.bc
はlibclc-r600
によって提供されますが、このFreedesktop.org GalliumCompute ページに、チップセット 'DONE'の何も表示されません。サポートされているチップセットの中で最も低いのはEvergreen(HD5000シリーズ)のようです。
* 2014年2月4日以降にこれを読んだ場合は、 GalliumCompute を再確認してください。
「nonfree」ドライバがオープンソースであるかどうかはわかりません。
次に、あなたが見れば:
OpenGL renderer string: Gallium 0.4 on AMD RV770
Gallium LLVMが(ネイティブGPUではなく)レンダリングに使用されているように見えるため、OpenGLがGPUによって高速化されるという保証はありません。とにかく、無料でないドライバーを使用する場合は、AMDサイトから最新のドライバーをダウンロードして、現在インストールされている代わりに使用することをお勧めします。
また、最近のAMD APP SDK(メモリが適切に機能する場合は2.8以降)はGPUドライバーとは別に出荷されるため、オープンパッケージの代わりに使用してみてください。少なくともUbuntu12.04で動作します(リポジトリのAMDドライバー+ AMDのサイトのAMDAPP SDK)