CISC 和 VLIW,以及指令和操作碼

CISC 和 VLIW,以及指令和操作碼

http://en.wikipedia.org/wiki/Instruction_set

CISC處理器在其指令集中包含“複雜”指令。單一「複雜」指令執行的操作可能在其他電腦上需要許多指令。這種指令的典型例子是採取多個步驟、控制多個功能單元或以比給定處理器實現的大量簡單指令更大的規模出現的指令。

……

超長指令字 (VLIW) 架構,其中包括許多微代碼架構,單一指令包括多個同時操作碼及其操作數。

CISC 和 VLIW 在我看來是相同的概念,因為一條指令包含多個操作(即操作碼)。那麼它們是同一個概念嗎?

當判斷一條指令是否有多個操作(即操作碼)時,如何定義單一操作(即操作碼)?

答案1

現代 CISC 處理器具有多個執行單元。它們還有許多額外的電路和邏輯來嘗試在這些執行單元之間分配指令流。

VLIW 試圖讓編譯器完成其中一些工作,並將節省的電路用於更多的執行單元、快取或其他資源。

一個例子是 Itanium,其中指令字為 128 位元並包含三個指令。這讓編譯器可以完成一些配對指令以一起執行的工作。

答案2

指令是必須在下一個指令之前邏輯完成的單一指令。如果一條指令包含多個操作(例如在 VLIW 指令中),則這些操作應同時完成。在 VLIW 指令中,每個操作槽對應一個硬體處理單元(FPU 和 ALU 的組合),這些單元由指令靜態分配。在 CISC 或 RISC 中,處理器可以選擇任何自由處理單元。但是,由於單元是在具有VLIW 的指令中分配的,因此您無法在具有更多或更少處理單元的另一個模型上運行一個VLIW 的程式碼,因為該指令在其指令中將具有更多或更少的插槽,儘管某些更大的插槽可能會更多或更少。程式碼不能使用額外的處理單元,除非專門為處理器重新編譯。

VLIW 的限制正是促使顯式資料圖執行 (EDGE)

答案3

當判斷一條指令是否有多個操作(即操作碼)時,如何定義單一操作(即操作碼)?

定義和您的期望不太正確。“操作碼”用於指示可見的指令,而不是像微操作這樣的隱藏操作,以及“操作說明”應該只參考使用者公開的操作。 「操作」並不對應於操作碼,可能很簡單(單一操作碼)或複雜(多個操作碼),這取決於您如何引用它,例如您是否想要解決整個操作本身,或解決每個較低階的操作曾經成就過那件大事。就像當你做除法時,它可以被稱為單一操作。但除法也可以細分為一系列減法/乘法,即多個運算(硬體術語中的階段)。許多舊的 RISC 架構對於除法的各個階段都有單獨的指令,以保持指令簡單並簡化管線操作。但現代 RISC 架構通常不會這樣做,並且可以具有像 CISC 一樣非常複雜的指令,例如rlwinm在 PowerPC 或ldm/stmARM 中。

VLIW架構,單條指令仍然是1條指令。但是,說明將組合在一起作為一批。例如,安騰架構中的一個批次包含 3 個將要執行的指令同時。當然,每條指令必須有自己的操作碼,而這些操作碼可供程式設計師使用。此外,這些指令獨立於其他指令,這與微操作不同,微操作共同代表一些更高層級指令的操作。例如,在某些架構中,您可能會在一批中對彼此不相關的不同事物進行 2 次加法、乘法和位元異或運算。

相反,一個CISC指令是只有一個執行單一操作的指令,並且具有一個操作碼。前幾代 CISC CPU 直接執行每條指令,因此它實際上是一條牢不可破的指令。然而,在現代處理器中,複雜的「操作」將被分為多個更簡單的微操作,這些微操作可以在更短的時脈週期內完成。這些微操作是外人不可見,所以你不能將它們稱為多個操作碼。對於用戶來說,它仍然是一條指令。你可能會永遠不知道 Intel 或 AMD 在幕後使用哪種微操作。此外,CISC指令可以分解為單一微操作或多個微操作,因此說CISC在單一指令中包含多個操作是完全錯誤的。

事實上,現代 RISC 架構也像 CISC 一樣將指令分解為微操作,並且非常簡單的操作也組合在一起形成用戶不可見的巨集操作,例如 x86 中的 CMP/Jcc 或 RISC 中的 DIV/REM - V ,你不會說RISC很簡單。一條 RISC 指令仍然可以執行多個操作。

CISC 和 VLIW,一個指令一次運行一個操作碼(暫時禁止超標量和亂序執行),一個一次執行多個指令,那麼它們是如何相同的概念呢?您應該在指令集之上查看或至少在同一層級查看。將CPU內部所使用的東西與CPU上方指令集上的東西做比較是沒有意義的。

相關內容