昨天Anandtech對推土機評測的結論,以及Tom's Hardware對推土機評測的倒數第二頁,不約而同都有提到推土機搭配Windows 7跟Windows 8的效能差異,這當然跟AMD在事前提供媒體評測指南裡的先打了預防針有關(AMD:Win7不能讓推土機完全發揮,Win8會更好....

若是還期待模組內有"雙核融合"或是"逆向超線程"來達到讓負載落在單一執行緒的程式能夠效能倍增的網友.....這.....就別想太多了,AMD的官方技術文件內並不存在這種東東....而且Windows 8為推土機帶來的效能增進,是有但書的,不會有倍增神話發生,對於負載落在單執行緒的程式,也不能帶來改善(此處不考慮Windows 8本身作業系統程式碼最佳化後,為應用程式帶來的效能提昇,因為AMD/Intel都會受益於此)。
今天在繼續瀏覽推土機相關評測時,在XtremeSyetems看到了一篇目前所看到最有獨到測試想法的推土機評測,基本上作者DGLee的邏輯是說:雖然FX-8120/FX-8150都有八"核",但是如果是用來執行主要高負載是落在雙核到四核之間的程式(如不少遊戲,像最近很紅的BF3),若以四執行緒的應用程式舉例,到底是應該讓這四個執行緒在兩個模組(共四"核")內執行,還是應該分到四個不同模組內的第一個核心(總共也是四"核")執行?基本上這是由作業系統的執行緒排程決定的,也就是說:到底Windows 8針對推土機,可以採用什麼樣的執行緒排程策略?改善了什麼?
綜合目前看到的各方資訊,將優缺點羅列如下:
(1). 將四個執行緒侷限在兩個模組(共四"核")內執行的優缺點:另外沒用到的兩個模組可以去睡覺,功耗降低;而Turbo Core可以作動,將工作中的兩個模組時脈拉高;同一個模組內的兩個執行緒可以直接透過L2快取交換資料,效率比較好;但缺點是同一個模組內的兩個執行緒必須競爭去搶只有一份的資源(例如FPU、L2快取),可能會降低效率。

(2). 將四個執行緒分別指派到四個不同模組內的第一個核心(總共也是四"核")執行的優缺點:每個模組內凡是只有一份的資源,可由該執行緒獨享(因此不包括同模組內第二個核心的整數執行單元資源,也就是不存在"逆向超線程"、或是"核融合"這種東西....);缺點是模組處於啟動狀態機率變高,因此平均功耗較高,也不利於Turbo Core作動;而且執行緒間的資料交換,必須透過L3快取進行。

XtremeSystems的這位作者DGLee進行了測試,測試的方法是透過Asus板子所提供的功能,將關閉兩個模組的情況,與四個模組各關閉其中一個核心的情況,進行比較測試,證明了上面的(2),是效能比較高的方式。因此,容我先下個之所以開本棟樓的結論:
在Windows 8推出以前,如果八核推土機的使用者主要是執行高負載是落在雙核到四核之間的程式(例如最近很紅的BF3),可以試試將每個模組各關閉一顆核心,強迫Windows 7採取(2)的執行緒排程方式,執行效能會比較好。或是下載Core Affinity Resident這個程式,可以直接幫你指定程式限定在那些核心中執行(核心1/3/5/7,或核心2/4/6/8),並記住該設定,之後便不必再每次重來,也不需要玩關關樂,這樣就不用等Win8推出,在Win7下也可以改善推土機執行特定程式的效能。
但是不管是關核或是用程式指定核心,對於負載是落在單核、或是能夠讓推土機滿載的程式,在效能上是沒有幫助的
---------------------------------------------
以下為了方便說明,用Q&A的方式進行:
---------------------------------------------
[Q1] Windows 7是用上面的(1)還是(2)的方式分派執行緒到推土機的模組/核心去執行?
[A1] 不完全是(1)也不完全是(2),因為在Windows 7眼中,八個核心是相同且平等的(實際卻應該是兩兩成對),因此就跟擲骰子一樣:看運氣吧!也可以參閱第16樓跟第26樓的資訊。
[Q2] Windows 8會用上面的(1)還是(2)的方式分派執行緒到推土機的模組/核心去執行?
[A2] 不確定,AMD看來是偏向(1),這可以從Tom's Hardware評測的下面這兩張圖看出(應該來自AMD事前分發給媒體打預防針的評測指南資料);但是XtremeSystems的作者DGLee實測,以及第16樓跟第26樓的測試,顯示(2)卻可能是效能較好的方式。


