13

If I'm using my GPU for CUDA computations and I want to use my CPU to manage the display, is there a way to get Xorg to use the CPU and the motherboard's HDMI slot instead of the GPU and its HDMI slot? Right now I'm maxing out the computational power of my GPU and Unity is really slow but my CPU is idling.

2 Answers2

4

This answer: Use integrated graphics for display and NVIDIA GPU for CUDA on Ubuntu 14.04 appears relevant for you.

In summary setting up /etc/X11/xorg.conf as follows:

Section "ServerLayout"
    Identifier "layout"
    Screen 0 "intel"
    Screen 1 "nvidia"
EndSection

Section "Device"
    Identifier "intel"
    Driver "intel"
    BusID "PCI:0@0:2:0"
    Option "AccelMethod" "SNA"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID "PCI:1@0:0:0"
    Option "ConstrainCursor" "off"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration" "on"
    Option "IgnoreDisplayDevices" "CRT"
EndSection

Read the entire post for more details.


Reply to comments

According Asus Canada specs:

Integrated Graphics Processor- Intel® HD Graphics support Multi-VGA output support : HDMI/DVI-D/RGB/DisplayPort ports - Supports HDMI with max. resolution 4096 x 2160 @ 24 Hz / 2560 x 1600 @ 60 Hz - Supports DVI-D with max. resolution 1920 x 1200 @ 60 Hz - Supports RGB with max. resolution 1920 x 1200 @ 60 Hz - Supports DisplayPort with max. resolution 4096 x 2304 @ 60 Hz Maximum shared memory of 512 MB Supports Intel® InTru™ 3D, Quick Sync Video, Clear Video HD Technology, Insider™ Supports up to 3 displays simultaneously DP 1.2 Multi-Stream Transport compliant, supports DP 1.2 monitor daisy chain up to 3 displays

I suggest temporarily taking out your two nVidia cards, plugging a monitor into the on-board HDMI port and booting with a Live USB to runs tests with Ubuntu.

It is important to know your CPU. Discover this using:

cat /proc/cpuinfo | grep 'model name'

and report back.

0

You can use modesetting driver.

Warning

Running a misconfigured X server may freeze the computer in such a way that Ctrl+Alt+F3 no longer switches to virtual terminal.

You have a few options:

  • Boot into recovery mode or USB etc.
  • If you have a sshd running on the computer, you may try to ssh into it using a different machine, delete the incorrect configuration file, and reboot.
  • I use the following. Open virtual terminal 4, type while sleep 120; do chvt 4; done &. That way, if something goes wrong, just wait for 2 minutes and you'll get back to virtual terminal 4.

Also useful to know: Hold down Alt, press SysRq, then press Enter (or any unrecognized key) will print out a help menu, which says you can press b to reboot (as long as Alt remains held).

Use modesetting driver

The documentation can be found at man modesetting.

Caveat: On my machine, sometimes the screen randomly freezes with

[~]$ sudo dmesg
[ 6048.632746] [drm:nv_drm_atomic_commit [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00004700] Flip event timeout on head 1

and I don't know why. Still, it mostly works… I think.

For safety measure, you may want to turn off all but one monitor, if you have multiple.

Steps

Make sure xserver-xorg-video-modesetting package is installed.

Create a new file /etc/X11/xorg.conf.d/10-software-driver.conf with the content

Section "Device"
    Identifier "randomname"
    Driver     "modesetting"
    Option     "AccelMethod" "none"
EndSection

Then restart the X server. In a virtual terminal:

sudo service gdm restart

You may want to ps -f -p $(pgrep gdm). If you see gdm-x-session then X server is probably correctly configured, if you see gdm-wayland-session then probably not.

If X server is correctly started, you may want to check that the GPU is indeed not used by

nvidia-smi

If No running processes found is seen, it is working.

Troubleshooting

The log for X server can be found from journalctl. The following conveniently shows the log of the last start of X server:

journalctl -b | tac | sed '/X Server/,$d' | tac | less

It can also be found in /var/log/Xorg.*.log or ~/.local/share/xorg/Xorg.*.log.

Use fbdev driver (failed attempt)

There are some guide to use fbdev instead. So far I have tried this, but it doesn't work. First install package xserver-xorg-video-fbdev. Then in /etc/X11/xorg.conf.d/10-software-driver.conf put

Section "Device"
    Identifier "randomname"
    Driver     "fbdev"
    Option     "fbdev" "/dev/fb0"
    BusId      "pci:71:00:0"
EndSection

Supposedly the BusId is obtained by

[~]$ lspci | grep VGA
47:00.0 VGA compatible controller: NVIDIA Corporation TU117GLM [Quadro T1000 Mobile] (rev a1)

and convert 0x47 to decimal = 71.

Also on my machine head -c10000000 /dev/urandom > /dev/fb0 in a virtual terminal does fill the screen with random content. Still, it doesn't work.

I already fixed the following issues

  • after seeing (EE) no screens found(EE) and (EE) No devices detected., I add the BusId correctly
  • because I get (EE) open /dev/fb0: Permission denied, I read man Xorg.wrap, and modify /etc/X11/Xwrapper.config to add needs_root_rights=yes; and also add the relevant users to video group

It still doesn't work with error messages (EE) FBDEV(0): FBIOPUTCMAP: Device or resource busy which I don't know how to fix.

Other drivers (failed attempt)

I tried vesa or nouveau, but some error happens and X chooses to use nvidia driver anyway.