【问题标题】:Using Hardware Performance Counters in Linux在 Linux 中使用硬件性能计数器
【发布时间】:2011-10-29 18:51:55
【问题描述】:

我想使用 Intel 和 AMD x86_64 多核处理器附带的硬件性能计数器来计算程序停用的存储数量。我希望每个线程分别计算其退休商店。可以做到吗?如果是这样,在 C/C++ 中如何?

【问题讨论】:

  • 这个任务是不是太难了以至于没人知道呢:(!
  • 您听说过 PAPI(性能应用程序编程接口)吗?我在 intel x86 下使用过它。我不确定它是否支持 AMD,但这里有一个 pdf,其中包含一些信息 ww.netlib.org/utk/people/JackDongarra/PAPERS/papi-linux.pdf。这是你想要的吗?
  • Fred,它是免费提供的吗?如果是这样,我在哪里可以下载它?
  • 我认为您可以从icl.cs.utk.edu/papi/software/index.html 获得它 - 但我不确定如何设置它。我在服务器中使用它,一切都可以使用。它可能涉及内核补丁:\
  • 谢谢弗雷德!我会调查的。

标签: c++ c linux multithreading multicore


【解决方案1】:

如果您想在内部计算程序某些部分的硬件事件(无需启动任何第 3 方工具),您可以使用 Perfctr 或 PAPI。

Perfctr 快速入门:http://www.ale.csce.kyushu-u.ac.jp/~satoshi/how_to_use_perfctr.htm

PAPI主页:http://icl.cs.utk.edu/papi/

PerfSuite 好文档:http://perfsuite.ncsa.illinois.edu/publications/LJ135/x27.html

如果您可以在外部执行此操作,现代 Linux 有一个 perf 命令。

性能维基:https://perf.wiki.kernel.org/index.php/Main_Page

【讨论】:

  • 很高兴了解perf 命令。我不知道它存在。
【解决方案2】:

如 osgx 所述,最好的方法是在 linux 中使用 perf,因为它是 linux 内核的一部分。但它也可以在 C/C++ 代码中调用,不需要外部 perf stat 调用。

只需下载内核源代码并查看它。或者看看我认为谷歌的这个库:

http://perfmon2.sourceforge.net/docs_v4.html

它是 perfmon2 项目的一部分,但旨在与 perf 一起使用。看看 perf_examples 目录,你就会明白了。这就是我在 C 代码中处理 perf 调用的方式。

【讨论】:

  • 嗨,萨曼!您能否分享一个从程序中执行二进制文件并计算“退休指令”并将它们写入文件的简单示例?我努力理解这些例子,但要么我太笨,要么例子太模糊。任何帮助将不胜感激。
  • 所以一个例子是: [code] int main(){ fork child(){ execv(binary) } count退休指令() write to a file() End }
【解决方案3】:

来自AMD的官方应用名为CodeAnalyst

【讨论】:

    【解决方案4】:

    签出oprofile了吗?

    http://oprofile.sourceforge.net/

    【讨论】:

    • 请展开此答案。你说得对,但是对于那些还不了解 OProfile 工作原理的人来说,信息太少了。
    猜你喜欢
    • 1970-01-01
    • 2020-05-19
    • 2015-03-24
    • 1970-01-01
    • 2012-02-04
    • 2011-05-07
    • 2015-05-25
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多