是否还有其他CPU周期方面的开销?

vq8itlhq  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(105)

我举两个例子:

if (i mod [number] == 0)
      do thing;
else 
      do other thing

以及

if (i mod [number] != 0)
       do other thing;
else
       do thing

这两个示例的CPU周期是否相等?

1aaf6o9v

1aaf6o9v1#

在C语言中,你不写CPU指令。你写的是抽象C机器的指令。然后编译器将你的C代码转换成CPU代码,并且它可以自由地生成任何CPU代码,只要它保持你的C程序的可观察行为。由于两个代码片段是等价的,两者都可以生成相同的汇编代码。不要为了性能而反转if条件,因为这是徒劳的。
你可以在这里做的一个真实的的优化是使用[[likely]提示编译器。大多数编译器都有自己的C非标准等价物。要知道,这种优化并不像你想象的那样“保存周期”。相反,它可以在某些模式使用场景中帮助pipeline branch prediction。如果你想进入兔子洞,优化是一个非常深入和有趣的领域。它这并不像看起来那么简单。另外,如果这不是热门代码,任何优化在这里实际上都不会有任何效果。所以总是第一个配置文件配置文件。
首先写干净的代码,然后分析,如果你发现问题,然后根据分析结果进行优化,不要做premature optimizations

相关问题