英特尔Pin工具预计的时间开销

时间:2014-09-15 14:42:57

标签: performance instrumentation intel-pin

我正在编写一个Pin工具,它似乎增加了大量的时间开销 我的工具必须以指令的粒度来检测程序。

为了检查开销源,我写了一个小的Pin工具,它只是通过仪器计算每条指令的指令(正如我必须在我的工具中那样)。

另外我写了一个简单的程序来检查注册表值(C代码大约是20行)。

(在i7 CPU,Windows 7上运行)
运行简单程序时,几乎可以立即返回 当运行Pin工具init和没有任何仪器的程序时,它需要2.35 + - 秒
使用简单的指令仪器运行Pin工具时需要5-6秒左右 说明书数量:3,107,098。

我也尝试过一个更复杂的代码,一个循环遍历递归函数的程序。

没有Pin需要大约1分钟 使用Pin(仅计算指令)大约需要7分钟 指示数量为:1,850,919,077

这是预期的开销吗?

1 个答案:

答案 0 :(得分:2)

如果不知道你正在做什么样的仪器,那么这些数字是否可以预测真的是不可能的。然而,当涉及到PIN的开销时,有许多因素需要考虑。

如果您的分析代码(传递给* _InsertCall的函数指针)包含对其他函数,循环或条件语句的调用,则可能需要上下文切换。这会大大增加工具的执行时间。如果您阅读了PIN用户指南,我很确定会对此进行简要讨论,在发布的有关PIN的文章中也会提及。

另一个可能更容易理解的因素是,您添加的分析代码至少会导致执行时间的增加等于编译的分析代码中的指令数量,假设您正在检测关于指令的粒度。如果分析代码中存在循环,这当然会增加更多。 (这有点简化,因为我假设每条指令都需要相同的时间才能执行。)

由PIN引起的减速可以从2倍(相当于理论上的减速)到数万倍。如果你的工具只导致减速7倍,我会说速度非常快。