cpu流水线工作原理_嵌入式工作原理(处理器天梯图)
大家好,又見面了,我是你們的朋友風(fēng)君子。如果您正在找激活碼,請(qǐng)點(diǎn)擊查看最新教程,關(guān)注關(guān)注公眾號(hào) “全棧程序員社區(qū)” 獲取激活教程,可能之前舊版本教程已經(jīng)失效.最新Idea2022.1教程親測(cè)有效,一鍵激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟無欺
現(xiàn)在的CPU處理器一般都是超流水線工作,動(dòng)不動(dòng)就是10級(jí)以上流水線,超高主頻,這兩者之間有什么關(guān)系呢?今天就跟大家科普下CPU流水線的工作原理,以及他們之間的關(guān)系。
說到流水線,很多人會(huì)想到富士康;說到富士康,很多人會(huì)想到張全蛋。作為富士康 3 號(hào)流水線資深質(zhì)檢員,下面就請(qǐng)張全蛋給大家科普下什么是流水線,大家鼓掌歡迎。
Micheal Jack 眼中的流水線
大家好,我是張全蛋,英文名叫Micheal Jack,法文名叫霍雷呆-杰Q賴,大家也可以叫我查理。作為iPhone 手機(jī) 3 號(hào)流水線的資深質(zhì)檢員,我很忙的,每分鐘都是幾百萬的生意。像我們富士康這樣的transnational enterprise,經(jīng)常會(huì)和不同國(guó)家的客戶說一些技術(shù)上的meeting啊、下班陪他們message啊,都需要英文的。像我們廠里不會(huì)說英語的啊,都會(huì)被經(jīng)理 fire 掉的。在我們廠里,流水線叫法太 low了,我們都叫 pipeline,一條pipeline,每個(gè)人分工不同,從手機(jī)原材料到成品iPhone ,只需要短短幾分鐘。嵌入式C語言自我修養(yǎng)
查理很忙,介紹到這里就走了,接下來我們繼續(xù)了解下什么叫流水線。
流水線是工業(yè)大生產(chǎn)下的產(chǎn)物。在農(nóng)業(yè)社會(huì)做一部手機(jī),需要的是工匠、手藝人,就像故宮里制作鐘表的那些匠人一樣,是需要拜師學(xué)藝、慢慢學(xué)習(xí)的:從手機(jī)組裝、質(zhì)檢、貼膜、包裝都是一個(gè)人,什么都要學(xué)。手藝人慢工出細(xì)活,但成本很高,到了工業(yè)化社會(huì)就不一樣了:大家分工合作,將做手機(jī)這個(gè)復(fù)雜過程拆分為多個(gè)簡(jiǎn)單步驟,每個(gè)人負(fù)責(zé)一個(gè)步驟,經(jīng)過刻意(機(jī)械)練習(xí)和培訓(xùn),就可以很快上手。每個(gè)人都做自己最擅長(zhǎng)的,可以大大提高工作效率。
如果每個(gè)人都單獨(dú)做一部手機(jī),焊接電路、組裝成品這一步驟一般人需要8分鐘,測(cè)試檢驗(yàn)一般需要4分鐘,貼膜包裝成盒一般需要4分鐘,總共需要16分鐘。每16分鐘,如果有3個(gè)工人的話,一共可以生產(chǎn)3部手機(jī)。一個(gè)新員工從進(jìn)廠開始,要培訓(xùn)學(xué)習(xí)三個(gè)月才能掌握所有的技能,才能上崗。如果引入生產(chǎn)流水線就不一樣了,每個(gè)人只負(fù)責(zé)一個(gè)工序,比如趙鐵柱只負(fù)責(zé)焊接電路、組裝手機(jī),李小花只負(fù)責(zé)貼膜,進(jìn)廠培訓(xùn)3天就可以快速上手了,對(duì)工人的技能要求大大降低!而且隨著時(shí)間積累,每個(gè)人對(duì)自己所負(fù)責(zé)的工序越來越熟練,每道工序需要的時(shí)間大大減少:趙鐵柱焊接電路越來越順手,花費(fèi)時(shí)間從原來的8分鐘縮減為4分鐘;張全蛋的質(zhì)量檢驗(yàn)練得如火純情,整個(gè)流程做完只需要2分鐘;李小花的貼膜技術(shù)也越來越溜了,從貼膜到包裝2分鐘搞定。每16分鐘,趙鐵柱可以焊接4塊電路板 ,整個(gè)流水線可以生產(chǎn)出4部手機(jī),產(chǎn)能整整提升了33.33%!老板高興,趙鐵柱高興,張全蛋和李小花更高興,因?yàn)槊孔?分鐘,他們還可以休息2分鐘,刷刷微博滑個(gè)抖音,豈不樂哉!
看到這里可能有人抬杠了:你這么算是不對(duì)的,每道工序所用的時(shí)間都變?yōu)樵瓉淼囊话耄趺纯赡茏龅玫剑科鋵?shí)要做到不難的,只要工序拆解得合理,容易上手,再加上足夠時(shí)間的機(jī)械重復(fù),很多人都可以做得到。只要獎(jiǎng)金發(fā)到位,蛋糕店里的小姐姐夾蛋糕的速度比你眨眼的速度都快,銀行柜臺(tái)的小李數(shù)鈔票的速度比點(diǎn)鈔機(jī)都快,買單時(shí)飯店前臺(tái)的小妹摁計(jì)算器的速度比你掏錢的速度都快。
流水線工作原理
一條指令的執(zhí)行一般要經(jīng)過:取指令、翻譯指令、執(zhí)行指令三個(gè)基本流程。CPU內(nèi)部的電路分為不同的單元:取指單元、譯碼單元、執(zhí)行單元等,指令的執(zhí)行也是按照流水線工序一步一步執(zhí)行的。我們假設(shè)每一個(gè)步驟執(zhí)行時(shí)間都是一個(gè)時(shí)鐘周期,那么一條指令執(zhí)行需要3個(gè)時(shí)鐘周期。
CPU 執(zhí)行指令的3個(gè)時(shí)鐘周期里,取指單元只在第一個(gè)時(shí)鐘周期里工作,其余兩個(gè)時(shí)鐘周期都處于空閑狀態(tài),其它兩個(gè)執(zhí)行單元也是如此,效率太低了,消費(fèi)者無法接受,老板也不能接受。解決方法就是引入流水線,讓流水線每一顆螺絲釘都馬不停蹄地運(yùn)轉(zhuǎn)起來,最好一刻也不要停。
引入流水線工作模式后可以看到,除了剛開始第一個(gè)時(shí)鐘周期大家還可以偷懶外,其余的時(shí)間都不能閑著:從第二個(gè)時(shí)鐘周期開始,當(dāng)譯碼單元在翻譯指令1時(shí),取指單元也不能閑著,要接著去取指令2。同樣如此,從第三個(gè)時(shí)鐘周期開始,當(dāng)執(zhí)行單元執(zhí)行指令1時(shí),譯碼單元也不能閑著,要接著去翻譯指令2,而取指單元要去取指令3。從第四個(gè)時(shí)鐘周期開始,每個(gè)電路單元都會(huì)進(jìn)入滿荷負(fù)載工作狀態(tài),像富士康工廠里的流水線一樣,源源不斷地執(zhí)行一條條指令。
引入流水線后,雖然每一條指令執(zhí)行流程不變,還是需要3個(gè)時(shí)鐘周期,但是從整條流水線的輸出看來,差不多平均每個(gè)時(shí)鐘周期就能執(zhí)行一條指令。原來執(zhí)行一條指令需要3個(gè)時(shí)鐘周期,現(xiàn)在平均只需要1個(gè)時(shí)鐘周期,CPU 性能提升了不少。
流水線的本質(zhì)其實(shí)就是拿空間資源換時(shí)間。將每條指令分解為多步,指令的每一步都有獨(dú)立的電路來執(zhí)行,并讓不同指令的各步操作重疊,從而實(shí)現(xiàn)幾條指令并行處理,從而加快程序的運(yùn)行。
CPU內(nèi)部的流水線如此,富士康工廠里的iPhone流水線也是如此,通過不斷往流水線增加人手來提高流水線的生產(chǎn)效率,也就是吞吐率。
超流水線技術(shù)
想知道什么是超流水線,讓我們?cè)倩氐礁皇靠怠?/p>
在富士康 3 號(hào) iPhone 流水生產(chǎn)線上,因?yàn)橼w鐵柱工作效率不高,焊接組裝一步手機(jī)需要 4 分鐘,導(dǎo)致生產(chǎn)一部iPhone手機(jī)也得需要 4 分鐘,從而拖累了整條生產(chǎn)線的生產(chǎn)效率。老板很生氣,后果很嚴(yán)重,趙鐵柱沒干到一個(gè)月就被 fire 掉了。后面幾個(gè)月,陸陸續(xù)續(xù)來了不少人:小黑、皮褲哥、紅姐,都想試試這份工作,可惜干得還不如趙鐵柱,挑戰(zhàn)電子廠失敗,早已提桶跑路。
老板招不到人,感覺又錯(cuò)怪了趙鐵柱,于是決定升級(jí)生產(chǎn)線,并承諾加薪重新召回了趙鐵柱。
老板找出了生產(chǎn)線的瓶頸:每道工序都是需要2分鐘,只有趙鐵柱這道工序耗時(shí)4分鐘,老板錯(cuò)怪了這鐵柱,這不是趙鐵柱的原因,是因?yàn)檫@道工序太復(fù)雜。于是把這道工序進(jìn)行了拆解為2道工序:焊接電路板和組裝手機(jī)。焊接電路仍由趙鐵柱負(fù)責(zé),把電路板、顯示屏、手機(jī)外殼組裝成手機(jī)這道工序則由新招員工王建國(guó)負(fù)責(zé)。生產(chǎn)流水線優(yōu)化后,趙鐵柱焊接電路只需要2分鐘,王建國(guó)組裝也只需要 2 分鐘,生產(chǎn)每部 iPhone 的時(shí)間由原來的 4 分鐘縮減為 2 分鐘,生產(chǎn)流水線的瓶頸解決了!
跟富士康流水線類似,優(yōu)化CPU流水線也是提升CPU性能的有效手段。流水生產(chǎn)線存在木桶短板效應(yīng),我們只需要找出CPU流水線中的性能瓶頸,即耗時(shí)最長(zhǎng)的那道工序,然后再進(jìn)行細(xì)分、優(yōu)化為更多的工序就可以了。每一道工序我們稱為流水線的一級(jí),流水線越深,每一道流水電路單元的執(zhí)行時(shí)間就會(huì)變得越小,我們處理器的時(shí)鐘周期就可以更短,從而可以通過提升CPU主頻來提升CPU性能、提高工作效率。
在富士康流水生產(chǎn)線中,每道工序的最長(zhǎng)耗時(shí)時(shí)間決定了整條生產(chǎn)線的吞吐率。在CPU內(nèi)部也是如此,每個(gè)流水單元的執(zhí)行時(shí)間(即時(shí)間延遲)決定了CPU流水線的性能。CPU流水線中的每一道電路單元由組合邏輯電路和寄存器組成,邏輯單路用來執(zhí)行本道工序的邏輯運(yùn)算,寄存器用來保存結(jié)果,并作為下一道工序的輸入。
流水生產(chǎn)線是通過減少每一道工序的耗費(fèi)時(shí)間來提升整條流水線效率的。在CPU內(nèi)部也是如此,CPU內(nèi)部的數(shù)字電路是靠時(shí)鐘驅(qū)動(dòng)來工作的,既然每條指令的執(zhí)行時(shí)鐘周期數(shù)不變,即執(zhí)行每條指令需要3個(gè)時(shí)鐘周期,但是我們可以通過縮短時(shí)鐘周期的方法來提升效率,即減少每條指令所耗費(fèi)的時(shí)間。減少時(shí)鐘周期,也就是提升CPU主頻,一個(gè)關(guān)鍵的制約因素就是CPU內(nèi)部每一個(gè)執(zhí)行單元的耗費(fèi)時(shí)間。雖然說電信號(hào)在電路中的傳播時(shí)間很快,可以接近光速,但是經(jīng)過成千上萬的晶體管,不停地信號(hào)翻轉(zhuǎn),還是會(huì)帶來一定的時(shí)間延遲,這個(gè)時(shí)間延遲我們可以看做這道工作的執(zhí)行時(shí)間。以上圖為例,如果每個(gè)執(zhí)行單元的延遲是 1.5 納秒,那么你的時(shí)鐘周期至少也得2納秒以上,否則電路就會(huì)工作異常。如果驅(qū)動(dòng)CPU工作的時(shí)鐘周期是 2 納秒,CPU的主頻就是 500 MHz。現(xiàn)在的CPU流水線深度可以做到10級(jí)以上,流水線的每一級(jí)時(shí)間延遲可以做到皮秒級(jí)別,驅(qū)動(dòng)CPU工作的時(shí)鐘周期可以做到更短,因此可以把CPU的主頻飆到 5 GHz 以上。
我們把5級(jí)以上的流水線稱為超流水線結(jié)構(gòu)。高性能的處理器,為了提升CPU主頻,一般都會(huì)采用這種超流水線結(jié)構(gòu)。Intel的 i7 處理器有16級(jí)流水線,AMD的速龍64系列CPU流水線為20級(jí)。史上具有最長(zhǎng)流水線的是Intel的第三代奔騰四處理器,有31級(jí)的流水線。
想要提升CPU的主頻,根本在于減少流水線中每一級(jí)流水的執(zhí)行時(shí)間,消除木桶的短板效應(yīng),才能提升流水線的整體性能。解決方法有三個(gè):一是優(yōu)化流水線中各級(jí)流水線的性能,受限于當(dāng)前集成電路的設(shè)計(jì)水平,這一步最難;二是依靠集成電路的制造工藝,更先進(jìn)的納米工藝,芯片面積越小,發(fā)熱越小,更容易提升主頻;三是不斷地增加流水線,流水線越深,流水線的各級(jí)延遲就可以做得越小,更容易提高主頻。
流水線是否越深越好呢?非也。流水線的本質(zhì)是拿空間換時(shí)間,流水線越深,電路就會(huì)越復(fù)雜,需要更多的組合邏輯電路和寄存器,芯片面積也就越大,功耗也就隨之上升了。拿功耗增長(zhǎng)換來性能提升,在PC機(jī)和服務(wù)器上還行,但對(duì)于很多靠電池供電的移動(dòng)設(shè)備的處理器來說就無法接受了,CPU設(shè)計(jì)人員需要在性能和功耗之間做一個(gè)很好的平衡。
流水線越深,就越能提升性能嗎?也不一定。流水線是靠指令的并行來提升性能的,第一條指令還沒有執(zhí)行完,下面的第二條指令就開始取指、譯碼了。執(zhí)行的程序指令如果是順序結(jié)構(gòu),沒有中斷或跳轉(zhuǎn),流水線確實(shí)可以提高執(zhí)行效率。但是當(dāng)程序指令中存在跳轉(zhuǎn)、分支結(jié)構(gòu)時(shí),下面預(yù)取的指令可能就要全部丟掉了,需要到要跳轉(zhuǎn)的地方重新取指令執(zhí)行。
BEQ R1, R2, here
ADD R2, R1, R0
ADD R5, R4, R3
...
here:
SUB R2, R1, R0
SUB R5, R4, R3
...
流水線越深,一旦預(yù)取指令失敗,浪費(fèi)和損失就會(huì)越嚴(yán)重,因?yàn)榱魉€中預(yù)取的幾十條指令可能都要丟棄掉,流水線發(fā)生了停頓,無法按照預(yù)期繼續(xù)執(zhí)行,這種情況我們一般稱之為流水線冒險(xiǎn)(hazard)。在現(xiàn)在很多超流水線處理器中,為了避免這種情況出現(xiàn),會(huì)采取各種各樣的方法去避免這種情況,以免影響處理器的性能。–本文摘自《嵌入式C語言自我修養(yǎng)》e的標(biāo)簽處取SUB指令,流水線才能接著繼續(xù)執(zhí)行。
流水線越深,一旦預(yù)取指令失敗,浪費(fèi)和損失就會(huì)越嚴(yán)重,因?yàn)榱魉€中預(yù)取的幾十條指令可能都要丟棄掉,流水線發(fā)生了停頓,無法按照預(yù)期繼續(xù)執(zhí)行,這種情況我們一般稱之為流水線冒險(xiǎn)(hazard)。在現(xiàn)在很多超流水線處理器中,為了避免這種情況出現(xiàn),會(huì)采取各種各樣的方法去避免這種情況發(fā)生,以免影響處理器的性能。–本文摘自《嵌入式C語言自我修養(yǎng)》
總結(jié)
以上是生活随笔為你收集整理的cpu流水线工作原理_嵌入式工作原理(处理器天梯图)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DengAI —数据预处理
- 下一篇: 贴片电阻基本知识_贴片电阻怎么测试