成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

重學(xué)計(jì)算機(jī)組成原理(二)- 制定學(xué)習(xí)路線,攀登“性能”之巔

DrizzleX / 3432人閱讀

摘要:計(jì)算機(jī)組成中的大量原理和設(shè)計(jì),都對(duì)應(yīng)著性能這個(gè)詞。時(shí)間的倒數(shù)性能計(jì)算機(jī)的性能,其實(shí)和體力勞動(dòng)很像,好比是我們要搬東西。對(duì)于計(jì)算機(jī)的性能,我們需要有個(gè)標(biāo)準(zhǔn)來(lái)衡量。花的時(shí)間越少,自然性能就越好。

0 學(xué)習(xí)路線的知識(shí)點(diǎn)概括

學(xué)習(xí)計(jì)算機(jī)組成原理,就是學(xué)習(xí)計(jì)算機(jī)是如何協(xié)調(diào)運(yùn)行的

計(jì)算機(jī)組成原理的英文叫Computer Organization

Organization 意"組織機(jī)構(gòu)"。

該組織機(jī)構(gòu)能夠進(jìn)行各種計(jì)算、控制、讀取輸入,進(jìn)行輸出,達(dá)成各種強(qiáng)大的功能。

把整個(gè)計(jì)算機(jī)組成原理的知識(shí)點(diǎn)拆分成了四大部分

計(jì)算機(jī)的基本組成

計(jì)算機(jī)的指令和計(jì)算

處理器設(shè)計(jì)

存儲(chǔ)器和I/O設(shè)備。

0.1 計(jì)算機(jī)的基本組成

計(jì)算機(jī)的硬件組成

這些硬件,怎么對(duì)應(yīng)到經(jīng)典的馮·諾依曼體系結(jié)構(gòu)的

除此之外,還需要了解計(jì)算機(jī)的兩個(gè)核心指標(biāo)

性能

功耗

性能和功耗也是我們?cè)趹?yīng)用和設(shè)計(jì)五大基本組件中需要重點(diǎn)考慮的因素。

0.2 計(jì)算機(jī)的指令和計(jì)算

需要搞明白,我們每天撰寫的一行行C、Java、PHP程序,是怎么在計(jì)算機(jī)里面跑起來(lái)的。

了解我們的程序是怎么通過(guò)編譯器和匯編器,變成一條條機(jī)器指令這樣的編譯過(guò)程(編譯過(guò)程展開,就是編譯原理)

知道我們的操作系統(tǒng)是怎么鏈接、裝載、執(zhí)行這些程序的(深入學(xué)習(xí),就是操作系統(tǒng))。而這一條條指令執(zhí)行的控制過(guò)程,就是由計(jì)算機(jī)五大組件之一的控制器來(lái)控制的。

計(jì)算部分,要從二進(jìn)制和編碼開始,理解我們的數(shù)據(jù)在計(jì)算機(jī)里的表示,以及我們是怎么從數(shù)字電路層面,實(shí)現(xiàn)加法、乘法這些基本的運(yùn)算功能的。

實(shí)現(xiàn)這些運(yùn)算功能的ALU(Arithmetic Logic Unit/ALU),算術(shù)邏輯單元,計(jì)算機(jī)五大組件之一的運(yùn)算器。

特別重要的就是浮點(diǎn)數(shù)(Floating Point)。

浮點(diǎn)數(shù)是我們?cè)谌粘_\(yùn)用中非常容易用錯(cuò)的一種數(shù)據(jù)表示形式。掌握浮點(diǎn)數(shù)能讓你對(duì)數(shù)據(jù)的編碼、存儲(chǔ)和計(jì)算能夠有一個(gè)從表到里的深入理解。尤其在AI火熱的今天,浮點(diǎn)數(shù)是機(jī)器學(xué)習(xí)中重度使用的數(shù)據(jù)表示形式,掌握它更是非常有必要。

0.3 CPU的設(shè)計(jì)

CPU時(shí)鐘可以用來(lái)構(gòu)造寄存器和內(nèi)存的鎖存器和觸發(fā)器,因此,CPU時(shí)鐘應(yīng)該是我們學(xué)習(xí)CPU的前導(dǎo)知識(shí)。搞明白我們?yōu)槭裁葱枰狢PU時(shí)鐘(CPU Clock),以及寄存器和內(nèi)存是用什么樣的硬件組成的之后,我們可以再來(lái)看看,整個(gè)計(jì)算機(jī)的數(shù)據(jù)通路是如何構(gòu)造出來(lái)的。

