專利名稱:一種數(shù)據(jù)處理的方法與裝置的制作方法
技術領域:
本發(fā)明涉及集成電路設計領域。
背景技術:
根據(jù)摩爾定律,晶體管的特征尺寸正沿著65nm,45nm,32nm……的路線逐漸縮小, 單片芯片上所集成的晶體管數(shù)已超過十幾億只。但是自從上世紀八十年代推出綜合及布局 布線工具,解放了后端設計生產(chǎn)力后,EDA工具20多年來并沒有質(zhì)的突破,使得前端設計, 尤其是驗證變得越來越難以應對日益增大的單片芯片規(guī)模。因此,設計公司把目光投向多 核,即一塊芯片中集成多個較為簡單的核,在提高芯片功能的同時降低設計、驗證難度。傳統(tǒng)多核處理器集成了多個并行執(zhí)行程序的處理器核以提高芯片性能。對于傳統(tǒng) 多核處理器,需要有并行編程的思想才有可能充分利用資源。然而操作系統(tǒng)對資源的分配 和管理并沒有本質(zhì)的改變,多是以對稱的方式進行平均分配。盡管多個處理器核之間可以 進行并行運算,但對于單個程序線程而言,其串行執(zhí)行的結(jié)構特點導致在傳統(tǒng)多核處理器 結(jié)構中無法實現(xiàn)真正的流水線操作。此外目前的軟件中依然存在大量必須串行執(zhí)行的程 序,無法被很好的分割。因此,當處理器核達到一定數(shù)量后,性能就無法再隨著核數(shù)量的增 加而提升了。此外,隨著半導體制造工藝的不斷提升,多核處理器內(nèi)部的工作頻率已大大高 于其外部存儲器的工作頻率,多個處理器核同時進行訪存也已經(jīng)成為制約系統(tǒng)性能的一大 瓶頸,用并行多核結(jié)構運行串行的程序無法達到預期的性能提升效果。
發(fā)明內(nèi)容
本發(fā)明針對現(xiàn)有技術的不足,提出一種用于高速運行串行程序的數(shù)據(jù)處理的方法 與裝置,提高吞吐率。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置,包括根據(jù)特定規(guī)則對運行于串行連接 多處理器核結(jié)構上的程序代碼進行分割,使所述串行連接多處理器核結(jié)構中的每個核 運行相應的分割后代碼片段所需的時間盡量相等,以實現(xiàn)核間工作量的負載平衡(load balancing)。所述串行連接多處理器核結(jié)構中包含復數(shù)個處理器核,所述處理器指通過執(zhí) 行指令進行運算和讀寫數(shù)據(jù)的硬件,包括但不限于中央處理器(CPU)和數(shù)據(jù)信號處理器 (DSP)。本發(fā)明所述的串行連接多處理器核結(jié)構構成串行多發(fā)射(in serialmulti-issue),串行連接多處理器核結(jié)構中任意核每單位時間內(nèi)可進行單數(shù)個或復 數(shù)個發(fā)射,復數(shù)個串行連接的核同時形成更大規(guī)模的多發(fā)射,即串行多發(fā)射。本發(fā)明所述的串行連接多處理器核結(jié)構構成流水線層次結(jié)構 (pipelinehierarchy),串行連接多處理器核結(jié)構中任意核的內(nèi)部流水線為第一個層次,串 行連接多處理器核結(jié)構中每個核作為一個宏觀流水線段而構成的宏觀流水線為第二個層 次,依此類推還可以得到更多更高層次,如以串行連接多處理器核結(jié)構作為一個更高層次 流水線段而構成的第三個層次。
本發(fā)明所述的串行連接多處理器核結(jié)構中核上的代碼片段經(jīng)由前編譯 (pre-compile)、編譯(compile)和后編譯(post-compile)三步驟中的部分或全部步驟產(chǎn) 生單數(shù)個或復數(shù)個代碼片段,所述程序代碼包括但不限于高級語言代碼和匯編語言代碼。所述編譯即現(xiàn)有通常意義上從程序源代碼到目標代碼的編譯;所述前編譯是在所述編譯進行前對程序源代碼的預編譯,包括但不限于在進行程序編譯前將程序中的“調(diào)用”(call)進行展開,用實際調(diào)用的代碼替代調(diào)用語句,形成沒有 調(diào)用的程序代碼;所述調(diào)用包括但不限于函數(shù)調(diào)用;所述后編譯是按要求分配到所述串行連接多處理器核結(jié)構中每個核的工作內(nèi)容 及負荷將所述編譯得到目標代碼的劃分為單數(shù)個或復數(shù)個代碼片段,步驟包括但不限于(a)可執(zhí)行的程序代碼進行解析,生成前端碼流;(b)在特定模型上運行、掃描前端碼流,根據(jù)要求分析所需執(zhí)行周期、是否跳轉(zhuǎn)以 及跳轉(zhuǎn)地址等信息,統(tǒng)計掃描結(jié)果,間接確定分割信息;或不掃描前端碼流,根據(jù)預設信息 直接確定分割信息;所述特定模型包括但不限于所述串行連接多處理器核結(jié)構中核的行為 模型;(c)根據(jù)分割信息對可執(zhí)行的程序指令代碼和進行代碼分割,生成所述串行連接 多處理器核結(jié)構中每個處理器核相應的代碼片段。本發(fā)明所述的前編譯方法在程序源代碼編譯前實施,也可以作為編譯器的組成部 分在程序源代碼編譯過程中實施,還可以作為所述串行連接多處理器核結(jié)構的操作系統(tǒng)的 組成部分、或作為驅(qū)動、或作為應用程序,在所述串行連接多處理器核結(jié)構運行時實時實 施。本發(fā)明所述的后編譯方法可以在程序源代碼編譯完成之后實施,也可以作為編譯 器的組成部分在程序源代碼編譯過程中實施,還可以作為包括但不限于所述串行連接多處 理器核結(jié)構的操作系統(tǒng)的組成部分、驅(qū)動、應用程序,在所述串行連接多處理器核結(jié)構運行 時實時實施。當所述后編譯方法實時實施時,可以人為確定所述代碼片段中的相應配置信 息,也可以根據(jù)所述串行連接多處理器核結(jié)構的使用情況動態(tài)地自動產(chǎn)生所述代碼片段中 的相應配置信息,還可以只產(chǎn)生固定的配置信息。通過所述分割,可將現(xiàn)有的應用程序進行程序分割,分段同時執(zhí)行,不但提高了現(xiàn) 有程序在多核/眾核裝置上的運行速度,而且充分發(fā)揮了多核/眾核裝置的效率,同時也保 證了多核/眾核裝置對現(xiàn)有應用程序的兼容。有效地解決了現(xiàn)有應用程序無法充分發(fā)揮多 核/眾核處理器優(yōu)勢的困境。本發(fā)明所述的后編譯方法中,間接確定分割信息的依據(jù)包括但不限于指令執(zhí)行的 周期數(shù)或時間、指令的條數(shù),即可以根據(jù)掃描前端碼流獲得的指令執(zhí)行周期數(shù)或時間,將整 個可執(zhí)行程序代碼分割成相同或相近運行時間的代碼片段,也可以根據(jù)掃描前端碼流獲得 的指令條數(shù),將整個可執(zhí)行程序代碼分割成相同或相近指令條數(shù)的代碼片段;所述直接確 定分割信息的依據(jù)包括但不限于指令的條數(shù),即可以根據(jù)指令的條數(shù),直接將整個可執(zhí)行 程序代碼分割成相同或相近指令條數(shù)的代碼片段。本發(fā)明所述的后編譯方法中,所述可執(zhí)行程序代碼分割時根據(jù)特定規(guī)則盡可能避 免對循環(huán)代碼進行分割。當無法避免對循環(huán)代碼分割時,根據(jù)特定規(guī)則將所述循環(huán)代碼通 過單數(shù)次或復數(shù)次分割形成復數(shù)個更小規(guī)模的循環(huán)代碼。所述復數(shù)個更小規(guī)模的循環(huán)代碼可以分別是相同或不同的代碼片段的組成部分。所述更小規(guī)模的循環(huán)代碼包括但不限于包 含更少的代碼數(shù)目的循環(huán)代碼和代碼執(zhí)行周期數(shù)更少的循環(huán)代碼。本發(fā)明所述的后編譯方法中,所述代碼片段包括但不限于適用于固定處理器核數(shù) 目的所述串行連接多處理器核結(jié)構運行的已分段的可執(zhí)行目標代碼和/或相應配置信息, 適用于所述串行連接多處理器核結(jié)構運行的未分段的可執(zhí)行目標代碼以及包含適用于不 固定核數(shù)目的多種分段信息的相應配置信息,其中分段信息包括但不限于包含代表每段指 令數(shù)目的數(shù)字,代表分段邊界的特定標志,每個代碼片段開始信息的指示表。舉例來說,在一個有1000個處理器核的所述裝置中,可以按最大處理器數(shù)目1000生成一張有1000個項的表,每一項存儲相應指令在所述未分段的可執(zhí)行目標代碼中的位 置信息,兩項之間的指令組合即對應可以在相應單個核上運行的代碼片段。若在運行時用 到了全部1000個處理器核,則每個處理器核運行所述表中相應兩項所指向的未分段的可 執(zhí)行目標代碼位置間的代碼,即每個處理器核運行所述表中對應的一段代碼。若在運行時 只用到了 N個處理器核(N< 1000),則每個處理器核運行所述表中對應的1000/N段代碼, 具體代碼可以根據(jù)表中相應位置信息確定。在每個處理器核上運行的指令除所述分割后的相應代碼片段外,還可以包括額外 的指令。所述額外的指令包括但不限于代碼片段頭部擴展、代碼片段尾部擴展,用于實現(xiàn)不 同處理器核間指令執(zhí)行的平滑過渡。舉例來說,可以在每個代碼片段的末尾加上代碼片段 尾部擴展,將寄存器堆中所有值存儲到數(shù)據(jù)存儲器中的特定位置,在每個代碼片段的開頭 加上代碼片段頭部擴展,從數(shù)據(jù)存儲器中的特定位置中的值讀取到寄存器堆中,以此實現(xiàn) 不同處理器核間的寄存器值傳遞,保證程序的正確運行;當執(zhí)行到代碼片段的末尾時,下一 條指令從所述代碼片段的第一條指令開始。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置,可以構建出一種基于串行多發(fā)射和流 水線層次結(jié)構的可配置多核/眾核裝置,包括復數(shù)個處理器核(ProcessorCore)、復數(shù) 個可配置本地存儲器(configurable local memory)、可配置互聯(lián)結(jié)構(configurable interconnect structure)。其中處理器核,用于執(zhí)行指令,進行運算并得到相應結(jié)果;可配置本地存儲器,用于存儲指令以及所述處理器核間的數(shù)據(jù)傳遞和數(shù)據(jù)保存;可配置互聯(lián)結(jié)構,用于所述可配置多核/眾核裝置內(nèi)各模塊間及與外部的連接。所述可配置多核/眾核裝置還可以包括擴展模塊,以適應更廣泛的需求;所述擴 展模塊包括但不限于單數(shù)個或復數(shù)個以下模塊的部分或全部共享存儲器(shared memory),用于在所述可配置數(shù)據(jù)存儲器溢出的情況下保存 數(shù)據(jù)、傳遞復數(shù)個處理器核間的共享數(shù)據(jù);直接存儲器訪問(DMA)控制器,用于除處理器核外其他模塊對所述可配置本地存 儲器的直接訪問;異常處理(exception handling)模塊,用于處理處理器核、本地存儲器發(fā)生的異 常(exception)本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置中,處 理器核包括運算單元和程序計數(shù)器,還可以包括擴展模塊以適應更廣泛的需求,所述擴展 模塊包括但不限于寄存器堆。所述處理器核執(zhí)行的指令包括但不限于算術運算指令、邏輯運算指令、條件判斷及跳轉(zhuǎn)指令、異常陷入及返回指令;所述算術運算指令、邏輯運算指令 包括但不限于乘法、加/減法、乘加/減、累加、移位、提取、交換操作,且包括任意位寬小于 等于所述處理器核數(shù)據(jù)位寬的定點運算和浮點運算;每個所述處理器核完成單數(shù)條或復數(shù) 條所述指令。所述處理器核的數(shù)目可以根據(jù)實際應用需求進行擴展。本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置中,每 個所述處理器核都有相應的可配置本地存儲器,包括用于存放分割后代碼片段的指令存 儲器(instruction memory)和用于存放數(shù)據(jù)的可配置數(shù)據(jù)存儲器(configurable data memory)。在同一可配置本地存儲器中,所述指令存儲器與可配置數(shù)據(jù)存儲器之間的邊界是 可以根據(jù)不同配置信息改變的。當根據(jù)配置信息確定可配置數(shù)據(jù)存儲器的大小與邊界后, 所述可配置數(shù)據(jù)存儲器包括復數(shù)個數(shù)據(jù)子存儲器。在同一可配置數(shù)據(jù)存儲器中,所述復數(shù)個數(shù)據(jù)子存儲器之間的邊界是可以根據(jù)不 同配置信息改變的。所述數(shù)據(jù)子存儲器通過地址轉(zhuǎn)換能映射到所述多核/眾核裝置的全部 地址空間。所述映射包括但不限于通過查表進行地址轉(zhuǎn)換和通過內(nèi)容尋址存儲器(CAM)匹 配進行地址轉(zhuǎn)換。所述數(shù)據(jù)子存儲器中每項(entry)包含數(shù)據(jù)和標志信息,所述標志信息包括但不 限于有效位(valid bit)、數(shù)據(jù)地址。所述有效位用于指示相應項中存儲的數(shù)據(jù)是否有效。 所述數(shù)據(jù)地址用于指示相應項中存儲的數(shù)據(jù)在所述多核/眾核裝置的全部地址空間應處 于的位置。本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置中,所 述可配置互聯(lián)結(jié)構通過配置用于所述可配置多核/眾核裝置內(nèi)各模塊間及與外部的連接, 包括但不限于處理器核與相鄰可配置本地存儲器的連接,處理器核與共享存儲器的連接、 處理器核與直接存儲器訪問控制器的連接、可配置本地存儲器與共享存儲器的連接、可配 置本地存儲器與直接存儲器訪問控制器的連接、可配置本地存儲器與所述裝置外部的連接 和共享存儲器與所述裝置外部的連接。根據(jù)配置,可以使兩個處理器核及其相應本地存儲器構成前后級連接關系,包括 但不限于前一級處理器核通過其相應的可配置數(shù)據(jù)存儲器將數(shù)據(jù)傳輸?shù)胶笠患壧幚砥骱?。根?jù)應用程序要求,可以通過配置將部分或全部處理器核及其相應本地存儲器通 過可配置互聯(lián)結(jié)構構成單數(shù)個或復數(shù)個串行連接結(jié)構。復數(shù)個所述串行連接結(jié)構可以各自 獨立,也可以部分或全部有相互聯(lián)系,串行、并行或串并混合地執(zhí)行指令。所述串行、并行或串并混合地執(zhí)行指令包括但不限于根據(jù)應用程序要求不同串行連接結(jié)構在同步機制的控 制下運行不同的程序段并行執(zhí)行不同指令、多線程并行運行,根據(jù)應用程序要求不同串行 連接結(jié)構在同步機制的控制下運行相同的程序段、以單指令多數(shù)據(jù)流(SIMD)方式進行相 同指令、不同數(shù)據(jù)的密集運算。本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置中, 所述串行連接結(jié)構中處理器核具有特定的數(shù)據(jù)讀規(guī)則(read policy)、寫規(guī)則(write policy)。所述數(shù)據(jù)讀規(guī)則,即所述串行連接結(jié)構中第一個處理器核的輸入數(shù)據(jù)來源包括但 不限于本身相應的可配置數(shù)據(jù)存儲器、共享存儲器、所述可配置多核/眾核裝置外部。其他任意處理器核的輸入數(shù)據(jù)來源包括但不限于本身相應的可配置數(shù)據(jù)存儲器、前一級處理器 核相應的可配置數(shù)據(jù)存儲器。相應地,任意所述處理器核的輸出數(shù)據(jù)的去向包括但不限于 本身相應的可配置數(shù)據(jù)存儲器、共享存儲器,當擴展存儲器存在時,任意所述處理器核的輸 出數(shù)據(jù)的去向還可以是擴展存儲器。所述數(shù)據(jù)寫規(guī)則,即所述串行連接結(jié)構中第一個處理器核相應可配置數(shù)據(jù)存儲器的輸入數(shù)據(jù)來源包括但不限于處理器核本身、共享存儲器、所述可配置多核/眾核裝置外 部。其他任意處理器核相應可配置數(shù)據(jù)存儲器的輸入數(shù)據(jù)來源包括但不限于處理器核本 身、前一級處理器核相應可配置數(shù)據(jù)存儲器、共享存儲器。所述處理器核及其相應可配置數(shù) 據(jù)存儲器不同來源的輸入數(shù)據(jù)按特定規(guī)則進行多路選擇以確定最終的輸入數(shù)據(jù)。同一個所述可配置數(shù)據(jù)存儲器可以同時被其前后級的兩個處理器核訪問,不同的 處理器核各自訪問所述可配置數(shù)據(jù)存儲器中的不同數(shù)據(jù)子存儲器。所述處理器核可以根據(jù) 特定規(guī)則對同一個可配置數(shù)據(jù)存儲器中不同數(shù)據(jù)子存儲器分別訪問,所述特定規(guī)則包括但 不限于同一個可配置數(shù)據(jù)存儲器中不同數(shù)據(jù)子存儲器互為乒乓緩沖(Ping-pong buffer), 由兩個處理器核分別訪問,在所述前后兩級處理器核均完成對乒乓緩沖的訪問后,進行乒 乓緩沖交換,使原先被前一級處理器核讀/寫的數(shù)據(jù)子存儲器作為被后一級處理器核讀的 數(shù)據(jù)子存儲器,原先被后一級處理器核讀的數(shù)據(jù)子存儲器中所有有效位均被置為無效,并 作為被前一級處理器核讀/寫的數(shù)據(jù)子存儲器。當所述多核/眾核系統(tǒng)中處理器核包含寄存器堆時,還需要具有特定的寄存器值 傳輸規(guī)則,所述寄存器值傳輸規(guī)則,即所述串行連接結(jié)構中任意前級處理器核中的單數(shù)個 或復數(shù)個寄存器值都可以傳輸?shù)饺我夂蠹壧幚砥骱说南鄳拇嫫髦?。所述寄存器值包括?不限于所述處理器核中寄存器堆中寄存器的值。所述寄存器值的傳輸途徑包括但不限于通 過可配置互聯(lián)結(jié)構傳輸,直接通過共享存儲器傳輸,直接通過所述處理器核相應的可配置 數(shù)據(jù)存儲器傳輸,根據(jù)特定指令通過共享存儲器傳輸、根據(jù)特定指令通過所述處理器核相 應的可配置數(shù)據(jù)存儲器傳輸。本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置中,所 述流水線層次結(jié)構中的第二層次即宏觀流水線段可以通過背壓(backpressure)將本宏觀 流水線段的信息傳輸?shù)角耙患壓暧^流水線段,所述前一級宏觀流水線段根據(jù)收到的背壓信 息可知之后的宏觀流水線是否阻塞(stall),結(jié)合本宏觀流水線段的情況,確定本宏觀流水 線段是否阻塞,并將新的背壓信息傳輸?shù)礁耙患壓暧^流水線段,以此實現(xiàn)宏觀流水線的 控制。本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置中,可 以有擴展的共享存儲器,用于在處理器核相應可配置數(shù)據(jù)存儲器溢出的情況下存儲數(shù)據(jù)、 傳遞復數(shù)個處理器核間的共享數(shù)據(jù);還可以有擴展的異常處理(exception handling)模 塊,用于處理處理器核、本地存儲器發(fā)生的異常(exception)。當所述多核/眾核裝置有共享存儲器且向可配置數(shù)據(jù)存儲器存儲數(shù)據(jù)時發(fā)生溢 出,則產(chǎn)生異常,并將被存儲數(shù)據(jù)存儲到共享存儲器中,此時,所述數(shù)據(jù)子存儲器中每項 (entry)包含的標志信息包括但不限于有效位、數(shù)據(jù)地址和數(shù)據(jù)標簽(tag)。所述有效位用 于指示相應項中存儲的數(shù)據(jù)是否有效。所述數(shù)據(jù)地址和數(shù)據(jù)標簽(tag)共同用于指示相應 項中存儲的數(shù)據(jù)在所述多核/眾核裝置的全部地址空間應處于的位置。
所有所述處理器核產(chǎn)生的異常信息均傳輸?shù)疆惓L幚砟K,由異常處理模塊進行 相應處理。所述異常處理模塊可以由所述多核/眾核裝置中的處理器核構成,也可以是額 外的模塊。所述異常信息包括但不限于發(fā)生異常的處理器編號、異常類型。所述對發(fā)生異常的處理器核和/或本地存儲器的相應處理包括但不限于通過背壓信號的傳遞將流水線 是否阻塞的信息傳遞到串行連接結(jié)構中的各個處理器核。本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置中,可 以根據(jù)應用程序要求對處理器核、可配置本地存儲器和可配置互聯(lián)結(jié)構進行配置。所述配 置包括但不限于開啟或關斷處理器核、配置本地存儲器中指令存儲器和數(shù)據(jù)子存儲器的大小/邊界及其中的內(nèi)容、配置互聯(lián)結(jié)構和連接關系。用于所述配置的配置信息的來源包括但不限于所述可配置多核/眾核裝置內(nèi)部 和外部。所述配置可以在運行期間任意時刻根據(jù)應用程序的要求進行調(diào)整。所述配置的配 置方法包括但不限于由處理器核或中央處理器核直接配置、由處理器核或中央處理器核通過直接存儲器訪問控制器配置和外部請求通過直接存儲器訪問控制器配置。本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置具有 三個層次的低功耗技術配置層次、指令層次和應用層次。所述配置層次,根據(jù)配置信息,沒有被用到的處理器核可以進入低功耗狀態(tài);所述低功耗狀態(tài)包括但不限于降低處理器時鐘頻率或切斷電源供應。所述指令層次,當處理器核執(zhí)行到讀取數(shù)據(jù)的指令時,如果該數(shù)據(jù)還沒有準備好, 則所述處理器核進入低功耗狀態(tài),直到所述數(shù)據(jù)準備好,所述處理器核再從低功耗狀態(tài)恢 復到正常工作狀態(tài)。所述數(shù)據(jù)沒有準備好,包括但不限于前一級處理器核還沒有將本級處 理器核需要的數(shù)據(jù)寫入相應數(shù)據(jù)子存儲器。所述低功耗狀態(tài)包括但不限于降低處理器時鐘 頻率或切斷電源供應。所述應用層次,采用全硬件實現(xiàn),匹配空閑(idle)任務特征,確定當前處理器核的使用率(utilization),根據(jù)當前處理器使用率和基準使用率確定是否進入低功耗狀態(tài) 或是否從低功耗狀態(tài)返回。所述的基準使用率可固定不變,也可重新配置或自學習確定,可 以固化在芯片內(nèi)部,也可以在所述裝置啟動時由所述裝置寫入,也可以由軟件寫入。用于匹 配的參考內(nèi)容可以在芯片生產(chǎn)時,固化到芯片內(nèi)部,也可以在所述裝置啟動時由所述裝置 或軟件寫入,還可以自學習寫入,其存儲媒介包括但不限于揮發(fā)性的存儲器、非揮發(fā)性的存 儲器;其寫入方式包括但不限于一次寫入、可多次寫入。所述低功耗狀態(tài)包括但不限于降低 處理器時鐘頻率或切斷電源供應。本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置可以具備自測試能力,能夠在加電工作的情況下不依賴于外部設備進行芯片的自測試。當所述多核/眾核裝置具備自測試能力時,可以將所述多核/眾核裝置中特定的單數(shù)個或復數(shù)個基本元件、運算單元或處理器核用成比較器,對所述多核/眾核裝置中相 應的復數(shù)組其他基本元件、運算單元或處理器核及基本元件、運算單元或處理器核的組合 給予具有特定關系的激勵,并用所述比較器比較所述復數(shù)組其他基本元件、運算單元或處 理器核及基本元件、運算單元或處理器核的的組合的輸出是否符合相應的特定關系。所述 激勵可以來自所述多核/眾核裝置中的特定模塊,也可以來自所述多核/眾核裝置外部。所 述特定關系包括但不限于相等、相反、互逆、互補。所述測試結(jié)果可以被送到所述多核/眾核裝置外部,也可以保存在所述多核/眾核裝置中的存儲器中。所述的自測試可以是在晶圓測試,封裝后集成電路測試或者芯片使用時在所述裝 置啟動時進行測試,也可以人為設定自測試條件及周期,在工作期間定期進行自測試。所述 自測試用到的存儲器包括但不限于揮發(fā)性的存儲器,非揮發(fā)性的存儲器。當所述多核/眾核裝置具備自測試能力時,可以具備自修復能力。當所述測試結(jié)果保存在所述多核/眾核裝置中的存儲器中時,可以對失效處理器核作標記,在對所述多 核/眾核裝置進行配置時,可以根據(jù)相應標記繞過失效處理器核,使所述多核/眾核裝置依 然能正常工作,實現(xiàn)自修復。所述自修復可以是在晶圓測試后進行,封裝后集成電路測試后 進行或者芯片使用時在所述裝置啟動時進行測試后進行,也可以人為設定自測試自修復條 件及周期,在工作期間定期進行自測試后進行。本發(fā)明所述可配置多核/眾核裝置中的復數(shù)個處理器核可以是同構的,也可以是 異構的。本發(fā)明所述可配置多核/眾核裝置中本地指令存儲器中指令字的長度可以是不 固定的。本發(fā)明所述可配置多核/眾核裝置中本地指令存儲器和本地數(shù)據(jù)存儲器各自可 以有單數(shù)組或復數(shù)組讀端口。本發(fā)明所述可配置多核/眾核裝置中,每個處理器核還可以對應復數(shù)個本地指令 存儲器,所述復數(shù)個本地指令存儲器可以是相同大小的,也可以是不同大小的;可以是相同 結(jié)構的,也可以是不同結(jié)構的。當所述復數(shù)個本地指令存儲器中的一個或多個用于響應相 應處理器核取指操作時,所述復數(shù)個本地指令存儲器中的其他本地指令存儲器可以進行指 令更新操作。更新指令的途徑包括但不限于通過直接存儲器訪問控制器更新指令。本發(fā)明所述可配置多核/眾核裝置中的復數(shù)個處理器核可以工作在相同的時鐘 頻率,也可以工作在不同的時鐘頻率。本發(fā)明所述可配置多核/眾核裝置可以具有讀取導致寫的特性(LIS, loadinduced store) 0處理器核對于某個地址數(shù)據(jù)第一次讀取時,從相鄰前一級處理器核 對應的本地數(shù)據(jù)存儲器讀取數(shù)據(jù),同時將讀取到的數(shù)據(jù)寫入本級處理器核對應的本地數(shù)據(jù) 存儲器,之后對該地址數(shù)據(jù)的讀寫都訪問本級對應的本地數(shù)據(jù)存儲器,從而在不增加額外 開銷的情況下實現(xiàn)相鄰前后級本地數(shù)據(jù)存儲器中相同地址數(shù)據(jù)的傳遞。本發(fā)明所述可配置多核/眾核裝置可以具有數(shù)據(jù)預傳遞的特性;處理器核可以從 前一級處理器核對應的本地數(shù)據(jù)存儲器中讀取本處理器核不需要讀寫、但后續(xù)處理器核需 要讀取的數(shù)據(jù),并寫入本級處理器核對應的本地數(shù)據(jù)存儲器,從而實現(xiàn)前后級本地數(shù)據(jù)存 儲器中相同地址數(shù)據(jù)的逐級傳遞。本發(fā)明所述的本地數(shù)據(jù)存儲器還可以包含單數(shù)個或復數(shù)個有效標志和單數(shù)個或 復數(shù)個歸屬標志。所述有效標志用于表示對應的數(shù)據(jù)是否有效。所述歸屬標志用于表示對 應的數(shù)據(jù)當前被哪個處理器核使用。采用所述有效標志和歸屬標志能避免使用乒乓緩沖, 提高存儲器的使用效率,且多個處理器核可以同時訪問同一個數(shù)據(jù)存儲器,便于數(shù)據(jù)交換。本發(fā)明所述的通過可配置互聯(lián)結(jié)構傳輸寄存器值,包括但不限于采用大量硬連線 直接將所述處理器核中寄存器的值一次全部傳輸?shù)胶蠹壧幚砥骱说募拇嫫髦?,采用移位?存器的方法將所述處理器核中寄存器的值依次移位傳輸?shù)胶蠹壧幚砥骱说募拇嫫髦小?br>
所述寄存器值的傳輸途徑還可以是根據(jù)寄存器讀寫記錄表決定需要傳輸?shù)募拇?器。本發(fā)明所述的寄存器讀寫記錄表用于記錄寄存器對相應本地數(shù)據(jù)存儲器的讀寫情況。 如果寄存器的值已經(jīng)被寫入本級處理器核對應的本地數(shù)據(jù)存儲器且之后該寄存器的值沒 有發(fā)生改變,則可以僅由后級處理器核從本級處理器核對應的本地數(shù)據(jù)存儲器中相應地址 讀取數(shù)據(jù),從而完成所述寄存器的傳遞,不需要單獨傳輸該寄存器值到后級處理器。舉例而言,當寄存器的值寫入相應本地數(shù)據(jù)存儲器時,所述寄存器讀寫記錄表中相應的項被清“0”,當數(shù)據(jù)寫入寄存器時,所述寄存器讀寫記錄表中相應的項被置“1”。在 進行寄存器值傳輸時,只傳輸寄存器讀寫記錄表中項為“1”的相應寄存器的值。所述數(shù)據(jù) 寫入所述寄存器堆中寄存器,包括但不限于從相應本地數(shù)據(jù)存儲器讀取數(shù)據(jù)到所述寄存器 堆中的寄存器,將指令執(zhí)行的結(jié)果寫回寄存器堆中的寄存器。當本發(fā)明所述的基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置中 處理器核數(shù)目確定時,還可以根據(jù)分割后得到的確定的代碼片段對代碼片段頭部擴展和代 碼片段尾部擴展進行優(yōu)化,減少需要傳遞的寄存器的數(shù)量。舉例而言,在通常情況下,代碼片段尾部擴展包含了將全部寄存器值存儲到特定 本地數(shù)據(jù)存儲器地址的指令,代碼片段頭部擴展包含了將相應地址中的值讀入寄存器的指 令,兩者配合實現(xiàn)寄存器值平滑傳遞。當代碼片段確定時,可以根據(jù)代碼片段中的指令,減 少代碼片段頭部擴展和代碼片段尾部擴展中存儲和/或讀取指令的條數(shù)。如果在本級處理器核對應的代碼片段中,在寫入某一寄存器之前沒有使用過該寄 存器內(nèi)的值,則可以省去前級處理器核對應的代碼片段尾部擴展中存儲該寄存器值的指令 和本級處理器核對應的代碼片段頭部擴展中從本地數(shù)據(jù)存儲器中讀取數(shù)據(jù)到該寄存器的 指令。如果在前級處理器核對應的代碼片段中,某一寄存器的值在存儲到本地數(shù)據(jù)存儲 器之后就沒有改變過,則可以省去前級處理器核對應的代碼片段尾部擴展中存儲該寄存器 值的指令,并在本級處理器核對應的代碼片段頭部擴展中添加相關指令,使能夠從本地數(shù) 據(jù)存儲器中相應地址讀取數(shù)據(jù)到該寄存器。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置中,當復數(shù)個處理器核對應的代碼片段執(zhí)行 過程中均會轉(zhuǎn)移到同一地址執(zhí)行一段代碼,并在該段代碼執(zhí)行完畢轉(zhuǎn)移回各自對應的代碼 片段時,可以將所述同一地址的代碼重復存儲在所述復數(shù)個處理器核對應的本地指令存儲 器中;所述同一地址的代碼包括但不限于函數(shù)調(diào)用、循環(huán)。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置中,所述處理器核可以訪問除所述處理器核 外的處理器核的本地指令存儲器;當復數(shù)個處理器核執(zhí)行完全相同的代碼,且所述代碼長 度超過單個處理器核對應的本地指令存儲器大小時,可以將所述代碼依次存儲在復數(shù)個處 理器核對應的本地指令存儲器中;運行時,所述復數(shù)個處理器核中的任一處理器核先從存 儲所述完全相同的代碼中第一段代碼的本地指令存儲器讀取指令并執(zhí)行,第一段代碼執(zhí)行 完畢后再從存儲所述代碼中第二段代碼的本地指令存儲器讀取指令并執(zhí)行,依此類推,直 到全部所述完全相同的代碼執(zhí)行完畢。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置中,所述復數(shù)個處理器核可以同步執(zhí)行所述 完全相同的代碼中的各段代碼,也可以異步執(zhí)行所述完全相同的代碼中的各段代碼;所述 復數(shù)個處理器核可以并行執(zhí)行所述完全相同的代碼中的各段代碼,也可以串行執(zhí)行所述完全相同的代碼中的各段代碼;還可以串并混合地執(zhí)行所述完全相同的代碼中的各段代碼。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置中,所述處理器核還可以對應復數(shù)個本地指令存儲器,所述復數(shù)個本地指令存儲器可以是相同大小的,也可以是不同大小的;可以是相 同結(jié)構的,也可以是不同結(jié)構的;當所述復數(shù)個本地指令存儲器中的一個或多個用于響應 相應處理器核取指操作時,所述復數(shù)個本地指令存儲器中的其他本地指令存儲器可以進行 指令更新操作;更新指令的途徑可以是通過直接存儲器訪問控制器更新指令。傳統(tǒng)片上系統(tǒng)(SoC,SyStem on Chip)中除處理器外,其他功能模塊都是用硬連線 邏輯實現(xiàn)的專用集成電路模塊。這些功能模塊的性能要求很高,采用傳統(tǒng)的處理器難以達 到性能要求,因此無法以傳統(tǒng)處理器替代這些專用集成電路模塊。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置中,可以將單數(shù)個或復數(shù)個處理器核及其相 應本地存儲器構成高性能的多核連接結(jié)構,對多核連接結(jié)構進行配置、在相應本地指令存 儲器中放入對應的代碼片段,使所述多核連接結(jié)構實現(xiàn)特定的功能,能替代片上系統(tǒng)中的 專用集成電路模塊。所述多核連接結(jié)構相當于片上系統(tǒng)中的功能模塊,如圖像解壓縮模塊 或加解密模塊。這些功能模塊再由系統(tǒng)總線連接,以實現(xiàn)片上系統(tǒng)。本發(fā)明所述的處理器核及其相應本地存儲器與相鄰處理器核及其相應本地存儲 器之間的數(shù)據(jù)傳輸通道為本地連接(local interconnection),單數(shù)個所述處理器核及其 相應本地存儲器或通過本地連接連在一起的復數(shù)個處理器核及其相應本地存儲器構成的 多核連接結(jié)構即對應片上系統(tǒng)的功能模塊。本發(fā)明所述的對應于片上系統(tǒng)中功能模塊的多核連接結(jié)構與其他所述對應于片 上系統(tǒng)中功能模塊的多核連接結(jié)構之間的數(shù)據(jù)傳輸通道為系統(tǒng)總線(system bus)。通過所 述系統(tǒng)總線將復數(shù)個對應于片上系統(tǒng)中功能模塊的多核連接結(jié)構連接起來,就能實現(xiàn)通常 意義上的片上系統(tǒng)?;诒景l(fā)明技術方案實現(xiàn)的片上系統(tǒng),具有傳統(tǒng)片上系統(tǒng)不具備的可配置性。通 過對基于本發(fā)明所述的數(shù)據(jù)處理裝置進行不同配置,可以得到不同的片上系統(tǒng)。所述配置 可以在運行過程中實時進行,從而可以在運行過程中實時改變片上系統(tǒng)功能??梢詣討B(tài)地 重新配置處理器核及其相應本地存儲器并動態(tài)改變相應本地指令存儲器中的代碼片段,從 而改變所述片上系統(tǒng)的功能。根據(jù)本發(fā)明技術方案,所述對應于片上系統(tǒng)中功能模塊的多核連接結(jié)構內(nèi)部處理 器核及其相應本地存儲器與其他處理器核及其相應本地存儲器間用于數(shù)據(jù)傳輸?shù)耐穼?于功能模塊內(nèi)部的本地連接。通過所述功能模塊內(nèi)部的本地連接傳輸數(shù)據(jù),通常需要占用 提出傳輸請求的處理器核的操作。本發(fā)明所述的系統(tǒng)總線,可以是所述本地連接,也可以是 不需要占用處理器核的操作即能完成不同處理器核及其相應本地存儲器間數(shù)據(jù)傳輸?shù)臄?shù) 據(jù)傳輸通道。所述不同處理器核及其相應本地存儲器可以是相鄰的,也可以是不相鄰的。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置中,構成系統(tǒng)總線的一個方法是采用復數(shù)個 位置固定的連接裝置建立數(shù)據(jù)傳輸通道。任意所述多核連接結(jié)構的輸入和輸出都與相近的 連接裝置通過單數(shù)根或復數(shù)根硬連線相連。所有所述連接裝置之間也通過單數(shù)根或復數(shù)根 硬連線相連。所述連接裝置、所述多核連接結(jié)構與所述連接裝置間的連線、及所述連接裝置 間的連線共同構成所述系統(tǒng)總線。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置中,構成系統(tǒng)總線的另一個方法是建立數(shù)據(jù)傳輸通道,使任意處理器核及其相應本地數(shù)據(jù)存儲器能與其他任意處理器核及其相應本地 數(shù)據(jù)存儲器進行數(shù)據(jù)傳遞。所述數(shù)據(jù)傳遞的途徑包括但不限于通過共享存儲器傳遞、通過 直接存儲器訪問控制器傳遞、通過專用總線或網(wǎng)絡傳遞。舉例而言,一種方法是,可以事先在一些處理器核及其相應本地數(shù)據(jù)存儲器中的 兩兩處理器核及其相應本地數(shù)據(jù)存儲器之間布置好單數(shù)根或復數(shù)根硬連線,所述硬連線可 以是可配置的;當這些處理器核及其相應本地數(shù)據(jù)存儲器中的任意兩個處理器核及其相應 本地數(shù)據(jù)存儲器處于不同的多核連接結(jié)構中、即處于不同的功能模塊中時,所述兩個處理 器核及其相應本地數(shù)據(jù)存儲器之間的硬連線即可作為所述兩個多核連接結(jié)構間的系統(tǒng)總 線。第二種方法是,可以使全部或部分所述處理器核及其相應本地數(shù)據(jù)存儲器能通過直接存儲器訪問控制器訪問到其他的處理器核及其相應本地數(shù)據(jù)存儲器。當這些處理器核 及其相應本地數(shù)據(jù)存儲器中的任意兩個處理器核及其相應本地數(shù)據(jù)存儲器處于不同的多 核連接結(jié)構中、即處于不同的功能模塊中時,就可以在實時運行過程中,根據(jù)需要進行所述 處理器核及其相應本地數(shù)據(jù)存儲器與另一個所述處理器核及其相應本地數(shù)據(jù)存儲器間的 數(shù)據(jù)傳遞,實現(xiàn)兩個多核連接結(jié)構間的系統(tǒng)總線。第三種方法是,可以在全部或部分所述處理器核及其相應本地數(shù)據(jù)存儲器上實現(xiàn) 片上網(wǎng)絡(Network on Chip)功能,即當所述處理器核及其相應本地數(shù)據(jù)存儲器的數(shù)據(jù)傳 輸?shù)狡渌幚砥骱思捌湎鄳镜財?shù)據(jù)存儲器時,由可配置互聯(lián)網(wǎng)絡決定數(shù)據(jù)的去向,從而 構成一條數(shù)據(jù)通路,實現(xiàn)數(shù)據(jù)傳輸。當這些處理器核及其相應本地數(shù)據(jù)存儲器中的任意兩 個處理器核及其相應本地數(shù)據(jù)存儲器處于不同的多核連接結(jié)構中、即處于不同的功能模塊 中時,就可以在實時運行過程中,根據(jù)需要進行所述處理器核及其相應本地數(shù)據(jù)存儲器與 另一個所述處理器核及其相應本地數(shù)據(jù)存儲器間的數(shù)據(jù)傳遞,實現(xiàn)兩個多核連接結(jié)構間的 系統(tǒng)總線。上述三種方法,第一種方法采用硬連線結(jié)構實現(xiàn)的系統(tǒng)總線,其連接是靜態(tài)的,第 二種采用直接存儲器訪問、第三種方法采用片上網(wǎng)絡方法,其連接是動態(tài)的。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置中,所述處理器核可以具有快速條件判斷機 制,用以確定分支轉(zhuǎn)移是否執(zhí)行;所述快速條件判斷機制可以是用于判斷循環(huán)條件的計數(shù) 器,也可以是用于判斷分支轉(zhuǎn)移及循環(huán)條件的硬件有限狀態(tài)機。本發(fā)明所述配置層次低功耗,還可以根據(jù)配置信息,使特定的處理器核進入低功 耗狀態(tài);所述特定的處理器核包括但不限于沒有被用到的處理器核,工作負載相對較低的 處理器核;所述低功耗狀態(tài)包括但不限于降低處理器時鐘頻率或切斷電源供應。本發(fā)明所述的數(shù)據(jù)處理的方法與裝置中,還可以包括單數(shù)個或復數(shù)個專用處理模 塊。所述專用處理模塊能作為宏模塊供所述處理器核及其相應本地存儲器調(diào)用,也可以作 為獨立的處理模塊接收所述處理器核及其相應本地存儲器的輸出,并將處理結(jié)果送往所述 處理器核及其相應本地存儲器或其他處理器核及其相應本地存儲器。向所述專用處理模塊 輸出的處理器核及其相應本地存儲器與接收所述專用處理模塊輸出的處理器核及其相應 本地存儲器可以是同一處理器核及其相應本地存儲器,也可以是不同處理器核及其相應本 地存儲器。所述專用處理模塊包括但不限于快速傅立葉變換(FFT)模塊、熵編碼模塊、熵解 碼模塊、矩陣乘法模塊、卷積編碼模塊、維特比碼(Viterbi Code)解碼模塊、渦輪碼(TurboCode)解碼模塊。以矩陣乘法模塊為例,如果使用單個所述處理器核進行大規(guī)模的矩陣乘法,需要大量時鐘周期,限制了數(shù)據(jù)吞吐率的提高;如果使用多個所述處理器核實現(xiàn)大規(guī)模矩陣乘 法,雖然能減少執(zhí)行周期數(shù),但增加了處理器核間的數(shù)據(jù)傳遞量,且占用大量處理器資源。 采用專用的矩陣乘法模塊,可以在少數(shù)個周期內(nèi)完成大規(guī)模矩陣乘法。在對程序進行劃分 時,可以將該大規(guī)模矩陣乘法前的操作分配到若干個處理器核,即前組處理器核中,將該大 規(guī)模矩陣乘法后的操作分配到另外的若干個處理器核,即后組處理器核中,前組處理器核 的輸出中需要參與該大規(guī)模矩陣乘法的數(shù)據(jù)被送到專用的矩陣乘法模塊,經(jīng)處理后再將結(jié) 果送往后組處理器核,前組處理器核的輸出中不需要參與該大規(guī)模矩陣乘法的數(shù)據(jù)則被直 接送往后組處理器核。有益效果首先,本發(fā)明所述的數(shù)據(jù)處理的方法與裝置,能夠?qū)⒋械某绦虼a分割成適應 于串行連接多處理器核結(jié)構中各個處理器核運行的代碼片段,針對不同數(shù)目的處理器核根 據(jù)不同的分割規(guī)則分割成不同大小和數(shù)目的代碼片段,適合可擴展(Scalable)的多核/眾 核裝置/系統(tǒng)應用。其次,根據(jù)本發(fā)明所述的數(shù)據(jù)處理的方法與裝置,將代碼片段分配給串行連接多 處理器核結(jié)構中各個處理器核運行,每個處理器核執(zhí)行特定的指令,全部處理器核串行連 接實現(xiàn)程序的完整功能,從完整程序代碼中分割出來的代碼片段之間用到的數(shù)據(jù)通過專門 的傳輸途徑傳輸,幾乎沒有數(shù)據(jù)相關性問題,實現(xiàn)了真正的多發(fā)射。在所述串行連接多處理 器核結(jié)構中,其多發(fā)射的發(fā)射數(shù)量即等于處理器核的數(shù)量,大大提高了運算單元的利用率, 從而實現(xiàn)串行連接多處理器核結(jié)構、乃至裝置/系統(tǒng)的高吞吐率。再次,用本地存儲器替代了處理器中通常會有的緩存(cache)。每個處理器核相應 的本地存儲器中保存了該處理器核要用到的所有指令和數(shù)據(jù),做到了 100%的訪問命中率 (hit rate),解決了緩存缺失(cache miss)造成的訪問外部低速存儲器的速度瓶頸問題, 進一步提高了裝置/系統(tǒng)的整體性能。再次,本發(fā)明所述的多核/眾核裝置具有三個層次的低功耗技術,不但能夠采用 如切斷未被使用的處理器核的電源等方法實現(xiàn)粗粒度的功耗管理,還能根據(jù)數(shù)據(jù)驅(qū)動,進 行針對指令層次的細粒度功耗管理,更能用硬件的方式實施自動實時調(diào)整處理器核時鐘頻 率,在保證處理器核正常工作的前提下,有效降低了處理器核運行中的動態(tài)功耗,實現(xiàn)處理 器核按需求調(diào)整時鐘頻率,且盡量減少人為的干預實施。同時由于采用硬件的方式實現(xiàn),速 度快,能夠更有效的實現(xiàn)處理器時鐘頻率的實時調(diào)整。最后,采用本發(fā)明技術方案,僅需要編程和配置就可實現(xiàn)片上系統(tǒng),能縮短從設計 到產(chǎn)品上市之間的研發(fā)周期。而且,只需要重新編程和重配置,就能使同一個硬件產(chǎn)品實現(xiàn) 不同的功能。
雖然該發(fā)明可以以多種形式的修改和替換來擴展,說明書中也列出了一些具體的 實施圖例并進行詳細闡述。應當理解的是,發(fā)明者的出發(fā)點不是將該發(fā)明限于所闡述的特 定實施例,正相反,發(fā)明者的出發(fā)點在于保護所有基于由本權利聲明定義的精神或范圍內(nèi)進行的改進、等效轉(zhuǎn)換和修改。 圖1是以高級語言程序和匯編語言程序的分割和分配為例對本發(fā)明進行說明的 流程實施例。圖2是本發(fā)明所述后編譯方法中處理程序循環(huán)的實施例。圖3是本發(fā)明所述基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置示 意圖。圖4是地址映射方式的實施例。圖5是數(shù)據(jù)在核間傳輸?shù)膶嵤├?。圖6是背壓、異常處理及數(shù)據(jù)存儲器與共享存儲器之間連接的實施例。圖7是本發(fā)明所述自測試自修復方法與結(jié)構實施例。圖8 (a)是相鄰處理器核寄存器值傳輸?shù)囊环N實施例。圖8 (b)是相鄰處理器核寄存器值傳輸?shù)牡诙N實施例。圖9是相鄰處理器核寄存器值傳輸?shù)牡谌N實施例。圖10(a)是基于本發(fā)明處理器核及對應本地存儲器組成的一種實施例。圖10(b)是基于本發(fā)明處理器核及對應本地存儲器組成的另一種實施例。圖10(c)是基于本發(fā)明處理器核及對應本地存儲器中有效標志位和歸屬標志位 的實施例。圖11(a)是目前現(xiàn)有的片上系統(tǒng)的典型結(jié)構。圖11(b)是基于本發(fā)明技術方案實現(xiàn)片上系統(tǒng)的一種實施例。圖11(c)是基于本發(fā)明技術方案實現(xiàn)片上系統(tǒng)的另一種實施例。圖12(a)是本發(fā)明技術方案中前編譯的實施例。圖12(b)是本發(fā)明技術方案中后編譯的實施例。圖13(a)是本發(fā)明所述基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝 置另一個示意圖。圖13(b)是本發(fā)明所述基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝 置通過配置形成的多核串行結(jié)構示意圖。圖13(c)是本發(fā)明所述基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝 置通過配置形成的多核串并行混合結(jié)構示意圖。圖13(d)是本發(fā)明所述基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝 置通過配置形成的多個多核結(jié)構的示意圖。
具體實施例方式
圖1是以高級語言程序和匯編語言程序的分割和分配為例對本發(fā)明進行說明的 流程實施例。首先經(jīng)前編譯(103)步驟將高級語言程序(101)和/或匯編語言程序(102) 中的調(diào)用展開得到調(diào)用展開后的高級語言代碼和/或匯編語言代碼。然后將調(diào)用展開后的 高級語言代碼和/或匯編語言代碼通過編譯器編譯(104)得到符合程序執(zhí)行順序的匯編代 碼,再進行后編譯(107);如果程序中只有匯編語言代碼,且已經(jīng)符合程序執(zhí)行順序,則可 以省去編譯(104),直接進行后編譯(107)。進行后編譯(107)時,在本實施例中,以多核裝 置的結(jié)構信息(106)為依據(jù),在處理器核的行為模型(108)上運行匯編代碼并分割,得到配置信息(110),同時產(chǎn)生相應配置引導程序(109)。最后,由所述裝置中的一個處理器核 (111)直接或通過DMA控制器(112)對相應的復數(shù)個處理器核(113)進行配置。在圖2中,指令分割器首先在步驟一(201)讀入前端碼流片斷,再在步驟二(202) 讀入前端碼流相關信息。然后進入步驟三(203)判斷該碼流片斷是否循環(huán),如果不循環(huán),則 進入步驟九(209)按照常規(guī)處理碼流片斷進行處理,如果循環(huán),則進入步驟四(204)首先讀 入循環(huán)周期數(shù)M,再進入步驟五(205)讀入本程序段可以容納的周期數(shù)N。在步驟六(206) 判斷循環(huán)周期數(shù)M是否大于可以容納的周期數(shù)N,如果循環(huán)周期數(shù)M大于可以容納的周期數(shù) N,則進入步驟七(207)將循環(huán)分割為一個執(zhí)行N周的小循環(huán)和一個M-N周的小循環(huán),并在 步驟八(208)將M-N重新賦值給M,同時進入下一程序段循環(huán),直到滿足循環(huán)周期數(shù)小于可 以容納的周期數(shù)。通過該方法,可以有效的解決循環(huán)周期數(shù)大于程序段可以容納的周期數(shù) 的情況。圖3是本發(fā)明所述基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置示意圖。在本實施例中,該裝置由若干處理器核(301)、可配置本地存儲器(302)和可配置互 聯(lián)結(jié)構(303)構成。在本實施例中,每個處理器核(301)對應其下方的可配置本地存儲器 (302),兩者一起構成所述宏觀流水線的一級。通過配置可配置互聯(lián)結(jié)構(303),可以將多個 處理器核(301)及其相應可配置本地存儲器(302)連接成串行連接結(jié)構。多個串行連接結(jié) 構可以各自獨立,也可以部分或全部有相互聯(lián)系,串行、并行或串并混合地運行程序。圖4是地址映射方式的實施例。圖4(a)采用查找表的方法實現(xiàn)地址查找。以16 位地址為例,64K地址空間分為多塊單個IK地址空間的小存儲器(403),采用順序?qū)懭氲姆?式,一塊存儲器寫完后,再寫入其他塊。每寫完一次,塊內(nèi)地址指針(404)自動指向下一個 有效位為0的可用表項,寫入時將表項的有效位置1。每個表項寫入數(shù)據(jù)同時將其地址寫 入查找表(402)。以寫入地址BFCO的值為例,此時地址指針(404)指向存儲器(403)的2 號表項,將對應數(shù)據(jù)寫入2號表項時,在查找表(402)對應地址BFCO中寫入2,從而建立地 址映射關系。在讀取數(shù)據(jù)時,由地址根據(jù)查找表(402)來找到對應表項,讀出所存數(shù)據(jù)。圖 4 (b)采用CAM陣列的方法實現(xiàn)地址查找。以16位地址為例,64K地址空間分為多塊單個IK 地址空間的小存儲器(403),采用順序?qū)懭氲姆绞?,一塊存儲器寫完后,再寫入其他塊。每 寫完一次,塊內(nèi)地址指針(406)自動指向下一個有效位為0的可用表項,寫入時將表項的有 效位置1。每個表項寫入數(shù)據(jù)同時將其指令地址寫入CAM陣列(402)的下一個表項。以寫 入地址BFCO的值為例,此時地址指針(406)指向存儲器(403)的2號表項,將對應數(shù)據(jù)寫 入2號表項時,在CAM陣列(405)的下一個表項寫入指令地址BFC0,從而建立地址映射關 系。在讀取數(shù)據(jù)時,輸入指令地址與CAM陣列所存的所有指令地址相比較來找到對應表項, 讀出所存數(shù)據(jù)。圖5是數(shù)據(jù)在核間傳輸?shù)膶嵤├?。所有?shù)據(jù)存儲器均位于處理器核之間,且分為 邏輯意義上的上下兩部分。其中上部分用于數(shù)據(jù)存儲器上面的處理器核的讀寫,下部分僅 用于讀取數(shù)據(jù)供數(shù)據(jù)存儲器下面的處理器核使用。處理器核運行程序的同時,數(shù)據(jù)從上面 的數(shù)據(jù)存儲器向下接力傳遞。三選一選擇器(502、509)可選擇遠處傳來的數(shù)據(jù)(506)送入 數(shù)據(jù)存儲器(503、504)。在處理器核(510、511)不做Store指令時,數(shù)據(jù)存儲器(501、503) 的下部分分別通過三選一選擇器(502、509)寫入對應的下一個數(shù)據(jù)存儲器(503、504)的上 部分,同時標志寫入行的有效位V為1。在做Store指令時,寄存器堆只向下面的數(shù)據(jù)存儲器寫值。在Load指令需要取相應地址的數(shù)據(jù)時,二選一選擇器(505、507)分別由數(shù)據(jù)存儲器(503、504)的有效位V決定是從對應上面的數(shù)據(jù)存儲器(501、503)或下面的數(shù)據(jù)存儲器 (503,504)中取數(shù)。如果數(shù)據(jù)存儲器(503、504)中某表項的有效位V為1,即標志數(shù)據(jù)已經(jīng) 從上面的數(shù)據(jù)存儲器(501、503)寫入更新,則在不選擇遠處傳來的數(shù)據(jù)(506)的情況下,三 選一選擇器(502、509)分別選擇處理器核(510、511)的寄存器堆輸出作為輸入,從而保證 所存數(shù)據(jù)是經(jīng)過處理器核(510、511)處理后的最新值。在數(shù)據(jù)存儲器(503)的上部分被新 數(shù)據(jù)寫入時,數(shù)據(jù)存儲器(503)的下部分向數(shù)據(jù)存儲器(504)的上部分傳輸數(shù)據(jù)。數(shù)據(jù)傳 輸時使用指針標志正在傳輸數(shù)據(jù)的表項,當指針指向最后一個表項時,標志傳輸即將完成。 一段程序運行完畢時,數(shù)據(jù)應已完成向下一個存儲器的傳輸。在下一段程序運行時,數(shù)據(jù)存 儲器(501)的上部分向數(shù)據(jù)存儲器(503)的下部分傳輸數(shù)據(jù),數(shù)據(jù)存儲器(503)的上部分 向數(shù)據(jù)存儲器(504)的下部分傳輸數(shù)據(jù),數(shù)據(jù)存儲器(504)的上部分向下傳輸數(shù)據(jù),從而構 成乒乓傳輸結(jié)構。所有數(shù)據(jù)存儲器都按所需指令空間大小劃分出一部分用于指令的存儲, 即數(shù)據(jù)存儲器和指令存儲器在物理上是不分開的。圖6是背壓、異常處理及數(shù)據(jù)存儲器與共享存儲器之間連接的實施例。本實施例 中由DMA控制器(616)向指令存儲器(601、609、610、611)寫入相應代碼片段(615)。處理 器核(602、604、606、608)運行相應指令存儲器(601、609、610、611)中的代碼,并讀寫相應 的數(shù)據(jù)存儲器(603、605、607、612)。以處理器核(604)、數(shù)據(jù)存儲器(605)及后一級處理器 核(606)為例,前后兩級處理器核(604、606)都對數(shù)據(jù)存儲器(605)有訪問,只有在前級 處理器核(604)完成寫數(shù)據(jù)存儲器(605)且后級處理器核(606)完成讀數(shù)據(jù)存儲器(605) 后,數(shù)據(jù)存儲器(605)中的數(shù)據(jù)子存儲器才能做乒乓交換。背壓信號(614)用于由后級處理 器核(606)通知數(shù)據(jù)存儲器(605)是否已完成讀操作。背壓信號(613)用于由數(shù)據(jù)存儲器 (605)通知前級處理器核(604)是否有溢出,并傳遞由后級處理器核(606)傳輸來的背壓信 號。前級處理器核(604)根據(jù)本身運行情況和由數(shù)據(jù)存儲器(605)傳輸來的背壓信號,判斷 宏觀流水線是否阻塞、決定是否對數(shù)據(jù)存儲器(605)中的數(shù)據(jù)子存儲器做乒乓交換,并產(chǎn) 生背壓信號繼續(xù)向前一級傳遞。通過如此處理器核到數(shù)據(jù)存儲器再到處理器核的反向背壓 信號傳遞,即可控制宏觀流水線的運行。所有數(shù)據(jù)存儲器(603,605,607,612)均通過連接 (619)與共享存儲器(618)連接。當某個數(shù)據(jù)存儲器所需寫入或讀出的地址在其自身之外 時,發(fā)生地址異常,進入共享存儲器(618)中查找地址,找到后將數(shù)據(jù)寫入該地址或?qū)⒃摰?址的數(shù)據(jù)讀出。當處理器核(608)需要用到數(shù)據(jù)存儲器(605)中的數(shù)據(jù)時,也發(fā)生異常,數(shù) 據(jù)存儲器(605)通過共享存儲器(618)將數(shù)據(jù)傳輸?shù)教幚砥骱?608)中。處理器核和數(shù)據(jù) 存儲器產(chǎn)生的異常信息均通過專用通道(620)傳輸?shù)疆惓L幚砟K(617)。在本實施例中, 以處理器核中的運算結(jié)果溢出為例,異常處理模塊(617)控制處理器核對溢出的運算結(jié)果 做限輻(saturation)操作;以數(shù)據(jù)存儲器溢出為例,異常處理模塊(617)控制數(shù)據(jù)存儲器 訪問共享存儲器,將數(shù)據(jù)存儲到共享存儲器中;在此過程中,異常處理模塊(617)發(fā)送信號 到所述處理器核或數(shù)據(jù)存儲器,使之阻塞,等完成異常處理操作后再恢復運行,其他處理器 核及數(shù)據(jù)存儲器通過背壓傳遞而來的信號各自確定自身是否阻塞。請參閱圖7,該圖為所述自測試自修復方法與結(jié)構實施例。在該自測試自修復結(jié) 構(701)中,向量生成器(702)產(chǎn)生的測試向量同步送到各處理器核,測試向量分配控制器 (703)控制各處理器核與向量生成器(702)的連接關系,運算結(jié)果分發(fā)控制器(709)控制各處理器核與比較器的連接關系,處理器核通過比較器和其他處理器核進行運算結(jié)果的比較,在本實施例中,每個處理器核可以和相鄰的其他處理器核進行比較,如處理器核(704) 可以通過比較邏輯(708)和處理器核(705、706、707)進行比較。在該實施例中,每個比較 邏輯可以包含一個或者多個比較器,如果一個比較邏輯有一個比較器,則每個處理器核依 次和相鄰的其他多個處理器核進行比較,如果一個比較邏輯有多個比較器,則每個處理器 核同時和相鄰的其他多個處理器核進行比較,測試結(jié)果直接從各比較邏輯寫入測試結(jié)果表 (710)。請參閱圖8,圖8給出了相鄰處理器核寄存器值傳輸?shù)娜N實施例。在圖8 (a)對應的實施例中,處理器核具有包含31個32位通用寄存器的寄存器堆 (801),在傳遞前級處理器核(802)中所有通用寄存器值到本級處理器核(803)時,可以用 992根硬連線直接將前級處理器核(802)所有通用寄存器的每一位的輸出端與本級處理器 核(803)所有通用寄存器的每一位的輸入端通過多路選擇器一一對應連通。傳遞寄存器值 時,在一個周期內(nèi)即可將前級處理器核(802)中31個32位通用寄存器的值全部傳遞到本 級處理器核(803)。圖8(a)中具體顯示了一個通用寄存器中一位(804)的硬連線連接方 法,其余991位的硬連線連接方法與該位(804)相同。前級處理器核(802)中相應位(805) 的輸出端(806)通過硬連線(807)與本級處理器核(803)中該位(804)的輸入端通過多路 選擇器(808)連接。當處理器核執(zhí)行算術、邏輯等運算時,多路選擇器(808)選擇來源于本 級處理器核的數(shù)據(jù)(809);當處理器核執(zhí)行取數(shù)操作時,如果該數(shù)據(jù)在本級處理器核對應 的本地存儲器中已存在,則選擇來源于本級處理器核的數(shù)據(jù)(809),否則選擇來源于前級處 理器核傳輸而來的數(shù)據(jù)(810);當傳遞寄存器值時,多路選擇器(808)選擇來源于前級處理 器核傳輸而來的數(shù)據(jù)(810)。全部992位同時傳輸,即可在一個周期內(nèi)完成整個寄存器堆值 的傳遞。在圖8(b)對應的實施例中,相鄰處理器核(820、822)各自具有包含復數(shù)個32位 通用寄存器的寄存器堆(821、823)。在從前級處理器核(820)向本級處理器核(822)傳遞 寄存器值時,可以用32根硬連線將前級處理器核(820)中寄存器堆(821)的數(shù)據(jù)輸出端 (829)與連接在本級處理器核(822)中寄存器堆(823)數(shù)據(jù)輸入端(830)上的多路選擇器 (827)的輸入連接,多路選擇器(827)的輸入分別為本級處理器核來的數(shù)據(jù)(824)和通過 硬連線(826)傳送來的從前級處理器核來的數(shù)據(jù)(825),當處理器核執(zhí)行算術、邏輯等運算 時,多路選擇器(827)選擇來源于本級處理器核的數(shù)據(jù)(824);當處理器核執(zhí)行取數(shù)操作 時,如果該數(shù)據(jù)在本級處理器核對應的本地存儲器中已存在,則選擇來源于本級處理器核 的數(shù)據(jù)(824),否則選擇來源于前級處理器核傳輸而來的數(shù)據(jù)(825)當傳遞寄存器值時,多 路選擇器(827)選擇來源于前級處理器核傳輸而來的數(shù)據(jù)(825)。由寄存器堆(821、823) 本身對應的寄存器地址產(chǎn)生模塊(828、832)產(chǎn)生需要傳遞寄存器值的寄存器地址送到寄 存器堆(821、823)的地址輸入端(831、833),分多次將所述寄存器的值通過硬連線(826)和 多路選擇器(827)從寄存器堆(821)傳遞的寄存器堆(823)。這樣,可以在只增加少量硬連 線的情況下,利用多個周期內(nèi)完成寄存器堆內(nèi)全部或部分寄存器值的傳遞。在圖9對應的實施例中,相鄰處理器核(940、942)各自具有包含復數(shù)個32位通用 寄存器的寄存器堆(941、943)。在從前級處理器核(940)向本級處理器核(942)傳遞寄存 器值時,可以先由前級處理器核(940)利用數(shù)據(jù)存儲(store)指令將寄存器堆(941)中一個寄存器值寫入前級處理器核(940)對應的本地數(shù)據(jù)存儲器(954)中,再由本級處理器核
(942)利用數(shù)據(jù)裝載(load)指令從本地數(shù)據(jù)存儲器(954)中讀出相應數(shù)據(jù)并寫入寄存器堆
(943)的對應寄存器中。在本實施例中,前級處理器核(940)中的寄存器堆(941)的數(shù)據(jù)輸出端(949)通過32位連線(946)與本地數(shù)據(jù)存儲器(954)的數(shù)據(jù)輸入端(948)相連,本級 處理器核(942)中的寄存器堆(943)的數(shù)據(jù)輸入端(950)通過多路選擇器(947)及32位 連線(953)與本地數(shù)據(jù)存儲器(954)的數(shù)據(jù)輸出端(952)相連。多路選擇器(947)的輸入 分別為本級處理器核來的數(shù)據(jù)(944)和通過32位連線(953)傳送來的從前級處理器核來 的數(shù)據(jù)(945),當處理器核執(zhí)行算術、邏輯等運算時,多路選擇器(947)選擇來源于本級處 理器核的數(shù)據(jù)(944);當處理器核執(zhí)行取數(shù)操作時,如果該數(shù)據(jù)在本級處理器核對應的本 地存儲器中已存在,則選擇來源于本級處理器核的數(shù)據(jù)(944),否則選擇來源于前級處理器 核傳輸而來的數(shù)據(jù)(945)當傳遞寄存器值時,多路選擇器(947)選擇來源于前級處理器核 傳輸而來的數(shù)據(jù)(945)。在圖8(c)對應的實施例中,可以先依次將寄存器堆(941)中全部 寄存器的值都寫入本地數(shù)據(jù)存儲器(954)中,之后依次將這些值寫入寄存器堆(943)中;也 可以先依次將寄存器堆(941)中部分寄存器的值寫入本地數(shù)據(jù)存儲器(954)中,之后依次 將這些值寫入寄存器堆(943)中;還可以將寄存器堆(941)中一個寄存器的值寫入本地數(shù) 據(jù)存儲器(954)中后,馬上將該值寫入寄存器堆(943)中,依次重復此過程,直到需要傳遞 的寄存器值都傳遞完畢。請參閱圖10,圖10給出了基于本發(fā)明所述處理器核及對應本地存儲器組成的連 接結(jié)構的兩種實施例。對于本領域普通技術人員來說,可以根據(jù)本發(fā)明的技術方案和構思 對這些實施例中各組成部分進行各種可能的替換、調(diào)整和改進,而所有這些替換、調(diào)整和改 進都應屬于本發(fā)明所附權利要求的保護范圍。圖10(a)對應的實施例包含了本地指令存儲器和本地數(shù)據(jù)存儲器的處理器核 (1001)及其前一級處理器核對應的本地數(shù)據(jù)存儲器(1002)。處理器核(1001)由本地指令 存儲器(1003)、本地數(shù)據(jù)存儲器(1004)、執(zhí)行單元(1005)、寄存器堆(1006)、數(shù)據(jù)地址產(chǎn)生 模塊(1007)、程序計數(shù)器(1008)、寫緩沖(1009)以及輸出緩沖(1010)組成。本地指令存儲器(1003)存儲有處理器核(1001)執(zhí)行所需的指令。處理器核 (1001)中執(zhí)行單元(1005)所需的操作數(shù)來自寄存器堆(1006),或來自指令中的立即數(shù);執(zhí) 行結(jié)果寫回寄存器堆(1006)。本實施例中,本地數(shù)據(jù)存儲器有兩個子存儲器。以本地數(shù)據(jù)存儲器(1004)為 例,從兩個子存儲器讀出的數(shù)據(jù)通過多路選擇器(1018、1019)選擇,產(chǎn)生最終輸出的數(shù)據(jù) (1020)。通過數(shù)據(jù)裝載(load)指令可以將本地數(shù)據(jù)存儲器(1002、1004)中的數(shù)據(jù)、寫緩沖
(1009)中的數(shù)據(jù)、或外部的共享存儲器中的數(shù)據(jù)(1011)讀取到寄存器堆(1006)中。在本 實施例中,本地數(shù)據(jù)存儲器(1002、1004)中的數(shù)據(jù)、寫緩沖(1009)中的數(shù)據(jù)和外部的共享 存儲器中的數(shù)據(jù)(1011)通過多路選擇器(1016、1017)選擇后,輸入到寄存器堆(1006)中。通過數(shù)據(jù)存儲(store)指令可以將寄存器堆(1006)中的數(shù)據(jù)通過寫緩沖(1009) 延時存儲到本地數(shù)據(jù)存儲器(1004)中,或?qū)⒓拇嫫鞫?1006)中的數(shù)據(jù)通過輸出緩沖
(1010)延時存儲到外部的共享存儲器中。在從本地數(shù)據(jù)存儲器(1002)讀取數(shù)據(jù)到寄存器 堆(1006)的同時可以將該數(shù)據(jù)通過寫緩沖(1009)延時存儲到本地數(shù)據(jù)存儲器(1004)中,以完成本發(fā)明所述的LIS功能,實現(xiàn)無代價的數(shù)據(jù)傳遞。在圖10(a)對應的實施例中,寫緩沖(1009)接收的數(shù)據(jù)有三個來源從寄存器堆(1006)來的數(shù)據(jù)、從前級處理器核本地數(shù)據(jù)存儲器(1002)來的數(shù)據(jù)、以及從外部的共享存 儲器來的數(shù)據(jù)(1011)。所述從寄存器堆(1006)來的數(shù)據(jù)、從前級處理器核本地數(shù)據(jù)存儲器 (1002)來的數(shù)據(jù)、以及從外部的共享存儲器來的數(shù)據(jù)(1011)通過多路選擇器(1012)選擇 后輸入到寫緩沖(1009)。在圖10(a)對應的實施例中,本地數(shù)據(jù)存儲器只接收從同一處理器核中寫緩沖來 的數(shù)據(jù)輸入。如在處理器核(1001)中,本地數(shù)據(jù)存儲器(1004)只接收從寫緩沖(1009)來 的數(shù)據(jù)輸入。在圖10(a)對應的實施例中,本地指令存儲器(1003)和本地數(shù)據(jù)存儲器(1002、 1004)各自都是由兩個相同的子存儲器構成,可以同時對本地存儲器中不同的子存儲器進 行讀、寫操作。采用這樣的結(jié)構就可以實現(xiàn)本發(fā)明技術方案所述的采用乒乓緩沖交換的本 地數(shù)據(jù)存儲器。本地指令存儲器(1003)接收的地址由程序計數(shù)器(1008)產(chǎn)生。本地數(shù)據(jù) 存儲器(1004)接收的地址有三個來源從本級處理器核寫緩沖(1009)中地址存儲部分來 的用于存儲數(shù)據(jù)的地址、從本級處理器核數(shù)據(jù)地址產(chǎn)生模塊(1007)來的用于讀取數(shù)據(jù)的 地址、從后級處理器核數(shù)據(jù)地址產(chǎn)生模塊來的用于讀取數(shù)據(jù)的地址(1013)。所述從本級處 理器核寫緩沖(1009)中地址存儲部分來的用于存儲數(shù)據(jù)的地址、從本級處理器核數(shù)據(jù)地 址產(chǎn)生模塊(1007)來的用于讀取數(shù)據(jù)的地址、從后級處理器核數(shù)據(jù)地址產(chǎn)生模塊來的用 于讀取數(shù)據(jù)的地址(1013)通過多路選擇器(1014、1015)選擇后,分別輸入到本地數(shù)據(jù)存儲 器(1004)中不同子存儲器的地址接收模塊。相應地,本地數(shù)據(jù)存儲器(1002)接收的地址也有三個來源從本級處理器核寫緩 沖中地址存儲部分來的用于存儲數(shù)據(jù)的地址、從本級處理器核數(shù)據(jù)地址產(chǎn)生模塊來的用于 讀取數(shù)據(jù)的地址、從后級處理器核數(shù)據(jù)地址產(chǎn)生模塊(1007)來的用于讀取數(shù)據(jù)的地址。上 述地址通過多路選擇器選擇后,分別輸入到本地數(shù)據(jù)存儲器(1002)中不同子存儲器的地 址接收模塊。圖10(b)是另一種基于本發(fā)明所述處理器核及對應本地存儲器組成的連接結(jié)構, 其中包含了本地指令存儲器和本地數(shù)據(jù)存儲器的處理器核(1021)及其前一級處理器核對 應的本地數(shù)據(jù)存儲器(1022)組成。處理器核(1021)由本地指令存儲器(1003)、本地數(shù)據(jù) 存儲器(1024)、執(zhí)行單元(1005)、寄存器堆(1006)、數(shù)據(jù)地址產(chǎn)生模塊(1007)、程序計數(shù)器 (1008)、寫緩沖(1009)以及輸出緩沖(1010)組成。圖10(b)對應實施例提出的連接結(jié)構與圖10(a)對應實施例提出的結(jié)構大致 相同,唯一的不同點在于本實施例中的本地數(shù)據(jù)存儲器(1022、1024)各是由一個雙端口 (dual-port)存儲器構成。雙端口存儲器可以同時支持兩個不同地址的讀、寫操作。本地數(shù)據(jù)存儲器(1024)接收的地址有三個來源從本級處理器核寫緩沖(1009) 中地址存儲部分來的用于存儲數(shù)據(jù)的地址、從本級處理器核數(shù)據(jù)地址產(chǎn)生模塊(1007) 來的用于讀取數(shù)據(jù)的地址、從后級處理器核數(shù)據(jù)地址產(chǎn)生模塊來的用于讀取數(shù)據(jù)的地址 (1025)。所述從本級處理器核寫緩沖(1009)中地址存儲部分來的用于存儲數(shù)據(jù)的地址、從 本級處理器核數(shù)據(jù)地址產(chǎn)生模塊(1007)來的用于讀取數(shù)據(jù)的地址、從后級處理器核數(shù)據(jù) 地址產(chǎn)生模塊來的用于讀取數(shù)據(jù)的地址(1025)通過多路選擇器(1026)選擇后,輸入到本地數(shù)據(jù)存儲器(1024)的地址接收模塊。相應地,本地數(shù)據(jù)存儲器(1022)接收的地址也有三個來源從本級處理器核寫緩沖中地址存儲部分來的用于存儲數(shù)據(jù)的地址、從本級處理器核數(shù)據(jù)地址產(chǎn)生模塊來的用于 讀取數(shù)據(jù)的地址、從后級處理器核數(shù)據(jù)地址產(chǎn)生模塊(1007)來的用于讀取數(shù)據(jù)的地址。上 述地址通過多路選擇器選擇后,輸入到本地數(shù)據(jù)存儲器(1022)的地址接收模塊。由于通常程序中需要訪問存儲器的數(shù)據(jù)裝載指令和數(shù)據(jù)存儲指令一般不超過 40%,因此可以用單端(single-port)存儲器代替圖10(b)對應實施例中的雙端口存儲器, 在程序編譯時靜態(tài)調(diào)整程序中指令的順序,或在程序執(zhí)行時動態(tài)調(diào)整指令執(zhí)行順序,在執(zhí) 行不需訪問存儲器的指令時同時執(zhí)行對存儲器訪問的指令,進而使連接結(jié)構的組成更為簡 潔、高效。圖10(b)對應實施例中每個本地數(shù)據(jù)存儲器實際上是一個雙端口存儲器,能同 時支持兩個讀、兩個寫或一讀一寫操作。為保證數(shù)據(jù)在執(zhí)行中不被誤改寫,可以采用如圖 10(c)所示的方法,在本地數(shù)據(jù)存儲器(1031)中的每一地址都對應增加一個有效標志位 (1032)和一個歸屬標志位(1033)。圖10(c)中,有效標志位(1032)代表了本地數(shù)據(jù)存儲器(1031)中該地址對應的 數(shù)據(jù)(1034)的有效性,舉例而言,可以用“1”代表本地數(shù)據(jù)存儲器(1031)中該地址對應的 數(shù)據(jù)(1034)是有效的,用“0”代表本地數(shù)據(jù)存儲器(1031)中該地址對應的數(shù)據(jù)(1034)是 無效的。歸屬標志位(1033)代表了本地數(shù)據(jù)存儲器(1031)中該地址對應的數(shù)據(jù)(1034) 是歸哪個處理器核使用,舉例而言,可以用“0”代表本地數(shù)據(jù)存儲器(1031)中該地址對應 的數(shù)據(jù)(1034)歸所述本地數(shù)據(jù)存儲器(1031)對應的處理器核(1035)使用,用“1”代表本 地數(shù)據(jù)存儲器(1031)中該地址對應的數(shù)據(jù)(1034)歸所述本地數(shù)據(jù)存儲器(1031)對應的 處理器核(1035)及其后級處理器核(1036)使用。在具體實施例中,可以按上述對有效標志位(1032)和歸屬標志位(1033)的定義 描述存儲在本地數(shù)據(jù)存儲器中的每個數(shù)據(jù)的屬性,并保證正確的讀寫。在圖10(c)對應實施例中,如果本地數(shù)據(jù)存儲器(1031)中某地址對應的有效標志 位(1032)為“0”,則表示該地址對應的數(shù)據(jù)(1034)是無效的,即,如果需要,可以直接對該 地址進行數(shù)據(jù)存儲操作。如果有效標志位(1032)為“1”且歸屬標志位(1033)為“0”,則表 示該地址對應的數(shù)據(jù)(1034)是有效的,且是給所述本地數(shù)據(jù)存儲器(1031)對應的處理器 核(1035)使用的,因此本級處理器核(1035)如果需要,可以直接對該地址進行數(shù)據(jù)存儲操 作。如果有效標志位(1032)為“1”且歸屬標志位(1033)為“1”,則表示該地址對應的數(shù)據(jù) (1034)是有效的,且是要給所述本地數(shù)據(jù)存儲器(1031)對應的處理器核(1035)及其后級 處理器核(1036)使用的,如果本級處理器核(1035)需要對該地址進行數(shù)據(jù)存儲操作,則必 須等到所述歸屬標志位(1033)為“0”后才可進行數(shù)據(jù)存儲操作,即先將該地址對應的數(shù)據(jù) (1034)傳輸?shù)胶蠹壧幚砥骱?1036)對應的本地數(shù)據(jù)存儲器(1037)中的相應位置,同時將 本級處理器核(1035)對應的本地數(shù)據(jù)存儲器(1031)中該地址對應的歸屬標志位(1033) 置為“0”,這樣,本級處理器核(1035)就可以對該地址進行數(shù)據(jù)存儲操作了。在圖10(c)對應實施例中,若本級處理器(1035)對其對應的本地數(shù)據(jù)存儲器 (1031)進行數(shù)據(jù)存儲操作,則可以將對應的有效標志位(1032)置“1”,并根據(jù)該數(shù)據(jù) (1034)是否會被后級處理器(1036)使用決定歸屬標志位,如果會被后級處理器(1036)使用則歸屬標志位(1033)置“1”,否則置“0”;也可以將對應的有效標志位(1032)置“1”,同 時將對應的歸屬標志位(1032)也置“1”,這樣雖然需要增加本地數(shù)據(jù)存儲器(1031)的容 量,但能簡化其具體的實現(xiàn)結(jié)構。請參閱圖11(a),圖11(a)給出了目前現(xiàn)有的片上系統(tǒng)的典型結(jié)構。其中處理器 核(1101)、數(shù)字信號處理器核(1102)、功能單元(1103、1104、1105)、輸入輸出接口控制模 塊(1106)和存儲控制模塊(1108)都連接在系統(tǒng)總線(1110)上。該片上系統(tǒng)可以通過輸入 輸出接口控制模塊(1106)與外圍設備(1107)傳輸數(shù)據(jù),還可以通過存儲控制模塊(1108) 與外部存儲器(1109)傳輸數(shù)據(jù)。 請參閱圖11(b),圖11(b)給出了基于本發(fā)明技術方案實現(xiàn)片上系統(tǒng)的一種實施 例。在本實施例中,處理器核及相應本地存儲器(1121)與其他六個處理器核及相應本地存 儲器共同構成功能模塊(1124),處理器核及相應本地存儲器(1122)與其他四個處理器核 及相應本地存儲器共同構成功能模塊(1125),處理器核及相應本地存儲器(1123)與其他 兩個處理器核及相應本地存儲器共同構成功能模塊(1126)。所述功能模塊(1124、1125、 1126)各自可以對應圖11(a)實施例中的處理器核(1101)、或數(shù)字信號處理器核(1102)、 或功能單元(1103或1104或1105)、或輸入輸出接口控制模塊(1106)、或存儲控制模塊 (1108)。以功能模塊(1126)為例,處理器核及相應本地存儲器(1123、1127、1128、1129)構 成串行連接的多核結(jié)構,所述四個處理器核及相應本地存儲器(1123、1127、1128、1129)共 同實現(xiàn)功能模塊(1126)具備的功能。處理器核及相應本地存儲器(1123)與處理器核及相應本地存儲器(1127)之間的 數(shù)據(jù)傳輸通過內(nèi)部連接(1130)實現(xiàn)。同樣地,處理器核及相應本地存儲器(1127)與處理 器核及相應本地存儲器(1128)之間的數(shù)據(jù)傳輸通過內(nèi)部連接(1131)實現(xiàn),處理器核及相 應本地存儲器(1128)與處理器核及相應本地存儲器(1129)之間的數(shù)據(jù)傳輸通過內(nèi)部連接 (1132)實現(xiàn)。功能模塊(1126)通過硬連線(1133、1134)與總線連接模塊(1138)連接,使功能 模塊(1126)與總線連接模塊(1138)之間能相互傳輸數(shù)據(jù)。同樣地,功能模塊(1125)與總 線連接模塊(1139)之間能相互傳輸數(shù)據(jù),功能模塊(1124)與總線連接模塊(1140、1141) 之間能相互傳輸數(shù)據(jù)??偩€連接模塊(1138)與總線連接模塊(1139)通過硬連線(1135) 能相互傳輸數(shù)據(jù)??偩€連接模塊(1139)與總線連接模塊(1140)通過硬連線(1136)能相 互傳輸數(shù)據(jù)??偩€連接模塊(1140)與總線連接模塊(1141)通過硬連線(1137)能相互傳 輸數(shù)據(jù)。通過這種方法,可以實現(xiàn)功能模塊(1125)、功能模塊(1126)、功能模塊(1127)之 間的數(shù)據(jù)相互傳輸,總線連接模塊(1138、1139、1140、1141)與硬連線(1135、1136、1137)實 現(xiàn)了圖11(a)中系統(tǒng)總線(1110)的功能,并與功能模塊(1125、1126、1127) —起,構成了典 型的片上系統(tǒng)結(jié)構。由于本發(fā)明提出的可配置多核/眾核裝置中處理器核及相應本地存儲器在數(shù)目 上是很容易擴展的,因此采用本實施例的方法可以很方便地實現(xiàn)各種類型的片上系統(tǒng)。此 夕卜,在基于本發(fā)明提出的可配置多核/眾核裝置實時運行時,也可以通過實時動態(tài)配置的 方法,使片上系統(tǒng)的結(jié)構能靈活改變。 請參閱圖11 (C),圖11 (C)給出了基于本發(fā)明技術方案實現(xiàn)片上系統(tǒng)的/另一種實施例。在本實施例中,處理器核及相應本地存儲器(1151)與其他六個處理器核及相應本地存儲器共同構成功能模塊(1163),處理器核及相應本地存儲器(1152)與其他四個處理器 核及相應本地存儲器共同構成功能模塊(1164),處理器核及相應本地存儲器(1153)與其 他兩個處理器核及相應本地存儲器共同構成功能模塊(1165)。所述功能模塊(1163、1164、 1165)各自可以對應圖11(a)實施例中的處理器核(1101)、或數(shù)字信號處理器核(1102)、 或功能單元(1103或1104或1105)、或輸入輸出接口控制模塊(1106)、或存儲控制模塊 (1108)。以功能模塊(1165)為例,處理器核及相應本地存儲器(1153、1154、1155、1156)構 成串行連接的多核結(jié)構,所述四個處理器核及相應本地存儲器(1153、1154、1155、1156)共 同實現(xiàn)功能模塊(1165)具備的功能。處理器核及相應本地存儲器(1153)與處理器核及相應本地存儲器(1154)之間的 數(shù)據(jù)傳輸通過內(nèi)部連接(1160)實現(xiàn)。同樣地,處理器核及相應本地存儲器(1154)與處理 器核及相應本地存儲器(1155)之間的數(shù)據(jù)傳輸通過內(nèi)部連接(1161)實現(xiàn),處理器核及相 應本地存儲器(1155)與處理器核及相應本地存儲器(1156)之間的數(shù)據(jù)傳輸通過內(nèi)部連接 (1162)實現(xiàn)。在本實施例中,一個例子是通過處理器核及相應本地存儲器(1156)與處理器核 及相應本地存儲器(1166)間的數(shù)據(jù)傳輸實現(xiàn)功能模塊(1165)與功能模塊(1164)間的數(shù) 據(jù)傳輸需求。根據(jù)本發(fā)明技術方案,運行過程中,一旦處理器核及其相應本地存儲器(1156) 需要與處理器核及其相應本地存儲器(1166)相互傳輸數(shù)據(jù),可配置互聯(lián)網(wǎng)絡根據(jù)所述數(shù) 據(jù)傳輸?shù)男枨笞詣优渲?、建立處理器核及其相應本地存儲?1156)與處理器核及其相應 本地存儲器(1166)的雙向數(shù)據(jù)通路(1158)。同樣地,一旦處理器核及其相應本地存儲器 (1166)需要向處理器核及其相應本地存儲器(1156)單向傳輸數(shù)據(jù),或處理器核及其相應 本地存儲器(1156)需要向處理器核及其相應本地存儲器(1166)單向傳輸數(shù)據(jù),也可按相 同方法建立單向的數(shù)據(jù)通路。在本實施例中,還建立了處理器核及其相應本地存儲器(1151)與處理器核及其 相應本地存儲器(1152)之間的雙向數(shù)據(jù)通路(1157),和處理器核及其相應本地存儲器 (1165)與處理器核及其相應本地存儲器(1155)之間的雙向數(shù)據(jù)通路(1159)。通過這種方 法,可以實現(xiàn)功能模塊(1163)、功能模塊(1164)、功能模塊(1165)之間的數(shù)據(jù)相互傳輸,雙 向數(shù)據(jù)通路(1157、1158、1159)實現(xiàn)了圖11(a)中系統(tǒng)總線(1110)的功能,并與功能模塊 (1163、1164、1165) 一起,構成了典型的片上系統(tǒng)結(jié)構。根據(jù)片上系統(tǒng)應用需求的不同,任意兩個功能模塊之間不一定只有一組數(shù)據(jù)通 路。由于本發(fā)明提出的可配置多核/眾核裝置中處理器核在數(shù)目上是很容易擴展的,因此 采用本實施例的方法可以很方便地實現(xiàn)各種類型的片上系統(tǒng)。此外,在基于本發(fā)明提出的 可配置多核/眾核裝置實時運行時,也可以通過實時動態(tài)配置的方法,使片上系統(tǒng)的結(jié)構 能靈活改變。圖12前編譯和后編譯實施例,其中圖12(a)為前編譯實施例,圖12 (b)為后編譯 實施例。如圖12(a)所示,左邊為原始的程序代碼(1201、1203、1204),在代碼中有兩次函 數(shù)調(diào)用,分別為A函數(shù)調(diào)用和B函數(shù)調(diào)用。其中1203、1204分別為A函數(shù)和B函數(shù)代碼本身。在進行前編譯展開后,A函數(shù)調(diào)用和B函數(shù)調(diào)用分別被替換成相應的函數(shù)代碼,展開后 的代碼中沒有函數(shù)調(diào)用,如1202所示。圖12(b)為后編譯實施例,如圖所示,原始的目標代碼(1205)為經(jīng)過普通編譯后 的目標代碼,該目標代碼是基于順序執(zhí)行的目標代碼,經(jīng)過后編譯分割后,形成如圖所示的 代碼塊(1206、1207、1208、1209、1210、1211),每個代碼塊分配給相應的一個處理器核執(zhí)行。 相應的A循環(huán)體被分割為一個單獨的代碼塊(1207),而B循環(huán)體由于本身相對較大,被分割 成兩個代碼塊,即B循環(huán)體1 (1209)和B循環(huán)體2 (1210)。兩個代碼塊在兩個處理器核上執(zhí) 行,共同完成B循環(huán)體。請參閱圖13,圖13(a)為本發(fā)明所述基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置示意圖,圖13(b)為通過配置形成的多核串行結(jié)構示意圖,圖13(c)為通過 配置形成的多核串并行混合結(jié)構示意圖,圖13(d)為通過配置形成的多個多核結(jié)構的示意 圖。如圖13(a)所示,該裝置由多個處理器核及可配置本地存儲器(1301、1303、1305、 1307、1309、1311、1313、1315、1317)和可配置互聯(lián)結(jié)構(1302、1304、1306、1308、1310、 1312、1314、1316、1318)構成。在本實施例中,每個處理器核及可配置本地存儲器構成所述 宏觀流水線的一級。通過配置可配置互聯(lián)結(jié)構(如1302),可以將多個處理器核及可配置本 地存儲器(1301、1303、1305、1307、1309、1311、1313、1315、1317)連接成串行連接結(jié)構。多 個串行連接結(jié)構可以各自獨立,也可以部分或全部有相互聯(lián)系,串行、并行或串并混合地運 行程序。如圖13(b)所示,通過配置相應的可配置互聯(lián)結(jié)構,形成圖中的多核串行結(jié)構,其 中處理器核及可配置本地存儲器(1301)為該多核串行結(jié)構的第一級,處理器核及可配置 本地存儲器(1317)為該多核串行結(jié)構的最后一級。如圖13(c)所示,通過配置相應的可配置互連結(jié)構,處理器核及可配置本地存儲 器(1301、1303、1305、1313、1315、1317)構成串行結(jié)構,而處理器核及可配置本地存儲器 (1307、1309、1311)構成并行結(jié)構,最終形成一個串并行混合結(jié)構的多核處理器。如圖13(d)所示,通過配置相應的可配置互連結(jié)構,處理器核及可配置本地存儲 器(1301、1307、1313、1315)構成串行結(jié)構,而處理器核及可配置本地存儲器(1303、1309、 1305、1311、1317)構成另外一條串行結(jié)構,從而構成兩條完全獨立的串行結(jié)構。
權利要求
一種數(shù)據(jù)處理的方法,用于在多處理器核結(jié)構上執(zhí)行程序并得到結(jié)果;所述處理器指通過執(zhí)行指令進行運算和讀寫數(shù)據(jù)的硬件;其特征在于所述數(shù)據(jù)處理的方法包括(1)對程序代碼進行分割,使所述多處理器核結(jié)構中的每個核運行相應的分割后代碼片段所需的時間盡量相等;(2)在所述多處理器核結(jié)構中串行連接的多核結(jié)構上運行程序時,串行連接多核結(jié)構中前一個處理器核的執(zhí)行結(jié)果作為輸入送給后一個處理器核;串行連接的多處理器核結(jié)構中任意核每單位時間內(nèi)可進行單數(shù)個或復數(shù)個發(fā)射,復數(shù)個串行連接的核同時形成更大規(guī)模的多發(fā)射,即串行多發(fā)射;(3)在所述多處理器核結(jié)構中串行連接的多核結(jié)構上運行程序時,串行連接多核結(jié)構中任意核的內(nèi)部流水線為第一個層次,串行連接多處理器核結(jié)構中每個核作為一個宏觀流水線段而構成的宏觀流水線為第二個層次,依此類推還可以得到更多更高層次。
2.根據(jù)權利要求1所述的數(shù)據(jù)處理的方法,其特征在于產(chǎn)生運行于所述多處理器核結(jié) 構中處理器核上的代碼片段,除需要對程序代碼進行現(xiàn)有通常意義上從程序源代碼到目標 代碼的編譯(compile)外,還可以進行前編譯(pre-compile),即在所述編譯進行前對程序 源代碼的預編譯;還可以進行后編譯(post-compile),即按要求分配到所述串行連接多處 理器核結(jié)構中每個核的工作內(nèi)容及負荷將程序代碼的劃分為單數(shù)個或復數(shù)個代碼片段。
3.根據(jù)權利要求2所述的數(shù)據(jù)處理的方法,其特征在于所述后編譯步驟包括(a)對程序代碼進行解析,生成前端碼流;(b)掃描、分析前端碼流,根據(jù)執(zhí)行前端碼流所需執(zhí)行周期、是否跳轉(zhuǎn)以及跳轉(zhuǎn)地址信 息,統(tǒng)計掃描結(jié)果,間接確定分割信息;或不掃描前端碼流,根據(jù)預設信息直接確定分割信 息;(c)根據(jù)分割信息對可執(zhí)行的程序指令代碼和進行代碼分割,生成所述串行連接多處 理器核結(jié)構中每個處理器核相應的代碼片段。
4.根據(jù)權利要求3所述的數(shù)據(jù)處理的方法,其特征在于在每個所述處理器核上運行的 指令除所述分割后的相應代碼片段外,還可以包括不影響原始程序功能的額外指令。
5.一種基于串行多發(fā)射和流水線層次結(jié)構的可配置多核/眾核裝置,包括復數(shù)個 處理器核、復數(shù)個可配置本地存儲器(configurable localmemory)、可配置互聯(lián)結(jié)構 (configurable interconnect structure),其中處理器核,用于執(zhí)行指令,進行運算并得到相應結(jié)果;可配置本地存儲器,用于存儲指令以及所述處理器核間的數(shù)據(jù)傳遞和數(shù)據(jù)保存;可配置互聯(lián)結(jié)構,用于所述可配置多核/眾核裝置內(nèi)各模塊間及與外部的連接;可以根據(jù)應用程序要求對處理器核、可配置本地存儲器和可配置互聯(lián)結(jié)構進行配置, 構成單數(shù)個或復數(shù)個串行連接的多核結(jié)構;所述串行連接的多核結(jié)構中每個處理器核各運 行程序代碼中的一部分代碼片段;所述串行連接的多核結(jié)構中所有處理器核共同實現(xiàn)程序 代碼的完整功能。
6.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射和 流水線層次結(jié)構的可配置多核/眾核裝置還可以包括單數(shù)個或復數(shù)個擴展模塊;所述擴展 模塊可以是共享存儲器(shared memory),用于在所述可配置數(shù)據(jù)存儲器溢出的情況下保存數(shù)據(jù)、傳遞復數(shù)個處理器核間的共享數(shù)據(jù);或直接存儲器訪問(DMA)控制器,用于除處理器核外其他模塊對所述可配置本地存儲器 的直接訪問;或異常處理(exception handling)模塊,用于處理處理器核、本地存儲器發(fā)生的異常 (exception)0
7.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射和 流水線層次結(jié)構的可配置多核/眾核裝置中,處理器核包括運算單元和程序計數(shù)器。
8.根據(jù)權利要求7所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射和 流水線層次結(jié)構的可配置多核/眾核裝置中,處理器核還可以包括擴展模塊;所述擴展模 塊可以是寄存器堆。
9.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射和 流水線層次結(jié)構的可配置多核/眾核裝置中,每個所述處理器核都有相應的可配置本地存 儲器,包括用于存放分割后代碼片段的指令存儲器(instruction memory)和用于存放數(shù)據(jù) WnTKSifigipfiI^ (configurabledata memory)
10.根據(jù)權利要求9所述的可配置多核/眾核裝置,其特征在于同一可配置本地存儲器 中,所述指令存儲器與可配置數(shù)據(jù)存儲器之間的邊界是可以根據(jù)不同配置信息改變的。
11.根據(jù)權利要求9所述的可配置多核/眾核裝置,其特征在于在同一可配置數(shù)據(jù)存儲 器中可以包括復數(shù)個數(shù)據(jù)子存儲器,所述復數(shù)個數(shù)據(jù)子存儲器之間的邊界是可以根據(jù)不同 配置信息改變的。
12.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述可配置互聯(lián)結(jié)構包 括處理器核與相鄰可配置本地存儲器的連接、處理器核與共享存儲器的連接、處理器核與 直接存儲器訪問控制器的連接、可配置本地存儲器與共享存儲器的連接、可配置本地存儲 器與直接存儲器訪問控制器的連接、可配置本地存儲器與系統(tǒng)外部的連接和共享存儲器與 系統(tǒng)外部的連接。
13.根據(jù)權利要求12所述的可配置多核/眾核裝置,其特征在于根據(jù)配置,可以使兩個 所述處理器核及其相應本地存儲器構成前后級連接關系,也可以將部分或全部處理器核及 其相應本地存儲器通過可配置互聯(lián)結(jié)構構成單數(shù)個或復數(shù)個串行連接結(jié)構;復數(shù)個所述串 行連接結(jié)構可以各自獨立,也可以部分或全部有相互聯(lián)系,串行、并行或串并混合地執(zhí)行指 令。
14.根據(jù)權利要求13所述的可配置多核/眾核裝置,其特征在于所述串行、并行或串并 混合地執(zhí)行指令可以是根據(jù)應用程序要求不同串行連接結(jié)構在同步機制的控制下運行不 同的程序段并行執(zhí)行不同指令、多線程并行運行,也可以是根據(jù)應用程序要求不同串行連 接結(jié)構在同步機制的控制下運行相同的程序段,還可以是以單指令多數(shù)據(jù)流(SIMD)方式 進行相同指令、不同數(shù)據(jù)的運算。
15.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射和 流水線層次結(jié)構的可配置多核/眾核裝置中,所述串行連接結(jié)構中處理器核具有特定的數(shù) 據(jù)讀規(guī)則(read policy),即所述串行連接結(jié)構中第一個處理器核的輸入數(shù)據(jù)來源可以是 本身相應的可配置數(shù)據(jù)存儲器,可以是共享存儲器,也可以是所述可配置多核/眾核裝置 外部;其他任意處理器核的輸入數(shù)據(jù)來源,可以是本身相應的可配置數(shù)據(jù)存儲器,也可以是前一級處理器核相應的可配置數(shù)據(jù)存儲器。
16.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射和 流水線層次結(jié)構的可配置多核/眾核裝置中,所述串行連接結(jié)構中處理器核具有特定的數(shù) 據(jù)寫規(guī)則(write policy),即所述串行連接結(jié)構中第一個處理器核相應可配置數(shù)據(jù)存儲器 的輸入數(shù)據(jù)來源可以是處理器核本身,可以是共享存儲器,也可以是所述可配置多核/眾 核裝置外部;其他任意處理器核相應可配置數(shù)據(jù)存儲器的輸入數(shù)據(jù)來源可以是處理器核本 身,可以是前一級處理器核相應可配置數(shù)據(jù)存儲器,也可以是共享存儲器;任意所述處理器 核的輸出數(shù)據(jù)的去向可以是本身相應的可配置數(shù)據(jù)存儲器,也可以是共享存儲器;當擴展 存儲器存在時,任意所述處理器核的輸出數(shù)據(jù)的去向還可以是擴展存儲器。
17.根據(jù)權利要求15、16所述的可配置多核/眾核裝置,其特征在于所述處理器核及其 相應可配置數(shù)據(jù)存儲器不同來源的輸入數(shù)據(jù)按特定規(guī)則進行多路選擇以確定最終的輸入 數(shù)據(jù)。
18.根據(jù)權利要求15、16所述的可配置多核/眾核裝置,其特征在于同一個所述可配置 數(shù)據(jù)存儲器可以同時被其前后級的兩個處理器核訪問,不同的處理器核各自訪問所述可配 置數(shù)據(jù)存儲器中的不同數(shù)據(jù)子存儲器。
19.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于當所述多核/眾核系統(tǒng) 中處理器核包含寄存器堆時,還需要具有傳輸寄存器值的功能,即所述串行連接結(jié)構中任 意前級處理器核中的單數(shù)個或復數(shù)個寄存器值都可以傳輸?shù)饺我夂蠹壧幚砥骱说南鄳?存器中。
20.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射 和流水線層次結(jié)構的可配置多核/眾核裝置中,所述流水線層次結(jié)構中的第二層次即宏觀 流水線段可以通過背壓(back pressure)信息將本宏觀流水線段的信息傳輸?shù)角耙患壓暧^ 流水線段,所述前一級宏觀流水線段根據(jù)收到的背壓信息可知之后的宏觀流水線是否阻塞 (stall),結(jié)合本宏觀流水線段的情況,確定本宏觀流水線段是否阻塞,并將新的背壓信息 傳輸?shù)礁耙患壓暧^流水線段,以此實現(xiàn)宏觀流水線的控制。
21.根據(jù)權利要求6所述的可配置多核/眾核裝置,其特征在于所述異常處理模塊可以 由所述多核/眾核裝置中的處理器核構成,也可以是額外的模塊。
22.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射和 流水線層次結(jié)構的可配置多核/眾核裝置中,用于所述配置的配置信息包括開啟或關斷處 理器核、配置本地存儲器中指令存儲器和數(shù)據(jù)子存儲器的大小/邊界及其中的內(nèi)容、配置 互聯(lián)結(jié)構和連接關系。
23.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射和 流水線層次結(jié)構的可配置多核/眾核裝置具有三個層次的低功耗技術(a)配置層次,根據(jù)配置信息,沒有被用到的處理器核可以進入低功耗狀態(tài);(b)指令層次,當處理器核執(zhí)行到讀取數(shù)據(jù)的指令時,如果該數(shù)據(jù)還沒有準備好,則所 述處理器核進入低功耗狀態(tài),直到所述數(shù)據(jù)準備好,所述處理器核再從低功耗狀態(tài)恢復到 正常工作狀態(tài);所述數(shù)據(jù)沒有準備好,可以是因為前一級處理器核還沒有將本級處理器核 需要的數(shù)據(jù)寫入相應數(shù)據(jù)子存儲器;(c)應用層次,采用全硬件實現(xiàn),匹配空閑(idle)任務特征,確定當前處理器核的使用率(utilization),根據(jù)當前處理器使用率和基準使用率確定是否進入低功耗狀態(tài)或是否從低功耗狀態(tài)返回;所述基準使用率可以是固定不變的,也可以是能重新配置或自學習確 定的;可以是固化在芯片內(nèi)部的,也可以是在系統(tǒng)啟動時由系統(tǒng)寫入的,還可以由軟件寫入 的;用于匹配的參考內(nèi)容可以在芯片生產(chǎn)時固化到芯片內(nèi)部,也可以在系統(tǒng)啟動時由系統(tǒng) 或軟件寫入,還可以自學習寫入;其寫入方式可以是一次寫入也可以是多次寫入;所述低功耗狀態(tài)可以是降低處理器時鐘頻率,也可以是切斷電源供應。
24.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射 和流水線層次結(jié)構的可配置多核/眾核裝置可以具備自測試能力,能夠在加電工作的情況 下不依賴于外部設備進行芯片的自測試;當所述多核/眾核系統(tǒng)具備自測試能力時,可以將所述多核/眾核系統(tǒng)中特定的單數(shù)個或復數(shù)個基本元件、運算單元或處理器核用成比較 器,對所述多核/眾核系統(tǒng)中相應的復數(shù)組其他基本元件、運算單元或處理器核及基本元 件、運算單元或處理器核的組合給予具有特定關系的激勵,并用所述比較器比較所述復數(shù) 組其他基本元件、運算單元或處理器核及基本元件、運算單元或處理器核的的組合的輸出 是否符合相應的特定關系。
25.根據(jù)權利要求24所述的可配置多核/眾核裝置,其特征在于當所述多核/眾核系統(tǒng)具備自測試能力時,可以具備自修復能力;即當所述測試結(jié)果保存在所述多核/眾核 系統(tǒng)中的存儲器中時,可以對失效基本單元或失效行或失效陣作標記,在對所述多核/眾 核系統(tǒng)進行配置時,可以根據(jù)相應標記繞過失效基本單元或失效行或失效陣,使所述多核/ 眾核系統(tǒng)依然能正常工作,實現(xiàn)自修復。
26.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述復數(shù)個處理器核可以是同構的,也可以是異構的。
27.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于可以具有讀取導致寫的特性(LIS,load induced store);即處理器核對于某個地址數(shù)據(jù)第一次讀取時,從相鄰前 一級處理器核對應的本地數(shù)據(jù)存儲器讀取數(shù)據(jù),同時將讀取到的數(shù)據(jù)寫入本級處理器核對 應的本地數(shù)據(jù)存儲器,之后對該地址數(shù)據(jù)的讀寫都訪問本級對應的本地數(shù)據(jù)存儲器。
28.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于可以具有數(shù)據(jù)預傳遞的特性;即處理器核可以從前一級處理器核對應的本地數(shù)據(jù)存儲器中讀取本處理器核不需要 讀寫、但后續(xù)處理器核需要讀取的數(shù)據(jù),并寫入本級處理器核對應的本地數(shù)據(jù)存儲器。
29.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述本地數(shù)據(jù)存儲器可以包含單數(shù)個或復數(shù)個有效標志和單數(shù)個或復數(shù)個歸屬標志;所述有效標志用于表示對應 的數(shù)據(jù)是否有效;所述歸屬標志用于表示對應的數(shù)據(jù)當前被哪個處理器核使用。
30.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于處理器核可以訪問除所述處理器核外的處理器核的本地指令存儲器;所述復數(shù)個處理器核可以并行執(zhí)行所述相同 的代碼中的各段代碼,也可以并行執(zhí)行所述不同的代碼中的各段代碼;所述復數(shù)個處理器核可以串行執(zhí)行所述相同的代碼中的各段代碼,也可以串行執(zhí)行所述不同的代碼中的各段 代碼;所述復數(shù)個處理器核還可以串并混合地執(zhí)行所述相同代碼中的各段代碼或所述不同 代碼中的各段代碼。
31.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于還可以將單數(shù)個或復數(shù)個處理器核及其相應本地存儲器構成高性能的多核連接結(jié)構,對所述多核連接結(jié)構進行配置、在相應本地指令存儲器中放入對應的代碼片段,使所述多核連接結(jié)構實現(xiàn)特定的功能; 所述多核連接結(jié)構在功能上相當于片上系統(tǒng)(SoC,System on Chip)中的功能模塊;復數(shù)個 所述功能模塊再由所述功能模塊間的數(shù)據(jù)傳輸通道連接,實現(xiàn)片上系統(tǒng);所述數(shù)據(jù)傳輸通 道即對應傳統(tǒng)片上系統(tǒng)結(jié)構中的系統(tǒng)總線。
32.根據(jù)權利要求31所述的可配置多核/眾核裝置,其特征在于可以通過所述可配置 互聯(lián)結(jié)構,對有數(shù)據(jù)傳遞關系的復數(shù)個處理器核的輸入、輸出預先建立或動態(tài)建立復數(shù)個 連接,構成處理器核之間的相當于傳統(tǒng)片上系統(tǒng)中系統(tǒng)總線結(jié)構的數(shù)據(jù)傳輸通道。
33.根據(jù)權利要求31所述的可配置多核/眾核裝置,其特征在于處理器核及其相應本 地存儲器可以被動態(tài)地重新配置,相應本地指令存儲器中的代碼片段可以被動態(tài)地改變, 從而改變所述片上系統(tǒng)的功能。
34.根據(jù)權利要求7所述的可配置多核/眾核裝置,其特征在于所述處理器核可以具有 快速條件判斷機制,用以確定分支轉(zhuǎn)移是否執(zhí)行;所述快速條件判斷機制可以是用于判斷 循環(huán)條件的計數(shù)器,也可以是用于判斷分支轉(zhuǎn)移及循環(huán)條件的硬件有限狀態(tài)機。
35.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述處理器核還可以對 應復數(shù)個本地指令存儲器;當所述復數(shù)個本地指令存儲器中的一個或多個用于響應相應處 理器核取指操作時,所述復數(shù)個本地指令存儲器中的其他本地指令存儲器可以進行指令更 新操作。
36.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述可配置多核/眾核 裝置中的復數(shù)個處理器核可以工作在相同的時鐘頻率,也可以工作在不同的時鐘頻率。
37.根據(jù)權利要求5所述的可配置多核/眾核裝置,其特征在于所述基于串行多發(fā)射和 流水線層次結(jié)構的可配置多核/眾核裝置中還可以包括單數(shù)個或復數(shù)個專用處理模塊;所 述專用處理模塊能作為宏模塊供所述處理器核調(diào)用,也可以作為獨立的處理模塊接收所述 處理器核的輸出,并將處理結(jié)果送往所述處理器核;向所述專用處理模塊輸出的處理器核 與接收所述專用處理器核輸出的處理器核可以是同一個處理器核,也可以是不同的處理器 核。
全文摘要
一種數(shù)據(jù)處理的方法與裝置,根據(jù)特定規(guī)則對運行于串行連接多處理器核結(jié)構上的程序代碼進行分割,使所述串行連接多處理器核結(jié)構構成串行多發(fā)射和流水線層次結(jié)構,并使每個核運行相應的分割得到的代碼片段所需的時間盡量相等,以實現(xiàn)核間工作量的負載平衡。
文檔編號G06F15/80GK101799750SQ20091020843
公開日2010年8月11日 申請日期2009年9月29日 優(yōu)先權日2009年9月29日
發(fā)明者任浩琪, 林正浩, 王靜 申請人:上海芯豪微電子有限公司