如果我使用此代码,那么它将在设备0或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?
在哪个设备上创建流以及在哪个设备上执行代码之间是否存在关系?
答案 0 :(得分:4)
如果我正在正确地阅读CUDA webinar on using multiple GPUs中的以下示例,则使用不在当前所选设备上的流执行是错误的。
示例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);
错误:强>