I am doing some experiments with two GPU Cards:

Card A: GeForce GTX 560 Ti Card B: GeForce 9800 GTX+ Setup: an Asus Mother Board with Intel Core i7 that supports SLI Intended Experiment: Use Card B for all graphic purpose usage such as display the OS and applications; Use Card A solely for GPU Kernel computations

I know both cards are pretty old, but I think they are set up alright as far as I can tell - I can see them in the Device Manager, as well as when I run CUDA query about the devices

enter image description here

My question is this:

is there a way to absolutely 'turn off' Card A for any other purposes in the OS, and Card A will only be 'triggered' to run CUDA kernel when cudaSetDevice() 'targets' at it?

So far, the naive way I used is just to connect 1 monitor to Card B. This approach seems to work - with the Card B incurs some GPU memory activities and GPU Load when playing youtube videos on the monitor and no such GPU activity were detected on Card A. And as soon as I run some CUDA code with cudaSetDevice() 'targets' at just Card A, it incurs some GPU activities.

enter image description here

But I assume there must be some more accurate way to do this. Could someone give me some pointers, if it is relates to play with the BIOS, it will be appreciated if you can provide me with some details as I have done little of that in the past.

Extension to My Question (I guess):

Is there a way to really switch between two NVidia GPUs (I think this should be a separate question to the ones associated with the much talked about NVidia Optimus Technology where an Intel GPU unit is involved, isn't it?)

  • So what's wrong with using the cudaSetDevice(int n) function call to choose the same GPU each time? The device offsets should stay the same between subsequent runs, but you can also use the cudaChooseDevice function to match to a particular card based on it's specifications. However, given you're programmatically doing this, why not just have a piece of code select the GPU as opposed to physically plugging/unplugging a cable from the GPU? – Breakthrough Jun 26 '13 at 11:32

There's not much else that you can do besides what you've done already. Under windows, GeForce GPUs (all of them) are governed by the WDDM environment. The biggest single imposition of this is the Windows TDR mechanism (which can be modified, albeit with registry hacking and perhaps trial and error). Other than that, simply avoid having a desktop built on the GPU you want to reserve for CUDA, and then doing appropriate detection and cudaSetDevice() is sufficient.

To answer your question directly, given that WDDM cannot be shut off, and it has at least some side effects (TDR is one of them) no there is no way to completely disable OS interaction with a GeForce GPU under windows, such that the only time the card experiences any OS interaction is when a CUDA context is created on it.

And yes, this is off topic for stack overflow, which is why the close votes are there.


Yes. Very simple. USE THE HARDWARE configuration.

They hid it in Windows 7: Its now in Power Configuration. http://windows.microsoft.com/en-us/windows7/change-create-or-delete-a-power-plan-scheme

Have one power scheme with one video card, and the other hardware configuration with the other, and get a cheap V switch.


Not the answer you're looking for? Browse other questions tagged or ask your own question.