atomicAnd
atomicAnd
在共享内存(通常是 Storage Buffer)中的一个整数上执行线程安全的“按位与”(Bitwise AND)操作,主要用于在并行计算中安全地清除一个或多个状态标志位。
核心优势
提供了硬件层面保证的、线程安全的“按位与”操作,使得在高度并行的环境中使用位掩码(Bitmask)进行精细的状态管理成为可能,彻底避免了因竞争条件导致的逻辑错误。
常见用途
协作式地清除共享状态字中的特定标志位,如体素化中的光照状态。
在并行资源池管理中,通过清除标志位来安全地释放资源。
作为并行逻辑门,用于检测多个子条件是否同时满足。
如何调整
其效果完全由 `valueNode`(掩码)参数决定,并需通过后续渲染通道进行可视化。例如,在一个用位来表示颜色层的系统中,使用 `~0x1u` 的掩码会精确擦除“红色层”而不影响其他颜色。若将掩码改为 `~0x4u`,则会擦除“蓝色层”。提供 `0u` 作为掩码会将所有位清零,从而擦除所有层。
代码示例
1// 创建一个掩码,其中只有代表“红色”的位是0
2const MASK_NOT_RED = ~0x1u;
3// 原子性地应用该掩码,以清除红色标志位
4atomicAnd( pixelState.element( pixelIndex ), MASK_NOT_RED );