IA32平台指令優化一些使用過的有用技術

2021-05-27 18:37:26 字數 714 閱讀 5157

1.【短】迴圈展開。

優點:1. 明顯減少指令**帶來的開銷

2.明確去掉一次錯誤的指令**機會

3.少維護乙個計數變數

缺點:指令變長,可能因為取指時間變長而失去效能優化。

使用:基於實際測試。一般用於短迴圈是有用處的。

2.指令選擇:

做法採用移位,加法減法,而最末選擇乘法除法。

乙個除法的指令週期是加法的40倍。

如歐幾里德法計算最大公約數,比除法快很多。

3.資料相關與指令並行。

應該給更多的機會讓cpu有機會去並行執行**。

如for(i=0;i<10000;i++)  sum+= a[i]

可以修改完

for(i=0;i<2500;i++) 

s1 += a[i] ,s2 += a[i+1] ,s3+= a[i+2],s4 += a[i+3] ;

sum =  s1+s2+s3+s4 ;

4.顯式優化分支**的機會,使分支更容易**

比如,檢查是否三個數全部為0:

if( t1==0 && t2==0 && t3==0 )  可以修改為 :

if( ( t1 | t2 | t3 )==0 )

根據產生的隨機數是奇還是偶來**的話,前者每個分支都是0.5的**正確率,很糟糕的分支**

後者取真的概率是0.125,取假的概率是0.875,可以很好的**

5.記憶體:

IA 32中的數值運算

1 ia 32中的整數運算 記憶體中整形數是以補碼的形式儲存在記憶體中 原碼表示範圍 負數部分 1111 1111 127 1000 0000 0 正數部分 0000 0000 0 01111111 127 補碼表示範圍 負數部分 1000 0001 127 11111111 1 正數部分 0000...

IA 32位暫存器基礎

eax ax ah al累加器,低十六位可以用作十六位累加器,低十六位還可以分為兩個八位暫存器。ebx ds段的資料指標 基址暫存器。和eax類似。ecx 字串和迴圈操作的 計數器。和eax類似 edx i o指標 資料計數器。和eax類似。add sub xor or指令可以應用於這四個暫存器。用...

彙編速查 IA32暫存器組織

暫存器 描述通用暫存器 8個32位,儲存正在處理的資料 段暫存器 6個16位,處理記憶體訪問 指令指標暫存器 1個32位,指向要執行的下一條指令碼 浮點資料暫存器 8個80位,浮點資料 控制暫存器 5個32位,確定處理器的操作模式 除錯暫存器 8個32位,在除錯處理器時包含資訊 暫存器描述 eax用...