windows 11今年的重要版本24H2即將公布。
本來是個好消息,但是會讓很多人開始莫名的驚恐,原因就在于有消息說這次的24H2版本對CPU的一個叫做POPCNT的指令提出了要求。
具體說就是——如果你的CPU不包含POPCNT指令的話,是無法升級到24H2版本的。
不過,擔心歸擔心,POPCNT指令最早出現在intel Nehalem微架構中,從2008年末期開始出現到現在已經將近15年時間了。帶有同等指令的AMD K10的出現也是2007年的事情了。
所以,在大部分情況下Windows 11 24H2所不能支持的CPU大部分是2010年之前生產的,至今也都有十三、四年的歷史了。所以,在當下,我們并不需要太擔心自己的CPU對24H2的支持度的問題。并且,十幾年前的老電腦再來跑最新發布的操作系統本身處理性能的羸弱帶來的酸爽也是讓人難以忍受的。
微軟敢冒天下之大不韙強推24H2本身也就掀不起什么波瀾。
那么問題來了,究竟POPCNT指令是什么?為什么POPCNT會被強制加入到最新操作系統的必須支持之列?未來會給我們帶來什么影響?這些問題才是現在我們要關注的要點。
POPCNT指令是一種計算機處理器指令,用于計算寄存器或內存中位值為1的位數。它的名稱是"Population Count"的縮寫,意為"人口統計",也被稱為"位計數"指令。在2010年,intel 將POPCNT指令加入了SSE4.2指令集中,SSE(Streaming SIMD Extensions,流式SIMD擴展),在更早的2007年,AMD在3D now指令集中也加入了POPCNT指令。這兩家公司所生產的帶有POPCNT指令的CPU依靠各自的指令集完成向量運算和多媒體解碼等計算繁重的任務。
而POPCNT這個指令并非最早早2007年出現,如果追溯更早的運用案例,早在1960年代,IBM的7030機中就已經包含了這一個指令,這里要說明的一點是雖然年代久遠,但IBM 7030是一臺不折不扣的64位機。
雖然這種機器只有2兆內存,連現在的一張圖片都未必裝得下,但這東西是64位的。
后面的一些高端計算機產品,例如克雷的大型機、CDC Cyber 70、Sun的SPARC小型機都相繼在64bit指令中包含了這個指令。
只不過是intel和AMD在2010年代初期將這個指令集引入了個人電腦領域而已。
POPCNT的指令運算其實很簡單,例如一個二進制數字“011001001100”,經過POPCNT運算后會返回結果5,一個二進制數“001100110001”經過POPCNT運算也會返回5,再例如二進制數“0111”經過運算會返回3,再再例如一個十進制數字1000056經過運算會返回10……
實際上POPCNT的作用就是用來統計一個二進制數中1的個數。一個二進制數字中1的數量,在密碼學中有一個概念叫做漢明權重——Hamming weight,它的定義是指一個二進制數中非零位的個數量。二進制嘛不是0就是1,實際上,最早POPCNT這個指令就是為了取得漢明權重來建立起來的。
現在的新操作系統利用漢明權重主要會應用在三個方面:密碼學中密鑰生成、密碼哈希等功能漢明權重有著至關重要的作用,最簡單的應用上大家常說的ECC內存本身的校驗功能實際上也是基于漢明權重的,只不過ECC的校驗是在內存芯片中自主完成;大數據處理,機器學習、人工智能、大數據的領域中,需要對大規模數據進行快速、高效的處理和分析。而漢明權重的計算在這些數據處理任務中經常會被用到;性能優化,對越來越復雜的應用場景和用戶需求。漢明權重的計算是一種常見的計算任務,對其進行優化可以提高整體系統的性能。
實際上,漢明權重并不是一個特別復雜的操作過程,如果寫成C語言的話就是這樣的:
#include // 計算一個無符號整數的漢明權重int popcnt(unsigned int n) {int count = 0;while (n != 0) {count += n & 1; // 判斷最低位是否為1n >>= 1; // 右移一位,將最低位舍棄}return count;}int main() {unsigned int num = 0b10101011; // 二進制表示的數printf("漢明權重為:%d\", popcnt(num));return 0;}
從程序中我們可以看到調用popcnt函數后,函數中有一個循環進行計數,輸入的內容n有多少位,這個函數中的循環就要運行多少遍。
在CPU中固定的電路其指令只需要一步就可以得到輸入數的漢明權重
類似于intel的SIMD電路(上圖B)不僅僅簡化了電路處理,而且也提高了數據流的處理效率,整體的運算速度也就更快了。
這也就是為什么POPCNT被強制加入到系統支持功能中能給系統帶來的優勢。
對于現在的ARM用戶,例如蘋果M系列的電腦,本身ARM指令VCNT就是等價于POPCNT的,早在ARM CPU被設計之初就包含在CPU的功能之內了這個指令叫做VCNT,和POPCNT完成相同的操作。
實際上,Windows 11 24H2選擇強制使用POPCNT本來就是慢了一步的節奏,只不過因為windows的應用廣泛,導致大家一聽到CPU不帶POPCNT就不能用24H2出現了不必要的恐慌。但這種幾經上熱搜的消息,你如果深入的了解一下你就會發現,事情本身沒什么大不了的。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.