2013-04-11 61 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