TL;DR
sudo apt install valgrind-mpi
内存泄漏和越界问题,是C/C++程序常见问题。有一些工具提供了检测内存泄漏的功能,如 valgrind 的 memchecker。
其工作原理大致是这样的:通过替换掉可能分配内存的函数,来追踪内存使用情况,典型如重载 malloc/free。当然,这也就意味着,栈上分配的静态数组越界是无法检测到的。
valgrind最早用于单进程内存检测,但是后续也提供了多进程支持,如MPI。
对于启用valgrind的MPI支持,网上给出的大多是手动编译,添加链接库的方式,比较麻烦,这里提供一种简单方案。
我们使用包管理器提供的预编译好的版本。
安装valgrind:
sudo apt install valgrind
然后查看系统中此时是否提供了mpiwrapper:
ompi_info | grep mpi
输出为空,默认没有提供mpiwrapper,通过以下命令安装:
sudo apt install valgrind-mpi
再次执行命令查看,可以看到:
libmpiwrap-amd64-linux.so
mpi支持库已经安装。
ps:
常见问题测试样例和检测命令,可参考@Madcola Linux下内存问题检测神器:Valgrind。
系统环境:
- Ubuntu 18.04 LTS
- Open MPI v4.0.4