本發(fā)明涉及一種向量四則運算裝置及方法,用于根據(jù)向量四則運算指令高效靈活地執(zhí)行向量四則運算,能夠很好地解決當(dāng)前計算機領(lǐng)域越來越多的算法包含大量向量四則運算的問題。
背景技術(shù):
在已有的計算機領(lǐng)域應(yīng)用中,與向量運算相關(guān)的應(yīng)用十分普遍。以目前的熱門應(yīng)用領(lǐng)域人工智能中的主流算法機器學(xué)習(xí)算法為例,幾乎所有已有的經(jīng)典算法中都含有大量的向量四則運算。向量四則運算是指對向量的對應(yīng)分量進(jìn)行加減乘除這四種運算。具體來說,對于兩個向量a=[a1,a2,…,an]和b=[b1,b2,…,bn],向量加法定義為:a+b=[a1+b1,a2+b2,…,an+bn],向量減法定義為:a-b=[a1-b1,a2-b2,…,an-bn],向量乘法定義為:[a1*b1,a2*b2,…,an*bn]向量除法定義為:[a1/b1,a2/b2,…,an/bn]。
在現(xiàn)有技術(shù)中,一種進(jìn)行向量四則運算的已知方案是使用通用處理器,該方法通過通用寄存器堆和通用功能部件來執(zhí)行通用指令,從而執(zhí)行向量四則運算。然而,該方法的缺點之一是單個通用處理器多用于標(biāo)量計算,在進(jìn)行向量四則運算時運算性能較低。而使用多個通用處理器并行執(zhí)行時,通用處理器之間的相互通訊又有可能成為性能瓶頸。在另一種現(xiàn)有技術(shù)中,使用圖形處理器(gpu)來進(jìn)行向量計算,其中,通過使用通用寄存器堆和通用流處理單元執(zhí)行通用simd指令來進(jìn)行向量四則運算。然而,上述方案中,gpu片上緩存太小,在進(jìn)行大規(guī)模向量四則運算時需要不斷進(jìn)行片外數(shù)據(jù)搬運,片外帶寬成為了主要性能瓶頸。在另一種現(xiàn)有技術(shù)中,使用專門定制的向量四則運算裝置來進(jìn)行向量計算,其中,使用定制的寄存器堆和定制的處理單元進(jìn)行向量四則運算。然而,目前已有的專用向量四則運算裝置受限于寄存器堆,不能夠靈活地支持不同長度的向量四則運算。
技術(shù)實現(xiàn)要素:
(一)要解決的技術(shù)問題
本發(fā)明的目的在于,提供一種向量四則運算裝置及方法,解決現(xiàn)有技術(shù)中存在的受限于片間通訊、片上緩存不夠、支持的向量長度不夠靈活等問題。
(二)技術(shù)方案
本發(fā)明提供一種向量四則運算裝置,用于根據(jù)向量四則運算指令執(zhí)行向量四則運算,包括:
存儲單元,用于存儲向量;
寄存器單元,用于存儲向量地址,其中,向量地址為向量在存儲單元中存儲的地址;
向量四則運算單元,用于獲取向量四則運算指令,根據(jù)向量四則運算指令在寄存器單元中獲取向量地址,然后,根據(jù)該向量地址在存儲單元中獲取相應(yīng)的向量,接著,根據(jù)獲取的向量進(jìn)行向量四則運算,得到向量四則運算結(jié)果。
(三)有益效果
本發(fā)明提供的向量四則運算裝置及方法,將參與計算的向量數(shù)據(jù)暫存在高速暫存存儲器(scratchpadmemory)上。在僅發(fā)送同一條指令的情況下,向量四則運算單元中可以更加靈活有效地支持不同寬度的數(shù)據(jù),并可以解決數(shù)據(jù)存儲中的相關(guān)性問題,從而提升了包含大量向量計算任務(wù)的執(zhí)行性能,本發(fā)明采用的指令具有精簡的格式,使得指令集使用方便、支持的向量長度靈活。
本發(fā)明可以應(yīng)用于以下(包括但不限于)場景中:數(shù)據(jù)處理、機器人、電腦、打印機、掃描儀、電話、平板電腦、智能終端、手機、行車記錄儀、導(dǎo)航儀、傳感器、攝像頭、云端服務(wù)器、相機、攝像機、投影儀、手表、耳機、移動存儲、可穿戴設(shè)備等各類電子產(chǎn)品;飛機、輪船、車輛等各類交通工具;電視、空調(diào)、微波爐、冰箱、電飯煲、加濕器、洗衣機、電燈、燃?xì)庠?、油煙機等各類家用電器;以及包括核磁共振儀、b超、心電圖儀等各類醫(yī)療設(shè)備。
附圖說明
圖1是本發(fā)明提供的向量四則運算裝置的結(jié)構(gòu)示意圖。
圖2是本發(fā)明提供的指令集的格式示意圖。
圖3是本發(fā)明實施例提供的向量四則運算裝置的結(jié)構(gòu)示意圖。
圖4是本發(fā)明實施例提供的向量四則運算裝置執(zhí)行向量四則指令的流程圖。
圖5為本發(fā)明實施例提供的向量四則運算單元的結(jié)構(gòu)示意圖。
具體實施方式
本發(fā)明提供一種向量四則運算裝置及配套指令集,裝置包括存儲單元、寄存器單元和向量四則運算單元,存儲單元中存儲有向量,寄存器單元中存儲有向量存儲的地址向量四則運算單元根據(jù)向量四則運算指令在寄存器單元中獲取向量地址,然后,根據(jù)該向量地址在存儲單元中獲取相應(yīng)的向量,接著,根據(jù)獲取的向量進(jìn)行向量四則運算,得到向量四則運算結(jié)果。本發(fā)明將參與計算的向量數(shù)據(jù)暫存在高速暫存存儲器上,使得向量四則運算過程中可以更加靈活有效地支持不同寬度的數(shù)據(jù),提升包含大量向量計算任務(wù)的執(zhí)行性能。
圖1是本發(fā)明提供的向量四則運算裝置的結(jié)構(gòu)示意圖,如圖1所示,向量四則運算裝置包括:
存儲單元,用于存儲向量,在一種實施方式中,該存儲單元可以是高速暫存存儲器,能夠支持不同大小的向量數(shù)據(jù);本發(fā)明將必要的計算數(shù)據(jù)暫存在高速暫存存儲器(scratchpadmemory)上,使本運算裝置在進(jìn)行向量四則運算過程中可以更加靈活有效地支持不同寬度的數(shù)據(jù)。存儲單元可以通過各種不同存儲器件(sram、edram、dram、憶阻器、3d-dram或非易失存儲等)實現(xiàn)。
寄存器單元,用于存儲向量地址,其中,向量地址為向量在存儲單元中存儲的地址;在一種實施方式中,寄存器單元可以是標(biāo)量寄存器堆,提供運算過程中所需的標(biāo)量寄存器,標(biāo)量寄存器不只存放向量地址,還存放有標(biāo)量數(shù)據(jù)。當(dāng)涉及到向量與標(biāo)量的運算時,向量四則運算單元不僅要從 寄存器單元中獲取向量地址,還要從寄存器單元中獲取相應(yīng)的標(biāo)量。另外,寄存器單元的數(shù)量一般為多個,以組成寄存器堆,用于存儲多個向量地址及標(biāo)量。
向量四則運算單元,用于獲取向量四則運算指令,根據(jù)向量四則運算指令在寄存器單元中獲取向量地址,然后,根據(jù)該向量地址在存儲單元中獲取相應(yīng)的向量,接著,根據(jù)獲取的向量進(jìn)行向量四則運算,得到向量四則運算結(jié)果,并將向量四則運算結(jié)果存儲于存儲單元中。向量四則運算單元包含包括向量四則加法部件、向量四則減法部件、向量四則乘法部件和向量四則除法部件,并且,向量四則運算單元為多流水級結(jié)構(gòu),其中,加法部件和減法部件處于第一流水級,乘法部件和除法部件處于第二流水級。這些單元處于不同的流水級,當(dāng)連續(xù)串行的多條向量四則運算指令的先后次序與相應(yīng)單元所在流水級順序一致時,可以更加高效地實現(xiàn)這一連串向量四則運算指令所要求的操作。
根據(jù)本發(fā)明的一種實施方式,向量四則運算裝置還包括:指令緩存單元,用于存儲待執(zhí)行的向量四則運算指令。指令在執(zhí)行過程中,同時也被緩存在指令緩存單元中,當(dāng)一條指令執(zhí)行完之后,如果該指令同時也是指令緩存單元中未被提交指令中最早的一條指令,該指令將被提交,一旦提交,該條指令進(jìn)行的操作對裝置狀態(tài)的改變將無法撤銷。在一種實施方式中,指令緩存單元可以是重排序緩存。
根據(jù)本發(fā)明的一種實施方式,向量四則運算裝置還包括:指令處理單元,用于從指令緩存單元獲取向量四則運算指令,并對該向量四則運算指令進(jìn)行處理后,提供給所述向量四則運算單元。其中,指令處理單元包括:
取指模塊,用于從指令緩存單元中獲取向量四則運算指令;
譯碼模塊,用于對獲取的向量四則運算指令進(jìn)行譯碼;
指令隊列,用于對譯碼后的向量四則運算指令進(jìn)行順序存儲,考慮到不同指令在包含的寄存器上有可能存在依賴關(guān)系,用于緩存譯碼后的指令,當(dāng)依賴關(guān)系被滿足之后發(fā)送指令。
根據(jù)本發(fā)明的一種實施方式,向量四則運算裝置還包括:依賴關(guān)系處理單元,用于在向量四則運算單元獲取向量四則運算指令前,判斷該向量四則運算指令與前一向量四則運算指令是否訪問相同的向量,若是,將該 向量四則運算指令存儲在一存儲隊列中,待前一向量四則運算指令執(zhí)行完畢后,將存儲隊列中的該向量四則運算指令提供給所述向量四則運算單元;否則,直接將該向量四則運算指令提供給所述向量四則運算單元。具體地,向量四則運算指令訪問高速暫存存儲器時,前后指令可能會訪問同一塊存儲空間,為了保證指令執(zhí)行結(jié)果的正確性,當(dāng)前指令如果被檢測到與之前的指令的數(shù)據(jù)存在依賴關(guān)系,該指令必須在存儲隊列內(nèi)等待至依賴關(guān)系被消除。
根據(jù)本發(fā)明的一種實施方式,向量四則運算裝置還包括:輸入輸出單元,用于將向量存儲于存儲單元,或者,從存儲單元中獲取向量四則運算結(jié)果。其中,輸入輸出單元可直接存儲單元,負(fù)責(zé)從內(nèi)存中讀取向量數(shù)據(jù)或?qū)懭胂蛄繑?shù)據(jù)。
本發(fā)明還提供一種向量四則運算方法,用于根據(jù)向量四則運算指令執(zhí)行向量四則運算,方法包括:
s1,存儲向量;
s2,存儲向量地址,向量地址指示了向量在步驟s1中所存儲的位置;
s3,獲取向量四則運算指令,根據(jù)向量四則運算指令獲取向量地址,然后,根據(jù)該向量地址獲取存儲的向量,接著,根據(jù)獲取的向量進(jìn)行向量四則運算,得到向量四則運算結(jié)果。
根據(jù)本發(fā)明的一種實施方式,在步驟s3之前還包括:
存儲向量四則運算指令;
獲取存儲的向量四則運算指令;
對獲取的向量四則運算指令進(jìn)行譯碼;
對譯碼后的向量四則運算指令進(jìn)行順序存儲。
根據(jù)本發(fā)明的一種實施方式,在步驟s3之前還包括:
判斷該向量四則運算指令與前一向量四則運算指令是否訪問相同的向量,若是,將該向量四則運算指令存儲在一存儲隊列中,待前一向量四則運算指令執(zhí)行完畢后,再執(zhí)行步驟s3;否則,直接執(zhí)行步驟s3。
根據(jù)本發(fā)明的一種實施方式,方法還包括,存儲所述向量四則運算結(jié)果。
根據(jù)本發(fā)明的一種實施方式,步驟s1包括,將向量存儲至一高速暫 存存儲器中。
根據(jù)本發(fā)明的一種實施方式,向量四則運算指令包括一操作碼和至少一操作域,其中,所述操作碼用于指示該向量運算指令的功能,操作域用于指示該向量運算指令的數(shù)據(jù)信息。
根據(jù)本發(fā)明的一種實施方式,向量四則運算包括向量加法運算、向量減法運算、向量乘法運算和向量除法運算。
根據(jù)本發(fā)明的一種實施方式,向量運算單元為多流水級結(jié)構(gòu),包括第一流水級和第二流水級,其中,在第一流水級執(zhí)行向量加法運算和向量減法運算,在第二流水級執(zhí)行向量乘法運算和向量除法運算。
本發(fā)明的指令集采用load/store結(jié)構(gòu),向量四則運算單元不會對內(nèi)存中的數(shù)據(jù)進(jìn)行操作。本指令集采用精簡指令集架構(gòu),指令集只提供最基本的向量四則運算操作,復(fù)雜的向量四則運算都由這些簡單指令通過組合進(jìn)行模擬,使得可以在高時鐘頻率下單周期執(zhí)行指令。另外,本指令集同時采用定長指令,使得本發(fā)明提出的向量四則運算裝置在上一條指令的譯碼階段對下一條指令進(jìn)行取指。
在本裝置執(zhí)行向量四則運算的過程中,裝置取出指令進(jìn)行譯碼,然后送至指令隊列存儲,根據(jù)譯碼結(jié)果,獲取指令中的各個參數(shù),這些參數(shù)可以是直接寫在指令的操作域中,也可以是根據(jù)指令操作域中的寄存器編號從指定的寄存器中讀取。這種使用寄存器存儲參數(shù)的好處是無需改變指令本身,只要用指令改變寄存器中的值,就可以實現(xiàn)大部分的循環(huán),因此大大節(jié)省了在解決某些實際問題時所需要的指令條數(shù)。在全部操作數(shù)之后,依賴關(guān)系處理單元會判斷指令實際需要使用的數(shù)據(jù)與之前指令中是否存在依賴關(guān)系,這決定了這條指令是否可以被立即發(fā)送至運算單元中執(zhí)行。一旦發(fā)現(xiàn)與之前的數(shù)據(jù)之間存在依賴關(guān)系,則該條指令必須等到它依賴的指令執(zhí)行完畢之后才可以送至運算單元執(zhí)行。在定制的運算單元中,該條指令將快速執(zhí)行完畢,并將結(jié)果,即生成的向量四則運算結(jié)果寫回至指令提供的地址,該條指令執(zhí)行完畢。
圖2是本發(fā)明提供的指令集的格式示意圖,如圖2所示,向量四則運算指令包括1個操作碼和多個操作域,其中,操作碼用于指示該向量四則運算指令的功能,功能如加、減、乘、除等。向量四則運算單元通過識別 該操作碼可進(jìn)行向量四則運算,操作域用于指示該向量四則運算指令的數(shù)據(jù)信息,其中,數(shù)據(jù)信息可以是立即數(shù)或寄存器編號,例如,要獲取一個向量時,根據(jù)寄存器編號可以在相應(yīng)的寄存器中獲取向量起始地址和向量長度,再根據(jù)向量起始地址和向量長度在存儲單元中獲取相應(yīng)地址存放的向量。
指令集包含有不同功能的向量四則運算指令:
向量加法指令(va)。根據(jù)該指令,裝置從高速暫存存儲器的指定地址處分別取出兩塊指定大小的向量數(shù)據(jù),在向量運算單元中進(jìn)行加法運算,并將結(jié)果寫回至高速暫存存儲器的指定地址;
向量加標(biāo)量指令(vas)。根據(jù)該指令,裝置從高速暫存存儲器的指定地址取出指定大小的向量數(shù)據(jù),從標(biāo)量寄存器堆的指定地址取出標(biāo)量數(shù)據(jù),在標(biāo)量運算單元中將向量的每一個元素加上該標(biāo)量值,并將結(jié)果寫回至高速暫存存儲器的指定地址;
向量減法指令(vs)。根據(jù)該指令,裝置從高速暫存存儲器的指定地址處分別取出兩塊指定大小的向量數(shù)據(jù),在向量運算單元中進(jìn)行減法運算,并將結(jié)果寫回至高速暫存存儲器的指定地址;
標(biāo)量減向量指令(ssv)。根據(jù)該指令,裝置從標(biāo)量寄存器堆的指定地址取出標(biāo)量數(shù)據(jù),從高速暫存存儲器的指定地址取出向量數(shù)據(jù),在向量計算單元中用該標(biāo)量減去向量中的相應(yīng)元素,并將結(jié)果寫回高速暫存存儲器的指定地址;
向量乘法指令(vmv)。根據(jù)該指令,裝置從高速暫存存儲器的指定地址分別取出指定大小的向量數(shù)據(jù),在向量計算單元中將兩向量數(shù)據(jù)對位相乘,并將結(jié)果寫回高速暫存存儲器的指定地址;
向量乘標(biāo)量指令(vms)。根據(jù)該指令,裝置從高速暫存存儲器的指定地址取出指定大小的向量數(shù)據(jù),從標(biāo)量寄存器堆的指定地址取出指定大小的標(biāo)量數(shù)據(jù),在向量寄存單元中進(jìn)行向量乘標(biāo)量運算,并將結(jié)果寫回高速暫存存儲器的指定地址;
向量除法指令(vd)。根據(jù)該指令,裝置從高速暫存存儲器的指定地址取出分別取出指定大小的向量數(shù)據(jù),在向量運算單元中將兩向量對位相除,并將結(jié)果寫回至高速暫存存儲器的指定地址;
標(biāo)量除向量指令(sdv)。根據(jù)該指令,裝置從標(biāo)量寄存器堆的指定位置取出標(biāo)量數(shù)據(jù),從高速暫存存儲器的指定位置取出指定大小的向量數(shù)據(jù),在向量計算單元中用標(biāo)量分別除以向量中的相應(yīng)元素,并將結(jié)果寫回至高速暫存存儲器的指定位置;
向量檢索指令(vr)。根據(jù)該指令,裝置從高速暫存存儲器的指定地址取出指定大小的向量數(shù)據(jù),在向量計算單元中根據(jù)指定位置取出向量中的相應(yīng)元素作為輸出,并將結(jié)果寫回至標(biāo)量寄存器堆的指定地址;
向量加載指令(vload)。根據(jù)該指令,裝置從指定外部源地址載入指定大小的向量數(shù)據(jù)至高速暫存存儲器的指定地址;
向量存儲指令(vs)。根據(jù)該指令,裝置將高速暫存存儲器的指定地址的指定大小的向量數(shù)據(jù)存至外部目的地址處;
向量搬運指令(vmove)。根據(jù)該指令,裝置將高速暫存存儲器的指定地址的指定大小的向量數(shù)據(jù)存至高速暫存存儲器的另一指定地址處。
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。
圖3是本發(fā)明實施例提供的向量四則運算裝置的結(jié)構(gòu)示意圖,如圖3所示,裝置包括取指模塊、譯碼模塊、指令隊列、標(biāo)量寄存器堆、依賴關(guān)系處理單元、存儲隊列、重排序緩存、向量四則運算單元、高速暫存器、io內(nèi)存存取模塊;
取指模塊,該模塊負(fù)責(zé)從指令序列中取出下一條將要執(zhí)行的指令,并將該指令傳給譯碼模塊;
譯碼模塊,該模塊負(fù)責(zé)對指令進(jìn)行譯碼,并將譯碼后指令傳給指令隊列;
指令隊列,考慮到不同指令在包含的標(biāo)量寄存器上有可能存在依賴關(guān)系,用于緩存譯碼后的指令,當(dāng)依賴關(guān)系被滿足之后發(fā)射指令;
標(biāo)量寄存器堆,提供裝置在運算過程中所需的標(biāo)量寄存器;
依賴關(guān)系處理單元,該模塊處理處理指令與前一條指令可能存在的存儲依賴關(guān)系。向量四則運算指令會訪問高速暫存存儲器,前后指令可能會訪問同一塊存儲空間。為了保證指令執(zhí)行結(jié)果的正確性,當(dāng)前指令如果被檢測到與之前的指令的數(shù)據(jù)存在依賴關(guān)系,該指令必須在存儲隊列內(nèi)等待 至依賴關(guān)系被消除。
存儲隊列,該模塊是一個有序隊列,與之前指令在數(shù)據(jù)上有依賴關(guān)系的指令被存儲在該隊列內(nèi)直至存儲關(guān)系被消除;
重排序緩存,指令在執(zhí)行過程中,同時也被緩存在給該模塊中,當(dāng)一條指令執(zhí)行完之后,如果該指令同時也是重排序緩存中未被提交指令中最早的一條指令,該指令將被提交。一旦提交,該條指令進(jìn)行的操作對裝置狀態(tài)的改變將無法撤銷;
向量四則運算單元,該模塊負(fù)責(zé)裝置的所有向量四則運算,向量四則運算指令被送往該運算單元執(zhí)行;
高速暫存器,該模塊是向量數(shù)據(jù)專用的暫存存儲裝置,能夠支持不同大小的向量數(shù)據(jù);
io內(nèi)存存取模塊,該模塊用于直接訪問高速暫存存儲器,負(fù)責(zé)從高速暫存存儲器中讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)。
圖4是本發(fā)明實施例提供的向量四則運算裝置執(zhí)行任一向量加法指令(va)的流程圖,如圖4所示,執(zhí)行向量加法指令(va)的過程包括:
s1,取指模塊取出該條向量加法指令(va),并將該指令送往譯碼模塊。
s2,譯碼模塊對指令譯碼,并將向量加法指令(va)送往指令隊列。
s3,在指令隊列中,該向量加法指令(va)需要從標(biāo)量寄存器堆中獲取指令中四個操作域所對應(yīng)的標(biāo)量寄存器里的數(shù)據(jù),包括向量vin0的起始地址、向量vin0的長度、向量vin1的起始地址、向量vin1的長度。
s4,在取得需要的標(biāo)量數(shù)據(jù)后,該指令被送往依賴關(guān)系處理單元。依賴關(guān)系處理單元分析該指令與前面的尚未執(zhí)行結(jié)束的指令在數(shù)據(jù)上是否存在依賴關(guān)系。該條指令需要在存儲隊列中等待至其與前面的未執(zhí)行結(jié)束的指令在數(shù)據(jù)上不再存在依賴關(guān)系為止。
s5:依賴關(guān)系不存在后,該條向量加法指令(va)被送往向量四則運算單元。向量四則運算單元根據(jù)所需數(shù)據(jù)的地址和長度從數(shù)據(jù)暫存器中取出需要的向量,然后在向量四則運算單元中完成向量加法運算。
s6,運算完成后,將結(jié)果寫回至高速暫存存儲器的指定地址,同時提交重排序緩存中的該向量四則指令。
圖5為本發(fā)明實施例提供的向量四則運算單元的結(jié)構(gòu)示意圖,如圖5所示,向量四則運算單元內(nèi)包含向量四則運算單元等。并且,向量四則運算單元為多流水級結(jié)構(gòu),
其中,向量加法部件和向量減法部件處于流水級1,向量四則乘法部件和向量四則除法部件處于流水級2。這些單元處于不同的流水級,當(dāng)連續(xù)串行的多條向量四則運算指令的先后次序與相應(yīng)單元所在流水級順序一致時,可以更加高效地實現(xiàn)這一連串向量四則運算指令所要求的操作。
以上所述的具體實施例,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。