本發(fā)明涉及計(jì)算機(jī)指令運(yùn)算領(lǐng)域,尤其涉及一種用于執(zhí)行向量比較運(yùn)算的裝置和方法。
背景技術(shù):
向量比較,即針對(duì)兩長(zhǎng)度一致的向量,對(duì)應(yīng)的元素之間進(jìn)行比較,得到的比較結(jié)果構(gòu)成新的輸出向量。深度學(xué)習(xí)領(lǐng)域存在著針對(duì)兩向量進(jìn)行大小比較操作的需求,在人工神經(jīng)網(wǎng)絡(luò)的受限玻爾茲曼機(jī)中,即存在這樣的步驟,要求對(duì)一組神經(jīng)元組成的向量進(jìn)行采樣,即將向量中每一個(gè)神經(jīng)元與一個(gè)隨機(jī)數(shù)進(jìn)行比較,神經(jīng)元的值大于該向量就取1反之取0。又比如將一組32位單精度浮點(diǎn)數(shù)轉(zhuǎn)換值16位的半精度浮點(diǎn)數(shù),如果選擇隨機(jī)進(jìn)位的方法,則需要將截?cái)嗖糠峙c滿足某分布的隨機(jī)數(shù)進(jìn)行比較,大于該隨機(jī)數(shù)選擇進(jìn)1,這同樣要求對(duì)兩向量數(shù)據(jù)進(jìn)行比較操作。
在現(xiàn)有技術(shù)中,一種最常用的實(shí)現(xiàn)向量比較操作的方法是在通用cpu上逐個(gè)比較,該方法執(zhí)行效率低。
另一種現(xiàn)有技術(shù)是在圖形處理器(gpu)上進(jìn)行向量比較操作,其中,通過使用通用寄存器堆和通用流處理單元執(zhí)行通用simd指令來進(jìn)行運(yùn)算。但在上述方案中,gpu片上緩存太小,在進(jìn)行大規(guī)模向量比較運(yùn)算時(shí)需要不斷進(jìn)行片外數(shù)據(jù)搬運(yùn),片外帶寬成為了主要性能瓶頸。
綜上所述,現(xiàn)有的不管是通用處理器還是圖形處理器,均不能高效處理大規(guī)模的向量比較運(yùn)算。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種執(zhí)行向量比較運(yùn)算的裝置和方法,根據(jù)指令可以支持任意長(zhǎng)度的向量比較運(yùn)算,同時(shí)還具有優(yōu)異的執(zhí)行性能。該 裝置根據(jù)指令可以執(zhí)行一系列向量比較運(yùn)算,包括但不限于大于等于、大于、等于、不等于、小于、小于等于,可以靈活支持不同長(zhǎng)度的向量數(shù)據(jù)。
根據(jù)本發(fā)明一方面,提供了一種用于執(zhí)行向量比較運(yùn)算的裝置,包括:
存儲(chǔ)單元,用于存儲(chǔ)向量比較運(yùn)算指令相關(guān)的向量數(shù)據(jù);
寄存器單元,用于存儲(chǔ)向量比較運(yùn)算指令相關(guān)的標(biāo)量數(shù)據(jù);
控制單元,用于對(duì)向量比較運(yùn)算指令進(jìn)行譯碼,并控制向量比較運(yùn)算指令的運(yùn)算過程;
向量比較單元,用于根據(jù)譯碼后的向量比較運(yùn)算指令,對(duì)兩待比較輸入向量數(shù)據(jù)進(jìn)行向量比較操作;
其中,所述向量比較單元為定制的硬件電路。
優(yōu)選地,所述寄存器單元所存儲(chǔ)的標(biāo)量數(shù)據(jù)包括向量比較運(yùn)算指令相關(guān)的待比較輸入向量起始地址、比較結(jié)果輸出向量存儲(chǔ)地址、待比較輸入向量長(zhǎng)度;其中,所述待比較輸入向量的起始地址以及比較結(jié)果輸出向量存儲(chǔ)地址為所述存儲(chǔ)單元中的地址。
優(yōu)選地,所述控制單元包括:
指令隊(duì)列模塊,用于對(duì)譯碼后的向量比較運(yùn)算指令進(jìn)行順序存儲(chǔ),并獲取向量比較運(yùn)算指令相關(guān)的標(biāo)量數(shù)據(jù)。
優(yōu)選地,所述控制單元包括:
依賴關(guān)系處理單元,用于在向量比較單元獲取當(dāng)前向量比較運(yùn)算指令前,判斷當(dāng)前向量比較運(yùn)算指令與之前未執(zhí)行完的運(yùn)算指令是否存在依賴關(guān)系。
優(yōu)選地,所述控制單元包括:
存儲(chǔ)隊(duì)列模塊,用于在當(dāng)前向量比較運(yùn)算指令與之前未執(zhí)行完的運(yùn)算指令存在依賴關(guān)系時(shí),暫時(shí)存儲(chǔ)當(dāng)前向量比較運(yùn)算指令,并且在該依賴關(guān)系消除時(shí),將暫存的向量比較運(yùn)算指令送往向量比較單元。
優(yōu)選地,所述裝置還包括:
指令緩存單元,用于存儲(chǔ)待執(zhí)行的向量運(yùn)算指令;
輸入輸出單元,用于將向量比較運(yùn)算指令相關(guān)的向量數(shù)據(jù)存儲(chǔ)于存儲(chǔ)單元,或者,從存儲(chǔ)單元中獲取向量比較運(yùn)算指令的比較結(jié)果輸出向量。
優(yōu)選地,所述向量比較運(yùn)算指令包括操作碼和操作域;
所述操作碼用于指示執(zhí)行向量比較操作;
所述操作域包括立即數(shù)和/或寄存器號(hào),指示向量比較運(yùn)算相關(guān)的標(biāo)量數(shù)據(jù),其中寄存器號(hào)指向所述寄存器單元地址。
優(yōu)選地,所述存儲(chǔ)單元為高速暫存存儲(chǔ)器。
根據(jù)本發(fā)明第二方面,提供了一種用于執(zhí)行向量比較運(yùn)算的裝置,包括:
取指模塊,用于從指令序列中取出下一條要執(zhí)行的向量比較運(yùn)算指令,并將該向量比較運(yùn)算指令傳給譯碼模塊;
譯碼模塊,用于對(duì)該向量比較運(yùn)算指令進(jìn)行譯碼,并將譯碼后的向量比較運(yùn)算指令傳送給指令隊(duì)列模塊;
指令隊(duì)列模塊,用于暫存譯碼后的向量比較運(yùn)算指令,并從向量比較運(yùn)算指令或標(biāo)量寄存器獲得向量比較運(yùn)算指令相關(guān)的標(biāo)量數(shù)據(jù);獲得所述標(biāo)量數(shù)據(jù)后,將所述向量比較運(yùn)算指令送至依賴關(guān)系處理單元;
標(biāo)量寄存器堆,包括多個(gè)標(biāo)量寄存器,用于存儲(chǔ)向量比較運(yùn)算指令相關(guān)的標(biāo)量數(shù)據(jù);
依賴關(guān)系處理單元,用于判斷所述向量比較運(yùn)算指令與之前未執(zhí)行完的運(yùn)算指令之間是否存在依賴關(guān)系;如果存在依賴關(guān)系,則將所述向量比較運(yùn)算指令送至存儲(chǔ)隊(duì)列模塊,如果不存在依賴關(guān)系,則將所述向量比較運(yùn)算指令送至向量比較單元;
存儲(chǔ)隊(duì)列模塊,用于存儲(chǔ)與之前運(yùn)算指令存在依賴關(guān)系的向量比較運(yùn)算指令,并且在所述依賴關(guān)系解除后,將所述向量比較運(yùn)算指令送至向量比較單元;
向量比較單元,用于根據(jù)接收到向量比較運(yùn)算指令對(duì)輸入向量數(shù)據(jù)進(jìn)行向量比較操作;
高速暫存存儲(chǔ)器,用于存儲(chǔ)待比較輸入向量和比較結(jié)果輸出向量;
輸入輸出存取模塊,用于直接訪問所述高速暫存存儲(chǔ)器,負(fù)責(zé)從所述高速暫存存儲(chǔ)器中讀取待比較輸入向量和寫入比較結(jié)果輸出向量。
優(yōu)選地,所述向量比較單元為定制的硬件電路。
根據(jù)本發(fā)明第三方面,提供了一種用于執(zhí)行向量比較運(yùn)算方法,該方法包括:
取值模塊從指令序列中取出下一條要執(zhí)行的向量比較運(yùn)算指令,并將該向量比較運(yùn)算指令傳給譯碼模塊;
譯碼模塊對(duì)該向量比較運(yùn)算指令進(jìn)行譯碼,并將譯碼后的向量比較運(yùn)算指令傳送給指令隊(duì)列模塊;
指令隊(duì)列模塊暫存譯碼后的向量比較運(yùn)算指令,并從向量比較運(yùn)算指令或標(biāo)量寄存器獲得向量比較指令運(yùn)算相關(guān)的標(biāo)量數(shù)據(jù);獲得所述標(biāo)量數(shù)據(jù)后,將所述向量比較運(yùn)算指令送至依賴關(guān)系處理單元;
依賴關(guān)系處理單元判斷所述向量比較運(yùn)算指令與之前未執(zhí)行完的運(yùn)算指令之間是否存在依賴關(guān)系;如果存在依賴關(guān)系,則將所述向量比較運(yùn)算指令送至存儲(chǔ)隊(duì)列模塊,如果不存在依賴關(guān)系,則將所述向量比較運(yùn)算指令送至向量比較單元;
存儲(chǔ)隊(duì)列模塊存儲(chǔ)與之前運(yùn)算指令存在依賴關(guān)系的向量比較運(yùn)算指令,并且在所述依賴關(guān)系解除后,將所述向量比較運(yùn)算指令送至向量比較單元;
向量比較單元根據(jù)接收到的向量比較運(yùn)算指令,通過輸入輸出存取模塊從高速暫存存儲(chǔ)器取出待比較輸入向量,然后對(duì)待比較輸入向量進(jìn)行向量比較運(yùn)算,并通過輸入輸出存取模塊將比較結(jié)果輸出向量寫入高速暫存存儲(chǔ)器。
本發(fā)明提供的用于執(zhí)行向量比較運(yùn)算的裝置和方法,通過定制的硬件電路實(shí)現(xiàn)了精簡(jiǎn)向量比較運(yùn)算指令的完整過程,即通過一條精簡(jiǎn)的向量比較指令即可實(shí)現(xiàn)向量比較運(yùn)算。本發(fā)明還通過將參與計(jì)算的向量數(shù)據(jù)暫存在高速暫存存儲(chǔ)器上(scratchpadmemory),使得運(yùn)算過程中可以更加靈活有效地支持不同寬度的向量數(shù)據(jù),同時(shí)定制的向量比較單元能夠更加高效地實(shí)現(xiàn)各種比較運(yùn)算,本發(fā)明采用的指令具有精簡(jiǎn)的格式,使得指令使用方便。
本發(fā)明可以應(yīng)用于以下場(chǎng)景中(包括但不限于):數(shù)據(jù)處理、機(jī)器人、電腦、打印機(jī)、掃描儀、電話、平板電腦、智能終端、手機(jī)、行車記錄儀、導(dǎo)航儀、傳感器、攝像頭、云端服務(wù)器、相機(jī)、攝像機(jī)、投影儀、手表、耳機(jī)、移動(dòng)存儲(chǔ)、可穿戴設(shè)備等各類電子產(chǎn)品;飛機(jī)、輪船、車輛等各類交通工具;電視、空調(diào)、微波爐、冰箱、電飯煲、加濕器、洗衣機(jī)、電燈、 燃?xì)庠睢⒂蜔煓C(jī)等各類家用電器;以及包括核磁共振儀、b超、心電圖儀等各類醫(yī)療設(shè)備。
附圖說明
圖1是本發(fā)明提供的用于執(zhí)行向量比較運(yùn)算的裝置的結(jié)構(gòu)示意圖。
圖2是本發(fā)明提供的向量比較原始指令的格式示意圖。
圖3是本發(fā)明實(shí)施例提供的用于執(zhí)行向量比較運(yùn)算裝置的結(jié)構(gòu)示意圖。
圖4是本發(fā)明實(shí)施例提供的向量比較運(yùn)算裝置執(zhí)行向量比較原始指令的流程圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
圖1是本發(fā)明提供的一種用于執(zhí)行向量比較運(yùn)算的裝置的結(jié)構(gòu)示意圖,如圖1所示,向量比較運(yùn)算裝置包括:
存儲(chǔ)單元,用于存儲(chǔ)向量比較運(yùn)算指令相關(guān)的向量數(shù)據(jù),在一種實(shí)施方式中,該存儲(chǔ)單元可以是高速暫存存儲(chǔ)器(scratchpadmemory),能夠支持不同大小的向量數(shù)據(jù);本發(fā)明將必要的計(jì)算數(shù)據(jù)暫存在高速暫存存儲(chǔ)器上(scratchpadmemory),使本運(yùn)算裝置在進(jìn)行向量運(yùn)算過程中可以更加靈活有效地支持不同寬度的數(shù)據(jù)。所述向量比較運(yùn)算指令相關(guān)的向量數(shù)據(jù)包括待比較的輸入向量數(shù)據(jù)和比較結(jié)果輸出向量數(shù)據(jù);本發(fā)明將參與運(yùn)算的向量數(shù)據(jù)暫存在高速暫存存儲(chǔ)器上,使得向量運(yùn)算過程中可以更加靈活有效地支持不同寬度的數(shù)據(jù)。所述高速暫存存儲(chǔ)器可以通過各種不同存儲(chǔ)器件如sram、dram、edram、憶阻器、3d-dram和非易失存儲(chǔ)等實(shí)現(xiàn)。
寄存器單元,用于存儲(chǔ)向量比較運(yùn)算指令相關(guān)的標(biāo)量數(shù)據(jù),所述標(biāo)量數(shù)據(jù)包括待比較的輸入向量數(shù)據(jù)的起始地址及長(zhǎng)度、比較結(jié)果輸出向量數(shù)據(jù)存儲(chǔ)地址以及其他相關(guān)參數(shù),其中,向量所述輸入向量數(shù)據(jù)的地址和輸出向量數(shù)據(jù)的存儲(chǔ)地址為向量在存儲(chǔ)單元中存儲(chǔ)的地址;在一種實(shí)施方式 中,寄存器單元可以是標(biāo)量寄存器堆,提供運(yùn)算過程中所需的標(biāo)量寄存器,標(biāo)量寄存器不只存放向量存儲(chǔ)地址,還存放有其他的標(biāo)量數(shù)據(jù)。
控制單元,用于對(duì)向量比較運(yùn)算指令進(jìn)行譯碼,并控制向量比較運(yùn)算指令的執(zhí)行過程;其主要通過控制裝置中各個(gè)模塊的行為實(shí)現(xiàn)對(duì)向量比較運(yùn)算指令的執(zhí)行過程的控制。在一種實(shí)施方式中,控制單元讀取準(zhǔn)備好的指令,進(jìn)行譯碼生成控制信號(hào),發(fā)送給裝置中的其他模塊,其他模塊根據(jù)得到的控制信號(hào)執(zhí)行相應(yīng)的操作。
向量比較單元,該單元根據(jù)指令實(shí)現(xiàn)對(duì)輸入向量數(shù)據(jù)的指定比較運(yùn)算。該單元是向量運(yùn)算單元,同時(shí)對(duì)所有輸入數(shù)據(jù)進(jìn)行相同的運(yùn)算。在一實(shí)施例中,向量比較單元根據(jù)向量比較運(yùn)算指令得到兩待比較向量的起始地址和長(zhǎng)度,從存儲(chǔ)單元獲取兩待比較向量,并對(duì)兩待比較向量中對(duì)應(yīng)的元素進(jìn)行比較,當(dāng)條件滿足時(shí)將比較結(jié)果輸出向量的相應(yīng)位置置1,否則置0,得到比較結(jié)果。本發(fā)明中所述向量比較單元為定制的硬件電路,包括但不限于fpga、cgra、專用集成電路asic、模擬電路和憶阻器等;所述向量比較單元通過與該裝置中的其它模塊相互協(xié)作,能夠完成任意長(zhǎng)度向量的比較運(yùn)算。
本發(fā)明提供一種向量比較運(yùn)算裝置,通過指令來控制具體執(zhí)行的比較操作的方式以及向量數(shù)據(jù)的地址和長(zhǎng)度,運(yùn)算裝置主要包括了存儲(chǔ)單元、寄存器單元、控制單元和比較運(yùn)算單元。存儲(chǔ)單元中存儲(chǔ)有向量,寄存器單元中存儲(chǔ)有向量存儲(chǔ)地址和其他標(biāo)量參數(shù),控制單元執(zhí)行譯碼操作,根據(jù)指令控制各個(gè)模塊,而比較運(yùn)算單元根據(jù)指令在指令中或從寄存器單元中獲取向量的長(zhǎng)度、地址和其他參數(shù),然后,根據(jù)該地址和長(zhǎng)度在存儲(chǔ)單元中獲取相應(yīng)的向量數(shù)據(jù),接著,對(duì)向量執(zhí)行比較運(yùn)算,依指令的不同,可以執(zhí)行大于等于、大于、等于、不等于、小于和小于等于等比較運(yùn)算。本發(fā)明將參與計(jì)算的向量數(shù)據(jù)暫存在高速暫存存儲(chǔ)器上,使得運(yùn)算過程中可以更加靈活有效地支持不同寬度的向量數(shù)據(jù)。
根據(jù)本發(fā)明的一種實(shí)施方式,所述向量比較運(yùn)算裝置還包括:指令緩存單元,用于存儲(chǔ)待執(zhí)行的向量比較運(yùn)算指令。向量比較原始指令在執(zhí)行過程中,同時(shí)也被緩存在指令緩存單元中,當(dāng)一條指令執(zhí)行完之后,該指令將被提交。
圖2示出了本發(fā)明中向量比較運(yùn)算指令的格式示意圖,如圖2所示,所述向量比較運(yùn)算指令包含操作碼和多個(gè)操作域,其中操作碼用于指示進(jìn)行何種向量比較運(yùn)算,如大于等于、大于、等于、不等于、小于和小于等于等比較運(yùn)算;而操作域用于存儲(chǔ)向量比較運(yùn)算相關(guān)的標(biāo)量數(shù)據(jù),包括立即數(shù)和寄存器號(hào),所述寄存器號(hào)指向具體的寄存器單元;所述立即數(shù)和寄存器單元用于存儲(chǔ)待比較向量的起始地址及長(zhǎng)度、輸出向量的存儲(chǔ)地址等,根據(jù)該指令,裝置可以直接從指令中或者通過訪問指令提供的寄存器號(hào)來獲得指令相關(guān)的標(biāo)量數(shù)據(jù)。所述待比較向量的起始地址和輸出向量的存儲(chǔ)地址均為存儲(chǔ)單元中的地址。
根據(jù)本發(fā)明的一種實(shí)施方式,所述向量比較裝置的控制單元還包括:指令隊(duì)列模塊,用于對(duì)譯碼后的向量比較運(yùn)算指令進(jìn)行順序存儲(chǔ),其通過向量比較運(yùn)算指令中的操作域獲取向量比較運(yùn)算指令相關(guān)的標(biāo)量數(shù)據(jù),如待比較向量起始地址和長(zhǎng)度等,將其填充至向量比較運(yùn)算指令后將其送往依賴關(guān)系處理單元。
根據(jù)本發(fā)明的一種實(shí)施方式,所述裝置的控制單元還包括:依賴關(guān)系處理單元,用于在向量比較運(yùn)算單元獲取向量比較原始指令前,判斷該向量比較運(yùn)算指令與之前未執(zhí)行的運(yùn)算指令是否存在依賴關(guān)系,如是否訪問相同的向量存儲(chǔ)地址,若是,則將該向量比較運(yùn)算指令存儲(chǔ)在存儲(chǔ)隊(duì)列模塊中,待與其存在依賴關(guān)系的運(yùn)算指令執(zhí)行完畢后,存儲(chǔ)隊(duì)列模塊將該向量比較運(yùn)算指令提供給所述向量比較運(yùn)算單元;否則,直接將該向量比較運(yùn)算指令提供給所述向量比較運(yùn)算單元。具體地,向量比較運(yùn)算指令訪問高速暫存存儲(chǔ)器時(shí),前后指令可能會(huì)訪問同一塊存儲(chǔ)空間,為了保證指令執(zhí)行結(jié)果的正確性,當(dāng)前指令如果被檢測(cè)到與之前的指令的數(shù)據(jù)存在依賴關(guān)系,該指令必須在存儲(chǔ)隊(duì)列內(nèi)等待至依賴關(guān)系被消除。
根據(jù)本發(fā)明的一種實(shí)施方式,所述裝置的控制單元還包括:存儲(chǔ)隊(duì)列模塊,該模塊包括一個(gè)有序隊(duì)列,與之前指令在數(shù)據(jù)上有依賴關(guān)系的指令被存儲(chǔ)在該有序隊(duì)列內(nèi)直至依賴關(guān)系被消除,在依賴關(guān)系消除后,其將運(yùn)算指令提供給向量比較運(yùn)算單元。
根據(jù)本發(fā)明的一種實(shí)施方式,所述裝置還包括:輸入輸出單元,用于將向量存儲(chǔ)于存儲(chǔ)單元,或者,從存儲(chǔ)單元中獲取向量比較運(yùn)算結(jié)果。其 中,輸入輸出單元可直接存儲(chǔ)單元,負(fù)責(zé)從內(nèi)存中讀取向量數(shù)據(jù)或?qū)懭胂蛄繑?shù)據(jù)。
根據(jù)本發(fā)明的一種實(shí)施方式,本裝置的指令設(shè)計(jì)采用精簡(jiǎn)化的方式,一條指令可以完成一次完整的向量比較運(yùn)算。
在本裝置執(zhí)行向量比較運(yùn)算的過程中,裝置取出指令進(jìn)行譯碼,然后送至指令隊(duì)列存儲(chǔ),根據(jù)譯碼結(jié)果,獲取指令中的各個(gè)參數(shù),這些參數(shù)可以是直接寫在指令的操作域(即立即數(shù))中,也可以是根據(jù)指令操作域中的寄存器號(hào)從指定的寄存器中讀取。這種使用寄存器存儲(chǔ)參數(shù)的好處是無需改變指令本身,只要用指令改變寄存器中的值,就可以實(shí)現(xiàn)大部分的循環(huán),因此大大節(jié)省了在解決某些實(shí)際問題時(shí)所需要的指令條數(shù)。在全部操作數(shù)之后,依賴關(guān)系處理單元會(huì)判斷指令實(shí)際需要使用的數(shù)據(jù)與之前指令中是否存在依賴關(guān)系,這決定了這條指令是否可以被立即發(fā)送至運(yùn)算單元中執(zhí)行。一旦發(fā)現(xiàn)與之前的數(shù)據(jù)之間存在依賴關(guān)系,則該條指令必須等到它依賴的指令執(zhí)行完畢之后才可以送至運(yùn)算單元執(zhí)行。在定制的運(yùn)算單元中,該條指令將快速執(zhí)行完畢,并將結(jié)果,即生成的隨機(jī)向量寫回至指令提供的地址,該條指令執(zhí)行完畢。
本裝置可以執(zhí)行下列幾種向量比較運(yùn)算指令:
大于等于運(yùn)算指令(ge),根據(jù)該指令,裝置可以直接從指令中或者通過訪問指令提供的寄存器號(hào)來獲得指令的參數(shù),包括向量的長(zhǎng)度、兩向量的起始地址以及輸出向量的存儲(chǔ)地址,然后讀取兩向量數(shù)據(jù),在向量比較運(yùn)算單元中對(duì)向量中所有位置上的元素進(jìn)行比較,若某位置行前一向量的值大于等于后一向量的值,則將比較結(jié)果向量在該位置上的值置為1,否則置為0。最后將比較結(jié)果寫回至高速暫存存儲(chǔ)器的指定存儲(chǔ)地址。
小于等于運(yùn)算指令(le),根據(jù)該指令,裝置可以直接從指令中或者通過訪問指令提供的寄存器號(hào)來獲得指令的參數(shù),包括向量的長(zhǎng)度、兩向量的起始地址以及輸出向量的存儲(chǔ)地址,然后讀取兩向量數(shù)據(jù),在向量比較運(yùn)算單元中對(duì)向量中所有位置上的元素進(jìn)行比較,若某位置行前一向量的值小于等于后一向量的值,則將比較結(jié)果向量在該位置上的值置為1,否則置為0。最后將比較結(jié)果寫回值高速暫存存儲(chǔ)器的指定存儲(chǔ)地址。
大于運(yùn)算指令(gt),根據(jù)該指令,裝置可以直接從指令中或者通過訪問指令提供的寄存器號(hào)來獲得指令的參數(shù),包括向量的長(zhǎng)度、兩向量的起始地址以及輸出向量的存儲(chǔ)地址,然后讀取兩向量數(shù)據(jù),在向量比較運(yùn)算單元中對(duì)向量中所有位置上的元素進(jìn)行比較,若某位置行前一向量的值大于后一向量的值,則將比較結(jié)果向量在該位置上的值置為1,否則置為0。最后將比較結(jié)果寫回值高速暫存存儲(chǔ)器的指定存儲(chǔ)地址。
小于運(yùn)算指令(lt),根據(jù)該指令,裝置可以直接從指令中或者通過訪問指令提供的寄存器號(hào)來獲得指令的參數(shù),包括向量的長(zhǎng)度、兩向量的起始地址以及輸出向量的存儲(chǔ)地址,然后讀取兩向量數(shù)據(jù),在向量比較運(yùn)算單元中對(duì)向量中所有位置上的元素進(jìn)行比較,若某位置行前一向量的值小于后一向量的值,則將比較結(jié)果向量在該位置上的值置為1,否則置為0。最后將比較結(jié)果寫回值高速暫存存儲(chǔ)器的指定存儲(chǔ)地址。
等于運(yùn)算指令(eq),根據(jù)該指令,裝置可以直接從指令中或者通過訪問指令提供的寄存器號(hào)來獲得指令的參數(shù),包括向量的長(zhǎng)度、兩向量的起始地址以及輸出向量的存儲(chǔ)地址,然后讀取兩向量數(shù)據(jù),在向量比較運(yùn)算單元中對(duì)向量中所有位置上的元素進(jìn)行比較,若某位置行前一向量的值等于后一向量的值,則將比較結(jié)果向量在該位置上的值置為1,否則置為0。最后將比較結(jié)果寫回值高速暫存存儲(chǔ)器的指定存儲(chǔ)地址。
不等于運(yùn)算指令(ueq),根據(jù)該指令,裝置可以直接從指令中或者通過訪問指令提供的寄存器號(hào)來獲得指令的參數(shù),包括向量的長(zhǎng)度、兩向量的起始地址以及輸出向量的存儲(chǔ)地址,然后讀取兩向量數(shù)據(jù),在向量比較運(yùn)算單元中對(duì)向量中所有位置上的元素進(jìn)行比較,若某位置行前一向量的值不等于后一向量的值,則將比較結(jié)果向量在該位置上的值置為1,否則置為0。最后將比較結(jié)果寫回值高速暫存存儲(chǔ)器的指定存儲(chǔ)地址。
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。
圖3是本發(fā)明一實(shí)施例提供的用于執(zhí)行向量比較運(yùn)算的裝置的結(jié)構(gòu)示意圖,如圖3所示,該裝置包括取指模塊、譯碼模塊、指令隊(duì)列模塊、標(biāo)量寄存器堆、依賴關(guān)系處理單元、存儲(chǔ)隊(duì)列模塊、向量比較運(yùn)算單元、高速暫存器、io內(nèi)存存取模塊;
取指模塊,該模塊負(fù)責(zé)從指令序列中取出下一條將要執(zhí)行的指令,并將該指令傳給譯碼模塊;
譯碼模塊,該模塊負(fù)責(zé)對(duì)指令進(jìn)行譯碼,并將譯碼后指令傳給指令隊(duì)列;
指令隊(duì)列模塊,該模塊用于暫存從譯碼模塊獲得的指令,并從指令或標(biāo)量寄存器獲得指令運(yùn)算相應(yīng)的數(shù)據(jù),包括向量數(shù)據(jù)的起始地址和大小以及一些標(biāo)量常數(shù)。獲得數(shù)據(jù)后,指令被送至依賴關(guān)系處理單元;
標(biāo)量寄存器堆,提供運(yùn)算過程中所需的標(biāo)量寄存器;
依賴關(guān)系處理單元,該單元用于處理向量比較運(yùn)算指令與之前未執(zhí)行完的指令可能存在的存儲(chǔ)依賴關(guān)系。向量比較運(yùn)算指令會(huì)訪問高速暫存存儲(chǔ)器以獲取待比較向量,前后指令可能會(huì)訪問同一塊存儲(chǔ)空間。為了保證指令執(zhí)行結(jié)果的正確性,當(dāng)前指令如果被檢測(cè)到與之前的指令的數(shù)據(jù)存在依賴關(guān)系,該指令被送至存儲(chǔ)隊(duì)列模塊內(nèi)等待至依賴關(guān)系被消除。即檢測(cè)本條指令的輸入數(shù)據(jù)的存儲(chǔ)區(qū)間與之前沒有執(zhí)行完畢的指令的輸出數(shù)據(jù)的存儲(chǔ)區(qū)間是否有重疊,存儲(chǔ)區(qū)間是由起始地址和數(shù)據(jù)長(zhǎng)度決定的。如果有重疊,則說明本條指令實(shí)際上是需要之前指令的執(zhí)行結(jié)果作為輸入的,因此必須等到那條指令執(zhí)行完畢后,這條指令才能開始執(zhí)行。在這個(gè)過程中,指令實(shí)際被暫存在存儲(chǔ)隊(duì)列模塊中。
存儲(chǔ)隊(duì)列模塊,該模塊是一個(gè)有序隊(duì)列,與之前指令在數(shù)據(jù)上有依賴關(guān)系的指令被存儲(chǔ)在該隊(duì)列內(nèi)直至存儲(chǔ)關(guān)系被消除;依賴關(guān)系被消除后的向量比較運(yùn)算指令被送往向量比較運(yùn)算單元;
向量比較運(yùn)算單元,該單元負(fù)責(zé)執(zhí)行兩待比較向量的比較操作,包括大于等于、大于、小于等于、小于、等于、不等于的比較運(yùn)算;該向量比較運(yùn)算單元為定制的硬件電路實(shí)現(xiàn);
高速暫存器,該模塊是向量數(shù)據(jù)專用的暫存存儲(chǔ)裝置,能夠支持不同大小的向量數(shù)據(jù);所述高速暫存器主要用于存儲(chǔ)待比較向量數(shù)據(jù)和比較運(yùn)算結(jié)果向量數(shù)據(jù);
io內(nèi)存存取模塊,該模塊用于直接訪問高速暫存存儲(chǔ)器,負(fù)責(zé)從高速暫存存儲(chǔ)器中讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)。
圖4是本發(fā)明一實(shí)施例提供的向量比較運(yùn)算裝置執(zhí)行向量比較運(yùn)算指令的流程圖,如圖4所示,執(zhí)行向量比較運(yùn)算指令的過程包括:
s1,取指模塊取出該條向量比較運(yùn)算指令,并將該向量比較運(yùn)算指令送往譯碼模塊。
s2,譯碼模塊對(duì)該向量比較運(yùn)算指令譯碼,并將該向量比較運(yùn)算指令送往指令隊(duì)列模塊。
s3,在指令隊(duì)列模塊中,從向量比較運(yùn)算指令本身或從標(biāo)量寄存器堆中獲取向量比較運(yùn)算指令中操作域所對(duì)應(yīng)的標(biāo)量數(shù)據(jù),包括兩待比較輸入向量的起始地址、輸入向量長(zhǎng)度、輸出向量地址。
s4,在取得需要的標(biāo)量數(shù)據(jù)后,該向量比較運(yùn)算指令被送往依賴關(guān)系處理單元。
s5,依賴關(guān)系處理單元分析該向量比較運(yùn)算指令與前面的尚未執(zhí)行結(jié)束的指令在數(shù)據(jù)上是否存在依賴關(guān)系。若存在依賴關(guān)系,則該條向量比較運(yùn)算指令被送往存儲(chǔ)隊(duì)列中等待至其與前面的未執(zhí)行結(jié)束的指令在數(shù)據(jù)上不再存在依賴關(guān)系為止。若不存在依賴關(guān)系,則該條向量比較原始指令被送往向量比較運(yùn)算單元。
s6,向量比較運(yùn)算單元根據(jù)向量比較運(yùn)算指令中的兩待比較向量的起始地址和長(zhǎng)度從高速暫存器中取出需比較的兩待比較向量數(shù)據(jù)的一部分。
s7,向量比較單元同時(shí)比較所取出的兩待比較向量數(shù)據(jù)的一部分中所有位置上的元素,當(dāng)某位置上的兩元素相等時(shí),置輸出結(jié)果的相應(yīng)位置為1或0。
s8,轉(zhuǎn)步驟s6,向量比較單元繼續(xù)取出兩待比較向量數(shù)據(jù)的下一部分進(jìn)行比較,直至完成兩待比較向量是否相等的運(yùn)算。
s9,運(yùn)算完成后,將結(jié)果向量寫回至高速暫存存儲(chǔ)器的指定地址。
綜上所述,本發(fā)明提供向量比較運(yùn)算裝置,配合相應(yīng)的指令,能夠很好地解決當(dāng)前計(jì)算機(jī)領(lǐng)域越來越多的針對(duì)向量的比較操作。相比于已有的傳統(tǒng)解決方案,本發(fā)明可以具有指令精簡(jiǎn)、使用方便、支持的向量長(zhǎng)度靈活、片上緩存充足等優(yōu)點(diǎ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)。