Contents

Ch27-Fortran 编程

Fortran 是一种适应数学表达、高性能科学计算的成熟、免费语言,这是它的特色。

随着 Fortran-lang 社区的努力,Fortran 迎来复苏迹象,作者看好这种发展,虽然 Fortran 也存在一些问题:

  1. 开源社区生态小,开发者少;
  2. 语法糖少,语言标准迭代缓慢且不一定具有流行性。

我常使用以下工具链软件:

  1. GNU Fortran
  2. GDB
  3. VS Code
  4. Meson
  5. FORD
  6. Git
  7. Intel VTune Profiler
  8. Intel oneAPI 组件

备注:华为是为数不多的涉及高性能编译器的国内公司之一

27.1 fpm 与 meson

fpm 目前还不够成熟,主要表现在对外部链接的支持上,meson 则相对更成熟。

这是我写的《Fortran中文手册》

27.1.1 Fpm-更适合小型代码

1
2
fpm new my_project
fpm run

27.1.2 Meson-更适合大型代码

使用 meson、CMake、GFortran 等工具,可以方便在远程服务器(Linux、Windows-MSYS2)上使用编译环境。

1
2
3
4
meson init --language=fortran --version=0.1.0 --build --name=myproject
meson setup build
meson compile -C build
meson devenv -C build

27.2 包复用的基础

  1. 容易获取,如采用通用获取手段;
  2. 社区官方持续支持;
  3. 接口简单、文档健全。

27.3 Windows 下 使用 CMake 和 MSYS2-GFortran 链接 oneMKL

这类需求一般很少,我曾尝试为 Stdlib 链接 oneMKL ,只是记录下来。Windows 下其实是可以使用 GFortran 链接 oneMKL 的,原因是 oneMKL 中的 BLAS 是 C 接口或者 Fortran77 写的。

  1. 首先,下载和启动 oneMKL 环境变量。
    1
    
    &"D:\Program Files (x86)\Intel\oneAPI\setvars.bat"
    
  2. 设置 CMake 查询 MKL
    1
    2
    
    find_package(MKL)
    target_link_libraries(${PROJECT_NAME} ${MKL_LIBRARIES})
    

27.4 CMake 的常用命令

1
2
3
4
cmake -B build -S . -DCMAKE_INSTALL_PREFIX=/usr/local
cmake --build build
ctest --test-dir build --parallel
cmake --install build

27.5 Git 补丁使用

1
2
git diff > 1.patch  # 注意 PowerShell 可能会使用 UTF-16 编码
git apply 1.patch

27.6 Gprof 教程

gprof 是 GCC 提供的一个工具,用于分析程序性能。在 Windows 下使用 MSYS2 的 gprof 命令行工具需要额外添加 -no-pie 选项。

  1. 在使用 GCC 编译的程序中启用编译选项 -pg (MSYS2 下需要额外添加 -no-pie);
  2. 运行程序;
  3. 使用 gprof 命令分析程序性能:
    1
    
    gprof mian.exe gmon.out > gprof.txt
    
1
2
3
4
5
6
7
8
9
subroutine test
    print *, "Hello, world!"
end subroutine

program main

call test

end program