许多线程可以同时在同一个字上设置位吗?

时间:2015-10-31 02:28:05

标签: cuda

我需要一个warp的每个线程决定是否设置32位字中的相应位。这个多重设置是仅进行一次内存访问,还是每个位集的一次内存访问?

1 个答案:

答案 0 :(得分:3)

CUDA中没有独立的位设置功能。 (在PTX中有一条bit-field-insert指令,但它仍以32位数量运行。)

每个线程通过执行完整的32位写操作来设置一个位。这样的写操作需要是原子RMW操作,以便保留其他位。因此,无论原子的吞吐量如何,访问都将被有效地序列化。

如果不考虑内存空间,将位分解为单独的整数将允许您避免原子。

然后可以使用__ballot() warp vote function快速汇编32位打包数量。答案here中给出了一个例子。

(事实上,warp vote函数可能允许你完全避免内存事务;如果你需要的唯一结果是32位打包数量,那么一切都可以在寄存器中处理。)