在 Ubuntu 下使用 Fortran 进行性能优化,通常可以从编译选项、代码编写、并行化、系统调优几个层面来做。下面按实用程度整理一份优化清单。
推荐:
安装 gfortran:
sudo apt update
sudo apt install gfortran
gfortran -O3 -march=native -funroll-loops -ftree-vectorize prog.f90 -o prog
常用参数说明:
-O2 / -O3:优化级别-march=native:针对本机 CPU 优化(很重要)-funroll-loops:循环展开-ffast-math:牺牲一点精度换速度(科学计算常用)-fopenmp:开启 OpenMP示例(高性能):
gfortran -O3 -march=native -ffast-math -funroll-loops prog.f90
ifx -O3 -xHost -qopenmp prog.f90
implicit none
防止类型错误和性能损失。
✅ 好:
a = b + c
❌ 差:
do i = 1, n
a(i) = b(i) + c(i)
end do
示例(矩阵按列优先):
do j = 1, n
do i = 1, m
a(i,j) = ...
end do
end do
contiguous 数组real, contiguous :: a(:,:)
allocate / deallocate!$omp parallel do
do i = 1, n
a(i) = b(i) * c(i)
end do
!$omp end parallel do
编译:
gfortran -O3 -fopenmp prog.f90
运行:
export OMP_NUM_THREADS=8
./a.out
适合大规模计算:
sudo apt install mpich
mpif90 prog.f90
mpirun -np 4 ./a.out
使用 optimized BLAS / LAPACK:
sudo apt install libopenblas-dev
编译时链接:
gfortran prog.f90 -lopenblas
✅ 矩阵运算可提速数倍到数十倍。
lscpu
sudo apt install cpufrequtils
sudo cpufreq-set -g performance
有时关闭超线程反而更快(看应用)。
gfortran -pg prog.f90
./a.out
gprof a.out gmon.out
sudo perf record ./a.out
sudo perf report
gfortran -O3 -march=native -ffast-math \
-funroll-loops -fopenmp \
main.f90 -lopenblas -o sim
-O3 -march=native如果你愿意,可以把:
发出来,我可以帮你针对性优化代码。