问题标签 [intel-pin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1302 浏览

performance - Intel Pin tool expected time overhead

I am writing a Pin tool and it seems to add a significant time overhead.
My tool must instrument the program in the granularity of an instruction.

To check for the overhead source I wrote a small Pin-tool that just counts the instruction by
instrumentation every instruction (as I must do in my tool).

In addition I wrote a simple program that checks a registry value (The C code is around 20 lines).

(Running on an i7 CPU, Windows 7)
When running the simple program, it takes almost immediately to return.
When running the Pin tool init and the program with no instrumentation at all it takes 2.35+- sec
When running the Pin tool with the simple instruction instrumentation it takes 5-6 sec
Number of instructions: 3,107,098.

I have tried it also on a more complex code, a program that loops over a recursion function.

Without Pin it takes around 1 min.
With Pin (that only counts the instructions) it takes around 7 min.
The number of instructions was: 1,850,919,077

Is this the expected overhead?

0 投票
1 回答
1534 浏览

intel-pin - 在 pin 工具中获取物理地址

我正在使用引脚检测工具来获取内存跟踪。根据我的实现结果,我发现痕迹指示的是虚拟地址,而不是物理地址。有没有办法在 Pin 工具中获取物理地址跟踪?帮助!

0 投票
1 回答
2320 浏览

c - 使用英特尔的 PIN 工具计算程序中缓存命中/未命中的次数

我一直在尝试编写一个 pintool 来检测给定程序中的缓存命中和未命中。我发现有诸如 INS_IsMemoryRead/Write 之类的调用来确定指令是否为 LD/ST。

  • 有没有办法确定指令是否命中或未命中?
  • 如果是这样,是否也可以获得从缓存/内存中获取数据所花费的周期数?
0 投票
1 回答
276 浏览

assembly - 计算没有符号表的可执行文件中的函数调用

我目前正在寻找一种快速的方法来实现我的想法,为此我需要在运行时对二进制可执行文件中调用的所有函数进行计数。据我所知,英特尔的 PIN 工具可以计算例程调用和这些例程中的指令数量(请参见此处:https://software.intel.com/sites/landingpage/pintool/docs/67254/Pin/html/index。 html#ProcInstrCount)。但是当符号表不可用时会发生什么?PIN可以应付吗?

我不需要例程的名称,它们的起始地址就足够了。有没有我可以用来访问这些信息的工具?

一点背景知识:我想在运行时对某些函数调用进行集群。例如,我想将所有定期函数调用聚集在“更新”集群中。此外,我希望能够判断由于用户操作(例如按下按钮)而调用了哪些函数,然后再次对这些函数进行聚类。最后,我想对哪些函数在何时执行有一个相当清晰的图像。这甚至可能吗?

感谢您的任何建议

0 投票
1 回答
628 浏览

python - 使用 python 编译 pin 工具的错误包括,得到错误 C2872: 'UINT32' : ambiguous symbol

我正在尝试编译 pin 工具,Python.h并且收到超过 100 个关于不明确符号的错误。

我试图将它们分开include到不同的命名空间,但它产生了许多其他错误。

包含时也会发生同样的情况windows.h

所有错误看起来像:

D:\proj\Pin\source\include\pin\gen\types_core.TLH(67): error C2872: 'INT32' : ambiguous symbol could be 'C:\Program Files (x86)\Windows Kits\8.0\Include\shared\basetsd.h(72) : int INT32 or D:\proj\pin\Pin\source\include\pin\gen\types_foundation.TLH(88) : LEVEL_BASE::INT32' D:\proj\pin\Pin\source\include\pin\gen\types_core.TLH(81) : see reference to class template instantiation 'LEVEL_CORE::INDEX<dummy>' being compiled

你知道这个问题的快速解决方案吗?

谢谢!

0 投票
0 回答
51 浏览

c - 在 cBench 中设置优化标志的格式

我是编译器相关工作的新手。-O1我想分析一些使用, -O2,-O3标志优化前后的源代码。我正在使用英特尔的 PIN 工具进行分析。我正在使用来自 cBench Benchmark 套件的源代码。但我不知道如何设置优化选项。cBench 的教程提到了以下声明。

使用带有编译器名称的 __compile 批处理脚本作为第一个参数,以使用特定编译器(即 gcc、open64、pathscale 或 intel)编译基准测试。在第二个参数中,您可以指定优化标志。

所以我用这三个优化标志编译每个源代码如下

但是当我在 PIN 工具中分析目标文件时,我无法在 cBench 的 24 个程序集中找到任何差异。我失踪的重点是什么?

0 投票
1 回答
755 浏览

c++ - 使用 IARG_MEMORYREAD_EA

我对使用英特尔 PIN 还是很陌生。目前我正在使用一个硬件模拟器,它实现了 PIN 来处理指令。

对于我的应用程序,我需要使用 PIN 函数在硬件级别捕获一些工作负载变量。不幸的是,由工作负载本身记录的变量指针地址在IARG_MEMORYREAD_EAIARG_MEMORYREAD2_EAIARG_MEMORYWRITE_EA值的日志中不存在。

我确信我错过了一个非常简单的点,因为我试图用 pin 进行的操作不能比这更简单。

这可能是什么原因?我需要地址转换还是我应该使用其他一些功能?

谢谢

0 投票
1 回答
894 浏览

c++ - 将 IARG_MEMORYREAD_EA 与 PIN_SafeCopy 一起使用

IARG_MEMORYREAD_EA 的类型在 PIN 中定义为 ADDRINT。我需要获取存储在 IARG_MEMORYREAD_EA 内存位置中的一段数据。据我了解,从特定地址位置获取数据的最正确方法是使用 PIN_SafeCopy 函数,其示例用法如下:

当我尝试将 IARG_MEMORYREAD_EA 直接传递给这个函数时,编译器说类型不匹配,(ADDRINT * and ADDRINT). 显然他们没有,但我不确定我应该如何使用这个功能。

我当前的代码如下:

ProcessMemIns 是:

正如预期的那样,我从编译器收到以下错误消息。invalid conversion from ‘LEVEL_BASE::ADDRINT {aka long unsigned int}’ to ‘const VOID* {aka const void*}’ [-fpermissive]

是否有更合适的方法将 IARG_MEMORYREAD_EA 用于 PIN_SafeCopy() 或者我应该只定义一个指针并将其用于 PIN_SafeCopy()?

0 投票
2 回答
785 浏览

c++ - 使用 Intel Pin 时跟踪不匹配的 CALL 和 RET 指令数

我正在尝试使用 Intel Pintool在 x86-64 机器(Mac Pro)上进行监控CALL和指令。RET我将IARG_INST_PTR(下面提到)传递给docount函数并使用指令指针我通过检查操作码(CALLRET0xe8 和来自Intel x86-64 手册的 0xc3 来推断指令。但是,似乎这个检查并不完全准确,因为我注意到RETCALL使用此逻辑检测的任何给定二进制文件的数量更多。

谁能给我一些关于我做错了什么的指示?

我从/tools/ManualExamples/inscount0.cpp. 要找到它,请在此处搜索文件名。

0 投票
1 回答
777 浏览

c++ - 无法编译 Intel Pin

我在 64 位 ubuntu 机器(12.04)上使用 intel Pin。我以正确的方式导出了路径,但无法运行 pin 二进制文件。当我对该二进制文件执行“文件”时,它显示它是 32 位 ELF 二进制文件。这是一个问题吗?即使我从同一个文件夹运行二进制文件,我也无法运行它。

我不断收到的错误消息是bash: /home/<username>/Downloads/pin-2.14-67254-gcc.4.4.7-linux/pin: No such file or directory

有人可以告诉我我哪里出错了吗?

Eidt:我尝试添加 i386 架构,以便运行 32 位 pin 二进制文件,但它无法执行我编写的 64 位工具。