《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 解決方案 > OpenEM簡(jiǎn)介和基于OpenEM的大矩陣乘實(shí)現(xiàn)

OpenEM簡(jiǎn)介和基于OpenEM的大矩陣乘實(shí)現(xiàn)

2013-12-26
作者:James Li---Multi-core DSP / FAE
關(guān)鍵詞: 軟件 OpenEM KeyStone

摘要

OpenEM 的全稱(chēng)是Open Event Machine。是TI 針對(duì)嵌入式應(yīng)用開(kāi)發(fā)的multicore runtime system library。OpenEM 可以在多核上有效的調(diào)度,分發(fā)任務(wù)。它把任務(wù)調(diào)度給負(fù)載輕的核,進(jìn)而實(shí)現(xiàn)動(dòng)態(tài)的負(fù)載平衡。OpenEM 是基于TI Keystone 系列芯片的multicore Navigator 構(gòu)建的,具有開(kāi)銷(xiāo)小,效率高的特點(diǎn)。本文首先對(duì)OpenEM 的原理做了簡(jiǎn)單的介紹。然后結(jié)合一個(gè)大矩陣乘的演示用例詳細(xì)介紹了OpenEM 的使用。最后通過(guò)量化分析這個(gè)演示用例的執(zhí)行cycle 數(shù),總結(jié)了OpenEM 的效率和局限。希望本文能成為學(xué)習(xí)OpenEM 的讀者的一個(gè)有用的參考。

1OpenEM 簡(jiǎn)介

OpenEM 的全稱(chēng)是Open Event Machine。它是TI 開(kāi)發(fā)的可應(yīng)用于Keystone 多核DSP 的multicore runtime system library。OpenEM 的目的是在多核上有效的調(diào)度,分發(fā)任務(wù),實(shí)現(xiàn)動(dòng)態(tài)的負(fù)載平衡。基于OpenEM,用戶(hù)可以很容易的把原來(lái)的單核應(yīng)用移植到Keystone 多核芯片。需要注意的是OpenEM 目前只能把任務(wù)調(diào)度分發(fā)到同一個(gè)DSP 的多個(gè)核上,不能跨DSP 調(diào)度分發(fā)。OpenEM不依賴(lài)于BIOS。它可以在芯片上裸跑,代碼精簡(jiǎn),效率高。而且,OpenEM不同于業(yè)界已經(jīng)有OpenMP 和OpenCL 等開(kāi)放式的multi-core runtime systems。它是針對(duì)嵌入式系統(tǒng)的設(shè)計(jì),更能滿足嵌入式設(shè)計(jì)的實(shí)時(shí)性要求。TI 的keystone 架構(gòu)多核芯片中有Multicore Navigator。它由Queue Manager(簡(jiǎn)稱(chēng)為QMSS)和一系列Packet DMA engine 構(gòu)成。OpenEM就是基于這套硬件系統(tǒng)構(gòu)建的。例如,OpenEM 的scheduler 是運(yùn)行在QMSS 的PDSP(QMSS內(nèi)部的RISC 處理器)上的。OpenEM的preload 功能是通過(guò)QMSS 的packet DMA 實(shí)現(xiàn)的。熟悉QMSS 的編程對(duì)學(xué)習(xí)OpenEM 很有幫助。OpenEM 是MCSDK 的一個(gè)組件。它還在不斷的發(fā)展改進(jìn)中。本文對(duì)OpenEM 的介紹以及演示用例都是基于BIOS MCSDK 2.01.02 的OpenEM 1.0.0.2。

1.1 OpenEM 軟件對(duì)象

下面通過(guò)列表和圖示介紹了OpenEM的主要軟件對(duì)象。表1 是OpenEM 的主要軟件對(duì)象的列表。

需要注意的是,本文介紹的OpenEM 的運(yùn)行模式是:Scheduler 運(yùn)行在PDSP,Dispatcher 是“run to completion ”模式。

圖1 是一個(gè)軟件對(duì)象關(guān)系圖,顯示出了表1 中列舉的軟件對(duì)象。定義了2 個(gè)queue group,5 個(gè)queue 和3 個(gè)execution object。Queue group1 的core mask 對(duì)應(yīng)核0 和1。所以來(lái)自queue1,2,3,4 的event 只能在核0 和核1 上執(zhí)行,因?yàn)檫@些queue 屬于queue group1。Queue group2 的core mask 對(duì)應(yīng)核2 和3。所以來(lái)自queue5 的event 只能在核2 和核3 上執(zhí)行,因?yàn)閝ueue5 屬于queue group2。execution object 1 和queue 1,2,3 映射關(guān)聯(lián)。execution object 2 和queue 4 映射關(guān)聯(lián)。execution object 3 和queue 5 映射關(guān)聯(lián)。圖中的藍(lán)線表示了event 的行徑,紅線表示command 的行徑。圖中的SD queue 是hardware queue,它不是一個(gè)軟件對(duì)象而是OpenEM內(nèi)部的組件。

1.2 OpenEM 的兩個(gè)重要概念

OpenEM中有兩個(gè)容易混淆的重要概念:prefetch 和preload。

• Prefetch 是指每個(gè)DSP 核向scheduler 發(fā)命令,告訴scheduler“本核已經(jīng)空閑了,可以分配新的工作給本核了”。只有收到一個(gè)核的prefetch 命令,scheduler 才會(huì)調(diào)度新的event 給這個(gè)核。如果DSP 核不發(fā)出prefetch 命令,它就不會(huì)被分派任務(wù)。這是OpenEM 的scheduler的基本調(diào)度原則。

• Preload 和event 的屬性有關(guān)。通常,event 的數(shù)據(jù)是位于DDR 的。如果DSP 核直接訪問(wèn)DDR 效率會(huì)比較低。所以,OpenEM 可以把event 的數(shù)據(jù)通過(guò)QMSS 的packet DMA 搬到DSP 核的local L2。這個(gè)搬移的過(guò)程就是preload。每個(gè)event 的數(shù)據(jù)是否做preload 是可配的。每個(gè)event 在創(chuàng)建的時(shí)候都可以指定一個(gè)preload 屬性。Event 的preload 屬性可以是:

– Preload disable, 即不做預(yù)搬移

– Preload up to sizeA,即做預(yù)搬移,但是最多只搬sizeA bytes

