邵龍
(中國電子科技集團公司第十研究所,四川 成都 610036)
為了解決計算能力需求與功耗增加之間日益突出的矛盾,近幾年,主流處理器廠家改變了原本主要通過提升頻率來提高性能的方法,處理器設計正在向增加處理核數(shù)量的方向發(fā)展,多核處理器以較低的功耗提供了更強的計算處理能力[1-4]。多核處理器指的是在一個芯片上集成了多個計算核心的處理器,相比于單核,多核處理器優(yōu)勢明顯:多核處理器每個核心工作在較低的頻率上,在通過并行運行來提高整體性能的同時有效地解決了散熱問題;同一芯片上的多個核心互聯(lián)線路極短,有利于降低通信延遲,提高數(shù)據傳送帶寬;多核處理器有利于指令級并行和線程級并行,可充分挖掘程序潛在的并行性[5-8]。常見的嵌入式多核處理器都帶有并行總線接口,用于擴展存儲器及其他外設,例如:DSP 的EMIF、PowerPC 的LOCAL BUS、ARM 的AXI[9-14]。在綜合化系統(tǒng)中,為了小型化和低功耗,需要在多核處理器的不同核上部署不同的功能應用,每個功能應用都需要訪問處理器自帶的并行總線。現(xiàn)有解決方案都是針對基于包交互的高速總線的情況,鮮有多核共享并行總線的解決方案。
針對綜合化系統(tǒng)中多核處理器多功能應用同時訪問并行總線的需求,本文提出了一種基于最小訪問顆粒度的多核處理器公平共享并行總線的方法,保證每個核上的功能應用都能及時地獲得總線訪問權,具有確定性時延保障。
多核處理器共享并行總線的方法如圖1 所示,包括總線操作緩沖隊列、總線操作調度器和總線操作執(zhí)行器,其特征在于:總線操作緩沖隊列個數(shù)為多核處理器核數(shù),每個核對應一個總線操作緩沖隊列,每個核發(fā)起的總線操作先打包成總線操作描述符,然后再放入該核對應的總線操作隊列,如果是同步寫或者讀操作,則等待操作完成后返回,如果是寫操作,則直接返回;每個總線操作描述符包括操作碼、總線地址、寫操作值/讀操作地址、返回值地址;總線操作調度器采用公平隊列算法,每次從一個總線操作緩沖隊列中取出一個總線操作描述符交給總線操作執(zhí)行器,等待總線操作執(zhí)行器執(zhí)行完成后,再從下一個總線操作緩沖隊列中取總線操作描述符;總線操作執(zhí)行器解析總線操作描述符,如果操作碼是同步寫,則直接調用總線驅動將寫操作值寫入總線地址對應的空間并將返回值置為valid,如果操作碼是寫,則直接調用總線驅動將寫操作值寫入總線地址對應的空間,如果操作碼是讀,則直接調用總線驅動將總線地址對應的空間值讀取出來后寫入讀操作地址對應空間,并將返回值置為valid。

圖1 多核處理器共享并行總線的方法
多核處理器共享并行總線的方法包括同步寫操作、寫操作和讀操作,其中,寫操作相對于同步寫操作而言,實質是異步寫操作,讀操作實質是同步讀操作。
同步寫操作具體流程如圖2 所示。發(fā)起同步寫操作的核先將同步寫sync_w、總線地址busAddr、寫操作值data、返回值地址&flag 映射成全局地址addrMap(&flag),分別填入操作碼字段、總線地址字段、寫操作值/讀操作地址字段、返回值地址字段,將同步寫總線操作打包成同步寫總線操作描述符,然后再將該總線操作描述符放入該核對應的總線操作緩沖隊列等待操作完成,即等待返回值地址中的值變?yōu)関alid 后返回;總線操作調度器采用公平隊列算法從該核對應的總線操作緩沖隊列中取出該同步寫總線操作描述符交給總線操作執(zhí)行器;總線操作執(zhí)行器解析該同步寫總線操作描述符,由于操作碼是同步寫,直接調用總線驅動將寫操作值寫入總線地址對應的空間并將返回值置為valid,即*(volatile word*)busAddr=data;*(volatile uint8_t*)addrMap(&flag)=valid;該核獲取到返回值為valid 則結束等待,完成此次同步寫操作,返回上層調用。

