我在阅读讲座时,其中一张幻灯片列出了影响 CPU 性能的因素,我不明白为什么制造工艺和编译器质量影响CPU性能
答案1
编译器质量是比较容易的一个...
好的编译器知道如何有效地将代码转换为 CPU 指令。
假设您有一个软件,它可以执行一个简单的数学等式 - 比如 1+1。一个智能编译的应用程序将告诉 CPU 将数字相加,存储答案,然后工作就完成了。这可以表示为:
- 将内存 0 设置为 1
- 将内存 1 设置为 1
- 将内存 0 添加到 1
- 存储在存储库 0 中..简单!
糟糕的编译器(我见过一些!)会做同样的事情,但会发出大量额外的指令来做同样的事情,这会降低性能并减慢应用程序的速度。同样的例子:
- 设置内存 0
- 设置记忆 1
- 将内存 0 设置为 0
- 将内存 1 设置为 0
- 将内存 0 设置为 1
- 将内存 1 设置为 1
- 回忆理论 0 和 1 中的值
- 将它们加在一起
- 将结果存储在内存 0 中
现在请记住,像视频编辑器、图形应用程序、游戏甚至文字处理器这样的复杂应用程序可能需要执行数十万次(如果不是数千万次)操作才能启动!这就是一个好的编译器的作用!
制造过程是这一过程的延伸,制造是通过共享功能将多个应用程序“粘合”在一起。如果这些工作做得好,则需要更少的计算能力来实现相同的最终结果。
答案2
编译器的质量(优化能力)决定了机器代码与硬件资源的映射程度。编译器优化可以减少执行的工作量(例如,展开循环可以减少分支数量,寄存器分配可以减少内存访问次数,内联可以消除调用开销并删除特定调用者未使用的代码),安排工作以避免等待(例如,尽早安排加载,以便相关指令不必等待),利用更有效地完成工作的专用指令(例如,矢量化可以使用 SIMD 指令),组织内存访问以利用缓存行为(例如,当内部循环仅触及结构的几个成员时,将结构数组转换为数组结构)。
(一些编译器优化适用于所有或大多数硬件;其他编译器优化更特定于特定的硬件实现。此外,尽管对无序执行的硬件支持改善了调度不太好的代码的执行,但良好的指令调度仍然可以提供可衡量的(即使很小)好处。)
制造工艺决定了晶体管的能量使用、开关速度和面积(以及其他元件的类似特性)。显然,开关速度更快的晶体管可以实现更高的性能。减少每个晶体管的面积可以在经济上可制造的芯片中使用更多的晶体管(这可以转化为更高的性能) 并可以减少组件之间的通信时间(例如,缓存访问的延迟受距离限制,而不仅仅是晶体管的开关速度)。能源使用限制了性能(在某种程度上,必须输送的功率越多,必须使用越多的“引脚” [焊球] 来输送该功率,从而减少了可用于芯片外与内存、I/O 或其他处理器通信的潜在数量;提取废热也存在经济限制)。较低的开关能量意味着可以在给定的功率预算内完成更多的工作;较低的空闲(“泄漏”)功率意味着可以保持更多晶体管通电并随时准备工作(这对于必须始终通电才能保持状态的 SRAM 来说可能特别重要)。