本發(fā)明屬于邊緣計(jì)算,具體為一種基于國(guó)產(chǎn)智能芯片的稀疏矩陣向量乘法(spmv)的優(yōu)化方法。
背景技術(shù):
1、稀疏矩陣向量乘(sparse?matrix-vector?multiplication,spmv)是一種通用且關(guān)鍵的計(jì)算,它在人工智能領(lǐng)域、圖計(jì)算領(lǐng)域、數(shù)據(jù)挖掘領(lǐng)域等都有重要的支撐作用。在人工智能領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)、深度神經(jīng)網(wǎng)絡(luò)等機(jī)器學(xué)習(xí)算法中涉及大量的spmv計(jì)算,提高spmv的計(jì)算效率可以有效地縮短模型訓(xùn)練時(shí)間,減少時(shí)間成本。現(xiàn)有的智能芯片可以很好地為spmv算法提供并行計(jì)算的基礎(chǔ),因此,在現(xiàn)有的智能芯片上對(duì)spmv算法進(jìn)行并行優(yōu)化具有重要意義。
2、國(guó)產(chǎn)自主智能芯片,擁有完整的技術(shù)鏈。然而,目前針對(duì)國(guó)產(chǎn)智能芯片平臺(tái)的數(shù)學(xué)庫(kù)優(yōu)化主要集中在基礎(chǔ)線性代數(shù)子程序庫(kù)(blas)和自動(dòng)調(diào)優(yōu)線性代數(shù)軟件庫(kù)(atla)。作為新興的高性能計(jì)算處理器廠商,國(guó)產(chǎn)智能芯片尚未發(fā)布定制的函數(shù)庫(kù),但相關(guān)研究已在進(jìn)行中。盡管目前還不能通過(guò)調(diào)用專門針對(duì)硬件特性的高性能計(jì)算庫(kù)來(lái)優(yōu)化國(guó)產(chǎn)智能芯片,但開發(fā)者可以利用其開源的向量指令集,通過(guò)重寫高級(jí)語(yǔ)言程序,將標(biāo)量計(jì)算轉(zhuǎn)化為效率更高的向量指令,從而顯著提升計(jì)算性能。
3、但是,單純通過(guò)改寫為指令的方式并不一定能比先對(duì)高級(jí)語(yǔ)言程序進(jìn)行算法優(yōu)化,再將標(biāo)量計(jì)算部分轉(zhuǎn)換為向量指令的二級(jí)優(yōu)化方式表現(xiàn)更好。
技術(shù)實(shí)現(xiàn)思路
1、為了解決上述問(wèn)題,本發(fā)明提出了一種國(guó)產(chǎn)智能芯片的稀疏矩陣向量乘法優(yōu)化方法,對(duì)算法的存儲(chǔ)策略和并行計(jì)算策略進(jìn)行了改進(jìn),同時(shí)利用國(guó)產(chǎn)智能芯片的硬件特性有效利用了其向量指令集對(duì)算法進(jìn)一步地進(jìn)行了優(yōu)化。
2、本方法分技術(shù)方案包括以下幾個(gè)步驟:
3、本發(fā)明所述存儲(chǔ)策略優(yōu)化包含以下幾個(gè)步驟:
4、首先,獲取內(nèi)存中的稀疏矩陣,對(duì)獲取得到的稀疏矩陣進(jìn)行分塊。
5、通過(guò)用處理器向量指令支持的位寬除以稀疏矩陣中的數(shù)值類型的長(zhǎng)度得到所述稀疏矩陣分塊的分塊高度。
6、對(duì)于分塊寬度本發(fā)明考慮矩陣中的非零元素選擇合適的分塊寬度。首先,隨機(jī)初始化分塊寬度x,需要獲取國(guó)產(chǎn)智能芯片的向量指令長(zhǎng)度,如果塊寬度大于國(guó)產(chǎn)智能芯片的向量指令長(zhǎng)度,分塊寬度x調(diào)整為每行非零元素的平均個(gè)數(shù)。然后獲取操作系統(tǒng)的緩存行大小以及單指令多數(shù)據(jù)(simd)寄存器寬度,如果x大于緩存行大小且x為偶數(shù),為了適應(yīng)更大的稀疏矩陣,將分塊寬度左移一位,為了符合數(shù)據(jù)對(duì)齊避免額外訪存,如果x大于緩存行大小且奇數(shù)則先對(duì)x自增1再左移一位。如果x小于緩存行大小且大于單指令多數(shù)據(jù)(simd)寄存器寬度,則將x向下對(duì)齊單指令多數(shù)據(jù)(simd)寄存器寬度。如果x小于緩存行大小且小于單指令多數(shù)據(jù)simd寄存器寬度則將x向上取整到十?dāng)?shù)。
7、讀取稀疏矩陣的行偏移數(shù)組、列數(shù)組和值數(shù)組。
8、依據(jù)讀取得到的行偏移數(shù)組、列數(shù)組和值數(shù)組在稀疏矩陣結(jié)構(gòu)體中對(duì)行偏移數(shù)組、列數(shù)組和值數(shù)組對(duì)齊存儲(chǔ)得到稀疏矩陣的三維表示。
9、并對(duì)得到的稀疏矩陣的三維表示重載加法和減法的運(yùn)算符。
10、本發(fā)明并行計(jì)算策略優(yōu)化包含以下幾個(gè)步驟:
11、在確定分塊大小后,每個(gè)分塊就是一個(gè)計(jì)算任務(wù),確定程序整體的計(jì)算任務(wù)個(gè)數(shù),基于重載后的稀疏矩陣的三維表示,采取將計(jì)算任務(wù)均分給每個(gè)線程的方式來(lái)實(shí)現(xiàn)多線程負(fù)載均衡。
12、在使用多線程計(jì)算的同時(shí),使用國(guó)產(chǎn)智能芯片中的系統(tǒng)監(jiān)控工具例如vmstat和top指令確認(rèn)瓶頸類型,然后使用國(guó)產(chǎn)智能芯片中的性能分析工具例如perf指令分析進(jìn)程中該瓶頸類型的spmv熱點(diǎn)函數(shù),使用國(guó)產(chǎn)智能芯片中的匯編級(jí)別性能分析指令如perfannotate指令得到匯編級(jí)別的spmv熱點(diǎn)函數(shù)。
13、采用匯編融合乘加的向量指令替換匯編級(jí)別的spmv熱點(diǎn)函數(shù)中的乘法和加法并對(duì)匯編load指令重載實(shí)現(xiàn)加載矩陣數(shù)據(jù)的優(yōu)化。
14、最后,對(duì)每個(gè)線程的計(jì)算任務(wù)進(jìn)行整合,完成spmv的計(jì)算。
15、本發(fā)明有益效果:
16、針對(duì)國(guó)產(chǎn)智能芯片通過(guò)存儲(chǔ)策略優(yōu)化,并行計(jì)算框架優(yōu)化以及向量指令優(yōu)化等方式實(shí)現(xiàn)了稀疏矩陣向量乘法平均推理時(shí)間的優(yōu)化。通過(guò)針對(duì)國(guó)產(chǎn)智能芯片硬件特性提升了稀疏矩陣向量乘法在高稀疏度情況下從萬(wàn)級(jí)規(guī)模到百億級(jí)規(guī)模的計(jì)算性能。并對(duì)比了在使用稀疏矩陣向量乘法替代yolov5卷積算子時(shí)的推理性能,在推理不同數(shù)量級(jí)電力線圖片時(shí)均擁有較大的推理性能的提升。
1.一種國(guó)產(chǎn)智能芯片的稀疏矩陣向量乘法優(yōu)化方法,其特征在于,包括以下步驟:
2.根據(jù)權(quán)利要求1所述的國(guó)產(chǎn)智能芯片的稀疏矩陣向量乘法優(yōu)化方法,其特征在于,對(duì)獲取得到的稀疏矩陣進(jìn)行分塊,所述分塊的高度和寬度具體如下:
3.根據(jù)權(quán)利要求2所述的國(guó)產(chǎn)智能芯片的稀疏矩陣向量乘法優(yōu)化方法,其特征在于,所述步驟s4具體實(shí)現(xiàn)過(guò)程如下:
4.根據(jù)權(quán)利要求3所述的國(guó)產(chǎn)智能芯片的稀疏矩陣向量乘法優(yōu)化方法,其特征在于,所述匯編融合乘加的向量指令具體實(shí)現(xiàn)過(guò)程如下:
5.根據(jù)權(quán)利要求3所述的國(guó)產(chǎn)智能芯片的稀疏矩陣向量乘法優(yōu)化方法,其特征在于,所述對(duì)匯編load指令重載具體實(shí)現(xiàn)過(guò)程如下: