-----1億是1千萬的10倍?-----
早期筆者使用矩量法求解線性方程組,在不使用快速多級方法,自由度達到3萬時,臺式機上已經無法求解出,8G的機器內存不夠用。對于滿秩矩陣的線性方程組,常規(guī)求解方法時間復雜度為n^3(n的3次方)。
對于自由度1千萬以下稀疏矩陣的求解,好的臺式機基本能應付,而當自由度達到1億的時候,簡單的將硬件乘以10倍完全不能滿足要求。因為計算的空間復雜度,時間復雜度并不是線性,通常是NlogN,N^2或者更高。當自由度達到1億時,不僅需要對硬件核心部件CPU,內存擴容,而且在磁盤陣列,I/O,并發(fā)計算,GPU,網絡,帶寬等方面都提出了更苛刻的要求。
在算法方面看,減少網格密度,在物理量梯度大的地方加密,無變化的地方將網格變稀疏,可以有效減少計算量;另外優(yōu)化求解算法本身,使其更加易于并行化計算。
從目前來看,計算機硬件計算能力的更新速度,跟不上指數(shù)級求解規(guī)模的增加速度。這也是量子力學發(fā)展的最大推動力!
-----------------
針對該問題,本文稍微展開一下。
這里的1億,主要指仿真中最終求解線性方程組的自由度個數(shù),就是剛度矩陣的規(guī)模,即在方程Kx=b中,K的規(guī)模為1億*1億的方陣。
從硬件角度看,性能瓶頸首先在內存。目前臺式機的內存普遍在64G以下。對于1千萬的稀疏矩陣,存儲勉強夠用,加上計算,一般都不夠用,在windows系統(tǒng)上如果內存不夠用,會啟用虛擬內存,也就是用頁面交換把硬盤當內存使用,頻繁讀寫磁盤,這時候性能會大大降低。而對于1億自由度的矩陣,可能剛度矩陣組裝都不夠用。對于一億自由度的矩陣,首先要保證內存能夠存儲,一般的方法是使用具有超大內存的工作站服務器。
內存問題解決后,再就是CPU性能。前面講過,通常矩陣計算的空間復雜度,時間復雜度并不是線性,而是NlogN,N^2或者更高。使用單核單線程,耗費的時間是條曲線上升趨勢。雖然稀疏矩陣采用了CSR等方法壓縮數(shù)據,但自由度的平方數(shù)據仍然還是海量數(shù)據。現(xiàn)在的CPU普遍多核多個邏輯線程。這也要求在進行迭代法求解方程組時,合理的進行矩陣分解,參考一篇文章入門仿真軟件性能優(yōu)化,采用分治的方法適應硬件的需求。
這里需要注意的是單核CPU的性能以及CPU的數(shù)量。根據實際情況進行分治!
在滿足了單機CPU運行之后,再就是集群分布式計算。采用多臺計算設備,比如刀片等專業(yè)服務器,超算等等,這里需要考量的是負載均衡和網絡帶寬,即保證單臺設備的利用率和整體進度保持一致。對于超大量的計算,最好能軟件實現(xiàn)動態(tài)規(guī)劃,對于頻繁交換數(shù)據的計算,要注意網絡帶寬的瓶頸。
再從軟件方面來看,根據筆者的研發(fā)經驗,相當一部分仿真的性能問題可以通過軟件以及改進算法解決。在前處理中,盡量避免軟件中高頻操作,大數(shù)據拷貝,大量細小數(shù)據操作等。如果必須有,對操作進行采樣性能評估,保證在可接受范圍內。在求解線性方程組前,提取矩陣特征,盡可能在最細度上根據矩陣特征,同時結合模型和業(yè)務的特點,選取最合適的求解方法。
其實目前對于數(shù)值計算方法而言,其算法都是公開透明的,商業(yè)軟件之間真正較量的是業(yè)務模型的準確性,算法的穩(wěn)定性以及效率。而這也恰恰是每個軟件可以改進和提升的地方
2004年,ANSYS解出了1億自由度的模型,2008年,ANSYS解出了10億自由度的模型。即使現(xiàn)在來看,我們認為自由度超過1千萬的模型是個大模型,所以1億自由度的模型仍然可以認為是超大模型,且只能在超大的服務器上運行,可以想象,隨著硬件的提升和算法的改進,實際應用中會有越來越多的超1億自由度的模型求解。
回到開始的問題,“一億”是“一千萬”的十倍嗎?顯然不是。
最后還是以業(yè)內的一句話作為結束語:
“如果你的仿真還沒有受到硬件的限制,那說明你的仿真還沒有入門”。
編輯:fqj
-
CAE技術
+關注
關注
0文章
9瀏覽量
6945 -
數(shù)值計算
+關注
關注
3文章
5瀏覽量
6898
發(fā)布評論請先 登錄
相關推薦
評論