atomicOr
atomicOr
在共享内存(通常是 Storage Buffer)中的一个整数上执行线程安全的“按位或”(Bitwise OR)操作,主要用于在并行计算中安全地设置或合并一个或多个状态标志位。
核心优势
提供了硬件层面保证的、线程安全的标志位设置方法。它允许成百上千的线程以“只增不减”的方式将各自的信息(以位的形式)贡献给一个共享状态,确保所有信息都被完整地合并。
常见用途
在并行图算法中,安全地标记“已访问”的节点。
在多属性体素化中,聚合一个体素的多种属性(如同时标记为“有水”和“有火”)。
创建自定义的模板或材质ID掩码,记录所有渲染到某个像素上的材质类型。
如何调整
其效果由 `valueNode`(位掩码)参数控制,它定义了要“点亮”或设置的标志位。例如,在一个体素作画应用中,使用 `COLOR_RED` (0x1) 作为掩码会添加红色。如果与一个已包含 `COLOR_BLUE` (0x4) 的体素操作,结果会是 `0x5`(紫色),实现了颜色的非破坏性合并。改变 `valueNode` 就如同更换不同的“颜料”或“标签”。
代码示例
1// 定义代表不同属性的位掩码
2const MASK_WATER = 0x1u;
3const MASK_FIRE = 0x2u;
4
5// 原子性地为体素添加“水”属性
6atomicOr( voxelState.element( voxelIndex ), MASK_WATER );