數(shù)據(jù)通路,其實(shí)就是連接了整個(gè)運(yùn)算器和控制器,并最終組成了CPU。而出于對(duì)于性能和功耗的考慮,你要進(jìn)一步理解和掌握面向流水線設(shè)計(jì)的CPU、數(shù)據(jù)和控制冒險(xiǎn),以及分支預(yù)測(cè)的相關(guān)技術(shù)。

既然CPU作為控制器要和輸入輸出設(shè)備通信,那么我們就要知道異常和中斷發(fā)生的機(jī)制。在CPU設(shè)計(jì)部分的最后,我會(huì)講一講指令的并行執(zhí)行,看看如何直接在CPU層面,通過(guò)SIMD來(lái)支持并行計(jì)算。

0.4 存儲(chǔ)器的原理

通過(guò)存儲(chǔ)器的層次結(jié)構(gòu)作為基礎(chǔ)的框架引導(dǎo),需要掌握從上到下的CPU高速緩存、內(nèi)存、SSD硬盤和機(jī)械硬盤的工作原理,它們之間的性能差異,以及實(shí)際應(yīng)用中利用這些設(shè)備會(huì)遇到的挑戰(zhàn)。存儲(chǔ)器其實(shí)很多時(shí)候又扮演了輸入輸出設(shè)備的角色,所以你需要進(jìn)一步了解,CPU和這些存儲(chǔ)器之間是如何進(jìn)行通信的,以及我們最重視的性能問題是怎么一回事;理解什么是IO_WAIT,如何通過(guò)DMA來(lái)提升程序性能。

對(duì)于存儲(chǔ)器,我們不僅需要它們能夠正常工作,還要確保里面的數(shù)據(jù)不能丟失。于是你要掌握我們是如何通過(guò)RAID、Erasure Code、ECC以及分布式HDFS,這些不同的技術(shù),來(lái)確保數(shù)據(jù)的完整性和訪問性能。

計(jì)算機(jī)組成原理的學(xué)習(xí)辦法

相較于整個(gè)計(jì)算機(jī)科學(xué)中的其他科目,計(jì)算機(jī)組成原理更像是整個(gè)計(jì)算機(jī)學(xué)科里的“綱要”。這門課里任何一個(gè)知識(shí)點(diǎn)深入挖下去,都可以變成計(jì)算機(jī)科學(xué)里的一門核心課程。

程序怎樣從高級(jí)代碼變成指令在計(jì)算機(jī)里面運(yùn)行,對(duì)應(yīng)著“編譯原理”和“操作系統(tǒng)”這兩門課程

計(jì)算實(shí)現(xiàn)背后則是“數(shù)字電路”

如果要深入CPU和存儲(chǔ)器系統(tǒng)的優(yōu)化,必然要深入了解“計(jì)算機(jī)體系結(jié)構(gòu)”。

為了更快更好地學(xué)計(jì)算機(jī)組成,總結(jié)了三個(gè)學(xué)習(xí)方法

學(xué)會(huì)提問自己來(lái)串聯(lián)知識(shí)點(diǎn)

學(xué)完一個(gè)知識(shí)點(diǎn)之后,你可以從下面兩個(gè)方面,問一下自己。

我寫的程序,是怎樣從輸入的代碼,變成運(yùn)行的程序,并得到最終結(jié)果的?

整個(gè)過(guò)程中,計(jì)算器層面到底經(jīng)歷了哪些步驟,有哪些地方是可以優(yōu)化的?

無(wú)論是程序的編譯、鏈接、裝載和執(zhí)行,以及計(jì)算時(shí)需要用到的邏輯電路、ALU,乃至CPU自發(fā)為你做的流水線、指令級(jí)并行和分支預(yù)測(cè),還有對(duì)應(yīng)訪問到的硬盤、內(nèi)存,以及加載到高速緩存中的數(shù)據(jù),這些都對(duì)應(yīng)著我們學(xué)習(xí)中的一個(gè)個(gè)知識(shí)點(diǎn)。建議你自己腦子里過(guò)一遍,最好時(shí)口頭表述一遍或者寫下來(lái),這樣對(duì)你徹底掌握這些知識(shí)點(diǎn)都會(huì)非常有幫助。

