2014-02-21 77 views
-1

我是CS學生,自己學習算法。我現在正在使用的算法必須在功能強大的PC上運行兩個月左右,以便提供任何有用的東西,所以處理器效率會產生很大的差異。大部分處理器時間將用於運行具有不同初始值的一個子進程。保留所有處理器資源,核心和高速緩存

理想情況下,我想在單獨的線程上運行這些子進程中的幾個,爲每個線程保留一個核心和一部分緩存大約一個小時。在那個小時之後,我可以讓操作系統運行其他進程,並檢查用戶輸入。一旦完成,我想再次保留所有資源一個小時。

是否有一種簡單的方法可以做到這一點,如果不是這樣做甚至是值得的(性能增加5%-10%是值得加倍的編程時間),如果它值得做,但將很難有什麼資源用於計算出來?

我熟悉C++和JAVA可以做C#如果neccessary

+0

什麼是你的目標操作系統?鑑於其他情況下的靜態機器,這樣做的改進可能遠低於1%。 –

+0

你確定要在單個問題中詢問所有這些語言嗎?這太明顯了:c#,java和C++是非常不同的,並且有各種技術可以爲它們中的每一個處理多線程。 –

回答

2

當然還有其他方法來設置正在運行的線程爲「高」,也許你應該考慮不同的總體戰略的優先級。您的問題描述意味着您將進行多次獨立計算(「具有不同初始值的一個子流程」)。也許你應該考慮將計算分解爲「子工作單位」,將初始值和結果存儲在數據庫中......並招募其他學生在計算機上空閒時間運行這些子工作單元。

對於您使用的計算機,請嘗試製作多個線程(許多筆記本電腦通過多核和超線程技術具有相當於8個CPU的功能)。

1

問題不明確。讓我解釋一些關於加快代碼的選項,因爲您的主要擔心看起來如此。

  1. 如果你有多核處理器使用並行編程來與C#4.0或使用MPI或OpenMP的
  2. 有,你可以用它來提高你的處理速度像平鋪等許多並行技術取決於問題
  3. 確保每個線程或進程是獨立的,比如讓你的日誌文件分開等等,以便每個線程都可以獨立運行。
  4. 確保所有的線程具有高優先級
  5. 讓你的程序的64位應用程序,如果你有4GB以上的內存
  6. 增加系統時鐘週期
  7. 增加你的RAM內存的程序(例如,如果喲u必須4GB並不是所有的4GB的使用過程中應該有選項控制,取決於您的操作系統。
  8. 如果你知道像防病毒使用http://www.maketecheasier.com/limit-app-cpu-usage-in-windows/任何過程的這一限制其CPU訪問
  9. 使用的cache分析並嘗試改進你的代碼。
  10. 有一些超級計算中心,如果你需要更多的權力,並要求集羣節點 - 你可能會很幸運!
3

目前還沒有現代CPU在用戶模式軟件控制緩存的情況下,即使情況並非如此,通過嘗試「在進入操作系統時禁用緩存,您將沒有運氣可以提高性能「或類似的想法。

同樣,除了可能爲每個進程/線程使用處理器關聯之外,「鎖定CPU資源」中沒有任何意義。

只要系統沒有運行xgears或類似的「屏幕保護程序」,OS的開銷在現代系統中是最小的。關閉它,你應該得到應用程序的99.9%的CPU性能。

如果您希望系統具有更高的性能,您最好查看編譯器生成的代碼,選擇對您的問題有效的算法等等。顯然,使用分析器來確定「熱點」的應用程序。