邵龍
(中國(guó)電子科技集團(tuán)公司第十研究所,四川 成都 610036)
為了解決計(jì)算能力需求與功耗增加之間日益突出的矛盾,近幾年,主流處理器廠家改變了原本主要通過提升頻率來提高性能的方法,處理器設(shè)計(jì)正在向增加處理核數(shù)量的方向發(fā)展,多核處理器以較低的功耗提供了更強(qiáng)的計(jì)算處理能力[1-4]。多核處理器指的是在一個(gè)芯片上集成了多個(gè)計(jì)算核心的處理器,相比于單核,多核處理器優(yōu)勢(shì)明顯:多核處理器每個(gè)核心工作在較低的頻率上,在通過并行運(yùn)行來提高整體性能的同時(shí)有效地解決了散熱問題;同一芯片上的多個(gè)核心互聯(lián)線路極短,有利于降低通信延遲,提高數(shù)據(jù)傳送帶寬;多核處理器有利于指令級(jí)并行和線程級(jí)并行,可充分挖掘程序潛在的并行性[5-8]。常見的嵌入式多核處理器都帶有并行總線接口,用于擴(kuò)展存儲(chǔ)器及其他外設(shè),例如:DSP 的EMIF、PowerPC 的LOCAL BUS、ARM 的AXI[9-14]。在綜合化系統(tǒng)中,為了小型化和低功耗,需要在多核處理器的不同核上部署不同的功能應(yīng)用,每個(gè)功能應(yīng)用都需要訪問處理器自帶的并行總線。現(xiàn)有解決方案都是針對(duì)基于包交互的高速總線的情況,鮮有多核共享并行總線的解決方案。
針對(duì)綜合化系統(tǒng)中多核處理器多功能應(yīng)用同時(shí)訪問并行總線的需求,本文提出了一種基于最小訪問顆粒度的多核處理器公平共享并行總線的方法,保證每個(gè)核上的功能應(yīng)用都能及時(shí)地獲得總線訪問權(quán),具有確定性時(shí)延保障。
多核處理器共享并行總線的方法如圖1 所示,包括總線操作緩沖隊(duì)列、總線操作調(diào)度器和總線操作執(zhí)行器,其特征在于:總線操作緩沖隊(duì)列個(gè)數(shù)為多核處理器核數(shù),每個(gè)核對(duì)應(yīng)一個(gè)總線操作緩沖隊(duì)列,每個(gè)核發(fā)起的總線操作先打包成總線操作描述符,然后再放入該核對(duì)應(yīng)的總線操作隊(duì)列,如果是同步寫或者讀操作,則等待操作完成后返回,如果是寫操作,則直接返回;每個(gè)總線操作描述符包括操作碼、總線地址、寫操作值/讀操作地址、返回值地址;總線操作調(diào)度器采用公平隊(duì)列算法,每次從一個(gè)總線操作緩沖隊(duì)列中取出一個(gè)總線操作描述符交給總線操作執(zhí)行器,等待總線操作執(zhí)行器執(zhí)行完成后,再?gòu)南乱粋€(gè)總線操作緩沖隊(duì)列中取總線操作描述符;總線操作執(zhí)行器解析總線操作描述符,如果操作碼是同步寫,則直接調(diào)用總線驅(qū)動(dòng)將寫操作值寫入總線地址對(duì)應(yīng)的空間并將返回值置為valid,如果操作碼是寫,則直接調(diào)用總線驅(qū)動(dòng)將寫操作值寫入總線地址對(duì)應(yīng)的空間,如果操作碼是讀,則直接調(diào)用總線驅(qū)動(dòng)將總線地址對(duì)應(yīng)的空間值讀取出來后寫入讀操作地址對(duì)應(yīng)空間,并將返回值置為valid。
圖1 多核處理器共享并行總線的方法
多核處理器共享并行總線的方法包括同步寫操作、寫操作和讀操作,其中,寫操作相對(duì)于同步寫操作而言,實(shí)質(zhì)是異步寫操作,讀操作實(shí)質(zhì)是同步讀操作。
同步寫操作具體流程如圖2 所示。發(fā)起同步寫操作的核先將同步寫sync_w、總線地址busAddr、寫操作值data、返回值地址&flag 映射成全局地址addrMap(&flag),分別填入操作碼字段、總線地址字段、寫操作值/讀操作地址字段、返回值地址字段,將同步寫總線操作打包成同步寫總線操作描述符,然后再將該總線操作描述符放入該核對(duì)應(yīng)的總線操作緩沖隊(duì)列等待操作完成,即等待返回值地址中的值變?yōu)関alid 后返回;總線操作調(diào)度器采用公平隊(duì)列算法從該核對(duì)應(yīng)的總線操作緩沖隊(duì)列中取出該同步寫總線操作描述符交給總線操作執(zhí)行器;總線操作執(zhí)行器解析該同步寫總線操作描述符,由于操作碼是同步寫,直接調(diào)用總線驅(qū)動(dòng)將寫操作值寫入總線地址對(duì)應(yīng)的空間并將返回值置為valid,即*(volatile word*)busAddr=data;*(volatile uint8_t*)addrMap(&flag)=valid;該核獲取到返回值為valid 則結(jié)束等待,完成此次同步寫操作,返回上層調(diào)用。
圖2 同步寫操作具體流程
異步寫操作具體流程如圖3 所示。發(fā)起寫操作的核先將同步寫w、總線地址busAddr、寫操作值data、返回值地址NULL 分別填入操作碼字段、總線地址字段、寫操作值/讀操作地址字段、返回值地址字段,將寫總線操作打包成寫總線操作描述符,然后再將該總線操作描述符放入該核對(duì)應(yīng)的總線操作緩沖隊(duì)列后返回;總線操作調(diào)度器采用公平隊(duì)列算法從該核對(duì)應(yīng)的總線操作緩沖隊(duì)列中取出該寫總線操作描述符交給總線操作執(zhí)行器;總線操作執(zhí)行器解析該寫總線操作描述符,由于操作碼是寫,直接調(diào)用總線驅(qū)動(dòng)將寫操作值寫入總線地址對(duì)應(yīng)的空間,即*(volatile word *)busAddr=data,完成此次寫操作。
圖3 異步寫操作具體流程
同步讀操作具體流程如圖4 所示。發(fā)起同步讀操作的核先將同步讀r、總線地址busAddr、讀操作地址datAddr 映射后的全局地址addrMap(datAddr)、返回值地址&flag 映射后的全局地址addrMap(&flag)分別填入操作碼字段、總線地址字段、寫操作值/讀操作地址字段、返回值地址字段,將讀總線操作打包成讀總線操作描述符,然后再將該總線操作描述符放入該核對(duì)應(yīng)的總線操作緩沖隊(duì)列,等待操作完成即等待返回值地址中的值變?yōu)関alid 后返回;總線操作調(diào)度器采用公平隊(duì)列算法從該核對(duì)應(yīng)的總線操作緩沖隊(duì)列中取出該讀總線操作描述符交給總線操作執(zhí)行器;總線操作執(zhí)行器解析該讀總線操作描述符,由于操作碼是讀,直接調(diào)用總線驅(qū)動(dòng)將總線地址對(duì)應(yīng)的空間值讀取出來后寫入讀操作地址對(duì)應(yīng)空間并將返回值置為valid,即*(volatile word *)addrMap(datAddr)=*(volatile word*)busAddr;*(volatile uint8_t*)addrMap(&flag)=valid。該核獲取到返回值為valid,則結(jié)束等待,完成此次讀操作,返回上層調(diào)用。
圖4 同步讀操作具體流程
多核處理器公平共享并行總線的方法已在某綜合化系統(tǒng)信號(hào)處理模塊的多核DSP 上得到應(yīng)用。
信號(hào)處理模塊硬件框圖如圖5 所示。DSP 采用TI公司C66XX 系列8 核DSP處理器C6678,通過EMIF 總線與兩片XILINX 公司的7V690T FPGA 相連。功能應(yīng)用A 部署DSP 的核0~3 和FPGA A,功能應(yīng)用B 部署在DSP 核4~7 和FPGA B。
圖5 信號(hào)處理模塊硬件框圖
系統(tǒng)硬件實(shí)物如圖6 所示。白色實(shí)線框選部分共10 個(gè)模塊,都是信號(hào)處理模塊。
圖6 設(shè)備實(shí)物
為了解決功能應(yīng)用A 和功能應(yīng)用B 同時(shí)使用并行總線EMIF 訪問對(duì)應(yīng)FPGA 的共享總線沖突問題,采用本文所述的多核處理器公平共享并行總線的方法。8 個(gè)總線操作緩沖隊(duì)列部署在DSP 的多核共享存儲(chǔ)器L3空間,DSP 核0~7 每個(gè)核對(duì)應(yīng)一個(gè)總線操作緩沖隊(duì)列,功能應(yīng)用A 和功能應(yīng)用B 的EMIF 總線操作都需要先打包成總線操作描述符,然后放入對(duì)應(yīng)的總線操作隊(duì)列;部署在DSP 核0 上的總線操作調(diào)度器采用公平隊(duì)列算法,每次從一個(gè)總線操作緩沖隊(duì)列中取出一個(gè)總線操作描述符交給同樣部署在DSP 核0 上的總線操作執(zhí)行器;總線操作執(zhí)行器解析總線操作描述符并執(zhí)行總線操作。
DSP 工作在主頻1 GHz,EMIF 時(shí)鐘為167 MHz,建立時(shí)間、選通時(shí)間和保持時(shí)間分別設(shè)置為2、7 和1,當(dāng)核0~7 同時(shí)訪問EMIF時(shí),基于多核處理器公平共享并行總線的方法訪問EMIF,每個(gè)核的速率都在4 MB/s以上,總線操作最大響應(yīng)時(shí)延為1 μs,滿足系統(tǒng)指標(biāo)要求。
本文提出了一種基于最小訪問顆粒度多核處理器公平共享并行總線的方法,為每個(gè)核虛擬一個(gè)并行總線,不僅每個(gè)核對(duì)應(yīng)一個(gè)總線操作緩沖隊(duì)列且同一核的讀、寫、同步寫等操作放入同一總線操作緩沖隊(duì)列,避免了同一核的總線操作出現(xiàn)亂序的情況,保障了同一核的總線操作先到先服務(wù),而且通過公平隊(duì)列算法以及每個(gè)核一次只能占用一個(gè)讀寫操作周期,保障了每個(gè)核總線操作請(qǐng)求的最長(zhǎng)響應(yīng)時(shí)間不會(huì)大于核數(shù)乘以讀寫操作周期,每個(gè)核的總線操作都具有時(shí)延保障。多個(gè)綜合化系統(tǒng)中的應(yīng)用實(shí)踐證明,該方法是一種在綜合化電子系統(tǒng)中多核處理器共享并行總線的有效方法。