用于MPI并行应用程序的高级内存检查框架
1. 调试工具概述
在MPI并行应用程序开发中,调试工具对于发现和解决内存相关问题至关重要。下面介绍两种常用的调试工具:Valgrind和Intel Pin。
1.1 Valgrind
Valgrind是一套可用于x86/x86 - 64和PowerPC32/64兼容架构的静态和动态二进制可执行文件的工具套件。它通过在二进制级别拦截应用程序的执行并解释指令来工作。其系统核心提供了一个合成CPU,应用程序启动时,Valgrind会“捕获”真实CPU,让机器代码在其合成CPU上运行,同时从可执行文件及其关联库中读取调试信息。
Valgrind解析器使用的特殊指令前导码能检测控制工具的命令,在x86架构中,使用右旋转指令ror旋转32位寄存器edi,再通过寄存器交换指令(xchgl)编码实际要执行的命令,示例代码如下:
#define __SPECIAL_INSTRUCTION_PREAMBLE
\
"roll $3,
%%edi ; roll $13, %%edi\n\t" \
"roll $29, %%edi ; roll $19, %%edi\n\t" \
"xchgl %%ebx, %%ebx\n\t"
Memcheck是Valgrind工具套件中的重量级内存检查器,以跟踪内存定义到比特级别而闻名。它存储两种影子内存值,用于表示字节的可寻址性(A - Bits)和定义性(V - Bits),每个内存字节由9位(1个A位加8个V位)进行影子跟踪。Memcheck能检测不可寻址内存访问错误和未定义值的使用,如
超级会员免费看
订阅专栏 解锁全文
41

被折叠的 条评论
为什么被折叠?



