2015-05-05 138 views
3

我正在閱讀Ulrich Drepper的「每個計算機科學家應該知道的關於記憶的內容」。指令的解碼形式是什麼?

在第6.2.2,它讀取:

[...]指令已到 它們可以執行之前進行解碼,並加快這(在x86和x86-64重要 ),指令實際上被緩存在 的解碼錶格中,而不是以從 內存中讀取的字節/字形式。

作者通過「解碼」形式表示指令意味着什麼?這些說明不是指他們自己的意思嗎? 「添加」是一個「添加」,例如...

它的「解碼」形式的表示是什麼?爲什麼他們需要緩存它?它不是確定性的嗎?是否需要時間來「解碼」管道中的指令,爲什麼?

+1

維基解釋得很好http://en.wikipedia.org/wiki/Central_processing_unit#Decode – Adrian

回答

3

現代Intel CPU的實際使用所謂microcode執行許多指令。微碼由用於實現高級指令的較簡單的低級指令集編寫的代碼組成(例如,rep-前綴指令可能實現爲微代碼循環)。因爲這有效地要求CPU自己將輸入指令流「編譯」成微碼,所以可以想象正在緩存這個微碼(以避免重複編譯它的開銷)。

當然,緩存「已解碼」指令的確切細節因處理器而異,因此一般聲明是不可能的。

+0

不,這不是Ulrich Drepper所說的。他正在討論將指令解碼爲實際緩存的微操作。出於性能方面的原因,現代英特爾處理器實際上使用的代碼比其前輩少得多。 –

+0

...... Ulrich Drepper與這次談話有什麼關係? – nneonneo

+1

嘗試閱讀問題。 –

2

您認爲單指令實際上對應於(可能)處理器上的整套不同電路。 「解碼」意味着機器碼被讀取,並且現在存在一些選擇適當電路的元數據或處理器狀態。緩存比緩存代碼更有效。

例如,加載指令可能會使用一個實施偏移處理,並立即完全不同的電路解決...

1

3總是步驟a CPU確實是:

  1. 抓取(從存儲器指令);

  2. decode(指令 - 你的問題);

  3. 執行(根據解碼階段讓電信號走入COU)。

解碼的指令意味着CPU「解碼器」 - 這是在CPU內部的硬件組件 - 解碼該二進制指令,並決定如何處理基於所述指令的電信號(指令)。

換句話說:指令被轉換爲控制CPU其他部分的信號。

2

這不是您在經典RISC管道中看到的那種解碼步驟。在現代x86處理器中,指令在最終進入「生成控制信號」階段之前會經歷幾個解碼步驟。它們是「預解碼」(識別指令邊界),解碼成μops,然後緩存,緩存和排隊,直到它們最終到達「RISC-like核心」,在那裏它們被調度並放入保留站,然後才最終到達一個ALU(如果適用)。在大多數情況下,它們可能還沒有用經典的RISC「轉換爲實際控制信號」的意義來解碼,這將使它們變得太寬,以致於在L1C中放置1.5K它們是有意義的。無論如何,由前端生成的這些μops是「類RISC核心」的指令集,它們並不是真正的微代碼,而是老式的狀態機順序生成一堆控制信號的意思。雖然這是可比的。

至於什麼μops實際上是什麼樣子,它很難得到具體細節。可以根據指令生成的μops的數量(以及它們去往的端口)進行一些推論,表格找到here。例如,讀操作和讀 - 修改 - 寫指令分成幾部分。一些指令會產生大量的μops,例如浮點收發器,這些指令更像是一種可能在其他指令上實現的內置函數。執行可變工作量的指令也會生成可變數量的μops,例如rep movs。所以μops看起來像RISC指令,但是我們已經知道了。