CPU 执行程序的秘密,藏在了这 15 张图里( 六 )
指令的类型指令从功能角度划分 , 可以分为 5 大类:
- 数据传输类型的指令 , 比如 store/load 是寄存器与内存间数据传输的指令 , mov 是将一个内存地址的数据移动到另一个内存地址的指令;
- 运算类型的指令 , 比如加减乘除、位运算、比较大小等等 , 它们最多只能处理两个寄存器中的数据;
- 跳转类型的指令 , 通过修改程序计数器的值来达到跳转执行指令的过程 , 比如编程中常见的 if-else、swtich-case、函数调用等 。
- 信号类型的指令 , 比如发生中断的指令 trap;
- 闲置类型的指令 , 比如指令 nop , 执行后 CPU 会空转一个周期;
对于 CPU 来说 , 在一个时钟周期内 , CPU 仅能完成一个最基本的动作 , 时钟频率越高 , 时钟周期就越短 , 工作速度也就越快 。
一个时钟周期一定能执行完一条指令吗?答案是不一定的 , 大多数指令不能在一个时钟周期完成 , 通常需要若干个时钟周期 。 不同的指令需要的时钟周期是不同的 , 加法和乘法都对应着一条 CPU 指令 , 但是乘法需要的时钟周期就要比加法多 。
如何让程序跑的更快?
程序执行的时候 , 耗费的 CPU 时间少就说明程序是快的 , 对于程序的 CPU 执行时间 , 我们可以拆解成 CPU 时钟周期数(CPU Cycles)和时钟周期时间(Clock Cycle Time)的乘积 。
文章插图
时钟周期时间就是我们前面提及的 CPU 主频 , 主频越高说明 CPU 的工作速度就越快 , 比如我手头上的电脑的 CPU 是 2.4 GHz 四核 Intel Core i5 , 这里的 2.4 GHz 就是电脑的主频 , 时钟周期时间就是 1/2.4G 。
要想 CPU 跑的更快 , 自然缩短时钟周期时间 , 也就是提升 CPU 主频 , 但是今非彼日 , 摩尔定律早已失效 , 当今的 CPU 主频已经很难再做到翻倍的效果了 。
另外 , 换一个更好的 CPU , 这个也是我们软件工程师控制不了的事情 , 我们应该把目光放到另外一个乘法因子 —— CPU 时钟周期数 , 如果能减少程序所需的 CPU 时钟周期数量 , 一样也是能提升程序的性能的 。
对于 CPU 时钟周期数我们可以进一步拆解成:「指令数 x 每条指令的平均时钟周期数(Cycles Per Instruction , 简称 CPI)」 , 于是程序的 CPU 执行时间的公式可变成如下:
文章插图
因此 , 要想程序跑的更快 , 优化这三者即可:
- 指令数 , 表示执行程序所需要多少条指令 , 以及哪些指令 。 这个层面是基本靠编译器来优化 , 毕竟同样的代码 , 在不同的编译器 , 编译出来的计算机指令会有各种不同的表示方式 。
- 每条指令的平均时钟周期数 CPI , 表示一条指令需要多少个时钟周期数 , 现代大多数 CPU 通过流水线技术(Pipline) , 让一条指令需要的 CPU 时钟周期数尽可能的少;
- 时钟周期时间 , 表示计算机主频 , 取决于计算机硬件 。 有的 CPU 支持超频技术 , 打开了超频意味着把 CPU 内部的时钟给调快了 , 于是 CPU 工作速度就变快了 , 但是也是有代价的 , CPU 跑的越快 , 散热的压力就会越大 , CPU 会很容易奔溃 。
文章插图
推荐阅读
- 程序员为教师妻子开发应用:将iPhone变成文档摄像头
- 飞书文档微信小程序审核被卡?字节跳动副总裁谢欣:希望腾讯停止无理由封杀
- 多家快递暂停发往河北省快件,顺丰表示先暂停三天,京东小程序已无法下单
- 2021年换手机哪个配置最重要,CPU只能排第三位
- 8核Zen3 AMD新CPU现身:锐龙7 5700G
- 全新8核国产CPU深入探秘:马上能买到
- 字节跳动高管喊话腾讯,称“飞书文档”小程序审核被卡近两月
- 悔哭!一程序员误把7500个比特币当垃圾扔掉,估算约2.4亿美元
- 苹果改变立场 称macOS实用程序Amphetamine可继续留在Mac应用商店中
- 2.4亿美元打水漂!程序员小哥把7500个比特币当垃圾扔掉 硬盘找不回