– Preload up to sizeB,即做預(yù)搬移,但是最多只搬sizeB bytes

– Preload up to sizeC,即做預(yù)搬移,但是最多只搬sizeC bytes

– 其中SizeA,SizeB 和SizeC 是常數(shù),在OpenEM 初始化的時(shí)候可以配置。

1.3 OpenEM 的常用API cycle 數(shù)

OpenEM的附帶開(kāi)銷(xiāo)是應(yīng)用最關(guān)注特性之一。所以我們實(shí)測(cè)了OpenEM 常用API 的cycle 數(shù)如表2。需要注意的是:由于OpenEM會(huì)負(fù)責(zé)cache 一致性的維護(hù),而有些API 的處理過(guò)程中含有cache 一致性的維護(hù)操作。所以這些API 的調(diào)用cycle 數(shù)很大程度上取決于它對(duì)多大的數(shù)據(jù)緩沖區(qū)做了cache 一致性的維護(hù)。本文測(cè)試這些cycle 的場(chǎng)景使用的數(shù)據(jù)緩沖區(qū)的大小是是4096 words(32bit)。

2基于OpenEM 的大矩陣乘實(shí)現(xiàn)

   

大矩陣相乘的目的是計(jì)算X*Y = Z  

矩陣X 是(100 ×2048 )的浮點(diǎn)實(shí)數(shù)矩陣。

矩陣Y 是(2048 ×2048 )的浮點(diǎn)實(shí)數(shù)矩陣。

矩陣Z 是(100 ×2048 )的浮點(diǎn)實(shí)數(shù)矩陣。

由于矩陣Y 的數(shù)據(jù)量很大,所以在多核DSP 上可以把它拆分成多個(gè)子塊,交給多個(gè)DSP 核并行計(jì)算。如圖2 所示。

2.1 基于OpenEM 的大矩陣乘方案設(shè)計(jì)

2.1.1 Memory 使用

Shannon DSP (6678)的內(nèi)存系統(tǒng)包括片內(nèi)的LL2(local L2)和SL2(shared L2)。加上片外的DDR。LL2 的size 是512 Kbytes,每個(gè)核有一份LL2。SL2 的size 是4Mbytes,8 個(gè)核共享SL2。DDR size 和硬件板卡設(shè)計(jì)有關(guān),一般在1G bytes 以上。C66x 核對(duì)LL2 的訪問(wèn)效率最高,對(duì)SL2 的訪問(wèn)效率稍差,對(duì)DDR 的訪問(wèn)效率最低。基于多種存儲(chǔ)區(qū)間的不同特性,我們對(duì)數(shù)據(jù)存儲(chǔ)位置按如下規(guī)劃(參見(jiàn)圖3):

– 矩陣X 的size 是800 Kbytes,存儲(chǔ)是shared L2

– 矩陣Y 的size 是16 Mbytes,存儲(chǔ)是DDR

– 矩陣Z 的size 是800 Kbytes,存儲(chǔ)是shared L2

雖然矩陣Y 存儲(chǔ)在DDR,但是我們啟用了OpenEM 的preload 功能。Preload 就是通過(guò)QMSS 的packet DMA 把待處理的event 數(shù)據(jù)(通常位于DDR)搬到被調(diào)度core 的LL2。所以DSP 核運(yùn)行的時(shí)候不直接從DDR 取數(shù)。這保證了DSP 核的數(shù)據(jù)訪問(wèn)效率。

2.1.2 處理流程

OpenEM中要有一個(gè)DSP 核作為主核,其他核就是從核,主核要完成的工作較多。本文的演示用例中,核0 是主核,核1~7 是從核。主從核的分工差異如圖4:

1. 初始化QMSS 和free pool。

2. OpenEM 的global 初始化和local 初始化。global 初始化是主核執(zhí)行。local 初始化是每個(gè)核各自執(zhí)行。Local 初始化要等global 初始化完成才能開(kāi)始。所以,中間需要加一個(gè)barrier。Barrier 可以理解成一個(gè)同步點(diǎn),所有DSP 核在這個(gè)點(diǎn)完成一次同步再繼續(xù)向下執(zhí)行。本演示用例的Barrier 是通過(guò)共享內(nèi)存的軟件信號(hào)量實(shí)現(xiàn)的。

3. 主核構(gòu)造生產(chǎn)者/消費(fèi)者場(chǎng)景并產(chǎn)生待處理的event。生產(chǎn)者在OpenEM 中不是一個(gè)軟件對(duì)象。我們可以把產(chǎn)生event 并發(fā)送到queue 的函數(shù)認(rèn)為是生產(chǎn)者。消費(fèi)者就是execution object,溝通生產(chǎn)者和消費(fèi)者的管道就是queue。構(gòu)造生產(chǎn)者/消費(fèi)者場(chǎng)景就是創(chuàng)建execution object 和queue 并且把它們關(guān)聯(lián)起來(lái)。

4. 主核和從核進(jìn)入event 處理的過(guò)程。

5. 主核檢測(cè)到所有event 都處理完成后為每個(gè)DSP 核(包括它自己)產(chǎn)一個(gè)exit job。

6. 主核和從核處理exit job。從核直接調(diào)用exit(0)退出。主核先做結(jié)果驗(yàn)證然后調(diào)用exit(0)退出。

本文演示用例實(shí)現(xiàn)的幾個(gè)特點(diǎn)是:

• OpenEM 的free pool 是由用戶(hù)初始化的。在初始化free pool 的時(shí)候event 描述符不指向數(shù)據(jù)緩沖區(qū)。等分配了一個(gè)event 的時(shí)候再在這個(gè)event 對(duì)應(yīng)的描述符上掛數(shù)據(jù)緩沖區(qū)。這樣可以避免不必要的數(shù)據(jù)拷貝(從global buffer 拷貝到event buffer)。

• 主核通過(guò)查詢(xún)free pool 中的event 個(gè)數(shù)是否恢復(fù)回初始值來(lái)判斷是否所有“矩陣乘event”都處理。因?yàn)椋?/p>

 

– Free pool 在初始化以后有N 個(gè)free event,

– 從中分配了若干個(gè)event 后,free event 就減少了相應(yīng)的個(gè)數(shù),

