我正在使用Linux,并使用C++进行编程。我已经能够使用perf_event访问性能计数器(指令计数、缓存丢失等)(实际上使用了这个链接中的程序:https://github.com/castl/easyperf)。
然而,现在我正在使用线程运行多线程应用程序,并且需要指令计数和循环来分别完成每个线程。对怎么做有什么想法吗?
谢谢!
发布于 2015-01-21 06:20:43
perf是您可以使用的系统分析工具。它不像https://github.com/castl/easyperf),它是一个库,在代码中使用它。按照这些步骤并使用它来分析您的程序:
perf。在不同的Linux发行版中,安装可能会有很大不同。您可以找到安装教程行。ps -eLf | grep [application name]perf stat -t [threadid]的形式运行perf:
usage: perf stat [<options>] [<command>]
-e,-事件事件选择器。使用“perf列表”列出可用的事件( -i )、--no-inherit子任务不继承计数器( -p )、--pid stat事件(对现有进程id -t )、--tid stat事件(在现有线程id -a上)、--所有CPU系统范围内的来自所有CPU -c的集合、-缩放/规格化计数器-v、--更详细(显示计数器打开错误等) -r、-重复重复命令并打印average + stddev (max: 100) -n,-空null run -不要启动任何计数器-B -大数字打印数千个分隔符有一个关于分析文章的perf,你可以感觉到它。
发布于 2015-03-05 06:21:55
您可以使用标准工具访问perf_event -- perf (来自linux)。它可以与程序的所有线程一起工作,并报告概要配置文件和每个线程(pid/pid)配置文件。
这个配置文件不是精确的硬件计数器,而是采样每N个事件的结果,N调到99 Hz左右(每秒次数)。您还可以尝试-c 2000000选项来获得每200万次硬件事件的示例。例如,循环事件(完整列表- perf list或尝试perf stat ./program中列出的一些)
perf record -e cycles -F 99 ./program
perf record -e cycles -c 2000000 ./program所有线程的摘要。-n将显示样品总数
perf report -npid (这里实际上使用了tids,因此它允许您选择任何线程)。
文本变量将列出用摘要示例计数记录的所有线程(使用-c 2000000,您可以将样本计数乘以200万,以估计线程的hw事件计数)
perf report -n -s pid | cat或者类似ncurses的交互式变体,您可以选择任何线程并查看它自己的配置文件:
perf report -n -s pid发布于 2015-01-21 03:37:00
请看一下perf工具文档这里,它支持您想要描述的一些事件(例如:instructions和cache-misses)。摘自上面链接的wiki页面:
perf工具可用于计算每个线程、每个进程、每个cpu或系统范围内的事件。在每线程模式下,计数器只监视指定线程的执行情况.当线程被调度出时,监视停止。当线程从一个处理器迁移到另一个处理器时,计数器将保存在当前处理器上,并在新处理器上还原。
https://stackoverflow.com/questions/28058710
复制相似问题