<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          硬件影響軟件,軟件又如何利用硬件~

          共 4119字,需瀏覽 9分鐘

           ·

          2024-06-24 08:08


          曾經(jīng)遇到一個(gè)問(wèn)題,兩個(gè)芯片,同樣的Cortex-A53,同樣的總線,同樣的頻率,同樣的緩存和內(nèi)存大小,跑同樣的內(nèi)存測(cè)試,性能差了40%。而經(jīng)過(guò)優(yōu)化之后,反超了20%。想搞清楚為什么,就需要知道,訪存路徑上有哪些影響因素?系統(tǒng)瓶頸可能有哪些地方?性能優(yōu)化可以怎么做?等等。最近,這些問(wèn)題終于有了答案,我把它們寫下來(lái),給我自己一個(gè)總結(jié),也給有同樣困惑的人一個(gè)解釋。

          文章會(huì)很長(zhǎng),我想從CPU怎樣訪問(wèn)內(nèi)存這樣一個(gè)既簡(jiǎn)單也復(fù)雜的問(wèn)題入手,自問(wèn)自答,并逐步引入更多的疑問(wèn)和答案,最終把訪存通路上每一個(gè)環(huán)節(jié)的硬件結(jié)構(gòu),特征,性能分析以及未來(lái)的發(fā)展趨勢(shì)都加進(jìn)去。很多概念,像緩存,同步,一致性,壁壘,鎖等,并不復(fù)雜,可是他們是怎么在ARM SoC中實(shí)現(xiàn)的,效率又如何,我覺得還是有必要搞清楚。最后,我會(huì)重新分析文章開頭的問(wèn)題。這些知識(shí)并不是在重復(fù)一個(gè)處理器或者SoC的結(jié)構(gòu),而是分析硬件會(huì)怎樣影響軟件,軟件如何利用硬件。并且,我是程序員,從來(lái)沒有做過(guò)芯片設(shè)計(jì),所有的知識(shí)都是從程序員的角度出發(fā)的,所以軟件工程師們應(yīng)該能看懂。

          在開始之前,先說(shuō)些輕松的話題。

          芯片廠商向客戶介紹產(chǎn)品,從硬件角度說(shuō)的最多的就是功能,性能,功耗和價(jià)格。功能這個(gè)主要就是看芯片提供了什么接口,比如閃存,內(nèi)存,PCIe,USB,SATA,以太網(wǎng)等,還看內(nèi)部有什么運(yùn)算模塊,比如浮點(diǎn)器件,解碼器,加解密,圖形加速器,網(wǎng)絡(luò)加速器等等。性能,對(duì)CPU來(lái)說(shuō)就是的測(cè)試程序能跑多少分,比如Dhrystone,Coremark,SPEC2000/2006等等。針對(duì)不同的應(yīng)用,比如手機(jī),還會(huì)看圖形處理器的跑分;又比如網(wǎng)絡(luò),還會(huì)看包轉(zhuǎn)發(fā)率。當(dāng)然,客戶還會(huì)跑自己的一些典型應(yīng)用程序,來(lái)得到更準(zhǔn)確的性能評(píng)估。功耗就是在跑某個(gè)程序的時(shí)候,整個(gè)芯片的功率是多少瓦。通常,這時(shí)候處理器會(huì)跑在最高頻率,但這并不意味著所有的晶體管都在工作,由于power gating和clock gating的存在,那些沒有被用到的邏輯和片上內(nèi)存塊并沒在完全耗電。我看到的芯片公司給出的處理器最大功耗,通常都是在跑Dhrystone。這個(gè)程序有個(gè)特點(diǎn),它只在一級(jí)緩存之上運(yùn)行,不會(huì)訪問(wèn)二級(jí)緩存,不會(huì)訪問(wèn)內(nèi)存。這樣得出的其實(shí)并不是真正的最大功耗。但是從實(shí)際經(jīng)驗(yàn)看,沒有應(yīng)用程序能讓CPU消耗更高的能量,所以這么測(cè)量最大功耗也沒什么錯(cuò)。當(dāng)然,作為整體的芯片功耗,還得包括各種加速器和接口,尤其是會(huì)被用到的模塊。

          芯片公司宣傳產(chǎn)品的時(shí)候,會(huì)有各種各樣的玄機(jī)在里面,任何一家都會(huì)把好看的數(shù)據(jù)放上來(lái)。這些數(shù)據(jù)大都是真實(shí)的,可是怎么擺這些數(shù)據(jù)是一門技術(shù)活,擺的好能誤導(dǎo)不少觀眾,而x86,ARM,MIPS,PowerPC, ARC陣營(yíng)的各家產(chǎn)品經(jīng)理和市場(chǎng)人員都是這方面的好手。我會(huì)在深入介紹之后專門列一章說(shuō)這些竅門。

          在設(shè)計(jì)SoC的時(shí)候,性能,功耗和價(jià)格就轉(zhuǎn)換成了PPA。啥是PPA?其實(shí)就是性能,功耗和面積。

          其中,性能有兩層含義。在前端設(shè)計(jì)上,它指的是每赫茲能夠跑多少標(biāo)準(zhǔn)測(cè)試程序分。設(shè)計(jì)處理器的時(shí)候,會(huì)有個(gè)多少級(jí)流水線的說(shuō)法。通常來(lái)說(shuō),流水線級(jí)數(shù)越多,芯片能跑到的最高頻率越高,這個(gè)大家應(yīng)該都知道??墒遣⒉皇穷l率越高,性能就越高。這和處理器構(gòu)架有很大關(guān)系。典型的反例就是Intel的奔騰4,30多級(jí)流水,最高頻率高達(dá)3G赫茲,可是由于流水線太長(zhǎng),一旦指令預(yù)測(cè)錯(cuò)誤,重新抓取的指令要重走這幾十級(jí)流水線,代價(jià)是很大的。而它的指令預(yù)測(cè)又極大依賴于編譯器來(lái)優(yōu)化,結(jié)果當(dāng)時(shí)編譯器又沒跟上,導(dǎo)致它總體性能低下。你看MIPS或者PowerPC的處理器頻率都不高,但是每赫茲性能相對(duì)來(lái)說(shuō)還不錯(cuò),總體性能就會(huì)提高一些。所以看性能要看總體跑分,而不是每赫茲跑分。前一段時(shí)間龍芯在宣傳的時(shí)候就鉆了這個(gè)空子,號(hào)稱每赫茲都趕上至強(qiáng)了,但是也就能跑個(gè)1Ghz多,而16核至強(qiáng)可以到將近3Ghz。

          性能的另外一個(gè)含義就是指頻率,這是從后端設(shè)計(jì)角度來(lái)說(shuō)的。通常后端的人并不關(guān)心每赫茲能達(dá)到多少跑分,他們只看芯片能跑到多少頻率。頻率越高,在每赫茲跑分一定的情況下,總體性能就越高。請(qǐng)注意對(duì)于那些跑在一級(jí)緩存的程序,處理器每赫茲跑分不會(huì)隨著頻率的變化而變化。當(dāng)然如果考慮到多級(jí)緩存,總線和外圍接口,那肯定就不是隨頻率線性增加了。系統(tǒng)級(jí)的性能問(wèn)題,我會(huì)在以后慢慢展開。

          那哪些因素會(huì)影響頻率?就算只從后端角度考慮,答案也很多。我并不是做后端和制程的,只能把道聽途說(shuō)的寫下來(lái),僅供參考。

          首先,受工藝的影響?,F(xiàn)在先進(jìn)的半導(dǎo)體工廠就那么幾家,Intel,臺(tái)積電,三星,聯(lián)電,格羅方德。拿臺(tái)積電來(lái)說(shuō),它目前提供16納米的工藝,其中還分了很多小結(jié)點(diǎn),比如FFLL++和FFC。每個(gè)小節(jié)點(diǎn)各有特點(diǎn),有些能跑到更高頻率,有些功耗低,有些成本低。在不同的工藝上,芯片能跑的最高頻率不同,功耗和面積也不同。

          其次,受后端庫(kù)的影響。臺(tái)積電會(huì)把工藝中晶體管的參數(shù)抽象出來(lái),做成一個(gè)物理層開發(fā)包PDK,提供給eda工具廠商,IP廠商和芯片廠商。而這些廠商的后端工程師,就會(huì)拿著這個(gè)物理層開發(fā)包,做自己的物理庫(kù)。物理庫(kù)一般包含邏輯和memory兩大塊。根據(jù)晶體管的channel length,會(huì)有不同特性,適合于不同的用途的單元cell。而怎么把這些不同特性的庫(kù)里的cell,合理的用到不同的前端設(shè)計(jì)模塊,就是一門大學(xué)問(wèn)。一般來(lái)說(shuō),channel length越短,電子漂移距離越短,能跑的頻率就越高。可是,頻率越高,功耗就越大,并且是指數(shù)上升。除了cell之外,還會(huì)有9T/12T這種說(shuō)法,這里的T是Track,就是cell的高度。T越大,電流越大,越容易做到高頻,相應(yīng)的面積也越大。

          接下來(lái),受布局和布線的影響。芯片里面和主板一樣,也是需要布線的。每一層都有個(gè)利用率的說(shuō)法,總體面積越小,利用率越高,可是布線就越困難。在給出一些初始和限制條件后,EDA軟件會(huì)自己去不停的計(jì)算,最后給出一個(gè)可行的頻率和面積。

          再次,受前后端協(xié)同設(shè)計(jì)的影響。比如,某個(gè)訪問(wèn)memory的操作,如果知道處理器會(huì)花多少時(shí)間,用哪些資源,就可以讓memory的空閑塊關(guān)閉,從而達(dá)到省電的目的。這種技巧可能有上千處,不自己設(shè)計(jì)處理器是沒法知道的,哪怕你有RTL代碼。

          再往上,就是動(dòng)態(tài)電壓頻率縮放DVFS。這里需要引入功耗的組成概念。芯片功耗分成動(dòng)態(tài)和靜態(tài)兩部分,靜態(tài)就是晶體管漏電造成的,大小和芯片工藝,晶體管數(shù),電壓相關(guān),而動(dòng)態(tài)是開關(guān)切換造成的,所以和晶體管數(shù),頻率,電壓相關(guān)。具體公式我就不列出了,網(wǎng)上有??刂苿?dòng)態(tài)功耗的方法是clock gating,頻率變小,自然動(dòng)態(tài)功耗就小??刂旗o態(tài)功耗的方法是power gating,關(guān)掉電源,那么靜態(tài)和動(dòng)態(tài)功耗都沒了。還可以降低電壓,那么動(dòng)態(tài)功耗和靜態(tài)功耗自然都小。可是電壓不能無(wú)限降低,否則電子沒法漂移,晶體管就不工作了。并且,晶體管跑在不同的頻率,所需要的電壓是不一樣的,拿16nm來(lái)說(shuō),往下可以從0.9V變成0.72V,往上可以變成1V或者更高。別小看了這一點(diǎn)點(diǎn)的電壓變化,要知道,動(dòng)態(tài)功耗的變化,是和電壓成三次方關(guān)系的。1V和0.7V,電壓差了50%,動(dòng)態(tài)功耗可以差3.4倍。我看到過(guò)的數(shù)據(jù),在500Mhz以下,處理器的動(dòng)態(tài)功耗是小于靜態(tài)功耗的,變成3GHz的時(shí)候,遠(yuǎn)高于靜態(tài)功耗。

          再往上,就是軟件電源管理,控制功耗了。芯片設(shè)計(jì)者把每個(gè)大模塊的clock gating和power gating進(jìn)行組合,形成不同的休眠狀態(tài),軟件可以根據(jù)溫度和運(yùn)行的任務(wù),動(dòng)態(tài)的告訴處理器每個(gè)模塊進(jìn)入不同的休眠狀態(tài),從而在任務(wù)不忙的時(shí)候降低功耗。這又是一個(gè)很大的話題,以后再展開。

          從上面我們可以看到,功耗和性能其實(shí)是和在一起的。而芯片設(shè)計(jì)者可以用不同的工藝和物理庫(kù),設(shè)計(jì)出最高可運(yùn)行頻率,然后軟件控制芯片動(dòng)態(tài)運(yùn)行頻率和功耗。

          那面積呢?其實(shí)也是相輔相成的。由于針對(duì)不同的邏輯,memory和布線,選用了不同的物理庫(kù)cell,不同的track,形成的芯片面積也會(huì)不一樣。通常來(lái)說(shuō),越是需要跑高頻的芯片,所需的面積越大。頻率差一倍,面積可能有百分之幾十的差別??蓜e小看這百分之幾十,對(duì)晶體管來(lái)說(shuō),面積就是成本,晶圓的總面積一定,價(jià)錢一定,那單顆芯片的面積越小,成本越低,并且此時(shí)良率也越高。

          芯片成本除了制造費(fèi),還來(lái)自于授權(quán)費(fèi),工具費(fèi),流片費(fèi),運(yùn)營(yíng)開銷等,通常手機(jī)處理器這樣復(fù)雜的芯片,沒有上千萬(wàn)美元是不可能做出來(lái)的。就算做出來(lái),沒有賣掉幾百萬(wàn)片,那是肯定虧的。

          最后還想提下ARM的大小核設(shè)計(jì)。其最初的目的是想設(shè)計(jì)兩組核,小核每赫茲性能低,面積小,跑在低頻;大核每赫茲性能高,面積大,跑在高頻。運(yùn)行簡(jiǎn)單任務(wù),大核關(guān)閉,小核在低頻,動(dòng)態(tài)功耗低,靜態(tài)功耗占上風(fēng),并且由于面積小,總體功耗更低。而大核用高頻運(yùn)行復(fù)雜任務(wù)。和x86的單純調(diào)節(jié)電壓頻率比,增加了一點(diǎn)低頻小核面積,和整個(gè)芯片的面積比,其實(shí)沒多多少。

          那為什么不讓小核跑在高頻運(yùn)行復(fù)雜任務(wù)呢?理論上,由于每赫茲性能低,對(duì)于相同的任務(wù),小核必須跑在比大核更高的頻率才能完成,這就意味著更高的電壓。此時(shí),動(dòng)態(tài)功耗占上風(fēng),并且和電壓成三次方關(guān)系。最終的功耗會(huì)高出大核不少。此外,我們前面已經(jīng)解釋過(guò),小核要跑在高頻,面積會(huì)增大不少,可能比大核還要大。我們從里面可以看到存在一個(gè)平衡點(diǎn)。這個(gè)平衡點(diǎn)并不好找。拿A53/A57在28nm上舉例,當(dāng)它們跑在1.2Ghz的時(shí)候,功耗可能差兩倍,性能卻只差50%。而平衡點(diǎn)可能要達(dá)到2.5Ghz。事實(shí)上,很多手機(jī)芯片的大小核都是使用同樣的處理器,跑在不同高低頻率。

          所以,設(shè)計(jì)芯片很大程度上就是在平衡。影響因素,或者說(shuō)坑,來(lái)自于方方面面,IP提供商,工廠,市場(chǎng)定義,工程團(tuán)隊(duì)。水很深,坑很大,沒有完美的芯片,只有完美的平衡。

          明:本文轉(zhuǎn)自網(wǎng)絡(luò)

          版權(quán)歸原作者所有,進(jìn)作為學(xué)術(shù)討論與研究,如涉及作品版權(quán)問(wèn)題,請(qǐng)及時(shí)與我們聯(lián)系,謝謝!


          瀏覽 191
          1點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          1點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线观看艹艹色 | 无码人妻精品一区 | 精品无码一区二区三区四区久久久 | 嫩逼电影| 国产免费黄色视频 |