1. 程式人生 > >android手機之-------64位作業系統 與 64位處理器

android手機之-------64位作業系統 與 64位處理器


//////////一、引  言:64位相關概覽
1. 理論上,64 位處理器搭配64位系統執行64位軟體,執行效率將成倍提升,這也將是未來的發展趨勢。
但就目前來看,基於32位指令開發的應用仍是壓倒性優勢,所以指望64位處理器能有明顯的進步還得過一段時間才行。

2. 當64位處理器執行在64位系統下時,可以發揮它100%的效能體驗,在此狀態下執行基於64位指令開發的軟體時,效率是最高的。
即便是執行32位指令開發的軟體,64位處理器也會因為有專門的32位指令集,所以並不會有不相容的現象,但執行效率肯定沒有前者高。

//////////二、64位的不同意義
64 位軟體 :基於64位指令開發的應用


64 位作業系統:64位作業系統是指特別為64位架構(cpu處理器架構)計算機系統而設計的作業系統。
              如果你的電腦記憶體大於4G,那就要用64位的系統了,因為32位的Windows 7也好,Vista也好,最大都只支援3.25G的記憶體。
              而64位的windows 7最大將支援128G的記憶體(這也遠遠小於處理器能夠支援的最大記憶體16EB,現有作業系統的侷限性)。

64 位處理器:(可以處理64/32位程式)
       1. 指令集(與硬體電路匹配的指令系統): 處理器的工作就是執行指令,因此,我們還必須提到“指令集”這個概念。處理器的計算和控制都是通過各種指令完成的,每款處理器在設計時就規定了一系列與其硬體電路相配合的指令系統,這套指令的集合統稱指令集——你可以把它理解為處理器與外界溝通的語言。市面上有許多不同處理器指令集,就好比有些人的母語是英語,有些人的母語則是中文。

       目前大多數64位手機處理器都使用ARM公司的ARMv8 64位指令集。

       ARMv8指令集是ARM公司專門針對手機、移動和嵌入式裝置推出的64位指令集,它包含了AArch64、AArch32兩種主要執行狀態:AArch64專注於64位處理,AArch32則用來支援現有的32位ARM指令集。從這個角度來看ARMv8是一套不錯的指令集,它既支援未來的64位程式,也向下相容現有32位程式。有了ARMv8的支撐,以後的64位手機作業系統,如Android L 64bit都可以簡單、高效地支援現有的32位App,你不用擔心相容性問題。

       2. 處理器架構:為了幫助合作伙伴們更好更快的拿出有競爭力的產品,ARM還專門製作了兩個支援ARMv8指令集的處理器參考架構:Cortex-A53和Cortex-A57。如果說ARMv8指令集是一門語言,Cortex-A53和Cortex-A57就是基於這門語言的習題冊,ARM這位“老師”利用ARMv8佈置了一道道“題目”,廠商們只要照著做,就能生產出處理器成品了。

       3. 64位:具體到處理器內部,64位就是邏輯算數單元、暫存器和匯流排寬度都是64位(也就是8個位元組),相比32位而言能夠處理更長的指令(32位是最長指令為2的32次方,而64位可處理的最長指令的2的64次方)。

       4. 支援記憶體:64位處理器還能夠使用64位整型資料定址,簡單來說就是可以支援更大的執行記憶體,理論上,最大值可達16EB(17179869184GB),我們可以理解成是記憶體無上限。如定位高階的Cortex A57架構,支援最多48位定址,而面向中低端的Cortex A53則支援40位定址。雖然沒有做到徹徹底底的64位,但48位定址可以支援最多16EB(1EB=1024TB=1048576GB)記憶體,40位定址支援的記憶體容量也以TB為單位計算。在可以預見的未來,記憶體容量瓶頸在64位手機上將不復存在。


//////////三、64位處理器的優勢

1. 能夠處理更長的指令


2. 64位支援更大的記憶體
    64位處理器還能夠使用64位整型資料定址,簡單來說就是可以支援更大的執行記憶體,理論最大值可達16EB(17179869184GB),我們可以理解成是記憶體無上限。

  而32位系統大家都熟悉,理論最大支援4GB記憶體。這樣的差距就非常之明顯了,即便是短期內主流手機執行記憶體不會突破4GB,但相信哪個廠商都不想面對這個已知的天花板。

  支援更大的記憶體可以算64位處理器帶來的最立竿見影的提升了。處理器字長不但影響置零件的長度,還影響定址空間。目前32位ARM處理器的定址空間最大為4GB,算上系統佔用的空間,記憶體最多3.5GB就是極限了。顯然,對於越來越龐大複雜的系統和App而言,這是遠遠不夠的。

  而64位ARMv8處理器徹底解決了這個問題,定位高階的Cortex A57架構支援最多48位定址,而面向中低端的Cortex A53則支援40位定址。雖然沒有做到徹徹底底的64位,但48位定址可以支援最多16EB(1EB=1024TB=1048576GB)記憶體,40位定址支援的記憶體容量也以TB為單位計算。在可以預見的未來,記憶體容量瓶頸在64位手機上將不復存在。

