subgroupElect
subgroupElect
在硬件子组内选举出一个唯一的“领导”线程;仅当当前调用在该子组的活跃调用中具有最低的 subgroup_invocation_id 时返回 true(零参数)。
核心优势
无需参数即可将“每子组只执行一次”的逻辑可靠落地,显著减少原子操作争用与分支开销。
常见用途
将昂贵或具副作用的操作限制为“每子组一次”(如原子计数、写回归约结果)。
作为子组级算法的起点(归约、扫描、分层同步)。
调试/可视化:标出每个子组被选中的线程。
如何调整
该节点无参数,行为由 GPU 的子组实现决定。通过“放置位置”进行控制:把它置于需要保证‘每子组一次’的逻辑之前,并在需要时配合原子操作/屏障以避免竞态。
代码示例
1// 可视化每个子组的当选线程(红色)
2const leader = subgroupElect();
3const base = color( 0x202020 );
4material.colorNode = cond( leader, vec3( 1, 0, 0 ), base );