圖2 同步寫操作具體流程
異步寫操作具體流程如圖3 所示。發(fā)起寫操作的核先將同步寫w、總線地址busAddr、寫操作值data、返回值地址NULL 分別填入操作碼字段、總線地址字段、寫操作值/讀操作地址字段、返回值地址字段,將寫總線操作打包成寫總線操作描述符,然后再將該總線操作描述符放入該核對應的總線操作緩沖隊列后返回;總線操作調度器采用公平隊列算法從該核對應的總線操作緩沖隊列中取出該寫總線操作描述符交給總線操作執(zhí)行器;總線操作執(zhí)行器解析該寫總線操作描述符,由于操作碼是寫,直接調用總線驅動將寫操作值寫入總線地址對應的空間,即*(volatile word *)busAddr=data,完成此次寫操作。

圖3 異步寫操作具體流程
同步讀操作具體流程如圖4 所示。發(fā)起同步讀操作的核先將同步讀r、總線地址busAddr、讀操作地址datAddr 映射后的全局地址addrMap(datAddr)、返回值地址&flag 映射后的全局地址addrMap(&flag)分別填入操作碼字段、總線地址字段、寫操作值/讀操作地址字段、返回值地址字段,將讀總線操作打包成讀總線操作描述符,然后再將該總線操作描述符放入該核對應的總線操作緩沖隊列,等待操作完成即等待返回值地址中的值變?yōu)関alid 后返回;總線操作調度器采用公平隊列算法從該核對應的總線操作緩沖隊列中取出該讀總線操作描述符交給總線操作執(zhí)行器;總線操作執(zhí)行器解析該讀總線操作描述符,由于操作碼是讀,直接調用總線驅動將總線地址對應的空間值讀取出來后寫入讀操作地址對應空間并將返回值置為valid,即*(volatile word *)addrMap(datAddr)=*(volatile word*)busAddr;*(volatile uint8_t*)addrMap(&flag)=valid。該核獲取到返回值為valid,則結束等待,完成此次讀操作,返回上層調用。

圖4 同步讀操作具體流程
多核處理器公平共享并行總線的方法已在某綜合化系統(tǒng)信號處理模塊的多核DSP 上得到應用。
信號處理模塊硬件框圖如圖5 所示。DSP 采用TI公司C66XX 系列8 核DSP處理器C6678,通過EMIF 總線與兩片XILINX 公司的7V690T FPGA 相連。功能應用A 部署DSP 的核0~3 和FPGA A,功能應用B 部署在DSP 核4~7 和FPGA B。

圖5 信號處理模塊硬件框圖
系統(tǒng)硬件實物如圖6 所示。白色實線框選部分共10 個模塊,都是信號處理模塊。

圖6 設備實物
為了解決功能應用A 和功能應用B 同時使用并行總線EMIF 訪問對應FPGA 的共享總線沖突問題,采用本文所述的多核處理器公平共享并行總線的方法。8 個總線操作緩沖隊列部署在DSP 的多核共享存儲器L3空間,DSP 核0~7 每個核對應一個總線操作緩沖隊列,功能應用A 和功能應用B 的EMIF 總線操作都需要先打包成總線操作描述符,然后放入對應的總線操作隊列;部署在DSP 核0 上的總線操作調度器采用公平隊列算法,每次從一個總線操作緩沖隊列中取出一個總線操作描述符交給同樣部署在DSP 核0 上的總線操作執(zhí)行器;總線操作執(zhí)行器解析總線操作描述符并執(zhí)行總線操作。
DSP 工作在主頻1 GHz,EMIF 時鐘為167 MHz,建立時間、選通時間和保持時間分別設置為2、7 和1,當核0~7 同時訪問EMIF時,基于多核處理器公平共享并行總線的方法訪問EMIF,每個核的速率都在4 MB/s以上,總線操作最大響應時延為1 μs,滿足系統(tǒng)指標要求。
本文提出了一種基于最小訪問顆粒度多核處理器公平共享并行總線的方法,為每個核虛擬一個并行總線,不僅每個核對應一個總線操作緩沖隊列且同一核的讀、寫、同步寫等操作放入同一總線操作緩沖隊列,避免了同一核的總線操作出現(xiàn)亂序的情況,保障了同一核的總線操作先到先服務,而且通過公平隊列算法以及每個核一次只能占用一個讀寫操作周期,保障了每個核總線操作請求的最長響應時間不會大于核數(shù)乘以讀寫操作周期,每個核的總線操作都具有時延保障。多個綜合化系統(tǒng)中的應用實踐證明,該方法是一種在綜合化電子系統(tǒng)中多核處理器共享并行總線的有效方法。