<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          HyperLink編程和性能考量

          作者: 時(shí)間:2014-01-14 來(lái)源:網(wǎng)絡(luò) 收藏

          摘要

          HyperLink 為兩個(gè)KeyStone 架構(gòu) 之間提供了一種高速,低延遲,引腳數(shù)量少的通信接口。HyperLink 的用戶手冊(cè)已經(jīng)詳細(xì)的對(duì)其進(jìn)行了描述。本文主要是為HyperLink 的編程提供了一些額外的補(bǔ)充信息。

          同時(shí)本文還討論了HyperLink 的性能,提供了在各種操作條件下的性能測(cè)試數(shù)據(jù)。對(duì)影響HyperLink 性能的一些參數(shù)進(jìn)行了討論。

          文章的最后附上對(duì)應(yīng)本文的應(yīng)用代碼。

          1、HyperLink 介紹

          HyperLink 為兩片 之間提供一種高速、低延遲,引腳數(shù)少的通信連接接口。

          HyperLink 的設(shè)計(jì)速度最高速率支持12.5Gbps,目前在大部分的KeyStone s 上, 由于受限于SerDes 和板級(jí)布線,速度接近為10Gbps 。HyperLink 是TI 專有的外設(shè)接口。相對(duì)于用于高速Serdes 接口的傳統(tǒng)的8b10b 編碼方式,HyperLink 減少了編碼冗余,編碼方式等效于8b9b。單片DSP 為HyperLink 提供4 個(gè)SerDes 通道,所以10Gbps 的HyperLink 理論吞吐率為10*4*(8/9)= 35.5Gbps= 4.44GB/s.

          HyperLink 使用了PCIE 類似的內(nèi)存映射機(jī)制,但它為多核DSP 提供了一些更靈活的特性。本文將會(huì)使用幾個(gè)范例來(lái)詳細(xì)解釋這一點(diǎn)。

          本文還討論了HyperLink 的性能,提供了在各種操作條件下的性能測(cè)試數(shù)據(jù)。對(duì)影響HyperLink 性能的一些因素進(jìn)行了討論。

          2、HyperLink 配置

          本節(jié)提供了一些配置HyperLink 模塊的補(bǔ)充信息。

          2.1 Serdes 配置

          Serdes 必須配置成期望的鏈接速度。圖1 表示了輸入?yún)⒖紩r(shí)鐘和輸出時(shí)鐘之間的關(guān)系。

          輸入?yún)⒖紩r(shí)鐘建議限制在156.25MHz ~312.5MHz 范圍內(nèi)。Serdes PLL 的倍頻系數(shù)必須合理配置生成的內(nèi)部時(shí)鐘(internal clock)限制在1.5625GHz ~ 3.125GHz 范圍內(nèi)。

          最后的鏈接速度由內(nèi)部時(shí)鐘(internal clock)驅(qū)動(dòng),通過(guò)link rate 配置來(lái)得到。

          2.2 HyperLink 存儲(chǔ)映射配置

          HyperLink 的存儲(chǔ)映射非常的靈活。HyperLink 的用戶手冊(cè)對(duì)此作了詳細(xì)的描述。本節(jié)將用兩個(gè)例子來(lái)詳細(xì)的解釋它。圖2 是第一個(gè)例子。

          圖2 通過(guò)HyperLink 窗口映射到遠(yuǎn)端不同類型的存儲(chǔ)空間

          在這個(gè)例子里面,DSP1 的存儲(chǔ)空間映射到了DSP0 的存儲(chǔ)空間窗口0x40000000~0x50000000DSP0 可以訪問(wèn)DSP1 的所有內(nèi)存空間,包括LL2,SL2,DDR,就像訪問(wèn)自己的本地的存儲(chǔ)空間一樣。在DSP0 上,所有的Master 都可以通過(guò)以0x40000000 起始的Outbound 窗口地址來(lái)訪問(wèn)DSP1 的存儲(chǔ)空間,但是不同master 事實(shí)上可能訪問(wèn)到DSP1 上不同的存儲(chǔ)空間。原因是HyperLink 發(fā)送側(cè)傳輸數(shù)據(jù)時(shí),會(huì)將PrivID 一起傳輸。接受側(cè)通過(guò)PrivID 值,可以建立不同的地址映射表

          對(duì)DSP0 與DSP1 的內(nèi)存映射關(guān)系總結(jié)在下表(表1)。

          通過(guò)上表的配置,可知

          當(dāng)DSP0 的core 0/1 訪問(wèn)0x40800000,它事實(shí)上訪問(wèn)了DSP1 上的LL2 地址空間。

          當(dāng)DSP0 的core0 訪問(wèn)0x4D000000,它事實(shí)上訪問(wèn)了DSP1 上DDR 的地址空間0x8C000000

          當(dāng)DSP0 的core1 訪問(wèn)0x4D000000 ,它事實(shí)上訪問(wèn)了DSP1 上DDR 的地址空間0x8F000000 與本文檔對(duì)應(yīng)的范例工程將HyperLink 配置成上述的內(nèi)存映射關(guān)系。下面是關(guān)鍵部分的配置代碼。

          對(duì)于一些簡(jiǎn)單的應(yīng)用,可能只是想訪問(wèn)遠(yuǎn)程DSP 的DDR 空間,那么下面的例子用于這種情況。存儲(chǔ)映射關(guān)系如下圖所示。

          圖3 通過(guò)HyperLink 窗口只映射到遠(yuǎn)端的DDR 空間

          這是最簡(jiǎn)單的例子,但是卻可以訪問(wèn)遠(yuǎn)端DSP 的大塊存儲(chǔ)空間。DSP0 上的每個(gè)master(core 或者其他外設(shè)) 都可以可以訪問(wèn)DSP1 上256MB DDR 空間。下表描述了core0 和core1 的對(duì)remote DSP DDR 存儲(chǔ)映射。

          3、HyperLink 性能考慮

          本節(jié)將讓設(shè)計(jì)者對(duì)HyperLink 訪問(wèn)遠(yuǎn)程存儲(chǔ)空間的性能評(píng)估有基本的認(rèn)識(shí)。同時(shí)提供了在不同的操作條件下獲得的性能測(cè)試數(shù)據(jù)。大部分測(cè)試是在最理想的測(cè)試條件進(jìn)行,以評(píng)估可以獲得的最大吞吐量。

          本文所描述的絕大部分性能數(shù)據(jù)是在C6670EVM 上獲得。C6670 EVM 上DDR 配置成64bit 位寬1333M,HyperLink 速率配置成10Gbit。

          一些影響HyperLink 訪問(wèn)性能的因素在本節(jié)中將會(huì)被討論到。

          3.1 通過(guò)HyperLink 實(shí)現(xiàn)存儲(chǔ)拷貝的性能

          下表(表3)描述了使用HyperLink 在LL2 與遠(yuǎn)程大塊線性存儲(chǔ)空間進(jìn)行數(shù)據(jù)傳送測(cè)試獲得的傳輸帶寬。傳輸塊的大小為64KB。帶寬的計(jì)算是通過(guò)計(jì)算傳輸總的字節(jié)數(shù)除以傳輸所用的時(shí)間獲得。

          上述數(shù)據(jù)展示了cache 能夠極大的改善DSP 內(nèi)核通過(guò)HyperLink 讀取數(shù)據(jù)的性能。

          但是L2 cache 卻遏制了通過(guò)HyperLink 寫(xiě)數(shù)據(jù)的性能,這是因?yàn)長(zhǎng)2 是write-allocate cache。對(duì)于使能L2cache 后的寫(xiě)操作,它總是會(huì)先從將要寫(xiě)入的存儲(chǔ)區(qū)讀取128 字節(jié)的數(shù)據(jù)到L2cache ,然后在L2 cache 中修改數(shù)據(jù),最后在cache 沖突的時(shí)候回寫(xiě)回到原先的存儲(chǔ)區(qū),或者人為的回寫(xiě)回原存儲(chǔ)區(qū)。

          上述EDMA 吞吐率數(shù)據(jù)是通過(guò)TC0 (傳輸控制器0)和CC0(通道控制器0)上測(cè)試得到,其他TCs的數(shù)據(jù)會(huì)比TC0 稍低。整個(gè)傳輸?shù)钠款i是在HyperLink,不是在EDMA 傳輸控制器上。

          上述測(cè)試結(jié)果表明通過(guò)HyperLink 進(jìn)行寫(xiě)操作的性能會(huì)比通過(guò)HyperLink 進(jìn)行讀操作的性能要好。

          遠(yuǎn)程DSP 存儲(chǔ)空間類型不會(huì)對(duì)帶寬造成明顯的影響。訪問(wèn)遠(yuǎn)程DSP 的SL2 會(huì)比LL2 快一些。

          目前,通過(guò)HyperLink 來(lái)訪問(wèn)遠(yuǎn)程DSP 存儲(chǔ)空間(相對(duì)其他接口)是具有最高的帶寬性能的,但是訪問(wèn)遠(yuǎn)程存儲(chǔ)空間比訪問(wèn)本地存儲(chǔ)空間還是要慢。下表對(duì)比了訪問(wèn)本地LL2 和DDR 與遠(yuǎn)程DDR 的吞吐性能。

          大體來(lái)說(shuō),對(duì)本地存儲(chǔ)空間的寫(xiě)入吞吐率是對(duì)遠(yuǎn)程空間進(jìn)行寫(xiě)入操作的吞吐率的3 倍。對(duì)遠(yuǎn)程空間的讀性能會(huì)更差些。我們應(yīng)該盡量避免遠(yuǎn)程讀取數(shù)據(jù)。

          3.2 DSP core 通過(guò)HyperLink 進(jìn)行遠(yuǎn)程訪問(wèn)的延遲

          DSP 核通過(guò)HyperLink 訪問(wèn)遠(yuǎn)程空間的性能高度依賴于cache。當(dāng)DSP 內(nèi)核通過(guò)HyperLink 來(lái)訪問(wèn)遠(yuǎn)程存儲(chǔ)空間的時(shí)候,一個(gè)TR(傳輸請(qǐng)求)可能會(huì)被生成并傳送給XMC(這取決于數(shù)據(jù)是否可以進(jìn)入cache 和被預(yù)取)。TR 將會(huì)是下面中的一種。

          . 一個(gè)單一的元素- 如果存儲(chǔ)空間不能被cache 和預(yù)存取。

          . 一個(gè)L1 cache line – 如果存儲(chǔ)空間可以進(jìn)入cache ,但是L2 cache 沒(méi)有被使能。

          . 一個(gè)L2 cache line -如果存儲(chǔ)空間可以進(jìn)入cache,同時(shí)L2 cache 被使能.

          . 如果存儲(chǔ)空間可以被預(yù)存取, 預(yù)存取將會(huì)被使能為一個(gè)預(yù)存取的buffer slot.

          如果L1/L2cache 或者預(yù)存取命中,Hyperlink 端口不會(huì)有數(shù)據(jù)傳輸

          遠(yuǎn)程空間數(shù)據(jù)可以被本地L1 cache/L2 cache 緩存,或者都沒(méi)有被cache。如果對(duì)應(yīng)存儲(chǔ)空間的MAR(Memory Attribute Register) 寄存器上的PC(Permit copy)位沒(méi)有被置位,那么對(duì)應(yīng)存儲(chǔ)區(qū)的數(shù)據(jù)將不會(huì)進(jìn)入cache。

          如果MAR 寄存器上PC 位被置位,同時(shí)L2 的cache 空間是0(L2 被全部配置成SRAM),那么外部存儲(chǔ)空間的數(shù)據(jù)可以進(jìn)入L1cache。

          如果MAR 寄存器上PC 位被置位,L2 的Cache 空間大于0.那么外部存儲(chǔ)空間的數(shù)據(jù)就可以進(jìn)入L1cache 和L2cache。

          讀取遠(yuǎn)程存儲(chǔ)空間數(shù)據(jù)也可以使用XMC 中的prefetch buffer。該特性可以在MAR 寄存器PFX(PreFetchable eXternally)被置位后使能。

          地址步進(jìn)長(zhǎng)度也會(huì)影響Cache 和Prefetch buffer 的使用效果。連續(xù)空間的訪問(wèn)可以最充分的利用cache 和prefetch buffer,從而達(dá)到更好的性能。

          以64bytes 距離或者更大間隔進(jìn)行步進(jìn)訪問(wèn)將會(huì)導(dǎo)致每次L1 cache 命中失敗(miss),這是因?yàn)長(zhǎng)1 cache line 的大小是64byte。

          以128bytes 距離或者更大間隔進(jìn)行步進(jìn)訪問(wèn)將會(huì)導(dǎo)致每次L2 cache 命中失敗(miss)。

          如果cache miss 發(fā)生,那么DSP 核就會(huì)被stall(等待數(shù)據(jù))。Stall 的時(shí)間長(zhǎng)度等于傳輸延遲、傳輸間隔,數(shù)據(jù)返回時(shí)間,cache 請(qǐng)求延遲的總和。

          下面的章節(jié)描述DSP 內(nèi)核通過(guò)HyperLink 訪問(wèn)存儲(chǔ)區(qū)的延遲。測(cè)試偽代碼如下列所示。

          下圖(圖4)為1GHz C6670EVM 上配置DDR 64bit 1333M 測(cè)試獲得的結(jié)果。通過(guò)HyperLink 實(shí)現(xiàn)512 次LDDW(load double word) 或者STDW( store double word)操作的性能測(cè)試。圖4 繪制了各種測(cè)試條件下的性能。LDB/STB 和LDW/STW 和LDDW/STDW 的指令周期數(shù)相同。雖然cache 和prefetch buffer 可以被獨(dú)立配置,但是測(cè)試的時(shí)候使用的配置是:如果cache 被使能,那么prefetch 也被使能,如果cache 沒(méi)有被使能,那么prefetch 也沒(méi)有被使能。

          Non-cachable 寫(xiě)是post 操作。所以它只會(huì)stall DSP core 很短的一段時(shí)間。

          但是read 是non-post 的,所以DSP 內(nèi)核會(huì)等待數(shù)據(jù)的到來(lái),所以它會(huì)stall DSP 內(nèi)核相對(duì)長(zhǎng)一點(diǎn)時(shí)間。

          當(dāng)cache 被使能后,DSP core 訪問(wèn)remote 空間的吞吐性能高度依賴于cache。

          地址的步進(jìn)間隔也會(huì)影響到cache 的使用。連續(xù)的地址訪問(wèn)可以充分的利用cache。但是地址的步進(jìn)間隔超過(guò)case line 的大小(L1 case line =64Byte,L2 Case line =128Byte)將會(huì)導(dǎo)致每次cache 都無(wú)法命中,從而制約了性能。所以,對(duì)連續(xù)地址空間的數(shù)據(jù)訪問(wèn)(像大塊數(shù)據(jù)拷貝),cache 需要被使能,在其他情況下cache 應(yīng)當(dāng)不要使能。

          通過(guò)上面的圖可以發(fā)現(xiàn)通過(guò)HyperLink 訪問(wèn)DDR,SL2,LL2 在性能上并沒(méi)有明顯的差異。所以,正常情況下,通過(guò)HyperLink 來(lái)共享DDR 是一個(gè)很好的選擇,因?yàn)镈DR 容量大,而且成本低。

          3.3 HyperLink 傳輸使用DMA 方式的開(kāi)銷(xiāo)(overhead)

          初始延遲被定義為EMDA 事件觸發(fā)到真實(shí)數(shù)據(jù)之間的傳輸開(kāi)始之間的延遲。因?yàn)槌跏佳舆t很難被測(cè)量。所以我們就測(cè)試傳輸?shù)拈_(kāi)銷(xiāo),它被定義為傳輸最小單元數(shù)據(jù)的延遲。延遲的大小取決于源和目標(biāo)端的類型。下表描述了使用EDMA 在1GHz TCI6618EVM 不同端口間傳輸一個(gè)字(word)時(shí),從EDMA 觸發(fā)(寫(xiě)ESR)到EDMA 傳輸結(jié)束(讀IPR=1)的平均指令數(shù)目。

          表6 中,讀Hyperlink 的延遲是853 個(gè)指令周期,寫(xiě)Hyperlink 的延遲是322 指令周期,因?yàn)閷?xiě)是post 操作,而讀是non-post 操作。所以從HyperLink 端口讀取數(shù)據(jù)的延遲要高于寫(xiě)入數(shù)據(jù)到HyperLink。

          對(duì)于小批量數(shù)據(jù)傳送,傳輸開(kāi)銷(xiāo)(overhead)是很大的顧慮,尤其是系統(tǒng)中隊(duì)列DMA 阻塞的時(shí)候。單一元素的傳送性能較差,延遲會(huì)占用大部分時(shí)間。所以,對(duì)于小批量數(shù)據(jù)傳送,必須對(duì)使用EMDA 方式還是DSP 核方式來(lái)訪問(wèn)數(shù)據(jù)進(jìn)行權(quán)衡。使用內(nèi)核來(lái)訪問(wèn)單個(gè)隨機(jī)數(shù)據(jù)的延遲會(huì)比DMA 方式延遲小很多。本文3.2 節(jié)已經(jīng)做了詳細(xì)的描述。

          3.4 HyperLink 中斷延遲

          一個(gè)DSP 可以通過(guò)HyperLink 來(lái)觸發(fā)另外一個(gè)DSP 的中斷。通過(guò)HyperLink 傳遞中斷的延遲通過(guò)下列的偽代碼獲得測(cè)量。

          測(cè)試是在Loopback 模式下測(cè)試。

          1GHz C6670 的測(cè)試結(jié)果是大概710 個(gè)DSP core cycles。

          4、范例工程

          本文的范例代碼在C6670EVM 上通過(guò)測(cè)試。EVM 板子上有兩個(gè)C6670 DSP,他們通過(guò)HyperLink 互聯(lián)。

          在這個(gè)例子中,DSP1 存儲(chǔ)空間通過(guò)HyperLink 被映射到了DSP0 上。DSP0 通過(guò)HyperLink 窗口訪問(wèn)DSP1 的存儲(chǔ)空間就像訪問(wèn)自己的本地空間一樣。這個(gè)工程范例也支持loopback 模式。在loopback 模式下,DSP0 事實(shí)上是通過(guò)自己的HyperLink 窗口訪問(wèn)了自己的本地地址空間。

          本例也演示了通過(guò)HyperLink 來(lái)實(shí)現(xiàn)中斷傳遞。

          工程代碼的目錄結(jié)構(gòu)如下圖所示。

          圖 7 工程代碼目錄樹(shù)

          該示例代碼同樣可以在其他KeyStone DSP EVM 板上運(yùn)行。只是如果板子上只有一個(gè)DSP 芯片,那么只能運(yùn)行l(wèi)oopback 模式。

          下表列出了KeyStone 工程的關(guān)鍵代碼列表。

          運(yùn)行這個(gè)范例工程的步驟:

          1. 連通CCS 與DSP EVM.

          2. 下載代碼到core 0 of DSP0.

          3. 下載代碼到core 0 of DSP1.

          4. 先運(yùn)行DSP1 , 然后運(yùn)行DSP0. (如果EVM 上只有一個(gè)DSP,且運(yùn)行在loopback 模式下,那么直接下載到DSP0,再運(yùn)行)

          5. 檢測(cè)每個(gè)DSP 的stdout 窗口,驗(yàn)證測(cè)試結(jié)果。

          典型的輸出信息如下:

          用戶可以在HyperLink_Test.c 中的HyperLink_config()函數(shù)中修改初始化值,然后重新編譯來(lái)驗(yàn)證在不同配置下的HyperLink 性能。

          這個(gè)例子是在CCS5.1 下編譯,使用pdk_c6618_1_0_0_5。如果在你的電腦上進(jìn)行重新編譯新的配置,你可能需要修改csl 包含路徑。

          參考資料

          1. KeyStone Architecture HyperLink User Guide (SPRUGW8)

          2. TMS320C6670 datasheet (SPRS689)



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();