我现在正在调试一个项目,仍然没有弄清楚哪个部分是错误的,但是我怀疑在创建流时出现了竞争条件:
考虑以下代码:
#pragma omp parallel num_threads(4)
{
int threadId = omp_get_thread_num();
cudaSetDevice(threadId);
cudaStream_t streams[20];
for (int i=0; i<20; ++i) cudaStreamCreate(streams+i);
};
这会导致潜在的竞争条件,例如:不同的线程在不同的设备ID上创建具有相同流ID的流?
答案 0 :(得分:1)
您是否测试过以串行方式创建cudaStream?您可以先串行创建cudaStream,然后并行化所需的代码。