[0025] 稀疏行格式子矩陣:CSR(Compressed?Sparse?Row?Format)存儲格式的矩陣,會使用以下三個向量存儲矩陣的稀疏元素:行指針數(shù)組(rowPointer):存儲每一行的非零元素在values數(shù)組中的起始位置;列索引數(shù)組(columnIndices):存儲每個非零元素對應(yīng)的列索引;非零元素數(shù)組(nonZeroValues):按行順序存儲矩陣的非零元素。
[0026] 稀疏列格式子矩陣:CSC(Compressed?Sparse?Column?Format)存儲格式的矩陣,會使用以下三個向量存儲矩陣的稀疏元素:行索引數(shù)組(rowIndices):存儲每個非零元素所在的行索引;列指針數(shù)組(columnPointer):存儲每一列的非零元素在values數(shù)組中的起始位置;非零元素數(shù)組(nonZeroValues):按列順序存儲所有非零元素的值。
[0027] 大多數(shù)現(xiàn)有的GPU加速矩陣構(gòu)建方案,通常固定矩陣存儲格式(如COO、CSR、CSC),并且不進行動態(tài)調(diào)整。雖然某些技術(shù)可能會考慮選擇最佳格式,但它們通常在矩陣構(gòu)建之初就決定存儲格式,并且一旦選擇后就固定不變。且現(xiàn)有的GPU加速矩陣構(gòu)建大多依賴于GPU全程執(zhí)行計算任務(wù),CPU僅負(fù)責(zé)預(yù)處理或傳輸數(shù)據(jù),缺乏對任務(wù)劃分、格式選擇等細(xì)節(jié)的高效管理。很多方案忽略了CPU的調(diào)度和控制能力以及使用線程池來充分利用CPU的能力,單純依賴GPU的并行計算。
[0028] 本發(fā)明的目的是提供一種提高CAE仿真軟件計算處理效率的方法,該方法采用基于CPU?GPU協(xié)同工作的混合加速平臺,并結(jié)合對應(yīng)的CPU?GPU優(yōu)化調(diào)度算法,顯著提升矩陣構(gòu)建過程中的速度。通過優(yōu)化矩陣存儲格式的動態(tài)調(diào)整機制、任務(wù)劃分與調(diào)度策略,有效縮短仿真周期,從而提高仿真軟件的整體性能、實用性和市場競爭力。
[0029] 圖1示意性示出了根據(jù)本發(fā)明實施例的仿真軟件的求解方法的流程圖,如圖1所示,本發(fā)明的實施例提供了一種仿真軟件的求解方法,包括:調(diào)用中央處理器預(yù)處理仿真矩陣,得到坐標(biāo)格式子矩陣;坐標(biāo)格式子矩陣通過行索引數(shù)組、列索引數(shù)組和非零元素值數(shù)組表征;根據(jù)坐標(biāo)格式子矩陣的分布特征,調(diào)用中央處理器重新確定坐標(biāo)格式子矩陣的存儲格式,得到壓縮子矩陣的傳輸數(shù)據(jù);壓縮子矩陣至少包括坐標(biāo)格式子矩陣、稀疏行格式子矩陣和稀疏列格式子矩陣的其中之一;調(diào)用圖形處理器對壓縮子矩陣完成仿真求解。
[0030] 在該實施例中,編程模型采用支持CPU?GPU協(xié)同工作的CUDA。
[0031] 在該實施例中,圖2示意性示出了根據(jù)本公開實施例的CPU?GPU協(xié)同工作的流程圖,如圖2所示,CPU負(fù)責(zé)如下操作:主線程劃分矩陣并索引標(biāo)記、將子矩陣的任務(wù)分配給線程池中的子線程并存儲為COO格式;當(dāng)非零元素密度超過20%,動態(tài)調(diào)整存儲格式;行方向更為稠密則選擇CSR格式;列方向更為稠密則選擇CSC格式;在確認(rèn)存儲格式后,將數(shù)據(jù)傳輸至GPU;由GPU進行后續(xù)的并行計算。
[0032] 通過本發(fā)明的實施例,通過充分利用CPU的多核性能根據(jù)不同的矩陣特性動態(tài)調(diào)整存儲格式,確保始終使用最優(yōu)的存儲方式;通過GPU的并行計算能力提高仿真求解的速度。該動態(tài)存儲格式調(diào)整機制結(jié)合了CPU的邏輯處理能力和GPU的并行計算能力,不僅顯著提高了矩陣構(gòu)建的計算效率,還有效避免了在不適合的存儲格式下進行計算,從而優(yōu)化了計算和存儲的資源利用,大幅度減少仿真任務(wù)的計算機求解時間,同時保持仿真結(jié)果的精度和可靠性,提升了整體的處理性能。
[0033] 在上述實施例的基礎(chǔ)上,調(diào)用中央處理器預(yù)處理仿真矩陣,得到坐標(biāo)格式子矩陣,包括:調(diào)用中央處理器的主線程將仿真矩陣劃分為子矩陣并進行索引標(biāo)記;將子矩陣分配至中央處理器線程池中的子線程以供將子矩陣存儲為坐標(biāo)格式子矩陣。
[0034] 在該實施例中,CPU采用線程池,主線程負(fù)責(zé)將整個矩陣劃分為多個較小的塊并進行索引標(biāo)記,每個塊可以獨立處理。主線程將任務(wù)分配給線程池中的子線程進行處理。每個子線程會并行執(zhí)行接下來的處理流程。
[0035] 通過本發(fā)明的實施例,在矩陣構(gòu)建的初始階段,將仿真矩陣劃分為子矩陣,并通過索引標(biāo)記進行組織,然后CPU使用COO格式存儲矩陣,COO格式子矩陣易于理解和操作,為有助于降低矩陣處理的復(fù)雜度,提高后續(xù)處理的效率。
[0036] 在上述實施例的基礎(chǔ)上,根據(jù)坐標(biāo)格式子矩陣的分布特征,調(diào)用中央處理器重新確定坐標(biāo)格式子矩陣的存儲格式,得到壓縮子矩陣的傳輸數(shù)據(jù),包括:判斷坐標(biāo)格式子矩陣的稠密度是否大于預(yù)設(shè)閾值;其中,坐標(biāo)格式子矩陣的稠密度通過非零元素與元素總數(shù)的比值確認(rèn);若坐標(biāo)格式子矩陣的稠密度大于預(yù)設(shè)閾值,則判斷坐標(biāo)格式子矩陣的稠密類型;