AkaiKKRのインストール

AkaiKKR(machikayema)は、東京大学の赤井久純先生が開発された第一原理計算パッケージで、KKR-CPA法を採用することで化学的な不規則(不純物、不規則合金、固溶体)のバンド計算が可能です。

CygwinでAkaiKKR(Machikaneyama)では Cygwin + g77 でAkaiKKRを利用する方法を書きましたが g77 がCygwinのパッケージからなくなってしまったこともあり、新しい情報でエントリをまとめなおします。
また、AkaiKKRがOpenMPに対応したので、並列化を行う際の注意点についても触れます。ただし、最初はOpenMPを使わない設定で試してみることをお勧めします。

今回のエントリは、以下の流れで展開します。

  1. コンパイラのインストール
  2. AkaiKKR(machikayema)のダウンロードと展開
  3. makefileの編集
  4. specx.fの編集とコンパイル
  5. .bashrcの設定

この際、使用している環境(Ubuntu/Cygwin)とコンパイラ(ifort/gfortran)の違いによって設定方法の説明が枝分かれしていることに注意してください。

注) エントリを書いている間に September 05, 2014 がリリースされたようですが、このエントリは July 29, 2014 を基準に書かれています。September 05, 2014でも大丈夫なようです。
注) 5aと5bの.bashrcへの追記する内容が間違っていたものを修正しました。(2014年9月18日)



はじめに


CygwinでAkaiKKR(Machikaneyama)ではWindowsのCygwinでAkaiKKR(machikayema)を使う方法をまとめました。しかしながら、主に以下の理由で情報が古くなったので新しいエントリにまとめます。

  • AkaiKKRがOpenMPに対応した
  • Cygwinからg77が無くなった

g77の代わりにはgfortranが利用できます。AkaiKKRの現在の最新版(cpa2002v009c July 29, 2014)ではデフォルトではIntel Fortran Compiler(ifort)でOpenMPを有効にしたものを使う設定になっています。

しかしAkaiKKR(machikayema)にも下記の様にあるとおり、AkaiKKRは実際に様々な環境で動作させることが可能です。
AkaiKKR単体で使用することができ、小さなノートパソコンから大きなスーパーコンピュータまで様々な環境で同じように動きます。FORTRANコンパイラが入っているものならば、UNIX、Linux、Mac、Windowsといったあらゆるプラットホーム上で使用できます。

今回は、以下の各条件で動作させる際のインストールの方法と.bashrcの設定について書きます。

  • Cygwin + gfortran (+ OpenMP)
  • Ubuntu + gfortran (+ OpenMP)
  • Ubuntu + ifortran (+ OpenMP)

OpenMP


現在の最新版(cpa2002v009c July 29, 2014)よりも前のバージョンのAkaiKKRではCPUを1スレッドしか利用しません。これに対して最近のPCのCPUは2コア,4コアが当たり前となっています。そうすると極端な話、AkaiKKRはそのPCの性能の半分や四分の一しか利用できていないことになります。

そこでOpenMPを利用すると、計算に利用するスレッドの数を増やした並列計算をすることが可能になります。単純に速度が2倍4倍になるわけではないでしょうが、いくばくかの高速化が期待できるはずです。

ただし、OpenMPを使うためにはコンパイルオプションを指定したり、.bashrcを設定したりする必要があります。少々厄介なことにコンパイルオプションや.bashrcで設定する環境変数の値は、コンパイラの違い(gfortran or ifort)だけでなくAkaiKKRで計算する系によっても異なる場合があります。そのため、まずは、OpenMPを使わない状況で計算できるようにするのがオススメです。

以降、適切なタイミングで紹介しますが、OpenMPを利用する場合は下記のサイトが参考になります。


共通の確認事項


どのOSとコンパイラを使うにしても、以下の流れは共通です。

  1. コンパイラのインストール
  2. AkaiKKR(machikayema)のダウンロードと展開
  3. makefileの編集
  4. specx.fの編集とコンパイル
  5. .bashrcの設定

CygwinでAkaiKKR(Machikaneyama)と比較して「5. .bashrcの設定」の項目が増えました。これはOpenMPを使う場合は特に必須になります。

1. コンパイラのインストール


