2011-03-27 63 views
1

我是CUDA初學者。我有全局內存中的無符號字符的像素緩衝區,可以和任何和所有線程更新。因此,爲了避免像素值中的奇怪現象,我想在線程嘗試更新一個時執行atomicExch。但是編程指南說這個函數只能處理32位或64位的字,而我只是想原子交換一個8位的字節。有沒有辦法做到這一點?CUDA:無符號字符上的原子操作

謝謝。

+0

什麼更新?如果你想將數字翻轉爲0或1,你可以使用atomicAnd或者 – Anycorn 2011-03-27 07:39:29

+0

我正在增加一個像素的值,這取決於該像素中「駐留」的對象數量。因此,如果每個對象的增量爲50,那麼一個對象將產生RGBA爲(50,50,50,50)的像素,而兩個對象將具有RGBA(100,100,100,100)等等,最高爲(255,255,255,255)max 。這使我可以根據像素「內部」有多少個對象來改變像素的亮度。 – Andrew 2011-03-27 18:06:09

+0

我發現了一個黑客,順便說一句。由於uchar4佔用與int相同的空間(儘管不能保證,它在我的體系結構上工作),我只需將uchar4的地址轉換爲(int *),然後使用atomicExch的整數版本。我仍然有興趣是否可以在單個字節上做原子,tho ... – Andrew 2011-03-27 18:08:26

回答