2011-08-18 56 views
13

我想使用Intel和AMD x86_64多核處理器附帶的硬件性能計數器來計算程序退役的商店數量。我希望每個線程分別計算退休的商店。可以做到嗎?如果是這樣,在C/C++中如何?在Linux中使用硬件性能計數器

+1

難道這個任務難以執行,沒有人知道它:(! – MetallicPriest

+1

你有沒有聽說過PAPI(性能應用程序編程接口)?我已經在intel x86下使用它了,我不確定它是否它有AMD的支持,但是這裏有一些pdf的信息ww.netlib.org/utk/people/JackDongarra/PAPERS/papi-linux.pdf。這是你想要的嗎? – Fred

+1

Fred,它是免費的嗎?如果是這樣,從哪裏我可以下載它嗎? – MetallicPriest

回答

8

如果要在內部計算某些程序部分的硬件事件(無需啓動任何第三方工具),可以使用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好的DOC:http://perfsuite.ncsa.illinois.edu/publications/LJ135/x27.html

如果你能做到這一點外,還有現代的Linux的perf命令。

PERF維基:https://perf.wiki.kernel.org/index.php/Main_Page

+1

有關'perf'命令的信息,我不知道它是否存在 –

2

來自AMD官方的應用程序作爲osgx提到的,因爲它是Linux內核的一部分將使用PERF在linux下命名爲CodeAnalyst

3

最好的辦法。但它也可以在C/C++代碼中調用,並且不需要它作爲外部perf stat調用。

只需下載內核源代碼並查看它。或可替換地看看這個圖書館,我認爲由谷歌:

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

是perfmon2項目的一部分,但設計與PERF的工作。看看perf_examples目錄,你會明白這個想法。這就是我從我的C代碼中處理perf調用的方式。

+0

嗨Saman!你可以分享一個簡單的例子,在程序中執行一個二進制文件,並計算「退休說明」,並將它們寫入文件? 我努力去理解這些例子,但是我太愚蠢,或者這些例子太模糊。任何幫助將不勝感激。 – Achilles

+0

這樣的示例將是: [代碼] INT主(){ 叉子(){ execv(二進制) } 計數引退指令() 寫入到文件中() 完 } – Achilles

+0

您好,你可以在這裏找到samplke:[link](http://codepad.org/T5y4z0gV) –