http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2748&p=2
P-M L2 width 是 256bit,相形之下 K8 只有 128bit,而 k7 更只有 64bit,在頻寬上顯得不足,我想這是 K8 架構上比較不足的地方,可能也是 k7/k8 加大 L2 cache 性能提升不明顯的原因之一。
至於讀入 operand 太慢,我想 pipeline 的設計,不管是在哪個 stage 由讀入 operand 跟 pipeline stall 幾乎沒什麼關係,因為:
1) pipeline 架構講求的是最後發出的指令,所以不管在哪個 stage 由記憶體載入根本是無關的,stall 的 cycle 是由記憶體或 cache 載入所花的時間在算的。就算 p4 高達 31-stage pipeline,也不會有人質疑其載入 operand 的 stage 先後。
就算無法了解為何無關,
2) 相較於 pipeline stage 的 "幾個" 週期數差異,由記憶體載入 L1/L2 的時間可能高達上百甚至上千個 cycle,根本微不足道。如果說從 L1/L2 載入,則可能需要數個到數十個 cycle,影響也是不大。
3) 況且 cache 還有 prefetch 的機制存在。
K8 的微架構上,明顯不如 core 的應該在於 SSE 單元只有兩組,而 core 確有三組,另外就是 1-cycle 128bit SSE,而 k8 卻是切成兩個 64bit SSE 需要兩個週期來做運算。
另外一個是在解碼器,core 是一個 complex(最多 4 uops) 與三個 simple (1 uop)成 4-1-1-1,而 k8 採用 3 個 complex (每個最多 2 uops),是 core 最多可解碼 4 個 x86 指令,而 k8 只有 3 個。
在 Load/Store 單元上,core 也比 k8 多了一組。
另外 memory disambiguation 使得記憶體可以預先載入,甚至是 out-of-order,使得這個才真的能使得 stall 減少(而不是在哪個 stage 載入 operand,但其實減少的週期數比起載入 stall 微乎其微,但總是減少了),也是 k8 所缺乏的。
總歸 core 採用比 dothan/yonah 與 k8 更寬的架構處理指令,這才是性能會超越 k8 的主因,並不是比較早的 pipeline stage 讀取記憶體晚了幾個 cycle。