【RISC-V介紹】三分鐘帶你了解RISC-V

riscv

這篇文章會用比較淺顯易懂的文字帶你認識 RISC-V,適合有看過這些專有名詞但不是很了解它們是如何運作的人閱讀,希望可以幫助你整合這些概念。

什麼是RISC?

CPU 的指令集可簡單分為 2 種:RISC(reduced instruction set computer, 精簡指令集電腦)和 CISC(Complex Instruction Set Computer, 複雜指令集電腦),顧名思義就是一個簡單一個複雜(?),至於他們在幹嘛我們一步一步看下去,大家先把這個名詞還有特性記起來就好。

什麼是指令集(instruction set)?

* 中央處理器 CPU (Central Processing Unit)

電腦的運算核心,靠著 解讀與執行指令(instruction) 來維持電腦的運作。

* 組合語言與指令

我們在寫程式的時候,以 C++ 為例,要單純計算兩個數字相加,你可能會這樣寫:

    int a,b,c;
    a = 3;
    b = 4;
    c = a + b;

但是 C++ 是高階的語言,電腦看不懂,我們需要一個**編譯器 (compiler) **來把它轉成機器“比較”看得懂的組合語言 (assembly code)

在組合語言就是各式各樣的指令 (instruction),這些指令各有不同的功能,像是把記憶體內部的資料載入 CPU 的暫存器 (register)*、把兩個暫存器存資料的加起來、跳到另外一行執行等等,為了要讓 CPU 看得懂,在 C++ 裡面一行就可以寫完的東西這邊要變成很多步驟。

以上面code的第四行為例,會需要進行下列的步驟:

  1. 把 a 從記憶體移到 暫存器1 中
  2. 把 b 從記憶體移到 暫存器2 中
  3. 把 暫存器1 和 暫存器2 的內容加起來放進 暫存器3 中
  4. 把 暫存器3 放進記憶體中 c 的位置

* 暫存器 (register) 是在CPU內部的儲存空間,資料要在暫存器裡面 CPU 才可以直接拿來算。

上述的每個步驟就是一個指令,步驟1和步驟2的功能相同,那他們就屬於相同的指令,打成 RISC-V 的指令名稱就會長這樣 (這個不是完整的指令,只是指令的名稱而已):

LD  //load
LD  //load
ADD //add
SD  //save

不同的 CPU 架構的指令名稱就會跟這個不一樣,雖然基本功能都差不多,但*指令的細節會不太一樣,因此在不同 CPU 架構上編譯出來的組合語言也是不同的。

所以重點來了:

我們知道一個 CPU 的工作就是負責讀懂這些指令進行運算,因此餵給某個 CPU 的指令必須要是它看得懂的才行,而一個 CPU 看得懂的所有指令,我們就叫他“某 CPU 的指令集”,像是 RISC-V 的指令集、x86 的指令集、MIPS 的指令集等等。

*後面的文章會針對 RISC-V 的指令集做詳細的介紹。

* 為什麼要有不同的 CPU 指令集?

CPU 指令集可以被簡單分類在 RISC 和 CISC 中,像是 RISC-V、MIPS、Arm 架構屬於 RISC,x86 屬於CISC。RISC 指令集中的指令數量不多,功能也不多,所以需要較多指令才能相同的工作;CISC 則相反,他指令數量超多,功能超多,很多時候只要一行指令就可以完成需要的功能。詳細比較如下:

因為兩者各有優缺點,根據不同的應用我們會需要不同的 CPU 架構:CISC 功能強大,適合高性能但同時高功耗的 CPU 架構,像是 Intel x86 ;RISC 架構簡單,適合需要面積與功耗較小的行動裝置,所以像是手機裡的 Arm 晶片就是屬於 RISC 架構的一種。

值得一提的是,電腦發展並不是一開始就有 CISC 和 RISC 兩種架構的。CISC 是在 RISC 的出現後才出現與其相對的名詞。

接下來我們來談談為什麼 RISC 的概念這麼重要。

RISC-V在紅什麼?

  1. 指令集精簡 請注意我剛剛說的:RISC 架構簡單,因此面積小且功耗低因為硬體每個功能都需要事先寫好刻成一個電路,所以指令格式愈一致,需要的電路就愈簡單,面積也就愈小,功耗也會愈低,且資料從進去 CPU 到出來的時間也會較短,所以每秒可以做的運算也愈多。此外,指令格式愈一致,執行pipeline*的效果就愈好,也就可以節省更多的時間。 就現在的趨勢來看,我們希望 CPU 算得愈快愈好,因此指令集要愈精簡愈好,而 RISC-V 就是設計更為精簡的 RISC 指令集。因為現在 CPU 已經算得很快了,要讓它更快的成本要比以前更多,為了讓同一代 CPU 能用更久,RISC-V是一個很好的選擇。 *pipeline:線路管線化,之後會介紹。
  2. 開源指令集
    容易取得資源,不像 x86 受制於所屬公司知識產權的控制,因此不需授權費用,成本較低。
  3. 彈性較大
    這是 RISC-V 與 Arm 的最大差別,它預留了客製指令的擴充空間(custom instructions),可以根據不同需求做出相對應設計。這點在 x86 和 Arm 處理器中幾乎做不到,如果需要加強某些特定的功能,價格也會隨之上升。

留言討論區