小编Ale*_*lex的帖子

CUDA,互斥和atomicCAS()

最近我开始在CUDA上开发并遇到了atomicCAS()的问题.要在设备代码中对内存进行一些操作,我必须创建一个互斥锁,这样只有一个线程可以在代码的关键部分使用内存.

下面的设备代码在1个块和几个线程上运行.

__global__ void cudaKernelGenerateRandomGraph(..., int* mutex)
{
    int i = threadIdx.x;
    ...

    do 
    {
        atomicCAS(mutex, 0, 1 + i);
    }
    while (*mutex != i + 1);

    //critical section
    //do some manipulations with objects in device memory

    *mutex = 0;

    ...
}
Run Code Online (Sandbox Code Playgroud)

第一个线程执行时

atomicCAS(mutex, 0, 1 + i);
Run Code Online (Sandbox Code Playgroud)

mutex是1.在第一个线程将其状态从Active更改为Inactive和line之后

*mutex = 0;
Run Code Online (Sandbox Code Playgroud)

没有执行.其他线程永远保持循环.我尝试了这个循环的许多变体,比如while(){};,do {} while();, temp variable =*mutex inside loop,甚至是if(){}和goto的变体.但结果是一样的.

代码的主机部分:

...
int verticlesCount = 5;
int *mutex;
cudaMalloc((void **)&mutex, sizeof(int));
cudaMemset(mutex, 0, sizeof(int));
cudaKernelGenerateRandomGraph<<<1, verticlesCount>>>(..., mutex);
Run Code Online (Sandbox Code Playgroud)

我使用Visual Studio …

c++ mutex cuda atomic

7
推荐指数
1
解决办法
1万
查看次数

EMV卡在线PIN验证

是否有EMV卡,不支持在线PIN验证?或者所有EMV卡都支持在线和离线PIN,终端决定使用哪些?

提前致谢.

credit-card emv

1
推荐指数
1
解决办法
2161
查看次数

标签 统计

atomic ×1

c++ ×1

credit-card ×1

cuda ×1

emv ×1

mutex ×1