皆さん、私はこれをどうやって動かすか何日も研究してきました。その間に混乱したかもしれないナンセンスを修正するために、新規インストールからやり直したばかりです。今私が知っている限りでは、プログラムを実行する前にそのコード行を使用すると、DRI_PRIME=1 は DGPU をプライマリにすることが「想定」されています。lspci
-k | grep -EA2 'VGA|3D' は次のように表示します。
00:02.0 VGA compatible controller: Intel Corporation Skylake GT2 [HD Graphics 520] (rev 07)
DeviceName: Onboard IGD
Subsystem: Dell Latitude E7470
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Baffin [Radeon RX 460/560D / Pro 450/455/460/555/555X/560/560X] (rev e5)
Subsystem: Dell Baffin [Radeon RX 460/560D / Pro 450/455/460/555/555X/560/560X]
Kernel driver in use: amdgpu
つまり、システムは私の GPU を「認識」しますが、使用しません。
: $DRI_PRIME=1 glxinfo | grep "OpenGL レンダラー"
OpenGL renderer string: Mesa Intel(R) HD Graphics 520 (SKL GT2)
私はカーネル Linux 6.2.0-20-generic Ubuntu 23.04 Wayland を使用しています
皆さん、私は LTS にダウングレードし、アップデートを実行する前にすぐに DRI_PRIME=1 を実行しました。するとカードが認識されました。多くのディストリビューションを試しましたが、一部の OS ではこれが実行され、他の OS では実行されない理由がまったくわかりません。しかし、文句は言いません。
答え1
以前は、電源オプションを「パフォーマンス」に設定すると、DGPU がプライマリに設定されていましたが、ある日、デモが Intel GPU で実行しようとしたため、CUDA サンプルが動作しなくなりました。ラップトップは通常ハイブリッド モードになっており、DGPU がハードワークを行い、ディスプレイは Intel GPU に引き渡されます。X を実行しているときの xrandr の出力を参照してください (モード設定は Intel です)。
$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x45 cap: 0x9, Source Output, Sink Offload crtcs: 4 outputs: 3 associated providers: 1 name:modesetting
Provider 1: id: 0x26e cap: 0x2, Sink Output crtcs: 4 outputs: 6 associated providers: 1 name:NVIDIA-G0
あるいは次のようになるかもしれません:
$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x1b7 cap: 0x1, Source Output crtcs: 4 outputs: 6 associated providers: 1 name:NVIDIA-0
Provider 1: id: 0x1e7 cap: 0x6, Sink Output, Source Offload crtcs: 4 outputs: 3 associated providers: 1 name:modesetting
1 つ目は、ソースとシンクが逆になっているようで、__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia 環境変数が必要になります。これは、nvidia を使用するように強制するプログラムの前で使用できます。
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia <prog>