英特爾Nehalem處理器的幾個重要特點就在於更好的處理器核心管理。四核的Nehalem芯片利用對稱多線程(SMT)技術,每一個核心能夠同時運行兩個線程。如果啟用了SMT的話,處理器最多就可以可以由啟用前運行的4線程增長到8個線程。
SMT一般是配置在BiOS中的,可以在啟動時做更改。由於Nehalem處理器每線程之間的核心都在共享一些資源,而SMT的作用就是使處理器的性能和吞吐量增倍。無論你的應用程序運行SMT或不運行,這些都需要通過具體測試你的應用程序才能確定。
對於這種線程如何工作的討論中,我將只談四個內核運行的每一個線程--即禁用SMT技術後的狀態。請注意,這就是由供應商配置在一般Nehalem電腦中的情況。
Nehalem的架構十分關注每個核心所活躍運行的代碼。當在一個確定的時間內,核心仍然沒有活動時,晶體管驅動器將關閉處理器的核心。此功能的設計主要為了節約能源。該處理器還可以增加活躍的核心頻率,以便提高性能。此選項被稱為Turbo模式,在某些系統中的Turbo模式需要具體啟用。
於是所有這一切事情神奇的發生了,因為這種功能,需要操作系統進行配合。關鍵是,必須保證處理器的活躍核心擁有足夠長的時間來關閉它的晶體管。這是在Windows7發布之前很難達到的。雖然創建應用程序的線程是由它的操作系統來安排並加以執行的。應用程序無法自己進行調控,他們只能控制到底使用哪些管道。在Windows7之前,Windows內核將不考慮安排一個線程上到底去運行那個可用的核心,在該線程執行之前。(如果沒有核心是可用,Windows的線程調度將會選擇一個正在運行的線程關閉或是正在等待交換的線程關閉。決定哪些線程先被利用是關鍵問題。)
開發人員可以通過使用施加某種控制技術,在整個執行核心調用選擇處理器的級別關系上。此功能允許開發人員指定一個線程上運行的核心。大多數操作系統,包括Windows,視為一個命令,而不是一個處理器應用的請求,這使他們接受請求的安排遭到了限制(雖然在實際情況中,它們大多完成請求)。然而,這種編程方法一般是不被鼓勵的,因為它往往使調度工作的效率降低。在大部分情況下,采取何種運行時間和地點的調度決定並不比在程序員編寫代碼算法時容易。
由於以前的Windows對於其預定線程的調度是毫無規劃的,因此一個使用三個線程的應用程序,你可能會看到這些線程將輪流使用Nehalem的四個內核。其結果是,節電功能和Turbo模式會受到影響,因為沒有核心會保持很長時間不活動。然而Windows7中,往往安排線程運行在同一內核,而不是讓他們輪流工作,三個線程的應用程序通常只會使用三顆核芯,因此可以讓Nehalem處理器的第四個核心處於關閉狀態。
此舉明顯減少了電力的供應,而且還能夠通過以下兩種方式提高性能:Turbo模式,如前面所述,以及副緩存模式,即更好的緩存應用。真正的勝利是在節能方面的。在桌面系統中,功耗可能不會時最重要的一個標准,但他們對服務器和移動設備卻是非常重要的。特別是移動用戶,將享受更長的電池壽命時,Nehalem的移動處理器將在消費電子設備中出現。