乘法口訣表了,因為單個位置上,乘數只能是0或者1,所以實際的乘法,就退化成了位移和加法
你應該很容易就能發現,在這個乘法器的實現過程中,我們其實就是把乘法展開,變成了「加法+位移」來實現,我們用的是4位數。所以要進行4組「位移+加法」的操作。而且這4組操作還不能同時進行
因為下一組的加法要依賴上一組的加法後的計算結果,下一組的位移也要依賴上一組的位移的結果這樣這個,演算法是「順序」的,每一組加法或者位移的運算都要一定的時間
所以,最終這個乘法的計算速度,恰是和我們要計算的數的位數有關,比如:這裡的4位,就需要4次的加法。而我們的現代cpu常常用32位或者是64位來表示整數,
那麼對應需要32次或者64次加法,比起4位數,要多花了8倍乃至16倍的時間
換個我們在演算法和資料結構中的術語來說就是,這樣的乙個順序乘法硬體進行計算的複雜度是o(n),這裡的n,就是乘法的數裡面的位數
能不能把o(n)降低到o(logn),辦法還真的有,和軟體開發裡面改演算法一樣,在涉及cpu和電路的時候,我們可以改電路,32位數雖然是32次加法,
但是我們可以讓很多加法同時進行,回到這一開始,我們把位移和乘法的計算結果加到中間結果裡的方法,32位整數的乘法,其實就程式設計了32個整數相加
加速的辦法,就是把比賽變成像世界盃足球賽那樣的淘汰賽,32個球隊捉對廝殺,同時開賽。這樣一天一下子就淘汰了 16 支隊,也就是說,32 個數兩兩相加後,你可以得到 16 個結果。
後面的比賽也是一樣同時開賽捉對廝殺。只需要 5 天,也就是 o(log2n) 的時間,就能得到計算的結果。
但是這種方式要求我們得有16 個球場。因為在淘汰賽的第一輪,我們需要 16 場比賽同時進行。對應到我們 cpu 的硬體上,就是需要更多的電晶體開關、來放下中間計算結果
通過併聯更多的alu,加上更多的暫存器,我們也能加速乘法
1、並行加速慢的原因
並行加速,之所以會慢,核心原因其實在「順序」計算,也就是,都要等前面的計算完成之後,我們才能得到後面的計算結果
2、並行加速慢的典型案例
等待前面的步驟就越多,這個等待的時間有個專門的名詞,叫作門延遲(gate delay)
3、門延遲
把電路變複雜解決了延遲的問題
4、時鐘頻率
除了們延遲之外,還有乙個問題就是時鐘頻率,在上面的順序乘法計算裡面,如果我們想要用更少的電路,計算的中間結果需要儲存在暫存器裡面,然後等待
下乙個時鐘週期的到來,控制測試訊號才能進行下一次移為和加法,這個延遲比上面的們延遲更可觀
這個優化,本質上是利用了電路天然的並行性,電路只要接通,輸入的訊號自動傳播到了所有接通的線路裡面,這其實也是硬體和軟體最大的不同
無論是這裡把對應的閘電路邏輯進行完全展開以減少門延遲,還是上面的乘法通過平行計算多個位的乘法,都是把我們完成乙個計算的電路變複雜了,也就是意味著電晶體變多了
之前很多同學在我們討論計算機的效能問題的時候,都提到,為什麼電晶體的數量增加可以優化計算機的計算效能,實際上,這裡的閘電路展開和上面的平行計算乘法都是很好的例子,我們通過更多的晶體
管,就可以拿到更低的門延遲,以及用更少的時鐘週期完成乙個計算指令
講到這裡,我相信你已經發現沒我們通過之前兩講的alu和閘電路,搭建出來了乘法器,如果願意的話,我們可以把很多在生活中不得不順序執行的事情,
通過簡單地鏈結一下線路,就變成並行執行,這是因為,硬體電路有乙個很大的特點,那就是訊號都是實時傳輸的
我們也看到了,通過精巧地設計電路,用較少的閘電路和暫存器,就能夠計算彎沉過程發這樣相對複雜的運算,是用更少更簡單的電路,但是需要更長的門延遲和時鐘週期
;還是用更複雜的電路,但是更短的門延遲和時鐘週期來計算乙個複雜的指令,這之間的權衡,其實就是計算機體系結構中的risc和cisc的經典歷史線路之爭
深入淺出計算機組成原理學習筆記 第四十五講
在1991年,我剛接觸計算機的時候,很多計算機還沒有硬碟。整個作業系統都安裝在5 或者3.5寸的軟盤裡。不過,很快 部分計算機都開始 上了直接安裝在主機板上的機械硬碟。到了今天,更早的軟盤早已經被淘汰了。在個人電腦和伺服器裡,更晚出現的光碟也已經很少用了。機械硬碟的生命力仍然非常頑強。無論是作為個人...
計算機組成原理學習筆記
一直以來對計算機的組成及工作原理都沒有乙個整體的認識,剛好學習到這裡了,通過系統學習,對計算機組成及工作原理有了乙個系統的 認識,這裡做個總結,交流一下。初中我們就知道計算機處理器由運算器 控制器 儲存器組成,後來我們有學習了很多的暫存器 儲存器和匯流排等知識,知識雖然多了,但是並沒有將他們合理的組...
《計算機組成原理》 學習筆記(二)
迄今為止,所有計算機都以二進位制形式進行算術運算和邏輯操作,因此,對於使用者在鍵盤上輸入的十進位制數字和符號命令,計算機必須先把它們轉換成二進位制形式進行識別 運算和處理,然後再把運算結果還原成十進位制數字和符號,並在顯示器上顯示出來 2.1.1 計算機中的數制 十進位制 decimal 二進位制 ...