2013-04-11 64 views
1

我刚开始尝试一些来自OpenGL/GLSL的CUDA编程。OpenGL原子计数器等效于CUDA

在OpenGL中,原子计数器似乎与主图形存储器分开,接近零开销(不像图像单元或“无图形”图形存储器上的显着较慢但不完全缓慢的原子操作)。它们是有限的,因为它们的数量是固定的(约16k),它们只能被读取,增加或减少,我认为它的开销较低。

CUDA中是否有与这些极速原子计数器相当的接口?

我想写的东西是这样的:

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

同样的结果可以用一个基数排序或“histopyramid”般的压实来完成,但原子柜台只是简单。

回答

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); 
+1

这些新的GLSL原子计数器应该在更快的专用硬件中实现。我的理解是,在红色盒子的硬件上,在最近的体系结构中有少量专用硬件计数器,而在采用绿色盒子的硬件中,实现仅在全局存储器中完成,具有标准原子添加指令 – talonmies 2013-04-11 10:02:31

+0

是的,我知道atomicAdd。它似乎与[imageAtomicAdd](http://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt)和[atomicAdd](http://developer.download.nvidia.com/opengl/specs)类似/GL_NV_shader_buffer_store.txt)。我只是想知道在全球范围内是否还有其他更快的原子增量,OpenGL提供的[原子计数器](http://www.opengl.org/registry/specs/ARB/shader_atomic_counters.txt) – jozxyqk 2013-04-11 10:06:16

+0

@talonmies yes I即使使用相同的硬件也能体验到这一点。在2011年底,一个驱动程序的改变让原子计数器的跳跃速度与原子操作一样快,直到我提到的几乎为零的开销。 – jozxyqk 2013-04-11 10:12:18