You need to enable JavaScript to run this app. 如何使用DataRaceBench 1.3.2检测自定义Fortran代码的数据竞争
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DataRaceBench 1.3.2检测自定义Fortran代码的数据竞争

已安装工具的基础作用
  • ThreadSanitizer(TSan):谷歌开发的运行时数据竞争检测工具,支持OpenMP、Pthread等并行模型,编译时插桩,运行时捕捉内存访问冲突,误报率较低但会带来数倍的运行开销
  • Archer:基于LLVM的OpenMP专属数据竞争检测工具,结合了静态分析和TSan的运行时检测能力,针对OpenMP语义做了优化,比原生TSan检测OpenMP程序的效率和准确率更高
  • ROMP:专门针对OpenMP程序的运行时竞争检测工具,不需要编译插桩,通过动态插桩实现,开销比TSan低,适合大规模OpenMP程序的检测
  • Coderrect Scanner:静态+动态混合并行程序错误检测工具,支持Fortran、C、C++的OpenMP、MPI等模型,可直接扫描代码输出潜在竞争点,不需要运行程序
适配你的poisson_openmp.f90代码的测试流程

不用把代码硬套进DRB自带的测试集,有两种测试方式可选:

方式1:直接用单个工具测试(最简单)

无需调用DRB的脚本,直接用安装好的工具编译运行你的代码即可,比如用Archer测试Fortran OpenMP代码的命令如下:

# 用Archer编译器编译你的代码
archer poisson_openmp.f90 -o poisson -fopenmp
# 运行程序即可自动检测数据竞争
./poisson

方式2:纳入DRB框架测试(方便对比多工具检测结果)

如果你需要用DRB统一调度多个工具测试、生成统一格式的报告,按如下操作:

  • 把你的poisson_openmp.f90放到DRB仓库的micro-benches/fortran/openmp目录下
  • 修改同目录下的Makefile,参考现有测试用例的规则,添加你的代码的编译规则
  • 打开DRB根目录的list.def,删除原有内容,填入你新增的测试用例名,比如poisson_openmp.f90
  • 打开tool.def,填入你要用来测试的工具名,比如romp archer tsan coderrect
  • 运行如下命令启动测试:
./check-data-races.sh --customize

测试完成后DRB会自动统计每个工具检测到的竞争数量、误报漏报情况,如果需要自动统计准确率,你可以参考现有测试用例的注释格式,在你的代码里标注是否有预期竞争即可。

check-data-races.sh常用用法说明
  • 用ROMP工具运行全量Fortran测试用例:./check-data-races.sh --romp fortran
  • 用ThreadSanitizer运行全量C测试用例:./check-data-races.sh --tsan c
  • 查看所有可用参数:./check-data-races.sh --help
  • 按list.def和tool.def的配置自定义运行测试:./check-data-races.sh --customize
关于容器的说明

DRB官方提供的容器是预装了所有依赖工具、DRB环境的镜像文件,不需要手动安装TSan、Archer等工具,直接拉取镜像就能运行所有测试,你已经手动安装好所有工具的话不需要再使用容器。

内容的提问来源于stack exchange,提问作者hakim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 07:45:03