用MPI进行Clang静态分析

时间:2015-09-07 22:24:19

标签: c++ clang mpi static-analysis clang++

我想使用Clang's static analyzer来分析并行代码,即需要MPI编译器包装器的代码。 但是,使用CMake进行配置时,我总是得到

$ scan-build cmake /path/to/source
-- Check for working CXX compiler: /usr/share/clang/scan-build/c++-analyzer
-- Check for working CXX compiler: /usr/share/clang/scan-build/c++-analyzer -- works

并且随后的编译(make)失败并带有

/usr/include/some/header.hpp:56:17: fatal error: mpi.h: No such file or directory

#include" mpi.h"

如何正确使用scan-build

3 个答案:

答案 0 :(得分:2)

我还没有找到一种方法直接使用scan-build使用MPI编译器包装器。但是,您可以绕过包装器并手动将标志提供给编译器。例如这适用于我的环境:

$ export CXXFLAGS=`mpicxx --showme:compile`
$ export LDFLAGS=`mpicxx --showme:link`
$ export CXX=`mpicxx --showme:command`
$ scan-build ./configure && scan-build make #Or your cmake equivalent

--showme:标志在版本之间似乎略有不同,但mpicc --showme:help通常会为您提供特定包装器支持的命令列表。

答案 1 :(得分:1)

请参阅MPI-Checker/examples

  

要调用Clang Static Analyzer,建议使用   用Python实现的scan-build包。你可以使用   脚本包含在LLVM中继中   (llvm/tools/clang/tools/scan-build-py/bin)或安装脚本   与pip install scan-build。请注意,在make install LLVM上复制旧版本   Perl版本的脚本/usr/local/bin因此可能   覆盖与pip一起安装的版本。

     

由于MPI包装器编译器干扰了扫描构建脚本,因此   建议根据编译数据库调用分析,   由intercept-build (make|ninja|...)生成。请注意数据库   由CMake生成的可以与拦截构建生成的不同。   如果compile_commands.json文件表示使用mpicc | mpic ++   编译器,不会发出任何报告。

     

创建编译数据库后,可以触发分析   用:
analyze-build --enable-checker your.check --use-analyzer /path/to/clang

答案 2 :(得分:0)

你需要为你的c编译器安装一个MPI包装器。这意味着使用CLang编译的MPI库。完成后,您需要在构建环境中将c编译器设置为mpicc。这应该为您提供正确的包含和链接选项。