subgroupMin
subgroupMin
在当前子组内对所有活跃调用的 e 进行最小值归约,并将同一结果返回给每个活跃调用。
核心优势
利用硬件子组指令一次完成最小值计算,无需共享内存与同步屏障,延迟更低、带宽更小,适合高吞吐并行算法。
常见用途
块/瓦片级最小深度或误差的快速求解,用于早期剔除与阈值判断
图像/体素处理中窗口最小值(如形态学腐蚀、局部对比度预处理)
作为全局最小值归约的子步骤,与工作组级或多轮归约串联
如何调整
此函数无可调参数。通过改变传入的 e 值与控制参与归约的活跃调用集合来影响结果(例如只在条件分支内调用以限制参与者)。若只需一个线程写出,可结合 invocationSubgroupIndex.equal(0) 或使用 subgroupElect() 选出“子组代表”再执行写入。
代码示例
1// 以每个线程的标量输入为例,计算子组内的最小值
2const idx = globalId.x;
3const v = inputBuffer.element( idx );
4
5// 子组归约:所有活跃线程得到相同的最小值
6const sMin = subgroupMin( v );
7
8// 写回:得到“每子组一常量”的瓦片效果
9outMinBuffer.element( idx ).assign( sMin );