在哪个设备上创建流以及哪个设备将执行代码之间是否存在关系?

时间:2014-03-16 22:06:54

标签: cuda gpgpu nvidia

如果我使用此代码,那么它将在设备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?

在哪个设备上创建流以及在哪个设备上执行代码之间是否存在关系?

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);

错误:

  • device-1是最新的
  • streamA属于device-0