在 CentOS 上运行 Fortran 程序“感觉慢”,通常不是语言本身的问题,而是环境、编译方式或系统配置导致的。下面按常见原因给你梳理一下:
很多人在 CentOS 上直接这样编译:
gfortran test.f90 -o test
这样生成的是无优化、含调试信息、未向量化的可执行文件,速度会非常慢。
✅ 正确做法(生产/计算用):
gfortran -O2 -march=native test.f90 -o test
或更高优化:
gfortran -O3 -march=native -ffast-math test.f90 -o test
说明:
-O2/-O3:开启优化-march=native:针对当前 CPU 指令集(AVX/AVX2 等)-ffast-math:科学计算常用(牺牲一点精度换速度)CentOS 7 默认:
CentOS 8 / Stream 稍好,但也不新。
✅ 解决方案:
yum install devtoolset-11
scl enable devtoolset-11 bash
ifort test.f90 -O3 -xHost
(Intel 编译器在数值计算上通常比 gfortran 快 20%~50%)
CentOS 默认可能启用 节能调度:
cpupower frequency-info
如果显示:
governor = powersave
程序会跑得很慢。
✅ 改为性能模式:
cpupower frequency-set -g performance
或(CentOS 8):
systemctl disable tuned
如果你自己写矩阵运算,而不用优化库:
do i = 1, n
do j = 1, n
c(i,j) = a(i,k) * b(k,j)
end do
end do
这会比库慢 10~100 倍
✅ 使用优化库:
编译示例:
gfortran test.f90 -L/usr/lib64 -lopenblas -O3
如果你的程序是并行的,但:
速度会很差。
✅ OpenMP 示例:
gfortran -fopenmp -O3 test.f90
运行前:
export OMP_NUM_THREADS=8
很多“Fortran 慢”其实是:
✅ 建议:
Fortran 本身速度跨平台基本一致,差别来自:
你可以对照看看:
-O2/-O3如果你愿意,可以把:
发出来,我可以直接帮你定位“到底慢在哪”。