目次

4.5 ビルド方法

4.5.1 Windows環境

WindowsでOpenTHFDをそのまま実行するときはビルド作業(コンパイル・リンク)は不要ですが、 ソースコードを修正してビルドする方法は以下の通りです。

開発環境のインストール

  1. Microsoft Visual Studio Community をインストールする
  2. CUDA Toolkit をインストールする(GPUを使用するとき)
  3. Microsoft MPI をインストールする(MPIを使用するとき)

ビルド方法
ターミナル(コマンドプロンプト)でビルド作業を行うには環境変数(PATH, INCLUDE, LIB) の設定が必要です。詳しくは[17]を参考にしてください。
ただし、スタート → Visual Studio 2022 → x64 Native Tools Command Prompt for VS 2022 をクリックすると上記の環境変数が設定されたターミナルが起動されるので、 そこで作業を行ってもかまいません。 (スタートメニューを間違えると32ビットプログラムがビルドされるので注意してください)
ターミナルを起動してOpenTHFDフォルダに移動した後、以下のコマンドを実行してください。

> cd sol
> nmake.exe clean
> nmake.exe    CPU版計算プログラム(oth.exe)が作成されます
> cd ..\post
> nmake.exe clean
> nmake.exe    ポスト処理プログラム(oth_post.exe)が作成されます
> cd ..\mpi
> nmake.exe clean
> nmake.exe    MPI対応CPU版計算プログラム(oth_mpi.exe)が作成されます
> cd ..\cuda
> nmake.exe clean
> nmake.exe    GPU版計算プログラム(oth_cuda.exe)が作成されます
> cd ..\cuda_mpi
> nmake.exe clean
> nmake.exe    MPI対応GPU版計算プログラム(oth_cuda_mpi.exe)が作成されます
> cd ..

4.5.2 LinuxまたはWSL2環境

LinuxまたはWSL2環境では、GCC, MPI(OpenMPIなど), CUDA のインストールが必要です。
コマンドラインでOpenTHFDフォルダに移動した後、 以下のコマンドを実行してください。

$ cd sol
$ mv Makefile_gcc Makefile
$ make clean
$ make    CPU版計算プログラム(oth)が作成されます
$ cd ../post
$ mv Makefile_gcc Makefile
$ make clean
$ make    ポスト処理プログラム(oth_post)が作成されます
$ cd ../mpi
$ mv Makefile_mpicc Makefile
$ make clean
$ make    MPI対応CPU版計算プログラム(oth_mpi)が作成されます
$ cd ../cuda
$ mv Makefile_linux Makefile
$ make clean
$ make    GPU版計算プログラム(oth_cuda)が作成されます
$ cd ../cuda_mpi
$ mv Makefile_linux Makefile
$ make clean
$ make    MPI対応GPU版計算プログラム(oth_cuda_mpi)が作成されます
$ cd ..

4.5.3 プログラム構成

プログラムの構成(ソースコードの依存関係)は図4-5-1のようになっています。
sol/を変更したときはmpi/,cuda/,cuda_mpi/,post/もmake(再コンパイル)してください。
mpi/を変更したときはcuda_mpi/もmakeしてください。
cuda/を変更したときはcuda_mpi/もmakeしてください。


図4-5-1 プログラム構成

4.5.4 スパコンでの使用法

NECスパコン(NEC SX-Aurora TSUBASA)と富士通スパコン(Fujitsu Supercomputer PRIMEHPC または 富岳)では、 Makefileの各マクロを下記のように修正してビルドしてください。

表4-5-1 スパコン用のMakefileのマクロ
マクロGCCNECスパコン富士通スパコン
(clangモード)
CCgccnccfcc
OMPOPT-fopenmp-fopenmp-fopenmp
CFLAGS-Ofast -I../include-O2 -I../include-Nclang -Ofast -I../include
LDFLAGS-Ofast -fopenmp-O2 -fopenmp-fopenmp
LIBS-lmなし-Nlibomp
定義されるマクロ__GNUC____NEC____CLANG_FUJITSU
(参考)強制ベクトル化なし#pragma _NEC ivdep#pragma clang loop vectorize(assume_safety)