上海 做網(wǎng)站線下推廣方法有哪些
1. 前言
????????在ARM當前所有的總線產(chǎn)品里,根據(jù)拓撲的不同可以分為三類產(chǎn)品:NIC/CCI系列是交叉矩陣的(Crossbar),CCN系列是基于環(huán)狀總線的(Ring),NoC系列是網(wǎng)狀總線(Mesh)。他們各有特點,適合不同場景。一般手機芯片上使用交叉矩陣,網(wǎng)絡(luò)處理器和服務器上使用環(huán)狀網(wǎng)絡(luò),而網(wǎng)狀拓撲也被大量應用于手機芯片。
????????交叉矩陣連接的主從設(shè)備數(shù)量受到限制,但是效率最高,讀寫請求可以在1到2個周期內(nèi)就直達從設(shè)備。如下圖所示,這就是一個5x4的交叉矩陣:
????????在28納米制程上,5x4的配置下,這個總線的頻率可以跑到300Mhz。如果進一步增加主從對數(shù)量,那么由于扇出增加,電容和走線增加,就必須通過插入更多的寄存器來增加頻率。但這樣一來,從主到從的延遲就會相應增加。要想進一步提高到頻率,要么使用更好的工藝,要么插入寄存器,這樣,讀寫延時就會增加。要知道處理器訪問二級緩存的延遲通常也不過10多個處理器周期。所以,要達到更高的頻率,支持更多的主從設(shè)備,就需要引入環(huán)狀總線CCN系列,如下圖:
????????CCN總線上的每一個節(jié)點,除了可以和相鄰的兩個節(jié)點通訊之外,還可以附加兩個節(jié)點組件,比如處理器組,三級緩存,內(nèi)存控制器等。在節(jié)點內(nèi)部,還是交叉的,而在節(jié)點之間,是環(huán)狀的。這樣使得總線頻率在某種程度上擺脫了連接設(shè)備數(shù)量的限制(當然,還是受布線等因素的影響)。當然,代價就是節(jié)點間通訊更大的平均延遲。為了減少平均延遲,可以把經(jīng)常互相訪問的節(jié)點放在靠近的位置。
????????在有些系統(tǒng)里,要求連接更多的設(shè)備,并且,頻率要求更高。此時環(huán)狀總線也不夠用了。這時就需要NoC出馬了,如下圖:
????????這個圖中,剛才提到的交叉矩陣,可以作為整個網(wǎng)絡(luò)的某部分。而連接整個系統(tǒng)的,是位于NoC內(nèi)的節(jié)點。每個節(jié)點都是一個小型路由,它們之間傳輸?shù)?#xff0c;是異步的包。這樣,就不必維持路由和路由之間很大數(shù)量的連線,從而提高頻率,也能支持更多的設(shè)備。當然,壞處就是更長的延遲。并且它所連接每個子模塊之間,頻率和拓撲結(jié)構(gòu)可以是不同的??梢园研枰o密聯(lián)系的設(shè)備,比如CPU簇,GPU放在一個子網(wǎng)下減少通訊延遲。
1.1 NIC/NOC/CCI的簡單比較
? ? ? ? NIC crossbar 結(jié)構(gòu),特點是全互聯(lián)switch,容量高,latency低,并發(fā)性好。缺點是可擴展性差,適用于輸入輸出數(shù)目比較小的情況。
? ? ? ? NOC是類似路由的一種結(jié)構(gòu),特點是可擴展性好,缺點是并行性差,結(jié)構(gòu)復雜,需要路由協(xié)議。適用于連接非常多個處理單元的情況。 ?
? ? ? ? NIU準確的定義應該是BIU,也就 bus interface unit.用于連接網(wǎng)絡(luò)節(jié)點和處理單元, NIU/BIU不是必須的,如果兩種協(xié)議一致,就不需要這個了。
? ? ? ? CCI是保證多核處理單元之間cache 內(nèi)容一致性的互聯(lián)結(jié)構(gòu)。
2. 硬件一致性
2.1 CCI? ? ? ??
????????ARM引入了幾個支持硬件一致性的總線,下圖是第一代方案CCI400:
????????CCI400是怎么做到硬件一致性的呢?簡單來說,就是處理器組C1,發(fā)一個包含地址信息的特殊讀寫的命令到總線,然后總線把這個命令轉(zhuǎn)給另一個處理器組C2。C2收到請求后,根據(jù)地址逐步查找二級和一級緩存,如果發(fā)現(xiàn)自己也有,那么就返回數(shù)據(jù)或者做相應的緩存一致性操作,這個過程稱作snooping(監(jiān)聽)。在這個過程中,C2中的處理器核心并不參與,所有的工作由緩存和總線接口單元BIU等部件來做。為了符合從設(shè)備不主動發(fā)起請求的定義,需要兩組主從設(shè)備,每個處理器組占一個主和一個從。這樣就可以使得兩組處理器互相保持一致性。而有些設(shè)備如DMA控制器,它本身不包含緩存,也不需要被別人監(jiān)聽,所以它只包含從設(shè)備,如上圖桔黃色的部分。在ARM的定義中,具有雙向功能的接口被稱作ACE,只能監(jiān)聽別人的稱作ACE-Lite。它們除了具有AXI的讀寫通道外,還多了個監(jiān)聽通道,如下圖:
????????多出來的監(jiān)聽通道,同樣也有地址(從到主),回應(主到從)和數(shù)據(jù)(主到從)。每組信號內(nèi)都包含和AXI一樣的標志符,用來支持多OT。如果在主設(shè)備找到數(shù)據(jù)(稱為命中),那么數(shù)據(jù)通道會被使用,如果沒有,那告知從設(shè)備未命中就可以了,不需要傳數(shù)據(jù)。由此,對于上文的DMA控制器,它永遠不可能傳數(shù)據(jù)給別人,所以不需要數(shù)據(jù)組,這也就是ACE和ACE-Lite的主要區(qū)別。
????????我們還可以看到,在讀通道上有個額外的線RACK,它的用途是,當從設(shè)備發(fā)送讀操作中的數(shù)據(jù)給主,它并不知道何時主能收到這個數(shù)據(jù),因為我們說過插入寄存器會導致總線延遲變長。萬一這個時候,對同樣的地址A,它需要發(fā)送新的監(jiān)聽請求給主,就會產(chǎn)生一個問題:主是不是已經(jīng)收到前面發(fā)出的地址A的數(shù)據(jù)了呢?如果沒收到,那它可能會告知監(jiān)聽未命中。但實際上地址A的數(shù)據(jù)已經(jīng)發(fā)給主了,它該返回命中。加了這個RACK后,從設(shè)備在收到主給的確認RACK之前,不會發(fā)送新的監(jiān)聽請求給主,從而避免了上述問題。寫通道上的WACK同樣如此。
? ? ? ? 問題:給定一個地址,并不知道它是不是在其他處理器的緩存內(nèi),所以無論如何都需要額外的監(jiān)聽動作。當未命中的時候,這個監(jiān)聽動作就是多余的,這個多余的動作就意味著額外的延遲。
????????CCI總線的設(shè)計者們還使用了一個新的方法來提高性能。他們在總線里加入一個監(jiān)聽過濾器(Snoop Filter)。這其實也是一塊緩存(TAG RAM),把它所有處理器組內(nèi)部一級二級緩存的狀態(tài)信息都放在里面。這樣做的好處就是,監(jiān)聽請求不必發(fā)到各組處理器,在總線內(nèi)部就可以完成,功耗也優(yōu)于訪問內(nèi)存。它的代價是增加了一點緩存(一二級緩存的10%左右)。以上的想法在CCI500中實現(xiàn),示意圖如下:
3. 壁壘指令
????????和一致性相關(guān)的是訪存次序和鎖。假設(shè)我們有兩個核C0和C1。當C0和C1分別訪問同一地址A0,無論何時,都要保證看到的數(shù)據(jù)一致,這是一致性。然后在C0里面,它需要保證先后訪問地址A0和A1,這稱作訪問次序,不需要鎖,只需要壁壘指令。如果C0和C1上同時運行兩個線程,當C0和C1分別訪問同一地址A0,并且需要保證C0和C1按照先后次序訪問A0,這就需要鎖。所以,單單壁壘指令只能保證單核單線程的次序,多核多線程的次序需要鎖。而一致性保證了在做鎖操作時,同一變量在緩存或者內(nèi)存的不同拷貝,都是一致的。
????????ARM的壁壘指令分為強壁壘DSB和弱壁壘DMB。強壁壘要求上一條讀寫指令完成后才能開始下一個請求,弱壁壘則只要求上一條讀寫指令發(fā)出請求后就可以繼續(xù)下一條讀寫指令的請求,且只能保證,它之后的讀寫指令完成時,它之前的讀寫指令肯定已經(jīng)完成了。顯然,后一種情況性能更高,OT>1。但測試表明,多個處理器組的情況下,壁壘指令如果傳輸?shù)娇偩€,只能令整體系統(tǒng)性能降低,因此在新的ARM總線中是不支持壁壘的,必須在芯片設(shè)計階段,通過配置選項告訴處理器自己處理壁壘指令,不要送到總線。但這并不影響程序中的壁壘指令,處理器會在總線之前把它過濾掉。
????????如果只需要保證讀寫次序,用弱壁壘;如果需要某個讀寫指令完成才能做別的事情,用強壁壘。以上都是針對普通內(nèi)存類型。當我們把類型設(shè)成設(shè)備時,自動保證強壁壘。
3.1 CCI
? ? ? ? 在CCI總線中,首先,壁壘和讀寫一樣,也是使用讀寫通道的,只不過它地址總是0,且沒有數(shù)據(jù)。標志符也是有的,此外還有額外的2根線BAR0/1,表明本次傳輸是不是壁壘,是哪種壁壘。他是怎么傳輸?shù)哪?#xff1f;
3.1.1 弱壁壘
????????先看弱壁壘,如下圖:
????????Master0寫了一個數(shù)據(jù)data,然后又發(fā)了弱壁壘請求。CCI和主設(shè)備接口的地方,一旦收到壁壘請求,立刻做兩件事,第一,給Master0發(fā)送壁壘響應;第二,把壁壘請求發(fā)到和從設(shè)備Slave0/1的接口。Slave1接口很快給了壁壘響應,因為它那里沒有任何未完成傳輸。而Slave0接口不能給壁壘響應,因為data還沒發(fā)到從設(shè)備,在這條路徑上的壁壘請求必須等待,并且不能和data的寫請求交換次序。這并不能阻撓Master0發(fā)出第二個數(shù)據(jù),因為它已經(jīng)收到它的所有下級(Master0接口)的壁壘回應,所以它又寫出了flag。
????????此時,flag在Master0接口中等待它的所有下一級接口的壁壘響應。而data達到了Slave0后,壁壘響應走到了Master0接口,flag繼續(xù)往下走。此時,我們不必擔心data沒有到slave0,因為那之前,來自Slave0接口的壁壘響應不會被送到Master0接口。這樣,就做到了弱壁壘的次序保證,并且在壁壘指令完成前,flag的請求就可以被送出來。
3.1.2 強壁壘
????????對于強壁壘指令來說,僅僅有一個區(qū)別,就是Master0接口在收到所有下一級接口的壁壘響應前,它不會發(fā)送自身的壁壘響應給Master0。這就造成flag發(fā)不出來,直到壁壘指令完成。如下圖:
????????這樣,就保證了強壁壘完成后,下一條讀寫指令才能發(fā)出請求。此時,強壁壘前的讀寫指令肯定是完成了的。
3.2 鎖和原子操作
????????壁壘只是針對單核。在多核多線程時,哪怕使用了壁壘指令,也沒法保證讀寫的原子性。解決辦法有兩個,一個是軟件鎖,一個是原子操作。原子操作有兩種,一種是總線收到請求時,直接封掉整個總線,同時只有一個核能訪問。這樣效率很低。還有個方法是把鎖的請求發(fā)送到對端設(shè)備,比如內(nèi)存控制器,讓他禁止別的核的訪問,而總線依然可以運行,這樣效率就高不少。
3.2.1 自旋鎖
????????軟件鎖中有個自旋鎖,能用一個ARM硬件機制exclusive access來實現(xiàn)。當使用特殊指令對一個地址寫入值,相應緩存行上會做一個特殊標記,表示還沒有別的核去寫這行緩存。然后下條指令讀這個行,如果標記沒變,說明寫和讀之間沒有人打擾,那么就拿到鎖了。如果變了,那么回到寫的過程重新獲取鎖。由于緩存一致性,這個鎖變量可以被多個核與線程使用。當然,過程中還是需要壁壘指令來保證次序。
4. NIC-400
????????CoreLink NIC-400網(wǎng)絡(luò)互連是高度可配置的,能夠創(chuàng)建一個完整的高性能,優(yōu)化和amba兼容的網(wǎng)絡(luò)基礎(chǔ)設(shè)施。CoreLink NIC-400網(wǎng)絡(luò)互聯(lián)有多種配置。它們的范圍可以從單個橋接組件,例如AHB到AXI協(xié)議轉(zhuǎn)換橋接,到一個復雜的互連,包括多達128個主和64個從AMBA協(xié)議。????????
????????NIC是crossBar結(jié)構(gòu)的總線互聯(lián),一般用在主從設(shè)備較少的情況下,這種情況下NIC的效率很高,在1到2個時鐘周期數(shù)據(jù)就能到達從設(shè)備。所以??吹絅IC被用在子系統(tǒng)內(nèi)部互聯(lián)多個apb的slave。NIC是只支持amba的協(xié)議,不像NOC需要專門的路由協(xié)議。ARM總線產(chǎn)品還有CCI(CrossBar),CCN(Ring),NOC(Mesh)三類。
5. NOC
????????NOC解決方案的目標針對采用異步設(shè)計方法(即在一塊芯片上采用多個時鐘及數(shù)百個IP塊)的設(shè)計。鑒于此,Arteris公司開發(fā)出專用的片上以及基于分組的NTTP(NOC處理與傳輸協(xié)議)。而由網(wǎng)絡(luò)接口單元 (NIU)、數(shù)據(jù)包傳輸單元及物理鏈路組成的Danube庫,則包含用于執(zhí)行這種協(xié)議的必要元素。
5.1?NOC協(xié)議和簡單結(jié)構(gòu)
R:Router,NOC內(nèi)部重要節(jié)點,用于路由和流量控制,有的地方叫做SWITCH。
NI:Network InterFace
NIU:是NI與AMBA接口的轉(zhuǎn)換和異步處理【異步處理可以在NIU、LINK和switch做】
LINK:連接NIU、Router/SWITCH的物理線路,上面可以有pipe和async組件
NTTP:NoC Transaction and Transport Protocol,NOC傳輸和處理協(xié)議
????????NOC采用基于數(shù)據(jù)包的傳輸和處理協(xié)議。為了完成傳輸和處理,NTTP包含了很多子協(xié)議:
1.路由協(xié)議:確定數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸路徑,使數(shù)據(jù)包可以從源節(jié)點到目標節(jié)點進行路由。常見的路由算法有Dijkstra算法、Floyd算法、最短路徑算法等。
2.擁塞控制協(xié)議:當網(wǎng)絡(luò)中的某些部分過載時,擁塞控制協(xié)議將采取措施防止網(wǎng)絡(luò)擁塞,以確保數(shù)據(jù)包的可靠傳輸。常見的擁塞控制算法有流控制、擁塞避免、擁塞檢測等。
3.流量控制協(xié)議:在NoC中,流量控制協(xié)議用于控制不同節(jié)點之間的數(shù)據(jù)傳輸速率,以避免網(wǎng)絡(luò)擁塞和數(shù)據(jù)丟失。流量控制協(xié)議通常使用緩沖區(qū)來存儲數(shù)據(jù)包,并在必要時限制傳輸速率。
4.錯誤控制協(xié)議:錯誤控制協(xié)議用于檢測和糾正網(wǎng)絡(luò)中發(fā)生的錯誤,以確保數(shù)據(jù)的可靠傳輸。常見的錯誤控制協(xié)議有檢驗和、循環(huán)冗余檢測等。
5.安全協(xié)議:安全協(xié)議用于保護NoC中傳輸?shù)臄?shù)據(jù)和信息的安全性,防止網(wǎng)絡(luò)攻擊和數(shù)據(jù)泄露。安全協(xié)議通常使用加密和解密技術(shù)來確保數(shù)據(jù)的機密性和完整性。
????????所以說NOC在流控,QOS和security及功能安全都做的很好,這些是NIC所沒有的。
6. 互聯(lián)結(jié)構(gòu)
6.1?共享總線 即 BUS結(jié)構(gòu)
????????Bus是最簡單的互聯(lián),適合small system,當connected nodes太多時,若多個node同時通信,很容易產(chǎn)生contention,bandwidth 太小。所以Bus只適合小系統(tǒng),一般十個以下的互聯(lián)設(shè)備。
6.2?CrossBar
????????crossbar也是一種常用互聯(lián)機制,每個node能與其他node直接互聯(lián),所以low latency and high throughput.,但 not scalable(可擴展性差)。所以Crossbar適合不太大的系統(tǒng),一般用于幾個到十幾個connected nodes 的系統(tǒng)。