深刻淺出計算機組成原理學習筆記:第十四講

1、順序乘法的實現規程

 

一、十進制中13乘以9,轉換成二進制整個計算的過程

 乘法口訣表了,由於單個位置上,乘數只能是0或者1,因此實際的乘法,就退化成了位移和加法算法

二、咱們能夠用一個開關來決定,下面的輸出是徹底複製輸入,仍是講輸出所有設置爲0

 

三、把對應的線路錯位鏈接,就能夠起到位移的做用

 

四、乘法器硬件結構示意圖

 

五、雖然節約了開關,可是也有一個很大的缺點,那就是慢

你應該很容易就能發現,在這個乘法器的實現過程當中,咱們其實就是把乘法展開,變成了「加法+位移」 來實現,咱們用的是4位數。因此要進行4組「位移+加法」的操做。並且這4組操做還不能同時進行編程

由於下一組的加法要依賴上一組的加法後的計算結果,下一組的位移也要依賴上一組的位移的結果這樣這個,算法是「順序」的,每一組加法或者位移的運算都要必定的時間
數據結構

 

因此,最終這個乘法的計算速度,恰是和咱們要計算的數的位數有關,好比:這裏的4位,就須要4次的加法。而咱們的現代CPU經常用32位或者是64位來表示整數,性能

那麼對應須要32次或者64次加法,比起4位數,要多花了8倍乃至16倍的時間

測試

2、並行加速方法

換個咱們在算法和數據結構中的術語來講就是,這樣的一個順序乘法硬件進行計算的複雜度是O(N),這裏的N,就是乘法的數裏面的位數優化

能不能把O(N)下降到O(logN),辦法還真的有,和軟件開發裏面改算法同樣,在涉及CPU和電路的時候,咱們能夠改電路,32位數雖然是32次加法,spa

可是咱們可讓不少加法同時進行,回到這一開始,咱們把位移和乘法的計算結果加到中間結果裏的方法,32位整數的乘法,其實就編程了32個整數相加設計

一、單敗淘汰賽

二、加速乘法

加速的辦法,就是把比賽變成像世界盃足球賽那樣的淘汰賽,32個球隊捉對廝殺,同時開賽。這樣一天一會兒就淘汰了 16 支隊,也就是說,32 個數兩兩相加後,你能夠獲得 16 個結果。3d

後面的比賽也是同樣同時開賽捉對廝殺。只須要 5 天,也就是 O(log2N) 的時間,就能獲得計算的結果。blog

可是這種方式要求咱們得有 16 個球場。由於在淘汰賽的第一輪,咱們須要 16 場比賽同時進行。對應到咱們 CPU 的硬件上,就是須要更多的晶體管開關、來放下中間計算結果

經過並聯更多的ALU,加上更多的寄存器,咱們也能加速乘法

3、電路並行

一、並行加速慢的緣由

並行加速,之因此會慢,核心緣由其實在「順序」計算,也就是,都要等前面的計算完成以後,咱們才能獲得後面的計算結果

二、並行加速慢的典型案例

最典型的例子就是咱們上一講講的加法器。每個全加器,都要等待待上一個全加器,把對應的進入輸入結果算出來,才能算下一位的輸出。位數越多,越往高位走,

等待前面的步驟就越多,這個等待的時間有個專門的名詞,叫做門延遲(Gate Delay)

三、門延遲

把電路變複雜解決了延遲的問題

四、時鐘頻率

除了們延遲以外,還有一個問題就是時鐘頻率,在上面的順序乘法計算裏面,若是咱們想要用更少的電路,計算的中間結果須要保存在寄存器裏面,而後等待

下一個時鐘週期的到來,控制測試信號才能進行下一次移爲和加法,這個延遲比上面的們延遲更可觀

這個優化,本質上是利用了電路自然的並行性,電路只要接通,輸入的信號自動傳播到了全部接通的線路里面,這其實也是硬件和軟件最大的不一樣

不管是這裏把對應的門電路邏輯進行徹底展開以減小門延遲,仍是上面的乘法經過並行計算多個位的乘法,都是把咱們完成一個計算的電路變複雜了,也就是意味着晶體管變多了

 

以前不少同窗在咱們討論計算機的性能問題的時候,都提到,爲何晶體管的數量增長能夠優化計算機的計算性能,實際上,這裏的門電路展開和上面的並行計算乘法都是很好的例子,咱們經過更多的晶體

管,就能夠拿到更低的門延遲,以及用更少的時鐘週期完成一個計算指令

4、總結延伸

講到這裏,我相信你已經發現沒咱們經過以前兩講的ALU和門電路,搭建出來了乘法器,若是願意的話,咱們能夠把不少在生活中不得不順序執行的事情,

經過簡單地連結一下線路,就變成並行執行,這是由於,硬件電路有一個很大的特色,那就是信號都是實時傳輸的


咱們也看到了,經過精巧地設計電路,用較少的門電路和寄存器,就可以計算彎沉過程發這樣相對複雜的運算,是用更少更簡單的電路,可是須要更長的門延遲和時鐘週期

;仍是用更復雜的電路,可是更短的門延遲和時鐘週期來計算一個複雜的指令,這之間的權衡,其實就是計算機體系結構中的RISC和CISC的經典歷史線路之爭

相關文章
相關標籤/搜索