專利名稱:眾核處理器片上同步方法和其系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及眾核處理器領(lǐng)域,尤其涉及眾核處理器片上同步方法和及其系統(tǒng)。
背景技術(shù):
傳統(tǒng)單核處理器采用指令級(jí)細(xì)粒度并行的技術(shù)提高性能,借助于超標(biāo)量和流水處 理提高處理器的主頻,然而主頻的提高使得功耗和散熱問(wèn)題難以依靠現(xiàn)有的技術(shù)解決。半 導(dǎo)體工藝的發(fā)展,使得片上可集成的晶體管數(shù)目日益增多,體系結(jié)構(gòu)設(shè)計(jì)者為了在性能進(jìn) 一步提升的同時(shí)降低功耗和散熱,提出了線程級(jí)粗粒度并行的片上多核/眾核處理器,眾 核處理器比多核處理器在芯片上集成了更多的處理器核,通常認(rèn)為8核以下的是多核,8核 以上的是眾核。片上多核/眾核處理器與傳統(tǒng)多處理器在設(shè)計(jì)理念上不同,它并不是將多個(gè)處理 器核簡(jiǎn)單地集成到一個(gè)芯片上。片上眾核處理器在簡(jiǎn)化眾核處理器設(shè)計(jì)復(fù)雜度的同時(shí),增 大片上的處理能力。與傳統(tǒng)多處理器相比,其優(yōu)點(diǎn)是片上帶寬高、通信距離短、傳輸速度快, 使得多個(gè)線程之間的數(shù)據(jù)通信效率高。同步操作保證多個(gè)線程之間的數(shù)據(jù)傳播,使得多個(gè)線程對(duì)共享內(nèi)存的寫操作等同 于串行執(zhí)行,保證程序執(zhí)行語(yǔ)義的正確性。同步操作的性能對(duì)片上眾核處理器而言非常重 要,直接影響了多個(gè)線程協(xié)同執(zhí)行的速度。在傳統(tǒng)多處理器系統(tǒng)中,同步操作通常需要片外訪存,造成了較大同步延遲,其中 一種方法是多個(gè)處理器都去輪詢內(nèi)存中的同一個(gè)標(biāo)志位,當(dāng)發(fā)現(xiàn)標(biāo)志位為0時(shí),就將其置 為1,同時(shí)獲得了鎖;如果發(fā)現(xiàn)標(biāo)志位為1,就隔一段時(shí)間再來(lái)查詢這個(gè)標(biāo)志位。這種方法除 了片外訪存的開銷比較大以外,對(duì)于標(biāo)志位的不斷輪詢,也對(duì)網(wǎng)絡(luò)造成了壓力。
發(fā)明內(nèi)容
為解決上述問(wèn)題,本發(fā)明提出了眾核處理器片上同步方法和其系統(tǒng),在片上眾核 體系結(jié)構(gòu)中,使用專用的片上同步管理裝置支持粗粒度同步方法,由于訪問(wèn)片上同步管理 裝置的時(shí)間遠(yuǎn)遠(yuǎn)小于訪問(wèn)內(nèi)存的時(shí)間,而且避免了因?yàn)檩喸儤?biāo)志位造成的網(wǎng)絡(luò)擁塞,因此 減少了同步時(shí)間,進(jìn)而幫助提高眾核處理器的計(jì)算能力。本發(fā)明公開了一種眾核處理器片上同步方法,包括步驟1,小核執(zhí)行到申請(qǐng)指令,向同步管理裝置發(fā)送一個(gè)申請(qǐng)鎖的申請(qǐng)消息,然后 進(jìn)入等待狀態(tài),所述申請(qǐng)消息中包括sync_id,并表明是讀鎖申請(qǐng)或?qū)戞i申請(qǐng);步驟2,同步管理裝置接收到申請(qǐng)鎖的申請(qǐng)消息后,依據(jù)記錄檢查是否已經(jīng)有小 核申請(qǐng)相同sync_id的鎖,如果沒有,則向所述小核發(fā)送確認(rèn)消息,并對(duì)小核的申請(qǐng)進(jìn)行記 錄;否則,直接對(duì)所述小核的申請(qǐng)進(jìn)行記錄;步驟3,小核收到確認(rèn)消息后,進(jìn)入臨界區(qū),執(zhí)行完臨界區(qū)代碼后,向同步管理裝置 發(fā)送釋放鎖的釋放消息;步驟4,同步管理裝置收到釋放鎖的釋放消息,將發(fā)送所述釋放消息的小核從記錄中刪除,依據(jù)記錄檢查是否還有等待該釋放的鎖的小核,如果有,則向所述鎖對(duì)應(yīng)的多個(gè)申 請(qǐng)讀鎖的小核發(fā)送確認(rèn)消息,如果記錄中沒有對(duì)應(yīng)的申請(qǐng)讀鎖的小核,則向記錄的所述鎖 對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息。本發(fā)明還公開了一種眾核處理器片上同步系統(tǒng),包括同步管理裝置和多個(gè)小核,小核,用于執(zhí)行到申請(qǐng)指令,向同步管理裝置發(fā)送一個(gè)申請(qǐng)鎖的申請(qǐng)消息,然后進(jìn) 入等待狀態(tài),所述申請(qǐng)消息中包括sync_id,并表明是讀鎖申請(qǐng)或?qū)戞i申請(qǐng);收到確認(rèn)消息 后,進(jìn)入臨界區(qū),執(zhí)行完臨界區(qū)代碼后,向同步管理裝置發(fā)送釋放鎖的釋放消息;同步管理裝置,用于接收到申請(qǐng)鎖的申請(qǐng)消息后,依據(jù)記錄檢查是否已經(jīng)有小核 申請(qǐng)相同sync_id的鎖,如果沒有,則向所述小核發(fā)送確認(rèn)消息,并對(duì)小核的申請(qǐng)進(jìn)行記 錄;否則,直接對(duì)所述小核的申請(qǐng)進(jìn)行記錄;收到釋放鎖的釋放消息,將發(fā)送所述釋放消息 的小核從記錄中刪除,依據(jù)記錄檢查是否還有等待該釋放的鎖的小核,如果有,則向所述鎖 對(duì)應(yīng)的多個(gè)申請(qǐng)讀鎖的小核發(fā)送確認(rèn)消息,如果記錄中沒有對(duì)應(yīng)的申請(qǐng)讀鎖的小核,則向 記錄的所述鎖對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息。本發(fā)明公開了一種眾核處理器片上同步方法,包括步驟1,小核執(zhí)行到柵欄指令時(shí),向同步管理裝置發(fā)送柵欄消息,然后進(jìn)入等待狀 態(tài),所述柵欄消息中包括Sync_id和所在的柵欄同步中的小核的數(shù)量;步驟2,同步管理裝置接收到小核的柵欄消息,記錄所述小核,依據(jù)記錄和所述柵 欄消息檢查參與柵欄消息對(duì)應(yīng)的柵欄同步的小核的柵欄消息是否都已經(jīng)到達(dá)同步管理裝 置,如果是,則按各個(gè)小核的柵欄消息到達(dá)所述同步管理裝置的順序,依次向所述柵欄同步 的各個(gè)小核發(fā)送確認(rèn)消息;步驟3,小核收到確認(rèn)消息后,繼續(xù)執(zhí)行柵欄指令之后的指令。本發(fā)明還公開了一種眾核處理器片上同步系統(tǒng),包括同步管理裝置和多個(gè)小核小核,用于執(zhí)行到柵欄指令時(shí),向同步管理裝置發(fā)送柵欄消息,然后進(jìn)入等待狀 態(tài),所述柵欄消息中包括syncjd和所在的柵欄同步中的小核的數(shù)量;同步管理裝置,用于接收到小核的柵欄消息,記錄所述小核,依據(jù)記錄和所述柵欄 消息檢查參與柵欄消息對(duì)應(yīng)的柵欄同步的小核的柵欄消息是否都已經(jīng)到達(dá)同步管理裝置, 如果是,則按各個(gè)小核的柵欄消息到達(dá)所述同步管理裝置的順序,依次向所述柵欄同步的 各個(gè)小核發(fā)送確認(rèn)消息;小核,用于收到確認(rèn)消息后,繼續(xù)執(zhí)行柵欄指令之后的指令。本發(fā)明公開了一種眾核處理器片上同步方法,包括步驟1,小核執(zhí)行到生產(chǎn)指令時(shí),向同步管理裝置發(fā)送生產(chǎn)消息,然后繼續(xù)執(zhí)行后 續(xù)指令,所述生產(chǎn)消息中包括第一數(shù)值和sync_id ;步驟2,小核執(zhí)行到消費(fèi)指令時(shí),向同步管理裝置發(fā)送消費(fèi)消息,然后進(jìn)入等待狀 態(tài),所述消費(fèi)消息中包括syncjd ;步驟3,同步管理裝置接收到生產(chǎn)消息時(shí),進(jìn)行生產(chǎn)接收記錄,并依據(jù)消費(fèi)等待記 錄和生產(chǎn)消息檢查是否已有消費(fèi)者等待發(fā)送所述生產(chǎn)消息的生產(chǎn)者,如果有,則按照各個(gè) 小核的消費(fèi)消息到達(dá)同步管理裝置的順序向所述小核發(fā)送確認(rèn)消息,發(fā)送的確認(rèn)消息的數(shù) 量不超過(guò)所述生產(chǎn)消息中第一數(shù)值;步驟4,同步管理裝置接收到小核的消費(fèi)消息時(shí),依據(jù)生產(chǎn)接收記錄和消費(fèi)消息檢
11查是否已經(jīng)接收到所述消費(fèi)消息中sync_id對(duì)應(yīng)的生產(chǎn)消息,如果是,則在所述生產(chǎn)消息 對(duì)應(yīng)確認(rèn)消息的已發(fā)送數(shù)量小于所述生產(chǎn)消息的第一數(shù)值時(shí),向發(fā)送所述消費(fèi)消息的小核 發(fā)送確認(rèn)消息,如果為否,則進(jìn)行消費(fèi)等待記錄;步驟5,小核收到確認(rèn)消息后,繼續(xù)執(zhí)行后續(xù)指令。本發(fā)明還公開了一種眾核處理器片上同步系統(tǒng),包括多個(gè)小核和同步管理裝置,小核,用于執(zhí)行到生產(chǎn)指令時(shí),向同步管理裝置發(fā)送生產(chǎn)消息,然后繼續(xù)執(zhí)行后續(xù) 指令,所述生產(chǎn)消息中包括第一數(shù)值和Sync_id ;小核,還用于執(zhí)行到消費(fèi)指令時(shí),向同步管理裝置發(fā)送消費(fèi)消息,然后進(jìn)入等待狀 態(tài),所述消費(fèi)消息中包括syncjd ;同步管理裝置用于接收到生產(chǎn)消息時(shí),進(jìn)行生產(chǎn)接收記錄,并依據(jù)消費(fèi)等待記錄 和生產(chǎn)消息檢查是否已有消費(fèi)者等待發(fā)送所述生產(chǎn)消息的生產(chǎn)者,如果有,則按照各個(gè)小 核的消費(fèi)消息到達(dá)同步管理裝置的順序向所述小核發(fā)送確認(rèn)消息,發(fā)送的確認(rèn)消息的數(shù)量 不超過(guò)所述生產(chǎn)消息中第一數(shù)值;同步管理裝置還用于接收到小核的消費(fèi)消息時(shí),依據(jù)生產(chǎn)接收記錄和消費(fèi)消息檢 查是否已經(jīng)接收到所述消費(fèi)消息中sync_id對(duì)應(yīng)的生產(chǎn)消息,如果是,則在所述生產(chǎn)消息 對(duì)應(yīng)確認(rèn)消息的已發(fā)送數(shù)量小于所述生產(chǎn)消息的第一數(shù)值時(shí),向發(fā)送所述消費(fèi)消息的小核 發(fā)送確認(rèn)消息,如果為否,則進(jìn)行消費(fèi)等待記錄;小核還用于收到確認(rèn)消息后,繼續(xù)執(zhí)行后續(xù)指令。本發(fā)明的有益效果在于,通過(guò)訪問(wèn)片上的同步管理裝置實(shí)現(xiàn)同步,避免訪問(wèn)片外 存儲(chǔ),片上的高速通信節(jié)約了大量的時(shí)間;本發(fā)明中的同步方法,在發(fā)出同步消息后,不再 向網(wǎng)絡(luò)上發(fā)送輪詢消息,而是等待同步管理裝置的確認(rèn)消息,避免了傳統(tǒng)方法中因?yàn)檩喸?內(nèi)存標(biāo)志位造成的網(wǎng)絡(luò)擁塞;專用的同步管理裝置,提高了同步效率,進(jìn)而幫助提高眾核處 理器的計(jì)算能力。
圖1是本發(fā)明的同步管理裝置在眾核處理器上的位置示意圖;圖2是用于維護(hù)等待鏈表的記錄表的示意圖;圖3是生產(chǎn)記錄表的示意圖;圖4是小核向同步管理裝置發(fā)送消息的格式的示意圖;圖5是眾核處理器片上同步方法中的臨界區(qū)內(nèi)互斥同步的方法流程圖;圖6是實(shí)施例中同步管理裝置處理acquire消息的過(guò)程的流程圖;圖7是實(shí)施例中同步管理裝置處理release消息的過(guò)程的流程圖;圖8是眾核處理器片上同步方法中的柵欄同步的方法流程圖;圖9是實(shí)施例中同步管理裝置處理barrier消息的過(guò)程的流程圖;圖10是實(shí)施例中同步管理裝置處理produce消息的過(guò)程的流程圖;圖11是實(shí)施例中同步管理裝置處理consume消息的過(guò)程的流程圖。
具體實(shí)施例方式下面結(jié)合附圖,對(duì)本發(fā)明做進(jìn)一步的詳細(xì)描述。
本發(fā)明提出在片上眾核體系結(jié)構(gòu)中,使用專用的片上同步管理裝置支持粗粒度同 步方法,由于訪問(wèn)片上同步管理裝置的時(shí)間遠(yuǎn)遠(yuǎn)小于訪問(wèn)內(nèi)存的時(shí)間,而且避免了因?yàn)檩?詢標(biāo)志位造成的網(wǎng)絡(luò)擁塞,因此減少了同步時(shí)間,進(jìn)而幫助提高眾核處理器的計(jì)算能力。所述片上同步管理裝置在眾核芯片上的位置如圖1所示,整個(gè)芯片是一個(gè)二維網(wǎng) 孔的結(jié)構(gòu),其中,標(biāo)記101是眾核芯片上N個(gè)小核中的一個(gè)小核,標(biāo)記102是眾核芯片上的 同步管理裝置。同步管理裝置能夠處理小核發(fā)來(lái)的五種消息,并向相應(yīng)小核發(fā)送確認(rèn)消息。所述小核發(fā)來(lái)的五種消息包括,acquire消息(申請(qǐng)消息),release消息(釋放消 息)、barrier消息(柵欄消息)、produce消息(生產(chǎn)消息)、consume消息(消費(fèi)消息)。acquire消息(申請(qǐng)消息),小核向同步管理裝置發(fā)消息申請(qǐng)一把鎖,用于實(shí)現(xiàn)臨 界區(qū)互斥;release消息(釋放消息),小核向同步管理裝置發(fā)消息釋放一把鎖,用于實(shí)現(xiàn)臨 界區(qū)互斥。barrier消息(柵欄消息),小核向同步管理裝置發(fā)柵欄消息通知同步管理裝置該 小核到達(dá)同步點(diǎn),用于barrier同步(柵欄同步)。produce消息(生產(chǎn)消息),小核向同步管理裝置發(fā)生產(chǎn)消息通知同步管理裝置該 小核生產(chǎn)完成,用于生產(chǎn)者-消費(fèi)者同步;consume消息(消費(fèi)消息),小核向同步管理裝置 發(fā)消費(fèi)消息通知同步管理裝置該小核要進(jìn)行消費(fèi),用于生產(chǎn)者_(dá)消費(fèi)者同步。所述同步管理裝置的結(jié)構(gòu)如圖2和圖3所示,同步管理裝置內(nèi)部維護(hù)兩張表。圖2所示記錄表用于維護(hù)申請(qǐng)鎖,柵欄同步或消費(fèi)的等待鏈表。每個(gè)小核對(duì)應(yīng)一行,表的行數(shù)與小核數(shù)目相同,編號(hào)為1的小核對(duì)應(yīng)第1行,編號(hào) 為2的小核對(duì)應(yīng)第2行,以此類推。r/w,表示讀寫標(biāo)志項(xiàng),用1位寄存器存儲(chǔ),用于記錄讀鎖或?qū)戞i,用0表示讀鎖,用 1表示寫鎖。這個(gè)初始值可以為0,也可以為1,因?yàn)槊看螌懹涗洉r(shí),都要改寫這個(gè)標(biāo)志項(xiàng),而 在查找記錄時(shí)只需要比較sync_id和tail,所以初始值是0或1并無(wú)影響,具體實(shí)施例中把 初始值設(shè)置為0。Sync_id,表示synC_id項(xiàng),用32位寄存器存儲(chǔ),用于記錄申請(qǐng)鎖,柵欄同步或消費(fèi) 對(duì)應(yīng)的Sync_id,同一小核的申請(qǐng)鎖,柵欄或消費(fèi)可以共用一個(gè)寄存器。初始值為空。head,表示頭標(biāo)志項(xiàng),用1位寄存器存儲(chǔ),1表示該小核是鏈表頭,0表示不是鏈表 頭,同一小核的申請(qǐng)鎖,柵欄同步或消費(fèi)可以共用該寄存器。初始值為無(wú)效,記為0。tail,表示尾標(biāo)志項(xiàng),用1位寄存器存儲(chǔ),1表示該小核是鏈表尾,0表示不是鏈表 尾,同一小核的申請(qǐng)鎖,柵欄同步或消費(fèi)可以共用該寄存器。初始值為無(wú)效,記為0。cnt,在柵欄同步使用,表示計(jì)數(shù)表項(xiàng),作為barrier計(jì)數(shù)器的寄存器,表示第一個(gè) 到達(dá)同步管理裝置的barrier消息對(duì)應(yīng)的cnt寄存器置為barrier消息中的count減1,以 后同步管理裝置每接收到一個(gè)barrier消息,對(duì)應(yīng)的cnt寄存器置為前一小核對(duì)應(yīng)的cnt 寄存器的值減1。初始值為0。next,表示下一節(jié)點(diǎn)項(xiàng),用于指示鏈表中的下一個(gè)結(jié)點(diǎn)的寄存器,同一小核的申請(qǐng) 鎖,柵欄同步或消費(fèi)可以共用該寄存器。初始值為空。圖3的生產(chǎn)記錄表用于維護(hù)生產(chǎn)者信息,每個(gè)小核對(duì)應(yīng)一行,表的行數(shù)與小核數(shù) 目相同。
其中wait,等待標(biāo)志項(xiàng),1位寄存器,1表示對(duì)應(yīng)小核已經(jīng)發(fā)出了一個(gè)produce消息并且 尚未被消費(fèi)完成。同一小核發(fā)出的第二個(gè)produce消息需要等待之前的produce處理完之后才能進(jìn) 入同步管理裝置。sync_id, sync_id項(xiàng),32位寄存器,表示produce的32位ID。初始值為空。cnt,數(shù)值記錄項(xiàng),表示還未到達(dá)同步管理裝置的消費(fèi)者數(shù)目的寄存器,每到達(dá)一 個(gè)消費(fèi)者,該計(jì)數(shù)器減1。初始值為0。synC_id用于表示同步ID。初始值為空。不同Sync_id對(duì)應(yīng)的鎖,是指不同的臨界區(qū),比如說(shuō)小核1和小核2競(jìng)爭(zhēng)進(jìn)入臨 界區(qū)1,小核3和小核4競(jìng)爭(zhēng)進(jìn)入臨界區(qū)2,這兩個(gè)臨界區(qū)之間不存在互斥,所以用兩把不 同Sync_id對(duì)應(yīng)的鎖,它們之間沒有聯(lián)系。不同Sync_id對(duì)應(yīng)的柵欄,是指兩組小核在不同 的barrier同步,而兩組小核之間沒有任何同步關(guān)系。不同sync_id對(duì)應(yīng)的的consume和 produce,是指不同的生產(chǎn)者-消費(fèi)者組,它們之間也沒有關(guān)系。所述確認(rèn)消息是同步管理裝置發(fā)送給小核的消息,通知小核可以繼續(xù)往下執(zhí)行。 當(dāng)小核執(zhí)行到acquire (申請(qǐng))/barrier (柵欄)/consume (消費(fèi))這三種指令時(shí),向同步管 理裝置發(fā)送acqUire(申請(qǐng)Vbarrier(柵欄Vconsume(消費(fèi))消息,然后進(jìn)入等待狀態(tài), 直到收到同步管理裝置的確認(rèn)消息才能繼續(xù)執(zhí)行后續(xù)指令。而小核執(zhí)行到release (釋放) 或produce (生產(chǎn))指令時(shí),并不等待同步管理裝置的確認(rèn)消息,繼續(xù)往下執(zhí)行指令。所述小核向同步管理裝置發(fā)送的消息,其消息格式如圖4,消息內(nèi)容包括synC_ id, count, core_id,msg_type 禾口 r/w,其中 sync_id 用于區(qū)分不用 ID 的鎖,barrier 或生產(chǎn) 者-消費(fèi)者;count表示參與對(duì)應(yīng)barrier同步的小核數(shù)目或一個(gè)生產(chǎn)者對(duì)應(yīng)的消費(fèi)者的 數(shù)目;corejd是向同步管理裝置發(fā)送消息的小核編號(hào);mSg_type用于表示上述五種消息 的類型;r/w表示鎖的類型,讀鎖或?qū)戞i。一種眾核處理器片上同步方法如圖5所示。步驟S1100,小核執(zhí)行到柵欄指令,向同步管理裝置發(fā)送一個(gè)申請(qǐng)鎖的申請(qǐng)消息, 然后進(jìn)入等待狀態(tài),所述申請(qǐng)消息中包括sync_id,并表明是讀鎖申請(qǐng)或?qū)戞i申請(qǐng)。步驟S1200,同步管理裝置接收到申請(qǐng)鎖的申請(qǐng)消息后,依據(jù)記錄檢查是否已經(jīng)有 小核申請(qǐng)相同sync_id的鎖,如果沒有,則向所述小核發(fā)送確認(rèn)消息,并對(duì)所述小核的申請(qǐng) 進(jìn)行記錄,否則,直接對(duì)所述小核的申請(qǐng)進(jìn)行記錄。步驟S1300,小核收到確認(rèn)消息后,進(jìn)入臨界區(qū),執(zhí)行完臨界區(qū)代碼后,向同步管理 裝置發(fā)送釋放鎖的釋放消息。步驟S1400,同步管理裝置收到釋放鎖的釋放消息,將發(fā)送所述釋放消息的小核從 記錄中刪除,依據(jù)記錄檢查是否還有等待該釋放的鎖的小核,如果有,則向所述鎖對(duì)應(yīng)的多 個(gè)申請(qǐng)讀鎖的小核發(fā)送確認(rèn)消息,如果記錄中沒有對(duì)應(yīng)的申請(qǐng)讀鎖的小核,則向記錄的所 述鎖對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息。對(duì)申請(qǐng)信息的記錄存在多種方法。在一優(yōu)選的實(shí)施方式中,采用鏈表進(jìn)行記錄。所述方法還包括步驟S1500,同步管理裝置對(duì)于每個(gè)Sync_id維護(hù)一個(gè)寫鎖等待鏈表和一個(gè)讀鎖等待鏈表;所述步驟S1200進(jìn)一步為,同步管理裝置接收到申請(qǐng)鎖的申請(qǐng)消息后,判斷Sync_ id對(duì)應(yīng)的寫鎖等待鏈表和讀鎖等待鏈表是否都為空,如果是,則向所述小核發(fā)送確認(rèn)消息, 并以所述小核作為所述寫鎖等待鏈表或讀鎖等待鏈表的表頭和表尾;否則,判斷所述小核 申請(qǐng)的是讀鎖還是寫鎖,并對(duì)應(yīng)將小核插入寫鎖等待鏈表或讀鎖等待鏈表的尾部。所述步驟S1400進(jìn)一步為,步驟S1410,同步管理裝置收到釋放鎖的釋放消息,將發(fā)送所述釋放消息的小核從 寫鎖等待鏈表或讀鎖等待鏈表中刪除,判斷sync_id對(duì)應(yīng)的讀鎖等待鏈表和寫鎖等待鏈表 是否都為空,如果不是,則執(zhí)行步驟S1420 ;步驟S1420,判斷所述讀鎖等待鏈表是否為空,如果否,則向所述讀鎖等待鏈表中 的多個(gè)小核發(fā)送確認(rèn)消息,如果是,則執(zhí)行步驟S1430。步驟S1430,向所述寫鎖等待鏈表的第一個(gè)小核發(fā)送確認(rèn)消息。所述寫鎖等待鏈表,是指所有申請(qǐng)相同syncjd的寫鎖的小核按照到達(dá)的順序在 同步管理裝置中形成鏈表。所述讀鎖等待鏈表,是指所有申請(qǐng)相同syncjd的讀鎖的小核按照到達(dá)的順序在 同步管理裝置中形成鏈表。所述寫鎖和讀鎖,同一時(shí)刻只允許一個(gè)小核擁有寫鎖,而多個(gè)小核可以同時(shí)擁有讀鎖。同步管理裝置支持不同syncjd的鎖,在同步管理裝置中可以形成多個(gè)不同ID的 鎖的鏈表。在進(jìn)一步的優(yōu)選的實(shí)施方式中,為便于對(duì)鏈表進(jìn)行查找和處理,同步管理裝置維 護(hù)記錄表,用于記錄小核對(duì)應(yīng)于寫鎖等待鏈表和讀鎖等待鏈表的信息,記錄表中每一行對(duì) 應(yīng)于一個(gè)小核,每一行包括讀寫標(biāo)志項(xiàng)、sync_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、下一節(jié)點(diǎn)項(xiàng)。具 體實(shí)施例如圖2所示。所述步驟S1200中以所述小核作為所述寫鎖等待鏈表或讀鎖等待鏈表的表頭和 表尾后還包括步驟S1210,在所述小核對(duì)應(yīng)行的sync_id項(xiàng)中填寫本次申請(qǐng)的syncjd,將所述 小核對(duì)應(yīng)行的頭標(biāo)志項(xiàng)和尾標(biāo)志項(xiàng)修改為有效,按所述小核的申請(qǐng)為讀鎖或?qū)戞i,對(duì)應(yīng)修 改所述小核對(duì)應(yīng)行的讀寫標(biāo)志項(xiàng)。所述步驟S1200中對(duì)應(yīng)將小核插入寫鎖等待鏈表或讀鎖等待鏈表的尾部后還包 括步驟S1220,在記錄表中查找同所述小核申請(qǐng)的sync_id相同,并且尾標(biāo)志項(xiàng)為有 效的行,在所述行的下一節(jié)點(diǎn)項(xiàng)中填寫所述小核的ID,將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效; 在所述被插入的小核對(duì)應(yīng)行的synC_id項(xiàng)中填寫本次申請(qǐng)的syncjd,將所述小核對(duì)應(yīng)行 的尾標(biāo)志項(xiàng)修改為有效,按所述小核的申請(qǐng)為讀鎖或?qū)戞i,對(duì)應(yīng)修改所述小核對(duì)應(yīng)行的讀 寫標(biāo)志項(xiàng)。所述步驟S1400中將發(fā)送所述釋放消息的小核從寫鎖等待鏈表或讀鎖等待鏈表 中刪除后還包括步驟S1410,將發(fā)送所述釋放消息的小核在記錄表中對(duì)應(yīng)行的各個(gè)表項(xiàng)值重新復(fù)位為初始值,并將記錄表中所述小核的下一節(jié)點(diǎn)項(xiàng)指向的小核對(duì)應(yīng)行的頭標(biāo)志項(xiàng)修改為有 效。進(jìn)一步的,在判斷syncjd對(duì)應(yīng)的寫鎖等待鏈表和讀鎖等待鏈表是否都為空時(shí)應(yīng) 用所述記錄表按如下方法進(jìn)行。將申請(qǐng)鎖的申請(qǐng)消息中的synC_id同記錄表中每一個(gè)sync_id項(xiàng)比較,如果存在 與所述申請(qǐng)消息中的syncjd相等的syncjd項(xiàng),并且所述syncjd項(xiàng)所在行的尾標(biāo)志項(xiàng) 不都為無(wú)效標(biāo)志,則寫鎖等待鏈表和讀鎖等待鏈表不都為空。判斷所述讀鎖等待鏈表是否為空按如下方法進(jìn)行。判斷記錄表中與所述申請(qǐng)消息中的sync_id相等的sync_id項(xiàng)對(duì)應(yīng)的行中的讀寫 標(biāo)志項(xiàng)是否沒有讀標(biāo)志,如果是,則所述讀鎖等待鏈表為空。向記錄的所述鎖對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息按如下方法進(jìn)行。在記錄表中查找sync_id項(xiàng)與所述申請(qǐng)消息中的sync_id相等,讀寫標(biāo)志項(xiàng)為寫 標(biāo)志,并且頭標(biāo)志為有效的行,向所述行對(duì)應(yīng)的小核發(fā)送確認(rèn)消息。所述方法的一具體實(shí)施例如下所述。acquire消息的處理過(guò)程如圖6所示。步驟S601,同步管理裝置收到acquire消息。步驟S602,查找記錄表,將acquire消息中的sync_id與記錄表中每一個(gè)sync_id 寄存器進(jìn)行比較,如果有存儲(chǔ)內(nèi)容與acquire消息中的syncjd相同的sync_id寄存器,而 且該行的tail寄存器存儲(chǔ)值為1,則該行對(duì)應(yīng)的小核是鏈表的表尾,說(shuō)明已經(jīng)有小核申請(qǐng) 了 acquire消息中的的syncjd對(duì)應(yīng)的鎖;否則,說(shuō)明還沒有小核申請(qǐng)acquire消息中的的 sync_id對(duì)應(yīng)的鎖。記錄表如圖2所示。步驟S603,依據(jù)查找的結(jié)果,判斷是否沒有小核申請(qǐng)acquire消息中的的syncjd 對(duì)應(yīng)的鎖,如果是,執(zhí)行步驟S604,否則執(zhí)行步驟S605。步驟S604,向當(dāng)前小核發(fā)送確認(rèn)消息,同時(shí)將acquire消息中的syncjd寫入記錄 表中該小核對(duì)應(yīng)行的sync_id寄存器,該行對(duì)應(yīng)的tail寄存器和head寄存器置為1,并將 鎖的類型寫入該行對(duì)應(yīng)的r/w寄存器。步驟S605,根據(jù)該小核申請(qǐng)的是讀鎖或?qū)戞i加入相應(yīng)的寫鎖等待鏈表或讀鎖等待 鏈表。將上一個(gè)申請(qǐng)?jiān)撴i的小核的next寄存器改為當(dāng)前小核的corejd,上一個(gè)申請(qǐng)?jiān)?鎖的小核的tail寄存器置為0,同時(shí)更新當(dāng)前小核對(duì)應(yīng)的syncjd寄存器為申請(qǐng)中synC_ id, tail寄存器置為1,并將申請(qǐng)鎖的類型寫入r/w寄存器。所述當(dāng)前小核,是同步管理裝置當(dāng)前收到acquire消息內(nèi)容中corejd對(duì)應(yīng)的小 核,也就是當(dāng)前收到的acquire消息的發(fā)送者。release消息的處理過(guò)程如圖7所示。步驟S701,同步管理裝置收到release消息。步驟S702,查找記錄表,如果讀鎖或?qū)戞i等待鏈表不為空,說(shuō)明還有小核等待同一 把鎖,否則說(shuō)明沒有小核等待同一把鎖。首先,判斷如果當(dāng)前小核對(duì)應(yīng)的next寄存器內(nèi)容為有效,則讀鎖或?qū)戞i等待鏈表不都為空,否則,將申請(qǐng)鎖的申請(qǐng)消息中的sync_id同記錄表中每一個(gè)sync_id項(xiàng)比較,如 果存在與所述申請(qǐng)消息中的Sync_id相等的syncjd項(xiàng),并且所述Sync_id項(xiàng)所在行的尾 標(biāo)志項(xiàng)不都為無(wú)效標(biāo)志,則寫鎖等待鏈表和讀鎖等待鏈表不都為空。步驟S703,依據(jù)查找結(jié)果判斷是否還有小核等待同一把鎖,如果是,則執(zhí)行步驟 S704,否則,執(zhí)行步驟S705。步驟S704,如果讀鎖等待鏈表不為空,向?qū)?yīng)的讀鎖等待鏈表中未發(fā)送確認(rèn)消息 的所有小核發(fā)送確認(rèn)消息,如果讀鎖等待鏈表為空,則向?qū)戞i等待鏈表的第一個(gè)小核發(fā)送 確認(rèn)消息。向?qū)戞i等待鏈表的第一個(gè)小核發(fā)送確認(rèn)消息進(jìn)一步為在記錄表中查找syncjd 項(xiàng)與所述申請(qǐng)消息中的syncjd相等,讀寫標(biāo)志項(xiàng)為寫標(biāo)志,并且頭標(biāo)志為有效的行,向所 述行對(duì)應(yīng)的小核發(fā)送確認(rèn)消息。步驟S705,把當(dāng)前小核在記錄表對(duì)應(yīng)行的tail寄存器置為0。將發(fā)送所述釋放消息的小核在記錄表中對(duì)應(yīng)行的各個(gè)表項(xiàng)值重新復(fù)位為初始值, 并將記錄表中所述小核的下一節(jié)點(diǎn)項(xiàng)指向的小核對(duì)應(yīng)行的頭標(biāo)志項(xiàng)修改為有效。本發(fā)明中眾核處理器片上同步系統(tǒng)包括多個(gè)小核和同步管理裝置。小核,用于執(zhí)行到申請(qǐng)指令,向同步管理裝置發(fā)送一個(gè)申請(qǐng)鎖的申請(qǐng)消息,然后進(jìn) 入等待狀態(tài),所述申請(qǐng)消息中包括sync_id,并表明是讀鎖申請(qǐng)或?qū)戞i申請(qǐng);收到確認(rèn)消息 后,進(jìn)入臨界區(qū),執(zhí)行完臨界區(qū)代碼后,向同步管理裝置發(fā)送釋放鎖的釋放消息。同步管理裝置,用于接收到申請(qǐng)鎖的申請(qǐng)消息后,依據(jù)記錄檢查是否已經(jīng)有小核 申請(qǐng)相同sync_id的鎖,如果沒有,則向所述小核發(fā)送確認(rèn)消息,并對(duì)小核的申請(qǐng)進(jìn)行記 錄;否則,直接對(duì)所述小核的申請(qǐng)進(jìn)行記錄;收到釋放鎖的釋放消息,將發(fā)送所述釋放消息 的小核從記錄中刪除,依據(jù)記錄檢查是否還有等待該釋放的鎖的小核,如果有,則向所述鎖 對(duì)應(yīng)的多個(gè)申請(qǐng)讀鎖的小核發(fā)送確認(rèn)消息,如果記錄中沒有對(duì)應(yīng)的申請(qǐng)讀鎖的小核,則向 記錄的所述鎖對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息。在一優(yōu)選實(shí)施方式中,同步管理裝置還用于對(duì)于每個(gè)syncjd維護(hù)一個(gè)寫鎖等待 鏈表和一個(gè)讀鎖等待鏈表。同步管理裝置進(jìn)一步用于接收到申請(qǐng)鎖的申請(qǐng)消息后,判斷syncjd對(duì)應(yīng)的寫鎖 等待鏈表和讀鎖等待鏈表是否都為空,如果是,則向所述小核發(fā)送確認(rèn)消息,并以所述小核 作為寫鎖等待鏈表或讀鎖等待鏈表的表頭和表尾;否則,判斷所述小核申請(qǐng)的是讀鎖還是 寫鎖,并對(duì)應(yīng)將小核插入寫鎖等待鏈表或讀鎖等待鏈表的尾部;收到釋放鎖的釋放消息,將 發(fā)送所述釋放消息的小核從寫鎖等待鏈表或讀鎖等待鏈表中刪除,判斷syncjd對(duì)應(yīng)的讀 鎖等待鏈表和寫鎖等待鏈表是否都為空,如果不是都為空,則判斷所述讀鎖等待鏈表是否 為空,如果否,則向所述讀鎖等待鏈表中的多個(gè)小核發(fā)送確認(rèn)消息,如果所述讀鎖等待鏈表 為空,則向所述寫鎖等待鏈表的第一個(gè)小核發(fā)送確認(rèn)消息。在進(jìn)一步的優(yōu)選實(shí)施方式中,同步管理裝置還用于維護(hù)記錄表,用于記錄小核對(duì) 應(yīng)于寫鎖等待鏈表和讀鎖等待鏈表的信息,記錄表中每一行對(duì)應(yīng)于一個(gè)小核,每一行包括 讀寫標(biāo)志項(xiàng)、sync_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、以及下一節(jié)點(diǎn)項(xiàng)。同步管理裝置在以所述小核作為所述寫鎖等待鏈表或讀鎖等待鏈表的表頭和表 尾后還用于在所述小核對(duì)應(yīng)行的synC_id項(xiàng)中填寫本次申請(qǐng)的syncjd,將所述小核對(duì)應(yīng)行的頭標(biāo)志項(xiàng)和尾標(biāo)志項(xiàng)修改為有效,按所述小核的申請(qǐng)為讀鎖或?qū)戞i,對(duì)應(yīng)修改所述小 核對(duì)應(yīng)行的讀寫標(biāo)志項(xiàng);同步管理裝置在對(duì)應(yīng)將小核插入寫鎖等待鏈表或讀鎖等待鏈表的尾部后還用于 在記錄表中查找同所述小核申請(qǐng)的Sync_id相同,并且尾標(biāo)志項(xiàng)為有效的行,在所述行的 下一節(jié)點(diǎn)項(xiàng)中填寫所述小核的ID,將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效;在所述被插入的小核 對(duì)應(yīng)行的synC_id項(xiàng)中填寫本次申請(qǐng)的Sync_id,將所述小核對(duì)應(yīng)行的尾標(biāo)志項(xiàng)修改為有 效,按所述小核的申請(qǐng)為讀鎖或?qū)戞i,對(duì)應(yīng)修改所述小核對(duì)應(yīng)行的讀寫標(biāo)志項(xiàng);同步管理裝置在將發(fā)送所述釋放消息的小核從寫鎖等待鏈表或讀鎖等待鏈表中 刪除后還用于將發(fā)送所述釋放消息的小核在記錄表中對(duì)應(yīng)行的各個(gè)表項(xiàng)值重新復(fù)位為初 始值;并將記錄表中所述小核的下一節(jié)點(diǎn)項(xiàng)指向的小核對(duì)應(yīng)行的頭標(biāo)志項(xiàng)修改為有效。進(jìn)一步的方案中。同步管理裝置在判斷syncjd對(duì)應(yīng)的寫鎖等待鏈表和讀鎖等待鏈表是否都為空 時(shí)進(jìn)一步用于將申請(qǐng)鎖的申請(qǐng)消息中的synC_id同記錄表中每一個(gè)sync_id項(xiàng)比較,如果存在 與所述申請(qǐng)消息中的syncjd相等的syncjd項(xiàng),并且所述syncjd項(xiàng)所在行的尾標(biāo)志項(xiàng) 不都為無(wú)效標(biāo)志,則寫鎖等待鏈表和讀鎖等待鏈表不都為空。同步管理裝置判斷所述讀鎖等待鏈表是否為空時(shí)進(jìn)一步用于判斷記錄表中與所述申請(qǐng)消息中的synC_id相等的sync_id項(xiàng)對(duì)應(yīng)的行中的讀寫 標(biāo)志項(xiàng)是否沒有讀標(biāo)志,如果是,則所述讀鎖等待鏈表為空。同步管理裝置向記錄的所述鎖對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息時(shí)進(jìn)
一步用于在記錄表中查找sync_id項(xiàng)與所述申請(qǐng)消息中的sync_id相等,讀寫標(biāo)志項(xiàng)為寫 標(biāo)志,并且頭標(biāo)志為有效的行,向所述行對(duì)應(yīng)的小核發(fā)送確認(rèn)消息。眾核處理器片上同步方法中的柵欄同步的方法流程如圖8所示。步驟S2100,小核執(zhí)行到柵欄指令時(shí),向同步管理裝置發(fā)送柵欄消息,然后進(jìn)入等 待狀態(tài),所述柵欄消息中包括sync_id和所在的柵欄同步中的小核的數(shù)量。步驟S2200,同步管理裝置接收到小核的柵欄消息,記錄所述小核,依據(jù)記錄和所 述柵欄消息檢查參與柵欄消息對(duì)應(yīng)的柵欄同步的小核的柵欄消息是否都已經(jīng)到達(dá)同步管 理裝置,如果是,則按各個(gè)小核的柵欄消息到達(dá)所述同步管理裝置的順序,依次向所述柵欄 同步的各個(gè)小核發(fā)送確認(rèn)消息。步驟S2300,小核收到確認(rèn)消息后,繼續(xù)執(zhí)行柵欄指令之后的指令。記錄存在多種方法。在一優(yōu)選的實(shí)施方式中,采用鏈表進(jìn)行記錄。所述方法還包括,同步管理裝置對(duì)應(yīng)于每個(gè)柵欄同步建立一個(gè)柵欄等待鏈表;所述步驟S2200中記錄所述小核進(jìn)一步為,依據(jù)所述柵欄消息中syn_id將所述小 核添加到所述syn_id對(duì)應(yīng)的柵欄同步的柵欄等待鏈表的表尾;所述步驟S2200中發(fā)送確認(rèn)消息時(shí)進(jìn)一步為,按柵欄等待鏈表從表頭到表尾的順 序,依次向各個(gè)小核發(fā)送確認(rèn)消息。為較快查找采用計(jì)數(shù)器對(duì)發(fā)送柵欄消息的小核進(jìn)行記錄。對(duì)柵欄消息的記錄存在多種方法,例如對(duì)應(yīng)每個(gè)柵欄同步的柵欄等待鏈表設(shè)置一個(gè)計(jì)數(shù)器記錄接收的對(duì)應(yīng)柵欄消息的數(shù)量,以確定是否接收到參與柵欄同步的所有小核發(fā) 送的柵欄消息。也可以不使用計(jì)數(shù)器,而用遍歷鏈表的方法,查找鏈表中節(jié)點(diǎn)數(shù)量來(lái)判斷是否接 收到參與柵欄同步的所有小核發(fā)送的柵欄消息。在一優(yōu)選實(shí)施方式中,所述方法還包括,同步管理裝置對(duì)于每個(gè)小核設(shè)置一個(gè)計(jì) 數(shù)器;所述步驟S2200中記錄所述小核時(shí)還包括,步驟S2201,在所述小核為柵欄等待鏈表的表頭時(shí),將所述小核的計(jì)數(shù)器的值置為 所述柵欄同步中的小核的數(shù)量減1 ;步驟S2202,在所述小核不為柵欄等待鏈表的表頭時(shí),將所述小核的計(jì)數(shù)器的值置 柵欄等待鏈表中前一節(jié)點(diǎn)的計(jì)數(shù)器的值減1 ;所述步驟S2200中檢查時(shí)進(jìn)一步為,步驟S2203,檢查柵欄等待鏈表的表尾的小核對(duì)應(yīng)的計(jì)數(shù)器的值是否為0,如果為 0,則參與柵欄同步的小核的柵欄消息都已經(jīng)到達(dá)同步管理裝置;否則,參與柵欄同步的小 核的柵欄消息沒有都到達(dá)同步管理裝置。在同步管理裝置中存在N個(gè)計(jì)數(shù)器,每個(gè)小核對(duì)應(yīng)一個(gè),每當(dāng)一個(gè)小核發(fā)送的 barrier消息到達(dá)同步管理裝置,其對(duì)應(yīng)的計(jì)數(shù)器在前一個(gè)的基礎(chǔ)上減1,最后一個(gè)達(dá)到小 核的對(duì)應(yīng)計(jì)數(shù)器變?yōu)?,表明所有小核的barrier消息都到達(dá)同步管理轉(zhuǎn)置。為方便查找,在一優(yōu)選實(shí)施方式中還是用記錄表記錄柵欄等待鏈表的信息。所述步驟S2200還包括同步管理裝置維護(hù)記錄表,用于記錄柵欄等待鏈表的信 息,記錄表中每一行對(duì)應(yīng)于一個(gè)小核,每一行包括sync_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、計(jì)數(shù) 項(xiàng)、以及下一節(jié)點(diǎn)項(xiàng);所述步驟S2200中記錄所述小核時(shí)還包括,步驟S2210,在所述小核發(fā)送的柵欄消息為同步管理裝置接收的對(duì)應(yīng)柵欄同步的 第一個(gè)柵欄消息時(shí),將記錄表中所述小核對(duì)應(yīng)行的sync_id項(xiàng)填寫為柵欄消息中syncjd, 頭標(biāo)志項(xiàng)和尾標(biāo)志項(xiàng)都置為有效,計(jì)數(shù)項(xiàng)置為柵欄消息中柵欄同步中的小核的數(shù)量減1 ;步驟S2220,在所述小核發(fā)送的柵欄消息不為同步管理裝置接收的對(duì)應(yīng)柵欄同步 的第一個(gè)柵欄消息時(shí),在記錄表中查找同所述柵欄消息的sync_id相同,并且尾標(biāo)志項(xiàng)為 有效的行,在所述行的下一節(jié)點(diǎn)項(xiàng)中填寫所述小核的ID,將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效; 將記錄表中所述小核對(duì)應(yīng)行的sync_id項(xiàng)中填寫所述柵欄消息的syncjd,尾標(biāo)志項(xiàng)修改 為有效,計(jì)數(shù)項(xiàng)置為查找到的原表尾小核對(duì)應(yīng)的計(jì)數(shù)項(xiàng)數(shù)值減1 ;所述步驟S2200中檢查時(shí)進(jìn)一步為,步驟S2230,判斷發(fā)送所述柵欄消息的小核在記錄表中對(duì)應(yīng)行的計(jì)數(shù)項(xiàng)是否為0, 如果為0,則參與柵欄同步的小核的柵欄消息都已經(jīng)到達(dá)同步管理裝置;否則,參與柵欄同 步的小核的柵欄消息沒有都到達(dá)同步管理裝置。所述步驟S2200中發(fā)送確認(rèn)消息后還包括,步驟S2240,將記錄表中所述柵欄消息對(duì)應(yīng)的柵欄等待鏈表的表頭和表尾所在行 的頭標(biāo)志項(xiàng)和尾標(biāo)志項(xiàng)分別置為無(wú)效。同步管理裝置支持不同的barrier同步,在同步管理裝置中可以形成多個(gè)不同syn_id的barrier等待鏈表。本發(fā)明的柵欄同步的方法的一實(shí)施例如下所述。barrier消息的處理過(guò)程如圖9所示。步驟S901,同步管理裝置接收到barrier消息。步驟S902,查找記錄表,將barrier消息內(nèi)容中的sync_id與表中每一個(gè)sync_ id寄存器進(jìn)行比較,如果有與barrier消息內(nèi)容中的syncjd相等的寄存器,而且同一行 的tail寄存器為1,則這一行對(duì)應(yīng)的小核是鏈表的表尾;否則,說(shuō)明還沒有相同syncjd的 barrier消息至Ij達(dá)。步驟903,依據(jù)查找結(jié)果判斷是否之前還沒有同所述sync」d的barrier消息 到達(dá),如果是,則說(shuō)明該barr i er消息為對(duì)應(yīng)barr i er同步第一個(gè)到達(dá)同步管理裝置的 barrier消息,執(zhí)行步驟S904,否則執(zhí)行步驟S905。步驟S904,建立一個(gè)柵欄等待鏈表,對(duì)應(yīng)于該barrier消息對(duì)應(yīng)的barrier同步, 當(dāng)前小核既是表頭又是表尾,將該小核對(duì)應(yīng)的記錄表中行的head寄存器和tail寄存器都 置為1,對(duì)應(yīng)的cnt寄存器置為count-Ι,其中count是barrier消息中的參與對(duì)應(yīng)barrier 同步的小核的數(shù)量。步驟S905,將當(dāng)前小核加入柵欄等待鏈表,變?yōu)樾碌逆湵砦?,在記錄表中該小核?duì) 應(yīng)行的tail寄存器置為l,cnt寄存器置為柵欄等待鏈表中前一小核cnt寄存器減1,柵欄 等待鏈表中前一小核的next寄存器改為當(dāng)前小核的corejd,柵欄等待鏈表中前一小核的 tail寄存器置為0。步驟S906,如果當(dāng)前小核對(duì)應(yīng)的cnt寄存器變?yōu)?,說(shuō)明所有參與該barrier同步 的小核的barrier消息都到達(dá)了同步管理裝置,執(zhí)行步驟S907,否則執(zhí)行步驟S908。步驟S907,從柵欄等待鏈表的表頭開始向柵欄等待鏈表中的每個(gè)小核按順序發(fā)送 確認(rèn)消息,并把表頭對(duì)應(yīng)的head寄存器和表尾對(duì)應(yīng)的tail寄存器清0。步驟S908:結(jié)束。一種眾核處理器片上同步系統(tǒng)包括同步管理裝置和多個(gè)小核。小核,用于執(zhí)行到柵欄指令時(shí),向同步管理裝置發(fā)送柵欄消息,然后進(jìn)入等待狀 態(tài),所述柵欄消息中包括syncjd和所在的柵欄同步中的小核的數(shù)量。同步管理裝置,用于接收到小核的柵欄消息,記錄所述小核,依據(jù)記錄和所述柵欄 消息檢查參與柵欄消息對(duì)應(yīng)的柵欄同步的小核的柵欄消息是否都已經(jīng)到達(dá)同步管理裝置, 如果是,則按各個(gè)小核的柵欄消息到達(dá)所述同步管理裝置的順序,依次向所述柵欄同步的 各個(gè)小核發(fā)送確認(rèn)消息。小核,用于收到確認(rèn)消息后,繼續(xù)執(zhí)行柵欄指令之后的指令。在一優(yōu)選實(shí)施方式中,同步管理裝置還用于對(duì)應(yīng)于每個(gè)柵欄同步建立一個(gè)柵欄等待鏈表;同步管理裝置記錄所述小核時(shí)進(jìn)一步用于,依據(jù)所述柵欄消息中syncjd將所述 小核添加到所述Sync_id對(duì)應(yīng)的柵欄同步的柵欄等待鏈表的表尾;同步管理裝置發(fā)送確認(rèn)消息時(shí)進(jìn)一步用于按柵欄等待鏈表從表頭到表尾的順序,依次向各個(gè)小核發(fā)送確認(rèn)消息。進(jìn)一步的優(yōu)選實(shí)施方式中,
同步管理裝置還用于對(duì)于每個(gè)小核設(shè)置一個(gè)計(jì)數(shù)器;同步管理裝置記錄所述小核時(shí)還用于在所述小核為柵欄等待鏈表的表頭時(shí),將所述小核的計(jì)數(shù)器的值置為所述柵欄同 步中的小核的數(shù)量減1;在所述小核不為柵欄等待鏈表的表頭時(shí),將所述小核的計(jì)數(shù)器的值置為柵欄等待 鏈表中前一節(jié)點(diǎn)的計(jì)數(shù)器的值減1 ;同步管理裝置檢查時(shí)進(jìn)一步用于檢查柵欄等待鏈表的表尾的小核對(duì)應(yīng)的計(jì)數(shù)器的值是否為0,如果為0,則參與柵 欄同步的小核的柵欄消息都已經(jīng)到達(dá)同步管理裝置;否則,參與柵欄同步的小核的柵欄消 息沒有都到達(dá)同步管理裝置。進(jìn)一步的優(yōu)選實(shí)施方式中,同步管理裝置還用于維護(hù)記錄表,用于記錄柵欄等待鏈表的信息,記錄表中每一 行對(duì)應(yīng)于一個(gè)小核,每一行包括sync_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、計(jì)數(shù)項(xiàng)、以及下一節(jié)點(diǎn) 項(xiàng);同步管理裝置記錄所述小核時(shí)還用于在所述小核發(fā)送的柵欄消息為同步管理裝置接收的對(duì)應(yīng)柵欄同步的第一個(gè)柵欄 消息時(shí),將記錄表中所述小核對(duì)應(yīng)行的sync_id項(xiàng)填寫為柵欄消息中syncjd,頭標(biāo)志項(xiàng)和 尾標(biāo)志項(xiàng)都置為有效,計(jì)數(shù)項(xiàng)置為柵欄消息中柵欄同步中的小核的數(shù)量減1 ;在所述小核發(fā)送的柵欄消息不為同步管理裝置接收的對(duì)應(yīng)柵欄同步的第一個(gè)柵 欄消息時(shí),在記錄表中查找同所述柵欄消息的sync_id相同,并且尾標(biāo)志項(xiàng)為有效的行,在 所述行的下一節(jié)點(diǎn)項(xiàng)中填寫所述小核的ID,將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效;將記錄表中 所述小核對(duì)應(yīng)行的sync_id項(xiàng)中填寫所述柵欄消息的syncjd,尾標(biāo)志項(xiàng)修改為有效,計(jì)數(shù) 項(xiàng)置為查找到的原表尾小核對(duì)應(yīng)的計(jì)數(shù)項(xiàng)數(shù)值減1 ;同步管理裝置檢查時(shí)進(jìn)一步用于判斷發(fā)送所述柵欄消息的小核在記錄表中對(duì)應(yīng)行的計(jì)數(shù)項(xiàng)是否為0,如果為0,則 參與柵欄同步的小核的柵欄消息都已經(jīng)到達(dá)同步管理裝置;否則,參與柵欄同步的小核的 柵欄消息沒有都到達(dá)同步管理裝置;同步管理裝置發(fā)送確認(rèn)消息后還用于將記錄表中所述柵欄消息對(duì)應(yīng)的柵欄等待鏈表的表頭和表尾所在行的頭標(biāo)志項(xiàng) 和尾標(biāo)志項(xiàng)分別置為無(wú)效。本發(fā)明的眾核處理器片上生產(chǎn)_消費(fèi)同步的方法。步驟S3100,小核執(zhí)行到生產(chǎn)指令時(shí),向同步管理裝置發(fā)送生產(chǎn)消息,然后繼續(xù)執(zhí) 行后續(xù)指令,所述生產(chǎn)消息中包括第一數(shù)值和syncjd。步驟S3200,小核執(zhí)行到消費(fèi)指令時(shí),向同步管理裝置發(fā)送消費(fèi)消息,然后進(jìn)入等 待狀態(tài),所述消費(fèi)消息中包括sync_id。步驟S3300,同步管理裝置接收到生產(chǎn)消息時(shí),進(jìn)行生產(chǎn)接收記錄,并依據(jù)消費(fèi)等 待記錄和生產(chǎn)消息檢查是否已有消費(fèi)者等待發(fā)送所述生產(chǎn)消息的生產(chǎn)者,如果有,則按照 各個(gè)小核的消費(fèi)消息到達(dá)同步管理裝置的順序向所述小核發(fā)送確認(rèn)消息,發(fā)送的確認(rèn)消息 的數(shù)量不超過(guò)所述生產(chǎn)消息中第一數(shù)值
步驟S3400,同步管理裝置接收到小核的消費(fèi)消息時(shí),依據(jù)生產(chǎn)接收記錄和消費(fèi)消 息檢查是否已經(jīng)接收到所述消費(fèi)消息中sync_id對(duì)應(yīng)的生產(chǎn)消息,如果是,則在所述生產(chǎn) 消息對(duì)應(yīng)確認(rèn)消息的已發(fā)送數(shù)量小于所述生產(chǎn)消息的第一數(shù)值時(shí),向發(fā)送所述消費(fèi)消息的 小核發(fā)送確認(rèn)消息,如果為否,則進(jìn)行消費(fèi)等待記錄。步驟S3500,小核收到確認(rèn)消息后,繼續(xù)執(zhí)行后續(xù)指令。進(jìn)行記錄的方法有多種,如隊(duì)列、堆棧等。本發(fā)明的一優(yōu)選實(shí)施方式中采用鏈表和 表格的方式記錄。同步管理裝置對(duì)應(yīng)于每個(gè)生產(chǎn)_消費(fèi)同步建立一個(gè)消費(fèi)等待鏈表,并用生產(chǎn)記錄 表維護(hù)各個(gè)生產(chǎn)_消費(fèi)同步的生產(chǎn)者信息;生產(chǎn)記錄表每一行對(duì)應(yīng)一個(gè)小核,每行中包含Sync_id項(xiàng)、等待標(biāo)志項(xiàng)、以及數(shù)值 記錄項(xiàng);所述步驟S3300中進(jìn)行生產(chǎn)接收記錄進(jìn)一步為,在生產(chǎn)記錄表中找到發(fā)送所述生 產(chǎn)消息的小核對(duì)應(yīng)的行,將所述行中等待標(biāo)志項(xiàng)置為有效,將所述行中Sync_id項(xiàng)填為所 述生產(chǎn)消息中sync_id,將所述行中數(shù)值記錄項(xiàng)填為所述生產(chǎn)消息中第一數(shù)值;所述步驟S3400中進(jìn)行消費(fèi)等待記錄進(jìn)一步為,依據(jù)所述消費(fèi)消息中syn_id將所 述小核添加到所述syn_id對(duì)應(yīng)的生產(chǎn)_消費(fèi)同步的消費(fèi)等待鏈表的表尾。在進(jìn)一步的優(yōu)選實(shí)施方式中所述步驟S3300中檢查時(shí)進(jìn)一步為,步驟S3310,檢查所述生產(chǎn)消息的syncjd對(duì)應(yīng)的生產(chǎn)-消費(fèi)同步的消費(fèi)等待鏈表 是否為空,如果不為空,則按所述消費(fèi)等待鏈表從表頭到表尾的順序向各個(gè)節(jié)點(diǎn)對(duì)應(yīng)小核 發(fā)送確認(rèn)消息,每發(fā)送一個(gè)確認(rèn)消息將生產(chǎn)記錄表中對(duì)應(yīng)行的數(shù)值記錄項(xiàng)中的值減1,在所 述數(shù)值記錄項(xiàng)為0時(shí),將對(duì)應(yīng)行的等待標(biāo)志項(xiàng)置為無(wú)效,停止發(fā)送確認(rèn)消息;所述步驟S3400中檢查時(shí)進(jìn)一步為,步驟S3410,在生產(chǎn)記錄表中查找syncjd表項(xiàng)同所述消費(fèi)消息中syncjd相同的 行,如果查找到并且所述行的等待標(biāo)志項(xiàng)為有效,則向發(fā)送所述消費(fèi)消息的小核發(fā)送確認(rèn) 消息,將生產(chǎn)記錄表中所述行中數(shù)值記錄項(xiàng)的值減1,在數(shù)值記錄項(xiàng)的值變?yōu)?時(shí),將所述 行的等待標(biāo)志項(xiàng)置為無(wú)效;如果沒有查找到,進(jìn)行所述消費(fèi)等待記錄。在一優(yōu)選實(shí)施方式中,采用表格維護(hù)鏈表信息以方便查找。所述步驟S3400中還包括,同步管理裝置維護(hù)消費(fèi)記錄表,用于記錄消費(fèi)等待鏈 表的信息,消費(fèi)記錄表中每一行對(duì)應(yīng)于一個(gè)小核,每一行包括synC_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo) 志項(xiàng)、以及下一節(jié)點(diǎn)項(xiàng);所述步驟S3400中進(jìn)行消費(fèi)等待記錄后還包括,步驟S3401,在消費(fèi)記錄表中查找所述消費(fèi)消息中syncjd對(duì)應(yīng)的消費(fèi)等待鏈表 的尾節(jié)點(diǎn)對(duì)應(yīng)的行,如果查找到,則將所述行的下一節(jié)點(diǎn)項(xiàng)填寫為發(fā)送所述消費(fèi)消息的小 核的ID,將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效;步驟S3402,在消費(fèi)記錄表中查找到發(fā)送所述消費(fèi)消息的小核對(duì)應(yīng)的行時(shí),將所述 行的synC_id項(xiàng)填寫為所述消費(fèi)消息中的syncjd,將所述行的尾標(biāo)志項(xiàng)值為有效;在消費(fèi) 記錄表中沒有查找所述消費(fèi)消息中syncjd對(duì)應(yīng)的行時(shí),將所述行的頭標(biāo)志項(xiàng)置為有效;所述步驟S3300中檢查時(shí)進(jìn)一步為,
步驟S3301,在消費(fèi)記錄表中查找所述生產(chǎn)消息的syncjd對(duì)應(yīng)的消費(fèi)等待鏈表 的表頭對(duì)應(yīng)的行,從表頭開始依據(jù)下一節(jié)點(diǎn)項(xiàng)向所述消費(fèi)等待鏈表節(jié)點(diǎn)對(duì)應(yīng)的小核發(fā)送確 認(rèn)消息,每發(fā)送一個(gè)確認(rèn)消息,將生產(chǎn)記錄表中對(duì)應(yīng)行的數(shù)值記錄項(xiàng)中的值減1,并更新消 費(fèi)記錄表中記錄,在所述數(shù)值記錄項(xiàng)為0時(shí),將對(duì)應(yīng)行的等待標(biāo)志項(xiàng)置為無(wú)效,停止發(fā)送確 認(rèn)消息。produce消息的處理過(guò)程如圖10所示步驟S1001,同步管理裝置接收produce消息。步驟S1002,在生產(chǎn)記錄表中檢查當(dāng)前小核對(duì)應(yīng)的wait寄存器。步驟S1003,如果當(dāng)前小核對(duì)應(yīng)的wait寄存器為1,說(shuō)明當(dāng)前小核已經(jīng)發(fā)過(guò)一個(gè) produce消息且尚未consume完成,進(jìn)入步驟S1004,否則進(jìn)入步驟S1005。步驟S1004,不接受所述收到的produce消息。步驟S1005,更新生產(chǎn)記錄表中,produce消息中sync_id對(duì)應(yīng)的寄存器,sync_id 寄存器置為消息內(nèi)容中的sync_id,cnt寄存器置為produce消息內(nèi)容中的count,且wait 寄存器置1。步驟S1006,檢查消費(fèi)記錄表,將produce消息中的sync_id與消費(fèi)記錄表中的
sync_id進(jìn)行--比較,并且查找的sunc_id同produce消息中的sync_id相同的行的head
寄存器。步驟S1007,如果有syncjd相同的行,并且該行的head寄存器為1,則表明已經(jīng) 有消費(fèi)者到達(dá),進(jìn)入步驟S1008,否則,進(jìn)入步驟S1009。步驟S1008 從消費(fèi)等待鏈表的head開始向等待該生產(chǎn)者的每個(gè)小核發(fā)送確認(rèn)消 息,每發(fā)送一個(gè)確認(rèn)消息,就將生產(chǎn)記錄表中對(duì)應(yīng)的生產(chǎn)者的cnt寄存器減1,并將等待鏈 表的表頭的head寄存器和表尾的tail寄存器都清0。步驟S1009,結(jié)束。步驟S1010,如果生產(chǎn)記錄表中對(duì)應(yīng)的生產(chǎn)者cnt寄存器減為0,則進(jìn)入步驟 S1011,否則進(jìn)入步驟S1012。步驟S1011,生產(chǎn)-消費(fèi)過(guò)程完成,生產(chǎn)記錄表對(duì)應(yīng)的wait寄存器置為0。步驟S1012:結(jié)束。consume消息的處理過(guò)程如圖11所示步驟S1101,同步管理裝置接收consume消息。步驟S1102,查生產(chǎn)記錄表,把消息中的syncjd與每一個(gè)syncjd寄存器比較。步驟S1103,如果找到sync_id相同的寄存器,并且對(duì)應(yīng)的wait寄存器為1,說(shuō)明 生產(chǎn)者已經(jīng)到來(lái),進(jìn)入步驟S1104,否則進(jìn)入步驟S1105。步驟S1104,向當(dāng)前小核發(fā)送確認(rèn)消息,對(duì)應(yīng)生產(chǎn)者計(jì)數(shù)器減1。步驟S1105,把當(dāng)前小核加入的消費(fèi)等待鏈表,消費(fèi)記錄表中消費(fèi)等待鏈表原表尾 的next寄存器置為當(dāng)前小核的corejd,tail寄存器清0,當(dāng)前小核對(duì)應(yīng)的syncjd寄存 器置為消息內(nèi)容中的sync_id,tail寄存器置為1。步驟S1106,如果生產(chǎn)者計(jì)數(shù)器是否減為0,進(jìn)入步驟S1107,否則進(jìn)入步驟S1108。步驟S1107,生產(chǎn)者對(duì)應(yīng)的wait寄存器置為0。步驟S1108,結(jié)束。
本發(fā)明一種眾核處理器片上同步系統(tǒng)包括多個(gè)小核和同步管理裝置,小核,用于執(zhí)行到生產(chǎn)指令時(shí),向同步管理裝置發(fā)送生產(chǎn)消息,然后繼續(xù)執(zhí)行后續(xù) 指令,所述生產(chǎn)消息中包括第一數(shù)值和Sync_id ;小核,還用于執(zhí)行到消費(fèi)指令時(shí),向同步管理裝置發(fā)送消費(fèi)消息,然后進(jìn)入等待狀 態(tài),所述消費(fèi)消息中包括syncjd ;同步管理裝置用于接收到生產(chǎn)消息時(shí),進(jìn)行生產(chǎn)接收記錄,并依據(jù)消費(fèi)等待記錄 和生產(chǎn)消息檢查是否已有消費(fèi)者等待發(fā)送所述生產(chǎn)消息的生產(chǎn)者,如果有,則按照各個(gè)小 核的消費(fèi)消息到達(dá)同步管理裝置的順序向所述小核發(fā)送確認(rèn)消息,發(fā)送的確認(rèn)消息的數(shù)量 不超過(guò)所述生產(chǎn)消息中第一數(shù)值;同步管理裝置還用于接收到小核的消費(fèi)消息時(shí),依據(jù)生產(chǎn)接收記錄和消費(fèi)消息檢 查是否已經(jīng)接收到所述消費(fèi)消息中sync_id對(duì)應(yīng)的生產(chǎn)消息,如果是,則在所述生產(chǎn)消息 對(duì)應(yīng)確認(rèn)消息的已發(fā)送數(shù)量小于所述生產(chǎn)消息的第一數(shù)值時(shí),向發(fā)送所述消費(fèi)消息的小核 發(fā)送確認(rèn)消息,如果為否,則進(jìn)行消費(fèi)等待記錄;小核還用于收到確認(rèn)消息后,繼續(xù)執(zhí)行后續(xù)指令。在一優(yōu)選實(shí)施方式如下所述。同步管理裝置還用于對(duì)應(yīng)于每個(gè)生產(chǎn)_消費(fèi)同步建立一個(gè)消費(fèi)等待鏈表,并用生 產(chǎn)記錄表維護(hù)各個(gè)生產(chǎn)_消費(fèi)同步的生產(chǎn)者信息;生產(chǎn)記錄表每一行對(duì)應(yīng)一個(gè)小核,每行中包含syncjd項(xiàng)、等待標(biāo)志項(xiàng)、以及數(shù)值 記錄項(xiàng);同步管理裝置進(jìn)行生產(chǎn)接收記錄時(shí)進(jìn)一步用于,在生產(chǎn)記錄表中找到發(fā)送所述生 產(chǎn)消息的小核對(duì)應(yīng)的行,將所述行中等待標(biāo)志項(xiàng)置為有效,將所述行中syncjd項(xiàng)填為所 述生產(chǎn)消息中sync_id,將所述行中數(shù)值記錄項(xiàng)填為所述生產(chǎn)消息中第一數(shù)值;同步管理裝置進(jìn)行消費(fèi)等待記錄時(shí)進(jìn)一步用于,依據(jù)所述消費(fèi)消息中syncjd將 所述小核添加到所述sync_id對(duì)應(yīng)的生產(chǎn)_消費(fèi)同步的消費(fèi)等待鏈表的表尾。進(jìn)一步的優(yōu)選實(shí)施方式中,同步管理裝置接收到生產(chǎn)消息進(jìn)行檢查時(shí)進(jìn)一步用于檢查所述生產(chǎn)消息的syncjd對(duì)應(yīng)的生產(chǎn)-消費(fèi)同步的消費(fèi)等待鏈表是否為空, 如果不為空,則按所述消費(fèi)等待鏈表從表頭到表尾的順序向各個(gè)節(jié)點(diǎn)對(duì)應(yīng)小核發(fā)送確認(rèn)消 息,每發(fā)送一個(gè)確認(rèn)消息將生產(chǎn)記錄表中對(duì)應(yīng)行的數(shù)值記錄項(xiàng)中的值減1,在所述數(shù)值記錄 項(xiàng)為0時(shí),將對(duì)應(yīng)行的等待標(biāo)志項(xiàng)置為無(wú)效,停止發(fā)送確認(rèn)消息;同步管理裝置接收到小核的消費(fèi)消息檢查時(shí)進(jìn)一步用于在生產(chǎn)記錄表中查找sync_id表項(xiàng)同所述消費(fèi)消息中sync_id相同的行,如果查 找到并且所述行的等待標(biāo)志項(xiàng)為有效,則向發(fā)送所述消費(fèi)消息的小核發(fā)送確認(rèn)消息,將生 產(chǎn)記錄表中所述行中數(shù)值記錄項(xiàng)的值減1,在數(shù)值記錄項(xiàng)的值變?yōu)?時(shí),將所述行的等待標(biāo) 志項(xiàng)置為無(wú)效;如果沒有查找到,進(jìn)行所述消費(fèi)等待記錄。進(jìn)一步的優(yōu)選實(shí)施方式中,同步管理裝置還用于維護(hù)消費(fèi)記錄表,用于記錄消費(fèi)等待鏈表的信息,消費(fèi)記錄 表中每一行對(duì)應(yīng)于一個(gè)小核,每一行包括SynC_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、以及下一節(jié)點(diǎn) 項(xiàng);同步管理裝置進(jìn)行消費(fèi)等待記錄后還用于
在消費(fèi)記錄表中查找所述消費(fèi)消息中Sync_id對(duì)應(yīng)的消費(fèi)等待鏈表的尾節(jié)點(diǎn)對(duì) 應(yīng)的行,如果查找到,則將所述行的下一節(jié)點(diǎn)項(xiàng)填寫為發(fā)送所述消費(fèi)消息的小核的ID,將所 述行的尾標(biāo)志項(xiàng)修改為無(wú)效;在消費(fèi)記錄表中查找到發(fā)送所述消費(fèi)消息的小核對(duì)應(yīng)的行時(shí),將所述行的synC_ id項(xiàng)填寫為所述消費(fèi)消息中的syncjd,將所述行的尾標(biāo)志項(xiàng)值為有效;在消費(fèi)記錄表中 沒有查找所述消費(fèi)消息中sync_id對(duì)應(yīng)的行時(shí),將所述行的頭標(biāo)志項(xiàng)置為有效;同步管理裝置接收到生產(chǎn)消息進(jìn)行檢查時(shí)進(jìn)一步為,在消費(fèi)記錄表中查找所述生產(chǎn)消息的sync_id對(duì)應(yīng)的消費(fèi)等待鏈表的表頭對(duì)應(yīng) 的行,從表頭開始依據(jù)下一節(jié)點(diǎn)項(xiàng)向所述消費(fèi)等待鏈表節(jié)點(diǎn)對(duì)應(yīng)的小核發(fā)送確認(rèn)消息,每 發(fā)送一個(gè)確認(rèn)消息,將生產(chǎn)記錄表中對(duì)應(yīng)行的數(shù)值記錄項(xiàng)中的值減1,并更新消費(fèi)記錄表中 記錄,在所述數(shù)值記錄項(xiàng)為0時(shí),將對(duì)應(yīng)行的等待標(biāo)志項(xiàng)置為無(wú)效,停止發(fā)送確認(rèn)消息。本領(lǐng)域的技術(shù)人員在不脫離權(quán)利要求書確定的本發(fā)明的精神和范圍的條件下,還 可以對(duì)以上內(nèi)容進(jìn)行各種各樣的修改。因此本發(fā)明的范圍并不僅限于以上的說(shuō)明,而是由 權(quán)利要求書的范圍來(lái)確定的。
權(quán)利要求
一種眾核處理器片上同步方法,其特征在于,包括步驟1,小核執(zhí)行到申請(qǐng)指令,向同步管理裝置發(fā)送一個(gè)申請(qǐng)鎖的申請(qǐng)消息,然后進(jìn)入等待狀態(tài),所述申請(qǐng)消息中包括sync_id,并表明是讀鎖申請(qǐng)或?qū)戞i申請(qǐng);步驟2,同步管理裝置接收到申請(qǐng)鎖的申請(qǐng)消息后,依據(jù)記錄檢查是否已經(jīng)有小核申請(qǐng)相同sync_id的鎖,如果沒有,則向所述小核發(fā)送確認(rèn)消息,并對(duì)小核的申請(qǐng)進(jìn)行記錄;否則,直接對(duì)所述小核的申請(qǐng)進(jìn)行記錄;步驟3,小核收到確認(rèn)消息后,進(jìn)入臨界區(qū),執(zhí)行完臨界區(qū)代碼后,向同步管理裝置發(fā)送釋放鎖的釋放消息;步驟4,同步管理裝置收到釋放鎖的釋放消息,將發(fā)送所述釋放消息的小核從記錄中刪除,依據(jù)記錄檢查是否還有等待該釋放的鎖的小核,如果有,則向所述鎖對(duì)應(yīng)的多個(gè)申請(qǐng)讀鎖的小核發(fā)送確認(rèn)消息,如果記錄中沒有對(duì)應(yīng)的申請(qǐng)讀鎖的小核,則向記錄的所述鎖對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息。
2.如權(quán)利要求1所述的眾核處理器片上同步方法,其特征在于, 所述方法還包括步驟21,同步管理裝置對(duì)于每個(gè)syncjd維護(hù)一個(gè)寫鎖等待鏈表和一個(gè)讀鎖等待鏈表;所述步驟2進(jìn)一步為,同步管理裝置接收到申請(qǐng)鎖的申請(qǐng)消息后,判斷syncjd對(duì)應(yīng)的 寫鎖等待鏈表和讀鎖等待鏈表是否都為空,如果是,則向所述小核發(fā)送確認(rèn)消息,并以所述 小核作為寫鎖等待鏈表或讀鎖等待鏈表的表頭和表尾;否則,判斷所述小核申請(qǐng)的是讀鎖 還是寫鎖,并對(duì)應(yīng)將小核插入寫鎖等待鏈表或讀鎖等待鏈表的尾部; 所述步驟4進(jìn)一步為,步驟22,同步管理裝置收到釋放鎖的釋放消息,將發(fā)送所述釋放消息的小核從寫鎖等 待鏈表或讀鎖等待鏈表中刪除,判斷sync_id對(duì)應(yīng)的讀鎖等待鏈表和寫鎖等待鏈表是否都 為空,如果不是,則執(zhí)行步驟23 ;步驟23,判斷所述讀鎖等待鏈表是否為空,如果否,則向所述讀鎖等待鏈表中的多個(gè)小 核發(fā)送確認(rèn)消息,如果是,則執(zhí)行步驟24,步驟24,向所述寫鎖等待鏈表的第一個(gè)小核發(fā)送確認(rèn)消息。
3.如權(quán)利要求2所述的眾核處理器片上同步方法,其特征在于,所述步驟21還包括同步管理裝置維護(hù)記錄表,用于記錄小核對(duì)應(yīng)于寫鎖等待鏈表和 讀鎖等待鏈表的信息,記錄表中每一行對(duì)應(yīng)于一個(gè)小核,每一行包括讀寫標(biāo)志項(xiàng)、sync_id 項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、以及下一節(jié)點(diǎn)項(xiàng);所述步驟2中以所述小核作為所述寫鎖等待鏈表或讀鎖等待鏈表的表頭和表尾后還 包括步驟31,在所述小核對(duì)應(yīng)行的sync_id項(xiàng)中填寫本次申請(qǐng)的Sync_id,將所述小核對(duì)應(yīng) 行的頭標(biāo)志項(xiàng)和尾標(biāo)志項(xiàng)修改為有效,按所述小核的申請(qǐng)為讀鎖或?qū)戞i,對(duì)應(yīng)修改所述小 核對(duì)應(yīng)行的讀寫標(biāo)志項(xiàng);所述步驟2中對(duì)應(yīng)將小核插入寫鎖等待鏈表或讀鎖等待鏈表的尾部后還包括 步驟32,在記錄表中查找同所述小核申請(qǐng)的syncjd相同,并且尾標(biāo)志項(xiàng)為有效的行, 在所述行的下一節(jié)點(diǎn)項(xiàng)中填寫所述小核的ID,將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效;在所述被插入的小核對(duì)應(yīng)行的synC_id項(xiàng)中填寫本次申請(qǐng)的Sync_id,將所述小核對(duì)應(yīng)行的尾標(biāo) 志項(xiàng)修改為有效,按所述小核的申請(qǐng)為讀鎖或?qū)戞i,對(duì)應(yīng)修改所述小核對(duì)應(yīng)行的讀寫標(biāo)志 項(xiàng);所述步驟4中將發(fā)送所述釋放消息的小核從寫鎖等待鏈表或讀鎖等待鏈表中刪除后 還包括步驟33,將發(fā)送所述釋放消息的小核在記錄表中對(duì)應(yīng)行的各個(gè)表項(xiàng)值重新復(fù)位為初始 值;并將記錄表中所述小核的下一節(jié)點(diǎn)項(xiàng)指向的小核對(duì)應(yīng)行的頭標(biāo)志項(xiàng)修改為有效。
4.如權(quán)利要求3所述的眾核處理器片上同步方法,其特征在于,所述步驟2中和所述步驟4中判斷synC_id對(duì)應(yīng)的寫鎖等待鏈表和讀鎖等待鏈表是否 都為空進(jìn)一步為,步驟41,將申請(qǐng)鎖的申請(qǐng)消息中的sync」d同記錄表中每一個(gè)sync」d項(xiàng)比較,如果存 在與所述申請(qǐng)消息中的syncjd相等的syncjd項(xiàng),并且所述syncjd項(xiàng)所在行的尾標(biāo)志 項(xiàng)不都為無(wú)效標(biāo)志,則寫鎖等待鏈表和讀鎖等待鏈表不都為空;所述步驟4中判斷所述讀鎖等待鏈表是否為空進(jìn)一步為,步驟42,判斷記錄表中與所述申請(qǐng)消息中的synC_id相等的synC_id項(xiàng)對(duì)應(yīng)的行中的 讀寫標(biāo)志項(xiàng)是否沒有讀標(biāo)志,如果是,則所述讀鎖等待鏈表為空;所述步驟4中向記錄的所述鎖對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息進(jìn)一步為,步驟43,在記錄表中查找sync」d項(xiàng)與所述申請(qǐng)消息中的sync」d相等,讀寫標(biāo)志項(xiàng)為 寫標(biāo)志,并且頭標(biāo)志為有效的行,向所述行對(duì)應(yīng)的小核發(fā)送確認(rèn)消息。
5.一種眾核處理器片上同步系統(tǒng),其特征在于,包括同步管理裝置和多個(gè)小核,小核,用于執(zhí)行到申請(qǐng)指令,向同步管理裝置發(fā)送一個(gè)申請(qǐng)鎖的申請(qǐng)消息,然后進(jìn)入等 待狀態(tài),所述申請(qǐng)消息中包括sync_id,并表明是讀鎖申請(qǐng)或?qū)戞i申請(qǐng);收到確認(rèn)消息后, 進(jìn)入臨界區(qū),執(zhí)行完臨界區(qū)代碼后,向同步管理裝置發(fā)送釋放鎖的釋放消息;同步管理裝置,用于接收到申請(qǐng)鎖的申請(qǐng)消息后,依據(jù)記錄檢查是否已經(jīng)有小核申請(qǐng) 相同syncjd的鎖,如果沒有,則向所述小核發(fā)送確認(rèn)消息,并對(duì)小核的申請(qǐng)進(jìn)行記錄;否 則,直接對(duì)所述小核的申請(qǐng)進(jìn)行記錄;收到釋放鎖的釋放消息,將發(fā)送所述釋放消息的小核 從記錄中刪除,依據(jù)記錄檢查是否還有等待該釋放的鎖的小核,如果有,則向所述鎖對(duì)應(yīng)的 多個(gè)申請(qǐng)讀鎖的小核發(fā)送確認(rèn)消息,如果記錄中沒有對(duì)應(yīng)的申請(qǐng)讀鎖的小核,則向記錄的 所述鎖對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息。
6.如權(quán)利要求5所述的眾核處理器片上同步系統(tǒng),其特征在于,同步管理裝置還用于對(duì)于每個(gè)syncjd維護(hù)一個(gè)寫鎖等待鏈表和一個(gè)讀鎖等待鏈表;同步管理裝置進(jìn)一步用于接收到申請(qǐng)鎖的申請(qǐng)消息后,判斷syncjd對(duì)應(yīng)的寫鎖等待鏈表和讀鎖等待鏈表是否 都為空,如果是,則向所述小核發(fā)送確認(rèn)消息,并以所述小核作為寫鎖等待鏈表或讀鎖等待 鏈表的表頭和表尾;否則,判斷所述小核申請(qǐng)的是讀鎖還是寫鎖,并對(duì)應(yīng)將小核插入寫鎖等 待鏈表或讀鎖等待鏈表的尾部;收到釋放鎖的釋放消息,將發(fā)送所述釋放消息的小核從寫鎖等待鏈表或讀鎖等待鏈表 中刪除,判斷sync_id對(duì)應(yīng)的讀鎖等待鏈表和寫鎖等待鏈表是否都為空,如果不是都為空, 則判斷所述讀鎖等待鏈表是否為空,如果否,則向所述讀鎖等待鏈表中的多個(gè)小核發(fā)送確認(rèn)消息,如果所述讀鎖等待鏈表為空,則向所述寫鎖等待鏈表的第一個(gè)小核發(fā)送確認(rèn)消息。
7.如權(quán)利要求6所述的眾核處理器片上同步系統(tǒng),其特征在于,同步管理裝置還用于維護(hù)記錄表,用于記錄小核對(duì)應(yīng)于寫鎖等待鏈表和讀鎖等待鏈 表的信息,記錄表中每一行對(duì)應(yīng)于一個(gè)小核,每一行包括讀寫標(biāo)志項(xiàng)、Sync_id項(xiàng)、頭標(biāo)志 項(xiàng)、尾標(biāo)志項(xiàng)、以及下一節(jié)點(diǎn)項(xiàng);同步管理裝置在以所述小核作為所述寫鎖等待鏈表或讀鎖等待鏈表的表頭和表尾后 還用于在所述小核對(duì)應(yīng)行的synC_id項(xiàng)中填寫本次申請(qǐng)的Sync_id,將所述小核對(duì)應(yīng)行的頭 標(biāo)志項(xiàng)和尾標(biāo)志項(xiàng)修改為有效,按所述小核的申請(qǐng)為讀鎖或?qū)戞i,對(duì)應(yīng)修改所述小核對(duì)應(yīng) 行的讀寫標(biāo)志項(xiàng);同步管理裝置在對(duì)應(yīng)將小核插入寫鎖等待鏈表或讀鎖等待鏈表的尾部后還用于 在記錄表中查找同所述小核申請(qǐng)的Sync_id相同,并且尾標(biāo)志項(xiàng)為有效的行,在所述 行的下一節(jié)點(diǎn)項(xiàng)中填寫所述小核的ID,將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效;在所述被插入的 小核對(duì)應(yīng)行的synC_id項(xiàng)中填寫本次申請(qǐng)的Sync_id,將所述小核對(duì)應(yīng)行的尾標(biāo)志項(xiàng)修改 為有效,按所述小核的申請(qǐng)為讀鎖或?qū)戞i,對(duì)應(yīng)修改所述小核對(duì)應(yīng)行的讀寫標(biāo)志項(xiàng);同步管理裝置在將發(fā)送所述釋放消息的小核從寫鎖等待鏈表或讀鎖等待鏈表中刪除 后還用于將發(fā)送所述釋放消息的小核在記錄表中對(duì)應(yīng)行的各個(gè)表項(xiàng)值重新復(fù)位為初始值;并將 記錄表中所述小核的下一節(jié)點(diǎn)項(xiàng)指向的小核對(duì)應(yīng)行的頭標(biāo)志項(xiàng)修改為有效。
8.如權(quán)利要求7所述的眾核處理器片上同步系統(tǒng),其特征在于,同步管理裝置在判斷syncjd對(duì)應(yīng)的寫鎖等待鏈表和讀鎖等待鏈表是否都為空時(shí)進(jìn)一步用于將申請(qǐng)鎖的申請(qǐng)消息中的syncjd同記錄表中每一個(gè)syncjd項(xiàng)比較,如果存在與所 述申請(qǐng)消息中的sync_id相等的syncjd項(xiàng),并且所述syncjd項(xiàng)所在行的尾標(biāo)志項(xiàng)不都 為無(wú)效標(biāo)志,則寫鎖等待鏈表和讀鎖等待鏈表不都為空;同步管理裝置判斷所述讀鎖等待鏈表是否為空時(shí)進(jìn)一步用于 判斷記錄表中與所述申請(qǐng)消息中的Sync_id相等的Sync_id項(xiàng)對(duì)應(yīng)的行中的讀寫標(biāo)志 項(xiàng)是否沒有讀標(biāo)志,如果是,則所述讀鎖等待鏈表為空;同步管理裝置向記錄的所述鎖對(duì)應(yīng)的第一個(gè)申請(qǐng)寫鎖的小核發(fā)送確認(rèn)消息時(shí)進(jìn)一步用于在記錄表中查找sync_id項(xiàng)與所述申請(qǐng)消息中的sync_id相等,讀寫標(biāo)志項(xiàng)為寫標(biāo)志, 并且頭標(biāo)志為有效的行,向所述行對(duì)應(yīng)的小核發(fā)送確認(rèn)消息。
9.一種眾核處理器片上同步方法,其特征在于,包括步驟1,小核執(zhí)行到柵欄指令時(shí),向同步管理裝置發(fā)送柵欄消息,然后進(jìn)入等待狀態(tài),所 述柵欄消息中包括sync_id和所在的柵欄同步中的小核的數(shù)量;步驟2,同步管理裝置接收到小核的柵欄消息,記錄所述小核,依據(jù)記錄和所述柵欄消 息檢查參與柵欄消息對(duì)應(yīng)的柵欄同步的小核的柵欄消息是否都已經(jīng)到達(dá)同步管理裝置,如 果是,則按各個(gè)小核的柵欄消息到達(dá)所述同步管理裝置的順序,依次向所述柵欄同步的各 個(gè)小核發(fā)送確認(rèn)消息;步驟3,小核收到確認(rèn)消息后,繼續(xù)執(zhí)行柵欄指令之后的指令。
10.如權(quán)利要求9所述的眾核處理器片上同步方法,其特征在于,所述方法還包括,同步管理裝置對(duì)應(yīng)于每個(gè)柵欄同步建立一個(gè)柵欄等待鏈表; 所述步驟2中記錄所述小核進(jìn)一步為,依據(jù)所述柵欄消息中Sync_id將所述小核添加 到所述sync_id對(duì)應(yīng)的柵欄同步的柵欄等待鏈表的表尾; 所述步驟2中發(fā)送確認(rèn)消息時(shí)進(jìn)一步為,步驟101,按柵欄等待鏈表從表頭到表尾的順序,依次向各個(gè)小核發(fā)送確認(rèn)消息。
11.如權(quán)利要求10所述的眾核處理器片上同步方法,其特征在于, 所述方法還包括,同步管理裝置對(duì)于每個(gè)小核設(shè)置一個(gè)計(jì)數(shù)器; 所述步驟2中記錄所述小核時(shí)還包括,步驟111,在所述小核為柵欄等待鏈表的表頭時(shí),將所述小核的計(jì)數(shù)器的值置為所述柵 欄同步中的小核的數(shù)量減1 ;步驟112,在所述小核不為柵欄等待鏈表的表頭時(shí),將所述小核的計(jì)數(shù)器的值置為柵欄 等待鏈表中前一節(jié)點(diǎn)的計(jì)數(shù)器的值減1 ; 所述步驟2中檢查時(shí)進(jìn)一步為,步驟113,檢查柵欄等待鏈表的表尾的小核對(duì)應(yīng)的計(jì)數(shù)器的值是否為0,如果為0,則參 與柵欄同步的小核的柵欄消息都已經(jīng)到達(dá)同步管理裝置;否則,參與柵欄同步的小核的柵 欄消息沒有都到達(dá)同步管理裝置。
12.如權(quán)利要求10所述的眾核處理器片上同步方法,其特征在于,所述步驟2還包括同步管理裝置維護(hù)記錄表,用于記錄柵欄等待鏈表的信息,記錄表 中每一行對(duì)應(yīng)于一個(gè)小核,每一行包括sync_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、計(jì)數(shù)項(xiàng)、以及下 一節(jié)點(diǎn)項(xiàng);所述步驟2中記錄所述小核時(shí)還包括,步驟121,在所述小核發(fā)送的柵欄消息為同步管理裝置接收的對(duì)應(yīng)柵欄同步的第一個(gè) 柵欄消息時(shí),將記錄表中所述小核對(duì)應(yīng)行的sync_id項(xiàng)填寫為柵欄消息中syncjd,頭標(biāo)志 項(xiàng)和尾標(biāo)志項(xiàng)都置為有效,計(jì)數(shù)項(xiàng)置為柵欄消息中柵欄同步中的小核的數(shù)量減1 ;步驟122,在所述小核發(fā)送的柵欄消息不為同步管理裝置接收的對(duì)應(yīng)柵欄同步的第一 個(gè)柵欄消息時(shí),在記錄表中查找同所述柵欄消息的sync_id相同,并且尾標(biāo)志項(xiàng)為有效的 行,在所述行的下一節(jié)點(diǎn)項(xiàng)中填寫所述小核的ID,將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效;將記 錄表中所述小核對(duì)應(yīng)行的sync_id項(xiàng)中填寫所述柵欄消息的syncjd,尾標(biāo)志項(xiàng)修改為有 效,計(jì)數(shù)項(xiàng)置為查找到的原表尾小核對(duì)應(yīng)的計(jì)數(shù)項(xiàng)數(shù)值減1 ; 所述步驟2中檢查時(shí)進(jìn)一步為,步驟123,判斷發(fā)送所述柵欄消息的小核在記錄表中對(duì)應(yīng)行的計(jì)數(shù)項(xiàng)是否為0,如果為 0,則參與柵欄同步的小核的柵欄消息都已經(jīng)到達(dá)同步管理裝置;否則,參與柵欄同步的小 核的柵欄消息沒有都到達(dá)同步管理裝置; 所述步驟2中發(fā)送確認(rèn)消息后還包括,步驟124,將記錄表中所述柵欄消息對(duì)應(yīng)的柵欄等待鏈表的表頭和表尾所在行的頭標(biāo) 志項(xiàng)和尾標(biāo)志項(xiàng)分別置為無(wú)效。
13.一種眾核處理器片上同步系統(tǒng),其特征在于,包括同步管理裝置和多個(gè)小核小核,用于執(zhí)行到柵欄指令時(shí),向同步管理裝置發(fā)送柵欄消息,然后進(jìn)入等待狀態(tài),所 述柵欄消息中包括sync_id和所在的柵欄同步中的小核的數(shù)量;同步管理裝置,用于接收到小核的柵欄消息,記錄所述小核,依據(jù)記錄和所述柵欄消息 檢查參與柵欄消息對(duì)應(yīng)的柵欄同步的小核的柵欄消息是否都已經(jīng)到達(dá)同步管理裝置,如果 是,則按各個(gè)小核的柵欄消息到達(dá)所述同步管理裝置的順序,依次向所述柵欄同步的各個(gè) 小核發(fā)送確認(rèn)消息;小核,用于收到確認(rèn)消息后,繼續(xù)執(zhí)行柵欄指令之后的指令。
14.如權(quán)利要求13所述的眾核處理器片上同步系統(tǒng),其特征在于, 同步管理裝置還用于對(duì)應(yīng)于每個(gè)柵欄同步建立一個(gè)柵欄等待鏈表;同步管理裝置記錄所述小核時(shí)進(jìn)一步用于,依據(jù)所述柵欄消息中Sync_id將所述小核 添加到所述Sync_id對(duì)應(yīng)的柵欄同步的柵欄等待鏈表的表尾; 同步管理裝置發(fā)送確認(rèn)消息時(shí)進(jìn)一步用于按柵欄等待鏈表從表頭到表尾的順序,依次向各個(gè)小核發(fā)送確認(rèn)消息。
15.如權(quán)利要求14所述的眾核處理器片上同步系統(tǒng),其特征在于, 同步管理裝置還用于對(duì)于每個(gè)小核設(shè)置一個(gè)計(jì)數(shù)器;同步管理裝置記錄所述小核時(shí)還用于在所述小核為柵欄等待鏈表的表頭時(shí),將所述小核的計(jì)數(shù)器的值置為所述柵欄同步中 的小核的數(shù)量減1 ;在所述小核不為柵欄等待鏈表的表頭時(shí),將所述小核的計(jì)數(shù)器的值置為柵欄等待鏈表 中前一節(jié)點(diǎn)的計(jì)數(shù)器的值減1 ;同步管理裝置檢查時(shí)進(jìn)一步用于檢查柵欄等待鏈表的表尾的小核對(duì)應(yīng)的計(jì)數(shù)器的值是否為0,如果為0,則參與柵欄同 步的小核的柵欄消息都已經(jīng)到達(dá)同步管理裝置;否則,參與柵欄同步的小核的柵欄消息沒 有都到達(dá)同步管理裝置。
16.如權(quán)利要求14所述的眾核處理器片上同步系統(tǒng),其特征在于,同步管理裝置還用于維護(hù)記錄表,用于記錄柵欄等待鏈表的信息,記錄表中每一行對(duì) 應(yīng)于一個(gè)小核,每一行包括sync_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、計(jì)數(shù)項(xiàng)、以及下一節(jié)點(diǎn)項(xiàng); 同步管理裝置記錄所述小核時(shí)還用于在所述小核發(fā)送的柵欄消息為同步管理裝置接收的對(duì)應(yīng)柵欄同步的第一個(gè)柵欄消息 時(shí),將記錄表中所述小核對(duì)應(yīng)行的sync_id項(xiàng)填寫為柵欄消息中Sync_id,頭標(biāo)志項(xiàng)和尾標(biāo) 志項(xiàng)都置為有效,計(jì)數(shù)項(xiàng)置為柵欄消息中柵欄同步中的小核的數(shù)量減1 ;在所述小核發(fā)送的柵欄消息不為同步管理裝置接收的對(duì)應(yīng)柵欄同步的第一個(gè)柵欄消 息時(shí),在記錄表中查找同所述柵欄消息的Sync_id相同,并且尾標(biāo)志項(xiàng)為有效的行,在所述 行的下一節(jié)點(diǎn)項(xiàng)中填寫所述小核的ID,將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效;將記錄表中所述 小核對(duì)應(yīng)行的sync_id項(xiàng)中填寫所述柵欄消息的syncjd,尾標(biāo)志項(xiàng)修改為有效,計(jì)數(shù)項(xiàng)置 為查找到的原表尾小核對(duì)應(yīng)的計(jì)數(shù)項(xiàng)數(shù)值減1 ; 同步管理裝置檢查時(shí)進(jìn)一步用于判斷發(fā)送所述柵欄消息的小核在記錄表中對(duì)應(yīng)行的計(jì)數(shù)項(xiàng)是否為0,如果為0,則參與 柵欄同步的小核的柵欄消息都已經(jīng)到達(dá)同步管理裝置;否則,參與柵欄同步的小核的柵欄消息沒有都到達(dá)同步管理裝置;同步管理裝置發(fā)送確認(rèn)消息后還用于將記錄表中所述柵欄消息對(duì)應(yīng)的柵欄等待鏈表的表頭和表尾所在行的頭標(biāo)志項(xiàng)和尾 標(biāo)志項(xiàng)分別置為無(wú)效。
17.一種眾核處理器片上同步方法,其特征在于,包括步驟1,小核執(zhí)行到生產(chǎn)指令時(shí),向同步管理裝置發(fā)送生產(chǎn)消息,然后繼續(xù)執(zhí)行后續(xù)指 令,所述生產(chǎn)消息中包括第一數(shù)值和sync_id ;步驟2,小核執(zhí)行到消費(fèi)指令時(shí),向同步管理裝置發(fā)送消費(fèi)消息,然后進(jìn)入等待狀態(tài),所 述消費(fèi)消息中包括sync_id ;步驟3,同步管理裝置接收到生產(chǎn)消息時(shí),進(jìn)行生產(chǎn)接收記錄,并依據(jù)消費(fèi)等待記錄和 生產(chǎn)消息檢查是否已有消費(fèi)者等待發(fā)送所述生產(chǎn)消息的生產(chǎn)者,如果有,則按照各個(gè)小核 的消費(fèi)消息到達(dá)同步管理裝置的順序向所述小核發(fā)送確認(rèn)消息,發(fā)送的確認(rèn)消息的數(shù)量不 超過(guò)所述生產(chǎn)消息中第一數(shù)值;步驟4,同步管理裝置接收到小核的消費(fèi)消息時(shí),依據(jù)生產(chǎn)接收記錄和消費(fèi)消息檢查是 否已經(jīng)接收到所述消費(fèi)消息中sync_id對(duì)應(yīng)的生產(chǎn)消息,如果是,則在所述生產(chǎn)消息對(duì)應(yīng) 確認(rèn)消息的已發(fā)送數(shù)量小于所述生產(chǎn)消息的第一數(shù)值時(shí),向發(fā)送所述消費(fèi)消息的小核發(fā)送 確認(rèn)消息,如果為否,則進(jìn)行消費(fèi)等待記錄;步驟5,小核收到確認(rèn)消息后,繼續(xù)執(zhí)行后續(xù)指令。
18.如權(quán)利要求17所述的眾核處理器片上同步方法,其特征在于,同步管理裝置對(duì)應(yīng)于每個(gè)生產(chǎn)-消費(fèi)同步建立一個(gè)消費(fèi)等待鏈表,并用生產(chǎn)記錄表維 護(hù)各個(gè)生產(chǎn)_消費(fèi)同步的生產(chǎn)者信息;生產(chǎn)記錄表每一行對(duì)應(yīng)一個(gè)小核,每行中包含synC_id項(xiàng)、等待標(biāo)志項(xiàng)、以及數(shù)值記錄項(xiàng);所述步驟3中進(jìn)行生產(chǎn)接收記錄進(jìn)一步為,在生產(chǎn)記錄表中找到發(fā)送所述生產(chǎn)消息的 小核對(duì)應(yīng)的行,將所述行中等待標(biāo)志項(xiàng)置為有效,將所述行中sync_id項(xiàng)填為所述生產(chǎn)消 息中syncjd,將所述行中數(shù)值記錄項(xiàng)填為所述生產(chǎn)消息中第一數(shù)值;所述步驟4中進(jìn)行消費(fèi)等待記錄進(jìn)一步為,依據(jù)所述消費(fèi)消息中syncjd將所述小核 添加到所述sync_id對(duì)應(yīng)的生產(chǎn)-消費(fèi)同步的消費(fèi)等待鏈表的表尾。
19.如權(quán)利要求18所述的眾核處理器片上同步方法,其特征在于, 所述步驟3中檢查時(shí)進(jìn)一步為,步驟191,檢查所述生產(chǎn)消息的syncjd對(duì)應(yīng)的生產(chǎn)-消費(fèi)同步的消費(fèi)等待鏈表是否為 空,如果不為空,則按所述消費(fèi)等待鏈表從表頭到表尾的順序向各個(gè)節(jié)點(diǎn)對(duì)應(yīng)小核發(fā)送確 認(rèn)消息,每發(fā)送一個(gè)確認(rèn)消息將生產(chǎn)記錄表中對(duì)應(yīng)行的數(shù)值記錄項(xiàng)中的值減1,在所述數(shù)值 記錄項(xiàng)為0時(shí),將對(duì)應(yīng)行的等待標(biāo)志項(xiàng)置為無(wú)效,停止發(fā)送確認(rèn)消息; 所述步驟4中檢查時(shí)進(jìn)一步為,步驟192,在生產(chǎn)記錄表中查找sync_id表項(xiàng)同所述消費(fèi)消息中sync_id相同的行,如 果查找到并且所述行的等待標(biāo)志項(xiàng)為有效,則向發(fā)送所述消費(fèi)消息的小核發(fā)送確認(rèn)消息, 將生產(chǎn)記錄表中所述行中數(shù)值記錄項(xiàng)的值減1,在數(shù)值記錄項(xiàng)的值變?yōu)?時(shí),將所述行的等 待標(biāo)志項(xiàng)置為無(wú)效;如果沒有查找到,進(jìn)行所述消費(fèi)等待記錄。
20.如權(quán)利要求18所述的眾核處理器片上同步方法,其特征在于,所述步驟4中還包括,同步管理裝置維護(hù)消費(fèi)記錄表,用于記錄消費(fèi)等待鏈表的信息, 消費(fèi)記錄表中每一行對(duì)應(yīng)于一個(gè)小核,每一行包括sync_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、以及 下一節(jié)點(diǎn)項(xiàng);所述步驟4中進(jìn)行消費(fèi)等待記錄后還包括,步驟121,在消費(fèi)記錄表中查找所述消費(fèi)消息中syncjd對(duì)應(yīng)的消費(fèi)等待鏈表的尾節(jié) 點(diǎn)對(duì)應(yīng)的行,如果查找到,則將所述行的下一節(jié)點(diǎn)項(xiàng)填寫為發(fā)送所述消費(fèi)消息的小核的ID, 將所述行的尾標(biāo)志項(xiàng)修改為無(wú)效;步驟122,在消費(fèi)記錄表中查找到發(fā)送所述消費(fèi)消息的小核對(duì)應(yīng)的行時(shí),將所述行的 syncjd項(xiàng)填寫為所述消費(fèi)消息中的syncjd,將所述行的尾標(biāo)志項(xiàng)值為有效;在消費(fèi)記錄 表中沒有查找所述消費(fèi)消息中sync_id對(duì)應(yīng)的行時(shí),將所述行的頭標(biāo)志項(xiàng)置為有效; 所述步驟3中檢查時(shí)進(jìn)一步為,步驟123,在消費(fèi)記錄表中查找所述生產(chǎn)消息的syncjd對(duì)應(yīng)的消費(fèi)等待鏈表的表頭 對(duì)應(yīng)的行,從表頭開始依據(jù)下一節(jié)點(diǎn)項(xiàng)向所述消費(fèi)等待鏈表節(jié)點(diǎn)對(duì)應(yīng)的小核發(fā)送確認(rèn)消 息,每發(fā)送一個(gè)確認(rèn)消息,將生產(chǎn)記錄表中對(duì)應(yīng)行的數(shù)值記錄項(xiàng)中的值減1,并更新消費(fèi)記 錄表中記錄,在所述數(shù)值記錄項(xiàng)為0時(shí),將對(duì)應(yīng)行的等待標(biāo)志項(xiàng)置為無(wú)效,停止發(fā)送確認(rèn)消 肩、ο
21.一種眾核處理器片上同步系統(tǒng),其特征在于,包括多個(gè)小核和同步管理裝置,小核,用于執(zhí)行到生產(chǎn)指令時(shí),向同步管理裝置發(fā)送生產(chǎn)消息,然后繼續(xù)執(zhí)行后續(xù)指 令,所述生產(chǎn)消息中包括第一數(shù)值和sync_id ;小核,還用于執(zhí)行到消費(fèi)指令時(shí),向同步管理裝置發(fā)送消費(fèi)消息,然后進(jìn)入等待狀態(tài), 所述消費(fèi)消息中包括syncjd ;同步管理裝置用于接收到生產(chǎn)消息時(shí),進(jìn)行生產(chǎn)接收記錄,并依據(jù)消費(fèi)等待記錄和生 產(chǎn)消息檢查是否已有消費(fèi)者等待發(fā)送所述生產(chǎn)消息的生產(chǎn)者,如果有,則按照各個(gè)小核的 消費(fèi)消息到達(dá)同步管理裝置的順序向所述小核發(fā)送確認(rèn)消息,發(fā)送的確認(rèn)消息的數(shù)量不超 過(guò)所述生產(chǎn)消息中第一數(shù)值;同步管理裝置還用于接收到小核的消費(fèi)消息時(shí),依據(jù)生產(chǎn)接收記錄和消費(fèi)消息檢查是 否已經(jīng)接收到所述消費(fèi)消息中sync_id對(duì)應(yīng)的生產(chǎn)消息,如果是,則在所述生產(chǎn)消息對(duì)應(yīng) 確認(rèn)消息的已發(fā)送數(shù)量小于所述生產(chǎn)消息的第一數(shù)值時(shí),向發(fā)送所述消費(fèi)消息的小核發(fā)送 確認(rèn)消息,如果為否,則進(jìn)行消費(fèi)等待記錄;小核還用于收到確認(rèn)消息后,繼續(xù)執(zhí)行后續(xù)指令。
22.如權(quán)利要求21所述的眾核處理器片上同步系統(tǒng),其特征在于,同步管理裝置還用于對(duì)應(yīng)于每個(gè)生產(chǎn)_消費(fèi)同步建立一個(gè)消費(fèi)等待鏈表,并用生產(chǎn)記 錄表維護(hù)各個(gè)生產(chǎn)_消費(fèi)同步的生產(chǎn)者信息;生產(chǎn)記錄表每一行對(duì)應(yīng)一個(gè)小核,每行中包含synC_id項(xiàng)、等待標(biāo)志項(xiàng)、以及數(shù)值記錄項(xiàng);同步管理裝置進(jìn)行生產(chǎn)接收記錄時(shí)進(jìn)一步用于,在生產(chǎn)記錄表中找到發(fā)送所述生產(chǎn)消 息的小核對(duì)應(yīng)的行,將所述行中等待標(biāo)志項(xiàng)置為有效,將所述行中sync_id項(xiàng)填為所述生 產(chǎn)消息中sync_id,將所述行中數(shù)值記錄項(xiàng)填為所述生產(chǎn)消息中第一數(shù)值;同步管理裝置進(jìn)行消費(fèi)等待記錄時(shí)進(jìn)一步用于,依據(jù)所述消費(fèi)消息中syncjd將所述 小核添加到所述sync_id對(duì)應(yīng)的生產(chǎn)_消費(fèi)同步的消費(fèi)等待鏈表的表尾。
23.如權(quán)利要求22所述的眾核處理器片上同步系統(tǒng),其特征在于,同步管理裝置接收到生產(chǎn)消息進(jìn)行檢查時(shí)進(jìn)一步用于檢查所述生產(chǎn)消息的syncjd對(duì)應(yīng)的生產(chǎn)-消費(fèi)同步的消費(fèi)等待鏈表是否為空,如果 不為空,則按所述消費(fèi)等待鏈表從表頭到表尾的順序向各個(gè)節(jié)點(diǎn)對(duì)應(yīng)小核發(fā)送確認(rèn)消息, 每發(fā)送一個(gè)確認(rèn)消息將生產(chǎn)記錄表中對(duì)應(yīng)行的數(shù)值記錄項(xiàng)中的值減1,在所述數(shù)值記錄項(xiàng) 為0時(shí),將對(duì)應(yīng)行的等待標(biāo)志項(xiàng)置為無(wú)效,停止發(fā)送確認(rèn)消息;同步管理裝置接收到小核的消費(fèi)消息檢查時(shí)進(jìn)一步用于在生產(chǎn)記錄表中查找sync_id表項(xiàng)同所述消費(fèi)消息中sync_id相同的行,如果查找到 并且所述行的等待標(biāo)志項(xiàng)為有效,則向發(fā)送所述消費(fèi)消息的小核發(fā)送確認(rèn)消息,將生產(chǎn)記 錄表中所述行中數(shù)值記錄項(xiàng)的值減1,在數(shù)值記錄項(xiàng)的值變?yōu)?時(shí),將所述行的等待標(biāo)志項(xiàng) 置為無(wú)效;如果沒有查找到,進(jìn)行所述消費(fèi)等待記錄。
24.如權(quán)利要求22所述的眾核處理器片上同步系統(tǒng),其特征在于,同步管理裝置還用于維護(hù)消費(fèi)記錄表,用于記錄消費(fèi)等待鏈表的信息,消費(fèi)記錄表中 每一行對(duì)應(yīng)于一個(gè)小核,每一行包括sync_id項(xiàng)、頭標(biāo)志項(xiàng)、尾標(biāo)志項(xiàng)、以及下一節(jié)點(diǎn)項(xiàng);同步管理裝置進(jìn)行消費(fèi)等待記錄后還用于在消費(fèi)記錄表中查找所述消費(fèi)消息中sync_id對(duì)應(yīng)的消費(fèi)等待鏈表的尾節(jié)點(diǎn)對(duì)應(yīng)的 行,如果查找到,則將所述行的下一節(jié)點(diǎn)項(xiàng)填寫為發(fā)送所述消費(fèi)消息的小核的ID,將所述行 的尾標(biāo)志項(xiàng)修改為無(wú)效;在消費(fèi)記錄表中查找到發(fā)送所述消費(fèi)消息的小核對(duì)應(yīng)的行時(shí),將所述行的sync_id項(xiàng) 填寫為所述消費(fèi)消息中的sync_id,將所述行的尾標(biāo)志項(xiàng)值為有效;在消費(fèi)記錄表中沒有 查找所述消費(fèi)消息中sync_id對(duì)應(yīng)的行時(shí),將所述行的頭標(biāo)志項(xiàng)置為有效;同步管理裝置接收到生產(chǎn)消息進(jìn)行檢查時(shí)進(jìn)一步為,在消費(fèi)記錄表中查找所述生產(chǎn)消息的sync_id對(duì)應(yīng)的消費(fèi)等待鏈表的表頭對(duì)應(yīng)的行, 從表頭開始依據(jù)下一節(jié)點(diǎn)項(xiàng)向所述消費(fèi)等待鏈表節(jié)點(diǎn)對(duì)應(yīng)的小核發(fā)送確認(rèn)消息,每發(fā)送一 個(gè)確認(rèn)消息,將生產(chǎn)記錄表中對(duì)應(yīng)行的數(shù)值記錄項(xiàng)中的值減1,并更新消費(fèi)記錄表中記錄, 在所述數(shù)值記錄項(xiàng)為0時(shí),將對(duì)應(yīng)行的等待標(biāo)志項(xiàng)置為無(wú)效,停止發(fā)送確認(rèn)消息。
全文摘要
本發(fā)明涉及眾核處理器片上同步方法和其系統(tǒng),在片上眾核體系結(jié)構(gòu)中,使用專用的片上同步管理裝置支持粗粒度同步方法,由于訪問(wèn)片上同步管理裝置的時(shí)間遠(yuǎn)遠(yuǎn)小于訪問(wèn)內(nèi)存的時(shí)間,而且避免了因?yàn)檩喸儤?biāo)志位造成的網(wǎng)絡(luò)擁塞,因此減少了同步時(shí)間,進(jìn)而幫助提高眾核處理器的計(jì)算能力。
文檔編號(hào)G06F15/163GK101908034SQ20101022108
公開日2010年12月8日 申請(qǐng)日期2010年6月28日 優(yōu)先權(quán)日2010年6月28日
發(fā)明者劉志勇, 宋風(fēng)龍, 張 浩, 徐衛(wèi)志, 焦帥, 王達(dá), 范東睿, 雷崢蒙 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所