更快的代码是否也更节能?

Is faster code also more power efficient?

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

Is the 100 instruction program necessarily faster than the 200 instruction program?

没有。首先,在某些架构 (such as x86) 上,不同的指令可能需要不同的周期数。其次,还有一些影响——例如缓存未命中、页面错误和分支预测错误——使情况进一步复杂化。

由此可见,您的标题问题的答案是 "not necessarily"。

Further reading.

事情比这复杂得多。

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

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

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

我找到了一个 paper from 2017 比较各种编程语言的能源使用、速度和内存消耗。更快的语言和更少的能源之间存在明显的正相关关系。