在 CentOS 上感觉 Fortran 程序“速度慢”,通常不是语言本身的问题,而是编译方式、系统环境或对比基准导致的。下面按常见原因系统说明。
很多人在 CentOS 上这样编译:
gfortran test.f90 -o test
这是 无优化模式(O0),速度会非常慢。
✅ 正确做法:
gfortran -O2 test.f90 -o test
# 或
gfortran -O3 -march=native test.f90 -o test
-march=native 会启用 CPU 的 SIMD 指令(AVX / AVX2 等),性能可能差几倍。
CentOS 7 / 8 默认的 gfortran 版本很老:
| CentOS | gfortran 版本 |
|---|---|
| 7 | 4.8.5 |
| 8 | 8.x |
| 9 | 11.x |
老编译器:
✅ 解决方案:
# CentOS 7 示例
yum install centos-release-scl
yum install devtoolset-11-gcc-gfortran
scl enable devtoolset-11 bash
常见误解:
“Python 慢,Fortran 应该快”
但现实中:
✅ 如果你自己写循环:
那 Fortran 也可能“看起来慢”。
CentOS 默认:
✅ 强烈建议:
gfortran test.f90 -L$MKLROOT/lib -lmkl_rt
或:
yum install openblas-devel
gfortran test.f90 -lopenblas
矩阵运算可快 5–20 倍。
Fortran 的 write/read 如果格式不对,会非常慢。
❌ 慢:
write(*,*) a(i)
✅ 快:
write(10,'(F10.4)') a(i)
或者批量写:
write(10) a
(二进制)
CentOS 默认:
✅ 启用 OpenMP:
gfortran -fopenmp test.f90 -o test
!$omp parallel do
可能原因:
可用:
top
htop
nproc
lscpu
检查。
CentOS 上 Fortran “慢”,90% 是因为:
- 没开
-O2/-O3- 用了老编译器
- 没用 BLAS/MKL
- 单线程
- I/O 写法差
如果你愿意,可以:
我可以直接帮你定位并给出优化方案。