2011-01-22 55 views
3

我寫了一個構建巨大搜索樹的程序。由於我的樹太龐大,我預計我的程序將使用超過40%的cpu。而不是這個我的程序使用不超過10%的CPU,即使它運行在高優先級。如何讓我的程序運行得更快:是否使用線程解決方案?

如果在運行並行線程會使用更多的CPU,讓我請知道這事。我可以用線程劃分我的程序,我真的需要縮短搜索時間。

謝謝!

+3

10%是多少內核? *看起來有點低 - 你確定你沒有IO瓶頸嗎? – 2011-01-22 22:53:31

+1

您的程序可能不是CPU綁定的,但帶寬有限。 – CodesInChaos 2011-01-22 22:53:31

+0

而且你不應該增加正在使用很多CPU的線程/程序的優先級,而應該降低它以使系統響應。 – CodesInChaos 2011-01-22 22:54:27

回答

2

代替本我的程序使用的CPU的不超過10%

多少處理器,你有,怎麼是你的操作系統測量的10%,即一些OS將呈現10%的使用率,如果你有10個處理器,並使用其中的1個100%。

然而,萬一你不利用處理器100%,你需要找出原因。也許它以某種方式IO /網絡綁定,而且IO以低效率的方式綁定。你還提到它是「巨大的」,那是什麼意思?如果你的意思是巨大的,並且你使用了機器的所有內存,並且你開始交換,性能就會下降,你需要找到一個更高效的算法/內存使用或者獲得更多的內存。

我可以在線程分割我的程序

如果1個線程沒有充分利用的CPU,你可能無法獲得使用線程的任何東西。

1

使用線程將是一個可行的解決方案,如果你有並行構建搜索樹的任務的一些方法。這真的取決於你正在建造什麼樣的樹。如果你正在構建二叉搜索樹的某種風格,它可能是可能的,但是你必須小心以確保當你插入節點時你不會結束任何數據競賽。這可能會要求每個線程在其訪問的每個節點上獲取一個鎖。如果你打算使用某種平衡樹(AVL,紅色/黑色,splay,AA等),這可能不太適合,因爲旋轉很容易干擾其他線程。

一個選項可能是分割工作。有支持快速合併的平衡二叉搜索樹的實現(例如,紅/黑樹的某些變體可以在O(lg n)時間中合併),這意味着您可以嘗試將數據分組爲組,建立一個平衡二叉搜索樹,然後將它們合併成一棵平衡樹。這將利用並行性。

1

也許你沒有與10個核心的CPU,讓你的程序不使用所有的CPU,它可以和你有不同的問題,如I/O訪問或類似的東西。

在這種情況下使用更多的線程不是解決方案。

樹檢索可以很容易的線程(在孩子們通過例如不同的線程搜索)進行劃分,但由於您沒有使用所有的主線程能力,你沒有獲得使用多個線程的性能更好。

的CPU是不是你的程序限制

相關問題