ILP 指令級並行1 軟體方法

2021-10-05 10:51:45 字數 1486 閱讀 7870

迴圈展開

基本塊的定義

直線型**,無分支;單入口;程式由分支語句連線基本塊構成

迴圈級並行

第乙個思路是調整迴圈中的指令順序,以減少因為相關產生的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 例...