0

我是 Fortran 的第一次用户,我正在通过采样随机数(抑制输出)对 Fortran 与 Matlab 的基本性能进行比较。使用 MWE,在 Fortran(.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 twister PRNG,而 gfortran 使用 George Marsaglia 的 KISS PRNG。

于 2012-07-21T09:49:35.480 回答