點擊上方“JavaEdge”,關注公衆號
1 計算機概述
1.1 發展簡史
一階段(1946~1957)
電子管計算機
電子管
第一代計算機"ENIAC"
世界上第一臺電子計算機"ENIAC"於1946年2月14日在美國賓夕法尼亞大學誕生,美國人莫克利(JohnW.Mauchly)和艾克特(J.PresperEckert)發明,主要是有大量的電子管組成,主用於科學計算。
主要特點:
以電子管作爲元器件,所以稱電子管計算機
用了18000個電子管,佔地150平方米,足有兩間房子大,重達30噸,耗電功率約150千瓦,每秒鐘可進行5000次運算
電子管空間佔用大,耗電量大,易發熱,因而工作的時間不能太長
使用機器語言,無系統軟件
採用磁鼓、小磁芯作爲儲存器,存儲空間有限
輸入/輸出設備簡單,採用穿孔紙帶或卡片,操作複雜,更換程序需要接線
主要用於科學計算,當時美國國防部用它來進行彈道計算
二階段(1957~1964)
晶體管計算機
晶體管
第二代計算機採用的主要元件是晶體管,稱爲晶體管計算機。計算機軟件有了較大發展,程序語言也出現了Fortran,Cobol計算機高級語言,採用了監控程序,這是操作系統的雛形。
主要特點:
1、集成度較高,體積小
2、運算速度快,功耗更低
3、操作簡單,交互方便(有顯示器了)
三階段(1964~1980)
中小規模集成電路計算機。
德州儀器的工程師發明了集成電路(IC)
集成電路可在幾平方毫米的單晶硅片上集成十幾個甚至上百個電子元件。計算機開始採用中小規模的集成電路元件,這一代比上一代更小,耗電更少,功能更強,壽命更長,領域擴大,性能比上一代有很大提高。
主要特點:
1、體積更小,壽命更長。
2、運行計算速度更快。
3、外圍設備考試出現多樣化。
4、有類似操作系統和應用程序,高級語言進一步發展。
5、應用範圍擴大到企業管理和輔助設計等領域。
四階段(1980~至今)
超大規模集成電路計算機。
這時期的計算機的體積、重量、功耗進一步減少,運算速度、存儲容量、可靠性都有很大提高。
主要特點:
1、採用了大規模和超大規模集成電路邏輯元件,體積與第三代相比進一步縮小,可靠性更高,壽命更長。
2、運算速度加快,每秒可達集千萬次到幾十億次。
3、系統軟件和應用軟件獲得了巨大的發展,軟件配置豐富,程序設計部分自動化。
4、計算機網絡技術、多媒體技術、分佈式處理技術有了很大的發展,微型計算機大量進入家庭,產品更新速度加快。
5、計算機在辦公自動化、數據庫管理、圖像處理、語言設別和專家系統等各個領域得到應用,電子商務已開始進入家庭,出現個人電腦(PC),計算機的發展進入到了一個新的歷史時期。
未來的計算機
超導計算機、納米計算機、光計算機、DNA計算機、量子計算機和神經網絡計算機等,體積更小,運算速度更快,更加智能化,耗電量更小。
程序的CPU執行時間 = 指令數×CPI×Clock Cycle Time
所以提升計算機的性能,可以通過指令數/CPI,好像都太難了。
因此工程師們,就在CPU上多放晶體管,不斷提升CPU的時鐘頻率,讓CPU更快,程序的執行時間就會縮短。
從1978年Intel發佈的8086 CPU開始,計算機的主頻從5MHz開始,不斷攀升
1980年代中期的80386能夠跑到40MHz
1989年的486能夠跑到100MHz
直到2000年的奔騰4處理器,主頻已經到達了1.4GHz
1.2 分類
超級計算機
功能最強、運算速度最快、存儲容量最大的計算機,多用於國家高科技領域和尖端技術研究。
計算速度單位 TFlop/s。1TFlop/s= 1萬億次浮點計算/s
Intel® Core™ 10090K CPU
5.3GHz = 59.45 GFlop/s = 0.05945TFlop/s
大型計算機
又稱大型機、大型主機、主機等,具有高性能,可處理大量數據與複雜的運算。該領域下IBM佔據大份額。IBM Z9,NASA的最後一臺大型機,使用的Red Hat Enterprise Linux。
但是造價太高,阿里巴巴提出去 I(IBM)O(Oracle)E(EMC)這種高代價的存儲系統維護,而且伸縮性差。
迷你計算機(服務器)
也稱爲小型機,普通服務器。不需要特殊的空調場所,具備不錯的算力,可以完成較複雜的運算。
普通服務器已替代傳統的大型機,成爲大規模企業計算的核心。
工作站
高端的通用微型計算機,提供比個人計算機更強大的性能。類似於普通臺式電腦, 體積較大,但性能強勁。
微型計算機
即個人計算機,是最普通的一類計算機,如臺式機,筆記本和一體機。
1.3 馮·諾伊曼結構
早期計算機僅含固定用途程序,如果改變程序就得更改結構、重新設計電路。所以需要把程序存儲起來,並設計通用電路,即存儲程序指令設計通用電路。
把需要的程序和數據送至計算機中
長期記憶程序、數據、中間結果及最終運算結果的能力
具備算術、邏輯運算和數據傳送等數據加工處理的能力
按照要求將處理結果輸出給用戶
馮·諾伊曼瓶頸(von Neumann bottleneck)
在CPU與存儲器之間的流量(資料傳輸率)與存儲器的容量相比起來相當小,在現代電腦中,流量與CPU的工作效率相比之下非常小,在某些情況下(當CPU需要在巨大的數據上運行一些簡單指令時),數據流量就成了整體效率非常嚴重的限制。CPU將會在數據輸入或輸出存儲器時閒置。由於CPU速度遠大於存儲器讀寫速率,因此瓶頸問題越來越嚴重。
在CPU與存儲器間的緩存存儲器緩解馮·諾伊曼瓶頸。分支預測(branch prediction)算法的創建也幫助緩和了此問題。
程序翻譯與程序解釋
2 CPU的極限-功耗
奔騰4的CPU主頻從來沒有達到過10GHz,最終定格在3.8GHz
奔騰4主頻雖高,但實際性能卻配不上同樣的主頻。
於是不僅讓AMD獲得喘息之機,更代表“主頻時代”終結。後面幾代Intel CPU主頻不但沒上升,反而下降。
至今的最高配置Intel X 系列 CPU
主頻也不過5GHz。
相較於1978年到2000年,這20年裏300倍的主頻提升,從2000年到現在的20 年,CPU的主頻大概提高3倍。奔騰4時CPU主頻進入瓶頸期
就是因爲功耗。CPU,也稱作超大規模集成電路,Very-Large-Scale Integration,VLSI。
CPU就是讓晶體管裏面的“開關”不斷“打開”/“關閉”,組合完成各種運算和功能。
提高CPU計算速度:
增加密度
同樣的面積,多放晶體管。如果CPU的面積大,晶體管之間的距離變更大,電信號傳輸的時間就會變長,運算速度自然就慢了。提升主頻
讓晶體管“打開”/“關閉”更快,但是動作快,就要出汗散熱,所以有了CPU上的硅脂、風扇、水冷。但設備散熱效果也有極限。
因此,CPU裏能夠放下的晶體管數量和晶體管的“開關”頻率也有限。
一個CPU的功率,可以用這樣一個公式來表示:
功耗 ≈ 1/2 ×負載電容 × 電壓的平方 × 開關頻率 × 晶體管數量
爲提升性能,要不斷增加晶體管密度,就要把晶體管造得小一點,即提升“製程”。從28nm到5nm,還要提升主頻,讓開關頻率變快。
但功耗過多,CPU散熱就跟不上,公式裏功耗和電壓平方成正比,即可降低電壓。
從5MHz主頻的8086到5GHz主頻的Intel X,CPU電壓從5V下降到了1V。
2 並行優化-阿姆達爾定律
從90s到本世紀初,“面向摩爾定律編程”的套路越來越用不下去了。奔騰4開始,Intel意識到通過提升主頻“難”以性能提升。開始推出多核CPU,提升“吞吐率”而非“響應時間”。即通過並行提高性能。
但要使用這種思想,需滿足以下條件:
需要進行的計算,本身即可分解成幾個可並行任務
比如向量的點乘運算需要能夠分解好問題,並確保幾個人的結果能夠彙總到一起
在“彙總”這個階段,是沒有辦法並行進行的,還是得順序執行,一步一步來
這就引出了阿姆達爾定律(Amdahl’s Law):
對一個程序優化後,處理器並行運算之後效率提升的情況可用如下公式表示:
優化後的執行時間 = 受優化影響的執行時間/加速倍數+不受影響的執行時間
比如向量點乘,同時計算向量的一小段點積,就是並行提高部分計算性能。但最終還是要在一個人那彙總相加,這部分時間無法並行優化,即不受影響的執行時間。
比如向量
點積需100ns
加法需要20ns
總共需要120ns。這裏通過並行4個CPU有了4倍的加速度。那麼最終優化後,就有了100/4+20=45ns。
即使增加並行度來提供加速倍數,比如有100個CPU,整個時間也需要100/100+20=21ns,所以並非越多就肯定越快。
3 讓性能再次提升
無論是簡單提升主頻,還是增加CPU核心數,通過並行提升性能,都會遇到瓶頸。
僅靠“堆硬件”,已經不能很好地滿足性能。於是,工程師們需要從其他方面開始下功夫。
在“摩爾定律”和“並行計算”之外,在整個計算機組成層面,還有如下:
3.1 大概率事件
深度學習,整個計算過程中基本都是向量矩陣計算。所以用GPU替代CPU,大幅度提升了深度學習的模型訓練過程,Google不滿足GPU性能,還推出了TPU。
3.2 流水線
現代的工廠裏的生產線叫“流水線”。可以把裝配iPhone這樣的任務拆分成一個個細分的任務,讓每個人都只需要處理一道工序,最大化整個工廠的生產效率。
CPU就是一個運算工廠,把CPU指令執行的過程進行拆分,細化運行。
3.3 預測
預測下一步而非苦等上一步結果,即提前運算。就像循環訪問數組時,你也會猜到下一步會訪問數組下一項。比如“分支和冒險”、“局部性原理”。
參考
《深入理解計算機操作系統》
https://www.eda365.com/portal.php?mod=view&aid=53086
往期推薦
目前交流羣已有 800+人,旨在促進技術交流,可關注公衆號添加筆者微信邀請進羣
喜歡文章,點個“在看、點贊、分享”素質三連支持一下~
本文分享自微信公衆號 - JavaEdge(Java-Edge)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。