Cache 存在的原因是基於程式碼有所謂的時間局部性 (Temporal Locality)與空間局部性 (Spatial Locality),而其中的時間局部性意指在短時間內相同的程式碼被執行的機率是很高的(例如 loop )。傳統的 Level 1 Instruction Cache ,乃是存放尚未解碼的的原始機械碼 (machine code) ,然而 Trace Cache 卻是存放已解碼 (decoded) 過的微指令 (micro operation,
uop),以供分配單元 (dispatch unit) 分派給對應的執行單元 (execution unit) ,例如獨立存在的邏輯算數、浮點運算、記憶體存取執行單元。
指令解碼器的數量,是影響同時執行指令個數的前端關卡,因為指令解碼器越多,代表越多的 uop 會被產生,可由 dispatch unit 分派給對應的 execution unit。然而不同於固定長度指令的處理器, x86 的可變長度指令會造成指令解碼器的電路複雜度與耗電量比前者來得高,需要更多的時間,不利於拉高時脈。 Intel 據此採用Trace Cache 的設計,減少 decoder 數量,以維持效能、達到易於提升時脈、減少電路複雜度及耗電量的目的。
前代 P6 核心,自 PentiumPRO 至 PentiumIII,採用 4-1-1 的解碼器架構(一個複雜指令解碼器,兩個簡單指令解碼器),亦即在一個時脈週期 (clock cycle) 最多可以對三個連續的 machine code 解碼,其中兩個解碼器只能解碼出只含一個
uop 的 machine code ,另一個則可對含有四個以下
uop 的 machine code 做解碼動作,但要是遇到含有超過四個
uop 的complex machine code ,則需要更多時脈被解碼。而 Pentium4 只有一個複雜指令解碼器針對 Trace Cache miss 的情況下由 Level 2 Cache 擷取指令做解碼動作再將
uop 送至 Trace Cache 存放。接著,兩者對uop 均會由 dispatcher 負責分派
uop 至相對應的 execution unit。
出處