Intel Fortran编译工具ifort和ifx
注意⚠️:
Intel® Fortran Compiler Classic (ifort) is discontinued as of this release (version 2025.0).1
1. 简介
-
Intel® Fortran Compiler Classic (IFORT):传统的 Fortran 编译器,支持经典的 Fortran 标准(如 Fortran 77、90、95、2003、2008)
-
Intel® Fortran Compiler (IFX):新一代基于 LLVM 框架的 Fortran 编译器,支持最新的 Fortran 标准(如 Fortran 2018 和未来版本)
Intel® oneAPI 工具包包括了IFORT和IFX。
2. ifort 选项
ifort 成熟:适合需要完全兼容现有 Fortran 代码的场景。
基础选项:
-c:只进行编译,生成目标文件(.o),不进行链接-o <filename>:指定生成的可执行文件名称-I<directory>:指定模块文件(.mod 文件)或头文件的搜索路径-L<directory>和-l<library>:指定库的搜索路径和链接库-static:生成静态链接的可执行文件,避免依赖动态库
优化选项:
-O0:关闭优化(默认设置,适合调试)-O1:基础优化,适合对编译时间敏感或有大量分支的代码-O2:通用优化(推荐),优化循环、不变代码外提、指令调度等-O3:高等级优化,适合需要最大化性能的程序,包括计算密集型程序、矢量化和内存访问优化-xHost:生成专为运行平台优化的代码,针对本地 CPU 的特定架构优化-ipo:启用跨文件优化(Interprocedural Optimization),进一步提升性能-fast:启用多项性能优化选项(-O3、-ipo、-xHost等)
并行化和矢量化选项:
-parallel:启用自动并行化功能,适合多核 CPU-qopenmp:启用 OpenMP 支持,需要代码中包含 OpenMP 指令-coarray:启用 Fortran Coarray 支持(需要 Fortran 2008 标准)-reduction:优化特定的并行循环归约操作-vec:启用矢量化优化(默认启用)-fma:启用 Fused Multiply-Add 指令以提升浮点计算效率(如果硬件支持)
调试选项:
-g:生成调试信息,用于 GDB 或 Visual Studio 调试。-traceback:在程序崩溃时生成函数调用堆栈信息,有助于定位问题-check:检查代码中的潜在问题-check all:启用所有检查(数组越界、未初始化变量等)-check bounds:检查数组下标越界-check uninit:检查未初始化变量
-warn:控制编译器警告-warn all:启用所有警告-warn none:禁用所有警告-warn unused:警告未使用的变量
语言标准相关:
-stand:检查代码是否符合特定的 Fortran 标准-stand f77:检查 Fortran 77 标准-stand f95:检查 Fortran 95 标准-stand f08:检查 Fortran 2008 标准
-free:以自由格式解析源代码(默认支持.f90文件)。-fixed:以固定格式解析源代码(默认支持.f文件)
高级选项:
-reentrancy:控制线程安全模式-reentrancy threaded:启用多线程模式-reentrancy none:关闭多线程模式
-heap-arrays:将大数组分配到堆中而不是栈中-fpp:启用 Fortran 预处理器,允许使用宏定义(类似于 C 的#define等)-module <dir>:指定生成的.mod文件存放路径
链接相关:
-shared:生成动态库(共享库)-static:生成静态链接的可执行文件-nolib-inline:禁用内联库代码优化
错误处理和诊断:
-diag-enable和-diag-disable:控制特定诊断信息的显示-diag-file <filename>:将诊断信息输出到指定文件
其他实用选项:
-qopt-report:生成优化报告,便于分析编译器的优化行为-save:将所有局部变量设为静态存储(与 Fortran 77 中的行为类似)-zero:将未初始化变量初始化为 0(仅用于调试)
3. ifx 选项
ifx 适合现代化应用:比如异构计算、GPU 支持和最新 Fortran 特性。基本选项同ifort。不同点如下:
优化选项:
-march=<arch>:针对指定架构优化(如x86-64,skylake,cascadelake等)-fma:启用 Fused Multiply-Add(硬件支持时),提升浮点计算性能
GPU 和异构计算:
-fsycl:启用 SYCL 支持,用于 oneAPI GPU 编程-offload=<device>:指定代码运行的目标设备(如cpu,gpu等)-fiopenmp-targets:针对 OpenMP target 并行运行,支持 GPU 或其他设备
语言标准相关:
-stand:检查代码是否符合特定的 Fortran 标准-stand f18:检查 Fortran 2018 标准(默认支持)-stand f08:检查 Fortran 2008 标准
预处理器选项:
-fpp:启用 Fortran 预处理器,支持宏定义等
其他实用选项:
-qopt-zmm:启用宽矢量寄存器优化(适合 AVX-512 支持的硬件)
4. 常用场景编译示例
开启调试模式:
ifort -g -traceback -check all source.f90 -o debug_program
生成高性能程序:
ifort -O3 -ipo -xHost source.f90 -o fast_program
并行化:
ifort -qopenmp -parallel -O3 source.f90 -o parallel_program
启用 OpenMP 并行:
ifort -qopenmp source.f90 -o parallel_program
检测潜在错误:
ifort -check all -warn all -g source.f90 -o safe_program
编译静态库:
ifort -c module1.f90 module2.f90
ar rcs libmylib.a module1.o module2.o
- 使用
-c编译为目标文件(.o)。 - 使用
ar创建静态库。
链接外部库:
ifort program.f90 -L/path/to/library -lmylib -o linked_program
-L:指定库路径。-l:链接库名称。
执行程序:编译完成后,运行生成的可执行文件
./output
调试代码:
ifx -g -traceback -check all source.f90 -o debug_program
性能优化:
ifx -O3 -ipo -xHost source.f90 -o optimized_program
启用 GPU 加速:
ifx -fsycl source.f90 -o gpu_program
生成共享库:
ifx -shared -o libmylib.so source.f90