寫一些示例程序來(lái)驗(yàn)證知識(shí)點(diǎn)

計(jì)算機(jī)科學(xué)是一門實(shí)踐的學(xué)科。計(jì)算機(jī)組成中的大量原理和設(shè)計(jì),都對(duì)應(yīng)著“性能”這個(gè)詞。因此,通過(guò)把對(duì)應(yīng)的知識(shí)點(diǎn),變成一個(gè)個(gè)性能對(duì)比的示例代碼程序記錄下來(lái),是把這些知識(shí)點(diǎn)融匯貫通的好方法。因?yàn)?,相比于?qiáng)記硬背知識(shí)點(diǎn),一個(gè)有著明確性能對(duì)比的示例程序,會(huì)在你腦海里留下更深刻的印象。當(dāng)你想要回顧這些知識(shí)點(diǎn)的時(shí)候,一個(gè)程序也更容易提示你把它從腦海深處里面找出來(lái)。

通過(guò)和計(jì)算機(jī)硬件發(fā)展的歷史做對(duì)照

計(jì)算機(jī)的發(fā)展并不是一蹴而就的。從第一臺(tái)電子計(jì)算機(jī)ENIAC(Electronic Numerical Integrator And Computer,電子數(shù)值積分計(jì)算機(jī))的發(fā)明到現(xiàn)在,已經(jīng)有70多年了?,F(xiàn)代計(jì)算機(jī)用的各個(gè)技術(shù),都是跟隨實(shí)際應(yīng)用中遇到的挑戰(zhàn),一個(gè)個(gè)發(fā)明、打磨,最后保留下來(lái)的。這當(dāng)中不僅僅有學(xué)術(shù)層面的碰撞,更有大量商業(yè)層面的交鋒。通過(guò)了解充滿戲劇性和故事性的計(jì)算機(jī)硬件發(fā)展史,讓你更容易理解計(jì)算機(jī)組成中各種原理的由來(lái)。

比如說(shuō),奔騰4和SPARC的失敗,以及ARM的成功,能讓我們記住CPU指令集的繁與簡(jiǎn)、權(quán)衡性能和功耗的重要性,而現(xiàn)今高速發(fā)展的機(jī)器學(xué)習(xí)和邊緣計(jì)算,又給計(jì)算機(jī)硬件設(shè)計(jì)帶來(lái)了新的挑戰(zhàn)。

學(xué)習(xí)資料推薦

最有效的辦法還是“讀書百遍,其義自見”。對(duì)于不夠明白的知識(shí)點(diǎn),多搜索,多看不同來(lái)源的資料,多和朋友、同事、老師一起交流,一定能夠幫你掌握好想要學(xué)習(xí)的知識(shí)點(diǎn)。

入門書籍

《計(jì)算機(jī)是怎樣跑起來(lái)的》

《程序是怎樣跑起來(lái)的》(入門微縮版“計(jì)算機(jī)組成原理”)

計(jì)算機(jī)組成中,硬件層面的基礎(chǔ)實(shí)現(xiàn),比如寄存器、ALU這些電路是怎么回事Coursera上的北京大學(xué)免費(fèi)公開課《Computer Organization》。

進(jìn)階書籍

《計(jì)算機(jī)組成與設(shè)計(jì):硬件/軟件接口》

