0

私は Fortran の初めてのユーザーであり、乱数 (抑制された出力) をサンプリングすることにより、Fortran と Matlab の基本的なパフォーマンス比較を実行しています。Fortran で MWE を使用する場合 (.f95 ファイル):

program main
  real(4) :: r
  integer i
  do i = 1,50000000
    call random_number(r)
  enddo
end program main

MATLAB (.m ファイル) では:

for i = 1:50000000
  rand();
end

gfortran (v4.5.3) を使用して Fortran コードをコンパイルすると、実行可能ファイルは MATLAB (r2011b) コードよりも約 3 倍遅くなります。現状では、これは期待される結果ですか?

4

1 に答える 1

4

IanHが指摘したように、実際には単精度と倍精度を比較しています。Fortranコードを倍精度に変更すると、さらに最大2倍の速度低下が発生します。

速度の違いの理由は、Matlabとgfortranが異なるアルゴリズムの異なる実装を使用しているという事実です。MatlabはMersenneツイスターPRNGを使用しますが、gfortranはGeorgeMarsagliaのKISSPRNGを使用します。

于 2012-07-21T09:49:35.480 に答える