【发布时间】:2018-02-24 09:32:15
【问题描述】:
当我分配多个小的 SSBO 用于计算着色器而不是一个大的,内部映射到许多数组时,有什么区别吗?
我所说的差异是指读/写性能。 GPU 内存是否关心 SSBO 分区或是否统一处理所有内容。
这是着色器中的示例:
layout (std430, binding=1) buffer bufferA
{int elementsA[]};
layout (std430, binding=2) buffer bufferB
{int elementsB[]};
...
//VS
layout (std430, binding=1) buffer buffers
{
int elementsA[MAXCOUNT_A];
int elementsB[MAXCOUNT_B];
...
};
一个大缓冲区可以避免 CPU 端的许多分配,并产生更清晰的代码,将内存分区留给着色器代码。当然,我需要为每个表示缓冲区的数组指定最大大小,这可能会导致不必要的内存分配。但是我更关心运行时访问速度。
这种合并是一个好习惯吗?现在在我的代码中,我得到了太多小的缓冲区分配,这很丑:D。
【问题讨论】:
标签: opengl shader gpu gpgpu compute-shader