※ 引述《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