2022/02/06

JAGURS on MacOS Monterey with homebrew

 iMac 24" (M1)と iMac 27" (Intel) で改めてJAGURSで計算できる環境を作ったのでそのまとめ.

【訂正】2022.4.23

homebrew で, proj@7 が入っていることを同僚が教えてくれました.ので,proj-4.9.3は必要なく,Makefileで/opt/homebrew/Cellar/proj@7/7.2.1を/opt/homebrew/lib より前に指定すれば大丈夫なようです.かつ,最新版JAGURS(D0516)で,2020年に書いた mapproject.c の対応が本流に入ってるので,proj@7で無修正で動くようになりました.

ライブラリとして,netcdf, fftw3, proj4 が必要だけど,proj4は新しいのだと動かないので古いのを持ってくる.netcdfとfftw3は homebrew ので問題なし.

% brew install netcdf netcdf-fortran fftw3

proj4は,past-release から proj-4.9.3.tar.gz を持ってきました.

% ./configure --prefix=$HOME/local

% make

% make install


JAGURSのコンパイルは,Makefile.gfortran をベースにしました.

% rm Makefile (Makefile.SC_ICEに向いてるので)

% cp Makefile.gfortran Makefile


MPIはなし,とりあえず /usr/bin/gcc

% rcsdiff -u Makefile

===================================================================

RCS file: Makefile,v

retrieving revision 1.1

diff -u -r1.1 Makefile

--- Makefile    2022/02/04 21:52:49     1.1

+++ Makefile    2022/02/04 22:58:07

@@ -1,18 +1,18 @@

 # FC: Specify Fortran90 compiler command.

-FC=mpif90

+FC=gfortran


 # Added for displacement.

 # PRJ4_DIR: Specify PROJ.4 install directory.

 # CC&CFLAGS: Specify C compiler command and flags.

 PROJ4_DIR=$(HOME)/local

-CC=gcc

+CC=/usr/bin/gcc

 CFLAGS=-g -I$(PROJ4_DIR)/include


 # BASE: Specify basic compiler options.

 BASE=-cpp -fconvert=big-endian


 # FFTW3_INCLUDE_DIR: Specify FFTW3 include directory.

-FFTW3_INCLUDE_DIR=$(HOME)/local/include

+FFTW3_INCLUDE_DIR=/opt/homebrew/include


 # FFTW3_LIB: Specify linker options to link FFTW3.

 FFTW3_LIB=-lfftw3

@@ -21,7 +21,7 @@

 OPT=-O2 -fopenmp -I$(FFTW3_INCLUDE_DIR)


 # NETCDF: Specify the path to NetCDF library.

-NETCDF=$(HOME)/local

+NETCDF=/opt/homebrew


 # LIBS: Specify linker options.

 LIBS=-L$(NETCDF)/lib -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lsz -L$(PROJ4_DIR)/lib -lproj $(FFTW3_LIB) -lm

@@ -40,7 +40,7 @@


 # MPI=ON: MPI version is made.

 # Else, serial version is made.

-MPI=ON

+MPI=OFF


 # USE_ALLTOALLV=ON: Use MPI_Alltoallv for inter-nest communications.

 # Else, MPI_Allreduce is used.

 

せっかくなので,inputにあるサンプルをベースにして,ベンチマーク.

Intel ... 3.6GHz 10コア第10世代Intel Core i9プロセッサ

M1 ... 4つの高性能コアと4つの高効率コアを搭載した8コアCPU、8コアGPU、16コアNeural Engineを持つApple M1チップ

% cat gridfile.dat

SD01 SD01 1 bathy.SD01.grd disp.SD01.grd

SD02 SD01 0 bathy.SD02.grd disp.SD02.grd

SD03 SD02 0 bathy.SD03.grd disp.SD03.grd


tsun.par:

dt=0.5

tend=21600

itmap=1200


こんな感じの設定で,M1はフルに8コアなので,Intelもそれに合わせて OMP_NUM_THREADS=8 に制限して実行した.

Intel ... All 5187.004 [s](デフォ20coresで 4823.238[s])

M1 ... All 5174.547 [s]