2011-03-23 64 views
8

有沒有辦法讓valgrind使用多個處理器?Valgrind可以使用多個處理器嗎?

我正在使用valgrind的callgrind進行一些瓶頸分析,並注意到我的應用程序與在valgrind/callgrind之外運行時顯着不同的資源使用行爲。

當在valgrind外運行時,它最大化了幾個處理器,但在valgrind中運行只使用一個。這讓我擔心我的瓶頸會在不同的地方,從而導致我的分析失效。

+2

你不能使用另一個分析器,例如:'oprofile'? – ninjalj 2011-03-23 19:16:44

回答

15

按照Valgrind的文檔,他們不支持多處理器:

主要的事情與 就指出,以線程程序是 你的程序將使用本地 線程庫,但Valgrind的 將執行序列化,以便一次只運行一個 (內核)線程。 這種方法避免了 實現真正的多線程 版本Valgrind的的可怕 實施中的問題,但它確實意味着 該線程應用程序只在一個 CPU運行,即使你有一個多 或多核機器。

Valgrind不會安排線程 本身。它僅僅確保只有一個線程同時運行,使用一個簡單的鎖定方案 。實際的 線程調度仍然在操作系統內核的 控制下。然而,這個 確實意味着你的程序在運行Valgrind時會看到非常不同的 調度,而不是在正常運行時運行的 。這是因爲Valgrind正在序列化 的線程,並且因爲代碼運行的速度比正常情況慢了許多,所以它們都是 。

這種差異在調度可 導致程序的行爲 不同的,如果你有某種 併發,關鍵的比賽中,鎖定 或類似的錯誤。在這種情況下,您可能會考慮使用工具 Helgrind和/或DRD跟蹤它們,向下追蹤它們 。

相關問題