在 Debian 上进行 Fortran 性能测试的流程
一 环境准备与基线构建
sudo apt update && sudo apt install -y gfortran build-essential linux-tools-common linux-tools-generic linux-tools-$(uname -r)。这将安装 gfortran 与 perf(内核性能采样工具)。如使用 OpenMP,还需安装 OpenMP 运行时:sudo apt install libomp-dev;如使用 MPI,安装 OpenMPI:sudo apt install libopenmpi-dev openmpi-bin。program timer_example
implicit none
real :: start_time, end_time, elapsed
integer :: i, n
real :: sum
n = 100_000_000
sum = 0.0
call cpu_time(start_time)
do i = 1, n
sum = sum + i
end do
call cpu_time(end_time)
elapsed = end_time - start_time
print '("Elapsed: ", F0.4, " s")', elapsed
end program timer_example
gfortran -O2 -o baseline timer.f90(先以 -O2 建立可复现的基线,后续再与 -O3/-Ofast 对比)。taskset -c 0-3 ./baseline(示例将程序绑定到 CPU 0–3)。重复运行 3–5 次取中位数作为代表值。二 核心性能测试方法与工具
sudo perf record -g ./baselinesudo perf report -g graph,0.5,callergfortran -pg -O2 -o profile timer.f90./profile(生成 gmon.out)gprof profile gmon.out > gprof.txtvalgrind --tool=cachegrind ./baseline,可用 cg_annotate 或图形化工具查看每行/函数的缓存行为。valgrind --tool=callgrind ./baseline,配合 KCachegrind 可视化热点与调用关系。valgrind --tool=massif ./baseline,查看峰值堆与分配栈。valgrind --tool=memcheck ./baseline,排查越界、未初始化、泄漏等(性能测试前先保证正确性)。gfortran -O3 -fopenmp -o omp_app omp_app.f90,运行 OMP_NUM_THREADS=4 taskset -c 0-3 ./omp_app,并用 perf/top/htop 观察 CPU 占用与伸缩性。mpif90 -O3 -o mpi_app mpi_app.f90,运行 mpirun -np 4 --bind-to core ./mpi_app,检查强/弱扩展与通信开销。三 结果记录与对比
| 构建配置 | 工具/命令 | 关键指标 | 代表值 | 备注 |
|---|---|---|---|---|
| baseline | ./baseline |
Elapsed(s) | 1.234 | 固定 CPU 亲和,重复 5 次取中位数 |
| O3 | gfortran -O3 |
Elapsed(s) | 0.987 | 与 baseline 对比 |
| OMP 4T | OMP_NUM_THREADS=4 |
Elapsed(s), Speedup | 0.321, 3.85x | 检查线程绑定与负载均衡 |
| MPI 4P | mpirun -np 4 |
Elapsed(s), Efficiency | 0.298, 0.96 | 强扩展效率 |
四 自动化与持续集成
#!/usr/bin/env bash
set -e
make clean
make baseline
taskset -c 0-3 ./baseline
make omp
OMP_NUM_THREADS=4 taskset -c 0-3 ./omp_app
make mpi
mpirun -np 4 --bind-to core ./mpi_app
.gitlab-ci.yml 中覆盖不同编译器与并行特性,统一以脚本退出码作为质量门禁,确保本地与 CI 一致:image: debian:stable-slim
before_script:
- apt-get update -qq && apt-get install -y -qq gfortran libopenmpi-dev openmpi-bin libomp-dev make
build:
script:
- make
test:
script:
- ./run_tests.sh
五 常见问题与优化提示