2011-03-27 32 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

回答