《深入理解計(jì)算機(jī)系統(tǒng)(原書第3版》(CS APP的經(jīng)典教材)


該書的配套視頻

- [Bilibili版](https://www.bilibili.com/video/av24540152/)
- [Youtube版](https://www.youtube.com/playlist?list=PLmBgoRqEQCWy58EIwLSWwMPfkwLOLRM5R)

《計(jì)算機(jī)組成:結(jié)構(gòu)化方法》

《計(jì)算機(jī)體系結(jié)構(gòu):量化研究方法》

拓展閱讀

Redhat的What Every Programmer Should Know About Memory

LMAX開源的Disruptor實(shí)際應(yīng)用程序

《編碼:隱匿在計(jì)算機(jī)軟硬件背后的語(yǔ)言》

《程序員的自我修養(yǎng):鏈接、裝載和庫(kù)》

理解計(jì)算機(jī)硬件和操作系統(tǒng)層面代碼執(zhí)行的優(yōu)秀閱讀材料

路線學(xué)習(xí)小結(jié)

學(xué)習(xí)不是死記硬背,學(xué)習(xí)材料也不是越多越好。

最有效的辦法,不是短時(shí)間沖刺,而是有節(jié)奏地堅(jiān)持,多在留言區(qū)和其他朋友一起交流,就更容易能夠“積小步而至千里”,在程序員這個(gè)職業(yè)上有更長(zhǎng)足的發(fā)展。

歡迎重學(xué)計(jì)算機(jī)組成原理 ! ! !

買電腦時(shí),“原來(lái)的電腦性能跟不上啦”

寫程序時(shí),“這個(gè)程序性能可以優(yōu)化一下”

這虛無(wú)縹緲的“性能”到底指的是什么呢?

我們能不能給性能下一個(gè)明確的定義,然后來(lái)進(jìn)行準(zhǔn)確的比較呢?

在計(jì)算機(jī)組成原理乃至體系結(jié)構(gòu)中,“性能”都是最重要的一個(gè)主題。

學(xué)習(xí)和研究計(jì)算機(jī)組成原理,就是在理解計(jì)算機(jī)是怎么運(yùn)作的,以及為什么要這么運(yùn)作。

“為什么”所要解決的事情,很多時(shí)候就是提升“性能”。

1 時(shí)間的倒數(shù) - 性能

計(jì)算機(jī)的性能,其實(shí)和體力勞動(dòng)很像,好比是我們要搬東西。

對(duì)于計(jì)算機(jī)的性能,我們需要有個(gè)標(biāo)準(zhǔn)來(lái)衡量。這個(gè)標(biāo)準(zhǔn)中主要有兩個(gè)指標(biāo)。

1.1 響應(yīng)時(shí)間(Response time)/ 執(zhí)行時(shí)間(Execution time)

讓計(jì)算機(jī)“跑得更快”。

我們執(zhí)行一個(gè)程序,到底需要花多少時(shí)間?;ǖ臅r(shí)間越少,自然性能就越好。

實(shí)際系統(tǒng)里性能監(jiān)測(cè)工具NewRelic中的響應(yīng)時(shí)間,代表了每個(gè)外部的Web請(qǐng)求的執(zhí)行時(shí)間

1.2 吞吐率(Throughput)/ 帶寬(Bandwidth)

讓計(jì)算機(jī)“搬得更多”。

服務(wù)器使用的網(wǎng)絡(luò)帶寬,通常就是一個(gè)吞吐率性能指標(biāo).吞吐率是指我們?cè)谝欢ǖ臅r(shí)間范圍內(nèi),到底能處理多少事情。這里的“事情”,在計(jì)算機(jī)里就是處理的數(shù)據(jù)或者執(zhí)行的程序指令。

和搬東西對(duì)比,如果響應(yīng)時(shí)間短,跑得快,我們可以來(lái)回多跑幾趟搬幾趟。

所以縮短程序的響應(yīng)時(shí)間,一般來(lái)說(shuō)都會(huì)提升吞吐率。

除了縮短響應(yīng)時(shí)間,我們還有別的方法嗎?當(dāng)然!

我們還可以多找?guī)讉€(gè)人一起來(lái)搬,這就類似服務(wù)器都是多核的。

人多力量大,同時(shí)處理數(shù)據(jù),在單位時(shí)間內(nèi)就可以處理更多數(shù)據(jù),吞吐率自然也就上去了。

提升吞吐率的辦法有很多。大部分時(shí)候,我們只要多加一些機(jī)器,多堆一些硬件就好了。

但是響應(yīng)時(shí)間的提升卻沒有那么容易,因?yàn)镃PU的性能提升其實(shí)在10年前就處于“擠牙膏”的狀態(tài)了,所以我們得慎重地來(lái)分析對(duì)待。

下面我們具體來(lái)看。

我們一般把性能,定義成響應(yīng)時(shí)間的倒數(shù),也就是:

性能 = 1/響應(yīng)時(shí)間

響應(yīng)時(shí)間越短,性能數(shù)值越高。

同樣一個(gè)程序

在Intel最新的CPU Coffee Lake上,只需要30s就能運(yùn)行完成

而在5年前CPU Sandy Bridge上,需要1min才能完成