– 每個(gè)core 每處理完一個(gè)event 就把這個(gè)event 回收到free pool,free pool 的event 個(gè)數(shù)就加一。當(dāng)free pool 的event 個(gè)數(shù)恢復(fù)回N,就說(shuō)明所有event 都處理完了。

2.2 基于OpenEM 的大矩陣乘實(shí)現(xiàn)

在初始化OpenEM之前首先要做multicore Navigator 的初始化。包括:PDSP firmware 的download,Link RAM 的初始化,Memory region 的初始化還有free pool (也就是free descriptorqueue)的初始化。這不屬于本文介紹的范疇,本文直接介紹OpenEM的初始化。

2.2.1 OpenEM Global 初始化

OpenEM的global 初始化通過(guò)調(diào)用API 函數(shù)ti_em_init_global()完成的。這個(gè)API 的入?yún)⑹窍旅嫠镜慕Y(jié)構(gòu)體。其中所列的參數(shù)是本文的演示用例使用的配置參數(shù)。本文針對(duì)每個(gè)參數(shù)的作用做了注釋。了解了參數(shù)了含義,就能了解OpenEM 的global 初始化的大致做了些什么。

注釋?zhuān)?/p>

1. OpenEM要使用hardware queue 資源。hw_queue_base_idx 用來(lái)指定OpenEM 從哪個(gè)hardware queue 開(kāi)始可用。

2. OpenEM 的少量操作需要多DSP 核訪問(wèn)共享的數(shù)據(jù)結(jié)構(gòu)。是通過(guò)hardware semaphore 實(shí)現(xiàn)多核lock/unclock 的。所以通過(guò)hw_sem_idx 告訴OpenEM該使用哪一個(gè)hardware semaphore。

3. 指定preload 使用的QMSS packet DMA 的通道的起始索引。QMSS packet DMA 有32 個(gè)RX/TX channel。在OpenEM 中,每個(gè)DSP core 要占用一個(gè)TX/RX channel。

4. 指定preload 使用的QMSS Tx queues 的起始索引。要和dma_idx 對(duì)應(yīng)起來(lái)。QMSS 有32 個(gè)TX queue,索引是800~831。對(duì)應(yīng)QMSS packet DMA 的TX channel 0~31。所以,如果前面配置的dma_idx 是0,那么這里配置的dma_queue_base_idx 應(yīng)該是800。

5. 指定OpenEM local free pool 對(duì)應(yīng)的free queue index。Local free pool 是和preload 相關(guān)的。local free pool 在物理上是一個(gè)free descriptor queue。里面存儲(chǔ)著2 個(gè)host 描述符。每個(gè)描述符對(duì)應(yīng)一個(gè)local L2 buffer。如果發(fā)生preload,packet DMA 就從free descriptor queue pop 描述符,然后把數(shù)據(jù)傳到描述符指向的local L2 buffer。每個(gè)DSP 核有一個(gè)local free pool。例如,在我們的演示用例中core0~7 對(duì)應(yīng)的free descriptor queue 索引是2050~2057。

6. 指定OpenEM global free pool 的個(gè)數(shù)。每個(gè)global free pool 包括4 個(gè)初始化參數(shù),例如{ globalFreePoolFdqIdx, TI_EM_COH_MODE_ON,TI_EM_BUF_MODE_GLOBAL_TIGHT,0}。參數(shù)1是這個(gè)global free pool 對(duì)應(yīng)的free queue index。接下來(lái)幾項(xiàng)是這個(gè)pool 中的buffer 的屬性。Global free pool 是用來(lái)從中分配free event 的。調(diào)用em_alloc()的入?yún)⒅痪褪莊ree pool index。

7. 配置preload 門(mén)限,參見(jiàn)本文1.2 節(jié)的敘述。

2.2.2 創(chuàng)建生產(chǎn)者/消費(fèi)者場(chǎng)景

前面介紹過(guò),在OpenEM 中,消費(fèi)者就是execution object,溝通生產(chǎn)者和消費(fèi)者的管道就是queue。本小節(jié)介紹怎樣創(chuàng)建execution object 和queue 以及怎樣把它們關(guān)聯(lián)起來(lái)。關(guān)于怎樣產(chǎn)生event,本文在下一小節(jié)描述。OpenEM 有下列API 供應(yīng)用調(diào)用:

• 調(diào)用em_eo_create()可以創(chuàng)建execution object

• 調(diào)用em_queue_create()可以創(chuàng)建queue

• 調(diào)用em_eo_add_queue()可以把queue 和execution object 映射起來(lái)

 

本演示用例通過(guò)參數(shù)配置表列出execution object, queue group object 和queue object 的參數(shù),然后通過(guò)解析函數(shù)解析配置表再調(diào)用OpenEM的API,這樣各個(gè)軟件對(duì)象的參數(shù)在配置表中一目了然,代碼的可讀性較好。圖5 是本演示用例的映射關(guān)系。

 

需要注意的是coremask 總共有64 個(gè)比特,但是目前6678 最多也只有8 個(gè)DSP 核。所以大量mask 比特是用不到的,目前。核0~7 對(duì)應(yīng)的mask 比特是位于byte[4]的bit0:7

需要注意的是queue 到execution object 的映射是通過(guò)receiver 函數(shù)關(guān)聯(lián)起來(lái),如紅色高亮顯示部分。

初始化job的偽代碼如下:

2.2.3 產(chǎn)生event

本文的演示用例把matrix Y 切分成了128 個(gè)2048*16 的子塊,每個(gè)event 對(duì)應(yīng)一個(gè)子塊。Event被發(fā)送給execution object 以后,receive 函數(shù)計(jì)算Matrix X 乘與matrix Y block,即100*2048 ×2048*16 的矩陣乘,產(chǎn)生100*16 個(gè)輸出。event 的產(chǎn)生包括下面幾個(gè)簡(jiǎn)單步驟:

• 調(diào)用em_alloc 函數(shù),從public pool 獲取free 的event 描述符并且enable preloading。

• 把待處理的數(shù)據(jù)緩沖區(qū)掛到描述符上,也就是把描述符的buffer 指針指向這個(gè)數(shù)據(jù)緩沖區(qū)。

• 在描述符的software info 域填上job index。

• 調(diào)用em_send,把event 發(fā)送到對(duì)應(yīng)的queue,也就是proc queue。

