atomicFunc
atomicFunc
一个内部的、通用的工厂函数,用于根据指定的 `method` 参数(如 ADD, AND, MIN)创建所有具体的原子操作节点。它主要用于 TSL 库内部,以实现代码复用和一致性。
核心优势
核心优势在于其作为通用工厂的抽象能力。它将所有原子操作的创建逻辑集中化,通过一个 `method` 参数来区分具体行为(如加法、位与、取最小值),极大地提高了 TSL 库内部的代码复用性、可扩展性和一致性。
常见用途
作为 `atomicAdd` 的内部工厂,用于实现粒子密度统计等累加操作
作为 `atomicAnd` 或 `atomicOr` 的内部工厂,用于实现多层渲染中的状态位掩码操作
作为 `atomicMin` 或 `atomicMax` 的内部工厂,用于在并行线程中安全地查找全局最小值或最大值
作为所有原子操作(`atomicXor` 等)的通用实现基础
如何调整
调整 `atomicFunc` 的效果就是改变其 `method` 参数,这会从根本上改变其数学行为。例如,对于相同的指针和值(如初始值7,操作值6),使用 `ATOMIC_ADD` 会得到结果13 (7+6),而使用 `ATOMIC_AND` 会得到6 (二进制 0111 & 0110),使用 `ATOMIC_MIN` 则会得到6 (min(7,6))。这展示了仅通过改变方法开关,就能执行从算术到逻辑再到比较的完全不同操作。
代码示例
1// 内部调用示例:
2// 用户调用 atomicAdd(ptr, val) -> TSL 内部实现:
3atomicFunc( AtomicFunctionNode.ATOMIC_ADD, ptr, val );
4
5// 用户调用 atomicMin(ptr, val) -> TSL 内部实现:
6atomicFunc( AtomicFunctionNode.ATOMIC_MIN, ptr, val );