那么我們自然可以算出來(lái),Coffee Lake的性能是1/30,Sandy Bridge的性能是1/60,兩個(gè)的性能比為2。于是,我們就可以說(shuō),Coffee Lake的性能是Sandy Bridge的2倍。

過(guò)去幾年流行的手機(jī)跑分軟件,就是把多個(gè)預(yù)設(shè)好的程序在手機(jī)上運(yùn)行,然后根據(jù)運(yùn)行需要的時(shí)間,算出一個(gè)分?jǐn)?shù)來(lái)給出手機(jī)的性能評(píng)估。

而在業(yè)界,各大CPU和服務(wù)器廠商組織了一個(gè)叫作SPEC(Standard Performance Evaluation Corporation)的第三方機(jī)構(gòu),專門用來(lái)指定各種“跑分”的規(guī)則

一份SPEC報(bào)告通常包含了大量不同測(cè)試的評(píng)分

SPEC提供的CPU基準(zhǔn)測(cè)試程序,就好像CPU屆的“高考”,通過(guò)數(shù)十個(gè)不同的計(jì)算程序,對(duì)于CPU的性能給出一個(gè)最終評(píng)分。

這些程序豐富多彩,有編譯器、解釋器、視頻壓縮、人工智能國(guó)際象棋等等,涵蓋了方方面面的應(yīng)用場(chǎng)景。感興趣的話,你可以點(diǎn)擊這里

2 計(jì)算機(jī)的計(jì)時(shí)單位:CPU時(shí)鐘

雖然時(shí)間是一個(gè)很自然的用來(lái)衡量性能的指標(biāo),但是用時(shí)間來(lái)衡量時(shí),有兩個(gè)問題。

2.1 時(shí)間的測(cè)不準(zhǔn)原理

如果用你自己隨便寫的一個(gè)程序,來(lái)統(tǒng)計(jì)程序運(yùn)行的時(shí)間,每一次統(tǒng)計(jì)結(jié)果不會(huì)完全一樣。

為什么會(huì)不準(zhǔn)呢?這里面有好幾個(gè)原因。

2.1.1 統(tǒng)計(jì)時(shí)間方法

我們統(tǒng)計(jì)時(shí)間是用類似于“掐秒表”一樣,記錄 程序運(yùn)行結(jié)束時(shí)間減去程序開始運(yùn)行的時(shí)間。

這個(gè)時(shí)間也叫Wall Clock Time或者Elapsed Time

就是在運(yùn)行程序期間,掛在墻上的鐘走掉的時(shí)間。

但計(jì)算機(jī)可能同時(shí)運(yùn)行著好多個(gè)程序,CPU實(shí)際上不停地在各個(gè)程序之間進(jìn)行切換。

在這些走掉的時(shí)間里,很可能CPU切換去運(yùn)行別的程序了。

而且,有些程序在運(yùn)行的時(shí)候,可能要從網(wǎng)絡(luò)、硬盤去讀取數(shù)據(jù),要等網(wǎng)絡(luò)和硬盤把數(shù)據(jù)讀出來(lái),給到內(nèi)存和CPU。

要想準(zhǔn)確統(tǒng)計(jì)某程序的實(shí)際運(yùn)行時(shí)間,進(jìn)而比較程序之間的性能,須把這些額外時(shí)間除掉

那這件事怎么實(shí)現(xiàn)呢???

Linux下有一個(gè)叫time的命令,可助我們一臂之力,同樣的Wall Clock Time下,程序?qū)嶋H在CPU上到底花了多少時(shí)間。

我們簡(jiǎn)單運(yùn)行一下time命令。它會(huì)返回三個(gè)值

第一個(gè) real time

也就是我們說(shuō)的Wall Clock Time,即運(yùn)行程序整個(gè)過(guò)程中流逝掉的時(shí)間

第二個(gè) user time

CPU在運(yùn)行你的程序,在用戶態(tài)運(yùn)行指令的時(shí)間

第三個(gè)sys time

CPU運(yùn)行你的程序,在操作系統(tǒng)內(nèi)核里運(yùn)行指令的時(shí)間

程序?qū)嶋H花費(fèi)的CPU執(zhí)行時(shí)間(CPU Time),就是user time加上sys time

一般情況下,如果user+sys比real大,甚至僅user比real大的情況出現(xiàn),都是因?yàn)閷?duì)應(yīng)的程序被多個(gè)進(jìn)程或者多個(gè)線程并行執(zhí)行了,也很常見。

