《大话处理器》连载——微架构(21) 指令并行的“绿营”和“蓝营”
来源:互联网 发布:淘宝查号是什么意思 编辑:程序博客网 时间:2024/04/24 10:32
程序是由一系列指令组成的,如果要节省执行的时间,最直接的方法就是将指令并行起来执行。在处理器内部通常有很多的执行单元,如加法单元、乘法单元、内存访问单元、浮点运算单元等等,每种执行单元负责一类具体的指令。在前面介绍的乱序执行内核中,每个cycle最多只发射一条指令,即使有时很多指令并行执行,平均的指令执行效率也最多只有每个cycle一条指令。如果发射单元一次能发射多条指令,那么就有更多指令能并行处理了,因此指令并行也称为multi-issue(多发射)。
哪些指令需要并行处理,这需要做判决,根据判决的地方不同,multi-issue又分成了2个阵营:Superscalar和VLIW。
世上没有无缘无故的爱,也没有无缘无故的恨,没有无缘无故的Superscalar,也没有无缘无故的VLIW。Superscalar和VLIW也是随着历史趋势慢慢发展起来的。
Superscalar是由super(超)+ scalar(标量)组成,标量处理器时代的指令都是串行执行的,处理器为了兼容原有的程序,但同时又要提高程序执行效率,就在处理器内部做了指令的并行化处理。这就是超标量处理器的基本原型。
Superscalar的指令并行化在处理器内部实现
如果将指令的并行化显示的声明在指令格式中,处理器只是傻呼呼的执行,这种方式称为VLIW(very long instruction word)。指令的并行化可由编译器完成,也可以由程序员手工写并行汇编代码实现。
VLIW的指令并行化在处理器外部实现
VLIW的典型代表是DSP。TI DSP所使用的汇编代码格式如下:
LDH .D1 *A5++, A0
|| LDH .D2 *B6++, B1
指令前面的“||”表示这条指令和上条指令在同一个cycle执行,如果没有“||”,则表示这条指令在下一个cycle执行。在机器码中,每条指令占32 bit,“||”在第0 bit表示,处理器只需按照指令规则执行即可。
早期的汇编语言都没有单独的字段描述当前指令是否和其他指令并行执行,处理器在发展时,为了保证指令集的兼容性,都采用了Superscalar结构,如x86、MIPS、ARM等等。Superscalar的代价是处理器内部有不少的资源用于将串行的指令序列转换成可以并行的指令序列,这大大的增加了处理器的功耗和面积。而后来产生的新的指令集的处理器,大都采用了VLIW结构,如tilera和Tensilica公司的处理器。
在Multi-issue结构中,不乱序也能实现一定程度的并行,例如,处理器内部有2条执行路径,一条路径执行浮点指令,一条路径执行整数指令,由于浮点指令和整数指令分别使用不同的寄存器,它们没有相关性,可以并行执行。不过,乱序执行的结构,更能提高指令的并行性,当然也需要更多的硬件资源。
- 《大话处理器》连载——微架构(21) 指令并行的“绿营”和“蓝营”
- 《大话处理器》连载——微架构(17) 指令调度
- 《大话处理器》连载——微架构(20) 处理器并行设计——Flynn分类
- 《大话处理器》连载——微架构(12) 指令的相关
- 《大话处理器》连载——微架构(18) 指令的顺序提交
- 《大话处理器》连载——微架构(3) 从子弹射击到指令执行
- 《大话处理器》连载——微架构(15) 寄存器重命名
- 《大话处理器》连载——微架构(13) 去数据相关和控制相关
- 《大话处理器》连载——微架构(6) 流水线上的冒险——免不了磕磕绊绊
- 《大话处理器》连载——微架构(7) 流水线上的冒险——数据冒险
- 《大话处理器》连载——微架构(8) 流水线上的冒险——控制冒险
- 《大话处理器》连载——微架构(16) Buffer的作用——去耦合
- 《大话处理器》连载——微架构(1) 顺溜的2级流水线
- 《大话处理器》连载——微架构(2) 顺溜流水线的深入分析
- 《大话处理器》连载——微架构(4) 史上最经典的5级流水线
- 《大话处理器》连载——微架构(5) DSP更深的流水线
- 《大话处理器》连载——微架构(22) Superscalar处理器实例——Intel P4 CPU
- 《大话处理器》连载——微架构(9) 分支预测——以古为镜,可以知兴替
- 获取当前时间并格式化
- Linux c multiple threads programming
- oracle表空间
- 隐藏QT窗口边框 并且在隐藏后实现窗口拖拽 同时实现透明度
- 线性拟合(最小二乘法)
- 《大话处理器》连载——微架构(21) 指令并行的“绿营”和“蓝营”
- 使用正则表达式验证字符串格式之Pattern&Matcher
- android 增加wifi-p2p api 第三版
- Android应用程序签名详解
- 菜鸟笔记3——Android Camera程序扩充(1) SurfaceHolder问题
- VIM命令一览: VIM学习札记
- Oracle 11G在用EXP 导出时,空表不能导出解决
- yum -y install mysql mysql-server
- 关于ksoap连接webService的问题