我在實驗室工作,編寫多線程計算程序,在C++ 11上使用std::thread
。現在我有機會在多CPU服務器上運行我的程序。如何利用C++中的多CPU?
服務器:
- 運行Ubuntu的服務器
- 有40個英特爾CPU的
我一無所知多CPU的編程。第一個想法,我想到運行40個應用程序,然後將他們的結果粘合在一起。這是可能的,但我想更多地瞭解我的機會。
- 如果我通過它的gcc編譯器在服務器上編譯我的代碼,那麼結果應用程序會利用多CPU嗎?
- 如果#1答案取決於,我該如何檢查它?
謝謝!
我在實驗室工作,編寫多線程計算程序,在C++ 11上使用std::thread
。現在我有機會在多CPU服務器上運行我的程序。如何利用C++中的多CPU?
服務器:
我一無所知多CPU的編程。第一個想法,我想到運行40個應用程序,然後將他們的結果粘合在一起。這是可能的,但我想更多地瞭解我的機會。
謝謝!
你的問題不僅是關於多線程,而是關於多CPU。
基本上操作系統會自動將線程分散到核上。你不需要做任何事情。
一旦您使用C++ 11,您可以調用std::thread::get_id()
,並確定不同的線程,但無法識別您正在使用的核心。直接使用pthreads
+「cpu親和力」。
你可以谷歌的「CPU親和力」獲得更多關於如何控制它的細節。如果你想要這種精度。您可以識別核心以及選擇核心...您可以從此開始:http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html
如果您的程序運行多線程,則操作系統應自動處理它使用可用的CPU。
確保將您必須做的工作分配給大約相同數量的線程,您可以使用CPU。確保它不僅僅是一個工作線程,其他線程只是等待這個線程的終止。
如果您的程序已經有多個線程,那麼操作系統會自動在不同的CPU上安排這些線程。你將受到線程數量的限制。如果您創建10個線程,那麼您的程序將被限制爲最多10個CPU。 –
如果每個「結果」完全獨立於其他所有其他應用程序,我實際上會編寫一個單獨的線程應用程序,然後通過'parallel'執行它(請參閱'sudo apt-get install parallel; man parallel') – v010dya
要求非現場資源不在SO上。我已經刪除了關於圖書館和其他資源的子問題,因爲問題的其餘部分是可回收的。 – Puppy