运行CUDA程序时,我遇到了以下问题: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
并行性是不正确地完成的吗?
在此先感谢!
[CUDA C编程指南中的相关章节](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#simt-architecture) – asm 2013-02-28 18:46:48
非常感谢。如果是这样,那么某人如何运行例如内核中并行的两个函数“waitabit”?应该做什么而不是“如果”? – kostaspap 2013-02-28 18:51:19
如果你做'if(i <2)',会发生什么? – 2013-02-28 18:54:31