Intel Pin:测量空仪器开销
Intel Pin: measuring empty instrumentation overhead
我想测量我的 Pintool 如何使可执行文件的执行时间变差,如果它只是 "empty instrumentation"。
基本上,在我的 Pintool 中,我得到了一个回调,每次加载图像时都会调用它,反过来,它会插入特定例程的分析函数。
所以我正在考虑使用两种操作模式来测量 "empty instrumentation" 开销:
- 有一个空的图像回调函数,在加载每个图像时调用,而不是普通的
- 有空例程分析函数可以调用,而不是普通函数
这种方法可行吗?有没有我不知道的更好的解决方案?
Pin 执行了大量优化以生成非常高效的检测代码。特别是,空分析例程肯定会内联到应用程序例程中。 C/C++ 中的空函数很可能会被编译为一条指令(在 x86 上,它是某种形式的 ret
)。 Pin 可能能够识别并完全删除该指令,从而使您的检测为零。您可以通过比较没有任何检测的性能和有空分析例程的性能来确定 Pin 是否删除 ret
。如果差异为零,则很有可能 Pin 删除了指令。虽然据我所知没有记录。
我想测量我的 Pintool 如何使可执行文件的执行时间变差,如果它只是 "empty instrumentation"。
基本上,在我的 Pintool 中,我得到了一个回调,每次加载图像时都会调用它,反过来,它会插入特定例程的分析函数。
所以我正在考虑使用两种操作模式来测量 "empty instrumentation" 开销:
- 有一个空的图像回调函数,在加载每个图像时调用,而不是普通的
- 有空例程分析函数可以调用,而不是普通函数
这种方法可行吗?有没有我不知道的更好的解决方案?
Pin 执行了大量优化以生成非常高效的检测代码。特别是,空分析例程肯定会内联到应用程序例程中。 C/C++ 中的空函数很可能会被编译为一条指令(在 x86 上,它是某种形式的 ret
)。 Pin 可能能够识别并完全删除该指令,从而使您的检测为零。您可以通过比较没有任何检测的性能和有空分析例程的性能来确定 Pin 是否删除 ret
。如果差异为零,则很有可能 Pin 删除了指令。虽然据我所知没有记录。