Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运行速度_C++_Performance_Operation - Fatal编程技术网

C++ 运行速度

C++ 运行速度,c++,performance,operation,C++,Performance,Operation,我正在编写一个游戏,在渲染代码中进行速度计算非常重要 如何获得某些操作的速度 例如,如何知道乘法是否比sqrt快,等等?或者我必须做测试并计算时间 编程语言是C++,谢谢。 < P>这种微优化只是浪费时间以获得最小的收益。 使用探查器,从改进您自己的算法和代码开始,只要探查器告诉您游戏花费了大部分时间 请注意,在某些情况下,为了实现更高效的设计,您可能必须对整个软件或其主要部分进行彻底检修。在这种情况下,探查器的结果可能会误导缺乏经验的人。例如,与一次性缓存其结果相比,优化复杂计算可能获得最小的

我正在编写一个游戏,在渲染代码中进行速度计算非常重要

如何获得某些操作的速度

例如,如何知道乘法是否比sqrt快,等等?或者我必须做测试并计算时间


编程语言是C++,谢谢。

< P>这种微优化只是浪费时间以获得最小的收益。

使用探查器,从改进您自己的算法和代码开始,只要探查器告诉您游戏花费了大部分时间

请注意,在某些情况下,为了实现更高效的设计,您可能必须对整个软件或其主要部分进行彻底检修。在这种情况下,探查器的结果可能会误导缺乏经验的人。例如,与一次性缓存其结果相比,优化复杂计算可能获得最小的收益


另请参见。

您的最佳选择是使用AQTime之类的工具并执行分析运行。然后,您将知道在哪里花时间进行优化。但是过早地或基于猜测工作进行操作可能不会给您带来太多好处,只会使代码复杂化或破坏某些东西。最好的方法是将任何浮点计算,特别是sin、cos等,以及sqrt从任何循环中取出(如果可以的话)

我曾经有过这样的经历:

for i = 0 to nc
  for j = 0 to nc
      aij = sqrt(a[i]*b[j])
它计算nc*nc平方根。但是因为sqrt(a*b)等于sqrt(a)*sqrt(b),所以可以预先计算所有a和b的平方根,这样循环就变成如下所示。因此,你没有nc*nc平方根,而是有2*nc平方根

for i = 0 to nc
  for j = 0 to nc
      aij = asqrt[i]*bsqrt[j]

您提出的问题在很大程度上取决于您在硬件级别开发的平台。不仅不同芯片组(Intel/AMD)之间会有差异,平台上也会有差异(我怀疑iPhone没有足够多的指令来更快地完成某些事情)

您在问题中声明您正在谈论“渲染代码”。如果您谈论的是实际在GPU(着色器代码)而不是CPU上运行的代码,那么规则会发生巨大变化

正如@thkala所说,在你开始之前,我真的不会担心这个问题。我发现,首先以一种有效的方式编写代码,然后(只有在需要改进的情况下)重写评测代码时缓慢的部分,不仅更容易,而且更快。与仅使用特定函数相比,更好的算法通常会提供更好的性能


在我们为iPhone开发的游戏中,我唯一记住的是大数学运算(sqrt)速度慢(不是基础数学),而运行每帧的循环会很快消耗CPU。记住这一点,我们几乎不需要优化任何代码——因为它都是以60fps的速度运行的——所以我很高兴一开始就不用担心它。

确定特定操作的速度通常被称为评测。评测操作的最佳解决方案是使用评测器。VisualStudio有一个很好的分析器。Linux已经做到了。如果您的编译器没有分析器,那么如果您经常对代码进行评测,那么购买具有分析器的编译器可能是值得的

如果您必须在不使用专业分析器的情况下生存,那么您通常可以通过将自己的分析器嵌入到您的程序中来生存


查找一些分析器的代码。

找到处理器参考,并在那里查找延迟/吞吐量:例如,与微指令优化相比,还有十亿其他东西可以给您带来更好、更大的提升。编译器已经在一定程度上做到了这一点(它将比您以前做得更好)。分析代码,找出瓶颈。然后改进瓶颈中的算法(编译器不太擅长算法)。对我来说,这听起来很像过早优化。您最好尝试在更高的抽象级别上找到优化。当您必须在这个级别上提出此类问题时,您不应该编写性能关键的代码,也绝对不应该考虑微优化(不要与不使用死板算法或完全不合适的数据结构混淆,这总是一件好事)。