本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種用于向量運(yùn)算的數(shù)據(jù)讀寫調(diào)度器及保留站。
背景技術(shù):
向量運(yùn)算尤其是矩陣運(yùn)算,被廣泛用于機(jī)器學(xué)習(xí),模式識(shí)別,圖像處理,圖計(jì)算等領(lǐng)域。特別是近年來發(fā)展起來的深度學(xué)習(xí)算法,由于這些深度學(xué)習(xí)算法具有較高的識(shí)別準(zhǔn)確度以及較好的可并行性,受到日益增多的關(guān)注。
向量讀寫指令會(huì)在單個(gè)指令內(nèi)部同時(shí)讀寫多個(gè)數(shù)據(jù),多個(gè)向量讀寫指令之間往往由于算法的原因,存在相互依賴關(guān)系,一方面向量讀寫指令之后可能會(huì)存在與之讀取地址有交疊的向量寫入指令,即讀后寫沖突,另一方面向量寫入指令之后可能會(huì)存在與之寫入地址有交疊的向量讀取指令,即寫后讀沖突。此外,由于向量讀寫指令的讀寫數(shù)據(jù)連續(xù)性,因而利用其該特性可以加快數(shù)據(jù)讀寫速率。
對(duì)于目前的常用的圖形處理器,其可以支持各種復(fù)雜的向量運(yùn)算,通過通用寄存器堆和通用流處理單元執(zhí)行通用的simd指令來支持向量運(yùn)算。但是,由于其主要執(zhí)行圖形圖像運(yùn)算,而且通過大量的額外寄存器來緩存讀取數(shù)據(jù),以及大量的計(jì)算部件來并行讀取與執(zhí)行計(jì)算,因而,其不僅需要ram支持多個(gè)讀寫通道,增加了片上ram的大小限制,同時(shí),在計(jì)算部件有限,需要進(jìn)行大量數(shù)據(jù)運(yùn)算時(shí),仍然需要較多的指令,增加了前段譯碼工作的開銷。
對(duì)于通用處理器來說,其使用sisd指令進(jìn)行復(fù)雜的向量運(yùn)算。這樣,不僅需要較多的指令用于處理向量運(yùn)算,同樣在處理讀后寫相關(guān)和寫后讀相關(guān)時(shí),需要更多的寄存器組來記錄相關(guān)信息,這樣大幅增加了向量運(yùn)算的開銷。
技術(shù)實(shí)現(xiàn)要素:
(一)要解決的技術(shù)問題
鑒于上述技術(shù)問題,本發(fā)明提供了一種用于向量運(yùn)算的數(shù)據(jù)讀寫調(diào)度器及保留站,以克服現(xiàn)有向量計(jì)算中讀后寫沖突和寫后讀沖突。
(二)技術(shù)方案
根據(jù)本發(fā)明的一個(gè)方面,提供了一種用于向量運(yùn)算的數(shù)據(jù)讀取調(diào)度器。該數(shù)據(jù)讀取調(diào)度器包括:指令緩存310,用于緩存向量讀取指令;讀取指令預(yù)處理模塊320,包括至少一讀取指令預(yù)處理單元,該讀取指令預(yù)處理單元接收由指令緩存310輸出的向量讀取指令,檢測(cè)該向量讀取指令與寫入指令緩存模塊350中存放的向量寫入指令之間是否存在寫后讀沖突,如果是,則將存在寫后讀沖突的向量寫入指令作為該向量讀取指令依賴的向量寫入指令;讀取指令緩存模塊340,包括至少一讀取指令緩存單元,該讀取指令緩存單元用于接收并緩存向量讀取指令與其依賴的向量寫入指令,并且依據(jù)從讀取控制模塊得到的該向量讀取指令的執(zhí)行狀態(tài)以及從寫入控制模塊得到的其依賴的向量寫入指令的執(zhí)行狀態(tài),動(dòng)態(tài)更新其緩存的向量讀取指令的狀態(tài),并發(fā)射符合條件的向量讀取指令;讀取控制模塊360,包括至少一讀取控制單元,該讀取控制單元在接收到讀取指令緩存單元發(fā)射的向量讀取指令,從其中解析出具體的單次讀取請(qǐng)求,依據(jù)該向量讀取指令所依賴的向量寫入指令的狀態(tài)決定執(zhí)行單次讀取請(qǐng)求的時(shí)機(jī),在時(shí)機(jī)滿足時(shí),發(fā)送單次讀取請(qǐng)求給片上ram,從片上ram接收的輸入數(shù)據(jù),將該輸入數(shù)據(jù)存入讀取數(shù)據(jù)緩存模塊380中,等待向量運(yùn)算部件使用。
根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種用于向量運(yùn)算的數(shù)據(jù)寫入調(diào)度器。該數(shù)據(jù)寫入調(diào)度器包括:指令緩存310,用于緩存向量寫入指令;寫入數(shù)據(jù)緩存390,用于緩存需要寫入片上ram200的寫入數(shù)據(jù);寫入指令預(yù)處理單元330,用于接收由指令緩存310輸入的向量寫入指令,檢測(cè)該向量寫入指令和讀取指令緩存模塊340中存放的向量讀取指令之間是否存在讀后寫沖突,如果是,則將存在讀后寫沖突的向量讀取指令作為給向量寫入指令依賴的向量讀取指令;寫入指令緩存單元350,用于接收寫入指令預(yù)處理單元330處理得到的向量寫入指令,并且依據(jù)讀取控制模塊 360和寫入控制模塊370相應(yīng)指令的執(zhí)行狀態(tài),動(dòng)態(tài)更新其緩存的向量寫入指令的狀態(tài),并發(fā)射符合條件的向量寫入指令;以及寫入控制模塊370,用于接收寫入指令緩存單元350發(fā)射的向量寫入指令,從其中解析出具體的單次寫入請(qǐng)求,從寫入數(shù)據(jù)緩存390接收寫入數(shù)據(jù),依據(jù)從讀取控制模塊360獲取該向量寫入指令所依賴的向量讀取指令的狀態(tài)來決定執(zhí)行單次寫入請(qǐng)求的時(shí)機(jī),在時(shí)機(jī)滿足時(shí),發(fā)送單次寫入請(qǐng)求和寫入數(shù)據(jù)給片上ram200,然后從片上ram200接收寫入結(jié)果的反饋。
根據(jù)本發(fā)明的再一個(gè)方面,還提供了一種用于向量運(yùn)算的數(shù)據(jù)讀寫調(diào)度器。該數(shù)據(jù)讀寫調(diào)度器包括:上述的數(shù)據(jù)讀取調(diào)度器和數(shù)據(jù)寫入調(diào)度器;其中,數(shù)據(jù)讀取調(diào)度器和數(shù)據(jù)寫入調(diào)度器共用指令緩存310、寫入指令緩存模塊350、讀取指令緩存模塊340、讀取控制模塊360和寫入控制模塊370。
根據(jù)本發(fā)明的又一個(gè)方面,還提供了一種用于向量運(yùn)算的保留站。該保留站包括:i/o接口100、片上ram200、數(shù)據(jù)讀寫調(diào)度器300、譯碼器400和向量運(yùn)算部件500。其中:片上ram200,用于存儲(chǔ)向量運(yùn)算所需要的輸入數(shù)據(jù)和計(jì)算得到的輸出數(shù)據(jù)。i/o接口100,用于芯片外部對(duì)片上ram200的讀寫訪問,包括:將需要處理的輸入數(shù)據(jù)加載到片上ram200,然后在運(yùn)算結(jié)束后將計(jì)算得到的輸出數(shù)據(jù)搬到芯片外部。譯碼器400,用于從外部指令緩存隊(duì)列中讀取指令,并且將其譯碼成具體的向量讀取指令、向量寫入指令和向量運(yùn)算指令,將向量讀取指令、向量寫入指令交由數(shù)據(jù)讀寫調(diào)度器300進(jìn)行執(zhí)行;將向量運(yùn)算指令交由向量運(yùn)算部件500進(jìn)行執(zhí)行。數(shù)據(jù)讀寫調(diào)度器300,為上述的數(shù)據(jù)讀寫調(diào)度器;向量運(yùn)算部件500,用于在接收到譯碼器下發(fā)的向量運(yùn)算指令后,從數(shù)據(jù)讀寫調(diào)度器接收輸入數(shù)據(jù)進(jìn)行運(yùn)算,然后將運(yùn)算得到的輸出數(shù)據(jù)傳送至數(shù)據(jù)讀寫調(diào)度器300進(jìn)行寫入操作。
(三)有益效果
從上述技術(shù)方案可以看出,本發(fā)明用于向量運(yùn)算的數(shù)據(jù)讀寫調(diào)度器及保留站具有以下有益效果:
(1)能夠處理向量讀寫指令之間的依賴關(guān)系,解決指令之間的讀后寫沖突和寫后讀沖突,保證提供給向量運(yùn)算部件正確的數(shù)據(jù);
(2)在保證提供正確數(shù)據(jù)給向量運(yùn)算部件的同時(shí),能夠通過亂序執(zhí)行向量讀取指令來增加讀取數(shù)據(jù)的速度,并且增加片上ram的利用效率;
(3)可以高效穩(wěn)定的為向量運(yùn)算部件提供向量數(shù)據(jù),并且快速寫回計(jì)算得到的向量結(jié)果,提高向量運(yùn)算部件的利用效率。
附圖說明
圖1為根據(jù)本發(fā)明實(shí)施例用于向量運(yùn)算的保留站的結(jié)構(gòu)示意圖;
圖2為圖1所示保留站中數(shù)據(jù)讀寫調(diào)度器的結(jié)構(gòu)示意圖;
圖3為圖2所示數(shù)據(jù)讀寫調(diào)度器中讀取指令預(yù)處理單元進(jìn)行向量讀取指令預(yù)處理的流程圖;
圖4為圖2所示數(shù)據(jù)讀寫調(diào)度器中讀取控制單元進(jìn)行數(shù)據(jù)請(qǐng)求的流程圖;
圖5為圖2所示數(shù)據(jù)讀寫調(diào)度器中寫入指令預(yù)處理單元進(jìn)行向量寫入指令預(yù)處理的流程圖;
圖6為圖2所示數(shù)據(jù)讀寫調(diào)度器中寫入控制模塊進(jìn)行數(shù)據(jù)寫入的流程圖。
【主要元件】
100-i/o接口;
200-片上ram:
400-譯碼器;
500-向量運(yùn)算部件;
300-數(shù)據(jù)讀寫調(diào)度器:
310-指令緩存;320-讀取指令預(yù)處理模塊;
330-寫入指令預(yù)處理單元;340-讀取指令緩存模塊;
350-寫入指令緩存單元;360-讀取控制模塊;
370-寫入控制模塊;380-讀取數(shù)據(jù)緩存模塊;
390-寫入數(shù)據(jù)緩存模塊。
具體實(shí)施方式
本發(fā)明通過設(shè)置讀取指令緩存模塊和寫入指令緩存模塊,并基于兩者相互探測(cè)沖突指令,以避免寫后讀沖突和讀后寫沖突。
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。
在本發(fā)明的一個(gè)示例性實(shí)施例中,提供了一種用于向量運(yùn)算的保留站。如圖1所示,本實(shí)施例用于向量運(yùn)算的保留站包括:i/o接口100、片上ram200、數(shù)據(jù)讀寫調(diào)度器300、譯碼器400和向量運(yùn)算部件500。
其中,i/o接口100用于芯片外部對(duì)片上ram200的讀寫訪問,包括:將需要處理的輸入數(shù)據(jù)通過i/o接口100加載到片上ram200,然后在計(jì)算得到輸出數(shù)據(jù)并寫回片上ram200之后,再由i/o接口100搬到片外。片上ram200用于存儲(chǔ)向量運(yùn)算所需要的輸入數(shù)據(jù)和計(jì)算得到的輸出數(shù)據(jù)。數(shù)據(jù)讀寫調(diào)度器300用于依據(jù)譯碼器400提供的向量讀寫指令,從片上ram200中讀取輸入數(shù)據(jù)交給向量運(yùn)算部件500進(jìn)行計(jì)算,然后將得到的向量運(yùn)算結(jié)果,即輸出數(shù)據(jù),存入片上ram200中。譯碼器400用于從外部指令緩存隊(duì)列中讀取指令,并且將其譯碼成具體的多個(gè)向量讀寫指令(向量讀取指令和向量寫入指令)和向量運(yùn)算指令,交由數(shù)據(jù)讀寫調(diào)度器300和向量運(yùn)算部件500進(jìn)行執(zhí)行。向量運(yùn)算部件500用于從譯碼器400接收向量運(yùn)算指令,然后從數(shù)據(jù)讀寫調(diào)度器300接收輸入數(shù)據(jù),進(jìn)行運(yùn)算,然后將計(jì)算的到的數(shù)據(jù)傳送回?cái)?shù)據(jù)讀寫調(diào)度器300進(jìn)行向量寫入操作。
圖2為圖1所示保留站中數(shù)據(jù)讀寫調(diào)度器的結(jié)構(gòu)示意圖。請(qǐng)參照?qǐng)D2,該數(shù)據(jù)讀寫調(diào)度器300包括:指令緩存310、讀取指令預(yù)處理模塊320、寫入指令預(yù)處理單元330、讀取指令緩存模塊340、寫入指令緩存單元350、讀取控制模塊360、寫入控制模塊370、讀取數(shù)據(jù)緩存模塊380和寫入數(shù)據(jù)緩存模塊390。
指令緩存310用于接收從譯碼器輸入的向量讀取指令和向量寫入指令。
讀取指令預(yù)處理模塊320包括對(duì)應(yīng)多個(gè)向量讀取指令的多個(gè)讀取指令預(yù)處理單元,用于接收由指令緩存310輸入的多個(gè)向量讀取指令,分析該每一向量讀取指令和寫入指令緩存350中存放的向量寫入指令之間的寫后讀沖突,如果當(dāng)前向量讀取指令和寫入指令緩存單元350中存放的向量寫入指令涉及的數(shù)據(jù)在地址范圍有交集,則取最近鄰的有交集的向量寫入指 令作為該向量讀取指令依賴的向量寫入指令,并且將該向量寫入指令的id同向量讀取指令一并存入讀取指令緩存模塊的隊(duì)列中。
圖3為圖2所示數(shù)據(jù)讀寫調(diào)度器中讀取指令預(yù)處理單元進(jìn)行向量讀取指令預(yù)處理的流程圖。請(qǐng)參照?qǐng)D3,讀取指令預(yù)處理單元進(jìn)行向量讀取指令預(yù)處理的過程包括:
步驟s302:從指令緩存310中接收一條向量讀取指令;
步驟s304:計(jì)算獲取該向量讀取指令涉及數(shù)據(jù)的起始、結(jié)束地址;
步驟s306:從寫入指令緩存中獲取其存放的向量寫入指令,及該向量寫入指令涉及數(shù)據(jù)的起始、結(jié)束地址;
步驟s308:依據(jù)該向量讀取指令涉及數(shù)據(jù)的起始、結(jié)束地址依次和寫入指令緩存中存放的向量寫入指令涉及數(shù)據(jù)的起始、結(jié)束地址進(jìn)行比較,尋找出有交集的向量寫入指令;
步驟s310:從有交集的向量寫入指令中選擇出最鄰近的一條向量寫入指令,獲取該向量寫入指令的id;
步驟s312:將該向量讀取指令涉及數(shù)據(jù)的起始、結(jié)束地址,以及其依賴的向量寫入指令的id,一并存入讀取指令緩存模塊的隊(duì)列中。
讀取指令緩存模塊340包括多個(gè)讀取指令緩存單元,用于接收并緩存多個(gè)讀取指令預(yù)處理單元處理得到的向量讀取指令,并且依據(jù)讀取控制模塊360和寫入控制模塊370的關(guān)于當(dāng)前向量讀取指令及其依賴的向量寫入指令的執(zhí)行狀態(tài),動(dòng)態(tài)更新內(nèi)部緩存的向量讀取指令的狀態(tài)。
其中,讀取指令緩存模塊進(jìn)行向量讀取指令狀態(tài)更新包括以下5種情況:
(1)在新的向量讀取指令進(jìn)入隊(duì)列中時(shí),更新該向量讀取指令的狀態(tài)為“待發(fā)射”;
(2)當(dāng)一向量讀取指令依賴的向量寫入指令正在執(zhí)行或執(zhí)行結(jié)束時(shí),更新該向量讀取指令的狀態(tài)為“可發(fā)射”;
(3)當(dāng)一向量讀取指令的狀態(tài)為“可發(fā)射”,并且其之前的向量讀取指令請(qǐng)求發(fā)射結(jié)束后,發(fā)射該向量讀取指令,更新該向量讀取指令的狀態(tài)為“執(zhí)行中”;
(4)當(dāng)一向量讀取指令的所有讀取請(qǐng)求都已經(jīng)被讀取控制單元發(fā)射 后,更新該向量讀取指令的狀態(tài)為“已發(fā)射”;
(5)當(dāng)一向量讀取指令的所有單次讀取請(qǐng)求都已經(jīng)被片上ram處理,并且返回結(jié)果之后,更新該向量讀寫指令的狀態(tài)為“執(zhí)行結(jié)束”。
讀取控制模塊360包括多個(gè)讀取控制單元,用于接收讀取指令緩存模塊340發(fā)射的向量讀取指令,解析出具體的單次讀取請(qǐng)求,依據(jù)從寫入控制模塊370獲取該向量讀取指令所依賴的向量寫入指令的狀態(tài)來決定執(zhí)行單次讀取請(qǐng)求的時(shí)機(jī),在時(shí)機(jī)滿足時(shí),發(fā)送單次讀取請(qǐng)求給片上ram200,然后從片上ram200接收讀取的輸入數(shù)據(jù),并且將輸入數(shù)據(jù)存入讀取數(shù)據(jù)緩存模塊380中,等待外部運(yùn)算部件使用。
讀取數(shù)據(jù)緩存模塊380包括多個(gè)讀取數(shù)據(jù)緩存,用于從讀取控制單元中接收讀取的數(shù)據(jù)然后將其發(fā)送給向量運(yùn)算部件500。
圖4為圖2所示數(shù)據(jù)讀寫調(diào)度器中讀取控制單元進(jìn)行數(shù)據(jù)請(qǐng)求的流程圖。請(qǐng)參照?qǐng)D4,讀取控制單元進(jìn)行數(shù)據(jù)請(qǐng)求的過程包括:
步驟s402:從被發(fā)射的向量讀取指令中,解析出具體的單次讀取請(qǐng)求;
步驟s404,由寫入控制模塊獲取當(dāng)前執(zhí)行地址;
步驟s406:對(duì)于每一單次讀取請(qǐng)求,執(zhí)行以下操作:
子步驟s406a,判定該單次讀取請(qǐng)求是否滿足以下三個(gè)條件:
(1)該向量讀取指令依賴的向量寫入指令的狀態(tài)為“執(zhí)行結(jié)束”,或者其狀態(tài)為“執(zhí)行中”且當(dāng)前寫入地址已經(jīng)超過當(dāng)前的單次讀取請(qǐng)求的地址,或者其狀態(tài)為“執(zhí)行中”且其結(jié)束地址已被當(dāng)前的單次讀取請(qǐng)求的地址超越;
(2)當(dāng)前讀取控制單元的數(shù)據(jù)隊(duì)列未滿;
(3)當(dāng)前片上ram可接收單次讀取請(qǐng)求;
子步驟s406b:當(dāng)三個(gè)條件同時(shí)滿足后,發(fā)射該單次讀取請(qǐng)求到片上ram,執(zhí)行子步驟s406c;否則,阻塞該單次讀取請(qǐng)求;
子步驟s406c:等待片上ram返回的讀取數(shù)據(jù),當(dāng)讀取數(shù)據(jù)返回后,將其存入讀取數(shù)據(jù)緩存中。
通過上述讀取指令緩存單元、讀取控制單元和讀取數(shù)據(jù)緩存的組合操作,完成數(shù)據(jù)讀取操作,并且避免了寫后讀沖突。
寫入指令預(yù)處理單元330用于接收由指令緩存310輸入的向量寫入指 令,檢測(cè)該向量寫入指令和讀取指令緩存模塊340中存放的向量讀取指令之間的讀后寫關(guān)系,如果當(dāng)前向量寫入指令與讀取指令緩存模塊340中存放的向量讀取指令在地址范圍上有交集,則取最近鄰的有交集的向量讀取指令作為該向量寫入指令依賴的向量讀取指令,并且將該向量讀取指令的id同向量寫入指令一并存入寫入指令緩存模塊的隊(duì)列中。
圖5為圖2所示數(shù)據(jù)讀寫調(diào)度器中寫入指令預(yù)處理單元進(jìn)行向量寫入指令預(yù)處理的流程圖。請(qǐng)參照?qǐng)D5,寫入指令預(yù)處理單元進(jìn)行向量寫入指令預(yù)處理的過程包括:
步驟s502:從指令緩存310中接收一條向量寫入指令;
步驟s504:計(jì)算得到該向量寫入指令涉及數(shù)據(jù)的起始、結(jié)束地址;
步驟s506:從讀取指令緩存中獲取其存放的向量讀取指令,及該些向量讀取指令涉及數(shù)據(jù)的起始地址和結(jié)束地址;
步驟s508:依據(jù)該向量寫入指令涉及數(shù)據(jù)的起始、結(jié)束地址依次和讀取指令緩存中存放的向量讀取指令的起始、結(jié)束地址進(jìn)行比較,尋找出有交集的向量讀取指令;
步驟s510:從有交集的向量讀取指令中選擇出最鄰近的一條向量讀取指令,將其作為該向量寫入指令依賴的向量讀取指令,獲取該向量讀取指令的id。
步驟s512:將該向量寫入指令涉及數(shù)據(jù)的起始、結(jié)束地址,以及其依賴的向量讀取指令的id,一并存入寫入指令緩存模塊的隊(duì)列中。
寫入指令緩存單元350用于接收寫入指令預(yù)處理單元330處理得到的向量寫入指令,并且依據(jù)讀取控制模塊360和寫入控制模塊370的執(zhí)行狀態(tài),動(dòng)態(tài)更新內(nèi)部存儲(chǔ)的向量寫入指令的狀態(tài),并發(fā)射符合條件的向量寫入指令。
其中。寫入指令緩存模塊進(jìn)行向量寫入指令狀態(tài)更新包括以下5種情況:
(1)在新的向量寫入指令進(jìn)入隊(duì)列中時(shí),更新該向量寫入指令的狀態(tài)為“待發(fā)射”;
(2)當(dāng)一向量寫入指令依賴的向量讀取指令正在執(zhí)行或執(zhí)行結(jié)束時(shí),更新該指令的狀態(tài)為“可發(fā)射”;
(3)當(dāng)一向量寫入指令的狀態(tài)為“可發(fā)射”,并且其之前的向量寫入指令請(qǐng)求發(fā)射結(jié)束后,發(fā)射該向量寫入指令,更新該向量寫入指令的狀態(tài)為“執(zhí)行中”;
(4)當(dāng)一向量寫入指令的所有單次寫入請(qǐng)求都已經(jīng)被寫入控制模塊發(fā)射后,更新該指令的狀態(tài)為“已發(fā)射”;
(5)當(dāng)一向量寫入指令的所有單次寫入請(qǐng)求都已經(jīng)被片上ram處理,并且返回結(jié)果之后,更新該指令的狀態(tài)為“執(zhí)行結(jié)束”。
寫入控制模塊370用于接收寫入指令緩存單元350發(fā)射的向量寫入指令,從其中解析出具體的單次寫入請(qǐng)求,從寫入數(shù)據(jù)緩存390接收寫入數(shù)據(jù),并且依據(jù)從讀取控制模塊360獲取該向量寫入指令所依賴的向量讀取指令的狀態(tài)來決定執(zhí)行單次寫入請(qǐng)求的時(shí)機(jī),在時(shí)機(jī)滿足時(shí),發(fā)送單次寫入請(qǐng)求和寫入數(shù)據(jù)給片上ram200,然后從片上ram200接收寫入結(jié)果的反饋。
寫入數(shù)據(jù)緩存390用于緩存從向量運(yùn)算部件500接收需要寫入的數(shù)據(jù),然后發(fā)送給寫入控制模塊370。
圖6為圖2所示數(shù)據(jù)讀寫調(diào)度器中寫入控制模塊進(jìn)行數(shù)據(jù)寫入的流程圖。請(qǐng)參照?qǐng)D6,寫入控制模塊進(jìn)行數(shù)據(jù)寫入的過程包括:
步驟s602:接收被發(fā)射的向量寫入指令;
步驟s604:由向量寫入指令解析出具體的單次寫入請(qǐng)求;
步驟s606:由寫入控制模塊獲取當(dāng)前執(zhí)行地址;
步驟s608:寫入數(shù)據(jù)緩存;
步驟s610:對(duì)于每一單次寫入請(qǐng)求,執(zhí)行以下操作:
子步驟s610a:判定該單次寫入請(qǐng)求是否滿足以下三個(gè)條件:
(1)該向量寫入指令依賴的向量讀取指令的狀態(tài)為“執(zhí)行結(jié)束”,或者其狀態(tài)為“執(zhí)行中”且當(dāng)前讀取地址已經(jīng)超過當(dāng)前寫入請(qǐng)求的地址,或者其狀態(tài)為“執(zhí)行中”且其結(jié)束地址已被當(dāng)前的寫入請(qǐng)求地址超越;
(2)當(dāng)前寫入控制模塊的數(shù)據(jù)隊(duì)列有等待寫入的數(shù)據(jù);
(3)當(dāng)前片上ram可接收當(dāng)前的單次寫入請(qǐng)求;
子步驟s610b:當(dāng)以上三個(gè)條件滿足后,發(fā)射該單次寫入數(shù)據(jù)請(qǐng)求和寫入數(shù)據(jù)到片上ram,執(zhí)行子步驟s604c;否則,阻塞該單次寫入請(qǐng)求;
子步驟s610c:等待片上ram返回寫入成功的消息,當(dāng)消息返回后,完成該單次寫入請(qǐng)求。
通過上述寫入指令緩存單元、寫入控制器和寫入數(shù)據(jù)緩存的組合操作,完成數(shù)據(jù)寫入操作,并且避免了讀后寫沖突。
片上ram200存儲(chǔ)運(yùn)算數(shù)據(jù)和運(yùn)算結(jié)果,并且由于按照最低地址分區(qū),可以同時(shí)處理多個(gè)向量讀取請(qǐng)求和向量寫入請(qǐng)求。
通過本實(shí)施例保留站,可以持續(xù)穩(wěn)定的發(fā)射數(shù)據(jù)給向量運(yùn)算部件,并且接收向量運(yùn)算部件的計(jì)算結(jié)果,然后依次寫入ram內(nèi)部,相比傳統(tǒng)的保留站可以更快速的處理向量運(yùn)算所需要的數(shù)據(jù)讀寫操作。
至此,本實(shí)施例用于向量運(yùn)算的保留站介紹完畢。
在本發(fā)明的另一個(gè)實(shí)施例中,還提供了一種用于向量運(yùn)算的數(shù)據(jù)讀取調(diào)度器。該數(shù)據(jù)讀取調(diào)度器實(shí)現(xiàn)上述實(shí)施例中的數(shù)據(jù)讀寫調(diào)度器的部分功能,其結(jié)構(gòu)相同,此處不再詳細(xì)描述。
在本發(fā)明的再一個(gè)實(shí)施例中,還提供了一種用于向量運(yùn)算的數(shù)據(jù)寫入調(diào)度器。該數(shù)據(jù)寫入調(diào)度器實(shí)現(xiàn)上述實(shí)施例中的數(shù)據(jù)讀寫調(diào)度器的部分功能,其結(jié)構(gòu)相同,此處不再詳細(xì)描述。
在本發(fā)明的再一個(gè)實(shí)施例中,還提供了一種用于向量運(yùn)算的數(shù)據(jù)讀寫調(diào)度器。該數(shù)據(jù)讀寫調(diào)度器實(shí)現(xiàn)上述實(shí)施例中的數(shù)據(jù)讀寫調(diào)度器的功能,其結(jié)構(gòu)相同,此處不再詳細(xì)描述。
至此,已經(jīng)結(jié)合附圖對(duì)本發(fā)明多個(gè)實(shí)施例進(jìn)行了詳細(xì)描述。依據(jù)以上描述,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)對(duì)本發(fā)明用于向量運(yùn)算的數(shù)據(jù)讀取調(diào)度器、數(shù)據(jù)寫入調(diào)度器、數(shù)據(jù)讀寫調(diào)度器及保留站有了清楚的認(rèn)識(shí)。
需要說明的是,在附圖或說明書正文中,未繪示或描述的實(shí)現(xiàn)方式,均為所屬技術(shù)領(lǐng)域中普通技術(shù)人員所知的形式,并未進(jìn)行詳細(xì)說明。此外,上述對(duì)各元件和方法的定義并不僅限于實(shí)施例中提到的各種具體結(jié)構(gòu)、形狀或方式,本領(lǐng)域普通技術(shù)人員可對(duì)其進(jìn)行簡(jiǎn)單地更改或替換,例如:
(1)片上ram還可以片外訪存形式來直接訪問片外數(shù)據(jù);
(2)譯碼器可以用向量指令緩存隊(duì)列來代替;
(3)除非特別描述或必須依序發(fā)生的步驟,上述步驟的順序并無限制于以上所列,且可根據(jù)所需設(shè)計(jì)而變化或重新安排。
綜上所述,本發(fā)明通過設(shè)置讀取指令緩存模塊和寫入指令緩存模塊,并基于兩者相互探測(cè)沖突指令,不僅可以處理向量讀寫指令之間的相互依賴關(guān)系,即寫后讀沖突和讀后寫沖突,同時(shí)可以相比傳統(tǒng)的保留站更快速的處理向量運(yùn)算所需要的數(shù)據(jù)讀寫操作,可以保證在存在寫后讀沖突和讀后寫沖突的情景下讀寫數(shù)據(jù)的正確性,具有較好的推廣應(yīng)用價(jià)值。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由 提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(dsp)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的相關(guān)設(shè)備中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
以上所述的具體實(shí)施例,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。