1

我刚刚开始尝试一些来自 OpenGL/GLSL 的 CUDA 编程。

在 OpenGL 中,原子计数器似乎与主图形内存分开,并且开销几乎为零(与图像单元或“无绑定图形”内存上的原子操作明显较慢但不完全慢)不同。它们的局限性在于它们的数量是固定的(~16k),它们只能被读取、递增或递减,我猜这具有较低的开销。

CUDA 中这些极快的原子计数器是否有等效接口?

我想写这样的东西:

if (some_condition)
{
    index = atomicIncrement(globalCounter);
    output[index] = myValue;
}

使用基数排序或类似“组织金字塔”的压缩可以实现相同的结果,但原子计数器更简单。

4

1 回答 1

1

您是否尝试过使用 atomicAdd()?我不知道 OpenGL 原子,但我想它们是相似的。

int atomicAdd(int* address, int val);
unsigned int atomicAdd(unsigned int* address,
                       unsigned int val);
unsigned long long int atomicAdd(unsigned long long int* address,
                                 unsigned long long int val);
float atomicAdd(float* address, float val);
于 2013-04-11T09:39:39.990 回答