始めに
ngspiceが遅いといわれ、代わりにXyceというのがmpiとか使って並列化されていて速いと聞き、興味本位でインストールしてみました。バイナリがRhel用しかないので、コンパイルが必要で、公式ドキュメントにまとまっているのですが、少々面倒だったので、メモを作成しました。
環境
- WSL2 : Ubuntu ( 20.04と24.04で試行 )
ビルド手順
https://xyce.sandia.gov/documentation-tutorials/building-guide/で手順を進めます。
(1) Download sources
https://xyce.sandia.gov/downloads/source-code/#
Xyce-.tar.gzファイルをダウンロードし、wslに転送、解凍。
https://github.com/trilinos/Trilinos/releases/tag/trilinos-release-12-12-1/
tar.gzファイルをダウンロードし、wslに転送、解凍。Trilinos12.12/を作成し、解凍したディレクトリごと移動します。
tar zxvf Xyce-7.10.0.tar.gz
tar zxvf Trilinos-trilinos-release-12-12-1.tar.gz
mkdir Trilinos12.12
mv Trilinos-trilinos-release-12-12-1 Trilinos12.12
(2) Apt
必要ライブラリをインストールします。
sudo apt update
sudo apt upgrade
sudo apt install \
gcc \
g++ \
gfortran \
make \
cmake \
bison \
flex \
libfl-dev \
libfftw3-dev \
libsuitesparse-dev \
libblas-dev \
liblapack-dev \
libtool
(3) Trilinosのビルドとインストール
Trilinos-trilinos-release-12-12-1に移動します。そこでビルドディレクトリを2つ作ります
cd Trilinos12.12/Trilinos-trilinos-release-12-12-1/
mkdir build_serial
mkdir build_parallel
(3-1) Serial版Trilinosのビルド
まずはserialのビルド。ビルドディレクトリ build_serialに入り、下のテキストでreconfigureを作成し、実行可能にして実行します。
cd build_serial
vi reconfigure # 下のファイルをコピペしてセーブ
chmod +x reconfigure
./recounfigure
#!/bin/sh
SRCDIR=$HOME/Trilinos12.12/Trilinos-trilinos-release-12-12-1
ARCHDIR=$HOME/XyceLibs/Serial
FLAGS="-O3 -fPIC"
cmake \
-G "Unix Makefiles" \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DCMAKE_Fortran_COMPILER=gfortran \
-DCMAKE_CXX_FLAGS="$FLAGS" \
-DCMAKE_C_FLAGS="$FLAGS" \
-DCMAKE_Fortran_FLAGS="$FLAGS" \
-DCMAKE_INSTALL_PREFIX=$ARCHDIR \
-DCMAKE_MAKE_PROGRAM="make" \
-DTrilinos_ENABLE_NOX=ON \
-DNOX_ENABLE_LOCA=ON \
-DTrilinos_ENABLE_EpetraExt=ON \
-DEpetraExt_BUILD_BTF=ON \
-DEpetraExt_BUILD_EXPERIMENTAL=ON \
-DEpetraExt_BUILD_GRAPH_REORDERINGS=ON \
-DTrilinos_ENABLE_TrilinosCouplings=ON \
-DTrilinos_ENABLE_Ifpack=ON \
-DTrilinos_ENABLE_AztecOO=ON \
-DTrilinos_ENABLE_Belos=ON \
-DTrilinos_ENABLE_Teuchos=ON \
-DTrilinos_ENABLE_COMPLEX_DOUBLE=ON \
-DTrilinos_ENABLE_Amesos=ON \
-DAmesos_ENABLE_KLU=ON \
-DTrilinos_ENABLE_Amesos2=ON \
-DAmesos2_ENABLE_KLU2=ON \
-DAmesos2_ENABLE_Basker=ON \
-DTrilinos_ENABLE_Sacado=ON \
-DTrilinos_ENABLE_Stokhos=ON \
-DTrilinos_ENABLE_Kokkos=ON \
-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES=OFF \
-DTrilinos_ENABLE_CXX11=ON \
-DTPL_ENABLE_AMD=ON \
-DAMD_LIBRARY_DIRS="/usr/lib" \
-DTPL_AMD_INCLUDE_DIRS="/usr/include/suitesparse" \
-DTPL_ENABLE_BLAS=ON \
-DTPL_ENABLE_LAPACK=ON \
$SRCDIR
あとはmakeとmake install。
make
make install
これでserial版ビルド終了。
(3-2) Parallel版Trilinosのビルド
Parallel版のビルド。ビルドディレクトリ build_parallelに入り、下のテキストでreconfigureを作成し、実行可能にして実行します。スクリプト以外serialと同一です。
cd build_parallel
vi reconfigure # 下のファイルをコピペしてセーブ
chmod +x reconfigure
./recounfigure
#!/bin/sh
SRCDIR=$HOME/Trilinos12.12/Trilinos-trilinos-release-12-12-1
ARCHDIR=$HOME/XyceLibs/Parallel
FLAGS="-O3 -fPIC"
cmake \
-G "Unix Makefiles" \
-DCMAKE_C_COMPILER=mpicc \
-DCMAKE_CXX_COMPILER=mpic++ \
-DCMAKE_Fortran_COMPILER=mpif77 \
-DCMAKE_CXX_FLAGS="$FLAGS" \
-DCMAKE_C_FLAGS="$FLAGS" \
-DCMAKE_Fortran_FLAGS="$FLAGS" \
-DCMAKE_INSTALL_PREFIX=$ARCHDIR \
-DCMAKE_MAKE_PROGRAM="make" \
-DTrilinos_ENABLE_NOX=ON \
-DNOX_ENABLE_LOCA=ON \
-DTrilinos_ENABLE_EpetraExt=ON \
-DEpetraExt_BUILD_BTF=ON \
-DEpetraExt_BUILD_EXPERIMENTAL=ON \
-DEpetraExt_BUILD_GRAPH_REORDERINGS=ON \
-DTrilinos_ENABLE_TrilinosCouplings=ON \
-DTrilinos_ENABLE_Ifpack=ON \
-DTrilinos_ENABLE_Isorropia=ON \
-DTrilinos_ENABLE_AztecOO=ON \
-DTrilinos_ENABLE_Belos=ON \
-DTrilinos_ENABLE_Teuchos=ON \
-DTrilinos_ENABLE_COMPLEX_DOUBLE=ON \
-DTrilinos_ENABLE_Amesos=ON \
-DAmesos_ENABLE_KLU=ON \
-DTrilinos_ENABLE_Amesos2=ON \
-DAmesos2_ENABLE_KLU2=ON \
-DAmesos2_ENABLE_Basker=ON \
-DTrilinos_ENABLE_Sacado=ON \
-DTrilinos_ENABLE_Stokhos=ON \
-DTrilinos_ENABLE_Kokkos=ON \
-DTrilinos_ENABLE_Zoltan=ON \
-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES=OFF \
-DTrilinos_ENABLE_CXX11=ON \
-DTPL_ENABLE_AMD=ON \
-DAMD_LIBRARY_DIRS="/usr/lib" \
-DTPL_AMD_INCLUDE_DIRS="/usr/include/suitesparse" \
-DTPL_ENABLE_BLAS=ON \
-DTPL_ENABLE_LAPACK=ON \
-DTPL_ENABLE_MPI=ON \
$SRCDIR
あとはmakeとmake install。
make
make install
これでparallel版ビルド終了。ここでホームディレクトリにXyceLibs/ デイレク鳥ができています。
(4) Xyceのビルドとインストール
Xyceのディレクトリに入ってbootstrapを実行します。configureの実行ファイルが作成されます。ビルドディレクトリを2つ作成します。
cd Xyce-7.10
./bootstrap
mkdir build_serial
mkdir build_parallel
(4-1) serial版のビルド
ビルドディレクトリに入りconfigureをします。
cd build_serial
../configure \
CXXFLAGS="-O3" \
ARCHDIR="$HOME/XyceLibs/Serial" \
CPPFLAGS="-I/usr/include/suitesparse" \
--enable-stokhos \
--enable-amesos2 \
--prefix=$HOME/XyceInstall/Serial
後はmakeとmake install
make
make install
(4-2) parallel版のビルド
ビルドディレクトリに入り、configureをします。
cd build_parallel
../configure \
CXXFLAGS="-O3" \
ARCHDIR="$HOME/XyceLibs/Parallel" \
CPPFLAGS="-I/usr/include/suitesparse" \
--enable-mpi \
CXX=mpicxx \
CC=mpicc \
F77=mpif77 \
--enable-stokhos \
--enable-amesos2 \
--prefix=$HOME/XyceInstall/Parallel
後はmakeとmake install
make
make install
これでビルドとインストールは終了です。
ホームにXyceInstallができているので、
SerialかParallelどちらか使う方にパスを通してください。
以下のどちらかを.bashrcに記載してください。
export PATH=$PATH:/home/youre_homename/XyceInstall/Serial/bin
export PATH=$PATH:/home/youre_homename/XyceInstall/Parallel/bin
テストしてみる
Xyce_regressionというのがあったので、流してみました。
https://github.com/Xyce/Xyce_Regression
基本How_To_Run_The_Tests.mdに書かれていることを実行します。
git clone https://github.com/Xyce/Xyce_Regression
Regression内に入り、実行ディレクトリを作り、その中で実行します。
(1) serial版の実行
cd Xyce_Regression
mkdir XyceTesting_serial
cd XyceTesting_serial
cmake -DCMAKE_PREFIX_PATH=/home/youre_homename/XyceInstall/Serial/bin ..
ctest -L nightly -j 8
-j 8の部分は環境に合わせて調整してください。
(2) parallel版の実行
cd Xyce_Regression
mkdir XyceTesting_parallel
cd XyceTesting_parallel
cmake -DCMAKE_PREFIX_PATH=/home/youre_homename/XyceInstall/Parallel/bin ..
ctest -L nightly -j 8
-j 8の部分は環境に合わせて調整してください。
なんかいくつかのテストでエラーがぼろぼろ出ます。
結構パスしているので、大丈夫と思いますが。。。
終わりに
一応Xyceのコンパイルまでやりました。テストについてはエラーが出るのが正しいのかどうか確認が必要となっています。わかったらまた更新します。