CUDA中的原子操作

时间:2012-01-18 20:59:21

标签: cuda gpu-atomics

以下程序使用“Cuda By Example”中的原子锁实现,但运行该程序会使我的机器冻结。 有人能告诉我我的程序有什么问题吗?非常感谢

翼飞

#include <stdio.h>


__global__ void test()
{
    __shared__ int i, mutex;

    if (threadIdx.x == 0) {
       i = 0;
       mutex = 0;
    }
    __syncthreads();

    while( atomicCAS(&mutex, 0, 1) != 0);
    i++;
    printf("thread %d: %d\n", threadIdx.x, i);
    atomicExch(&mutex,0);
}

1 个答案:

答案 0 :(得分:3)

这是一个理论。我希望你熟悉经线的概念。 在while循环中,warp中的所有线程都将进入while循环。只有一个将退出,其余的线程将驻留在while循环内。这将引入一个发散分支,使得退出while循环的线程停止,直到分支再次收敛。因为这个线程是唯一一个可以释放互斥锁的线程,所以它永远不会发生,因为它等待其他线程收敛。