下面是產(chǎn)生event 的代碼:

需要注意的是Event 產(chǎn)生的時(shí)候,它被哪一個(gè)execution object 處理還沒(méi)有確定。因?yàn)閑xecution object 只是和queue 關(guān)聯(lián)的。當(dāng)把event 發(fā)送到一個(gè)queue 的時(shí)候,負(fù)責(zé)處理event 的execution object 就確定了。所以在調(diào)用em_send()發(fā)送event 到queue 的時(shí)候參數(shù)之一就是要發(fā)送到的queue 的handler。

2.2.4 運(yùn)行和exit

如前所述,“矩陣乘event”是通過(guò)proc queue 發(fā)給scheduler 的,所以它被proc queue 映射到mat_mpy calc 這個(gè)execution object 上。Dispatcher 收到這個(gè)event 后就調(diào)用“mat_mpy calc”對(duì)應(yīng)的receiver 函數(shù)計(jì)算矩陣相乘。因?yàn)閜roc queue 所屬的queue group 是映射到所有DSP 核的,所以128 個(gè)“矩陣乘event”是在所有核上并行處理的。每個(gè)核處理完event 后就把它釋放回global free pool。這樣這個(gè)event 又成為一個(gè)free 的event。

 

如2.2.3 節(jié)所述,主核可以通過(guò)查詢(xún)global free pool 的描述符個(gè)數(shù)是否恢復(fù)來(lái)判斷是否所有“矩陣乘event”已經(jīng)處理完。

 

當(dāng)所有“矩陣乘event”處理完后,主核再產(chǎn)生8 個(gè)“exit event”發(fā)送到exit queue。理論上scheduler 可以把exit job 調(diào)度給任意一個(gè)核,而不會(huì)保證每個(gè)核一個(gè)exit job。所以exit job 中的處理比較特殊。exit job 的receiver 函數(shù)直接執(zhí)行系統(tǒng)調(diào)用exit(0)。這樣就不會(huì)返回到Dispatcher,也不會(huì)再發(fā)出prefetch command。而另一方面,scheduler 是在收到DSP 核的prefetch command 以后才把event 調(diào)度給這個(gè)核的。這個(gè)機(jī)制保證了每個(gè)核收到且僅收到一個(gè)“exit event”。

在exit job 的receiver 函數(shù)中,主核執(zhí)行的分支稍有差異。主核需要先做完結(jié)果的校驗(yàn)再執(zhí)行系統(tǒng)調(diào)用exit(0)。所以在板上運(yùn)行是會(huì)觀察到其他核很快(小于1s)就從run 狀態(tài)轉(zhuǎn)換到abort 狀態(tài),而主核保持run 了很長(zhǎng)時(shí)間(大約50s)才進(jìn)入abort 狀態(tài)。原因是:在主核上執(zhí)行結(jié)果驗(yàn)證工作時(shí)產(chǎn)生校驗(yàn)結(jié)果的函數(shù)計(jì)算耗時(shí)比較長(zhǎng)。

下面是exit job 的receiver 函數(shù)的代碼主干:

2.3 基于OpenEM 的大矩陣乘性能測(cè)試結(jié)果

2.3.1 算法代碼和cycle 數(shù)的理論極限

設(shè)r1 是X 矩陣的行數(shù),c1 是X 矩陣的列數(shù),c2 是Y 矩陣的列數(shù)。在我們的演示用例中r1 =100, c1 = 2048, c2 = 2048。如前所述,Receiver 函數(shù)要計(jì)算100*2048 ×2048*16 的矩陣乘,對(duì)應(yīng)下面的偽代碼:

循環(huán)內(nèi)核是4 個(gè)cycle。如果只考慮循環(huán)內(nèi)核消耗的cycle 數(shù),計(jì)算100*2048 ×2048*16 的矩陣乘需要的cycle 數(shù)是100/2*16/2*2048/4*4 = 819,200 cycle。整個(gè)X*Y=Z 包括計(jì)算128 個(gè)這樣的矩陣乘。所以總的cycle 數(shù)是819,200*128 = 104,857,600 cycles。在1Ghz 的C66 核上這相當(dāng)于104.8ms。但是我們的上述理論計(jì)算沒(méi)有考慮循環(huán)的前后綴消耗的cycle 數(shù),也沒(méi)有考慮cache miss stall 的等待時(shí)間。在6678EVM 板的單個(gè)DSP 核上實(shí)測(cè),計(jì)算X*Y=Z 消耗的實(shí)際時(shí)間是190,574,214 cycles。相當(dāng)于190ms。

2.3.2 基于OpenEM 的性能測(cè)試結(jié)果

基于OpenEM的演示用例實(shí)現(xiàn)過(guò)程中,DSP 代碼中嵌入了少量測(cè)試代碼收集運(yùn)行的cycle 信息。每個(gè)核把自己處理每個(gè)event 的起始和結(jié)束時(shí)間記錄在內(nèi)存(我們通過(guò)一個(gè)全局timer 來(lái)保證所有DSP 核記錄的時(shí)間戳在時(shí)間軸上是同步的)。這些時(shí)間戳用CCS 存到主機(jī)做后處理分析。通過(guò)分析,我們可以得到8 個(gè)DSP 核并行處理消耗的時(shí)間。還可以分析每個(gè)DSP 核的忙/閑區(qū)間。

測(cè)試結(jié)果是,從第一個(gè)event 開(kāi)始處理到最后一個(gè)event 處理完,總時(shí)間是31,433,438 cycle,也就是31.4ms。也就是說(shuō),通過(guò)OpenEM把單DSP 核的工作負(fù)載平衡到8 個(gè)DSP 核上能達(dá)到的DSP 核利用率是190,574,214/(31,433,438*8)= 76%。

通過(guò)對(duì)時(shí)間戳的處理我們得到下面的運(yùn)行圖,“-”表示receiver 函數(shù)處理event 的區(qū)間,本文稱(chēng)之為有效時(shí)間。“#”表示receiver 之外的區(qū)間(也就是代碼在dispatcher 中執(zhí)行的區(qū)間),本文稱(chēng)之為調(diào)度開(kāi)銷(xiāo)。每個(gè)“-”和“#”刻度表示100,000 CPU cycle。

