假设我有一个以恒定速率运行的CPU,每条指令消耗等量的能量。我也有两个功能相同的程序,它们产生相同的输出,除了一个程序已优化为仅执行100条指令,而另一个程序执行了200条指令。 100指令程序是否一定比200指令程序快?指令少的程序比指令多的程序消耗的功率少吗?
答案 0 :(得分:1)
事情要比这复杂得多。
例如,执行速度在许多情况下由内存控制。作为一个实际示例,某些代码可以先处理行中的像素,然后处理列中的内容……不同的代码可能更复杂,但同时处理行和列。
第二个版本可以执行更多的指令,因为数据的内务处理更为复杂,但是由于内存的组织方式而使其速度更快,我不会感到惊讶:一次读取一列图像将“破坏高速缓存”,尽管这样做很简单,但是以这种方式工作的代码可能比以内存友好方式进行处理的复杂代码要慢很多。更简单的代码可能最终被“停滞”很多,以等待缓存行被填充或刷新到外部存储器。
这只是一个示例,但是实际上,对于许多功能强大的处理器而言,执行代码时在CPU内部发生的事情如今是非常非常复杂的过程:指令在微指令中爆炸,寄存器被重命名,并且存在推测执行部分代码取决于分支预测变量在程序计数器真正到达某个指令之前就猜出了什么,依此类推。今天,唯一可以确定某些事物是更快还是更慢的唯一方法是,在许多情况下,只需尝试使用真实数据并进行测量即可。
答案 1 :(得分:0)
100个指令程序一定要比200个指令程序快吗?
不。首先,在某些架构(such as x86)上,不同的指令可能需要不同的周期数。其次,有一些影响-诸如高速缓存未命中,页面错误和分支错误行为-使画面进一步复杂化。
由此可见,标题问题的答案是“不一定”。