[Q3] 推土機跑單執行緒程式的效能會因為用了Windows 8而增進嗎?
[A3] 當然不會!在Windows 7下或Windows 8下,(1)或(2)的分派方式對於單執行緒程式沒有差別(此處不考慮Windows 8本身作業系統程式碼最佳化後,為應用程式帶來的效能提昇,因為AMD/Intel都會受益於此),畢竟單核效能是硬功夫碰硬功夫、張無忌九陽神功硬碰金剛門禿頭阿二,並沒有太極拳或乾坤大挪移四兩撥千斤這種事兒,救不起來的。
[Q4] 如果我的應用會把八核都操到100%,效能會因為用了Windows 8而增進嗎?每個模組各關掉一個核心會有幫助嗎?
[A4] 當然不會!千萬別關....未來升級到Windows 8後,對於這種程式,效能也不會有影響(此處不考慮Windows 8本身作業系統程式碼最佳化後,為應用程式帶來的效能提昇,因為AMD/Intel都會受益於此),目前評測看到輸對手產品或自家前代產品的項目,還是會輸;原來有贏的項目,也不會贏更多。
[Q5] 那誰可以考慮玩關關樂關掉核心呢?
[A5] 在Windows 8正式推出以前,如果你平常常用的應用程式,主要負載是落在雙核到四核之間,其他核心負載不高的,可以考慮每個模組關掉一顆核心。
[Q6] 關掉核心後,跟AMD自家PII X4以及X6比起來,在Windows 7下改善效能如何呢?
[A6] 如果是單執行緒的測試程式,可以直接參考現有的媒體評測數據,因為這部分不受影響。大於四個高負載執行緒的測試程式,因為核心變少,自然會變慢。如果是二到四執行緒的測試程式,這就很難說了,因為現有推土機的評測數據(大多是遊戲類)有被低估的可能性,但估計關掉四個核心後效能要超過AMD自家的X6,嘿嘿....並不容易,跟X4相比,可能要看測試程式性質。
[Q7] 未來Windows 8針對這部份改進後,針對特定程式可帶來效能改進幅度有多少?
[A7] 要看Windows 8最終是否會採用(2)的排程方式,如果是的話,可以參考上面提到XtremeSystems那位DGLee的大作,內有包括Fritz Chess Benchmark、wPrime、Cinebench 11.5、WinRAR、3DMark 06、3DMark Vantage...等的詳盡測試。另外昨天在對岸舉行的推土機發表會,官方提出的數據如下:

註:(線程)調度程序是對岸的說法,台灣大專院校的作業系統這門課程,一般稱之為(執行緒)排程程式,是作業系統內部極為重要的系統程式。
[Q8] 如果我不想關核心,又不想讓我的八核推土機在Windows 7下碰到這種當執行高負載是落在雙核到四核之間時、可能的效能減損問題,有沒有解決方式?
[A8] 理論上是有的,但是這比較進階了,可以到工作管理員內,在"處理程序"那頁找出該程式,用滑鼠右鍵點擊,選取"親和性設定",示意圖如下:

選取親和性設定後,可以指定該程式的執行緒,只能在哪些核心內執行,示意圖如下:

在八核推土機上,會看到八個CPU,接下來,把其中四個核心反勾選,只留下四個核心,但是....要反勾選哪四個?哪四個是對應到每個模組的第一個核心?這部分就需要推土機使用者自力救濟分享一下了,或看M01板上有沒有BIOS/系統軟體專家可以對此指導指導,應該是留下CPU0、CPU2 、CPU4、CPU6,或是留下CPU1、CPU3、CPU5、CPU7。
[Q9] 上述的程序,在重開機後或關閉程式重新執行時,還要再作一次嗎?
[A9] 是的,要再作一次;是的,很麻煩,所以才說這比較進階,不然也只能等Windows 8出來嘍!
[10/18更新] 或是下載Core Affinity Resident這個程式,可以不透過工作管理員,直接幫你指定程式在那些核心中執行,並記住該設定,之後便不必再每次重來,也不需要玩關關樂。這在Windows 8出來前,可以幫助在Windows 7下實際測試Windows 8可能採用的排程策略在推土機上帶來的效果,也就是對於主要負載在二到四執行緒的程式來說,到底是盡量先塞滿模組、還是盡量分配到不同模組,以及效能增進的邊際效益 vs 耗能增加的幅度。

[Q10] 為什麼Intel Hyperthreading沒有這種問題?
[A10] 當然也是有的,只是Hyperthreading推出已經夠久了,相關的作業系統、應用程式,早已經將因應Hyperthreading的修正以及調校包含進去了。這裡有個作業系統配合處理器架構進行調整的例子。
以上個人的一些淺見,還請高手跟高高手不吝指正。
-------------------------------------------------------------------------------------------
說實話,推土機的架構規劃不是一天兩天,是用望穿秋水計算的,中間又曾經拖延很久,實在沒有道理不能在最近一次的Win7 SP1內,就跟微軟談妥、把相關所需修改的最佳化執行緒排程演算法加進去,不然Sandy Bridge新AVX指令集的作業系統端支援(AVX暫存器的context switch),為何Intel就來得及說服微軟加進Win7 SP1內呢?只能說AMD呀AMD.....

