When a computer has multiple CUDA-capable GPUs, each GPU is assigned a device ID
. By default, CUDA kernels execute on device ID 0
. You can use cudaSetDevice(int device)
to select a different device.
Let's say I have two GPUs in my machine: a GTX 480 and a GTX 670. How does CUDA decide which GPU is device ID 0
and which GPU is device ID 1
?
Ideas for how CUDA might assign device IDs (just brainstorming):
- descending order of compute capability
- PCI slot number
- date/time when the device was added to system (device that was just added to computer is higher ID number)
Motivation: I'm working on some HPC algorithms, and I'm benchmarking and autotuning them for several GPUs. My processor has enough PCIe lanes to drive cudaMemcpys to 3 GPUs at full bandwidth. So, instead of constantly swapping GPUs in and out of my machine, I'm planning to just keep 3 GPUs in my computer. I'd like to be able to predict what will happen when I add or replace some GPUs in the computer.