WindowsでAkaiKKRを実行する場合、Cygwin上でgfortranを使うことができます。
UbuntuなどのLinuxではgfortranの他にIntel Fortran Compiler(ifort)も非商用なら無料で利用できます。

1.a Cygwin + gfortran (+ OpenMP)


CygwinでAkaiKKR(Machikaneyama)にも書いたとおり、CygwinでAkaiKKRを使う場合、とにかく全部のパッケージをInstallにしてしまうのが簡単です(時間はかかりますが)。
最新のCygwinには32bit版と64bit版が存在します。私の環境では64bit版をインストールしました。


002_20130114153227.png

Fig.2: Cygwinのインストールでかならずgfortranがインストールされるようにする。全パッケージのインストールを選ぶとgfortranもインストールされる。


インストールの確認にはCygwinのターミナル上で以下の様にタイプします。

gfortran --version

コンパイラのバージョンが表示されればインストール完了です。

1.b Ubuntu + gfortran (+ OpenMP)


Ubuntuにgfortranをインストールする場合は、シェル上で以下のようにタイプします。

sudo apt-get install gfortran

この際、パスワードを聞かれるので入力します。

1.c Ubuntu + ifort (+ OpenMP)


AkaiKKRはIntel Fortran Compiler(ifort)を利用するのが最も標準的であると思われます。(恐らく赤井先生をはじめAkaiKKRの開発者の方々はifortをメインに利用している気がします。makefileのデフォルトの設定もifortですし。)

Ubuntu 12.04 64bitでHiLAPWでも書きましたが、私は64bit版のUbuntu 12.04にifortをインストールしています。私がインストールしたときにはUbuntu12.04 IntelR Parallel Studio XE 2011 for Linuxのインストールの通りに行いました。
しかし、最近のバージョンでは上手く行かないとのことでUbuntu14.04 64bit にIntelR Parallel Studio XE 2013 for Linuxのインストールが新たに公開されています(私はまだ試していません)。

2. AkaiKKRのダウンロードと展開


AkaiKKRのダウンロードには『計算コード利用許諾契約』への同意と利用登録が必要です。
利用登録に必要な情報は
  • 名前
  • メールアドレス
  • 所属
の3つだけです。

利用登録が完了すると入力したメールアドレスにパスワードが送信されてきます。
このパスワードを利用して、このエントリを書いている段階での最新版であるcpa2002v009c.tar.gzをダウンロードします。

AkaiKKRのページでは、プログラム本体のほかにマニュアルも配布しています。KKR-Green関数法によるバンド計算Machikaneyama2000の使用に関するメモは印刷して手元においておくとよいと思います。

また市販の書籍として計算機マテリアルデザイン入門 (大阪大学新世紀レクチャー)密度汎関数法の発展 -マテリアルデザインへの応用にAkaiKKRに関する言及があります。特に前者は、第一原理計算を"良くわからないけど、とにかくやってみる"という立場の人(私とか)にはよい本だと思います。



KKR-Green関数法によるバンド計算の『プログラムの入手、コンパイルと実行』にならった方法でインストールを進めます。

ダウンロードしたcpa2002v009c.tgzがホームディレクトリにおいてあるとします。64bit版のCygwinを利用している場合には C:\cygwin64\home\ユーザー名 がホームディレクトリとなっていると思います。

このホームディレクトリにkkrというディレクトリを作成します。つぎにcpa2002v009cをkkrフォルダの中に移動します。最後にcpa2002v009c.tgzを展開します。

mkdir kkr
cd kkr
mv ../cpa2002v009c.tgz
tar -xzvf cpa2002v009c.tgz

上記のコマンドを順に打ち込めば展開まで行うことが出来ます。もちろんコマンドではなく解凍レンジなどの解凍用ツールを利用しても大丈夫です。
最終的に ~/kkr/cpa2002v009c/ というディレクトリが出来ます。

3. makefileの編集


cpa2002v009cフォルダへ移動するとmakefileというファイルが存在していることが分かります。これをテキストエディタで開いて編集します。

cd ~/kkr/cpa2002v009c/
emacs makefile -nw

上記のコマンドはemacsで編集する場合の例です。

現在の最新版であるcpa2002v009c(July 29, 2014)に付属するmakefileの中の、以下の4つの項目を適切に設定することで、コンパイラの種類やOpenMPの有無に応じて実行ファイルを生成できるようになります。

fort = 
flag =
omp =
nomp =

OpenMPに対応した並列実行ファイルを生成したい場合であっても、最初はOpenMPなしで実行が出来るかを確認するのが良いと思います。
以降では、OSとコンパイラ、OpenMPの有無のそれぞれの条件でどのようにmakefileを編集すればよいかをまとめます。
なお、下記の条件は私の環境で実行できている設定と言うだけで、全ての環境で上手く行くのかは分かりませんし、最適な設定であることも保証しません。

3.a Ubuntu + ifort (OpenMP無し)


UbuntuなどのLinuxでOpenMPを使わない条件でのmakefileは以下の様になります。

fort = ifort
flag = -mp1 -i-dynamic
omp =
nomp =

cpa2002v009c(July 29, 2014)に付属するmakefileの初期設定が ifort + OpenMP なのでOpenMP関連のオプションを空にするだけです。

3.b Ubuntu/Cygwin + gfortran (OpenMP無し)


次にコンパイラとして gfortran をつかいOpenMPは使用しない設定を書きます。

fort = gfortran
flag =
omp =
nomp =

この設定はUbuntuなどのLinuxでもWindows上のCygwinであってもどちらでも使えます。

3.c Ubuntu + ifort + OpenMP


以下に示すのはcpa2002v009c(July 29, 2014)のデフォルトのmakefileの設定です。
UbuntuなどのLinux上でifortを使いOpenMPの並列化を行う場合は、この設定をそのまま使います。
fort = ifort
flag = -mp1 -i-dynamic
omp = -openmp
nomp = -openmp-stubs

しかしながらOpenMPを使うためには.bashrcの設定が必要になります。これを適切に設定しない場合は入力ファイルの種類によってはセグメンテーション違反(Segmentation fault)の出力が出てAkaiKKRが異常終了する場合があります。

3.d Ubuntu + gfortran + OpenMP


AkaiKKR掲示板の6548 コンパイルスレッドではgfortranでコンパイルする場合についての質問が投稿されています。その際にはOpenMPを利用しない設定にして事なきを得たようですが、実はgfortranもOpenMPに対応しています。ただし、注意しなければならないのはコンパイルオプションとして-openmpではなく-fopenmpが必要になると言うことです。

fort = gfortran
flag =
omp = -fopenmp
nomp =

上記の例はUbuntuなどのLinuxで使う場合です。Cygwinのgfortranの場合は更にコンパイルオプションが必要です。

3.e Cygwin + gfortran + OpenMP


CygwinでOpenMPを使う方法を参考にCygwinのgfortranでOpenMPを使ってAkaiKKRをコンパイルするためのmakefileの設定を書きます。

fort = gfortran
flag =
omp = -fopenmp -Wl,--stack,16777216
nomp =

前述の通りgfortranでOpenMPを使うためのオプションは-fopenmpです。
OpenMPを利用する場合は、AkaiKKRの実行ファイルを走らせる前に ulimit -s unlimited と言うコマンドを実行しておかなければならないのですがCygwinではこのコマンドが使えません。対応策はCygwinでOpenMPを使う方法にあるとおりコンパイルのオプションでスタックサイズを指定しておくことです。
上記の例ではスタックサイズとして16777216を指定していますが、これが本当に妥当な値なのかは分かりません。状況に応じて変える必要があるかもしれません。

4. specx.fの編集とコンパイル


makefileの編集が終わればmakeコマンドを使ってコンパイルを行うことが出来ます。
~/kkr/cpa2002v009c/へ移動します。
古いバージョンの実行ファイルやオブジェクトファイルが存在する可能性があるので念のため touch を行います。その後に make を行います。

cd ~/kkr/cpa2002v009c
touch source/*.f
make

CygwinでAkaiKKRを書いたときのバージョンでは、エラーメッセージが表示されてコンパイルに失敗しましたが、cpa2002v009c(July 29, 2014)では、少なくとも私の環境では、そのままコンパイルに成功しました。

ただし入力ファイルの条件、例えば計算セル内の原子の数やk点の数によっては ~/kkr/cpa2002v009c/source/specx.f の編集が必要になる場合があります。

編集すべきパラメータはcpa2002v009c(July 29, 2014)では以下の2行です。

     & (natmmx=8, ncmpmx=8, msizmx=72, mxlmx=4, nk1x=550, nk3x=25,
& msex=201, ngmx=15, nrpmx=650, ngpmx=650, npmx=350, msr=400)


これらのパラメータは『配列の大きさを指定するパラメータ』です。詳しくはKKR-Green関数法によるバンド計算のP29の表5を見てください。

この中でnatmmxとncmpmxの2つのパラメータに注目します。これらはそれぞれ計算する計算セルの中の『原子の個数』と『原子の種類』の最大値をあらわします。
例えば体心立方構造(bcc)や面心立方構造(fcc)の『原子の個数』は1個、六方最密充填構造(hcp)の場合は2個です。また『原子の種類』の方は、純金属で1種類、二元合金で2種類、三元合金で3種類です。

msizmxとmxlmxに関してはAkaiKKRの角運動量(方位量子数)のメモに書く予定です。

nk1kとnk3xは入力ファイルのbzqltyを大きくする(k点の数を増やす)場合に大きくする必要があります。

これらのパラメータを変更した場合はそのたびに make を行う必要があります。make に成功すると実行ファイルが生成されます。Linuxではspecxで、Cygwinではspecx.exeです。

5. .bashrcの設定


まず、実行ファイルのある~/kkr/cpa2002v009c/にパスを通しておくのが良いと思います。
.bashrcはホームディレクトリに存在するファイルです。テキストエディタで編集を行います。
例えばemacsで編集する場合は以下の様にコマンドをタイプします。

cd ~/
emacs .bashrc -nw

実行ファイルのあるディレクトリにパスを通す場合.bashrcの最後に以下の行を追加します。

PATH="$PATH":$HOME/kkr/cpa2002v009c

OpenMPを利用する場合は、他にも追記する必要があります。そしてその追記の内容はOSとコンパイラの種類、更には計算する入力ファイルによって変化します。

現在の最新版であるcpa2002v009c(July 29, 2014)を実行するとアウトプットの冒頭に以下の様なメッセージが表示されます。OpenMPを利用する場合は、このメッセージに従って.bashrcに追記を行います。

 OpenMP required stack size:               91288.
Use the followings command for Linux csh/tcsh:
------------------------------
setenv KMP_STACKSIZE 1M
limit stacksize unlimited
setenv OMP_NUM_THREADS n
------------------------------
Here, n is the number of threads to be used, maybe 8

ただし、上記の表記はcsh/tcsh用になっているのでbash用の表記に変えます。具体的にどのような追記が必要であるかは以降で個別に紹介します。

.bashrcへの全ての追記/編集が終わったら、再起動またはsourceコマンドで.bashrcを読み込ませます。

source ~/.bashrc

5.a Ubuntu + ifort + OpneMP


まずは最も標準的な環境であるUbuntuなどのLinux上でIntel Fortran Compiler(ifort)を使う場合の.bashrcへの追記について書きます。

export KMP_STACKSIZE=16M
ulimit -s unlimited
export OMP_NUM_THREADS=4

アウトプットファイルの冒頭にある表記をcsh/tcshのものからbashのものに書き直しました。

KMP_STACKSIZEは今回は16Mとしてありますが、計算する系によっては過剰かもしれませんし、また少なすぎるかもしれません。大きすぎて困ることがあるかはわかりませんが、少なくとも小さすぎると計算してくれません。

OMP_NUM_THREADSには、使用するCPUのスレッド数を指定します。クアッドコアのCPUなら4を指定するとフルパワーで計算してくれます。また、クアッドコアであっても、あえて2などを指定しておけばCPUを使い切るのを避けることができます。

5.b Ubuntu + gfortran + OpneMP


次にUbuntuなどのLinux上でgfortranを使う際の.bashrcの設定について書きます。

export OMP_STACKSIZE=16M
ulimit -s unlimited
export OMP_NUM_THREADS=4

各パラメータの意味は、上記の ifort のものと同じですが、注意点としては KMP_STACKSIZE が OMP_STACKSIZE に変わっているということでしょうか。
OpenMP* の環境変数によると KMP_ で始まるものはインテル固有の環境編巣であるとのことです。したがって gfortran を利用する場合には、対応する環境変数である OMP_STACKSIZE を設定します。

5.c Cygwin + gfortran + OpneMP


最後にCygwin上でgfortranを使う場合の.bashrcの設定に関して書きます。

export OMP_STACKSIZE=16M
export OMP_NUM_THREADS=4

内容はUbuntuでgfortranを使う場合と同じですが limit stacksize unlimited がなくなっています。
これは「3. makefileの編集」の中の「3.e Cygwin + gfortran + OpenMP」の項目のところで説明したとおりCygwinでは limit stacksize unlimited が使えないためです。

関連エントリ




参考URL




参考文献/使用機器



フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。


tag: Scilab AkaiKKR machikaneyama KKR cygwin Ubuntu ifort gfortran OpenMP 

comment

Secret

FC2カウンター
カテゴリ
ユーザータグ

LTspiceAkaiKKRmachikaneyamaScilabKKRPSoCOPアンプCPA強磁性PICモンテカルロ解析常微分方程式odeトランジスタecalj状態密度DOSインターフェース定電流スイッチング回路PDS5022半導体シェルスクリプト乱数レベルシフトHP6632A温度解析分散関係I2Cトランジスタ技術R6452A可変抵抗ブレッドボードセミナーバンドギャップ数値積分確率論反強磁性偏微分方程式バンド構造絶縁熱設計非線形方程式ソルバフォトカプラシュミットトリガLEDLM358カオスISO-I2C三端子レギュレータGW近似A/Dコンバータカレントミラーアナログスイッチ数値微分マフィンティン半径TL431発振回路サーボPC817CUSB直流動作点解析74HC4053補間FFTBSch開発環境パラメトリック解析2ちゃんねるチョッパアンプ量子力学bzqlty電子負荷イジング模型LDA標準ロジックアセンブラ基本並進ベクトルブラべ格子単振り子熱伝導位相図TLP621キュリー温度繰り返し状態方程式MaximaVESTAスイッチト・キャパシタ相対論FETランダムウォークスピン軌道相互作用SMP六方最密充填構造抵抗不規則合金ewidthスレーターポーリング曲線GGAラプラス方程式cygwingfortranQSGW失敗談コバルト条件分岐TLP521テスタLM555Writer509TLP552格子比熱マントルデータロガー自動計測詰め回路ガイガー管ダイヤモンドQNAPMCUFXA-7020ZR過渡解析三角波UPSNE555固有値問題熱力学ブラウン運動フェルミ面awk起電力第一原理計算OpenMPfsolveubuntu最大値xcrysden最小値最適化仮想結晶近似VCA差し込みグラフスーパーセル井戸型ポテンシャル平均場近似シュレディンガー方程式FSMフラクタルOPA2277固定スピンモーメント2SC1815全エネルギー合金multiplotgnuplotc/aTeX結晶磁気異方性interp1ウィグナーザイツ胞初期値マンデルブロ集合疎行列面心立方構造fcc不純物問題非線型方程式ソルバフィルタL10構造PGA半金属二相共存SICZnOウルツ鉱構造BaO重積分クーロン散乱磁気モーメント電荷密度三次元CIF岩塩構造CapSenseノコギリ波デバイ模型ハーフメタル正規分布フォノンquantumESPRESSOルチル構造スワップ領域リジッドバンド模型edelt縮退キーボード軸ラベルグラフの分割凡例トラックボールPC不規則局所モーメント片対数グラフトランス両対数グラフCK1026MAS830L直流解析Excel円周率パラメータ・モデルヒストグラム日本語最小二乗法等価回路モデルGimp線種シンボルTS-110TS-112PIC16F785LMC662化学反応文字列specx.f入出力ifortマテリアルデザインヒストグラム確率論Realforce等高線ジバニャン方程式P-10Ubuntuナイキスト線図Crank-Nicolson法陰解法熱拡散方程式HiLAPWAACircuit連立一次方程式負帰還安定性境界条件EAGLEMBE関数フィッティング

最新コメント
リンク

にほんブログ村 その他趣味ブログ 電子工作へ