作者ggg12345 (ggg)
看板Programming
标题Re: [闲聊] Intel Atom processors are in-order m …
时间Mon Nov 17 18:09:44 2008
※ 引述《JohnLinq (林约翰)》之铭言:
: : 的介绍. 不得不佩服商业公司的宣传与用字.
: : in-order 指的就是要配合 instruction fetch & execution pipeline.
:
: 我来说说我个人的一点粗浅理解,请多多包涵。
:
: 乱序执行是为了克服指令的「相关」与「移转」,
: 失去乱序执行而回归到in-order,则在遇到具有相关性的指令的时候,
: 整条流水线当中,後面的指令就必须等待前面的指令完成,才能够接着被执行,
: 如此一来,就失去了流水线并行的本意。
:
: http://cache-www.intel.com/cd/00/00/38/79/387971_387971.gif

:
看这个图, 这个 in-order scheduling 举的例比较像是
instruction level parallelism
a=b*7
b=d*7
这两个算式是不能对调次序执行的.
a=b*7
movl b,%eax
imul $7,%eax
movl %eax,a
b=d*7
movl d,%edx
imul $7,%edx
movl %edx,b
但配合 load/operation/store pipleline 是可以成为流水线式的并行
| T1 | T2 | T3 | T4
------------------------------------------------------------------------
put result stage | | | movl %eax,a| movl %edx,b
------------------------------------------------------------------------
integer multiply | |imul $7,%eax | imul $7,edx|
------------------------------------------------------------------------
get operand stage | movl b,%eax |movl d,%edx | |
-------------------------------------------------------------------------
本来 6 个动作时间, 但透过 pipleline 仍然维持次序, 却只要四个时间.
这例子是利用较多的 register 只以一组 integer ALU 与独立的memory load
memory store 两个模组三者形成流水线(管线). 透过 pipleline parallelism
达到指令并行处理的效果. 这种方法可以想像成这 6 个指令被先快取进来, 再
按不同的功能分类, 再按同类依序(in-order)送进同一类的function unit
LOAD (movl b,%eax , movl d,%edx)
IMUL (imul $7,%eax , imul $7,%edx)
STORE (movl %eax,a , movl %edx,b)
这个方式可以用硬体电路协助检查, 在预取 6 个指令下, 使原来的指令可以按
类仍然是按序, 但可跳跃交错进行. 也就是让原来的
load1/imul1/store1 ,/load2/imul2/store2
可以透过硬体标记自动变成
<load1, > / <imul1, load2> / <store1, imul2> / < ,store2>
尽量塞进空余的 function unit pipleline.
Atom processor 则是去掉这个硬体协助跳跃多塞的额外辅助电路, 改为由
compiler 或 programer 自行按 pipleline function unit 自行按序调整.
电脑的执行一向是 "按序" , 按大家习惯的依序执行, 产生 "确定性" 的可
预期结果.
compiler 要做的是 in-order SCHEDULING , 协助先排一下次序时程.
使用 in-order 的相反词 --乱序 是完全错误的. 乱序乱跑能得出同样的
结果吗 ?
--
※ 编辑: ggg12345 来自: 140.115.4.12 (08/03 14:42)