C, Fortran 環境の構築
Debian パッケージで環境構築する.
計算サーバ用のソフトウェアのインストール
コンパイラ
# apt-get install gfortran clang f2c # apt-get install build-essential gfortran libopenmpi-dev openmpi-bin
LAPACK, BLAS
# apt install libblas3 liblapack3 libblas-dev liblapack-dev
GNU 科学ライブラリ (GSL)
# apt-get install gsl-bin libgsl-dev
FFTW
# apt-get install libfftw3-long3 libfftw3-quad3 libfftw3-single3 libfftw3-bin libfftw3-dev ruby-fftw3
NetCDF
# apt install libnetcdf-dev libnetcdff-dev
画像系
# apt-get install imagemagick qiv ffmpeg
解析ツール
# apt-get install grads
シングル版. C 言語
テストコードとして, <URL:https://i.riken.jp/supercom/documents/himenobmt/> に公開されている姫野ベンチマークを利用する. 以下は各計算ノードに直接ログインして実行可能かを確かめている.
姫野ベンチマークを動かしてみる. 特に問題ない.
$ wget https://i.riken.jp/wp-content/uploads/2015/07/cc_himenobmtxp_s.zip $ unzip cc_himenobmtxp_s.zip $ lha x cc_himenobmtxp_s.lzh $ make $ ./bmt
シングル版. Fortran90
姫野ベンチマークを動かしてみる. 特に問題ない.
$ wget https://i.riken.jp/wp-content/uploads/2015/07/f90_xp.zip $ unzip f90_xp.zip $ lha x f90_xp.lzh $ gfortran himenoBMTxp.f90 $ ./a.out
C + MPI, static allocate version
姫野ベンチマークを動かしてみる. 特に問題ない.
$ wget https://i.riken.jp/wp-content/uploads/2015/07/cc_himenobmtxp_mpi.zip $ unzip cc_himenobmtxp_mpi.zip $ lha x cc_himenobmtxp_mpi.lzh $ sh paramset.sh M 1 1 2 $ mv Makefile.sample Makefile $ make $ mpirun -np 2 ./bmt
Fortran + MPI
姫野ベンチがうまく動かなかった. 本来であれば与えたプロセッサ数で適当に領域を区分するようだが, なぜかその部分で止まってしまった.
ここでは簡単なテストのみ実行する.
$ vi test.f90
program sample00
use mpi
implicit none
integer :: myrank, numprocs, ierr
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, myrank, ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr)
print *, repeat('#',myrank+1)
call MPI_FINALIZE(ierr)
end program sample00
$ mpif90 test.f90 $ mpirun -n 3 ./a.out # がプロセッサの数だけ表示される.
C + OMP, dynamic allocate version
簡単なサンプルコードの実行
$ vi test.c
#include <stdio.h>
#include <omp.h>
int main()
{
#pragma omp parallel
{
printf("Hello World from %d of %d\n",
omp_get_thread_num(), omp_get_num_threads());
}
}
$ gcc -fopenmp test.c
$ ./a.out
コア数分の hello! が表示される.
姫野ベンチを試す
$ wget https://i.riken.jp/wp-content/uploads/2015/07/himenobmtxp_cc_omp_al.zip $ unzip himenobmtxp_cc_omp_al.zip $ lha x himenobmtxp_cc_omp_al.lzh $ gcc -fopenmp himenoBMTxp_omp.f90 $ ./a.out
F90 + OMP
簡単なサンプルコードの実行
$ vi test.f90
program helloOpenMP
!$ use omp_lib
implicit none
print *, "START"
!$omp parallel
print *, "Hello! N =", omp_get_num_threads(), " and I am ", omp_get_thread_num()
!$omp end parallel
print *, "END"
end
$ gfortran -fopenmp test.f90
$ ./a.out
コア数分の hello! が表示される.
OMP でコア数の制限をかけるには, 環境変数を設定する.
$ export OMP_NUM_THREADS=4 $ ./a.out START Hello! N = 4 and I am 0 Hello! N = 4 and I am 3 Hello! N = 4 and I am 1 Hello! N = 4 and I am 2 END