Hyperthreading

超執行緒應該使用多少 CPU?

  • June 30, 2016

假設我有一個 18 核的伺服器 cpu,開啟了超執行緒,這意味著我可以在 htop 中看到 36 個 cpu。

為了充分利用 CPU 並且不影響單執行緒性能,我是否應該將所有 36 個“核心”的目標設為 100% 執行,而 HT 核心將只做更少的工作並且仍然報告 100%,或者這意味著“完整”核心已經被其“HT 核心”上的任務打斷,從而減少了單執行緒工作?

我知道有很多變數會影響 HT 性能,我只是想知道處理 HT 時 cpu 計量表的含義。

如果允許第二個虛擬核心在第一個虛擬核心被卡住的情況下做出貢獻,那總比沒有好,因此您(至少)完成了一些額外的工作。

問題變成了:什麼時候有兩個不同的執行緒會導致一個執行得更糟?指令之間的分支預測和依賴關係不會改變。現在等待記憶體訪問……兩個執行緒在記憶體使用率和頻寬方面競爭記憶體訪問。

如果您有一些 CPU 使用 HT 執行而其他 CPU 沒有,這是否也意味著您會將特定執行緒分配給一種類型或另一種類型?我認為不會:您的程序將在隨機虛擬核心上執行它們的執行緒。那麼拆分配置有什麼幫助呢?由於每個 CPU 都有自己的記憶體,唯一的影響是由於記憶體頻寬和記憶體一致性的負擔。

一般來說,你會達到這樣的程度,即擁有更多你可以做的事情比讓一些 CPU 執行單元閒置更昂貴。這並不直接取決於執行緒的數量,而是取決於執行緒在做什麼,以及各種組件的詳細記憶體架構和性能細微差別。

沒有簡單的答案。即使考慮到特定的程序,機器也可能與那些講述自己經歷的人不同。

您必須自己嘗試並測量什麼是最快的,在這台確切的機器上進行特定的工作。即便如此,它也可能隨著軟體更新和隨著時間的推移而改變使用情況而改變。

看看Anger 的代表作第 3。如果您仔細查看某些特定的處理器,您會發現在執行程式碼所需的許多步驟的深層管道中資源有限。您需要找到過度承諾導致其執行速度較慢的情況,而不是不承擔更多工作。一般來說,這意味著某種記憶體;以及資源線上程之間共享的位置。


CPU 計量器是什麼意思:它報告所有未花費在執行空閒執行緒上的時間。即使在其中一個上完成的實際工作可能很小,分配給核心的兩個邏輯執行緒也不會空閒。管道卡住幾個週期直到結果準備好,記憶體被提取,原子操作被隔離等所花費的時間。同樣不會導致執行緒被擱置為“未準備好”,因此它不會空閒,並且時間仍然顯示為正在使用。等待 RAM 不會顯示為空閒。只有像 I/O 這樣的東西才會使執行緒阻塞並停止向它收費。作業系統互斥鎖通常會這樣做,隨著多核系統的興起,這不再是確定的事情,因為“自旋鎖”不會讓執行緒重新回到架子上。

因此,如果 CPU 經常卡在等待記憶體,那麼 100% 的 CPU 計量表並不意味著一切順利。顯示 90% 的較少數量的邏輯核心很可能會完成更多工作,因為它完成了數字運算,現在正在磁碟上等待。

所以不用擔心 CPU 儀表。看看實際取得的進展,只有.

引用自:https://serverfault.com/questions/767730