石井宏幸|計算機関係のメモ

計算機関連のメモ

電子状態計算ソフトウェアの使い方

数式処理ソフトウェアの使い方




自宅から研究室の計算機(192.168.0.105)に、ゲートウェイマシンを介して直接ファイル転送する方法

【TeraTermの設定】
ゲートウェイのコンピュータにTeraTermで接続。
TeraTermの「設定」→「SSH転送」をクリック。SSHポート転送の設定画面で「追加」をクリック。
ローカルのポート 22
リモート側ホスト 192.168.0.105 ポート 22
に設定する。この設定はファイルに保存できる(ファイル名はTERATERM.INIなど)ので、次回以降はそのファイルを指定して読み込めば良い。

※TeraTermでパスワードをメモリ上に保存したくないとき、TERATERM.INIファイル中の
RememberPassword=1

RememberPassword=0
に替えればよい。

【WinSCPの設定】
WinSCPを起動 →「新規」をクリック。
ホスト名 localhost ポート番号 22
ユーザ名 hogehoge (192.168.0.105にログインするときのユーザ名)
を設定する。

【ファイル転送】
「WinSCPのログイン画面」で「hogehoge@localhost」を選択、「ログイン」をクリック。
192.168.0.105に接続できるので、通常のようにファイル転送可能。

SSH公開鍵の作り方、形式変換

【SSH公開鍵の作り方】
TeraTermの「設定」→「SSHキー作成(RSA)」をクリック。
キーのパスフレーズ(計算機へのログイン時に入力するパスワード)を入力して、秘密鍵と公開鍵を作成。

【SSH秘密鍵のPuTTY形式への変換方法】
「スタート」→「WinSCP」→「鍵関連ツール」→「PuTTYgen」をクリックして、PuTTYgen (PuTTY key generator)を起動。
PuTTY Key generator の「Conversions」→「Import key」をクリック。
TeraTermで作成した秘密鍵のファイル(多分、id_rsa)を選択して、「開く」。
秘密鍵を作るときに入力したパスフレーズを入力。
「Save private key」をクリックしてPuTTY形式(id_rsa.ppk)の秘密鍵を保存。
この秘密鍵を指定すれば、WinSCPでファイル転送可能となる。

【逆に…PuTTYで作った鍵形式(*.ppk)からRSA/DSA鍵への変換方法】
「スタート」→「WinSCP」→「鍵関連ツール」→「PuTTYgen」をクリックして、PuTTYgen (PuTTY key generator)を起動。
PuTTY Key generator の「Conversions」→「Import key」をクリック。
PuTTYで作成した秘密鍵のファイル(多分、*.ppk)を選択して、「開く」。
秘密鍵を作るときに入力したパスフレーズを入力。
「Conversion」→「Export OpenSSH Key」をクリックしてRSA/DSA形式の秘密鍵を保存。
この秘密鍵を指定すれば、TeraTermでRSA/DSA鍵を使ってアクセス可能となる。

デバッグ方法の覚書

【インテルコンパイラ(ifort)でのデバッグ方法(簡易版)】
デバッグしたいプログラム(test.f)を以下のようなオプションをつけてコンパイル
ifort -CB -traceback -g test.f
(オプションの意味)
-CB … 配列の領域外参照を検出。(PGIコンパイラでは、-C)
-traceback … エラーを起こしたプログラム中の行番号を表示。
-g … デバッグ用の実行ファイルを作る。

出来た実行ファイルをいつもするように実行させる。
./a.out > output.txt

[実行結果の例]
デバッグオプションつけずにコンパイルしたときの計算結果(エラー表示部分)

Segmentaion faultで強制終了したことしか分からない。

----------------------------------------------------------------------------
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image PC Routine Line Source
a.out 0000000000416A3E Unknown Unknown Unknown
a.out 00000000004161A6 Unknown Unknown Unknown
a.out 0000000000403EE9 Unknown Unknown Unknown
a.out 0000000000402F6A Unknown Unknown Unknown
libc.so.6 000000325B01C3FB Unknown Unknown Unknown
a.out 0000000000402EAA Unknown Unknown Unknown
----------------------------------------------------------------------------

デバッグオプションつけてコンパイルしたときの計算結果(エラー表示部分)

プログラムeqposi.f中の1160行目で、
配列"RAN"がRAN(1:100000)で定義されているにも関わらず、
実行中にRAN(100001)にアクセスがあったため強制終了したことが分かる。

