主頁 > 軟體設計 > 功耗是如何影響計算機性能的?

功耗是如何影響計算機性能的?

2021-09-18 13:07:55 軟體設計

計算機性能的提升源自公式: 程 序 的 C P U 執 行 時 間 = 指 令 數 × C P I × 時 鐘 周 期 時 間 程式的CPU執行時間=指令數×CPI×時鐘周期時間 CPU=×CPI×

1.功耗問題的引出

實體1:貌似要減少指令數,減小CPI比較困難,而減小時鐘周期可行,于是,從 1978 年 Intel 發布的 8086 CPU 開始,計算機的主頻從 5MHz 開始,不斷提升,1980 年代中期的 80386 能夠跑到 40MHz,1989 年的 486 能夠跑到 100MHz,直到 2000 年的奔騰 4 處理器,主頻已經到達了 1.4GHz,而消費者也在這 20 年里養成了“看主頻”買電腦的習慣,當時已經基本壟斷了桌面 CPU 市場的 Intel 更是夸下了海口,表示奔騰 4 所使用的 CPU 結構可以做到 10GHz,頗有一點“大力出奇跡”的意思,

但是,Intel遇到了CPU的極限問題——功耗,奔騰 4 的CPU主頻從來沒有達到過10GHz,最高只有3.8GHz,而且發現奔騰 4 2.4GHz的CPU性能與奔騰 3 1.6Ghz的CPU性能差不多,這讓AMD獲得了喘息的機會,代表著“主頻時代”的終結,

如今,2019 年的最高配置 Intel i9 CPU,主頻也只不過是 5GHz 而已,相較于 1978 年到 2000 年,這 20 年里 300 倍的主頻提升,從 2000 年到現在的這 19 年,CPU 的主頻大概提高了 3 倍,

實體2:一個 3.8GHz 的奔騰 4 處理器,滿載功率是 130 瓦,這個 130 瓦是什么概念呢?機場允許帶上飛機的充電寶的容量上限是 100 瓦時,如果我們把這個 CPU 安在手機里面,不考慮螢屏記憶體之類的耗電,這個 CPU 滿載運行 45 分鐘,充電寶里面就沒電了,而 iPhone X 使用 ARM 架構的 CPU,功率則只有 4.5 瓦左右,

2. 性能與功耗

CPU是超大規模集成電路(Very Large Scale Integration,簡稱VLSI),要提高CPU計算速度,一方面,在 CPU 里,同樣的面積里面,多放一些晶體管,也就是增加密度;另一方面,要讓晶體管“打開”和“關閉”得更快一點,也就是提升主頻,而這兩者,都會增加功耗,帶來耗電和散熱的問題,就像為了加快作業,要在工廠里多塞點人一樣,
散熱方式:風扇、空調、水冷,但是在CPU內增加晶體管密度和“開關”頻率也是有限的,
功 耗 ≈ 1 / 2 × 負 載 電 容 × 電 壓 的 平 方 × 開 關 頻 率 × 晶 體 管 數 量 功耗\approx1/2 ×負載電容×電壓的平方×開關頻率×晶體管數量 1/2××××

  1. 增加晶體管數量 --> 多放一點晶體管 --> 將晶體管造的小一點
    這就是提升“制程”,目前我國可以達到28nm,而荷蘭ASML可以達到5nm,相當于將晶體管變小到了原來的1/5大小,
    在這里插入圖片描述
  2. 降低電壓
    功耗和電壓的平方是成正比,這意味著電壓下降到原來的 1/5,整個的功耗會變成原來的 1/25,
    實體:從 5MHz 主頻的 8086 到 5GHz 主頻的 Intel i9,CPU 的電壓已經從 5V 左右下降到了 1V 左右,這也是為什么我們 CPU 的主頻提升了 1000 倍,但是功耗只增長了 40 倍,微軟Surface Go輕薄筆記本上使用了0.25V 的低電壓 CPU,使得筆記本能有更長的續航時間,

3. 性能與并行優化

在過去的 20 年里,制程的優化電壓的下降讓CPU性能有所提升,但是從二十世紀90年代至二十一世紀初,軟體工程師所用的“面向摩爾定律編程”的套路越來越行不通了,這種思想就是“寫程式不考慮性能,等明年 CPU 性能提升一倍,到時候性能自然就不成問題了”,

于是,從奔騰 4 開始,Intel 意識到通過提升主頻比較“難”去實作性能提升,就開始推出 Core Duo 這樣的多核 CPU,通過提升“吞吐率”而不是“回應時間”,來達到提升CPU性能的目的**,提升“吞吐率”就是通過并行優化來提升CPU性能**,就好比用多匹馬拉車,而減小“回應時間”就好比用一匹優等馬換一匹劣等馬,

