我正在多个 GPU 上实现我的程序...我的 PC 中有两个 GPU,并希望生成两个独立的流来处理这两个设备。我生成了两个流:
cudaStream_t *streams;
streams = (cudaStream_t*) malloc(nstreams * sizeof(cudaStream_t));
for(int j = 0; j < nstreams; j++){
cudaStreamCreate(&(streams[j]));
}
然后,根据 SDK 示例,我尝试使用设备 ID 作为参数调用内核。根据设备 id,设置 cudaDevice (cudaSetDevice(dev_ID);) 并通过各自的流传递内核调用:
kernel1<<< grid, block,0,streamNo >>>(tex, size);................
for (i = 0;i<gpuN;i++){
initialize(i);
printf("initialization done with stream %i on device %i\n", (int)streams[i], i);
runTest(i);
printf("running tests done with %i stream \n", i);
deini(i);
printf("deinitialization is done\n");
}
我的程序在两个不同的流中运行良好,但它是按顺序运行的。我想使用两个设备同时使用两个独立的流来运行功能。谁能帮我解决这个问题?
我正在使用两个 Tesla 2070 处理 CUDA 4.2。