作成者 | 三浦謙一(国立情報学研究所リサーチグリッド研究開発センター) |
---|---|
登録者 | 三浦謙一(国立情報学研究所リサーチグリッド研究開発センター) |
登録日 | 2006-10-24 |
登録承認者 | |
動作条件 | 8バイト整数ハードウェアを要する,fortran |
概要 |
モンテカルロ法。周期(2^31-1)^8 の擬似乱数(倍精度浮動小数点)を指定された個数だけ発生し配列に出力する。8次の漸化式による擬似乱数ルーチンmrg8dnです。ソースコードとサンプルアウトプット(Fujitsu PrimePower HPC2500)を添付します。 (1)コンパイル時に8バイトの整数命令を使うオプションを指定する必要があります。PrimePower の場合は frt -KV9 mrg8v12.f となります。−KV9というのが8バイト整数のオプションです。 (2)mrg8dnの中でSeedの初期化のために、mcg64niという乗算合同法の乱数ルーチンを一度だけ呼ぶようになっていますのでこれも必要です。これはKnuthの本にmodulus = 2^64の場合の良いルーチンとして掲載されています。ここではmrg8dnが2^31-1以下の整数乱数しか内部であつかわないため32ビットのアウトプットをさらに右に1ビットシフトして31ビット長にしてあります。 (3)mrg8dn(iseed,ran,n)のパラメータは初期seed(正の4byte integer。0をいれると内部で値を代入)、乱数のアウトプット(double precisionの配列)、発生したい個数(4byte integer)です。 (4)最初に一回Callすると初期化がなされ、2回目以降はiseedは無視され、サブルーチン内に残っている最新のSeed(8要素)が使われます。 (5)このルーチンでは0は2^31-1で表現されているので、seedの値は1から2^31-1の間です。Normalizationした後では、0<=1。<x<=1。 (5)mrg8dnz2は全く同じ乱数を与えます。マシンによっては、こちらのほうがseedをコピーする回数が少ないので速いものもあるかもしれませんので、参考のため。(PrimePowerではmrg8dnの方が速かったです。) (6)タイマールーチンはFujitsu PrimePower HPC2500用のもので、call clock(t0,2,2) のt0のtypeはdouble precisionで、2,2はマイクロ秒単位でdouble precisionの値を返すことを示します。同等のルーチンで置き換えて下さい。ただし計測時間が短いのであまり粗い精度のタイマーだと計測値の誤差に影響を与えます。 10-24-06 NII 三浦 サンプル出力はこちら 性能データはこちら(PowerPoint文書) |
作成者 | 中村孝(航空宇宙技術研究所CFD技術開発センター) |
---|---|
登録者 | 中村孝(航空宇宙技術研究所CFD技術開発センター) |
登録日 | 2003-05-14 |
登録承認者 | |
動作条件 | MPIが使える環境(FORTRAN77+MPI) |
概要 | MPIによる並列化の例題。ラプラス方程式の差分解法プログラムのMPIによる並列版(帯分割)。ドキュメントなしなので、プログラムを読んでください。 ステップ数が少ないので、逐次版とMPI版を見比べてください。Keywords:MPI,Laplace,parellelizing |
作成者 | 中村孝(航空宇宙技術研究所CFD技術開発センター) |
---|---|
登録者 | 中村孝(航空宇宙技術研究所CFD技術開発センター) |
登録日 | 2003-05-13 |
登録承認者 | |
動作条件 | FORTRAN77 |
概要 | FORTRAN77のプログラミングの初歩とMPI並列の元。プロセス並列の業界標準となっているMPIを学習するための、例題 ソフトの大本プログラムラプラス方程式を差分方で解くプログラムの逐次版。ドキュメントなしなので、プログラムを読んでください。MFLOPS を計算するためには、時刻を知るルーチンが必要です。Keywords:laplace, serial programing |