如何修改xorg.conf文件以强制X服务器在特定GPU上运行? (我使用多个GPU)

时间:2013-08-22 13:45:49

标签: cuda gpu nvidia xserver

我正在运行2个GPU,我正试图强制X服务器在一个GPU上运行。 根据这个网站:http://nvidia.custhelp.com/app/answers/detail/a_id/3029/~/using-cuda-and-x,这是我应该如何进行:

  

应使用BusID将X显示强制到单个GPU上   xorg.conf文件的相关“显示”部分中的参数。在   此外,应删除任何其他“显示”部分。例如:   BusID“PCI:34:0:0”

这是我的xorg.conf文件:

# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 304.64  (buildmeister@swio-display-x86-rhel47-12)  Tue Oct 30 12:04:46 PDT 2012

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

所以我尝试用正确的BusID修改子部分显示,但它仍然不起作用,我也尝试将它放在Device部分。

任何人都知道我该怎么做?

2 个答案:

答案 0 :(得分:7)

如果您有2个NVIDIA GPU,请获取两者的BusID参数。您链接的文档解释了几种方法,但nvidia-smi -a非常简单。

您需要确定要保留哪个GPU以供显示,以及您希望为CUDA保留哪个GPU。同样,从nvidia-smi -a

开始,这应该是非常明显的

我们假设您的nvidia-smi -a包含以下内容:

PCI
    Bus                     : 0x02
    Device                  : 0x00
    Domain                  : 0x0000
    Device Id               : 0x06D910DE
    Bus Id                  : 0000:02:00.0

然后像这样修改设备部分:

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:2:0:0"
EndSection

然后重启。 确保您要显示的显示器是连接显示器电缆的那个!

您可能还有兴趣阅读nvidia driver readme并搜索“BusID”以获取更多提示。

您链接的文档引用了“显示”部分,但应该是“设备”部分。

答案 1 :(得分:2)

由于声誉限制,由于无法在上述答案中添加评论,因此我将解决方案留在这里。

我遵循@Robert Crovella提供的解决方案。但直到我将BusID更改为十进制格式,它对我仍然无效。

让我写下更多细节。

  • 两个GPU:GTX 1080Ti(设备0)和GTX 960(设备1)。所以我想将GTX 1080Ti(device0)设置为计算卡,将GTX 960(device1)设置为xorg显示。

  • 查找其BusID:您可以通过命令'lspci |找到BusID。 grep VGA”,它将显示以下内容:

  

03:00.0 VGA兼容控制器:NVIDIA Corporation Device 1b06(rev a1)

     

82:00.0 VGA兼容控制器:NVIDIA Corporation GM206 [GeForce GTX 960](rev a1)

因此,我们获得device0的BusId 03:00.0和device1的82:00.0,但是它们    都是十六进制数。因此将0x030x82转换为十进制数字    分别为3130

  • BusID添加到Device文件中的xorg.conf部分:

      

    “设备”部分

       Identifier     "Device1"
       Driver         "nvidia"   
       VendorName     "NVIDIA Corporation"
       BusID          "PCI:130:0:0"
    
         

    EndSection

请注意BusID格式,例如“ 0:0”(不是“ 0.0”)。并在“屏幕”部分中使用同一设备:

  

“屏幕”部分

   Identifier     "Screen0"
   Device         "Device1"   
   ...
     

EndSection

  • 将监视器连接到显示GPU,然后重新启动计算机。
  • 当我阅读@Piotr Dobrogost的上述评论时,找到了这种解决方案,并仔细检查了xorg.conf文件中使用的十进制格式BusID,这与命令lspciIf CStr(Nz(Me.txtRepGrpNumber,"")) <> "" Then提供的BusID不同。 {3}}。