Intel Fortran编译工具ifort和ifx

2024-11-30
#Fortran #Parallel

注意⚠️:

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 工具包包括了IFORTIFX

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

5. 延伸阅读

  1. Intel® Fortran Compiler Developer Guide and Reference
  2. Intel® Fortran Compiler for oneAPI Release Notes
  3. Get Started on Linux