2013-02-16 54 views
2

我隨意閱讀了intel體系結構參考手冊http://www.cs.princeton.edu/courses/archive/spr12/cos217/reading/ia32opt.pdf,並且當我在閱讀指令延遲和吞吐量附錄時,發現延遲(時鐘週期數執行核心需要 完成構成指令的所有μops的執行)。sqrt指令的執行與除法(第C-28頁)指令的延遲完全相同 - 至少對於某些微體系結構。數字分別爲30,40和44個時鐘週期,分別爲單精度,雙精度和擴展精度。sqrt和div指令以相同速度運行

我的問題是sqrt指令怎麼能像div指令一樣大的處理器匯?我一直認爲sqrt指令在任何語言中都是昂貴的。

+0

他們可能在某處使用查找表 – James 2013-02-16 05:05:48

+0

也許,儘管我不相信將64位值的地址硬編碼到處理器中會使可管理的查找表 – 2013-02-16 05:12:01

回答

4

理論上,除法與包括平方根在內的許多函數漸近相同,可以通過http://en.wikipedia.org/wiki/Newton%27s_method來計算。牛頓法的迭代次數很少,因爲每次正確的數字數量翻倍。早期迭代很便宜,因爲您不必完全精確地完成它們 - 您只需要您期望迭代的準確性 - 漸近地結果是每一個都像單個全精度分割一樣昂貴 - 請參閱http://en.wikipedia.org/wiki/Computational_complexity_of_mathematical_operations

在一個芯片上,他們可能使用一些高度調諧的特殊用途的方法,但如果對成本的最大貢獻是通過芯片的乘法管線末端獲得滿量程快速查表或其他近似解決方案後的精度結果。

3

這並不是衆所周知的,但有計算平方根的算法與移位操作一樣快。這些不是牛頓近似值。

請參閱(Sqrt in) Binary numeral system (base 2)。我第一次在Knuth的Seminumerical Algorithms一書中看到了這一點,並用它在20世紀70年代早期的16位小型機上對sqrt進行編碼,其速度與分頻相同。循環的核心移出兩位,計算平方根位,並重復。所以,總轉移==比特數,這與經典分水嶺相同。

如果他們在芯片上通過移位和比較方法進行劃分,他們可以很容易地實現平方根。