Cuda 以原子方式执行操作
Cuda perform operations atomically
在我的内核中,我检查一个条件,如果它是真的,我将 tid 插入到一个数组中。
我需要自动执行以下操作。
if( condition ){
arr[*index_ptr] = tid;
(*index_ptr)++
}
基本上,我希望没有两个线程将它们的 tids 写入数组中的相同位置。
有没有简单的方法可以做到这一点?我听说在CUDA中很难实现锁。
cuda 库内置了原子函数。你会寻找 atomicadd()
此函数将一个指向 int 或 float 的指针和另一个 int 或 float(我认为类型必须匹配)添加到它。也方便returns原子操作前指针的值
在我的内核中,我检查一个条件,如果它是真的,我将 tid 插入到一个数组中。 我需要自动执行以下操作。
if( condition ){
arr[*index_ptr] = tid;
(*index_ptr)++
}
基本上,我希望没有两个线程将它们的 tids 写入数组中的相同位置。
有没有简单的方法可以做到这一点?我听说在CUDA中很难实现锁。
cuda 库内置了原子函数。你会寻找 atomicadd()
此函数将一个指向 int 或 float 的指针和另一个 int 或 float(我认为类型必须匹配)添加到它。也方便returns原子操作前指针的值