Dual GPU. NVS 310 + P100 running OpenGL Cuda Samples

Hi all.

I have a system with an NVS 310 + P100 which I intend to use the NVS 310 for GUI and P100 for CUDA computation.

Thing is Im getting some error when running the cuda samples that uses OpenGL like oceanFFT.

Im not sure whether it would perform opengl calculations on P100 and pass the output to the NVS or I can only run opengl on boards that has video output? Im trying to achieve the former. Is it possible?

.

Hello txbob,

thank you for your reply :)
where did u find this?
"CUDA 8 is incompatible with NVS 310.

The last driver version that officially supported NVS 310 was an R343 driver. CUDA 8 GA2 requires a R375 (or newer) driver."

did some digging on nvidia drivers, compute capabilities and cuda versions and found this.

found here Linux x64 (AMD64/EM64T) Display Driver | 390.48 | Linux 64-bit | NVIDIA that:

  • drivers 390.46, 384.125, 384.66 support P100 but none supports nvs 310
  • driver 390.48 supports NVS 310 that also supports an “NVIDIA TITAN X (Pascal)” this board and P100 has the same architecture which is the one i’m using atm.

Now about compute capabilities:

  • nvs 310 supports cc 2.1
  • p100 supports cc 6.0

Cuda versions:

  • cuda-8.0 supports ccs from 2.0 to 6.x
  • cuda-9.0 and 9.1 support ccs from 3.0 to 6.x

question is: When one runs that oceanFFT binary opengl finds the first suitable gpu (with graphical output) and runs on it? so it would never run on teslas (with no video output)? this is what i’m confused about.

could you clarify this for me?

Sorry, my mistake. NVS 310 is compute capability 2.1, so it is supported by CUDA 8 and the R390 driver branch. (it is not supported by CUDA 9 but you are not asking about that).

Please disregard my previous remarks.

The OpenGL samples generally use CUDA/OpenGL interop. The normal use case for this is when the CUDA context and the OpenGL context that are interoperating are on the same physical GPU.

If you are running the display on the NVS310 device, the CUDA runtime would normally enumerate the P100 first, so the CUDA context and OpenGL context would end up on separate devices. It might be theoretically possible in some circumstances to run interop this way, but the CUDA sample codes are not setup to do that.

So an error as you are describing is not surprising. If you are on CUDA 8, you can use the CUDA_VISIBLE_DEVICES environment variable to restrict the CUDA runtime to only use the NVS310, in which case the aforementioned error should not occur.

Hey txtbob.

“Sorry, my mistake”
No worries :)

Hmmm I see so it depends on how the application was implemented. So in theory it might work with CUDA 8 running on the NVS card right?
I remember trying different CUDA_VISIBLE_DEVICES (0 and 1) but it was before figuring out CUDA 9 didn’t support it. Probably I was using CUDA 9. I’ll try with CUDA 8 then feed it here later.

Thank you

C.

Yes, if we are talking about the same error, I would expect that the CUDA/OpenGL sample codes should “just work” if you restrict CUDA to the NVS310 card.

Hey txtbob. It worked just like you said. Openglx samples can be run on NVS and non-openglx can be run on both.

thank you :)