workgroupArray
workgroupArray
(仅限计算着色器)声明一个工作组内的、高速的共享内存数组。它允许同一工作组内的所有线程高效地交换数据,是实现高性能并行算法(如归约、卷积)的基础。
核心优势
提供对GPU芯片上极速本地共享内存的访问。这种超高速的线程间通信能力,能够显著减少对慢速全局内存的访问,是实现高级GPGPU算法和性能优化的关键。
常见用途
实现并行归约算法(如求和、求最大值)
作为图像处理(如大核卷积)中的像素邻域缓存
缓存平铺矩阵乘法中的数据瓦片
如何调整
通过在创建时调整 `type` 和 `count` 来进行。增加 `count` 能让单个工作组处理更多数据,但受硬件的共享内存上限限制。改变 `type`(如从 'f32' 到 'vec4')可以利用向量化计算提升效率,但会消耗更多内存。
代码示例
1// 从全局内存加载数据到共享数组
2sharedData.element( localIndex ).assign( globalInput.element( globalIndex ) );
3
4// 等待组内所有线程完成加载
5workgroupBarrier();
6
7// 线程协作处理共享内存中的数据(例如,执行一步归约)
8const myData = sharedData.element( localIndex );
9const neighborData = sharedData.element( localIndex.add( stride ) );
10myData.assign( myData.add( neighborData ) );