我在不同的機器(包括 Linux 和 Windows,以及 Intel 和 AMD CPU 以及 clang 、GNU 和 MSVC)中使用執行緒庫。在所有這些中,std::thread::hardware_concurrency() 回傳 Windows 中所謂的邏輯處理器或包括超執行緒在內的最大執行緒數,但是在具有 AMD Ryzen threadripper 3990x CPU 的新機器中,它只回傳數字核心數是最大執行緒數的一半(64 而不是 128)。我在 c 參考中讀到回傳值取決于實作,這只是一個提示,但我的問題是如何找到實作,或者該函式回傳的執行緒數是否存在上限。
uj5u.com熱心網友回復:
的思路std::thread::hardware_concurrency就是告訴你std::thread可以體驗到什么樣的并發。由于std::thread只能將執行緒放入您的默認處理器組中,因此您將獲得默認處理器組中的邏輯處理器數量。除非您采取極端措施,否則這在 Windows 上不會大于 64。
“[A] 具有 128 個邏輯處理器的系統將有兩個處理器組,每組 64 個處理器[.]”
“需要使用多個組以便可以在超過 64 個處理器上運行的應用程式必須明確確定在何處運行其執行緒,并負責將執行緒的處理器關聯設定為所需的組。”
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410787.html
標籤:
