【发布时间】:2016-03-27 19:54:01
【问题描述】:
在我的内核中,我检查一个条件,如果它是真的,我将 tid 插入到一个数组中。 我需要以原子方式执行以下操作。
if( condition ){
arr[*index_ptr] = tid;
(*index_ptr)++
}
基本上,我希望没有两个线程将它们的 tid 写入数组中的相同位置。
有没有简单的方法来做到这一点?我听说在 CUDA 中很难实现锁。
【问题讨论】:
在我的内核中,我检查一个条件,如果它是真的,我将 tid 插入到一个数组中。 我需要以原子方式执行以下操作。
if( condition ){
arr[*index_ptr] = tid;
(*index_ptr)++
}
基本上,我希望没有两个线程将它们的 tid 写入数组中的相同位置。
有没有简单的方法来做到这一点?我听说在 CUDA 中很难实现锁。
【问题讨论】:
cuda 库内置了原子函数。你会寻找 atomicadd()
这个函数需要一个指向 int 或 float 的指针和另一个 int 或 float(我相信类型必须匹配)添加到它。它还方便地返回原子操作之前的指针值。
【讨论】: