春休みにしていた作業なのだが、忘れないうちに記録しておこうと思っていたが、すでにゴールデンウィークである。マニアックな内容であるため、ごく一部の研究者向けの情報であるが、基本、研究者は忙しくネット上に情報を残す余裕が少ない人が多く、科学の進展のために備忘録として書き連ねておく。
とある量子化学計算を行いたくなり、計算用のマシーンにLinuxとGamessをインストールした。最初は、BLASルーチンをATLASやOpenBLASを導入したが、インテルのMKLが無償で使用できるようにライセンスが変更されており、そちらに変えた。
まず、Linuxのインストール。最もメジャーなLinuxディストリビューションの1つであるUbuntuを選択した。ちなみにバージョンは14.04LTS、こちらをDVDに焼いて使用。ただ、インストール直後にセキュリティーアップデートをして問題が発生した。当然、インストールされているCコンパイラであるgccのバージョンも最新になるのだが、最新バージョンでは、フォートランコンパイラgfortranとの連携ができておらず、gccのバージョンを下げる必要に迫られた。細かなテクニックがあるのだろうが、Ubuntuを再度、クリーンインストールした直後に、
$ sudo apt-get install gfortram
と入力し、フォートランをインストールしてから、アップデートを行い解決。
$ sudo apt-get update
$ sudo apt-get upgrade
続いて、インテルのMKLのインストール。インテルのホームページで登録を行い、レジストレーションキーを入手する。l_mkl_11.3.150.tgzをダウンロードして、/opt/intel/ に展開してインストールした。途中で入手したレジストレーションキー入力することとなる。
ここまで、準備をして、ようやく量子化学計算を行うためのプログラムGAMESSをインストールできる。無償で使用できるソフトだが、登録は必要であり、ホームページで必要事項を記入して送信すると、ダウンロード用のパスワードとURLがメールで送られてくる。今回は、ソースファイルをコンパイルすることから行った。ダウンロードしたソースファイルを/opt/gamessに展開してから
$ cd /opt/gamess
$ ./config
~~~~ please enter your target machine name: linux64
~~~~ GAMESS directory? [/opt/gamess]
~~~~ Please enter your choice of FORTRAN: gfortran
~~~~ Enter your choice of ‘mkl’ or ‘atlas’ or ‘acml’ or ‘none’: mkl
~~~~ MKL version (or ‘skip’)? skip
~~~~ communication library (‘sockets’ or ‘mpi’)? sockets
~~~~ Do you want to try LIBCCHEM? (yes/no): no
configファイルを実行すると対話的にインストールの構成を決めることができる。詳しい内容はインストール用のドキュメント/machines/readme.unixを参照してください。ここからは、
$ cd ddi
$ ./compddi >& compddi.log &
$ mv ddikick.x ..
$ cd ..
$ ./compall >& compall.log &
ここまではマニュアル通りだったのだが、リンクの工程でエラーが出たので、lkedファイルを修正する必要があった。
~~~~ # —- Linux on 64 bit chips —–
~~~~ (中略)
~~~~ set MATHLIBS=”$MATHLIBS -ldl -Wl, –end-group”
オプション-ldlを追加した。
$ ./lked gamess 01 >& lked.log &
これで問題なくインストールできたが、32Gメモリーを積んでいるマシンの性能を引き出すためにメモリの設定ファイル/etc/sysctl.confに下記の数字を追加して再起動
kernel.shmmax = 25769803776
kernel.shmall = 6291456
どちらもメモリー32Gすべてを使用するという設定ではなく、そのうち24Gバイトでの値。
実際にgamessを実行する際のバッチファイルrungmsも修正。下記にポイントだけ。
set TARGET=sockets
set SCR=/scr/$USER
set USERSCR=/home/$USER/scr
set GMSPATH=/opt/gamess
(中略)
if (null$VERNO == null) set VERNO=01
if (null$NCPUS == null) set NCPUS=4
(中略)
if ($NCPUS == 1) then
set NNODES=1
set HOSTLIST=(`hostname`)
endif
#
if ($NCPUS > 1) then
switch (`hostname`)
(中略)
default:
set NNODES=1
set HOSTLIST=(`hostname`:cpus=$NCPUS)
endsw
endif
4CoreのCPUのマシンで並列計算できるようにした設定です。