国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

重學計算機組成原理(三)- 進擊,更強的性能!

Tecode / 2838人閱讀

摘要:在上一篇中我們談到過程序的執(zhí)行時間指令數(shù)要提升計算機的性能,可以從上面這三方面著手。在摩爾定律和并行計算之外,在整個計算機組成層面,還有這樣幾個原則性的性能提升方法。

在上一篇中,我們談到過

程序的CPU執(zhí)行時間 = 指令數(shù)×CPI×Clock Cycle Time

要提升計算機的性能,可以從上面這三方面著手。

通過指令數(shù)/CPI,好像都太難了。

因此工程師們,就在CPU上多放晶體管,不斷提升CPU的時鐘頻率,讓CPU更快,程序的執(zhí)行時間就會縮短。

從1978年Intel發(fā)布的8086 CPU開始,計算機的主頻從5MHz開始,不斷攀升

1980年代中期的80386能夠跑到40MHz

1989年的486能夠跑到100MHz

直到2000年的奔騰4處理器,主頻已經(jīng)到達了1.4GHz

1 功耗:CPU的“人體極限”

奔騰4的CPU主頻從來沒有達到過10GHz,最終它的主頻上限定格在3.8GHz

而且奔騰4的主頻雖然高,但是實際性能卻配不上同樣的主頻

想要用在筆記本上的奔騰4 2.4GHz處理器,其性能只和基于奔騰3架構的奔騰M 1.6GHz匹配

于是不僅讓Intel的對手AMD獲得了喘息之機,更是代表著“主頻時代”的終結。

后面幾代Intel CPU主頻不但沒有上升,反而下降了。

到如今,2019年的最高配置Intel i9 CPU,主頻也不過是5GHz

相較于1978年到2000年,這20年里300倍的主頻提升,從2000年到現(xiàn)在的這19年,CPU的主頻大概提高了3倍

CPU的主頻變化,奔騰4時進入瓶頸期

奔騰4的主頻為什么沒能超3.8GHz?

就因為功耗.

一個3.8GHz的奔騰4處理器,滿載功率是130瓦

130瓦是什么概念呢?機場允許帶上飛機的充電寶的容量上限是100瓦時

如果我們把這個CPU安在手機里面,不考慮屏幕內(nèi)存之類的耗電,這個CPU滿載運行45分鐘,充電寶里面就沒電了

而iPhone X使用ARM架構的CPU,功率則只有4.5瓦左右。

CPU,也稱作超大規(guī)模集成電路(Very-Large-Scale Integration,VLSI

由一個個晶體管組成

CPU的計算過程,其實就是讓晶體管里面的“開關”不斷“打開”/“關閉”,組合完成各種運算和功能。

要想算得快

增加密度

在CPU同樣的面積,多放晶體管

提升主頻

讓晶體管“打開”/“關閉”得快點

這兩者,都會增加功耗,帶來耗電和散熱的問題!!!

可以把CPU想象成一個工廠,有很多工人

就如CPU上面的晶體管,互相之間協(xié)同工作。

為了工作快點完成,在工廠里多塞一點人

你可能會問,為什么不把工廠造得大點?

這是因為,人和人之間如果離得遠了,互相之間走過去需要花的時間就會變長,這也會導致性能下降!

這就如如果CPU的面積大,晶體管之間的距離變大,電信號傳輸?shù)臅r間就會變長,運算速度自然就慢了。

除了多塞一點人,還希望每個人動作快點,同樣時間就可多干活了

這就相當于提升CPU主頻,但是動作快,每個人就要出汗散熱

要是太熱了,對工廠里面的人來說會休克,對CPU來說就會崩潰出錯。

我們會在CPU上面抹硅脂、裝風扇,乃至用上水冷或者其他更好的散熱設備

就好像在工廠里面裝風扇、空調(diào),發(fā)冷飲一樣

但是同樣的空間下,裝上風扇空調(diào)能夠帶來的散熱效果也是有極限的

因此,在CPU里面,能夠放下的晶體管數(shù)量和晶體管的“開關”頻率也都是有限的。

一個CPU的功率,可以用這樣一個公式來表示:

功耗  ≈ 1/2 ×負載電容 × 電壓的平方 × 開關頻率 × 晶體管數(shù)量

為了提升性能,要不斷地增加晶體管數(shù)量

同樣的面積下,想要多放一點晶體管,就要把晶體管造得小一點

這個就是平時我們所說的提升“制程”

從28nm到7nm,相當于晶體管本身變成了原來的1/4大小

這個就相當于我們在工廠里,同樣的活兒,我們要找瘦小一點的工人,這樣一個工廠里面就可以多一些人

我們還要提升主頻,讓開關的頻率變快,也就是要找手腳更快的工人