實體3:做機器學習程式的時候,需要計算向量的點積,比如向量 W=[W0?,W1??,W2??,…,W15??] 和向量 X=[X0?,X1??,X2??,…,X15??],W?X=W0???X0??+W1???X1??+ W2???X2??+…+W15???X15??,

這些式子由 16 個乘法和 1 個連加組成,如果一個人用筆來算的話,需要一步一步算 16 次乘法和 15 次加法,如果這個時候把這個任務分配給 4 個人,同時去算 W0??~W3??, W4??~W7??, W8?~W11??, W12?~W15? 這樣四個部分的結果,再由一個人進行匯總,需要的時間就會縮短,
在這里插入圖片描述
但是,這樣的并行計算需要滿足3個條件:
1)沒有背景關系關聯,或者稱為背景關系解耦,也就說需要進行的計算,本身可以分解成幾個可以并行的任務,好比上面的乘法和加法計算,幾個人可以同時進行,不會影響最后的結果,
2)需要能夠分解好問題,并確保幾個人的結果能夠匯總到一起,
3)在“匯總”這個階段,是沒有辦法并行進行的,還是得順序執行,一步一步計算,

這就引出了在進行性能優化時的一個經驗——阿姆達定律(Amdahl’s Law),對于一個程式進行優化之后,處理器并行運算之后效率提升情況如下列公式所示:

優 化 后 的 執 行 時 間 = 受 優 化 影 響 的 執 行 時 間 / 加 速 倍 數 + 不 受 影 響 的 執 行 時 間 優化后的執行時間 = 受優化影響的執行時間 / 加速倍數 + 不受影響的執行時間 =/+

上例中,4 個人同時計算向量的一小段點積,就是通過并行提高了這部分的計算性能,但是,這 4 個人的計算結果,最侄訓是要在一個人那里進行匯總相加,這部分匯總相加的時間,是不能通過并行來優化的,也就是上面的公式里面不受影響的執行時間這一部分,

比如上例的各個向量的一小段的點積,需要 100ns,加法需要 20ns,總共需要 120ns,這里通過并行 4 個 CPU 進行了 4 倍的加速度,那么最終優化后,就有了 100/4+20=45ns,即使我們增加更多的并行度來提供加速倍數,比如有 100 個 CPU,整個時間也需要 100/100+20=21ns,
在這里插入圖片描述

4. 小結

無論是簡單地通過提升主頻(功耗和散熱問題),還是增加更多的 CPU 核心數量,通過并行來提升吞吐量,達到提升性能的目的(并行部分可以提高,但串行部分提高不了),都會遇到相應的瓶頸,

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

1)加速大概率事件,最典型的就是,過去幾年流行的深度學習,整個計算程序中,99% 都是向量和矩陣計算,于是,工程師們通過用 GPU 替代 CPU,大幅度提升了深度學習的模型訓練程序,本來一個 CPU 需要跑幾小時甚至幾天的程式,GPU 只需要幾分鐘就好了,Google 更是不滿足于 GPU 的性能,進一步地推出了 TPU,后面會為講解 GPU 和 TPU 的基本構造和原理,

2)通過流水線提高性能,現代的工廠里的生產線叫“流水線”,我們可以把裝配 iPhone 這樣的任務拆分成一個個細分的任務,讓每個人都只需要處理一道工序,最大化整個工廠的生產效率,類似的,CPU 其實就是一個“運算工廠”,把 CPU 指令執行的程序進行拆分、細化運行,也是現代 CPU 在主頻沒有辦法提升那么多的情況下,性能仍然可以得到提升的重要原因之一,后面也會講到,現代 CPU 里是如何通過流水線來提升性能的,以及反面的,過長的流水線會帶來什么新的功耗和效率上的負面影響,

3)通過預測提高性能,通過預先猜測下一步該干什么,而不是等上一步運行的結果,提前進行運算,也是讓程式跑得更快一點的辦法,典型的例子就是在一個回圈訪問陣列的時候,憑經驗,你也會猜到下一步我們會訪問陣列的下一項,后面要講的“分支和冒險”、“區域性原理”這些 CPU 和存盤系統設計方法,其實都是在利用對于未來的“預測”,提前進行相應的操作,來提升程式性能,

問題:這里介紹了三種常見的性能提升思路,分別是:加速大概率事件、通過流水線提高性能和通過預測提高性能,請你想一下,除了在硬體和指令集的設計層面之外,在軟體開發層面,有用到過類似的思路來解決性能問題嗎?

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/301007.html

標籤:其他

上一篇:阿里巴巴CTO獨家自述:CTO就是要給CEO掃清障礙和風險

下一篇:微服務003基于Feign的遠程服務呼叫

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more