天天看點

第71部分- Linux x86 64位彙編 FPU之等待和非等待指令第71部分- Linux x86 64位彙編 FPU之等待和非等待指令

第71部分- Linux x86 64位彙編 FPU之等待和非等待指令

浮點指令可能生成6種浮點異常。表明運算過程中出現了某些錯誤,例如零為除數。

大多出浮點指令在執行之前必須等待以便確定前面的指令沒有跑出異常。如果出現異常,在執行下一條指令之前必須先處理異常。

還有一種方式,不等待浮點異常的檢查,允許程式儲存或者複位目前的FPU狀态,不處理懸而未決的異常。

第71部分- Linux x86 64位彙編 FPU之等待和非等待指令第71部分- Linux x86 64位彙編 FPU之等待和非等待指令

FPU之優化浮點運算

如何優化浮點代碼:

  • 確定浮點值不會上溢和下溢
  • 精度控制設定為單精度
  • 使用查找表實作三角函數
  • 斷開依賴鍊,例如不計算Z=A+b+c+d,而是計算x=a+b,y=c+d
  • 在FPU寄存器中盡可能多保留方程式的值
  • 盡可能使用FCOMI,而不是FCOM。
  • 涉及整數和浮點,将整數加載到FPU寄存器中,比對整數使用浮點指令要快。

繼續閱讀