從上面的執(zhí)行圖看,調(diào)度開(kāi)銷(xiāo)不小,占了大約15~20%的時(shí)間。但是這只是表面的現(xiàn)象。實(shí)際上,調(diào)度開(kāi)銷(xiāo)的大部分時(shí)間里,Dispatcher 是在查詢(xún)hardware queue,等待新的event。這是因?yàn)閜reload 沒(méi)能及時(shí)完成導(dǎo)致的。因?yàn)橥瑫r(shí)給8 個(gè)核做preload 需要很大的數(shù)據(jù)搬移的流量。根據(jù)以往的測(cè)試結(jié)果。使用QMSS 的packet DMA 從DDR3 輸入數(shù)據(jù)到local L2 的流量大約是4G bytes 每秒。那么preload 8 個(gè)event 總的數(shù)據(jù)量是4byte * 2048 rows * 16 columns * 8 core = 1M bytes,需要的時(shí)間是1/4 ms。因?yàn)槊總€(gè)“-”和“#”刻度表示100,000 CPU cycle,運(yùn)行圖中紅線長(zhǎng)度就代表preload 8 個(gè)event 的時(shí)間,它非常接近250,000 cycle。理論計(jì)算和實(shí)際值基本吻合,所以我們認(rèn)為調(diào)度延遲是packet DMA 的傳輸流量不足導(dǎo)致的。

我們也測(cè)試了不使用pre-load 的場(chǎng)景。觀測(cè)到scheduler 調(diào)度一個(gè)event 的延遲大約是1200 個(gè)C66 CPU cycle。但是DSP 核處理一個(gè)event 的耗時(shí)增大到原來(lái)的10 倍。所以,pre-load 雖然會(huì)導(dǎo)致QMSS packet DMA 流量不足成為凸顯的瓶頸,但是從總體效率來(lái)看還是非常必要的。

細(xì)心的讀者可能會(huì)發(fā)現(xiàn)76% + 20% = 96%,并不是100%。我們分析時(shí)間戳發(fā)現(xiàn),8 個(gè)DSP 核同時(shí)運(yùn)行的場(chǎng)景下,每個(gè)核處理一個(gè)100*2048 ×2048*16 的矩陣乘的時(shí)間比只有一個(gè)DSP 核運(yùn)行的場(chǎng)景下的時(shí)間稍長(zhǎng)。原因是:我們的演示用例中X 矩陣和Z 矩陣是存儲(chǔ)在shared L2 的,8 個(gè)核同時(shí)運(yùn)行就會(huì)同時(shí)讀寫(xiě)這兩個(gè)buffer,導(dǎo)致產(chǎn)生shared L2 的bank 沖突。所以性能下降了。

3、總結(jié)

OpenEM具有使用簡(jiǎn)單,功能實(shí)用,執(zhí)行高效的特點(diǎn)。能在KeyStone 多核DSP 上實(shí)現(xiàn)動(dòng)態(tài)的負(fù)載平衡。它一方面提供了強(qiáng)大的功能,另一方面也給應(yīng)用留出了很大的靈活性。例如,通過(guò)讓?xiě)?yīng)用初始化free pool 方便了buffer 的管理。OpenEM 的現(xiàn)有功能已經(jīng)能夠支持基本的應(yīng)用。隨著版本更新功能還將不斷完善。

 

Reference