----------------------------------------------------------------------------
forrtl: severe (408): fort: (2): Subscript #1 of the array RAN has value 100001
which is greater than the upper bound of 100000

Image PC Routine Line Source
a.out 0000000000606B53 Unknown Unknown Unknown
a.out 000000000060517E Unknown Unknown Unknown
a.out 00000000005DB66C Unknown Unknown Unknown
a.out 00000000005B9F96 Unknown Unknown Unknown
a.out 00000000005BA1DA Unknown Unknown Unknown
a.out 00000000005B83E6 inivel_ 1160 eqposi.f
a.out 00000000005A920D eqvelo_ 385 eqposi.f
a.out 0000000000406AEB MAIN__ 353 amain-cnt-md-mpi.f
a.out 00000000004030AA Unknown Unknown Unknown
libc.so.6 000000325B01C3FB Unknown Unknown Unknown
a.out 0000000000402FEA Unknown Unknown Unknown
---------------------------------------------------------------------------

【潜在的なエラーを見つけるためのコンパイルオプション(ifort)】
ifort -auto -ftrapuv -check all -warn all -std -fpe0 -traceback test.f
コンパイル時と実行時の両方で、警告レベルから教えてくれる。

[実行結果の例]
-----------------------------------------------------------------------------------------------
forrtl: severe (193): Run-Time Check Failure. The variable 'eqvelo_$VELX' is being used without being defined
Image PC Routine Line Source
a15b.out 0000000000736A93 Unknown Unknown Unknown
a15b.out 00000000007350BE Unknown Unknown Unknown
a15b.out 000000000070B59C Unknown Unknown Unknown
a15b.out 00000000006E9EC6 Unknown Unknown Unknown
a15b.out 00000000006EA15B Unknown Unknown Unknown
a15b.out 00000000006CE4C7 eqvelo_ 472 eqposi.f
a15b.out 000000000040ACF2 MAIN__ 373 amain-cnt-md-mpi.f
a15b.out 00000000004030AA Unknown Unknown Unknown
libc.so.6 000000325B01C3FB Unknown Unknown Unknown
a15b.out 0000000000402FEA Unknown Unknown Unknown
forrtl: error (76): IOT trap signal
/home/ishii/.lsbatch/1231320385.2367: line 8: 13189 Aborted (core dumped) ./a15b.out
-----------------------------------------------------------------------------------------------
ファイルeqposi.f中のサブルーチン"eqvelo"の変数"VELX"が、472行目で、
初期値を与えずに計算しているためのエラーであることが分かる。

【2GB以上のメモリを消費する配列を使う場合の対処法】

【整数型、実数型の変数が取れる範囲】
基本整数型(4バイトの整数型)の変数 … -2^31 (-2147483648) ~ +2^31-1 (+2147483647) までしか扱えない。

例えば、N=3, M=800000, L=1000の積を整数型変数Iに格納(I=N*M*L)させようとしても
N*M*Lは、2^31以上の大きさになるので正しい値にならない。大規模計算時には、要注意!
[実行結果の例]
N*M*L = -1894967296 (負になってる!間違った値!)

Fortranの小技

Doループのカウンターをファイル名にする方法

下の例は、5桁の数字まで可能。

INTEGER I
CHARACTER(5) OUTFILE

