精華區beta hardware 關於我們 聯絡資訊
※ 引述《dolphinus (鬼扯英吉GTB)》之銘言: : ※ 引述《sitos (麥子)》之銘言: : : The first time a trace is encountered, : : it is allocated a line in the trace cache. : : 第一次碰到的時候,給它一個 cache line 去存。 : : 這時候應該有執行,一面執行一面放進 trace cache 的 cache line 。 : : If the same trace is encountered again in the course of executing : : the program, i.e. the same starting address and predicted branch outcomes, : : it will be available in the trace cache and is fed directly to the decoder. : : 下一次碰到並且有一樣的 branch prediction 結果時, : : 就把它從 trace cache 中拿出來給 decoder 。 : : 看一下論文嘛,又沒有多少,它真的沒有講嗎? 我英文太爛了 orz : 所以請你指出那裡有講到 "執行後再存回 trace cache" : 這種說法? : 有那一個動作可以從已經過 ROB 之後的東西再丟回 I-cache? 它是寫第一次執行的時候放進去,之後執行到的時候就直接拿來用。 至於存回去這件事,我不知道你在指什麼,但 trace cache 的確放執行過的程式碼。 如果我讀錯了就直接告訴我哪裡讀錯了,我引用的就是上面那一段而已。 : : 上面這一段有些問題,第一,多數的 processor 沒有 L2 "I"-cache , : : L2 大部份都是 unified cache 。所以我不太清楚這邊說的是什麼。 : : 第二,照 paper 所講,的確是在處理 non-continuous basic block 的問題, : : 要把 instruction sequence stream 放成 continuous basic block , : : 至於要不要存 micro-operation 似乎不是 paper 的重點。 : : 我是不知道 x86 是存 micro-instruction 還是 instruction , : : 但是 cache 如果沒有 reuse 就不叫 cache 只能叫 buffer , : : 因此 trace cache 即使第一次存放時是未執行的, : : 到了第二次用到同一串 instruction 時就是已經執行過的程式了。 : 所以我才說你貼的這篇論文只是最早的 trace-cache : 論點, 並不是 netbrust arch. 上所使用的 trace-cache, : netbrust 上的 trace cache 的確也是解 non-continuous : 的問題, 不過它放的是 uOPs, 不是 instruction, 你這篇 : 論文裡放的是一般 instruction. : 同樣的, 只要執行到同樣 trace 就會抓到 cache 裡已存 : 的內容, 但這不等於回存. 我根本就沒有講「回存」這件事,我只有講存的是執行過的程式, paper 不是這樣寫的話就是我讀錯了,至少我讀到的就是這樣。 : : 我在 paper 裡面沒有看到這樣,我不知道商用 processor 怎麼做的。 : : 不過 trace cache 名字既然是 paper 先定義的,應該以 paper 為準。 : netbrust arch 上用的 trace cache 跟你這篇 paper : 不同之處還不只是我上面講擺的東西不一樣而已... : 第二個不一樣之處, 在於 paper 裡 decoder 是擺在最後 : 段的, branch prediction 也是跟 trace cache 擺一起, : 而 BTB 更會根據實際的執行結果去代換掉某些 trace, : 但實際在 netbrust arch 上的做法它沒有根據 BTB, : 反而是用 LRU 法代換掉被使用最少的那組 trace slot. : 兩者的巨大差別請先弄清楚, 這串主要討論的也是商用品. 那我就不知道啦,我對商用品沒研究。我回的只有 trace cache 這個詞 至於你說用 LRU 換掉被使用最少的那組 trace slot , 那就代表 trace slot 裡面存的的確是用過的程式碼, 至少是準備被重複使用的程式碼,而不單只是為了存 decode 過後的 uOP 。 : : trace cache 並不知道 prediction 的結果,它僅在 prediction 的結果, : : 與上一次執行的 control flow 相同的時候,才能被拿去使用。 : : 這兩個東西是獨立的,跟 trace cache 是否完善並沒有關係。 : : trace cache 本身本來就沒有 prediction 的能力。 : 請看 1.3 節那邊對 branch 的敘述, 原始的 trace cache : 是擁有 branch prediction 能力的, 但商用品沒有. : 這一篇論文跟傳統 I-cache 的觀念還是很接近, 跟最後被 : 實作的 trace cache 已經相差很遠了. 要說存起來的 trace 當作是一種 1 bit 的 predictor 當然可以。 不過那樣的 prediction capability 和一般的 branch predictor 差太多了吧。 況且 trace cache 概念上與 predictor 是可以 decouple 的, 就像是 BTB 和 branch predictor 也是可以 decouple 的。 : 這篇第二個作者在 1999 年也有發表一篇相關論文, 同樣 : 也是指出 trace cache 對 branch 上的改善. : 特別是替換掉 trace 的判斷做法都不一樣時, 這論文只能 : 僅供參考而不是當聖經. 是阿,我只是參考它,它上面寫 trace cache 存的是執行過的程式碼。 : : 因為我才疏學淺,所以完全看不懂,我對 K7 不熟,也不知道 trace rule 是什麼。 : 那請去看幾篇專講 trace processor 的論文... 有空再去看 :) : : 我也不知道 netbrust 是什麼,也不知道 x86 的 implementation 是什麼。 : : 不過那對 research 不太重要,所以從來沒有認真去了解過。 :) : 所以您認為拿一篇 "看起來相似" 的論文來解釋一個您自認為 : 相似的東西是適當的? 我根本就不知道商用品上面的 trace cache 是怎麼做的。 只是有人寫了以為追蹤快取是 I-cache 的誤植, 有人回了 trace cache 不是 I-cache ,有人為了 trace cache 是什麼。 trace cache 的確是存程式碼,一開始的確是為了解決 locality 的問題, 避免 I-cache 的 performance 跟不上 branch predictor 而設計的。 你要介紹現在商用品的設計給大家當然更好,我也可以多學一點東西。 洗耳恭聽囉。:) -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.178.71