お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-07-19 01:46:17

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

コンパイラのマシン依存性は存在するのか?

以下の条件(条件(1))で,分子動力学計算プログラム AMBER9 をコンパイルして使おうとすると,
Segmentation Fault で落ちてしまいます.
★条件(1)
* OS : Ubuntu 10.04 の amd64 サーバエディション
* CPU: Intel(R) Core(TM)2 Quad CPU    Q9550  @ 2.83GHz
* メモリ: 8 GB
* コンパイラ: gfortran, gcc, g++, cpp?
* 結果: 使えない

Segmentation Fault で落ちるだけならば問題なかったのですが,
別のマシン(条件(2))でコンパイルすると普通に使えました.
★条件(2)
* OS : Ubuntu 10.04 の amd64 サーバエディション
* CPU: Dual-Core AMD Opteron(tm) Processor 1210
* メモリ: 2.5 GB
* コンパイラ: 条件(1)と同じ
* 結果: 使える

また,OS が異なる場合(条件(3))も試したところ,普通に使えました.
★条件(3)
* OS: Ubuntu 9.04 の amd64 サーバエディション
* CPU: 条件(1)と同じ
* メモリ: 条件(1)と同じ
* コンパイラ: gfortran, gcc, g++, cpp? (バージョンは条件(1)と異なる)
* 結果: 使える

この条件(3)より,このプログラムが,このマシンで使えないことはないと思うのですが….

このように,OS とコンパイラが一緒で(条件(1)と条件(2)),結果が違うということは起こり得るのでしょうか?
また,これに対し,何か解決方法はあるのでしょうか?

宜しくお願いします.

オフライン

 

#2 2010-07-19 08:33:21

hmatsue
アドバイザ
登録日: 2009-03-10

Re: コンパイラのマシン依存性は存在するのか?

http://ambermd.org/
http://www.conflex.co.jp/prod_amber.html
のものでしょうか。
ぱっとみただけではよくわかりませんでしたが、AmberToolsという追加パッケージをコンパイルしようとしているのでしょうか。あるいは、シミュレータ(?)か数値計算プログラム(?)本体のコンパイルをしようとしているのでしょうか。

このあたりでopteron(amd64)向けにコンパイルしようとして、苦労している雰囲気のやりとりが見つかりましたが、コンパイルオプションは適切に設定されていますでしょうか。
http://archive.ambermd.org/200805/0216.html
上記のやりとりを見た感じでは32bit版としてコンパイルした方が簡単そうに聞こえます。

また、コンパイル時や、make時にエラーやワーニングがでていたりしないでしょうか。インストールマニュアルなどを参照して、コンパイル要件(ライブラリやビルドツールなど)を確認してみて下さい。

あとは、実行プログラムに対してlddを実行して、ライブラリに不足が無いか確認するのもよいでしょう。

オフライン

 

#3 2010-07-19 11:45:41

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: コンパイラのマシン依存性は存在するのか?

hmatsue 様
返信ありがとうございます.

何とか解決しました.

インストールパッケージは,Amber9 の本体(計算プログラム)でしたが,
Segmentation Fault が起こるプログラムは,Ambertools に含まれており,
Ambertools の最新版をコンパイルしたところ,問題なく使えることがわかりました.

返信から解決の糸口に繋がりました.
本当にありがとうございました.

オフライン

 

#4 2010-07-19 11:52:45

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: コンパイラのマシン依存性は存在するのか?

問題は解決しましたが,根本的な問題(マシン依存性)については未だわかっておりません.

後学のため,この問題についてどなたか教えて戴けると幸いです.

マシンA + Ubuntu 10.04 = 使えない … 条件(1)
マシンA' + Ubuntu 10.04 = 使えない … 条件(1)'
マシンB + Ubuntu 10.04 = 使える … 条件(2)
マシンA + Ubuntu 9.04 = 使える … 条件(3)
マシンA' + Ubuntu 9.04 = 使える … 条件(3)'

※マシンAとマシンA'は同じスペックのマシン.
※いずれも 64bit Server.
※インストール方法はいずれもマニュアルにある通り.

宜しくお願いします.

オフライン

 

#5 2010-07-19 12:07:18

hmatsue
アドバイザ
登録日: 2009-03-10

Re: コンパイラのマシン依存性は存在するのか?

ちょっと自分には分かりそうにありませんが、

コンパイルの手順、入力コマンドの詳細((あれば)./configure実行時の引数や、make実行時の引数など)
インストール済みの関連ライブラリ
(あれば)./configure実行時の出力ログ、make実行時の出力ログ

などの情報が無いと、なかなか、フォローが付きにくいのではないかと思います。

オフライン

 

#6 2010-07-19 15:44:44

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: コンパイラのマシン依存性は存在するのか?

コンパイルの手順は
1. AMBER9.TGZ を解凍する.

コード:

$ tar zxvf AMBER9.TGZ

2. .bashrc 内で指定する.

コード:

$ vi ~/.bashrc

コード:

export AMBERHOME=~/amber9
export PATH=$PATH:$AMBERHOME/exe

コード:

$ . ~/.bashrc

2. http://ambermd.org/bugfixes90.html からパッチをダウンロードし,当てる.

コード:

$ wget http://ambermd.org/bugfixes/9.0/bugfix.all
$ cd $AMBERHOME
$ patch -p0 -N -r patch_rejects < ~/bugfix.all

3. Makefile を書き換えて,xleap (GUI) をコンパイルしないようにする.

コード:

$ cd src
$ vi Makefile

  32行目 「cd leap; make install」→「# cd leap; make install」
  38行目 「# cd leap/src/leap; make -f Makefile.tleap install」→「cd leap/src/leap; make -f Makefile.tleap install」
3. configure で gfortran を指定する.

コード:

$ ./configure gfortran
[ログ取得] $ ./configure > configure.log

4. コンパイルする.

コード:

$ make serial
[ログ取得] $ make serial > make.log 2> make_err.log

で,マシンB(条件(2)),及びマシンA(条件(3))では使えました.
マシンA(条件(1))で,tleap が Segmentation Fault します.

マシンAのログ http://www.box.net/shared/3hri3azl1f
マシンA'のログ http://www.box.net/shared/f4x3rvbve3
マシンBのログ http://www.box.net/shared/txpab32z1y

ldd を tleap に対して行なった結果も静的リンクを用いているためか,not a dynamic executable としか表示されませんでした.

以上,宜しくお願いします.

オフライン

 

#7 2010-07-19 22:19:51

hmatsue
アドバイザ
登録日: 2009-03-10

Re: コンパイラのマシン依存性は存在するのか?

hellfire による投稿:

[ログ取得] $ make serial > make.log 2> make_err.log
で,マシンB(条件(2)),及びマシンA(条件(3))では使えました.
マシンA(条件(1))で,tleap が Segmentation Fault します.

マシンAのログ http://www.box.net/shared/3hri3azl1f
マシンA'のログ http://www.box.net/shared/f4x3rvbve3
マシンBのログ http://www.box.net/shared/txpab32z1y

ldd を tleap に対して行なった結果も静的リンクを用いているためか,not a dynamic executable としか表示されませんでした.

とりあえず、ログだけ比較してみましたが、特に違いは無かったですね。。
あとはデバッグモードでコンパイルして、デバッガに食わせて、どこで落ちているのか見ていくぐらいしかないかもです。
が、申し訳無いですが、具体的な操作については詳しくは知らないため、有効なアドバイスはできそうにありませんです。

オフライン

 

Board footer

Powered by FluxBB