私は、MPIコードでFortran組み込みPRNGを使用しようとしています。^1024年2の期間があるfortran RANDOM_SEEDを並列で使用するMPI
のgfortranがxorshift1024使ってPRNGを実装し、私はこの linkから理解* - 1.それはまた言う:マルチスレッドプログラム(例えばでのOpenMPを使用していること
注意ディレクティブ)、 各スレッドは独自の乱数状態を持ちます。
その後thisを読んで、私が見つかりました:
0時これまでRANDOM_NUMBERを使用しているスレッドの 数であるシステム内の他のストリームを別名ないこと新しいスレッドが初めて RANDOM_NUMBERを使用して、シードはマスター 種子からコピーされ、保証にN * 2^512段階に転送されますランダム ストリームは、Nが プログラム実行
これがGFortranの自動機能であれば、OpenMPでのみ動作しますか? MPIを使用してパラレルPRNGを作成したいのですが?コードの他のコンパイラへの移植性をどうすれば保証できますか?
言い換えれば、GFortranが言うことを実行する方法(すなわち、実際の並列PRNGを保証する)は、Fortranの固有の命令を使用して移植可能な方法で実行できますか?
注:私はMPIで数値レシピのPRNGを使用していました。それは数年間はうまくいきましたが、数字レシピが言っている整数モデルのいくつかの前提にはいくつかの誤りがあります。これは解決方法がわかりません。内在PRNG可能であれば。
コンパイラ間での移植性/一貫性について気にするならば、 'random_number'(と' random_seed')には多くの問題があります。 – francescalus
* GFortranの言うことを実行する方法はありますか?Fortranの組み込み命令を使用して移植可能な方法で実行していますか?*いいえこれは - http://stackoverflow.com/questions/8920411/possible-sources-for-乱数 - 種 - 有用かもしれません。 –
ご意見ありがとうございます。組み込み関数が移植可能でない場合、Numerical Recipesも(私の経験では)移植性がないようです。他にどのようなライブラリ、サブルーチン、メソッドをお勧めしますか? – alexis