我一直在尝试使用英特尔在Ubuntu上的Pin来检测SPEC CPU2006基准测试。我有一个带有简单缓存模拟器的 Pintool,可以计算读取和写入。 当在特定基准的"runspec -nonreportable"命令上运行 Pintool 时,我会得到我想要的数据。但是,不同基准的结果几乎没有任何差异。我的pintool似乎不是问题,因为它看起来可以在其他应用程序上正常工作。我怀疑结果是由于 Pintool 正在检测所有内容,包括基准测试的设置。
我之前所做的只是在 runspec 命令上运行 pintool。在使用 runspec 之前,我还尝试使用"--action build"和"--action setup"来减少开销,但无论如何它似乎运行了大部分相同的设置。我知道 SPEC CPU 2006 中有监控钩子,我可以在开始基准测试之前运行其他命令,我想可能有某种方式可以使用它们,但我确定如何。也许"monitor_wrapper"钩子最合适?也许我可以以某种方式掌握 pid 并在基准测试开始时将我的 pintool 连接到正确的过程?非常感谢我能得到的任何帮助!
您可能只是在检测runspec
本身,该运行在一个进程中运行,该进程会创建运行基准测试的另一个进程。您有两种选择:告诉 Pin 遵循子进程(使用-follow_execv
选项),或者在创建基准测试时直接将 Pin 注入到基准流程中(通过使用specinvoke
而不是runspec
运行基准测试)。