快轉到主要內容

Nvidia PRIME用法,Linux雙顯卡電腦切換獨顯跑3D渲染

Linux系統 Linux使用技巧 Nvidia Arch Linux Ubuntu
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

如果您的Linux電腦有Intel + NvidiaAMD + Nvidia的雙顯示卡架構,那麼你可能會需要用到Nvidia PPIME技術。

我的筆電是MSI Modern 15 A10RBS,搭載Intel UHD 620 + Nvidia MX350的雙顯示卡配備。

架構如下圖,這台搭載Nvidia的雙顯卡筆電會以Intel內顯(Integrated Graphics)輸出螢幕和渲染圖形程式。這會導致3D效能低下,需要手動使用「Nvidia PRIME」技術,呼叫Nvidia獨顯(Discrete GPU)出來幹活。

圖源:https://gist.github.com/Misairu-G/616f7b2756c488148b7309addc940b28

PRIME是在獨立顯示卡與內顯之間切換的技術,專為雙顯卡筆電打造。Nvidia版的PRIME功能的叫做Optimus。

用Intel內顯開機,桌面環境用內顯渲染;當遇到需要重度GPU渲染的遊戲程式時,才將渲染作業分配給Nvidia顯示卡,此種過程我們稱之為PRIME Render Offload

本文說明Nvidia PRIME指令的用法,適合筆電與桌電的Linux用戶參考。

測試系統:Arch Linux 6.5.9。本文介紹的指令亦適用於Ubuntu。

1. 雙顯卡筆電的Nvidia獨顯切換方式
#

  1. 於Arch Linux 安裝Nvidia閉源驅動,再安裝 Envy Control

  2. 將顯示卡模式設定為Hybrid,這樣會讓兩張顯示卡保持啟用狀態。如果你設定Nvidia Only那也不需要用Nvidia PRIME了。

  3. Arch Linux需要安裝nvidia-prime套件才可以使用PRIME指令。

2. 如何使用prime-run指令
#

  1. 使用指令lspci -k | grep -A 2 -i "VGA"檢查目前使用的顯示卡,應會同時列出Intel和Nvidia的顯示卡

  2. 所有應用程式預設都會以Intel顯示卡渲染。當需要使用Nvidia顯示卡渲染的時候,在指令前面加上prime-run

例如glxinfo | grep OpenGL會顯示目前使用的顯示卡是Intel,而prime-run glxinfo | grep OpenGL會顯示Nvidia。

實際執行遊戲試試:從終端機執行Minetest,啟用光影,看FPS高低便能知道效果。

啟動指令:minetest,用Intel顯示卡運算,FPS低落

指令:prime-run minetest,用Nvidia顯示卡運算,FPS正常。

如果prime-run無效,試試改用PRIME環境變數啟動程式:

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" minetest

當您要跑CUDA之類的程式的時候,也是這樣操作。預先指定以上環境變數,程式就能利用Nvidia顯示卡渲染。

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" "執行檔"

能不能讓應用程式切換Nvidia顯示卡更方便些?

如果安裝的是GNOME桌面,對應用程式圖示按右鍵會有「以獨立顯示卡啟動」的選項,這樣就會暫時以Nvidia顯示卡啟動該程式。

KDE的話則是右鍵 → 編輯應用程式,加入PRIME的環境變數:__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only",這樣以後點應用程式圖示就會一律以Nvidia顯示卡啟動。

3. 以Nvidia PRIME啟動Flatpak版程式
#

以Steam為例,使用flatpak override設定環境變數,這樣Steam以及其餘子行程都會以Nvidia獨顯啟動。

flatpak override --user --env='__NV_PRIME_RENDER_OFFLOAD=1' --env='__GLX_VENDOR_LIBRARY_NAME=nvidia' --env='__VK_LAYER_NV_optimus="NVIDIA_only"' com.valvesoftware.Steam

也可以點選個別Steam遊戲,右鍵 → 內容

在啟動選項加入PRIME的環境變數:__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" %command%,這樣只有該遊戲會用Nvidia渲染。

4. Nvidia PRIME的雙螢幕輸出
#

在KDE X11環境下是開箱即用,獨顯的HDMI孔接上第二個螢幕後應該會輸出畫面。

不過仍然需要使用prime-run指令才能指定用獨顯跑3D程式。

若沒看到畫面就用xrandr指令手動設定。

5. 讓桌電也用上PRIME吧
#

Nvidia PRIME可不是筆電的專利!Linux桌電只要有雙顯示卡,且以Intel當主螢幕輸出,也是可以使用Nvidia PRIME。

關於這個作法,見 Linux讓Intel GPU負責畫面輸出,Nvidia負責3D運算的方法

參考資料
#

相關文章

Ubuntu LTS如何安裝Nvidia顯示卡驅動、CUDA、cuDNN、NVIDIA Container Toolkit套件
Linux系統 Linux使用技巧 Ubuntu Nvidia
fontconfig調整Linux中文預設字體的優先順序,修正字體模糊、Emoji亂碼的問題
Linux系統 Linux使用技巧 Ubuntu Arch Linux
Linux如何設定開機自動執行應用程式
Linux系統 Linux使用技巧 Ubuntu Arch Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。