Is there a relationship between on which of devices was created stream and on which device will executed code?

StackOverflow https://stackoverflow.com/questions/22443693

  •  15-06-2023
  •  | 
  •  

سؤال

If I use this code, then will be it executed on device 0 or 1?

cudaSetDevice(0);       // switch to device 0
cudaStream_t stream1;
cudaStreamCreate(&stream1); // created on device 0
cudaSetDevice(1);       // switch to device 1
kernel_function<<<10, 1024, 0, stream1>>>();    // executed on device 0 or 1?

Is there a relationship between on which of devices was created stream and on which device will executed code?

هل كانت مفيدة؟

المحلول

If I'm reading the following example from the CUDA webinar on using multiple GPUs correctly, it is an error to execute with a stream that is not on the currently selected device.

Example 2

cudaStream_t streamA, streamB;
cudaEvent_t eventA, eventB;
cudaSetDevice(0);
cudaStreamCreate(&streamA); // streamA and eventA belong to device-0
cudaEventCreaet(&eventA);
cudaSetDevice(1);
cudaStreamCreate(&streamB); // streamB and eventB belong to device-1
cudaEventCreate (&eventB);
kernel<<<...,  streamA>>>(...);
cudaEventRecord(eventB, streamB);
cudaEventSynchronize( eventB);

ERROR:

  • device-1 is current
  • streamA belongs to device-0
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top