首页 > 解决方案 > 更快的代码是否也更节能?

问题描述

假设我有一个 CPU 以恒定速率运行,每条指令消耗等量的能量。我还有两个功能相同的程序,它们产生相同的输出,除了一个已优化为仅执行 100 条指令,而另一个程序执行 200 条指令。100条指令程序一定比200条指令程序快吗?指令较少的程序是否比指令较多的程序消耗更少的能量?

标签: optimizationlanguage-agnosticcpu

解决方案


事情比这复杂得多。

例如,执行速度在许多情况下由内存决定。作为一个实际的例子,一些代码可以先处理图像的像素在行中,然后在列中......一个不同的代码可能更复杂,但同时处理行和列。

第二个版本可以执行更多指令,因为数据管理更复杂,但如果内存组织方式更快,我不会感到惊讶:一次读取一列图像将“破坏缓存”和尽管以这种方式工作的代码很简单,但很有可能比以内存友好方式进行处理的更复杂的代码慢很多。更简单的代码最终可能会“停滞”很多,等待缓存行被填充或刷新到外部存储器。

这只是一个例子,但实际上,当执行代码时,CPU 内部发生的事情对于当今许多强大的处理器来说是一个非常非常复杂的过程:指令在微指令中展开,寄存器被重命名,部分代码的推测执行取决于甚至在程序计数器真正到达某个指令之前,分支预测器猜测的内容等等。今天,确定某件事是更快还是更慢的唯一方法在许多情况下只是尝试使用真实数据和测量。


推荐阅读