Fortran プログラムの移植における問題点
English version is here.
これらの RPM の作り方に興味のある方は、 ここ をご覧下さい。
これらの RPM のインストールは
で終わりです。
注意:インストールは Update4 についてきた
gcc の三組み (C, C++, and Objective C) を上書きする形になります。
結果として、標準コンパイラー環境を壊す危険があります。
インストールは自己責任でお願いします。
事前に これ
をお読み下さい。
real*4 a, b, c a = 1. b = 2. c = a + b print *, ' a, b, c = ', a, b, c end
のようなものだったら、あわてずにまず /etc/ld.so.conf があるかどうか 確かめます。
なかったら、例えば次のようにして作ります。
ここで "^D" は CTRL+d の事です。 ひとたび /etc/ld.so.conf ができたら
として、システムに libf2c.so を認識させてあげればいいわけです。 本来は RPM に/usr/lib/libf2c.so へのシンボリックリンクを含めるべき だった(実は大阪大学の松村さんに指摘されるまで含めていたつもり だった)のですが、忘れました。すみません、今度のバージョンでは忘れずに 入れます(12/07/97: 2.7.2.fu.1-1C では入れました)。 libf2c.so を認識させることが出来たら、 ここでもう一度 simpletest を試して下さい。
残念ながらこれが失敗したら、あるいは、そもそも最初のエラーメッセージが全然別の
ものだったならば、深刻な問題です。
この場合には、
とりあえず、もとの gcc 三組み (gcc-2.7.2.1-2J.ppc.rpm, gcc-c++-2.7.2.1-2J.ppc.rpm, gcc-objc-2.7.2.1-2J.ppc.rpm)
を、DR2.1update4 の RPMS/ppc
ディレクトリーから復旧します。
その上で、g77 を以下の手順で
ソース(SRPM).
から作りなおしてみて下さい。
こんなことしなくて良いことを、願っております。また、これには 相当時間がかかります。
さて、この簡単なテストにパスした場合には、もっと複雑なプログラムに 挑戦できるわけです。 すると、私の場合そうであったように、色々問題もでてくると 思われます。
ただし私の場合、この情報を入手した時にはポーティングをほぼ終了していました。 data_、time_、等々の組み込み関数は適当にでっち上げました。 例はここにあります。
複素数を扱うプログラムでは、Statement Function の 使用を避けた方がよいでしょう。どうしても使いたいときは 最適化をせずにコンパイルしなくてはいけません。
この問題は、g77-0.5.21 以降では解決済みです。 従って、特に DR3 標準の egcs-1.0 以降の場合には解決されています。
の断面積を計算するプログラムで、 トップクォークのボトムクォークと他のフェルミオン対への 崩壊までを含めて計算します。
これは、スピンや終状態の選択、始状態の輻射、 ビームストラールング等を含む21次元積分です。 散乱振幅は HELAS(HElicity Amplitude Subroutines) で、また、モンテカルロ積分は BASES/SPRING で行っております。
BASES の部分では、荷重サンプリング法で 断面積のモンテカルロ積分を行い、 SPRING の部分は、その結果に基づいて 重み1のイベントを発生させます。 モンテカルロ積分は2ステップで行われます。 グリッドの最適化のステップと 統計を稼ぐための accumulation ステップです。 グリッド最適化のステップでは、 アイテレーション毎に 積分空間の中のハイパーキューブと そのサブメッシュ(グリッド)の大きさが 積分誤差を最小にするように 調整されます。 accumulation ステップではグリッドは固定で ひたすら統計をため積分精度を上げます。
この例では、各アイテレーションは 積分空間内での 20000 サンプルからなり、 グリッドの最適化に5回、統計を稼ぐのに 50回のアイテレーションをしています。
SPRING のステップでは、 JLCの 簡易測定器シミュレーターも含めており、 荷電粒子の飛跡検出や、カロリメータの信号生成 なども行っております。
各アイテレーションはやはり 20000 サンプルからなり、 グリッド最適化に5回、統計稼ぎに 10回のアイテレーションをしています (TT_GEN と比べて積分精度が必要でなかったので こうなっています)。
プログラムは、終状態に応じて、 8ジェット(8J)終状態用と 1レプトン+6ジェット(L+6J)終状態用の 2つの別々のプログラムからなっています。
C100 (HP-UX) | 8115/100 (MkLinux) | |
TTH_GEN:BASES |
140.73 sec (2.94834 +/- 0.00927 fb) |
850.05 sec (2.94811 +/- 0.00927 fb) |
TTH_GEN:SPRING |
402.19 sec (output data: 35MB) |
813.35 sec (output data: 35MB) |
TTH_ANL: 8J | 218.53 sec | 435.08 sec |
TTH_ANL: L+6J | 166.2 sec | 306.2 sec |
TT_GEN:BASES |
410.27 sec (0.40153 +/- 0.00061 fb) |
2485.85 sec (0.40153 +/- 0.00061 fb) |
TT_GEN:SPRING |
103.62 sec (output data: 5.6MB) |
244.45 sec (output data: 5.6MB) |
ここで、重心系のエネルギーは TTH(TT) に対して 700(340)GeVで、トップクォークの質量は 170GeVにしてあります。 SPRING のステップでは1000(200)イベント生成しました。 TT 生成は、しきい値補正の入った計算なので、しきい値でも 有限の断面積がある点に注意して下さい。