===========================================================================================
這邊有個捷克網頁跟XtremeSyetems的DGLee一樣,對八核心推土機進行了一些類似的有趣測試,連結是Google翻譯成英文的結果,可能還是有些繞口,因此簡單說一下這位捷克作者作了什麼事:
作者用Fritz Chess Benchmark在八核心推土機上進行了四個執行緒的測試,運用類似一樓Q&A第8項的作法,分別去比較將四個執行緒鎖在四個模組的各自第一個核心、以及鎖在二個模組/共四個核心內、還有不干涉讓Windows 7自己決定的結果,分數如下(越高越好):
鎖在四個模組的各自第一個核心:8793 (107.3%)
不干涉讓Windows 7自己決定排程: 8197 (100%)
鎖在二個模組/共四個核心內:7425 (90.6%)
因為XtremeSystems那篇是用Asus的工具程式以硬體方式將每個模組的兩個核心關閉掉一個,而這位捷克作者是用手動干涉作業系統排程的方式,核心並沒有被真正關閉,因此可以加測一項完全不干涉、讓Win7自己決定的結果作為比較。
如果不干涉讓Windows 7自己決定,如一樓Q&A第1項所說,會把推土機的八個"核心"視為完全對等相同,可能會有兩個執行緒被丟到同一個模組內、另兩個執行緒被丟到另外兩個各自不同的模組內的狀況,因此平均效能居於兩種不同強制鎖定方式之間是合理的。
===========================================================================================
此法國網站也進行了類似比較,但是又更進一步,在此也簡單解釋一下作者作了哪些實驗:
http://www.hardware.fr/articles/842-10/cmt-turbo-core-2-0-windows-8.html
相較1樓XtremeSystems跟16樓捷克網頁的測試,這個法國網站把Turbo Core啟動跟關掉的情況再分開,因此可以看到將四個執行緒放在二個模組內執行(4T/2M)、Turbo Core啟動機會變高,跟四個執行緒放到四個模組的第一個核心內執行(4T/4M)、Turbo Core發揮空間較為受限的結果比較。
結果如下圖,仍然顯示:將四個執行緒放到四個模組的第一個核心內執行(4T/4M),效能比較好。圖中的4T,就是完全不干涉、讓Windows 7自行分派的結果,效能會居於上述兩者之間,跟16樓捷克網頁結果一致。
4T/4M:8531(108%)
4T:7901(100%)
4T/2M:7355(93.1%)

這位作者還加測了各種情況的功耗如下圖,由於4T/4M動用了四個模組,即使是只有使用其中的一個核心,功耗仍較4T/2M高,這也合乎預期。

有了上面兩種數據,就可以算出每瓦效能,在Turbo Core啟動的情況下,4T/4M跟4T/2M的每瓦效能反而在伯仲之間,畢竟4T/2M雖然可以運用Turbo Core衝較高時脈,但也是要付出額外耗能為代價的。如果將Turbo Core關掉,不管4T/4M或4T/2M,都會變成相對有耗能、沒效能的尷尬狀況。


===========================================================================================
The Tech Report也進行了一篇針對在推土機上作業系統可以如何進行執行緒排程的探討,結果跟1樓的XtremeSystems、26樓的Hardware.fr、以及16樓的捷克網站的數據,都蠻類似的:也就是將主要負載在四個執行緒的程式(像最近很紅的遊戲BF3)分配到四個模組的第一個"核心",會比分配到兩個模組的共四個"核心"上,效能來得高;另外當然也會比讓Windows 7在不認得推土機架構特性的情況下"自由發揮"來得高。
下面的Mask 55跟Mask 0f,數字部分是16進位數字,寫成二進位數字分別是01010101跟00001111,分別代表分配到四個模組的第一個"核心"執行,以及兩個模組內的四個"核心"執行的情況,1代表被使用的"核心",0是不使用的"核心"。執行緒的核心綁定,是透過Win7內建的命令列來啟動應用程式並下Mask 55或Mask 0f的參數為之。






不過The Tech Report進行的測試都是浮點數運算,由於兩個模組雖然有四個"核心",但只有兩個FPU,因此雖然Turbo Core在此情形下能夠把時脈拉到4.2GHz(相較分配到四個模組的第一個核心,時脈只能到3.9GHz),但是不能抵消資源共享的競爭缺點。