有哪些好用的開源並行線性矩陣求解器?
01-16
在本人自己編寫的非線性固體有限元程序里,(理所當然)最耗時的部分是線性矩陣求解。我所使用的線性矩陣求解器是開源的串列直接求解器。想請教有經驗的人士推薦一款易用的、開源的、並行求解器,這樣就可以大大提升程序運行的速度了。我所知道的只有MUMPS,不知道各位有沒有用過,感覺如何?
補充說明:1. 程序目前是純粹串列的,我正在著手並行化;
2. 我將會使用的環境既包括超算,也包括個人電腦。作為一個獨立的固體求解器,我目前研究的大部分算例都可以在個人電腦上完成。將來會與一個已經開發好的流體求解器耦合起來計算一些複雜、有真實應用背景的程序,屆時是要使用超算的。超算是IBM BLUE GENE,功能很強大,但我目前經驗太少無法估計以後會用到的核數,應該不至於要好幾千;3. 我選擇使用直接求解器而不是GMRES是因為比較了兩者,發現直接求解器快很多。而且我看到Abaqus也是使用multifrontal direct solver所以選擇了直接求解器,這方面的數學理論真的是一竅不通;4. 矩陣是對稱矩陣。
強答一發,拋磚引玉;並行計算方面真心小白,求大牛指教一般比較流行Linear Algebra計算包是The Trilinos Project 和PETSc: Home Page;前者來自Sandia國家實驗室後者大概是Argonne國家實驗室;兩者都是美國能源部的項目;當然能源部為了同一個目的投了兩個項目的原因不得而知;但我覺得就我們這些做計算力學的人來說並沒有本質區別,只是從自己所用的編程語言或者架構乃至計算環境上來考慮用哪個包;一旦決定之後就只能一條道走到黑;我自己主要用的PETSc。
- 兩者都提供了一大堆線性代數求解器,包如其名,Portable Extensible Toolkit for Science Computing (PETSc)的求解器和其他模塊不如Trillions那麼多;我用的Direct Solver基本都是利用PETSc再調用的別的包;PETSc: Summary of Sparse Linear Solvers Available from PETSc 這裡列出了所有PETSc提供或者調用的linear solver,列表中可以發現PETSc調用了很多external package,包括題主提到的Mumps,連Matlab都不放過也要調用一下;Trillions相反不僅有linear solver,連Mesh的模塊都有
- 編程語言上PETSc聲稱提供了C,C++,Fortran乃至Python;Trillions似乎用了C++
- 目前的超算架構下,一般在計算節點內可以使用OpenMP以利用共享內存和GPU加速,Trillion和PETSc基本都聲稱支持;希望問題能砸出Hybrid並行計算的大牛交流一下
並行計算時候的主要問題是充分利用計算環境並且考慮自己的矩陣特性來調整Linear Solver
- MUMPS這類direct solver總會遇到內存問題,主要是因為稀疏矩陣求逆的結果可能是個密集矩陣,總而言之direct solver對於內存是有要求的,總會碰到限制,方程數目太多就必須選用Iterative Solver(Krylov)來求解,比如說GMRES,但是對於這類solver,必須要選用合適的pre-conditioner,這又是一個很大的課題;此外有些solver只能處理對稱矩陣,當然非線性問題的時候即使矩陣不對稱用這類求解器也不一定會導致不收斂,但也最好避免這類問題;
- 計算環境是指不同超算的架構和環境有所不同;比如計算節點內存有的特別肥碩,這時候就能更充分利用Direct Solver;再比如有些時候維護人員對於PETSc或者Trillion的支持力度不一樣(一般不至於)
題主的目的是一個通用固體有限元求解器;我覺得題主要估計會採用怎麼樣的計算環境:基於MPI的超算或者就僅僅在個人電腦用OpenMP;其次估計一下矩陣的特性,當然固體力學的話一般是對稱矩陣;再考慮一下求解問題的規模,多CPU(&>3000?這個數是我一個同事用MUMPS計算掛掉的情況,但和特定的離散形式和偏微分方程有關,真不一定)的情況下可能只能用Iterative solver。我覺得題主可以把這些選項開放給用戶,讓用戶自己調整。
題外話,題主在並行計算前劃分計算域給每個CPU用的是啥計算包?
推薦閱讀:
※為什麼伺服器linux下用openmp結果比單線程還要慢?
※哪些因素限制了ANSYS Fluent的並行核數?
※關於並行計算(單CPU多核並行,單節點多CPU並行,多節點並行)的效率快慢問題?
※Xeon E5 2xxx 核心數/價格 的問題?
※MPP 與 Hadoop是什麼關係?