【估算】計算機對兩個簡單自然數做相乘運算需要多少時間?

假設CPU是2.5GHZ,兩個簡單自然數類似是12*11這種複雜度。

又或者是0.12*0.11,這又需要多少時間呢?


手機拍的圖貌似全跪了=_=!下午考完試再回來補圖

-----------------------------------------------------------------------------

啦啦啦考試掛定了我來補圖

---------------------------------------------------------------------------------

正好在複習計組過來刷刷。

整數和浮點數的運算不是同一個運算單元,分開說明。

整數部分:

1,原始演算法。可以通過簡單的cpu(如8086)和彙編語句實現。假設乘數是n位,需要進行n次加法和n次移位,每次佔一個指令周期。一個指令周期佔多少個時鐘周期得分機器討論。

下圖是某型號cpu時鐘周期,cpu周期,指令周期的關係

2,直接硬體實現乘法

其中乘法陣列分有符號和無符號兩種(FA為全加器,一種簡單的數電原件)(第二張圖裡的0,1,2是一般化全加器,也是全加器的一種,有興趣可以查查)

硬體乘法的時延,最壞情況為(8n-7T),n為乘數位數,T為與門傳輸延遲,一般為納秒級。所以基本上能做到一個指令周期就完成乘法。

再討論浮點數:

令人意外的是,浮點數的乘除法比加減法要快的多,因為沒有繁瑣的階碼(指數)對齊和隨之帶來的舍入問題。

可見,浮點數乘法最終被轉換為一次整數加法和一次整數乘法。如果皆採取硬體實現,也就2到3個指令周期。

順帶一提,浮點數加法也有各種硬體技術來加速完成例如流水線技術,有興趣可以查查。

最後再談談指令周期的問題。

一個指令周期指的是cpu完成一個指令的時間(比如加法指令)

cpu周期是指cpu完成一次微指令的時間(微指令就是具體驅動cpu哪些硬體工作的指令,詳情請查)

而一個微指令耗時1~4個時鐘周期不等)當然有些操作如內存存儲將耗時多的多,但是cache技術已經很好掩飾了這個問題。

做實驗的時候(8086)感覺2時鐘周期的微指令比較多,而指令一般由2~8個微指令構成,也就是說,一般一個指令周期大概是8個時鐘周期。題主說假設cpu主頻2.5GHz,那麼指令周期就是312.5MHz,再結合之前的論述,不難算出,完成一次乘法大概是6微秒。這還是按照8086這個古董貨的技術標準,現代cpu會有更加完美的硬體布線和指令構成,再下降兩三個微秒也不是不可能的。


推薦閱讀:

有哪些十分精巧的數值演算法?
Python 有哪些新手不會了解的深入細節?
小白如何在最短時間內成長為熟悉主流編程語言的高手?
為什麼打開一個幾兆的 .jpg 圖片比打開一個幾兆的 .txt 文本文檔快很多?
你在閱讀源代碼或設計文檔時,看到哪些驚艷的技巧?

TAG:計算機科學 | 計算機原理 | 計算數學 | 計算機組成原理 |