在多核或者多cpu的機(jī)器上運(yùn)行,seq和wc命令會(huì)分配到兩個(gè)cpu上,user和sys是兩個(gè)cpu時(shí)間相加的,而real只是現(xiàn)實(shí)時(shí)鐘里走過(guò)的時(shí)間,極端情況下user+sys可以到達(dá)real的兩倍

雖然seq和wc這兩個(gè)命令都是單線程運(yùn)行的,但是這兩個(gè)命令在多核cpu運(yùn)行的情況下,會(huì)分別分配到兩個(gè)不同的cpu,于是user和sys的時(shí)間都是兩個(gè)cpu上運(yùn)行的時(shí)間之和,就可能超過(guò)real的時(shí)間。

可以這樣來(lái)快速驗(yàn)證,運(yùn)行

time seq 100000000 | wc -l &

讓這個(gè)命令多跑一會(huì)兒,并且在后臺(tái)運(yùn)行。

然后利用 top 命令看不同進(jìn)程的cpu占用情況

你會(huì)在top的前幾行里看到seq和wc的cpu占用都接近100,實(shí)際是各被分配到了一個(gè)不同的cpu執(zhí)行。

2.1.2 不一定可直接比較出性能

即使我們已經(jīng)拿到了CPU時(shí)間,我們也不一定可以直接“比較”出兩個(gè)程序的性能差異

即使在同一臺(tái)計(jì)算機(jī)上,CPU可能滿載運(yùn)行也可能降頻運(yùn)行,降頻運(yùn)行的時(shí)候自然花的時(shí)間會(huì)多一些。

除CPU外,時(shí)間這個(gè)性能指標(biāo)還會(huì)受到主板、內(nèi)存這些其他相關(guān)硬件的影響。

所以,我們需要對(duì)“時(shí)間”這個(gè)我們可以感知的指標(biāo)進(jìn)行

2.2 CPU時(shí)間拆解
程序的CPU執(zhí)行時(shí)間=CPU時(shí)鐘周期數(shù)×?xí)r鐘周期時(shí)間

時(shí)鐘周期時(shí)間

你在買電腦的時(shí)候,一定關(guān)注過(guò)CPU的主頻
我手頭的這臺(tái)電腦就是

2.8 GHz Intel Core i7

這里的2.8GHz就是電腦的主頻(Frequency/Clock Rate)。

這個(gè)2.8GHz,我們可以先簡(jiǎn)單地理解為,CPU在1秒時(shí)間內(nèi),可以執(zhí)行的簡(jiǎn)單指令的數(shù)量是2.8G條。

更準(zhǔn)確點(diǎn),這個(gè)2.8GHz就代表,我們CPU的一個(gè)“鐘表”能夠識(shí)別出來(lái)的最小的時(shí)間間隔。

就像我們掛在墻上的掛鐘,都是一秒一秒地走,所以通過(guò)墻上的掛鐘能夠識(shí)別出來(lái)的最小時(shí)間單位就是秒。

而在CPU內(nèi)部,有一個(gè)叫晶體振蕩器(Oscillator Crystal)的東西,簡(jiǎn)稱為晶振。

把晶振當(dāng)成CPU內(nèi)部的電子表來(lái)使用。

晶振帶來(lái)的每一次“滴答”,就是時(shí)鐘周期時(shí)間。

在我這個(gè)2.8GHz的CPU上,這個(gè)時(shí)鐘周期時(shí)間,就是1/2.8G。

我們的CPU,是按照這個(gè)“時(shí)鐘”提示的時(shí)間來(lái)進(jìn)行自己的操作。

主頻越高,意味著這個(gè)表走得越快,我們的CPU也就走得越快。

“超頻”,這說(shuō)的其實(shí)就相當(dāng)于把買回來(lái)的CPU內(nèi)部的鐘給調(diào)快了,于是CPU的計(jì)算跟著這個(gè)時(shí)鐘的節(jié)奏,也就自然變快了。當(dāng)然這個(gè)快不是沒有代價(jià)的,CPU跑得越快,散熱的壓力也就越大。就和人一樣,超過(guò)生理極限,CPU就會(huì)崩潰了。

回顧之前的CPU執(zhí)行時(shí)間的公式程序的CPU執(zhí)行時(shí)間=CPU時(shí)鐘周期數(shù)×?xí)r鐘周期時(shí)間