但功耗增加過多,CPU散熱就跟不上

這時就需要降低電壓

這里有一點非常關鍵,在整個功耗的公式里面,功耗和電壓的平方是成正比的

這意味著電壓下降到原來的1/5,整個的功耗會變成原來的1/25。

事實上,從5MHz主頻的8086到5GHz主頻的Intel i9,CPU的電壓已經(jīng)從5V左右下降到了1V左右

這也是為什么我們CPU的主頻提升了1000倍,但是功耗只增長了40倍

2 并行優(yōu)化 - 阿姆達爾定律

雖然制程的優(yōu)化和電壓的下降,在過去的20年里,讓CPU性能有所提升

但是從上世紀九十年代到本世紀初,軟件工程師們所用的“面向摩爾定律編程”的套路越來越用不下去了

“寫程序不考慮性能,等明年CPU性能提升一倍,到時候性能自然就不成問題了”,這種想法已經(jīng)不可行了。

于是,從奔騰4開始,Intel意識到通過提升主頻比較“難”去實現(xiàn)性能提升

開始推出Core Duo這樣的多核CPU,通過提升“吞吐率”而不是“響應時間”,來達到目的。

提升響應時間,就好比提升你用的交通工具的速度

原本你是開汽車,現(xiàn)在變成了高鐵乃至飛機

但是,在此之上,再想要提升速度就不太容易了

CPU在奔騰4的年代,就好比已經(jīng)到了飛機這個速度極限

那你可能要問了,接下來該怎么辦呢?

相比于給飛機提速,工程師們又想到了新的辦法,可以一次同時開2架、4架乃至8架飛機,這就好像我們現(xiàn)在用的2核、4核,乃至8核的CPU。

雖然從上海到北京的時間沒有變,但是一次飛8架飛機能夠運的東西自然就變多了,也就是所謂的“吞吐率”變大了。所以,不管你有沒有需要,現(xiàn)在CPU的性能就是提升了2倍乃至8倍、16倍。

這也是一個最常見的提升性能的方式,通過并行提高性能

這個思想在很多地方都可以使用

舉個例子,我們做機器學習程序的時候,需要計算向量的點積,比如向量

$W = [W_0, W_1, W_2, …, W_{15}]$

和向量

$X = [X_0, X_1, X_2, …, X_{15}]$
$W·X = W_0 * X_0 + W_1 * X_1 +$
$W_2 * X_2 + … + W_{15} * X_{15}$

這些式子由16個乘法和1個連加組成。如果你自己一個人用筆來算的話,需要一步一步算16次乘法和15次加法。

如果這個時候我們把這個人物分配給4個人,同時去算$W_0~W\_3$, $W\_4~W\_7$, $W\_8~W_{11}$, $W_{12}~W_{15}$這樣四個部分的結果,再由一個人進行匯總,需要的時間就會縮短。

但并不是所有問題,都可以通過并行提高性能來解決

要使用這種思想,需要滿足以下條件:

需要進行的計算,本身可以分解成幾個可以并行的任務

好比上面的乘法和加法計算,幾個人可以同時進行,不會影響最后的結果。

需要能夠分解好問題,并確保幾個人的結果能夠匯總到一起

在“匯總”這個階段,是沒有辦法并行進行的,還是得順序執(zhí)行,一步一步來。

這就引出了性能優(yōu)化中一個經(jīng)驗定律

阿姆達爾定律(Amdahl’s Law)

對于一個程序進行優(yōu)化之后,處理器并行運算之后效率提升的情況

具體可以用這樣一個公式來表示:

優(yōu)化后的執(zhí)行時間 = 受優(yōu)化影響的執(zhí)行時間/加速倍數(shù)+不受影響的執(zhí)行時間

在剛剛的向量點積例子里,4個人同時計算向量的一小段點積,就是通過并行提高了這部分的計算性能

但是,這4個人的計算結果,最終還是要在一個人那里進行匯總相加

這部分匯總相加的時間,是不能通過并行來優(yōu)化的,也就是上面的公式里面不受影響的執(zhí)行時間部分

比如上面的各個向量的一小段

點積,需要100ns

加法需要20ns

總共需要120ns。這里通過并行4個CPU有了4倍的加速度。那么最終優(yōu)化后,就有了100/4+20=45ns

即使我們增加更多的并行度來提供加速倍數(shù),比如有100個CPU,整個時間也需要100/100+20=21ns。

3 總結

無論是簡單地通過提升主頻,還是增加更多的CPU核心數(shù)量,通過并行提升性能,都會遇到相應的瓶頸

僅靠簡單地通過“堆硬件”的方式,在今天已經(jīng)不能很好地滿足我們對于程序性能的期望了。

