优先使用gfortran(GNU Fortran Compiler,开源免费)或Intel Fortran Compiler(ifort)(商业版,性能更优)。通过编译器选项平衡编译时间与执行速度:
-O1(消除公共子表达式、简单循环优化),适合开发调试;-O2(增加循环优化、自动向量化),兼顾性能与编译时间;-O3(开启所有-O2优化+更激进的循环展开、向量化),适合追求性能但对编译时间不敏感的场景;-Ofast(-O3+放宽浮点标准,如允许不精确的除法),显著提升速度但可能影响精度(需测试验证)。gfortran -O3 -o myprogram myprogram.f90 或 ifort -O3 -o myprogram myprogram.f90。使用-march=native(gfortran/Intel)让编译器自动适配当前CPU的特性(如指令集、缓存大小),生成最优代码;Intel编译器还可搭配-xHost(等同于-march=native+更多优化)。示例:gfortran -march=native -o myprogram myprogram.f90。
通过-jN选项(make或编译器自带)启用多线程编译,N为并行任务数(建议设为CPU核心数)。例如,4核CPU可使用:make -j4 或 gfortran -j4 -O3 -o myprogram myprogram.f90,显著缩短编译时间。
对于计算密集型循环,使用OpenMP(共享内存并行)或MPI(分布式内存并行)加速:
-fopenmp选项,代码中用!$omp parallel do包裹循环;示例:gfortran -fopenmp -O3 -o myprogram myprogram.f90;mpif90编译器,适合大规模分布式计算。-funroll-loops(gfortran)或-unroll(Intel)自动展开循环,减少循环控制开销(可能增加代码大小)。示例:gfortran -funroll-loops -O3 -o myprogram myprogram.f90。避免重复实现复杂的数学运算,使用优化过的库:
gfortran -O3 -o myprogram myprogram.f90 -lblas -llapack。gprof(gfortran)或perf(Linux工具)定位瓶颈(如耗时函数、循环);allocatable数组复用内存)。-ftree-vectorize(gfortran)或-xHost(Intel)开启自动向量化,利用SIMD指令(如SSE、AVX)加速数组运算;-fno-protect(gfortran)禁用数组边界检查(牺牲安全性换取速度,仅用于稳定代码);-ipo选项,跨文件优化函数调用,提升大型项目性能。