OUTFILE=" "
DO I=1,10000
 WRITE(OUTFILE,'(I5)') I
 OUTFILE=ADJUSTL(OUTFILE)
 OPEN(1,FILE="data." // TRIM(OUTFILE), STATUS='NEW')
 WRITE(1,*) I
 CLOSE(1)
END DO

既存のファイルに追加記入

OPEN(1,FILE='data.txt', POSITION='APPEND')

ソフトウェアの使い方メモ

gnuplot

【インストール】
まず、gnuplotのホームページ
(http://www.gnuplot.info/)からダウンロード。
windows版は、gp442win32.zip (2010.01現在)。 意味は、ver.4.4.2で、windows 32bit版。
zipファイルを解凍。インストール作業は不要。
解凍されたフォルダ内のwgnuplot.exeが実行ファイル。(注) gnuplot.exeではない。

【初期設定】
wgnuplot.exeを実行すると、gnuplotのウィンドウが開く。が、文字が読めない。
ウィンドウ上で右クリックして、Choose Fontタブをクリック。読みやすいフォントを設定。
再び、右クリックして、Update C:\... をクリックすると、設定したフォントが保存される。

【使い方】

Intel Visual Fortran

初期設定の問題点
デフォルトでは、スタック領域のサイズが小さすぎて、プログラムを実行させると以下のエラーが出る。
severe(170): Program Exception - stack overflow

スタック領域のサイズの変更方法
Intel Visual Studio の右にある「Solution explore」で右クリック。
そこから -> properties -> linker -> systemを選択。

stack reserve size 0
stack commit size 0

の数値を0から、100000000に変更すると、スタック領域を100MB確保することになる。
ちなみに、commit size は、ソフト起動時に予約する容量(らしい)。
ソフトの起動は遅くなるが、スタックの確保に時間はかからない。

馬鹿にされても構わない…Linuxの覚書

Pathの通し方

(1) まず、現在のPATHの確認。
echo $PATH
(2) 次に、自分の使っているシェルを知る。
echo $SHELL
(3) PATHを通す。

(4) 設定を反映させる。
(5) ちゃんとPATHが通ったか確認。
echo $PATH

Emacsの覚書

emacs画面の分割

Microsoft Wordの覚書

段落番号の階層

例えば、下のように段落番号の階層を変えたいとき、
1.
 1.1.
 1.2.
   1.2.1.
   1.2.2.
 1.3.

段落番号を選択し、Tabキーを1回押す毎に
1. → 1.1. → 1.1.1. となっていく。

逆に、Shift+Tabキーで、
1.1.1 → 1.1 → 1. となる。

LaTeXの覚書

styleファイルの置き場所

新しいスタイルファイルをdownloadしたものの、"*.cls not found"などのエラーが出る場合の対処法。

C:\w32tex\share\texmf-local\tex

の下に、スタイルファイルの入ったフォルダなどを置けば良い。 ( ※ W32TeXをインストールした場所が、C:\w32tex の場合 )

Illustrator CS の覚書

特殊文字の入力方法

「書式」→「字形」をクリックすると、特殊文字の表が出てくるので、使いたい文字をダブルクリック!

GAMESSの使い方

GAMESSのホームページ(Mark Gordon's Quantum Theory Group

入力データ

実行の仕方

上記の入力ファイルを ethylene.inp、出力ファイル先を ethylene.log と指定する場合、

rungms ethylene.inp >& ethylene.log

で計算実行。

注)クラスター計算機で複数の計算を同時に行う場合、同じ名前の入力ファイルを使うと、 同一の計算nodeに投入された計算は、エラーを起こして停止するので注意。

出力データ

出力ファイルの最後の部分に、“exited gracefully.”と表示されていれば、とりあえず計算は正常終了。

【要注意】GAMESSの実行時のエラー

(標準出力でのエラーメッセージ)
DDI Process 0: semget return an error.


入力ファイルにミスが無くても出るエラー。Semaphore Arraysを使い切ると出てくる。
GAMESSが異常終了すると、Semaphore arraysが解放されずに残ってしまうらしい。(参照URL:PCと遊ぶ日々の記録)

使用中(解放されてない) Semaphore arrays を確認するコマンド。
 ipcs -s
出力結果がずらずらと沢山出てきたら、怪しい。(以下は出力例)
  ------ Semaphore Arrays --------
 key semid owner perms nsems
 0x00000000 10256412 root 666 1
 0x00000000 10253265 hishii 666 25

GAMESSを動かすには、2つの方法あり。

方法1:エラーを起こすノードを再起動。

方法2:再起動したくない場合、
次のコマンドで semid を指定して semaphore arrays を開放。
 ipcrm -s 10253265
沢山ある場合、面倒なので、次のスクリプトを利用すると楽。
 for i in `ipcs -s | sed -n '4,$p' | cut -d" " -f2 ` ;do ipcrm -s $i ;done
 計算クラスターの環境では、エラーを起こすすべてのノードでこの作業を行う必要あり。

GAMESSを利用時の注意

論文に下記の参考文献を引用しなければならない。

"General Atomic and Molecular Electronic Structure System"
M.W.Schmidt, K.K.Baldridge, J.A.Boatz, S.T.Elbert, M.S.Gordon, J.H.Jensen, S.Koseki, N.Matsunaga, K.A.Nguyen, S.Su, T.L.Windus, M.Dupuis, J.A.Montgomery,
J. Comput. Chem., 14, 1347-1363(1993).

Maximaの簡単な使い方

グラフの描画

1つのコマンドの入力が終了したら、その都度、Shift+Enterでコマンド実行