精華區beta hardware 關於我們 聯絡資訊
※ 引述《sitos (麥子)》之銘言: : ※ 引述《dolphinus (鬼扯英吉GTB)》之銘言: : : "執行後再存回 trace cache" 這段意味著跑玩的東西 : : 還會丟回 trace cache, 基本上不要說 trace cache, : : 只要是 instruction cache 都是行不通的... : : 我對這句話大感意外就是... : 我不懂為什麼行不通? Instruction cache 裡面放的東西至少也是跑過一次的。 : 也就是在第一次要用的時候一起 fetch 進來的,那些 code 不算是跑過的嗎? : 我不認為有「丟回」這個動作,一面把 code 從 I-cache 送到 decoder , : 一面把一份 code 寫進 trace cache 裡面以便下一次用,設計上並沒有困難。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trace-cache 我沒看到有說回寫或 rebuild trace 的這做法在裡面就是.. :/ 程式那面要丟回 I-cache 是行不通的, 頂多下 prefetch 讓 Cache 去 reflash 掉.. (除了 486 可以以外..) : : 不一定是用過的, 搞不好根本沒使用到那段, 沒被用到過 : : 就被替換掉了. : : 不過我查到的結果是有些是用 LRU 有的是 TC 裡還有自己 : : 的 BTB.. : 我想要問的是,那第一次執行到該 code 的時候,到底有沒有真的執行? : 如果根本就沒有執行到,為什麼會把那段 code 放到 trace cache? : 如果有執行到,應該就算是執行過了,即使沒有 reuse 也算是執行過阿? 如果說是給 ALU 的話是 "沒有". 因為 trace cache 沒有很好的分支預測能力, 所以 比較多的狀況是遇上分支時就把兩種結果全 decode 放 TC 裡面等 CPU 看情況去跑哪一段 (雖然看來對 分支是蠻理想的, 不過這很佔 TC 空間..).. 這些 trace 建好了再丟給 CPU 去執行, 所以如果 就 ALU 來講的話, 剛擺上 TC 的東西肯定是沒執行 過的, 而擺上 TC 的東西因分支之故也不一定會跑.. : : 不一定是跑過的喔... : : 最少在這兩種 TC 設計上都只是擺放而已, : : 而且 TC 最重大的意義就是讓執行時能一條鞭一直下去 : : (只要 TC 沒滿..), 而已經確定執行過的指令可以存活 : : 在 TC 裡較久這樣... : 所以有可能把根本不會執行到的指令放到 trace cache 裡面去嗎? : 意思是說,當 branch prediction 結果出來以後就先拿進去放, : 但是因為可能 prediction 錯了,所以擺進去的東西根本沒用到? : 這樣的話擺進去的東西為什麼不用後來知道正確的 branch 結果取代掉呢? : 或者一開始就應該要把確定已經確定執行順序的 code 放進去? 我所知道是會這樣做, 因為要考慮到萬一 prediction miss 的狀況 (通常都很慘..), 然後沒被用到的那條 trace slot 在 TC 不夠用時再看用啥方法代換掉.. paper 上用 BTB 當參考, 而 netbrust 家族好像要到 prescott 才有真的實做 TC-BTB... 比較了一下 IA32 programming guide 還有一些講 P4 arch 的文章, 還有那兩篇論文等一些文章後的結論.. : 後期是多後期? : 我會去問修課老師關於 intel project 的事情, : 他之前是在 intel 做 compiler 的,應該會知道。 我忘了. 只記得是在 IDF 2006 夏秋那時跟 merom 一 起發表的新架構藍圖, 裡面有用上 trace processor 的概念.. 不過從去年年底開始 intel 自己 roadmap 陣腳大亂, 會啥時真的用上我不知道了.... : : 有得罪之處還請見諒嘍. :) : 沒這回事 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: dolphinus 來自: 61.216.216.190 (05/03 00:24)