运行 CUDA 程序时遇到以下问题:
我用一个有 2 个线程的块调用一个简单的内核
CUDAkernel<<<1,2>>>
在内核内部,我执行以下操作:
int i = threadIdx.x;
if (i==0){ waitabit(); }
if (i==1){ waitabit(); }
因此,两个内核线程都调用相同的函数waitabit()
,这几乎浪费了一些时钟周期:
__device__ void waitabit(){
clock_t start = clock();
clock_t now;
for (;;) {
now = clock();
clock_t cycles = now > start ? now - start : now + (0xffffffff - start);
if (cycles >= 10000000 )
{break;}
}
}
现在的问题是:该函数waitabit()
将线程延迟 0.008 秒。我很自然地假设线程是并行运行的,所以它们都会并行停止0.008 秒(大约),整个内核的延迟大约是 0.008 秒。
然而,这种情况并非如此。内核串行执行,延迟为0.016,即2*0.008
并行性是否不正确?
提前致谢!