本文以乙個現代的、實際的個人電腦為物件,分析其中cpu(intel core 2 duo 3.0ghz)以及各類子系統的執行速度——延遲和資料吞吐量。通過粗略的估算pc各個元件的相對執行速度,希望能給大家留下乙個比較直觀的印象。本文中的資料來自實際應用,而非理論最大值。時間的單位是納秒(ns,十億分之一秒),毫秒(ms,千分之一秒),和秒(s)。吞吐量的單位是兆位元組(mb)和千兆位元組(gb)。讓我們先從cpu和記憶體開始,下圖是北橋部分:
第乙個令人驚嘆的事實是:cpu快得離譜。在core 2 3.0ghz上,大部分簡單指令的執行只需要乙個時鐘週期,也就是1/3納秒。即使是真空中傳播的光,在這段時間內也只能走10厘公尺(約4英吋)。把上述事實記在心中是有好處的。當你要對程式做優化的時候就會想到,執行指令的開銷對於當今的cpu而言是多麼的微不足道。
當cpu運轉起來以後,它便會通過l1 cache和l2 cache對系統中的主存進行讀寫訪問。cache使用的是靜態儲存器(sram)。相對於系統主存中使用的動態儲存器(dram),cache讀寫速度快得多、造價也高昂得多。cache一般被放置在cpu晶元的內部,加之使用昂貴高速的儲存器,使其給cpu帶來的延遲非常低。在指令層次上的優化(instruction-level optimization),其效果是與優化後**的大小息息相關。由於使用了快取記憶體技術(caching),那些能夠整體放入l1/l2 cache中的**,和那些在執行時需要不斷調入/調出(marshall into/out of)cache的**,在效能上會產生非常明顯的差異。
正常情況下,當cpu操作一塊記憶體區域時,其中的資訊要麼已經儲存在l1/l2 cache,要麼就需要將之從系統主存中調入cache,然後再處理。如果是後一種情況,我們就碰到了第乙個瓶頸,乙個大約250個時鐘週期的延遲。在此期間如果cpu沒有其他事情要做,則往往是處在停機狀態的(stall)。為了給大家乙個直觀的印象,我們把cpu的乙個時鐘週期看作一秒。那麼,從l1 cache讀取資訊就好像是拿起桌上的一張草稿紙(3秒);從l2 cache讀取資訊則是從身邊的書架上取出一本書(14秒);而從主存中讀取資訊則相當於走到辦公樓下去買個零食(4分鐘)。
主存操作的準確延遲是不固定的,與具體的應用以及其他許多因素有關。比如,它依賴於列選通延遲(cas)以及記憶體條的型號,它還依賴於cpu指令預取的成功率。指令預取可以根據當前執行的**來猜測主存中哪些部分即將被使用,從而提前將這些資訊載入cache。
看看l1/l2 cache的效能,再對比主存,就會發現:配置更大的cache或者編寫能更好的利用cache的應用程式,會使系統的效能得到多麼顯著的提高。如果想進一步了解有關記憶體的諸多資訊,讀者可以參閱ulrich drepper所寫的一篇經典文章《what every programmer should know about memory》。
人們通常把cpu與記憶體之間的瓶頸叫做馮·諾依曼瓶頸(von neumann bottleneck)。當今系統的前端匯流排頻寬約為10gb/s,看起來很令人滿意。在這個速度下,你可以在1秒內從記憶體中讀取8gb的資訊,或者10納秒內讀取100位元組。遺憾的是,這個吞吐量只是理論最大值(圖中其他資料為實際值),而且是根本不可能達到的,因為主存控制電路會引入延遲。在做記憶體訪問時,會遇到很多零散的等待週期。比如電平協議要求,在選通一行、選通一列、取到可靠的資料之前,需要有一定的訊號穩定時間。由於主存中使用電容來儲存資訊,為了防止因自然放電而導致的資訊丟失,就需要週期性的重新整理它所儲存的內容,這也帶來額外的等待時間。某些連續的記憶體訪問方式可能會比較高效,但仍然具有延時。而那些隨機的記憶體訪問則消耗更多時間。所以延遲是不可避免的。
圖中下方的南橋連線了很多其他匯流排(如:pci-e, usb)和外圍裝置:
令人沮喪的是,南橋管理了一些反應相當遲鈍的裝置,比如硬碟。就算是緩慢的系統主存,和硬碟相比也可謂速度如飛了。繼續拿辦公室做比喻,等待硬碟尋道的時間相當於離開辦公大樓並開始長達一年零三個月的環球旅行。這就解釋了為何電腦的大部分工作都受制於磁碟i/o,以及為何資料庫的效能在記憶體緩衝區被耗盡後會陡然下降。同時也解釋了為何充足的ram(用於緩衝)和高速的磁碟驅動器對系統的整體效能如此重要。
雖然磁碟的「連續」訪問速度確實可以在實際使用中達到,但這並非故事的全部。真正令人頭疼的瓶頸在於尋道操作,也就是在磁碟表面移動讀寫磁頭到正確的磁軌上,然後再等待磁碟旋轉到正確的位置上,以便讀取指定扇區內的資訊。rpm(每分鐘繞轉次數)用來指示磁碟的旋轉速度:rpm越大,耽誤在尋道上的時間就越少,所以越高的rpm意味著越快的磁碟。這裡有一篇由兩個stanford的研究生寫的很酷的文章,其中講述了尋道時間對系統效能的影響:《anatomy of a large-scale hypertextual web search engine》
當磁碟驅動器讀取乙個大的、連續儲存的檔案時會達到更高的持續讀取速度,因為省去了尋道的時間。檔案系統的碎片整理器就是用來把檔案資訊重組在連續的資料塊中,通過盡可能減少尋道來提高資料吞吐量。然而,說到計算機實際使用時的感受,磁碟的連續訪問速度就不那麼重要了,反而應該關注驅動器在單位時間內可以完成的尋道和隨機i/o操作的次數。對此,固態硬碟(ssd)可以成為乙個很棒的選擇。
硬碟的cache也有助於改進效能。雖然16mb的cache只能覆蓋整個磁碟容量的0.002%,可別看cache只有這麼一點大,其效果十分明顯。它可以把一組零散的寫入操作合成乙個,也就是使磁碟能夠控制寫入操作的順序,從而減少尋道的次數。同樣的,為了提高效率,一系列讀取操作也可以被重組,而且作業系統和驅動器韌體(firmware)都會參與到這類優化中來。
最後,圖中還列出了網路和其他匯流排的實際資料吞吐量。火線(fireware)僅供參考,intel x48晶元組並不直接支援火線。我們可以把internet看作是計算機之間的匯流排。去訪問那些速度很快的**(比如google.com),延遲大約45毫秒,與硬碟驅動器帶來的延遲相當。事實上,儘管硬碟比記憶體慢了5個數量級,它的速度與internet是在同一數量級上的。目前,一般家用網路的頻寬還是要落後於硬碟連續讀取速度的,但「網路就是計算機」這句話可謂名符其實。如果將來internet比硬碟還快了,那會是個什麼景象呢?
我希望這些能對您有所幫助。當這些數字一起呈現在我面前時,真的很迷人,也讓我看到了計算機技術發展到了哪一步。前文分開的兩個只是為了敘述方便,我把包含南北橋的整張也貼出來,供您參考。
i9 10880H和 i9 9880H 相差多少
如果與上一代的i9 9880h相比,i9 10880h的單核效能有著15 的提公升,而多核效能提公升幅度高達21 不過需要注意的是,截圖中,2款處理器跑的geekbench版本並不一樣,i9 10880h執行的是geekbench 4.4.2,而i9 10880h則是geekbench 4.3.4。...
i7 10875h和r5 3600 相差多少
i7 10875h是一款高階膝上型電腦處理器,具有基於comet lake架構 cml h,skylake 的八個核心。該處理器的頻率在2.1到4.5 ghz之間,可能在4.5 ghz左右,並且借助超執行緒技術可以同時執行多達16個執行緒。該處理器仍採用舊的14nm 14nm 工藝製造。與以前的產品...
excel中計算兩個日期之間的相差多少天
今天在群裡看到一則訊息 解決辦法如下 兩個準備知識點 1,首先把字串格式的日期解析成日期型別,用mid方法 mid text,start num,num chars 可以從字串中取出子字串,這裡start num是開始位置 最小值為1,不是0 num chars是取出多少個字串 例如f42單元格內容...