首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算着色器OpenGL中的一个大SSBO或多个小SSBO

计算着色器OpenGL中的一个大SSBO或多个小SSBO
EN

Stack Overflow用户
提问于 2018-02-24 17:32:15
回答 1查看 1.4K关注 0票数 2

当我在计算着色器中分配多个小SSBO用于计算着色器,而不是一个大的SSBO,内部映射到许多阵列时,有什么不同吗?

我所说的差异是指读/写性能。GPU内存是否关心SSBO分区,或者是否统一处理所有事情。

以下是着色器中的示例:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-25 05:42:41

GPU内存关心您使用哪种类型的数据存储。您必须首先问自己,为什么总体上需要SSBO?SSBO数据可以存储在GPU的全局内存中,而UBO存储在on chip shared memory中,访问速度要快得多。我会使用SSBO来处理非常大量的数据,因为您的应用程序不能与UBO blocks size limits共存。

现在,关于你的问题-你必须尝试和分析。很难说你是通过使用几个缓冲区还是只使用一个缓冲区来获得收益。但是,我会选择一个长缓冲区,因为它需要更少的记账,更少的装订槽,并且由于视频内存中数据的空间局部性,可能会执行得更快。但我把实际的测试留给了你。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48961357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档