最簡(jiǎn)單的提升性能方案,自然縮短時(shí)鐘周期時(shí)間,也就是提升主頻。

換句話說(shuō),就是換一塊好一點(diǎn)的CPU。

不過(guò),這個(gè)是我們這些底層的研發(fā)人員控制不了的,所以我們就把目光挪到了乘法的另一個(gè)因子——CPU時(shí)鐘周期數(shù)上。

如果能夠減少程序需要的CPU時(shí)鐘周期數(shù)量,一樣能夠提升程序性能。

對(duì)于CPU時(shí)鐘周期數(shù),我們可以再做一個(gè)分解,把它變成CPU時(shí)鐘周期數(shù) = 指令數(shù)×每條指令的平均時(shí)鐘周期數(shù)(Cycles Per Instruction,簡(jiǎn)稱CPI)不同的指令需要的Cycles是不同的

加法和乘法都對(duì)應(yīng)著一條CPU指令
但是乘法需要的Cycles就比加法要多,自然也就慢。
在這樣拆分了之后,我們的程序的CPU執(zhí)行時(shí)間就可以變成這樣三個(gè)部分的乘積。

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

因此,要解決性能問題,就是要優(yōu)化這三者。

時(shí)鐘周期時(shí)間

就是計(jì)算機(jī)主頻,取決于硬件。摩爾定律就一直在不停提高的主頻。
最早的80386主頻只有33MHz,現(xiàn)在手頭的筆記本電腦就有2.8GHz,在主頻層面,就提升了將近100倍。

每條指令的平均時(shí)鐘周期數(shù)CPI

一條指令到底需要多少CPU Cycle。在后面講解CPU結(jié)構(gòu)的時(shí)候,我們會(huì)看到,現(xiàn)代的CPU通過(guò)流水線技術(shù)(Pipeline),讓一條指令需要的CPU Cycle盡可能地少。因此,對(duì)于CPI的優(yōu)化,也是計(jì)算機(jī)組成和體系結(jié)構(gòu)中的重要一環(huán)。

指令數(shù)

代表執(zhí)行我們的程序到底需要多少條指令、用哪些指令。
這個(gè)很多時(shí)候就把挑戰(zhàn)交給了編譯器。
同樣的代碼,編譯成計(jì)算機(jī)指令時(shí)候,就有各種不同的表示方式。

把自己想象成一個(gè)CPU,坐在那里寫程序。
計(jì)算機(jī)主頻就好像是你的打字速度,打字越快,你自然可以多寫一點(diǎn)程序。

CPI相當(dāng)于你在寫程序的時(shí)候,熟悉各種快捷鍵,越是打同樣的內(nèi)容,需要敲擊鍵盤的次數(shù)就越少。

指令數(shù)相當(dāng)于你的程序設(shè)計(jì)得夠合理,同樣的程序要寫的代碼行數(shù)就少。

如果三者皆能實(shí)現(xiàn),你自然可以很快地寫出一個(gè)優(yōu)秀的程序,“性能”從外面來(lái)看就是好的。

3 總結(jié)

學(xué)完本文,對(duì)“性能”這個(gè)名詞,你應(yīng)該有了更清晰的認(rèn)識(shí)。

主要對(duì)于“響應(yīng)時(shí)間”這個(gè)性能指標(biāo)進(jìn)行抽絲剝繭,拆解成了計(jì)算機(jī)時(shí)鐘周期、CPI以及指令數(shù)這三個(gè)獨(dú)立的指標(biāo)的乘積,并且為指明了優(yōu)化計(jì)算機(jī)性能的三條康莊大道。

也就是,提升計(jì)算機(jī)主頻,優(yōu)化CPU設(shè)計(jì)使得在單個(gè)時(shí)鐘周期內(nèi)能夠執(zhí)行更多指令,以及通過(guò)編譯器來(lái)減少需要的指令數(shù)。

后面會(huì)講解,具體怎么在電路硬件、CPU設(shè)計(jì),乃至指令設(shè)計(jì)層面,提升計(jì)算機(jī)的性能。

參考

豆瓣讀書 - 計(jì)算機(jī)專題

深入淺出計(jì)算機(jī)組成原理

What do "real", "user" and "sys" mean in the output of time(1)?

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76022.html

