micro-fusion

随着技术的发展,CPU内部指令处理单元(execution unit)以及端口(port)增多,在Pentium 4的时候,发出到Execution Unit的μops的throughput可以高达6(6 μops/clock cycle),这时候,流水线中的瓶颈会出现在register renaming(RAT)以及retirement(RRF),这两部分的throughput为3。为了突破这部分的瓶颈,Intel从Pentium M处理器开始引入了micro-fusion技术。

有很多对内存进行操作的指令都会被分成两个或以上的μops,如 add eax, [mem] 在解码时就会分成 mov tmp, [mem]; add eax, tmp。这类型的指令在前端只需要fetch与decode一条指令,相比原来的两条指令占用更少资源(带宽、解码资源、功耗),不过由于在解码后分成多个μops,占用资源(μop entries)增多,但是throughput相对较小,使得RAT以及RRF阶段显得更为拥堵。

micro-fusion为这种问题提供了很好的解决方案:把同一条指令的几个μops混合成一个复杂的μop,使得其在RAT以及RRF阶段只占用一项;而在EU阶段,该复杂μop会被多次发送到EU中进行处理,表现得像是有多个已被分解的μops一样。micro-fusion的指令可以被任意decoder进行解码

可以被micro-fused的指令:

  • 所有的store指令,写回内存的store指令分为两个步骤:store-address、store-data。
  • 所有读内存与运算的混合指令(load+op),如:
    • ADDPS XMM9, OWORD PTR [RSP+40]
    • FADD DOUBLE PTR [RDI+RSI*8]
    • XOR RAX, QWORD PTR [RBP+32]
  • 所有读内存与跳转的混合指令(load+jmp),如:
    • JMP [RDI+200]
    • RET
  • CMP与TEST对比内存操作数并与立即数的指令(cmp mem-imm)。

上面的描述有例外的情况,就是不能采用RIP寄存器进行内存寻址:

  • CMP [RIP+400], 27
  • MOV [RIP+3000], 142
  • JMP [RIP+5000000]

采用了RIP寄存器进行内存寻址的指令是不能被micro-fused的,并且这些指令只能由decoder0进行解码。

macro-fusion

Intel在Core处理器时开始引入macro-fusion技术。与micro-fusion一样,macro-fusion能使得指令占用更少的资源与功耗。不同的是macro-fusion是把两条指令组合成一个复杂的μop,这种μops在pipeline的各个阶段中也是只占用一项。

在Core微处理器中,第一条指令必须为CMP或者TEST,作用于REG-REG,REG-IMM或者REG-MEM,第二条指令必须为条件跳转指令,并且指令恰好位于第一条指令之后。比较然后进行条件跳转这种指令组合在日常的代码中非常普遍,因此如果代码设计得当,将能更容易触发macro-fusion,达到减少带宽占用以及功耗的效果。

指令流在predecode后,可以分离出一条一条的指令,然后流经instruction queue。在instruction queue与decoder之间会对可以合并的指令对进行macro-fusion。macro-fused后的指令可以被任意decoder进行解码

进行macro-fusion的指令对需要满足以下条件:

1. 对与CMP与TEST来说,只有是下面的模式才能进行合并:

REG-REG,如:CMP EAX, ECX; JZ label
REG-IMM, 如:CMP EAX, 0x80; JZ label
REG-MEM, 如:CMP EAX, [ECX]; JZ label
MEM-REG, 如:CMP [EAX], ECX; JZ label

如果是MEM-IMM模式的话,则不能合并。

2. 不同的第一条指令,对第二条指令有不同的匹配要求,并不是所有的条件跳转指令都能与第一条指令进行配对合并。

Core微处理器中可以进行macro-fusion的指令对:

Macro-Fusibility
Instruction TEST CMP
JO/JNO
JC/JB/JAE/JNB
JE/JZ/JNE/JNZ
JNA/JBE/JA/JNBE
JS/JNS/JP/JPE/JNP/JPO
JL/JNGE/JGE/JNL/JLE/JNG/JG/JNLE

可见TEST可以跟所有的条件跳转指令合并,但是CMP只能跟检查了carry flag或者zero flag的条件跳转指令合并,也就是说Core微处理器中,对于有符号的比较跳转无法进行合并,但是无符号的比较跳转则可以进行合并。

如上图所示,有符号的条件跳转指令为JGE,而无符号的条件跳转指令为JAE。在Core微处理器中CMP与JAE可以进行macro-fusion,得到形如CMPJAE的μop。

不过在Nehalem微处理器之后就可以支持有符号跳转指令的macro-fusion了。

Sandy Bridge微处理器进一步扩充了指令可以进行macro-fusion的指令对:

Macro-Fusibility
Instruction TEST CMP AND ADD SUB INC DEC
JO/JNO
JC/JB/JAE/JNB
JE/JZ/JNE/JNZ
JNA/JBE/JA/JNBE
JS/JNS/JP/JPE/JNP/JPO
JL/JNGE/JGE/JNL/JLE/JNG/JG/JNLE

Reference:

