首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++性能怪异w/ OpenGL

C++性能怪异w/ OpenGL
EN

Stack Overflow用户
提问于 2011-06-05 14:01:46
回答 2查看 300关注 0票数 0

我正在用C++重写一些渲染C代码。旧的C代码基本上计算它所需的一切,并在每个帧上呈现它。相反,新的C++代码预先计算它需要的内容,并将其存储为链接列表。

现在,实际的呈现操作是翻译、颜色更改和对GL列表的调用。

虽然在链接列表中执行操作应该非常简单,但结果的方法调用似乎比旧版本(每次计算所有内容--当然,我已经确保了新版本没有重新计算)花费的时间更长。

奇怪的事?它执行的OpenGL操作比旧版本少。但越来越奇怪了。当我为每种类型的操作添加计数器,并在方法的末尾添加一个好的旧printf时,它变得更快了-- gprof和手动测量都证实了这一点。

我还费心地查看了G++在这两种情况下生成的汇编代码(有跟踪也没有跟踪),没有发生重大更改(这是我最初的怀疑)--唯一的区别是为计数器分配了更多的堆栈单词,增加了所述计数器,并准备了printf,然后跳转到它。

同样,-O2和-O3也是如此。我在上使用gcc 4.4.5和gprof 2.20.51。

我想我的问题是:发生了什么事?我做错了什么?是不是有什么东西把我的尺寸和gprof都抛掉了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-05 15:35:55

通过在printf中花费时间,您可能会在下一个OpenGL调用中避免阻塞。

票数 3
EN

Stack Overflow用户

发布于 2011-06-06 09:44:49

如果没有更多的信息,很难知道这里发生了什么,但以下是一些提示:

  • 您确定OpenGL调用是相同的吗?您可以使用一些工具来比较发出的呼叫。确保没有由可能不同的顺序带来的状态更改。
  • 您是否尝试过在运行时使用分析器?如果您有许多对象,那么在列表中遍历指针这一简单的事实可能会导致缓存丢失。
  • 是否在CPU端或GPU端?

上确定了一个特定的瓶颈。

这是我自己对可能出错的猜测。发送给GPU的调用需要一些时间才能完成:以前的代码通过混合CPU操作和GPU调用,使CPU和GPU并行工作;相反,新代码首先使CPU在GPU空闲时计算许多事情,然后在CPU没有什么可做的情况下,向GPU提供所有要完成的工作。

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

https://stackoverflow.com/questions/6243385

复制
相关文章

相似问题

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