相關(guān)文章

  • 浪潮:攀登存儲(chǔ)之巔

    摘要:走向未來(lái),攀登存儲(chǔ)之巔雖然企業(yè)級(jí)存儲(chǔ)領(lǐng)域的競(jìng)爭(zhēng)依然激烈,但是致力于存儲(chǔ)國(guó)產(chǎn)化的浪潮,必然需要屬于自己的發(fā)展策略。為此,攀登存儲(chǔ)之巔,浪潮已經(jīng)進(jìn)發(fā),等待著在年實(shí)現(xiàn)下一輪的升級(jí)。在這個(gè)世界上,唯一不變的是變化。邁向新數(shù)據(jù)時(shí)代因?yàn)橛脩舻臉I(yè)務(wù)與應(yīng)用變化,所以也帶動(dòng)了中國(guó)企業(yè)級(jí)存儲(chǔ)行業(yè)的蓬勃發(fā)展。一方面,云已經(jīng)逐漸深入到了各行各業(yè),企業(yè)IT環(huán)境邁向云化的過(guò)程也是數(shù)字化轉(zhuǎn)型的關(guān)鍵所在。二方面,大數(shù)據(jù)伴隨...

    alphahans 評(píng)論0 收藏0
  • 前端每周清單第 47 期:NPM 年度報(bào)告與 2018 展望,Airbnb React Router

    摘要:確定新的包命名規(guī)則為了盡可能避免包的誤植域名現(xiàn)象,將不會(huì)再允許使用相似的包命名不過(guò)會(huì)進(jìn)一步鼓勵(lì)開發(fā)者使用自己的命名空間來(lái)發(fā)布包。本文是對(duì)其幾十年來(lái)技術(shù)之路的回顧與展望,也是一代技術(shù)人的青春回憶。 showImg(https://segmentfault.com/img/remote/1460000012846628); 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了...

    makeFoxPlay 評(píng)論0 收藏0
  • 重學(xué)前端專欄學(xué)習(xí)筆記】建立系統(tǒng)的知識(shí)架構(gòu)體系

    摘要:首先一上來(lái)就分享了兩個(gè)學(xué)習(xí)方法建立知識(shí)架構(gòu)追本溯源。列一份前端知識(shí)架構(gòu)圖在這章節(jié)中,分享了本專欄要學(xué)習(xí)的知識(shí)架構(gòu)瀏覽器的實(shí)現(xiàn)原理和前端工程實(shí)踐四個(gè)模塊。最后一個(gè)是前端工程實(shí)踐,從性能工具鏈持續(xù)集成搭建系統(tǒng)架構(gòu)與基礎(chǔ)庫(kù)五個(gè)方面講起。 明確你的前端學(xué)習(xí)路線 自己特別喜歡屯課,看著自己買的課,有種滿足感,仿佛知識(shí)都是我的了,翻看極客時(shí)間買的課,決定這段時(shí)間把重學(xué)前端專欄學(xué)習(xí)一遍。 從周六到今...

    shaonbean 評(píng)論0 收藏0
  • 做了5年的Android,我轉(zhuǎn)Java后臺(tái)了!

    摘要:很多人做開發(fā),年后,都會(huì)感覺自己遇到瓶頸。公司的工作節(jié)奏又比較快,難有機(jī)會(huì)學(xué)習(xí)架構(gòu)原理,也沒人教,所以這個(gè)時(shí)候,學(xué)習(xí)架構(gòu)原理,擴(kuò)展思維,對(duì)自己以后職業(yè)生涯尤為重要。 很多人做Java開發(fā)4,5年后,都會(huì)感覺自己遇到瓶頸。什么都會(huì)又什么都不會(huì),如何改變困境,為什么很多人寫了7,8年還是一個(gè)碼農(nóng),工作中太多被動(dòng)是因?yàn)椴欢讓釉?。公司的工作?jié)奏又比較快,難有機(jī)會(huì)學(xué)習(xí)架構(gòu)原理,也沒人教,所以...

    shiweifu 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記()--前端學(xué)習(xí)路線與方法

    摘要:筆記說(shuō)明重學(xué)前端是程劭非前手機(jī)淘寶前端負(fù)責(zé)人在極客時(shí)間開的一個(gè)專欄,每天分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整的可以加入的專欄學(xué)習(xí)原文有的語(yǔ)音,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整的可以...

    mmy123456 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<