3. 64位處理器本身就更先進

  就算不談64位,市面上那些64位處理器本身的硬體架構也更先進。ARM總共有兩個支援ARMv8 64位指令集的處理器參考架構:Cortex-A53和Cortex-A57,目前市面上絕大多數64位處理器都遵循這兩個架構開發而來。相比上一代Cortex-A7和Cortex-A15,Cortex-A53和Cortex-A57擁有並行度更高的流水線、準確率更高的分支預測單元、命中率更高的快取、更大的內部匯流排頻寬。總之,就像剛剛裝修過的房子一樣,A53和A57在各個方面都有了進步。

4. 64位是在為未來投資

  64位處理器支援再多記憶體,現階段手機記憶體容量也不會超過4GB,有沒有更實在一些的好處?答案也是肯定的。

  首先,ARMv8 64位處理器支援更多更強的通用暫存器(GPR),GPR個數從16個增加到31個,每一個都可以隨時訪問,寬度也拓展位64位。同時,ARMv8的NEON SIMD浮點指令集也得到了加強,它擁有32個128bit寬度暫存器、支援雙精度浮點執行、完整支援IEEE754標準。

  更多的暫存器意味著處理流程的“堵塞”現象大大減少了。過去,由於暫存器數量限制,一條指令往往要被拆成兩個步驟執行,而有了足夠多的暫存器,處理器就能在更少的週期內搞定指令,體現到App裡,就是開啟更快、等待時間更少、執行更流暢。

  其次,ARMv8指令集引入了AES、SHA-1、SHA-256硬體加密功能,這就好比把原來由手工的加密動作扔給了機械完成,效率提升極大。如果未來有人腦凍開啟,開發一個手機版的bitlocker加密/解密軟體,64位處理器比32位快上10倍也不是沒可能。

  說到底,更多、更強大的暫存器,更好的硬體加密功能,這些都需要App本身提供支援。還好,ARMv8是下一代64位手機必然的發展方向,ARM公司早已將相關開發規範分發給了開發者,谷歌Android L系統就推出了專門的64位版本。在可以預見的未來,我們還是有不小希望能用上真正發揮64位優勢的App的。換個角度而言,64位處理器能更好的適應未來。

//////////四、64處理器真的比32位處理器快一倍?

  這是一個經常被提起的問題,64位真的要比32位快一倍嗎?答案當然是NO,但原因很少有人講得清楚。

1. 指令集越長越好?
   指令集不是1+1=2這麼簡單,指令的長度並不直接等於效能。儘管從數字上看,64位指令的確要比32位指令更長,但很多時候我們並不需要那麼複雜的指令。一個應用程式(App)擁有成千上萬行程式碼,CPU在執行每條程式碼時又會把它分割成無數條指令,編譯器會自動決定怎樣將指令組合起來最高效,它們並非都需要64位的字長。
  一個典型的例子就是ARMv8指令集的資料模型。ARM在官方白皮書中指出,即使在純64位模式下,ARMv8指令集資料模型中也並非每個指令都要求64位格式。另外,官方白皮書還提到,ARMv8指令集架構定義的指令長度並非64位,而是標準的32位定長。這些事實告訴我們,指令集並非越長越好。

2. 應用程式是否是64位?  
   最後,64位確實好,但程式本身的支援更重要。前面我已經提到,ARMv8 64位指令集包含AArch64、AArch32兩種主要執行狀態,如果不針對AArch64重新編寫程式,那麼程式預設就會在AArch32狀態下執行——也就是說,現在的App都是32位的,跟64位一毛錢關係都沒有,在64位處理器上執行32位程式,效能不會有任何提升。

3. 唯處理器論效能?
   太片面了。比如,玩大型3D遊戲,GPU(圖形處理器)會更加影響幀數;而拍攝高清照片/4K視訊時,DSP(可程式設計訊號處理器)則事關重大。手機的SoC是包含CPU、GPU、DSP、通訊模組等大量功能的集合體,不同的應用場景會側重於不同部件,單獨以CPU一個部件來衡量效能未免太過片面。

//////////五、結 論

     從長遠考慮,64位處理器又絕對是未來的趨勢,不論是從硬體層面還是軟體層面考慮,64位能夠給我們帶來的更多的可能性,即便32位向64位過度是個痛苦的過程,但科技絕對不會停滯不前。早前8位CPU升級至16位,16位更新到32位,每一次升級都包含爭議,但現在回首望去的確也是歷史的必然。