最近在看《深入理解计算机系统》,真的很不错,让我对CPU又有了更深的了解。

我们都知道,实际上我们用高级语言编写的程序,被编译成可执行程序,存放可执行程序的文件实际就是一些机器码,可以被硬件执行。在这一步,我们称其为机器指令(Machine Instruction),而到了这一步,往往也就以为自己到达了所谓的“底层”。

前一段时间,我还在论坛提过一个疑问,就是Intel编译器编译出的代码是针对Intel处理器优化的,在AMD处理器上执行效率一般,为什么会出现这个情况?因为机器指令序列都是一样的,每个机器指令按照硬件厂商给的参数,周期数(clock cycle)应该也差别不大啊。

现在我想,我可以尝试来解答这个问题了。在我们看来,每一步机器指令都是一个原子操作,但是硬件为了追求更高的吞吐率(through output),将这些指令又细分成一个个独立的阶段,称之为微指令(micro-operation,μ-op),这些微指令可以在一个流水线(pipeline)的不同阶段中顺序执行执行,当流水线头部空了,就可以执行下一个机器指令的微指令。这样“同时”执行的机器指令就很多,从而增加了吞吐率。

当然一味增加流水线的阶段也是不行的,因为从一个阶段到另一阶段有时间延迟(latency),并且这些阶段公用时钟信号,所以要用执行时间最长的阶段所需时间作为公共时钟,并且很多操作无法切割成太多的微指令。下图是奔4处理器的流水线示意图:

所以,我之前的概念,mov reg reg这样的操作只需要耗费1个clock,这是错误的,正确的说法是这个操作的均摊时间是1个clock,它必须走完流水线所有的步骤,而流水线的每个步骤至少是1个clock的。一条机器指令的执行,包括取值、译码、计算、访存、更新PC等很多步骤,而微指令可以看成是译码以后的结果,它还可以缓存在buffer上,从而下次遇到相同的指令,减少译码时间。

还有一个问题就是相邻的机器指令之间如果有依赖,上一个指令还没在流水线出来,下一个就进去了,这样下一个可能用了错误的值,这个问题可以用转发(bypass)上个流水线的中间值给下个流水线,或暂停(stall)来解决,但是stall是不合理的,因为这样使得流水线的一部分处于停滞状态,而还有一个方法,就是乱序执行(out of order),将后面没有依赖关系的指令提到前面来,尽量使流水线填充满。

所以,可以想象,Intel和AMD的微指令层面,流水线肯定是非常不一样的。那么如何安排机器指令顺序(当然执行时CPU会判断能否乱序,但是这时已经是后期,如果编译器能更多的去除依赖当然就更好了),以及如何利用寄存器(有时同样的功能也可以用不同的机器码来实现)等等。所以Intel的编译器能够针对自家的CPU给出更高效的编译结果。

例如:AMD文档给编译器开发者的一条建议是,当跳转后面紧跟ret指令时,最好插入一个rep,从而在不引入错误的前提下,提高CPU效率。

......
je  .L33
rep
ret

扩展阅读:

CPU流水线的探秘之旅 (这是翻译后的版本,英文原版地址:A Journey Through the CPU Pipeline)

参考文档

《深入理解计算机系统》

http://en.wikipedia.org/wiki/Pipeline_(computing)

http://en.wikipedia.org/wiki/Micro-operation

