Cuda 以原子方式执行操作

Cuda perform operations atomically

在我的内核中,我检查一个条件,如果它是真的,我将 tid 插入到一个数组中。 我需要自动执行以下操作。

if( condition ){
    arr[*index_ptr] = tid;
    (*index_ptr)++
}

基本上,我希望没有两个线程将它们的 tids 写入数组中的相同位置。

有没有简单的方法可以做到这一点?我听说在CUDA中很难实现锁。

cuda 库内置了原子函数。你会寻找 atomicadd()

Cuda Programming Guide

此函数将一个指向 int 或 float 的指针和另一个 int 或 float(我认为类型必须匹配)添加到它。也方便returns原子操作前指针的值