当前位置: 首页 > 知识库问答 >
问题:

如何优化VBO/IBO以最大限度地利用GPU缓存

仲皓君
2023-03-14

我正在使用CUDA上运行的Marching Cubes算法从体积数据生成网格。

我尝试过保存网格并以3种方式渲染它。

  1. 将一组粗略的三角形保存为顶点数据的连续数组。我估计第一次通过时的大小,创建一个OpenGL VBO,将其映射到CUDA,并以下面的格式将顶点数据写入其中

V0x, V0y, V0z, N0x, N0y, N0z, V1x, V1y, V1z, N1x, N1y, N1z,...

并使用glDrawArray()绘制它。

VBO中的冗余顶点,每个立方体的冗余顶点,无索引

VBO中没有冗余顶点,生成索引。

VBO中的冗余顶点,每个立方体的唯一顶点,每个立方体生成的索引

现在,对于相同ISO值的相同数据集,我得到的FPS是

Method 1 : 92  FPS, 30,647,016 Verts,          0 Indices
Method 2 : 122 FPS,  6,578,066 Verts, 30,647,016 Indices
Method 3 : 140 FPS, 20,349,880 Verts, 30,647,016 Indices

即使方法2生成的顶点数最少,FPS也很低。我相信这是因为索引的顺序可以最小化GPU缓存的使用。方法3的索引顺序获得更高的GPU缓存使用率,因此FPS更高。

如何修改/修改方法2以获得更高的FPS?

共有1个答案

公子昂
2023-03-14

有两件事可以帮助你:

  • 试图通过大致按绘制顺序放置顶点来优化数据缓存使用情况
 类似资料:
  • 我已经在树莓派7英寸上安装了tarantool,并希望尽量减少与硬盘(sd卡)的交互。有什么简单的方法可以做到这一点。hdd的真正用法是什么?

  • 我正在处理一些发布论坛项目,并试图找出理想的FiRecovery数据库结构。我读到文档的最大大小为1 mg,但通过将多个帖子存储在文档中而不是为每个帖子使用单个文档来最大限度地利用每个文档的存储空间的利弊是什么? 我认为它会更便宜。假设应用程序将使用文档中的所有数据,带宽成本是相同的,但不是多次读取,我将只对一个文档收费。这有意义吗? 它也会更快吗?

  • 如何在标准C++/C++11(无POSIX函数)中优化std::ifstream和std::ofstream的读写速度?(1<-由于有几个问题,这些数字标识了不同点) 我不知道缓冲区的确切作用,所以你能确认一下吗: 用于读取:文件的大部分预加载在内存中(因此缓冲区大小定义了这大部分的大小)(2) 写入:数据写入内存,一旦缓冲区满了,数据就从内存传输到文件系统(3) 如何设置std::ifstrea

  • 我在一次采访中被问到这个问题- 如果n个盒子中有一些巧克力排成一行,则在k名学生中平均分配的巧克力最大数量 。有k个学生。问题是通过从给定批次中选择一系列连续的盒子,在k个学生中平均分配最大数量的巧克力。假设这些框按从左到右从1到n的数字排成一行。我们必须选择一组连续排列的盒子,以便为所有k学生提供最多数量的巧克力。给出了一个数组arr[],表示盒子的行排列,arr[i]表示盒子中位置i处的巧克力

  • When users hit the URL of your application they will need to download different assets. CSS, JavaScript, HTML, images and fonts. The great thing about Webpack is that you can stop thinking how you sho

  • 问题内容: 如何限制草稿js中的最大字符数? 我可以得到类似状态的长度,但是如何停止更新组件呢? 问题答案: 您应该定义和支持。在处理程序函数中,您检查当前内容的长度+粘贴文本的长度,如果达到最大值,则应返回字符串。 UPD 21.03.2018:升级到最新版本的react / react-dom(16.2.0)和Draft.js(0.10.5)。 工作示例-https://jsfiddle.ne