Loading
Draft: SXAT2ブランチを -DARCH=SXAT の分岐として統合 (#572 step 4)
Closes #572
概要
SXAT2 ブランチ(NEC SX-Aurora TSUBASA 向け最適化)を、-DARCH=SXAT のビルドでだけ有効になる形で master に移植した。
方針は !676 (merged)(-DARCH=FX64)と同じで、元の実装を最大限そのまま移している。サブルーチン名、変数名、ループ、指示行は SXAT2 ブランチのままで、コミットも SXAT2 ブランチの項目ごとに分けた。元の実装と違うのは、master 側の変更への追随と、下の「議論が必要な点」に挙げたものだけである。
NLC SBLAS の行列ベクトル積と、SSOR・BILU(0) 前処理のループ入れ替え版は、!SOLVER の MATRIXFORMAT=SBLAS(SXAT ビルドの既定)で選ばれる。NEC のライブラリを使う項目は、SXAT2 ブランチと同じ CMake 変数(USE_NLC_SBLAS、USE_HETERO_SOLVER、USE_VHCALL、BUILD_SHARED)で有効にする。
変更内容
| コミット | メッセージ | 要約 |
|---|---|---|
| 558d1736 | Preprocess the sources the SXAT tuning branches in | #ifdef を置く5ファイルを .F90 に改名(内容は無変更) |
| 5ed82bec | Add the NLC SBLAS matrix-vector product of SXAT for NDOF=3 | 行列を COO に持ち直して NLC SBLAS に渡す行列ベクトル積。ソルバの終了時に破棄する |
| 2ba5475d | Add the loop-exchanged SSOR preconditioner of SXAT for NDOF=3 | 多色順序付けとループ入れ替えによる SSOR 前処理 |
| d7670ef8 | Add the loop-exchanged BILU(0) preconditioner of SXAT for NDOF=3 | 同じ方式の BILU(0) 前処理 |
| 3e377e6c | Add the NEC compiler directives of SXAT to the heat film and radiation loops | 熱解析の !NEC$ 指示行 |
| 0dba68b2 | Add the NEC HeteroSolver direct solver of SXAT | 直接法 HeteroSolver(METHOD=HeteroSolver) |
| 59f7741e | Add the VHCall stiffness matrix assembly of SXAT | 剛性行列の生成を VHCall でベクトルホストに任せる経路と、そのための共有ライブラリ |
| cf7a0a96 | Buffer the binary result and VTK output on SXAT | バイナリ結果と BIN_VTK の書き出しのバッファリング |
| aeda8891 | Add the Aurora toolchain file and the link line of SXAT | ツールチェーンファイルとリンクフラグ |
| b7cdec75 | Show the VHCall and HeteroSolver options of SXAT in the build information | ビルド情報の表示 |
議論が必要な点
- 分岐のマクロと CMake 変数
- 分岐は
#ifdef HECMW_ARCH_SXATで行う。元の実装が使っていた__NEC__(コンパイラが自動で定義する)は、#572 の「環境から自動取得せず、ユーザが明示的に指定する」に合わせて使わない - NEC のライブラリを使う4項目は、元の実装と同じ個別の CMake 変数で有効にする。ARCH=SXAT 以外で指定すると configure が止まる
- 分岐は
- 注意点など
- 誤った結果になる箇所だけを直した。SBLAS に渡す対角ブロックの格納、非対称行列を SBLAS の対象から外すこと、バイナリ結果ファイルで文字列を書く前と結合結果の書き出しでバッファを吐き出すこと、の3点である
- SSOR・BILU の作業配列は、前処理の解放時に解放するようにした(元の実装は解放しない)
- 元の実装は、既存の適用ルーチンの OpenMP 指示行と前進代入にも変更を加えていた。SXAT ビルドでだけ効くように #ifdef で入れたので、OpenMP 指示行が2通りになる。既存側の句を変えるときは、SXAT 側も合わせる必要がある
- BILU(0) の順序
- master の BILU は、彩色と並べ替えを因子分解の前に行う。元の実装は逆で、自然順で因子分解してから因子を彩色する。元の実装の順序のまま移した
- 既存の setup に入れる差分を1行にとどめたので、ループ入れ替え版のときは、因子分解の前に行列を恒等順で1回余分にコピーする
- SXAT ビルドの SSOR は、1スレッドでも多色順序付けを行う
- ループ入れ替え版が、同じ色の行が互いに独立であることを前提にするためである。GENERIC の1スレッドとは反復回数が変わる
Edited by Kanato Kono