使用OpenGL进行高效的GPU随机存储器访问

dro*_*nus 6 opengl gpu gpgpu glsl random-access

什么是让GPU有效地计算"反功能"例程的最佳模式,这通常取决于定位的内存写入而不是读取?例如.比如计算直方图,排序,按百分比划分数字,将不同大小的数据合并到列表等中.

dat*_*olf 7

已建立的术语是收集读取分散写入

收集阅读

这意味着您的程序将写入固定位置(如片段着色器的目标片段位置),但可以快速访问任意数据源(纹理,制服等)

分散写道

这意味着,程序接收输入数据流,它不能任意寻址,但可以快速写入任意存储器位置.

显然,OpenGL的着色器架构是一个聚集系统.最新的OpenGL-4还允许片段着色器中的一些分散写入,但它们很慢.

那么,最近用OpenGL模拟"散射"的最有效方法是什么呢?到目前为止,这是使用在像素大小的点上操作的顶点着色器.您通过数据点发送尽可能多的点来处理,并通过相应地设置它们的位置将它们分散到目标内存中.您可以使用几何和细化着色器生成在顶点单元中处理的点.您可以使用纹理缓冲区和UBO进行数据输入,使用顶点/点索引进行寻址.