迴圈展開
基本塊的定義
直線型**,無分支;單入口;程式由分支語句連線基本塊構成
迴圈級並行
第乙個思路是調整迴圈中的指令順序,以減少因為相關產生的stall數
例項如下:
loop: ld f0,0(r1) ;f0=vector element
addd f4,f0,f2 ;add scalar from f2
sd 0(r1),f4 ;store result
subi r1,r1,8 ;decrement pointer 8b (dw)
bnez r1,loop ;branch r1!=zero
nop ;delayed branch slot
上述指令中可以看出如果不調整順序,加入stall後如下
loop: ld f0,0(r1) ;f0=vector element
stall
addd f4,f0,f2 ;add scalar in f2
stall
stall
sd 0(r1),f4 ;store result
subi r1,r1,8 ;decrement pointer 8b (dw)
stall ;
bnez r1,loop ;branch r1!=zero
stall ;delayed branch slot
通過調整迴圈內指令順序,將沒有資料相關的指令放在一起以減少stall
loop: ld f0,0(r1)
subi r1,r1,8
addd f4,f0,f2
stall
bnez r1,loop ;delayed branch
sd 8(r1),f4 ;altered when move past subi
進一步優化的思想是將迴圈展開,每4個迴圈展開成乙個迴圈,然後調整指令順序以使得stall進一步減少
loop: ld f0,0(r1)
ld f6,-8(r1)
ld f10,-16(r1)
ld f14,-24(r1)
addd f4,f0,f2
addd f8,f6,f2
addd f12,f10,f2
addd f16,f14,f2
sd 0(r1),f4
sd -8(r1),f8
subi r1,r1,#32
sd 16(r1),f12
bnez r1,loop
sd 8(r1),f16
迴圈展開的注意事項
靜態指令級排程:從編譯器角度看**移動,編譯器在進行**調動時候需要注意以下幾點
暫存器相關——若有相關不能並行
控制相關——受分支指令控制的指令不能移到分支指令之前,不受分支指令控制的指令不能移到分支指令之後
ILP 指令級並3 Tomasolu技術
二 tomasolu技術 核心結構 reservation stations 和上篇介紹的記分牌技術相比,tomasolu技術不同的地方在於將function unit status改為reservation stations。下面先介紹reservation stations的組成部分 opvj ...
2 1 5 指令級並行 譯
計算機設計師致力於提公升他們設計的機器的效能。提公升時鐘速度是讓執行晶元更快的一種方法,但是任何新的設計都不得不受限於當時的歷史環境。因此,大部分計算機體系結構在給定時鐘速度的情況下,依靠並行 同時處理兩件或以上的事務 來獲得更多效能。並行分為指令級並行和處理器級並行兩種。前者的並行指的是運用內部獨...
VUE基礎1方法與指令
前端三個框架 angular.js react.js vue.js vue開發使用熱度不斷上公升 vue核心思想 將頁面的方法封裝好,我們只需要修改資料就會完成相應的頁面展示 基礎語法 匯入vue 1 234 建立vue物件 1 魔板語言引用 魔板語言支援簡單判斷和運算 1 2 3 定義方法 1 例...