- 论坛徽章:
- 0
|
原帖由 fineamy 于 2008-12-7 10:41 发表 ![]()
1.看了mik的指令格式介绍,发现x86竟然是变长编码?
最长码长是15byte,
现在有个问题,如果是这样,那么以内存位宽来说(不太了解是多少位,32bit?64?128?)
2.如果一次可以读取64bit,那么对这些长指令,读取就 ...
其他就不说了,我就跟你说一说指令 fetch(取指过程)
AMD 方面:
AMD 的 L1 instrction cache 是 64K,2-way set 结构,cache line size 是 64 bytes,cache 的装载是以 cache line 为单位的,也就是每次 L1 instrction cache 会从 L2 cache 从加载 64 bytes 字节,如果 L2 cache miss 再到 L3 cache,L3 cache miss 最后到 main memory 加载。
那么:每次 L1 instrction cache line fill (装载),这就是一个 prefetch 预取指过程。 随之而来一系列的 pre 动作就会同时产生:predecode (预解码)、branch prediction(分支预测)等,这一系列动作都是在 cache line fill 时同时产生。
然后,到从 L1 instrction cache 真 fecth 、真decode(解码) 送到指令控制单元,分派指令执行。
Intel 方面:
Intel 的部件工作分工比较细,prefecth、predecode、branch predication 都有相应的部件进行。L1 instrction cache line 同样是 64 bytes。
从 L1 instrction cache 及 ITLB prefecth 到 prefecth buffer,作相应的 predecode 和 branch predication。结果送到指令队列 buffer(Instruction Queue)。再从 instrction Queue fetch 和 decode,经过指令融和操作后,送调度单元分派指令。
[ 本帖最后由 mik 于 2008-12-8 02:35 编辑 ] |
|