我是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倍。目前看来,这是预期的结果吗?
答案 0 :(得分:4)
正如IanH指出的那样,你实际上在比较单精度和双精度。如果我将Fortran代码更改为双倍精度,我会得到额外的~2x减速。
速度差异的原因可能是Matlab和gfortran使用不同算法的不同实现:Matlab使用Mersenne twister PRNG,而gfortran使用George Marsaglia的KISS PRNG。