#author("2021-02-18T15:00:18+09:00","default:opencaewikistaff","opencaewikistaff")
* 2:SX-Aurora TSUBASA 上に、専用 Calculix (CCX) を構築するまでのビルド手順 【SXAT-CCXbuild1】[#i09686fb]
【[[AboutNecSXAT]] に戻る】【1:[[SXAT-Setup1]] に戻る】【3:[[SXAT-PrePoMax1]] に進む】【4:[[SXAT-PrePoMax2]] に進む】
汎用3次元構造解析ツール「Calculix」は、Windows や Linux用に、ビルドされたバイナリプログラムも公開されています。しかし、SXAT の高速ベクトル演算を活用するためには、独自の手順によってビルドすることが必要です。この手順は非常に複雑な手順と高度な技術が必要となりますが、ここでは「ISCPC の宇野様」が開発された「CalculiX-Builder」を用いて、簡単に SXAT 専用の CCX をビルドを実現する手順を試してみます。
「ISCSP」の情報 ⇒ https://www.iscpc.jp/ ~
「CalculiX-Builder」 ⇒ https://github.com/ISCPC/CalculiX-Builder
なお「CalculiX-Builder」は、SXAT において高速ベクトル演算に対応しますが、通常の Linux-PC( Ubuntu / CentOS ) において、解析結果を ParaView で可視化可能にする「ExodusII出力」、インテルが開発した高速な直接法ソルバーの対応「IntelMKL(PARDISO)」の対応も可能です。詳しくは上記のサイトをご覧ください。
** IntelMKL-Pardiso を導入する [#y209571c]
以下の公式サイトの手順を元に、最新版を導入します。なお以下の実行では、資料の通り sudo を用いて行います。(利用者パスワードを入力します)~
https://software.intel.com/content/www/us/en/develop/articles/installing-intel-free-libs-and-python-yum-repo.html
まず以下のコマンドでリポジトリを追加します。成功すると最後に「repo saved to /etc/yum.repos.d/intel-mkl.repo」と出力されます。
$ sudo yum-config-manager --add-repo https://yum.repos.intel.com/mkl/setup/intel-mkl.repo
次にインストールで用いるGPGキーを設定します。成功するとエラーがでません。
$ sudo rpm --import https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
上記の公式サイトで、Intel-MKL の最新版が「2020.0-088」となっているので、これをインストールします。確認には y で進めて、インストール容量 2.5G に対して y で進めます。
$ sudo yum install intel-mkl-2020.0-088
暫く待って、エラー無く「完了しました!」で終わり「ls -l /opt/intel」で内容が確認できれば成功です。
** CentOS の追加パッケージを導入する [#pfb0244d]
専用 Calculix (CCX) を構築するために必要な、追加パッケージを導入します。導入では y で進めて「完了しました!」で成功です。
$ sudo yum install epel-release atlas-devel lapack-devel blas-devel (基盤となる数値計算ライブラリの追加)~
$ sudo yum install exodusii exodusii-devel (Exodus出力に必要なライブラリ)
** CalculiX-Builder を入手する [#h21524a5]
公式サイト https://github.com/ISCPC/CalculiX-Builder に接続し、README.mdを読んで、構築手順などを確認します。ホームディレクトリで一般ユーザーとして作業を行うので、cd ~ しておきます。次のコマンドを実行します。ホームディレクトリに CalculiX-Builder ができます。
$ git clone https://github.com/ISCPC/CalculiX-Builder
次に submodule ソースを入手するために、以下のコマンドを実行します。
$ cd ~/CalculiX-Builder/ ~
$ git submodule update --init --recursive (少し待って「Submodule path 'lib/calculix-adapter'」と表示されたら成功です。
** 専用 Calculix (CCX) をビルドする [#q320a230]
以下の説明は自分の好みの設定ですので、状況に応じて各自で読み替えてください。まず CCX を作業用ディレクトリ CCXwork を、「$ mkdir ~/CCXwork」としてホームディレクトリに作ります。このディレクトリに移動し「$ cd ~/CCXwork」、ツールを配置するディレクトリ system を作ります「$ mkdir system」。
さらにこの中に必要なディレクトリを作っておきます。「$ cd system ⇒ $ mkdir bin ve ⇒ $ cd ve ⇒ $ mkdir lib」
次に、ビルドの条件を設定するので、vi などのエディタで ~/CalculiX-Builder にある Makefile を編集します。ここでは、「インストール先:~/CCXwork/system」「Exodus出力:有効」「IntelMKL利用:有効(ただしStaticLinkは無効)」「SX-Aurora VE利用:有効(ただしAVEOは無効)」「preCICE利用:なし」として、以下のように設定します。
$ cd ~/CalculiX-Builder ⇒ $ vi Makefile
14 PREFIX = $(HOME)/CCXwork/system ~
19 WITH_EXODUSII=true ~
24 WITH_MKL=true ~
25 WITH_MKL_STATIC=false ~
30 WITH_AURORA=true ~
31 WITH_AURORA_AVEO=false ~
32 AVEOPATH=$(PREFIX) ~
37 WITH_PRECICE=false
実際にビルドするときには、複数コアを利用すると効果的ですので、計算機の物理コアを「cat /proc/cpuinfo | grep "cpu cores"」で確認します。ここでは8コアでした。
そこで「make NPROCS=8」として、ビルドを実行します。エラー無く最後に「`/home/dalab/CalculiX-Builder/ccx/velib/libccx' から出ます」と表示され、約2分ぐらいで完了します。
ビルドしたディレクトリ内の「src」にできるので、「$ ls -l src/ccx_2.16_MT」で、専用CCXとして「src/ccx_2.16_MT(size:6804288)」が出来ています。
ビルドした結果「ccx_2.16_MT・libccx.so」を配置するために、「$ make install」を実行します。エラー無く終了して成功です。2つのファイルがインストールされたので、以下で確認しておきます。
$ ls -l ~/CCXwork/system/bin/ccx_2.16_MT ~
$ ls -l ~/CCXwork/system/ve/lib/libccx.so ~
ここで、SXAT 上で CCX を利用するために、VE用の設定を以下で行うので、2行分を ~/.bashrc に追加しておきます。
$ export PATH=/opt/nec/ve/bin:${PATH} ~
$ source /opt/nec/ve/nlc/2.1.0/bin/nlcvars.sh ~
** CCXの動作に必要な環境変数の設定 [#k0e70741]
起動の確認をするために、以下の内容を「$ vi ~/.bashrc」の最後に追記して、「$ source ~/.bashrc」で有効にしておきます。
IntelMKLのライブラリのパス設定 / CCXの実行形式のパス / libccxライブラリのパス / OpenMPの並列処理数(現段階では1)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/lib/intel64:/opt/intel/mkl/lib/intel64 ~
export PATH=$PATH:$HOME/CCXwork/system/bin ~
export CCX_VEO_LIBRARY_PATH=$HOME/CCXwork/system/ve/lib/libccx.so ~
export OMP_NUM_THREADS=1 ~
作業ディレクトリ ~/CCXwork 内で、「$ ccx_2.16_MT」で実行してみます。エラーなく「Usage: CalculiX.exe -i jobname」と表示されたら、取り合えずのビルド成功です。
** テストデータを用いてソルバーを検証する [#m51b25fa]
ここでは約40万要素の片持梁で弾性解析を行うテストデータ「test.inp」を用いて、各ソルバーの動作を検証します。まず次のリンクから「&ref(test.inp);」をダウンロードしてください。
検証用ディレクトリ Ex1 を CCXwork 内に作り、この中にテストデータ test.inp を置きます。ビルドした CCX の解析として、Ex1 内で「$ ccx_2.16_MT test(拡張子 .inp は外す)」として実行します。表示されるログの途中で「Using upto 1 cpu・spooles」となり、標準のSpoolesソルバーで1cpu(1core)で実行しています。エラーなく「Job finished」と表示されたら終了で、全体の解析時間は「27.162565 [sec]」となっています。解析によって多数のファイルが作られており、「test.frd」が CCX の独自の解析結果ファイルになります。
次に Exodus出力 を調べるので、テストデータ以外を削除して、「$ ccx_2.16_MT test -o exo(オプションは最後に指定する)」で実行します。この実行では、ParaView で可視化可能な「test.exo」が作られているのが分かります。
export OMP_NUM_THREADS=8 ~
先の確認でこのハードは8物理コアでしたので、上記のように .bashrc の「OMP_NUM_THREADS=8」に変更し、source で有効にしてから、OpenMP による共有メモリ並列処理で解析してみます。実行方法は同じです。今度はログの途中で「8cpu」と表示されており、解析時間は「13.043153 [sec]」となりました。ちなみに4に設定すると、解析時間は「14.998130 [sec]」となり、8物理コア設定で利用することにします。
今回の SXAT 専用の CCX の性能を調べたいと思います。まずは Intel-MKL の Pardiso ソルバーの効果を調べるので、テストデータ test.inp をエディタで開いて、「*Static,SOLVER=SPOOLES」の行の先頭に「*」を入れてコメントアウトし、逆に「*Static,SOLVER=PARDISO」の行のコメントを外し有効にします。これで先と同じ方法で解析を実行します。ログの途中で「pardiso solver」と表示され、解析時間は「4.303011 [sec]」となり高速化されています。
さらに SXAT の VE(ベクトルエンジン)を利用するソルバーを利用するために、「*Static,SOLVER=SX-AUR_HS」の設定を有効にします。ログの途中で「Aurora Heterosolver」と表示され、解析時間は「3.476834 [sec]」となり高速化されています。ベクトル演算の高性能が実感できました。
最後に SXAT の VE(ベクトルエンジン)を利用する反復法ソルバーを利用するために、「*Static,SOLVER=SX-AUR_SCALING」の設定を有効にします。ログの途中で「iterative solver on VE」と表示され、解析時間は「3.092080 [sec]」となりさらに高速化されています。反復法によるベクトル演算の高性能が実感できました。
今回は40万要素の比較的小さな検証用例題でしたが、さらに大規模解析や弾塑性解析の増分計算の場合には、ソルバーの性能向上が明確になることが期待できます。
【[[AboutNecSXAT]] に戻る】【1:[[SXAT-Setup1]] に戻る】【3:[[SXAT-PrePoMax1]] に進む】【4:[[SXAT-PrePoMax2]] に進む】