sakeisnomitaiの日記

プログラミングで調べたことを自分なりにまとめるだけの人

Macで並列計算できるようにしたい(FORTRAN) (記事更新 2/13)

Macでちょっと時間のかかる数値計算をすると待ち時間がめんどい。。。3時間かかる計算は嫌だ。。。

 

ということで並列化に手を出してみます。

どうやらOpen MPかOpen MPIを使えばいいみたいです。何が違うの?

 

・Open MP

   どうやら1台のPC内の複数スレッドで計算できるようにするものらしい

・Open MPI 

 複数のプロセッサ間で通信して並列計算できるみたい

www.cc.u-tokyo.ac.jp

 

ここのサイトがわかりやすそう

 

 

とりあえず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スレッドで計算)

 

これをやればできる。。。はず!

 

 

 

参考

http://www.eccse.kobe-u.ac.jp/assets/images/simulation_school/kobe-hpc-summer-basic-2018/KHPC2018-openmp.pdf

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

として、スタックサイズの制限をなくすことでとりあえず動くようになった。が、数値が発散しているので更なるお勉強が必要です。。。次の記事はこれかな。