2013-02-20 62 views
0

有哪些工具可用於故障排除並行程序?並行代碼故障排除

說我有一個比預期更差的代碼(4次,而不是理論上的8倍的串行版本執行速度)。我懷疑原因是由訪問共享變量的線程(比如共享向量的相鄰元素)導致的某種鎖定,或者由訪問堆的線程(我認爲它也是共享資源)導致的鎖定。但我不知道有什麼工具可用來檢查可能導致過多的線程睡眠,線程切換等的原因。 profiler會告訴我哪個函數花了多少時間,也許有很多與線程管理有關的活動,但不是線程的原因和狀態(或者我不知道如何使用它)。

我在C++工作在OS X

+0

不錯,但沒有任何代碼沒有幫助。這裏沒有算命先生! – 2013-02-20 08:45:18

+0

如果更多人會說真的很需要,我可以發佈一些違規代碼,但我在處理一系列問題時詢問可用的工具,而不是針對特定問題的解決方案。 – Puchatek 2013-02-20 08:53:32

+1

VS中有一個很好的用於dotnet的並行分析器(顯示哪個線程正在等待什麼),但我不知道任何其他平臺的工具。您始終可以通過爲每個可能等待的代碼部分(如同步基元)進行計時開始。將測量的等待時間轉儲到日誌。如果出現某種爭議,您有機會計算出詳細信息。 – 2013-02-20 08:54:55

回答

2

下可能會感興趣的

Vampir - 花錢

DTrace - 已安裝在Mac上,提供的工具你所需要的,但還遠遠超出現成的解決方案

TAU

這些只是第一個想到的三個工具,我相信一些更加努力的谷歌搜索會變得更多。

你最後的評論也許我不知道如何使用一個很好做工精緻,這些工具通常需要顯著承諾使用它們,瞭解他們告訴你,並作出適當和性能增強修改你的程序。