于是,工程師們需要從其他方面開始下功夫了。

在“摩爾定律”和“并行計算”之外,在整個計算機組成層面,還有這樣幾個原則性的性能提升方法。

3.1 加速大概率事件

深度學習,整個計算過程中,99%都是向量和矩陣計算

于是,工程師們通過用GPU替代CPU,大幅度提升了深度學習的模型訓練過程

本來一個CPU需要跑幾小時甚至幾天的程序,GPU只需要幾分鐘就好了

Google更是不滿足于GPU的性能,進一步地推出了TPU

通常我們使用 O 表示一個算法的好壞,我們優(yōu)化一個算法也是基于 big-O
但是 big-O 其實是一個近似值,就好比一個算法時間復雜度是 O(n^2) + O(n)
這里的 O(n^2) 是占大比重的,特別是當 n 很大的時候,通常我們會忽略掉 O(n),著手優(yōu)化 O(n^2) 的部分
3.2 通過流水線提高性能

現(xiàn)代的工廠里的生產(chǎn)線叫“流水線”。

我們可以把裝配iPhone這樣的任務拆分成一個個細分的任務,讓每個人都只需要處理一道工序,最大化整個工廠的生產(chǎn)效率。

我們的CPU其實就是一個“運算工廠”

我們把CPU指令執(zhí)行的過程進行拆分,細化運行,也是現(xiàn)代CPU在主頻沒有辦法提升那么多的情況下,性能仍然可以得到提升的重要原因之一

3.3 通過預測提高性能

預測下一步該干什么,而不是等上一步運行結果,提前進行運算,也是讓程序跑得更快一點的辦法

在一個循環(huán)訪問數(shù)組的時候,憑經(jīng)驗,你也會猜到下一步我們會訪問數(shù)組的下一項

后面要講的“分支和冒險”、“局部性原理”這些CPU和存儲系統(tǒng)設計方法,其實都是在利用我們對于未來的“預測”,提前進行相應的操作,來提升我們的程序性能。

深度優(yōu)先搜索算法里面的 “剪枝策略”,防止沒有必要的分支搜索,這會大幅度提升算法效率

整個組成乃至體系結構,都是基于馮·諾依曼架構組成的軟硬件一體的解決方案

這里面的方方面面的設計和考慮,除了體系結構層面的抽象和通用性之外,核心需要考慮的是“性能”問題

參考

深入淺出計算機組成原理

X 交流學習

Java交流群 博客 Github

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76050.html

相關文章

  • 重學算機組成原理(二)- 制定學習路線,攀登“性能”之巔

    摘要:計算機組成中的大量原理和設計,都對應著性能這個詞。時間的倒數(shù)性能計算機的性能,其實和體力勞動很像,好比是我們要搬東西。對于計算機的性能,我們需要有個標準來衡量。花的時間越少,自然性能就越好。 0 學習路線的知識點概括 showImg(https://segmentfault.com/img/remote/1460000020031616?w=3832&h=2540); 學習計算機組成原...

    DrizzleX 評論0 收藏0
  • 重學算機組成原理(四)- 玩玩紙帶編程

    摘要:匯編器是怎么把對應的匯編代碼,翻譯成為機器碼的。總結打孔卡,其實就是一種存儲程序型計算機。推薦閱讀了解的指令集參看計算機組成與設計軟硬件接口第版的小節(jié)參考深入淺出計算機組成原理 你在學寫程序的時候,有沒有想過,古老年代的計算機程序是怎么寫出來的?showImg(https://ask.qcloudimg.com/http-save/1752328/fpfs9776q8.png); 當...

    lentrue 評論0 收藏0
  • 重學算機組成原理(八)- 程序的裝載

    摘要:這個辦法,在現(xiàn)在計算機的內(nèi)存管理里面,就叫作內(nèi)存分頁和分段這樣分配一整段連續(xù)的空間給到程序相比分頁則是把整個物理內(nèi)存空間切成一段段固定尺寸的大小而對應的程序所需要占用的虛擬內(nèi)存空間,也會同樣切成一段段固定尺寸的大小。 showImg(https://image-static.segmentfault.com/290/765/2907653835-5d580caf245fd_articl...

    Developer 評論0 收藏0
  • 重學算機組成原理(七)- 程序無法同時在Linux和Windows下運行?

    摘要:鏈接器會掃描所有輸入的目標文件,然后把所有符號表里的信息收集起來,構成一個全局的符號表。這是一本難得的講解程序的鏈接裝載和運行的好書。 showImg(https://image-static.segmentfault.com/396/693/396693929-5d558865c3a7e_articlex); 既然程序最終都被變成了一條條機器碼去執(zhí)行,那為什么同一個程序,在同一臺計算...

    ShowerSun 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<