執行緒可以算一個CPU嗎?

執行緒可以算一個CPU嗎?

lscpu所以我在終端機中輸入並看到了以下內容:

CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  2
Core(s) per socket:  2
Socket(s):           1

沒有。由於以下公式,此處 CPU 的數量為 4: No. of CPUs = Sockets X Cores per socket X Threads per Core

但問題是,CPU到底是什麼?為什麼我們在上面的公式中包含線程?

答案1

這取決於您在尋找什麼。

當你購買處理器時,它會清楚地說明超執行緒和核心數量,以及是否可以在多處理器方式(多個插槽)上使用它。

讓我們忘記我們有多個實體 CPU 的情況。

我們在一個晶片上有多個核心:它們可能共享一些緩存,否則它們幾乎是獨立的。但仍然:有些任務應該協調,因此使用 4 個核心時,您的「能力」(通常)不會是 1 個單核心的 4 倍。

超線程:這個比較棘手:這是Intel的一個技巧(也在多核心之前),在那裡你可以模擬多個CPU。實際上,一次只能執行一個線程,但 CPU 經常需要暫停(例如等待記憶體存取或寫入)。透過超線程,CPU 可以快速切換到第二個虛擬 CPU。

因此,使用超線程,與僅使用一個普通CPU 相比,通常可以獲得更好的性能,而且幾乎不需要任何成本(更多的邏輯、高速緩存和寄存器,但沒有重複的晶體管),但兩個核心仍然更好(仍然不等於兩個兩個CPU,但在數值計算上,兩個任務是完全獨立的,核心不會打擾任務)。

如果您有並行進程,我通常會使用線程乘以核心(如果存在離散數量的 IO,我通常會在線程或最終結果中加一)。在這種情況下,您可以獲得更好的效能(假設沒有其他 CPU 密集型任務):您使用最大功率,即使在單一核心等待記憶體資料時也是如此。

但為了獲得加速,我只會使用核心數量(記住我會得到一些更好的數據)。

所以,這取決於你在尋找什麼。如果您正在執行複雜的任務,您可能會測量更多的進程並優化它們(快取、記憶體、執行緒、核心、CPU、MPI...)。每個程序的資源都不同。

相關內容