Macで並列計算できるようにしたい(FORTRAN) (記事更新 2/13)
Macでちょっと時間のかかる数値計算をすると待ち時間がめんどい。。。3時間かかる計算は嫌だ。。。
ということで並列化に手を出してみます。
どうやらOpen MPかOpen MPIを使えばいいみたいです。何が違うの?
・Open MP
どうやら1台のPC内の複数スレッドで計算できるようにするものらしい
・Open MPI
複数のプロセッサ間で通信して並列計算できるみたい
ここのサイトがわかりやすそう
とりあえずOpen MPを使えるようにしよう!
まずは、私の環境について。
M1 Macbook Pro 2021
OSはVentura
今回はFortranを想定(一応私はFortran90使いです)
Open MPをインストールする
特にインストールするものなんて無かった!!(gccがあればOK)
brew install libomp
が必要でした
コンパイルオプションで
-fopenmp
をつけてあげれば大丈夫
Open MPプログラムの作り方
まず冒頭部分に
use omp_lib
どOpen MPを使うことを宣言する。
並列領域の初めに
!$omp parallel
並列領域の終わりに
!$omp end parallel
と書くことで、並列化する場所だけを明示する。
例えば、あるループの部分を並列計算させたい場合には、
!$omp parallel
!$omp do
do i = 1, n
(doループの処理)
end do
!$omp end do
!$omp end parallel
と書けば良い。"omp do"を書かないと全てのスレッドで全てのループを実行してしまうらしい。また、1スレッドのみで処理を行いたい部分については"!$ omp single"を用いれば良い。
プログラムの実行
export OMP_NUM_THREADS=4
などとしてスレッド数を設定(bashの場合, この場合4スレッドで計算)
これをやればできる。。。はず!
参考
https://www.cc.kyushu-u.ac.jp/scp/doc/users/lecture/2018/openmp-nov2018.pdf
OpenMP入門: 初めてのOpenMPプログラム - Hello World in OpenMP
追記(20230213)
なぜか1行目のprogram ○○の部分でsegmentation faultしてしまったが、bashで
ulimit -s unlimited
として、スタックサイズの制限をなくすことでとりあえず動くようになった。が、数値が発散しているので更なるお勉強が必要です。。。次の記事はこれかな。