关于机器指令和微指令相关推荐

  1. 简述机器指令与微指令之间的关系_自考《计算机组成原理》模拟试题(一)

    一.单项选择题(本大题共 25小题,每小题1分,共25分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内. 1.-0的8位二进制补码是( ) A.10000 ...

  2. 简述机器指令与微指令之间的关系_《计算机组成原理》试卷B与参考答案

    考 生 信 息 栏 系 专 业 级 班 级 姓 名 学 号 装 订 线 XXXX 学院试卷 2010 - 2011 学年 第 2 学期 课程名称 计算机组成原理 试卷 卷别 A B  专业 级 班级 ...

  3. 机器指令与微指令的关系

    机器指令和微指令的关系归纳如下:     1. 一条机器指令对应一个微程序,这个微程序是由若干条微指令构成的.因此,一条机器指令的功能是若干条微指令组成的序列来实现的.简而言之,一条机器指令所完成的操 ...

  4. 简述机器指令与微指令之间的关系_机器指令与微指令有什么联系和区别?

    展开全部 一.概念不62616964757a686964616fe78988e69d8331333431353263同 1.机器指令:机器指令是CPU能直接识别并执行的指令. 2.微指令:是指在机器的 ...

  5. 机器指令与微指令之间的关系

    一.概念不同 1.机器指令:机器指令是CPU能直接识别并执行的指令. 2.微指令:是指在机器的一个CPU周期中,一组实现一定操作功能的微命令的组合,描述微操作的语句. 二.表现格式不同 1.机器指令: ...

  6. 机器指令和微指令的关系

    一个程序是由多条机器指令组成. 一条机器指令对应一个微程序,他们是一一对应关系. 微程序是由若干条微指令构成的,一个微指令我们称一个微周期,等于比如取指周期,间址周期,执行周期,中断周期 另外, 只有 ...

  7. 试说明机器指令和微指令之间的关系_男女关系之间,是他在说谎吗?观察他的肢体语言说明一切...

    很不幸地,如果一对男女间的关系紧绷,"说谎"的状况往往在所难免.特别当他有劈腿嫌疑时,会直接承认自己出轨的,恐怕十个人里面还找不到一个吧!虽然有些事情不一定要追根究底或说破,但要是 ...

  8. 简述机器指令与微指令之间的关系_SAP Marketing Cloud功能简述(四) 线索和客户管理...

    这个系列的前三篇文章Grace Dong已经给大家带来了下面的内容: SAP Marketing Cloud功能简述(一) : Contacts和Profiles SAP Marketing Clou ...

  9. 简述机器指令与微指令之间的关系_技术动态 | 跨句多元关系抽取

    第一部分 概述 关系抽取简介 关系抽取是从自由文本中获取实体间所具有的语义关系.这种语义关系常以三元组 <E1,R,E2> 的形式表达,其中,E1 和E2 表示实体,R 表示实体间所具有的 ...

最新文章

  1. c语言1变A,c语言那些细节之a+1和a+1的区别
  2. nodejs安装及npm模块插件安装路径配置
  3. 35+非常棒的视差滚动(Parallax Scrolling)效果WordPress主题
  4. [codility]Min-abs-sum
  5. 列表的pop()和路径拼接问题
  6. php7和php5对比
  7. NFT 项目的 7 种市场营销策略
  8. Eclipse XML 编辑器
  9. phpmyadmin mysql_phpmyadmin
  10. 滴滴裁员 2000 人,具体补偿方案已出
  11. 'Publishing' to tomcat v8.0 server at localhos... Tomcat 报错
  12. 多核CPU 跟 进程/线程
  13. OPenCV4-颜色识别(一)调色板和简单的颜色识别
  14. 联想小新锐7000 装win7系统图解
  15. 安装ubuntu后必须做的事情(对我而言)
  16. 与苹果和谷歌抗争堡垒创造者发动了远征
  17. 【应急案例】一次入侵应急响应分析
  18. 解决matlab2018A中文乱码问题
  19. ctrl+a快捷键失灵情况
  20. mysql查询表中重复记录

热门文章

  1. Scratch-简易时钟制作
  2. chrome android 中文版下载,Chrome浏览器安卓版
  3. 注意了!浏览色情网站被短信通知检讨?可能是诈骗!
  4. c++中计算2得n次方_南大专转本 2020年计算机考前模拟(A)
  5. matlab 中 strcat函数的用法
  6. 情感分析论文中涉及的数据
  7. 儿童学编程的原因以及方法
  8. 二、神奇的自然常数e之“自然”之力
  9. 2015暑假集训总结
  10. 【学习笔记】VGG 网络结构