計算機組織與結構›Ch5 管線化(Pipeline)第 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)