egs5が走らない場合の対処方法 2009-08-04 波戸 【現象】egs5の初期状態あるいはMXMEDを増やした状態で、 egs5.exeが走らない場合があることが報告されている。 例えば、cygwinでは次のようなエラーメッセージが出る。 ./egs5run : line 406 : /home/.../egs5job.exe: Resource temporary unavailable 【対応策】 @ include/egs5_h.fの MXMED=10を MXMED=5 程度に変更する。 A include/egs5_h.fの NBFIT=128 NEXFIT=32 を NBFIT=2 NEXFIT=2 程度にすれば動作することが多い。 これらは、オプションでGS断面積を使用する場合に関連するものであり、 GS断面積を使用しない場合は、このように変更しても問題ない。 【現象の発生条件】メモリー不足、コンパイラオプションミス、コンパイラ不具合など。 下記、田中氏の記録を参照 Cygwin環境でのエラー症状について。 OSはXPで、バーチャル環境(VMWare)で行なったので、 メインメモリを自由に変更して見たところ、 EGS実行時(NBFIT=128、NEXFIT=32)に1035MB程度 必要であることが分かりました。 この場合、OSに約200MB消費しているので、 1235MB以上メモリがないと、エラーが生じました。 ただし、仮想メモリを増やすことでも対処できました。 次にNBFIT=128, NEXFIT=32は通常固定で、MXMEDを変えたときの 必要メモリー数を調べましたので報告します。 XP wih Cygwin MXMED :Memory 4 :510MB 7 :780MB 10 :1040MB 15 :1580MB 20 (:1920MB Linx環境)XPはメモリが足りませんでした。 他の値もXPとLinuxでほぼ同様のメモリが必要でした。 これを一次式でfittingすると、 Y1 (MB) = 154 + 90 MXMED Y2 (MB) = 354 + 90 MXMED Y1, Y2はそれぞれEGS5のみ、またはEGS5+OSで必要なメモリーサイズ。 ちなみにMXMEDを30にすると、予想通り、配列変数のMaximum sizeを超えたエラーメッセージがでました。 あと、古いCygwin(ver 2.340.2.5)では、メモリは十分で あってもMXMED=10でもエラーが出ました。コンパイラが古い かも知れませんが、本などに付属している古いバージョンの CDなどからCygwinをインストールしたパソコンとかでは、 不具合が生じそうです。 なお、最初はWinとLinuxのifortのオプションをミスしており、 LinuxではQはいらなかったようで、 ifort -O2 -zero -save にすると、>> NBFIT=128, NEXFIT=32 であっても、32GBマシンと4GBマシンでは稼働しました。 ただ、瞬時に終了するため、メモリの上昇は観測でき ませんでした。4GBマシンでも作動するので、おそらく 静的配列の限界、1変数2GBを超えたのが原因ではないと 思われます。 1GBマシンだと、やはりメモリが足りないのか 途中終了します。ただし、オプション-zero -save をつけてからは、メモリの上昇は見られずに すぐに異常終了します。NBFIT=64, NEXFIT=16だと 作動し正常終了ます。  いろいろ調べてみたのですが、-saveがないと、 既にない前回のローカル変数の値を読み込もうとして、 何らかのゴミがたまってしまうのかもしれません。  いずれにしろ、今回のメモリ上昇の原因は -saveオプションの有無だったようです。 【謝辞】島根県・田中氏をはじめとする何人かの ユーザーの方から、この現象についてお知らせいただきました。 特に田中氏には必要メモリー量を詳しく調査していただきました。 また対応策はSSL・杉田氏によるものです。お礼を申し上げます。