cudaSetDevice and Tesla D870 Recognized as two C870?


I started working with the Tesla D870 and it is being recognized by the cuda functions (cudaGetDeviceProperties, cudaGetDeviceCount, etc.) as two separate Tesla C870 cards. So I could access either one of them by cudaSetDevice(1) or cudaSetDevice(2). Is this normal? Isn’t there a way to treat them as one device? Am I now expected to change my code so it’ll support two devices? (I’ve seen an SDK example for multi-device programming but it would be a lot more intuitive if the D870 would be recognized as one device with the switching between the C870s occurring automatically according to the load, etc.).

Any help would be greatly appreciated…

Thank you!


Yes, this is absolutely normal. D870 is two C870 in a box and S870 is four C870 (seen as separete devices, too). I’m not aware of any way to see them as one device.

If you already have program which supports only one GPU the quickest change would be to add command-line paramenter which will specify device to use and pass value to cudaSetDevice() at the beginning of the program.

That was the first thing I did… I added “cudaSetDevice(1)” and it seems to work. However, this only utilizes one C870 device while the other is idle…

You have to explicitly program for multiple GPUs. If we tried to do transparent load balancing, it would probably be really terrible. Intra-device bandwidth is on the order of 70 GB/s, while inter-device bandwidth is about 3 GB/s. It would be pretty ugly.