計算機組織與結構›Ch5 管線化(Pipeline)
第 5 題/共 58 題
◀ CC 5/58
5. RISC-V、Pipeline Optimization、Register Renaming
#CC-05-005難RISC-VPipeline OptimizationRegister Renaming
題組題幹(本題:第17題,共 2 小題)點擊展開

假設有下列 C 程式碼:

for (i=2; i<=1100; i++)
    A[i] = A[i-1] + A[i-2];

對應的 RISC-V 組合語言如下:

li   x5, 8800
add  x12, x10, x5
addi x11, x10, 16
LOOP:
    fld    f0, -16(x11)
    fld    f1, -8(x11)
    fadd.d f2, f0, f1
    fsd    f2, 0(x11)
    addi   x11, x11, 8
    ble    x11, x12, LOOP

這裡,一個指令的 latency 代表:另一個指令要使用它的結果之前,必須經過多少個 clock cycle。浮點數指令的 latency(cycles)如下:

fadd.d = 4 fld = 6 fsd = 1

在迴圈執行期間,將資料存回主記憶體再重新載入(storing and re-loading data from the main memory)會造成執行變慢。

假設現在你有一個新指令 fmv.d,可以在一個 cycle 內執行完成。這個指令執行暫存器搬移運算。例如:"fmv.d rd, rs1" 會把浮點暫存器 rs1 的值寫入浮點暫存器 rd。

若使用 fmv.d 指令,透過暫存器在迴圈的不同 iteration 之間傳遞資料來優化程式碼效能,執行這段程式碼需要多少個 cycles? 提示:想想套用 fmv.d 後組合語言會變成什麼樣子,並計算最終程式碼所需的總 cycles。

📄 台大114
跳轉到第題
▤完整推導請見《WH 資工筆記 · 計算機組織與結構》Ch5 管線化(Pipeline)
本章題號 · 1–20 / 58