Intel® 64 and IA-32 Architectures Optimization Reference Manual

Macro-Operation Fusion (MOP Fusion)

A JOURNEY IN MODERN COMPUTER ARCHITECTURES

Intel 64 and IA-32 Architectures Software Developer's Manual

micro-fusion & macro-fusion的更多相关文章

  1. F1 score,micro F1score,macro F1score 的定义

    F1 score,micro F1score,macro F1score 的定义 2018年09月28日 19:30:08 wanglei_1996 阅读数 976   本篇博客可能会继续更新 最近在 ...

  2. 机器学习--Micro Average,Macro Average, Weighted Average

    根据前面几篇文章我们可以知道,当我们为模型泛化性能选择评估指标时,要根据问题本身以及数据集等因素来做选择.本篇博客主要是解释Micro Average,Macro Average,Weighted A ...

  3. Micro和Macro性能学习【转载】

    转自:https://datascience.stackexchange.com/questions/15989/micro-average-vs-macro-average-performance- ...

  4. 多分类评测标准(micro 和 macro)

  5. Mac入门 (二) 使用VMware Fusion虚拟机

    有了Mac机,还是需在Mac上用Windows怎么办?, VMware Fusion 是运行在Mac机上的虚拟机软件, 类似于VMware workstation. 这样就可以在Mac上运行Windo ...

  6. RPM Fusion on CentOS7

    RPM Fusion RPM Fusion provides software that the Fedora Project or Red Hat doesn't want to ship. Tha ...

  7. 第二周02:Fusion ICP逐帧融合

    本周主要任务02:Fusion 使用ICP进行逐帧融合 任务时间: 2014年9月8日-2014年9月14日 任务完成情况: 已实现将各帧融合到统一的第一帧所定义的摄像机坐标系下,但是由于部分帧之间的 ...

  8. (转)Illustrated: Efficient Neural Architecture Search ---Guide on macro and micro search strategies in ENAS

    Illustrated: Efficient Neural Architecture Search --- Guide on macro and micro search strategies in  ...

  9. Sensor fusion(传感器融合)

    From Wikipedia, the free encyclopedia 来自维基百科,免费的百科Sensor fusion is combining of sensory data or data ...

  10. oracle rac cache fusion

    转载自 http://blog.csdn.net/tianlesoftware/article/details/6534239 Introduction This post is about orac ...

随机推荐

  1. for或者while的标记循环

    for或者while的标记循环 今天在写代码的时候,发现一个for循环前有一个字母,不知道这个是什么语法,后来查了一下,这个语法是用来实现标记循环的功能 这个是代码块 r:for(int rowNum ...

  2. Linux下如何让jar包程序在后台一直执行

    Linux下如何让Jar包程序在后台一直执行 shell命令 nohup java -jar xxx.jar & &:让程序后台执行. nohub:让程序控制台输出转移到nohub.o ...

  3. 比官方文档更易懂的Vue.js教程!包你学会!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由蔡述雄发表于云+社区专栏 蔡述雄,现腾讯用户体验设计部QQ空间高级UI工程师.智图图片优化系统首席工程师,曾参与<众妙之门> ...

  4. 【C#复习总结】垃圾回收机制(GC)1

    摘要:今天我们漫谈C#中的垃圾回收机制,本文将从垃圾回收机制的原理讲起,希望对大家有所帮助. GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由 ...

  5. js实现活动倒计时

    let startTime = 1527647143949; // 开始时间 var time = new Countdown('timer',startTime); function Countdo ...

  6. 最短路DAG

    边权皆为正时,有最短路DAG. 最短路DAG代表了从原点到每个点的所有最短路. 最短路树个数=最短路DAG生成树个数.用DAG生成树计数即可.复杂度\(O(n+m)\).

  7. Java 常见编码格式——URL、Base64

    数据编码 我们对数据进行编码是因为在某些情况下,不能直接传输中文字符或者其他字符,比如在设置http协议的头部信息或者cookie时,如果value有中文字符,那么就需要将中文字符使用某种编码方式进行 ...

  8. 区块链教程(二):比特币、区块链、以太坊、Hyperledger的关系

    不知道大家喜不喜欢音乐! 朋克音乐:诞生于七十年代中期,一种源于六十年代车库摇滚和前朋克摇滚的简单摇滚乐.它由一个简单悦耳的主旋律和三个和弦组成,经过演变,朋克已经逐渐脱离摇滚,成为一种独立的音乐,朋 ...

  9. Laravel自带SMTP邮件组件实现发送邮件(QQ、163、企业邮箱都可)

    Laravel自带SMTP邮件组件实现发送邮件(QQ.163.企业邮箱都可)     laravel自带SMTP邮件配置和遇到的坑 laravel自带SwiftMailer库,集成了多种邮件API,可 ...

  10. 2 JAVA 项目名称前红色叹号如何解决

    1 Java 项目前出现红色叹号Eclipse找不到项目需要的JAR包,可以在这里面解决: ① 右键点击项目,选择[Build Path].[Configure Build Path...] ② 在这 ...