簡體   English   中英

什么是解碼形式的指令?

[英]What is the decoded form of an instruction?

我正在閱讀Ulrich Drepper撰寫的“每個計算機科學家應該了解的關於記憶的內容”。

在6.2.2節中,它的內容如下:

[...]指令必須在執行之前進行解碼,為了加快速度(在x86和x86-64上很重要),指令實際上是以解碼形式緩存的,而不是從內存中讀取的字節/字形式。

作者對指令的“解碼”形式意味着什么? 指令不是意味着他們自己的含義嗎? 例如,“添加”是“添加”......

它的“解碼”形式的代表是什么? 他們為什么需要緩存它? 它不是確定性的嗎? 是否需要時間來“解碼”管道中的指令,為什么?

現代英特爾CPU實際上使用所謂的微碼實現許多指令。 微代碼由用於實現高級指令的更簡單的低級指令集編寫的代碼組成(例如,可以將rep -prefixed指令實現為微編碼循環)。 因為這有效地要求CPU本身將輸入指令流“編譯”成微碼,可以想象正在緩存的是這個微碼(以避免重復編譯它的開銷)。

當然,緩存“解碼”指令的精確細節因處理器而異,因此不可能有一般性陳述。

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

例如,加載指令可能使用一個實現進行偏移尋址,而一個完全不同的電路用於立即尋址......

這不是您在經典RISC管道中看到的那種解碼步驟。 在現代x86處理器中,指令在最終進入“生成控制信號”階段之前經過幾個解碼步驟。 它們是“預編碼”(識別指令邊界),解碼為μops,然后緩沖,緩存和排隊,直到它們最終到達“RISC類核心”,在那里它們被安排並放入預留站,並且只有在它們最終到達之后ALU(如果適用)。 在大多數路線中,他們可能還沒有在經典的RISC意義上解碼為“變成實際控制信號”,這使得它們太寬而無法將1.5K的它們放入L1C。 無論如何,前端產生的那些μops是“類似RISC的核心”的指令集,它們不是真正意義上的狀態機中的真正微碼,順序產生一堆控制信號。 雖然它可以比較。

至於μops實際上是什么樣子,很難得到細節。 一些推論可以從μops的(他們去和端口)的指令生成的數量進行,表中找到這里 例如,讀操作和讀 - 修改 - 寫指令被分成幾部分。 一些指令產生大量的μops,例如浮點超越,使得這些指令更像是一種可能在其他指令之上實現的內置函數。 執行可變工作量的指令也會生成可變數量的μops,例如rep movs 因此μops看起來像RISC指令,但后來我們已經知道了。

CPU始終執行的3個步驟是:

  1. fetch(來自內存的指令);

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

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

解碼指令意味着CPU“解碼器” - 它是CPU內部的硬件組件 - 對二進制指令進行解碼,並根據指令決定如何處理電信號(指令)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM