在 CentOS 上运行 Fortran 程序“慢”,原因可能有很多种。下面按常见原因 → 对应解决办法给你一个排查清单,你可以逐条对照。
如果你是这样编译的:
gfortran test.f90 -o test
那基本是没优化的,运行会慢很多。
✅ 正确做法:
gfortran -O2 test.f90 -o test
或更高优化:
gfortran -O3 -march=native test.f90 -o test
如果是数值计算,推荐:
gfortran -O3 -march=native -ffast-math test.f90 -o test
⚠️
-ffast-math会牺牲一点精度,科学计算一般可接受
如果你用了:
-g
或者:
-fcheck=all
程序会慢很多。
✅ 线上运行要去掉:
gfortran -O3 test.f90 -o test
如果你的程序用了矩阵运算(如 matmul、解方程),默认可能是串行低效版本。
✅ 安装并链接优化库(强烈推荐):
sudo yum install openblas openblas-devel
gfortran test.f90 -o test -L/usr/lib64 -lopenblas
或者:
gfortran test.f90 -o test -lopenblas
如果你的程序是循环计算密集型:
✅ 启用 OpenMP:
gfortran -O3 -fopenmp test.f90 -o test
代码中加:
!$OMP PARALLEL DO
do i = 1, n
运行前设置线程数:
export OMP_NUM_THREADS=8
lscpu | grep MHz
如果频率很低:
sudo cpupower frequency-set -g performance
可临时测试:
getenforce
如果你的 Fortran 程序:
✅ 建议:
write 次数如果是:
那 Fortran 再快也有限。
✅ 解决:
# 1. 编译优化
gfortran -O3 -march=native test.f90 -o test
# 2. 看 CPU
nproc
lscpu
# 3. 看运行时间
time ./test
# 4. 是否用 OpenBLAS
ldd test | grep blas
你可以告诉我:
我可以直接给你最优编译参数和代码优化建议。