本發(fā)明涉及計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域,具體來說涉及計(jì)算指令擴(kuò)展以及計(jì)算機(jī)硬件加速領(lǐng)域,更具體地說,涉及一種基于risc-v擴(kuò)展指令的矩陣及向量運(yùn)算裝置。
背景技術(shù):
1、隨著人工智能、大數(shù)據(jù)和云計(jì)算等技術(shù)的快速發(fā)展,矩陣運(yùn)算作為這些領(lǐng)域的核心計(jì)算任務(wù),其性能對(duì)于整體系統(tǒng)的性能有著至關(guān)重要的影響。傳統(tǒng)的處理器架構(gòu)(如x86和arm)雖然具有廣泛的應(yīng)用和成熟的生態(tài),但在處理大規(guī)模矩陣運(yùn)算時(shí),其性能往往受到限制。因此,研究新型的處理器架構(gòu),特別是針對(duì)矩陣運(yùn)算進(jìn)行優(yōu)化的處理器架構(gòu),成為了當(dāng)前的研究熱點(diǎn)。
2、risc-v作為一種新興的開源指令集架構(gòu)(isa),以其精簡、靈活和可擴(kuò)展的特性,為處理器設(shè)計(jì)提供了新的思路。特別是risc-v擴(kuò)展指令集,其作為risc-v架構(gòu)的重要組成部分,允許用戶根據(jù)特定應(yīng)用的需求來定制和優(yōu)化處理器功能,從而更好地滿足特定領(lǐng)域的計(jì)算需求。目前,risc-v已經(jīng)定義了多個(gè)擴(kuò)展指令集,包括虛擬擴(kuò)展、壓縮指令擴(kuò)展和向量擴(kuò)展等。這些擴(kuò)展指令集為risc-v架構(gòu)提供了豐富的功能集,使其能夠適應(yīng)不同的應(yīng)用場景。
3、其中,risc-v的向量擴(kuò)展指令集(v擴(kuò)展)為向量處理器提供了強(qiáng)大的支持。v擴(kuò)展引入了一組新的向量寄存器,支持向量加載、存儲(chǔ)、算術(shù)運(yùn)算、邏輯運(yùn)算等操作,能夠顯著提高向量處理器的性能。然而,對(duì)于矩陣運(yùn)算而言,雖然v擴(kuò)展提供了一定的支持,但其針對(duì)矩陣運(yùn)算的優(yōu)化并不充分。在處理矩陣運(yùn)算時(shí),需要執(zhí)行大量的通用指令,降低了計(jì)算效率。同時(shí),矩陣運(yùn)算通常涉及大量的數(shù)據(jù)訪問和傳輸,傳統(tǒng)的處理器架構(gòu)在數(shù)據(jù)訪問和傳輸方面存在瓶頸,限制了矩陣運(yùn)算的性能。并且,矩陣運(yùn)算具有高度并行的特性,需要處理器具備強(qiáng)大的并行計(jì)算能力。但傳統(tǒng)處理器架構(gòu)在并行計(jì)算能力方面存在不足的問題,難以滿足矩陣運(yùn)算的需求。
4、因此,現(xiàn)有的處理器架構(gòu)在并行計(jì)算能力方面存在不足,在執(zhí)行數(shù)據(jù)量大的矩陣運(yùn)算時(shí),處理器存在運(yùn)算性能急速降低的問題。
5、需要說明的是:本背景技術(shù)僅用于介紹本發(fā)明的相關(guān)信息,以便于幫助理解本發(fā)明的技術(shù)方案,但并不意味著相關(guān)信息必然是現(xiàn)有技術(shù)。在沒有證據(jù)表明相關(guān)信息已在本發(fā)明的申請(qǐng)日以前公開的情況下,相關(guān)信息不應(yīng)被視為現(xiàn)有技術(shù)。
技術(shù)實(shí)現(xiàn)思路
1、因此,本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺陷,提供一種基于risc-v擴(kuò)展指令的矩陣及向量運(yùn)算裝置。
2、本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的:
3、根據(jù)本發(fā)明的第一方面,提供一種基于risc-v擴(kuò)展指令的矩陣及向量運(yùn)算裝置,所述裝置包括相互連接的協(xié)處理器與主處理器,所述主處理器中配置有risc-v指令集和協(xié)處理器擴(kuò)展指令集,risc-v指令集包括與向量運(yùn)算任務(wù)相關(guān)的向量擴(kuò)展指令集,協(xié)處理器擴(kuò)展指令集包括與矩陣運(yùn)算任務(wù)相關(guān)的矩陣處理指令集;
4、所述主處理器被配置為:在執(zhí)行計(jì)算任務(wù)時(shí),將計(jì)算任務(wù)中與矩陣運(yùn)算任務(wù)相關(guān)的矩陣處理指令集或?qū)⒂?jì)算任務(wù)中與向量運(yùn)算任務(wù)相關(guān)的向量擴(kuò)展指令集發(fā)送給協(xié)處理器,以與協(xié)處理器并行執(zhí)行計(jì)算任務(wù);以及在協(xié)處理器執(zhí)行結(jié)束后,獲取協(xié)處理器的執(zhí)行結(jié)果,以執(zhí)行下一步的計(jì)算;
5、所述協(xié)處理器被配置為:根據(jù)發(fā)送來的所述矩陣擴(kuò)展指令集執(zhí)行主處理器卸載下的矩陣運(yùn)算任務(wù),得到矩陣運(yùn)算任務(wù)的執(zhí)行結(jié)果;或者根據(jù)發(fā)送來的所述向量擴(kuò)展指令集執(zhí)行主處理器卸載下的向量運(yùn)算任務(wù),得到向量運(yùn)算任務(wù)的執(zhí)行結(jié)果。
6、在本發(fā)明的一些實(shí)施例中,所述協(xié)處理器包括計(jì)算陣列,所述協(xié)處理器擴(kuò)展指令集還包括用于指示計(jì)算陣列執(zhí)行矩陣運(yùn)算任務(wù)的矩陣模式切換指令和用于指示計(jì)算陣列執(zhí)行向量運(yùn)算任務(wù)的向量模式切換指令,所述計(jì)算陣列被配置為:
7、在接收到通過主處理器發(fā)送來的所述矩陣模式切換指令時(shí),根據(jù)所述矩陣處理指令集執(zhí)行所述矩陣運(yùn)算任務(wù),得到矩陣運(yùn)算任務(wù)的執(zhí)行結(jié)果;
8、在接收到通過主處理器發(fā)送來的所述向量模式切換指令時(shí),根據(jù)所述向量擴(kuò)展指令集執(zhí)行所述向量運(yùn)算任務(wù),得到向量運(yùn)算任務(wù)的執(zhí)行結(jié)果。
9、在本發(fā)明的一些實(shí)施例中,所述協(xié)處理器擴(kuò)展指令集包括用于加載矩陣或向量到協(xié)處理器的指定區(qū)域的第一加載指令和用于加載矩陣或向量到協(xié)處理器的指定區(qū)域的第二加載指令;
10、所述協(xié)處理器包括:
11、指令調(diào)度模塊,用于接收主處理器發(fā)送來的所述第一加載指令和所述第二加載指令,將所述第一加載指令和所述第二加載指令發(fā)送給矩陣向量訪存流水線;
12、矩陣向量訪存流水線模塊,用于根據(jù)所述第一加載指令和所述第二加載指令將矩陣運(yùn)算任務(wù)中參與相乘的兩個(gè)矩陣加載到矩陣向量緩存區(qū)模塊中,或者根據(jù)所述第一加載指令和所述第二加載指令將參與向量運(yùn)算任務(wù)的兩個(gè)向量加載到矩陣向量緩存區(qū)模塊中;
13、矩陣向量緩存區(qū)模塊,用于緩存矩陣運(yùn)算任務(wù)中參與相乘的兩個(gè)矩陣、緩存參與向量運(yùn)算任務(wù)的兩個(gè)向量以及緩存矩陣運(yùn)算任務(wù)的執(zhí)行結(jié)果和向量運(yùn)算任務(wù)的執(zhí)行結(jié)果。
14、在本發(fā)明的一些實(shí)施例中,所述矩陣運(yùn)算任務(wù)為矩陣乘法運(yùn)算或矩陣乘加運(yùn)算,所述向量運(yùn)算任務(wù)為向量乘法運(yùn)算或向量加法運(yùn)算。
15、在本發(fā)明的一些實(shí)施例中,所述指令調(diào)度模塊包括指令緩存區(qū),用于緩存主處理器發(fā)送來的所述矩陣處理指令集和所述向量擴(kuò)展指令集,所述矩陣處理指令集包括:矩陣運(yùn)算指令,用于指示計(jì)算陣列根據(jù)矩陣運(yùn)算任務(wù)執(zhí)行矩陣間的運(yùn)算;矩陣執(zhí)行結(jié)果存儲(chǔ)指令,用于指示計(jì)算陣列將矩陣運(yùn)算任務(wù)的執(zhí)行結(jié)果存儲(chǔ)在矩陣向量緩存區(qū)模塊中;
16、協(xié)處理器擴(kuò)展指令集還包括:內(nèi)存訪存指令,用于指示協(xié)處理器將矩陣向量緩存區(qū)模塊中矩陣運(yùn)算任務(wù)的執(zhí)行結(jié)果和向量運(yùn)算任務(wù)的執(zhí)行結(jié)果存放到內(nèi)存中;直接訪存指令,用于在協(xié)處理器執(zhí)行完成當(dāng)前的矩陣運(yùn)算任務(wù)且沒有新的需執(zhí)行的矩陣運(yùn)算任務(wù)時(shí)或需執(zhí)行的向量運(yùn)算任務(wù)時(shí),指示主處理器從矩陣向量緩存區(qū)模塊中獲取矩陣運(yùn)算任務(wù)的執(zhí)行結(jié)果或獲取向量運(yùn)算任務(wù)的執(zhí)行結(jié)果。
17、在本發(fā)明的一些實(shí)施例中,所述矩陣向量緩存區(qū)模塊包括:第一數(shù)據(jù)緩存區(qū),用于緩存所述參與相乘的兩個(gè)矩陣中的一個(gè)矩陣或存儲(chǔ)所述兩個(gè)向量中的一個(gè)向量;第二數(shù)據(jù)緩存區(qū),用于緩存所述參與相乘的兩個(gè)矩陣中的另一個(gè)矩陣或存儲(chǔ)所述兩個(gè)向量中的另一個(gè)向量。
18、在本發(fā)明的一些實(shí)施例中,所述計(jì)算陣列為二維網(wǎng)格網(wǎng)絡(luò)結(jié)構(gòu),包括多行pe陣列,每行pe陣列包括多個(gè)pe單元,每個(gè)pe單元與其相鄰的pe單元連接;
19、當(dāng)計(jì)算陣列執(zhí)行的所述矩陣運(yùn)算任務(wù)為矩陣乘法運(yùn)算時(shí),計(jì)算陣列被配置為:獲取矩陣運(yùn)算任務(wù)中參與相乘的兩個(gè)矩陣中一個(gè)矩陣的每行元素與另一個(gè)矩陣的每列元素,并利用每行pe陣列中一個(gè)或多個(gè)pe單元進(jìn)行所述每行元素與所述每列元素間的乘法運(yùn)算,得到矩陣運(yùn)算任務(wù)的執(zhí)行結(jié)果中每行和每列的元素值。
20、在本發(fā)明的一些實(shí)施例中,所述向量擴(kuò)展指令集包括simd指令,當(dāng)所述計(jì)算陣列執(zhí)行的所述向量運(yùn)算任務(wù)為向量乘法運(yùn)算時(shí),所述每行pe陣列被配置為:獲取參與向量運(yùn)算任務(wù)的兩個(gè)向量,并根據(jù)simd指令進(jìn)行兩個(gè)向量間的乘法運(yùn)算,得到向量運(yùn)算任務(wù)的執(zhí)行結(jié)果;
21、當(dāng)所述計(jì)算陣列執(zhí)行所述向量運(yùn)算任務(wù)為向量加法運(yùn)算時(shí),所述每行pe陣列被配置為:獲取參與向量運(yùn)算任務(wù)的兩個(gè)向量,并根據(jù)simd指令進(jìn)行兩個(gè)向量間的乘法運(yùn)算,得到向量運(yùn)算任務(wù)的執(zhí)行結(jié)果;
22、其中,當(dāng)存在多個(gè)向量運(yùn)算任務(wù),利用多行pe陣列并行執(zhí)行多個(gè)向量運(yùn)算任務(wù),得到多個(gè)向量運(yùn)算任務(wù)各自的執(zhí)行結(jié)果。
23、在本發(fā)明的一些實(shí)施例中,當(dāng)計(jì)算陣列執(zhí)行所述矩陣運(yùn)算任務(wù)為矩陣乘加運(yùn)算時(shí),所述計(jì)算陣列被配置為:
24、獲取矩陣運(yùn)算任務(wù)中參與相加的矩陣、以及獲取將矩陣運(yùn)算任務(wù)中參與相乘的兩個(gè)矩陣中一個(gè)矩陣的每行元素與另一個(gè)矩陣的每列元素;
25、利用每行pe陣列中一個(gè)或多個(gè)pe單元進(jìn)行所述每行元素與所述每列元素間的乘法運(yùn)算,得到每行和每列的乘法結(jié)果,并將所述乘法結(jié)果與所述參與相加的矩陣的對(duì)應(yīng)行和對(duì)應(yīng)列的元素相加,得到矩陣運(yùn)算任務(wù)的執(zhí)行結(jié)果中對(duì)應(yīng)行和對(duì)應(yīng)列的元素值。
26、在本發(fā)明的一些實(shí)施例中,所述每個(gè)pe單元包括多個(gè)乘加組件,每個(gè)乘加組件包括多個(gè)乘法器和一個(gè)加法器,其中,所述乘加組件被配置為:
27、在執(zhí)行矩陣乘法運(yùn)算時(shí),利用多個(gè)乘法器和加法器進(jìn)行所述每行元素與所述每列元素間的乘法運(yùn)算,得到所述每行元素與所述每列元素間的乘法運(yùn)算結(jié)果,包括利用多個(gè)乘法器中每個(gè)乘法器對(duì)所述每行元素的一個(gè)元素與另一個(gè)矩陣的每列元素的一個(gè)元素進(jìn)行相乘,得到多個(gè)乘法器各自的相乘結(jié)果,利用加法器對(duì)多個(gè)乘法器各自的相乘結(jié)果進(jìn)行累加;
28、在執(zhí)行矩陣乘加運(yùn)算時(shí),利用多個(gè)乘法器和加法器進(jìn)行所述每行元素與所述每列元素間的乘法運(yùn)算,得到所述每行元素與所述每列元素間的乘法運(yùn)算結(jié)果,再利用加法器將所述乘法運(yùn)算結(jié)果與矩陣運(yùn)算任務(wù)中參與相加的矩陣中的對(duì)應(yīng)行和對(duì)應(yīng)列的元素進(jìn)行相加,得到矩陣運(yùn)算任務(wù)的執(zhí)行結(jié)果中對(duì)應(yīng)行和對(duì)應(yīng)列的元素值;
29、在執(zhí)行向量乘法運(yùn)算時(shí),利用乘法器對(duì)所述兩個(gè)向量中的同一元素位置的兩個(gè)元素進(jìn)行相乘,得到向量運(yùn)算任務(wù)的執(zhí)行結(jié)果中對(duì)應(yīng)位置的元素值;
30、在執(zhí)行向量加法運(yùn)算時(shí),利用加法器對(duì)所述兩個(gè)向量中的同一元素位置的兩個(gè)元素進(jìn)行相加,得到向量運(yùn)算任務(wù)的執(zhí)行結(jié)果中對(duì)應(yīng)位置的元素值。
31、與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
32、本發(fā)明的運(yùn)算裝置中,一方面,其主處理器將矩陣運(yùn)算任務(wù)和向量運(yùn)算任務(wù)卸載到協(xié)處理器去執(zhí)行,在協(xié)處理器處理運(yùn)算任務(wù)時(shí),主處理器可與協(xié)處理器并行執(zhí)行其他計(jì)算任務(wù),使得該運(yùn)算裝置架構(gòu)極大地提高了處理器的并行計(jì)算能力。另一方面,在更高并行計(jì)算能力的架構(gòu)下,設(shè)置單獨(dú)的協(xié)處理器來處理數(shù)據(jù)量大的矩陣和向量的運(yùn)算任務(wù),進(jìn)一步提高了矩陣運(yùn)算以及向量運(yùn)算的性能。并且,在矩陣運(yùn)算類型的計(jì)算結(jié)果中,針對(duì)通用矩陣乘法(general?matrix?multiplication,gemm),本發(fā)明的運(yùn)算裝置相比于沒有設(shè)置協(xié)處理器的主處理器有平均7.3倍的加速比。