Ref[1]   ti.openem.white.paper.pdf 位于OpenEM 安裝目錄

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 国产精选久久 | 日日躁夜夜躁白天躁晚上 | 欧美人与物videos另类 | 亚洲成av人片在线观看无码 | 成人免费直播 | 天堂国产永久综合人亚洲欧美 | 内射国产内射夫妻免费频道 | 久久国产视频一区二区 | 国产极品美女在线精品图片 | 国产一级淫片a免费播放 | 加勒比中文字幕无码一区 | 91精品国产一区二区三密臀 | 久久精品牌麻豆国产大山 | 亚洲午夜精品一区二区 | 伊人狠狠 | 大又大又粗又硬又爽少妇毛片 | 不戴套各种姿势啪啪高素质 | 精品一区二区三区四区五区六区 | 亚洲三级久久 | 国产亚洲精品综合一区91 | 久久免费看少妇高潮a | 欧洲成人在线 | 国产午夜精品理论片 | 色秀av| jizz性欧美丰满 | 波多野结衣一区二区三区在线观看 | 依人成人网 | 亚洲熟妇av一区二区三区 | 91精品国产91久久久久 | 精品久久久久久久无码人妻热 | 98色婷婷在线 | 韩国无码av片在线观看网站 | 国产乱轮视频 | 乌克兰性生交视频 | 老司机伊人 | 久久国产精品久久久久久久久久 | 中出乱码av亚洲精品久久天堂 | 美女黄频视频大全免费的国内 | 三级黄色毛片视频 | 国产成人av一区二区三区在线 | 欧美一级大黄 | av解说在线 | 欧美精品小视频 | 免费三级在线 | 狠狠色丁香久久综合网 | 欧美69av| 美女扒开奶罩露出奶头视频网站 | 亚洲最大色综合成人av | 99久久国产综合精品女不卡 | 日本三级欧美三级 | 在线观看黄色国产 | www.成年人| av免费观看大全 | 久久综合久久美利坚合众国 | 色狠久 | 天堂网www网在线最新版 | 中文字幕乱码熟妇五十中出 | 暴操白丝美女 | 91成人免费视频 | 狠狠伊人 | 天天综合91| 男女做爰全过程免费视频播放 | 日韩免费毛片 | 亚洲在线不卡 | 久草视频免费播放 | а√天堂资源国产精品 | 粗大黑人巨精大战欧美成人 | aaaaa少妇高潮大片 | 中文字幕高潮 | 激情婷婷丁香 | 久久夜色精品国产欧美一区麻豆 | 在线观看岛国av | 欧美黄色性视频 | 久久综合狠狠色综合伊人 | 精品国产区一区二 | 亚洲综合第一 | 日韩欧美字幕 | 欧美日韩在线观看一区 | 亚洲a无码综合a国产av中文 | 免费在线激情视频 | 多p混交群体交乱小说h | 久久国产精品免费一区 | 天天看片天天射 | 台湾绝版午夜裸体写真秀 | 日韩欧美综合在线 | 欧美一级性 | 成人性色视频 | 狠狠干夜夜 | av色综合久久天堂av色综合在 | 四虎少妇做爰免费视频网站四 | 亚洲欧美在线一区 | 人妻熟女一区二区三区app下载 | 国产一区二区三区精品久久久 | 国产ww久久久久久久久久 | 天天色天天搞 | 香港三日本8a三级少妇三级99 | 欧美777| www.亚洲一区 | 狠狠亚洲婷婷综合色香五月 | 青青草视频污 | 国产视频精品在线 | 天天草视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 中文娱乐综合网777 中文在线第一页 | 欧洲成人在线视频 | 天堂一区在线 | 亚洲欧美v国产一区二区 | 欧美精品色婷婷五月综合 | 精品亚洲成a人在线观看 | 91小视频在线 | 国产精品 精品国内自产拍 日韩精品一区二区三区中文 | 影音先锋中文字幕资源 | 91精品一区二区三区四区 | 国产在线麻豆精品观看 | 日本在线免费观看视频 | 欧美在线播放一区 | 超碰pron| 99精品国产综合久久久久久 | 国产精品久久久久久久久久蜜臀 | 风间由美不戴奶罩邻居勃起av | 可以免费看av的网站 | 男人猛躁进女人免费视频夜月 | 情侣偷偷看的羞羞视频网站 | 亚洲成a人v欧美综合天堂麻豆 | 91精品国产成人www | 欧美城天堂网 | 国产视频精选 | 中文字幕不卡视频 | 欧美丝袜一区二区 | 91超薄肉色丝袜交足高跟凉鞋 | 在线播放亚洲精品 | 超碰caoporen| 亚洲污污网站 | 国产无遮挡又黄又爽又色 | 日韩国产精品一区二区 | 日韩在线视频免费观看 | 免费无码一区二区三区蜜桃 | 11月流出美女撒尿偷拍在线播放 | 亚洲产国偷v产偷自拍网址 亚洲超丰满肉感bbw | 日本不卡一区二区三区视频 | 亚洲视频播放 | 九九九热 | 久久久久99精品久久久久 | 成人在线中文字幕 | 综合网在线 | 中文字幕日产每天更新40 | 国产精品视频网 | 男受被做哭激烈娇喘gv视频 | 天天躁日日躁狠狠躁超碰97 | 四虎网址大全 | 近伦中文字幕 | 欧美浓毛大泬视频 | 影音先锋欧美在线 | 五月天激情在线 | 日本ts人妖系列在线专区 | 国产日产欧美a级毛片 | 熟妇人妻系列av无码一区二区 | 日本在线一级 | 97精品人妻系列无码人妻 | 国产日韩欧美在线观看 | 成人精品视频一区二区三区尤物 | 国产伦精品一区二区三区照片 | 国产自产自拍 | 欧美日韩一区二区在线播放 | 人妻无码一区二区三区四区 | av无码免费一区二区三区 | 亚洲国产成人av | 欧美视频在线观看一区二区三区 | 综合精品 | 91免费在线看 | 天天爽夜夜爽人人爽 | 一区二区不卡视频 | 欧美大片高清 | 久久精品国产最新地址 | 国内揄拍国产精品人妻门事件 | 夜夜躁狠狠躁日日躁麻豆 | 国产禁女女网站免费看 | 成人毛片一区二区 | japanese丰满少妇最高潮 | 成人一区在线观看 | 五十老熟妇乱子伦免费观看 | av福利网址 | 大胸少妇裸体无遮挡啪啪 | 制服丝袜亚洲中文综合懂色 | 亚洲中文字幕高清有码在线 | 91麻豆产精品久久久久久夏晴子 | 欧美黑人又粗又大又爽免费 | 91精品久久久久久久91蜜桃 | 亚洲国产精品久久精品怡红院 | 娜娜麻豆国产电影 | 男女操操操| 播播激情网 | 成人免费看片又大又黄 | 日韩精品一区二区三区中文 | 国产最新毛片 | 中文字幕一区二区人妻电影 | 国产精品国产三级国产a | 国产在线国偷精品免费看 | 国产黄片毛片 | 亚洲女初尝黑人巨 | 亚洲精品久久 | 日本精品久久久久中文字幕乱中年 | 欧美激情精品成人 | 男人av网| 上海毛片| 26uuu亚洲国产精品 | 日本不卡一二 | 综合久久婷婷 | 国产一级片av大片 | 99精品99| 蜜臀久久99精品久久久久久宅男 | 日日摸夜夜添狠狠添久久精品成人 | 日本xxxx高清 | 久久成人 久久鬼色 | 国产一卡二卡三卡四卡 | √资源天堂中文在线视频 | 日日射视频 | 精品视频一区二区三区在线观看 | 日本在线视频中文字幕 | 伊人精品久久久大香线蕉 | 欧美成人精品一区二区男人小说 | 韩国三级毛片 | 免费女人18a级毛片视频 | 精品久久久久成人码免费动漫 | 狠狠躁天天躁无码中文字幕 | 91欧美精品成人综合在线观看 | 国产chinesehd精品 | 久久在线精品 | 亚洲视频h| 91蜜桃 | 天天做天天摸天天爽天天爱 | 国产黄网站 | 欧美一区在线看 | 久久av免费看 | 毛片中文字幕 | 国产黄色影视 | 日韩黄网站 | 久久综合色之久久综合 | 日韩大胆人体 | 中文字幕丰满乱子伦无码专区 | 9cao | 久久综合激情网 | 自拍偷拍精品 | av在线综合网 | 人妻 日韩 欧美 综合 制服 | 91极品身材尤物theporn | 拔萝卜91| 狠狠干亚洲色图 | 中文字幕日韩精品亚洲一区小树林 | 三日本三级少妇三级99 | 国产无遮挡裸体免费视频在线观看 | yy1111111少妇影院乱码 | 中文字幕乱码无码人妻系列蜜桃 | 婷婷午夜天| 日韩免费影院 | 亚洲色图小说 | 黄色中文字幕在线观看 | 色人阁五月 | 韩国久久精品 | 被黑人猛躁10次高潮视频 | 国产乱妇乱子视频在播放 | 国产成人综合视频 | 欧美影视一区 | av女人的天堂| 日少妇av | 青草国产精品久久久久久 | 天天做天天爱天天综合网2021 | 亚洲综合伊人久久综合 | 国产精品区在线观看 | 欧美国产在线看 | 亚洲天堂免费在线观看视频 | 在线观看亚洲一区 | 99精品久久毛片a片 在线亚洲高清揄拍自拍一品区 | 欧美 唯美 清纯 偷拍 | 亚洲中文无码永久免费 | av三级在线播放 | 精品日韩欧美一区二区在线播放 | 久久av不卡| 亚洲国产免费 | 国产欧亚州美日韩综合区 | 国产欧美国日产高清 | 无码专区久久综合久中文字幕 | 亚洲国产精品系列 | 伊人超碰在线 | 夜夜高潮天天爽欧美国产亚洲一区 | 国产视频国产区 | 国产热视频 | 国产精品一区久久 | 亚洲天堂爱爱 | 在线日本看片免费人成视久网 | 国产又粗又猛又黄又爽视频 | 最近日韩中文字幕 | 免费国产黄网站在线观看视频 | 免费麻豆av| 久久摸摸碰碰97网站 | 九九热在线免费观看视频 | 超碰狠狠干 | 涩爱av天天爱天天做夜夜爽 | 久久99热人妻偷产国产 | 国精产品一品二品国在线 | 久久黄色精品视频 | 青青草97| 国产成人福利视频 | 天天夜碰日日摸日日澡性色av | 亚洲图片在线 | 亚洲精品无码永久在线观看性色 | 一卡二卡三卡在线视频 | 日韩欧美中文在线 | 91亚色网站| 国产做a爰片久久毛片a片美国 | 黄色av网站免费观看 | 日韩精品极品视频 | 男人的天堂在线观看av | 国产视频一区二区在线观看 | 一边摸一边做爽的视频17国产 | 香蕉在线视频观看 | 久久精品一区二 | 国产精品人人爱一区二区白浆 | 日韩大尺度在线观看 | av片久久| 亚洲精品美女视频 | caoporon成人超碰公开网站 | 91精品国产九九九久久久亚洲 | 中文字幕免费在线视频 | 亚洲精美视频 | 国产日产精品一区二区 | 色五月激情五月 | 9色在线| 无码人妻精品一区二区三区蜜桃 | 欧美国产激情 | 精品无码av无码免费专区 | 国产又粗又猛又黄又爽无遮挡 | 国产色网址 | 亚洲情se | 99久久精品久久久久久ai换脸 | 岛国av动作片在线观看 | 国产成人综合色在线观看网站 | 人妻体内射精一区二区 | 欧美性视频一区二区三区 | 亚洲精品午夜国产va久久成人 | 97色偷偷色噜噜狠狠爱网站 | 国产美女无遮挡免费软件 | 欧美啪啪网站 | 秋霞福利视频 | 欧美最猛性xxxxx免费 | 99精品国产99久久久久久97 | 性欧美极品另类 | 中文字幕在线观看免费视频 | 国产一区二区三区免费 | 久久精品日产第一区二区三区 | av影音先锋最大资源网 | 欧美大荫蒂毛茸茸视频 | 亚洲色欲色欲www在线播放 | 亚洲综合在线第一页 | 精品无码专区毛片 | 后人极品翘臀美女在线播放 | 床上激情网站 | 狠狠操人人干 | 中文字幕天堂在线 | 无码高潮少妇毛多水多水免费 | 毛片网站入口 | 国产精品自拍一区 | 高h七仙女辣黄h | 日韩中文在线播放 | 一本色道久久88综合亚洲精品ⅰ | 中文字幕无码日韩专区 | 精品国产一区三区 | 一边吃奶一边摸做爽视频 | 日韩性生活视频 | 亚洲午夜无码av毛片久久 | 99精品免费视频 | 3d动漫精品啪啪一区二区免费 | 亚洲色爱图小说专区 | 国产洗浴女技师全套av | 一本一道av中文字幕无码 | 在线免费黄 | 欧美日本久久 | 国产午夜片无码区在线播放 | 日本一区二区欧美 | 天天躁日日躁狠狠躁喷水软件 | 午夜鲁鲁 | 白石茉莉奈一区二区av | 国产乱人内谢69xxxx亚洲 | 男女激情啪啪18 | 亚洲中文字幕无码爆乳av | 国产精品白浆无码流出 | 成人精品在线视频 | 欧美成人片在线观看 | 狠狠综合久久av一区二区 | 精品福利视频一区二区三区 | 少妇放荡的呻吟干柴烈火动漫 | 午夜裸体性播放 | 久久九九精品 | 国产亚洲精品精品国产亚洲综合 | 精品美女一区 | 欧美精品123| 精品国产乱码久久久久久蜜臀网站 | 国产同性野外打野战 | 日韩一区二区在线视频 | 欧美色图日韩 | 午夜精品亚洲一区二区三区嫩草 | 一区二区免费在线 | 免费看黄网站在线观看 | 91免费看| 日韩高清一区 | 亚洲小少妇 | 免费观看性生活大片3 | 国产又粗又猛又黄又爽视频 | 国产911情侣拍拍在线播放 | 久久伊人色 | 5566成人精品视频免费 | 男女啪啪网站 | 香蕉在线网 | 欧洲美女毛片 | 亚洲激情成人网 | 四虎影在永久在线观看 | 亚洲第8页| 日本三级吃奶头添泬 | 精品人人妻人人澡人人爽牛牛 | 国产精品麻豆欧美日韩ww | 亚洲一区免费观看 | 福利视频第一页 | 日韩精品一区二区三区免费视频观看 | 特污兔网站免费观看 | 欧美变态绿帽cuckold | 国产精品三级三级三级 | 国产精品视频一区二区三区 | 国内精品一区二区三区 | 国产精品av一区 | 日韩在线视频精品 | 亚洲成a∨人片在无码2023 | 日日碰狠狠躁久久躁 | 一个色综合久久 | 毛片基地黄久久久久久天堂 | 欧美3p两根一起进高清免费视频 | 国产综合久久 | 亚洲一区中文字幕在线观看 | 嫩草影院永久入口 | 成人亚洲综合av天堂 | 欧美图片一区二区 | 免费看成人毛片 | 在线a亚洲视频播放在线观看 | 黑人一区 | 国产中文字幕久久 | 亚洲精久久 | 黄网站在线观看视频 | 欧美成人看片一区二区三区尤物 | 天堂网在线最新版www中文网 | 扒开双腿被两个男人玩弄视频 | 久久久久久久久久久网站 | 在线免费观看不卡av | 丰满的人妻hd高清日本 | 亚洲最大福利视频网 | 成人无码精品1区2区3区免费看 | 精品欧洲av无码一区二区三区 | 午夜18视频在线观看 | 日本一码二码三码在线 | 久久久久久久久久久久久久久久久久久 | 天堂在线精品视频 | 亚州五月 | 日本肉体xxxx裸体137大胆图 | 国产精品成人av片免费看最爱 | 色婷婷激情一区二区三区 | 欧美激情在线播放 | 中文字幕无码人妻少妇免费 | 欧美日韩视频无码一区二区三 | 精品国产乱码久久久久软件 | 国产成人精品综合在线观看 | 国产99视频在线观看 | 久久 国产 尿 小便 嘘嘘 | 天天摸天天干 | 日本少妇喷水 | 一级伦理片 | 少妇寂寞小伙满足少妇在线观看 | 91网址在线观看 | 18分钟处破好疼哭视频在线观看 | 天天噜日日噜狠狠噜免费 | 国产乱淫av蜜臂片免费 | 成人区人妻精品一区二区不卡 | 99在线精品视频观看 | 亚洲精品视频久久 | 国产精品免费无遮挡无码永久视频 | 国产全肉乱妇杂乱视频男男 | av最新网| 秋霞影院一区二区 | 久久人人爽人人爽人人av | 国产真实乱对白精彩久久小说 | 久久综合av色老头免费观看 | 日韩一区国产二区欧美三区 | 亚洲黄色在线视频 | 香蕉久久福利院 | 久久亚洲视频 | 中午字幕无线码一区2020 | 原创av| 无码国模国产在线观看 | 国产精品久久久久久久久久不蜜月 | 在线精品亚洲一区二区佐佐木明希 | 韩国黄色av| 亚洲成人在线视频网站 | 免费看大片a| 久久婷婷国产综合国色天香 | 天堂√在线中文最新版8 | 欧美午夜理伦三级在线观看吃奶汁 | 欧美男生射精高潮视频网站 | 丰满大乳一级淫片免费播放 | 国产女18毛片多18精品 | 少妇4p| 一色屋精品视频在线观看 | 无套内射无矿码免费看黄 | 琪琪五月天 | 午夜影院福利社 | 欧美激情综合在线 | 天天插天天干 | 亚洲欧美成人aⅴ大片 | 啪啪啪毛片 | 2020久久超碰国产精品最新 | 在线播放国产一区二区三区 | 女性向av片在线观看免费 | 日韩视频中文字幕在线观看 | 女人被做到高潮免费视频 | 久久一区二区三区四区 | 国产三级久久久久 | 欧美噜噜噜 | 日韩少妇av | 久久久91精品国产一区二区精品 | 国产精品www老牛影视 | 亚洲女人天堂av | 日本成人午夜视频 | 成人久久精品 | 深夜福利一区二区三区 | 中文字幕免费视频 | 久久频这里精品99香蕉 | 95av成人女人啪啪 | 欧美黄色一级生活片 | 成人91在线 | 搐搐国产丨区2区精品av | 韩国黄色网址 | 蜜桃视频在线观看污 | 中文字幕第2页 | 日本被黑人强伦姧人妻完整版 | 久久二| 国产精品毛片在线完整版 | 欧美一区二区 | frxxee欧美xxee麻豆 | 麻豆果冻传媒2021精品传媒一区下载 | 男人av在线 | 国产69精品久久久久男男系列 | 日韩性生活大片 | 中国一级大黄大黄大色毛片 | 国产女主播在线播放 | 国产福利视频一区 | 国产精品久久久久久久久大全 | 欧美性猛交xxxx乱大交俱乐部 | 中文字幕第十二页 | 中文字幕人妻熟女人妻洋洋 | 中文字幕一区二区三区四区五区 | 国产精品一区在线播放 | 东京干手机福利视频 | www.狠狠操.com| 日本五月天婷久久网站 | 亚洲成人在线免费观看 | 久久久久久香蕉 | 榴莲视频黄色 | 韩国主播青草55部完整 | 久久精品国产精品亚洲精品 | 亚无码乱人伦一区二区 | 91免费版黄色 | 日韩啪啪网站 | 日日碰狠狠添天天爽超碰97久久 | 真实国产乱啪福利露脸 | 久久99九九| 亚洲一区二区三区影院 | 国产日韩欧美激情 | 一二三国产精品 | 色噜噜色综合 | 女女互揉吃奶揉到高潮视频 | 久久先锋 | 久久综合狠狠色综合伊人 | 欧美三日本三级少妇三级99观看视频 | 中文字幕日韩精品欧美一区 | 国产国产精品人在线观看 | 7m视频成人精品分类 | 99热久久久久久久久久久174 | 久久影院一区 | 久久国产劲爆∧v内射 | 天天夜碰日日摸日日澡性色av | 少妇性l交大片免费观看冫 少妇性l交大片免费快色 | 欧美性生交大片18禁止 | 一区二区三区视频 | 窝窝午夜影院 | 久久综合伊人77777麻豆最新章节 | 亚洲视频一区 | 欧美性生活xxx | 国产精品911| 日韩精品一区二区三区免费视频 | 亚洲乱人伦 | 国产真人无遮挡作爱免费视频 | 中字幕人妻一区二区三区 | 伊人久久久大香线蕉综合直播 | 国产人交视频xxxcom | 亚洲中文无码a∨在线观看 在线不卡日本v二区到六区 | 国产偷亚洲偷欧美偷精品 | 色噜噜狠狠一区二区三区 | 激情插插插 | 亚洲成人动漫在线观看 | 亚洲精品888| 午夜影院h| 免费网站看v片在线18禁无码 | 国产成人精品视频 | 老女人任你躁久久久久久老妇 | 性一交一伦一伦一视频 | 色婷婷狠狠五月综合天色拍 | 欧美专区中文字幕 | 粉嫩av一区二区三区免费野 | 国产一区二区三区自拍 |