Idle GPU has non-empty memory usage

Hi,

I’m trying to setup two GPUs, one (GT1030) for display and the other (Titan RTX) for deep learning. I encountered two phenomenons and what to figure out what happened:

  1. nvidia-smi in Windows 10 shows that all GUI programs are running on GT1030 and nothing is running on Titan RTX. However, the RTX still has a GPU memory usage of 300M. Is it reserved for something? Is it that usage specific under Windows? I saw other users have zero GPU memory usage when idle under linux.
  2. Although the GT1030 is in PCIE slot1 and the RTX is in slot2, the UEFI boot sets the RTX card as GPU0 (instead of GPU1) while the BIOS-legacy boot sets it as GPU1 as expected. Why the order assignments are different?

Thank you.

  1. Yes, windows WDDM driver model reserves memory on the GPU. I believe Titan RTX can be switched to TCC mode (use nvidia-smi, google for instructions) which would reduce the memory usage and is probably a good idea for your setup.

  2. That’s a function of your motherboard, not anything to do with NVIDIA GPUs. enumeration order is determined by your system BIOS and/or the OS, not anything do with NVIDIA.

A lift of training performance in TCC mode! Thank you Robert!

Hi Robert,

You suggested me to run TITAN RTX on TCC mode under Windows 10 to reduce pre-loaded memory usage. It works great. Now I’m exploring CUDA under Ubuntu 19.04. My only monitor is still connected to GT1030 in slot1, with TITAN RTX in slot2.
I kind of have the same problem as under Windows10, where idle TITAN RTX still uses 1MB memory. If I understand correctly from Nvidia instruction, TCC mode is not designed for Windows only. Please forgive my picky mind but I really want to understand why idle GPU doesn’t come with a clear memory.

My nvidia-smi result looks like this:

Thu May  9 22:03:40 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.56       Driver Version: 418.56       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  TITAN RTX           Off  | 00000000:A1:00.0 Off |                  N/A |
| 41%   23C    P8    12W / 280W |      1MiB / 24190MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GT 1030     Off  | 00000000:C1:00.0  On |                  N/A |
| N/A   24C    P8    N/A /  30W |    181MiB /  1992MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    1      1543      G   /usr/lib/xorg/Xorg                            18MiB |
|    1      1634      G   /usr/bin/gnome-shell                          47MiB |
|    1      1931      G   /usr/lib/xorg/Xorg                            53MiB |
|    1      2080      G   /usr/bin/gnome-shell                          60MiB |
+-----------------------------------------------------------------------------+

I created xorg,conf file under “/etc/X11/Xsession.d/” and renamed it to “20-nvidia.conf”. It restricts display tasks to the BusID of GT1030. I’m not sure if the xorg,conf is saved at a correct location but its content looks like:

# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings:  version 418.56

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

Section "Files"
EndSection

Section "Module"
    Load           "dbe"
    Load           "extmod"
    Load           "type1"
    Load           "freetype"
    Load           "glx"
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"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Ancor Communications Inc MG248"
    HorizSync       30.0 - 83.0
    VertRefresh     50.0 - 76.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GT 1030"
    BusID          "PCI:193:0:0"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "DFP-1"
    Option         "metamodes" "nvidia-auto-select +0+0"
    Option         "SLI" "Off"
    Option         "MultiGPU" "Off"
    Option         "BaseMosaic" "off"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Is there some pre-loaded setting on linux to use that 1MB memory? Is my xorg.conf set correctly and at a loadable location? Thanks heaps.