CPU 個數,核心數,線程數
我們在買電腦的時候,經常會看 cpu 的參數,對 cpu 的描述有這幾種:“雙核”、“雙核四線程”、“四核”、“四核四線程”、“四核八線程”……。
我們接觸的電腦基本上都只有一個 cup。cpu 的個數很容易得到,螺絲刀拆開你的電腦數一下就行了。這沒有什么好說的。
為了給電腦更高的性能,一個 cup 中集成了多個內核,這樣電腦的性能就成倍的提升。隨着科技的發展,我們發現每個內核的性能也變的十分強大,於是一個內核又被分成兩個線程。但是,我們要注意的是,一個 cpu 分成多個內核,這是物理的分隔,拆開 cpu 是可以看到的;但是一個內核被分成兩個線程是一種超線程技術,也就是串代碼,操作系統會認為一個線程也是一個內核,有點欺騙操作系統的感覺。
如果操作系統說我的 cpu 有四核,這時我們要提高警惕,是真四核還是四線程(假四核)。
這是我的台式機 windows7:
任務管理器顯示有 4 核。
設備管理器顯示依然為 4 核
我百度了一下:
原來我的電腦是假四核。
其實 windows 有一個命令是可以查看的:
在 cmd 命令中輸入 “wmic”,回車;然后再輸入 “cpu get ”。
NumberOfCores:表示 CPU 核心數
NumberOfLogicalProcessors:表示 CPU 線程數
修改處理器個數
物理內核個數是不能修改的,但是假內核個數是可以修改的:
處理器個數修改成 3,保存重啟電腦。
任務管理器中已經改變:
設備管理器未發生改變:
如何禁用超線程技術
Hyper-Threading 是 Intel 微處理器采用的一種技術,這種技術能夠讓微處理器在操作系統和應用程序中的性能表現的類似於兩個處理器一樣。
進入 BIOS,找到 Hyper-Threading 選項設置成 disable。
保存設置,啟動電腦。
任務管理器發生了變化:
設備管理器也發生了變化:
超線程這個東西並不是開了就一定比不開的好。
因為每個CPU核心里ALU,FPU這些運算單元的數量是有限的,而超線程的目的之一就是在一個線程用運算單元少的情況下,讓另外一個線程跑起來,不讓運算單元閑着。
但是如果當一個線程整數,浮點運算各種多,當前核心運算單元沒多少空閑了,這時候你再塞進了一個線程,這下子資源就緊張了。兩線程就會互相搶資源,拖慢對方速度。
至於,超線程可以解決一個線程cache miss,另外一個可以頂上,但是如果兩個線程都miss了,那就只有都在等了。這個還是沒有GPU里一個SM里很多warp,超多線程同時跑來得有效果。
所以,如果你的程序是單線程,關了超線程,免得別人搶你資源,如果是多線程,每個線程運算不大,超線程比較有用。